{
  "version": 3,
  "sources": ["/cdn/shop/t/4/assets/gm-size-guide.js?n=208022568"],
  "sourcesContent": ["/**\n * gm-size-guide.js\n * Tabbed size guide for the Gilbert Maxwell PDP.\n *\n * Markup contract (rendered by snippets/gm-size-guide.liquid):\n *   <gm-size-guide data-gender=\"men|women\" data-kind=\"tops|bottoms|shoes\">\n *     [data-gm-sg-row] > button[data-gm-sg-gender]   Men's / Women's toggle\n *     [data-gm-sg-row] > button[data-gm-sg-kind]     Tops / Bottoms / Shoes tabs\n *     [data-gm-sg-panel=\"gender-kind\"]               six panels, one visible\n *   </gm-size-guide>\n *\n * The server renders the detected default. This element only switches:\n * click or arrow keys change the selection, and exactly one panel shows.\n */\n\nclass GmSizeGuide extends HTMLElement {\n  /** @type {AbortController | null} */\n  #abort = null;\n  #gender = 'men';\n  #kind = 'tops';\n\n  connectedCallback() {\n    this.#abort = new AbortController();\n    const { signal } = this.#abort;\n    this.#gender = this.dataset.gender || 'men';\n    this.#kind = this.dataset.kind || 'tops';\n    this.addEventListener('click', this.#onClick, { signal });\n    this.addEventListener('keydown', this.#onKeydown, { signal });\n    this.#render();\n  }\n\n  disconnectedCallback() {\n    this.#abort?.abort();\n    this.#abort = null;\n  }\n\n  /** @param {MouseEvent} event */\n  #onClick = (event) => {\n    const target = event.target instanceof Element ? event.target : null;\n    if (!target) return;\n\n    const genderButton = target.closest('[data-gm-sg-gender]');\n    if (genderButton && this.contains(genderButton)) {\n      this.#gender = genderButton.getAttribute('data-gm-sg-gender') || this.#gender;\n      this.#render();\n      return;\n    }\n\n    const kindTab = target.closest('[data-gm-sg-kind]');\n    if (kindTab && this.contains(kindTab)) {\n      this.#kind = kindTab.getAttribute('data-gm-sg-kind') || this.#kind;\n      this.#render();\n    }\n  };\n\n  /**\n   * Left, right, Home and End move within the row that has focus and\n   * activate the button they land on.\n   * @param {KeyboardEvent} event\n   */\n  #onKeydown = (event) => {\n    const keys = ['ArrowLeft', 'ArrowRight', 'Home', 'End'];\n    if (!keys.includes(event.key)) return;\n\n    const current = event.target instanceof Element ? event.target : null;\n    const row = current?.closest('[data-gm-sg-row]');\n    if (!current || !row || !this.contains(row)) return;\n\n    const buttons = Array.from(row.querySelectorAll('button'));\n    const index = buttons.indexOf(/** @type {HTMLButtonElement} */ (current));\n    if (index < 0) return;\n\n    let next = index;\n    if (event.key === 'ArrowLeft') next = (index - 1 + buttons.length) % buttons.length;\n    if (event.key === 'ArrowRight') next = (index + 1) % buttons.length;\n    if (event.key === 'Home') next = 0;\n    if (event.key === 'End') next = buttons.length - 1;\n\n    event.preventDefault();\n    buttons[next].focus();\n    buttons[next].click();\n  };\n\n  #render() {\n    const key = `${this.#gender}-${this.#kind}`;\n\n    this.querySelectorAll('[data-gm-sg-gender]').forEach((button) => {\n      const pressed = button.getAttribute('data-gm-sg-gender') === this.#gender;\n      button.setAttribute('aria-pressed', pressed ? 'true' : 'false');\n    });\n\n    this.querySelectorAll('[data-gm-sg-kind]').forEach((tab) => {\n      const kind = tab.getAttribute('data-gm-sg-kind');\n      const selected = kind === this.#kind;\n      tab.setAttribute('aria-selected', selected ? 'true' : 'false');\n      tab.setAttribute('tabindex', selected ? '0' : '-1');\n      const panel = this.querySelector(`[data-gm-sg-panel=\"${this.#gender}-${kind}\"]`);\n      if (panel && panel.id) tab.setAttribute('aria-controls', panel.id);\n    });\n\n    this.querySelectorAll('[data-gm-sg-panel]').forEach((panel) => {\n      panel.toggleAttribute('hidden', panel.getAttribute('data-gm-sg-panel') !== key);\n    });\n\n    this.dataset.gender = this.#gender;\n    this.dataset.kind = this.#kind;\n  }\n}\n\nif (!customElements.get('gm-size-guide')) {\n  customElements.define('gm-size-guide', GmSizeGuide);\n}\n"],
  "mappings": "AAeA,MAAM,oBAAoB,WAAY,CAEpC,OAAS,KACT,QAAU,MACV,MAAQ,OAER,mBAAoB,CAClB,KAAK,OAAS,IAAI,gBAClB,KAAM,CAAE,MAAO,EAAI,KAAK,OACxB,KAAK,QAAU,KAAK,QAAQ,QAAU,MACtC,KAAK,MAAQ,KAAK,QAAQ,MAAQ,OAClC,KAAK,iBAAiB,QAAS,KAAK,SAAU,CAAE,MAAO,CAAC,EACxD,KAAK,iBAAiB,UAAW,KAAK,WAAY,CAAE,MAAO,CAAC,EAC5D,KAAK,QAAQ,CACf,CAEA,sBAAuB,CACrB,KAAK,QAAQ,MAAM,EACnB,KAAK,OAAS,IAChB,CAGA,SAAY,OAAU,CACpB,MAAM,OAAS,MAAM,kBAAkB,QAAU,MAAM,OAAS,KAChE,GAAI,CAAC,OAAQ,OAEb,MAAM,aAAe,OAAO,QAAQ,qBAAqB,EACzD,GAAI,cAAgB,KAAK,SAAS,YAAY,EAAG,CAC/C,KAAK,QAAU,aAAa,aAAa,mBAAmB,GAAK,KAAK,QACtE,KAAK,QAAQ,EACb,MACF,CAEA,MAAM,QAAU,OAAO,QAAQ,mBAAmB,EAC9C,SAAW,KAAK,SAAS,OAAO,IAClC,KAAK,MAAQ,QAAQ,aAAa,iBAAiB,GAAK,KAAK,MAC7D,KAAK,QAAQ,EAEjB,EAOA,WAAc,OAAU,CAEtB,GAAI,CADS,CAAC,YAAa,aAAc,OAAQ,KAAK,EAC5C,SAAS,MAAM,GAAG,EAAG,OAE/B,MAAM,QAAU,MAAM,kBAAkB,QAAU,MAAM,OAAS,KAC3D,IAAM,SAAS,QAAQ,kBAAkB,EAC/C,GAAI,CAAC,SAAW,CAAC,KAAO,CAAC,KAAK,SAAS,GAAG,EAAG,OAE7C,MAAM,QAAU,MAAM,KAAK,IAAI,iBAAiB,QAAQ,CAAC,EACnD,MAAQ,QAAQ,QAA0C,OAAQ,EACxE,GAAI,MAAQ,EAAG,OAEf,IAAI,KAAO,MACP,MAAM,MAAQ,cAAa,MAAQ,MAAQ,EAAI,QAAQ,QAAU,QAAQ,QACzE,MAAM,MAAQ,eAAc,MAAQ,MAAQ,GAAK,QAAQ,QACzD,MAAM,MAAQ,SAAQ,KAAO,GAC7B,MAAM,MAAQ,QAAO,KAAO,QAAQ,OAAS,GAEjD,MAAM,eAAe,EACrB,QAAQ,IAAI,EAAE,MAAM,EACpB,QAAQ,IAAI,EAAE,MAAM,CACtB,EAEA,SAAU,CACR,MAAM,IAAM,GAAG,KAAK,OAAO,IAAI,KAAK,KAAK,GAEzC,KAAK,iBAAiB,qBAAqB,EAAE,QAAS,QAAW,CAC/D,MAAM,QAAU,OAAO,aAAa,mBAAmB,IAAM,KAAK,QAClE,OAAO,aAAa,eAAgB,QAAU,OAAS,OAAO,CAChE,CAAC,EAED,KAAK,iBAAiB,mBAAmB,EAAE,QAAS,KAAQ,CAC1D,MAAM,KAAO,IAAI,aAAa,iBAAiB,EACzC,SAAW,OAAS,KAAK,MAC/B,IAAI,aAAa,gBAAiB,SAAW,OAAS,OAAO,EAC7D,IAAI,aAAa,WAAY,SAAW,IAAM,IAAI,EAClD,MAAM,MAAQ,KAAK,cAAc,sBAAsB,KAAK,OAAO,IAAI,IAAI,IAAI,EAC3E,OAAS,MAAM,IAAI,IAAI,aAAa,gBAAiB,MAAM,EAAE,CACnE,CAAC,EAED,KAAK,iBAAiB,oBAAoB,EAAE,QAAS,OAAU,CAC7D,MAAM,gBAAgB,SAAU,MAAM,aAAa,kBAAkB,IAAM,GAAG,CAChF,CAAC,EAED,KAAK,QAAQ,OAAS,KAAK,QAC3B,KAAK,QAAQ,KAAO,KAAK,KAC3B,CACF,CAEK,eAAe,IAAI,eAAe,GACrC,eAAe,OAAO,gBAAiB,WAAW",
  "names": []
}
