{"version":3,"file":"accordion-elements-section-xxxxxxxxxxxxxxxxxxxx.min.js","mappings":"yBAQA,MAAMA,yBAAyBC,YAKtBC,WAAAA,GACLC,QAAQ,KAHFC,kCAAoCC,KAAKC,6BAA6BC,KAAKF,MAIjFA,KAAKG,aAAa,CAAEC,KAAM,SAC1BJ,KAAKK,WAAWC,UAAY,UAAHC,OChB7B,yHDgBgD,YAAAA,OEfrC,gBFgBT,CAEOC,iBAAAA,GACLR,KAAKS,iBAAiB,gCAAiCT,KAAKD,kCAC9D,CAEOW,oBAAAA,GACLV,KAAKW,oBAAoB,gCACvBX,KAAKD,kCACT,CAEQE,4BAAAA,CAA6BW,GAGnC,MAAMC,EACJb,KAAKc,cAA6B,wCAChCD,IACFA,EAAoBE,QAAQC,SAAW,SAGzC,MAAMC,EAA6BL,EAAMM,OACrCD,IAAgBJ,IAIpBI,EAAYF,QAAQC,SAAW,OACjC,EASGG,eAAeC,IAAI,sBACtBD,eAAeE,OAAO,oBAAqB1B,kBG1C7C,MAAM2B,sBAAsB1B,YAC1B,6BAAkB2B,GAChB,MAAO,CACL,gBAEJ,CAcO1B,WAAAA,GACLC,QAAQ,KALF0B,sBAAuB,EAAK,KAE5BC,qBAAuBzB,KAAK0B,gBAAgBxB,KAAKF,MAIvDA,KAAKG,aAAa,CAAEC,KAAM,SAC1BJ,KAAKK,WAAWC,UAAY,UAAHC,OCjC7B,w5CDiCgD,YAAAA,OEhCrC,2NFiCT,CAEOC,iBAAAA,GACLR,KAAK2B,QACP,CAEOjB,oBAAAA,GACUV,KAAKK,WAAWS,cAAc,UACtCH,oBAAoB,QAASX,KAAKyB,qBAC3C,CAEOG,wBAAAA,CAAyBC,EAAcC,EAAkBC,GACzD/B,KAAKgC,aAAeD,IAAaD,GAItC9B,KAAK2B,QACP,CAEQA,MAAAA,GACN,IAAK3B,KAAKwB,qBAAsB,CAC9BxB,KAAKwB,sBAAuB,EAEbxB,KAAKK,WAAWS,cAAc,UACtCL,iBAAiB,QAAST,KAAKyB,qBACxC,CAEezB,KAAKK,WAAWS,cAAc,UACtCmB,aAAa,gBAAiBjC,KAAKe,QAAQC,UAAY,QAChE,CAEQU,eAAAA,CAAgBQ,GACtB,MAAMtB,EAAQ,IAAIuB,MAAM,gCAAiC,CACvDC,YAAY,EACZC,SAAS,IAEXrC,KAAKsC,cAAc1B,EACrB,EAaGO,eAAeC,IAAI,mBACtBD,eAAeE,OAAO,iBAAkBC,c","sources":["webpack://lange/./scripts/sections/accordion-elements/accordion/index.ts","webpack://lange/./scripts/sections/accordion-elements/accordion/index.scss","webpack://lange/./scripts/sections/accordion-elements/accordion/index.html","webpack://lange/./scripts/sections/accordion-elements/accordion-item/index.ts","webpack://lange/./scripts/sections/accordion-elements/accordion-item/index.scss","webpack://lange/./scripts/sections/accordion-elements/accordion-item/index.html"],"sourcesContent":["import type { CustomElement } from '@integrabeauty/custom-elements';\nimport html from './index.html';\nimport styles from './index.scss';\n\n/**\n * A custom element that handles accordion functionality. Accordion items should be passed\n * as <accordion-item> elements into the default slot.\n */\nclass AccordionElement extends HTMLElement implements CustomElement {\n  public shadowRoot!: ShadowRoot;\n\n  private onAccordionItemHeaderClickedBound = this.onAccordionItemHeaderClicked.bind(this);\n\n  public constructor() {\n    super();\n    this.attachShadow({ mode: 'open' });\n    this.shadowRoot.innerHTML = `<style>${styles}</style>${html}`;\n  }\n\n  public connectedCallback() {\n    this.addEventListener('accordion-item-header-clicked', this.onAccordionItemHeaderClickedBound);\n  }\n\n  public disconnectedCallback() {\n    this.removeEventListener('accordion-item-header-clicked',\n      this.onAccordionItemHeaderClickedBound);\n  }\n\n  private onAccordionItemHeaderClicked(event: Event) {\n    type AccordionItem = HTMLElementTagNameMap['accordion-item'];\n\n    const currentlyActiveItem =\n      this.querySelector<AccordionItem>('accordion-item[data-expanded=\"true\"]');\n    if (currentlyActiveItem) {\n      currentlyActiveItem.dataset.expanded = 'false';\n    }\n\n    const clickedItem = <AccordionItem>event.target;\n    if (clickedItem === currentlyActiveItem) {\n      return;\n    }\n\n    clickedItem.dataset.expanded = 'true';\n  }\n}\n\ndeclare global {\n  interface HTMLElementTagNameMap {\n    'accordion-element': AccordionElement;\n  }\n}\n\nif (!customElements.get('accordion-element')) {\n  customElements.define('accordion-element', AccordionElement);\n}\n","export default \":host{display:block}::slotted(accordion-item){margin-bottom:-1px}::slotted(accordion-item:last-child){margin-bottom:0}\";","// Module\nvar code = \"<slot></slot>\";\n// Exports\nexport default code;","import type { CustomElement } from '@integrabeauty/custom-elements';\nimport html from './index.html';\nimport styles from './index.scss';\n\n/**\n * A custom element representing a single item in an accordion component.\n *\n * The AccordionItem component manages an `expanded` state through the `data-expanded` attribute\n * and emits a custom event when its header is clicked. The parent <accordion-element> element\n * controls which item should be expanded/collapsed by setting the `data-expanded` attribute.\n */\nclass AccordionItem extends HTMLElement implements CustomElement {\n  public static get observedAttributes() {\n    return [\n      'data-expanded'\n    ];\n  }\n\n  readonly dataset!: {\n    /**\n     * Whether the component is expanded/collapsed.\n     */\n    expanded: 'false' | 'true';\n  };\n\n  public shadowRoot!: ShadowRoot;\n  private listenersInitialized = false;\n\n  private onHeaderClickedBound = this.onHeaderClicked.bind(this);\n\n  public constructor() {\n    super();\n    this.attachShadow({ mode: 'open' });\n    this.shadowRoot.innerHTML = `<style>${styles}</style>${html}`;\n  }\n\n  public connectedCallback() {\n    this.render();\n  }\n\n  public disconnectedCallback() {\n    const button = this.shadowRoot.querySelector('button');\n    button.removeEventListener('click', this.onHeaderClickedBound);\n  }\n\n  public attributeChangedCallback(name: string, oldValue: string, newValue: string) {\n    if (!this.isConnected || newValue === oldValue) {\n      return;\n    }\n\n    this.render();\n  }\n\n  private render() {\n    if (!this.listenersInitialized) {\n      this.listenersInitialized = true;\n\n      const button = this.shadowRoot.querySelector('button');\n      button.addEventListener('click', this.onHeaderClickedBound);\n    }\n\n    const button = this.shadowRoot.querySelector('button');\n    button.setAttribute('aria-expanded', this.dataset.expanded || 'false');\n  }\n\n  private onHeaderClicked(_event: Event) {\n    const event = new Event('accordion-item-header-clicked', {\n      cancelable: false,\n      bubbles: true\n    });\n    this.dispatchEvent(event);\n  }\n}\n\ndeclare global {\n  interface WindowEventMap {\n    'accordion-item-header-clicked': Event;\n  }\n\n  interface HTMLElementTagNameMap {\n    'accordion-item': AccordionItem;\n  }\n}\n\nif (!customElements.get('accordion-item')) {\n  customElements.define('accordion-item', AccordionItem);\n}\n","export default \":host{border:1px solid #dbdbdb;display:block;width:100%}:host([data-expanded=true]) .icon{transform:rotate(180deg)}:host([data-expanded=true]) .content{max-height:9999px;transition-delay:.4s;transition-duration:.4s;transition-timing-function:cubic-bezier(.5,0,1,0)}button{align-items:center;appearance:none;background:none;border:none;color:inherit;cursor:pointer;display:flex;font:inherit;font-size:1.125rem;font-weight:600;height:auto;justify-content:space-between;letter-spacing:.07em;line-height:1.3333;margin:0;outline:none;padding:11px 27px 11px 18px;text-transform:uppercase;width:100%}button:focus{outline:2px solid #000;outline-offset:1px}button:hover .icon:after,button:hover .icon:before{background-color:#b66c6d}.icon{background-image:url(\\\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' viewBox='0 0 24 24'%3E%3Cpath stroke='%231e1e1e' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m6 9.673 6 6 6-6'/%3E%3C/svg%3E\\\");background-position:50%;background-repeat:no-repeat;background-size:contain;color:#0000;display:block;height:24px;position:relative;width:24px}.content{font-size:.875rem;max-height:0;overflow:hidden;transition-duration:.4s;transition-property:max-height;transition-timing-function:cubic-bezier(0,1,0,1)}@media only screen and (min-width:768px){.content{font-size:1rem}}slot[name=content]{display:block;padding:16px}\";","// Module\nvar code = \"<button aria-expanded=\\\"false\\\" aria-controls=\\\"content\\\"><slot name=\\\"title\\\"></slot><span class=\\\"icon\\\" aria-hidden=\\\"true\\\"></span></button><div id=\\\"content\\\" class=\\\"content\\\" role=\\\"region\\\"><slot name=\\\"content\\\"></slot></div>\";\n// Exports\nexport default code;"],"names":["AccordionElement","HTMLElement","constructor","super","onAccordionItemHeaderClickedBound","this","onAccordionItemHeaderClicked","bind","attachShadow","mode","shadowRoot","innerHTML","concat","connectedCallback","addEventListener","disconnectedCallback","removeEventListener","event","currentlyActiveItem","querySelector","dataset","expanded","clickedItem","target","customElements","get","define","AccordionItem","observedAttributes","listenersInitialized","onHeaderClickedBound","onHeaderClicked","render","attributeChangedCallback","name","oldValue","newValue","isConnected","setAttribute","_event","Event","cancelable","bubbles","dispatchEvent"],"sourceRoot":""}