{"version":3,"file":"container-stacked-v2.mjs","sources":["../../../../src/container-stacked/v2/container-stacked.ts"],"sourcesContent":["import { html, unsafeCSS, nothing, type CSSResult, type TemplateResult } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { BaseOrganism, type ContentAlignment } from '../../base-organism/base-organism';\nimport { appendStylesheet, warnOnDeprecatedSlot } from '../../core/utils';\nimport styles from './container-stacked.scss?inline';\nimport slotStyles from './container-stacked.slot.scss?inline';\n\ntype SlotCount = 2 | 3 | 4;\n\n@customElement('pips-v2-container-stacked')\nexport class ContainerStackedV2 extends BaseOrganism {\n  static override styles: CSSResult[] = [...BaseOrganism.styles, unsafeCSS(styles)];\n\n  @property({ type: Number, reflect: true })\n  slots: SlotCount = 4;\n\n  override connectedCallback(): void {\n    super.connectedCallback();\n    appendStylesheet({\n      target: this,\n      styles: slotStyles,\n      name: 'pips-v2-container-stacked-slot',\n    });\n  }\n\n  protected override renderLoading(): TemplateResult | typeof nothing {\n    return nothing;\n  }\n\n  /** The slot stylesheet centered these fields before `content-alignment` existed. */\n  protected override get defaultContentAlignment(): ContentAlignment {\n    return 'center';\n  }\n\n  private readonly onSlotChange = (): void => {\n    this.requestUpdate();\n  };\n\n  private onDeprecatedHeadingCopySlot(e: Event) {\n    warnOnDeprecatedSlot(e, '[pips-v2-container-stacked] slot=\"headingCopy\" is deprecated. Use slot=\"heading\" instead.');\n    this.requestUpdate();\n  }\n\n  private onDeprecatedSubCopySlot(e: Event) {\n    warnOnDeprecatedSlot(e, '[pips-v2-container-stacked] slot=\"subCopy\" is deprecated. Use slot=\"body\" instead.');\n    this.requestUpdate();\n  }\n\n  private getLayoutClass(): string {\n    const layouts = ['layout--full-width', 'layout--half-width', 'layout--third-width', 'layout--quarter-width'];\n    const index = Math.min(this.slots - 1, layouts.length - 1);\n    return layouts[Math.max(index, 0)];\n  }\n\n  private hasHeading(): boolean {\n    return this.querySelector(':scope > [slot=\"heading\"], :scope > [slot=\"headingCopy\"]') !== null;\n  }\n\n  private hasBody(): boolean {\n    return this.querySelector(':scope > [slot=\"body\"], :scope > [slot=\"subCopy\"]') !== null;\n  }\n\n  protected override renderContent(): TemplateResult {\n    const slotElements: TemplateResult[] = [];\n    for (let i = 0; i < this.slots; i++) {\n      slotElements.push(html`\n        <div class=\"${this.getLayoutClass()}\">\n          <slot name=\"slot-${i}\"></slot>\n        </div>\n      `);\n    }\n\n    return html`\n      ${this.hasHeading()\n        ? html`\n            <div class=\"organism-heading layout--full-width${this.alignmentClass('heading')}\">\n              <slot name=\"heading\" @slotchange=${this.onSlotChange}></slot>\n              <slot name=\"headingCopy\" @slotchange=\"${this.onDeprecatedHeadingCopySlot}\"></slot>\n            </div>\n          `\n        : nothing}\n      <div class=\"organism-items layout--full-width\">\n        <div class=\"content-container layout-container\">\n          ${slotElements}\n        </div>\n      </div>\n      ${this.hasBody()\n        ? html`\n            <div class=\"organism-body layout--full-width${this.alignmentClass('body')}\">\n              <slot name=\"body\" @slotchange=${this.onSlotChange}></slot>\n              <slot name=\"subCopy\" @slotchange=\"${this.onDeprecatedSubCopySlot}\"></slot>\n            </div>\n          `\n        : nothing}\n    `;\n  }\n}\n"],"names":["ContainerStackedV2","BaseOrganism","constructor","super","arguments","this","slots","onSlotChange","requestUpdate","connectedCallback","appendStylesheet","target","styles","name","nothing","defaultContentAlignment","e","warnOnDeprecatedSlot","layouts","index","Math","min","length","max","querySelector","hasBody","slotElements","i","push","html","getLayoutClass","hasHeading","alignmentClass","onDeprecatedHeadingCopySlot","onDeprecatedSubCopySlot","unsafeCSS","__decorateClass","property","type","Number","reflect","prototype","customElement"],"mappings":"m2CAUO,IAAMA,EAAN,cAAiCC,EAAjC,aAAAC,CAAAC,SAAAC,SAAAA,EAILC,KAAAC,MAAmB,EAoBnBD,KAAiBE,aAAe,IAAA,CAC9BF,KAAKG,cAAAA,CAAAA,CACP,CApBS,mBAAAC,CACPN,MAAMM,kBAAAA,EACNC,EAAiB,CACfC,OAAQN,KACRO,+tFACAC,KAAM,kCAEV,CAEmB,gBACjB,OAAOC,CACT,CAGA,IAAA,yBAAuBC,CACrB,MAAO,QACT,CAMQ,4BAA4BC,EAAAA,CAClCC,EAAqBD,EAAG,2FAAA,EACxBX,KAAKG,eACP,CAEQ,wBAAwBQ,EAAAA,CAC9BC,EAAqBD,EAAG,oFAAA,EACxBX,KAAKG,eACP,CAEQ,iBACN,MAAMU,EAAU,CAAC,qBAAsB,qBAAsB,sBAAuB,yBAC9EC,EAAQC,KAAKC,IAAIhB,KAAKC,MAAQ,EAAGY,EAAQI,OAAS,GACxD,OAAOJ,EAAQE,KAAKG,IAAIJ,EAAO,GACjC,CAEQ,aACN,OAAOd,KAAKmB,cAAc,0DAAA,IAAgE,IAC5F,CAEQ,SAAAC,CACN,OAAOpB,KAAKmB,cAAc,uDAAyD,IACrF,CAEmB,gBACjB,MAAME,EAAiC,GACvC,QAASC,EAAI,EAAGA,EAAItB,KAAKC,MAAOqB,IAC9BD,EAAaE,KAAKC;AAAAA,sBACFxB,KAAKyB,eAAAA,CAAAA;AAAAA,6BACEH,CAAAA;AAAAA;AAAAA,OAKzB,EAAA,OAAOE;AAAAA,QACHxB,KAAK0B,aACHF;AAAAA,6DACmDxB,KAAK2B,eAAe,SAAA,CAAA;AAAA,iDAChC3B,KAAKE,YAAAA;AAAAA,sDACAF,KAAK4B,2BAAAA;AAAAA;AAAAA,YAGjDnB,CAAAA;AAAAA;AAAAA;AAAAA,YAGEY,CAAAA;AAAAA;AAAAA;AAAAA,QAGJrB,KAAKoB,UACHI;AAAAA,0DACgDxB,KAAK2B,eAAe,MAAA,CAAA;AAAA,8CAChC3B,KAAKE,YAAAA;AAAAA,kDACDF,KAAK6B,uBAAAA;AAAAA;AAAAA,YAG7CpB,CAAAA;AAAAA,KAER,CAAA,EArFWd,EACKY,OAAsB,CAAA,GAAIX,EAAaW,OAAQuB,wIAG/DC,EAAA,CADCC,EAAS,CAAEC,KAAMC,OAAQC,QAAAA,EAAS,CAAA,CAAA,EAHxBxC,EAIXyC,UAAA,QAAA,CAAA,EAJWzC,EAANoC,EAAA,CADNM,EAAc,2BAAA,CAAA,EACF1C,CAAAA"}