@mhmo91/schmancy 0.2.65 → 0.2.70
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{animated-text-C1UstA51.js → animated-text-Drgel89a.js} +3 -3
- package/dist/{animated-text-C1UstA51.js.map → animated-text-Drgel89a.js.map} +1 -1
- package/dist/{animated-text-k30n5ffs.cjs → animated-text-ZUEQQHIA.cjs} +2 -2
- package/dist/{animated-text-k30n5ffs.cjs.map → animated-text-ZUEQQHIA.cjs.map} +1 -1
- package/dist/animated-text.cjs +1 -1
- package/dist/animated-text.js +1 -1
- package/dist/area.cjs +1 -1
- package/dist/{area.component-TDK2-3sf.js → area.component-BWniFh72.js} +4 -4
- package/dist/{area.component-TDK2-3sf.js.map → area.component-BWniFh72.js.map} +1 -1
- package/dist/{area.component-CDyk4TQX.cjs → area.component-Cfvbb333.cjs} +2 -2
- package/dist/{area.component-CDyk4TQX.cjs.map → area.component-Cfvbb333.cjs.map} +1 -1
- package/dist/area.js +1 -1
- package/dist/{autocomplete-BdqEtlUZ.js → autocomplete-CaqTiWXc.js} +3 -3
- package/dist/autocomplete-CaqTiWXc.js.map +1 -0
- package/dist/{autocomplete-Cwn1Bwj7.cjs → autocomplete-pDDovAE3.cjs} +2 -2
- package/dist/autocomplete-pDDovAE3.cjs.map +1 -0
- package/dist/autocomplete.cjs +1 -1
- package/dist/autocomplete.js +1 -1
- package/dist/busy.cjs +1 -1
- package/dist/busy.js +1 -1
- package/dist/button.cjs +1 -1
- package/dist/button.js +1 -1
- package/dist/card.cjs +1 -1
- package/dist/card.js +1 -1
- package/dist/{checkbox-g8T27Ih6.cjs → checkbox-9lpB6PGQ.cjs} +3 -3
- package/dist/{checkbox-kWG8GEGF.js.map → checkbox-9lpB6PGQ.cjs.map} +1 -1
- package/dist/{checkbox-kWG8GEGF.js → checkbox-BClcyH7K.js} +4 -4
- package/dist/checkbox-BClcyH7K.js.map +1 -0
- package/dist/checkbox.cjs +1 -1
- package/dist/checkbox.js +1 -1
- package/dist/{chips-8G-fC-BB.cjs → chips-C5BbSIAo.cjs} +2 -2
- package/dist/chips-C5BbSIAo.cjs.map +1 -0
- package/dist/{chips-CcVWASnN.js → chips-CECbQF-e.js} +3 -3
- package/dist/chips-CECbQF-e.js.map +1 -0
- package/dist/chips.cjs +1 -1
- package/dist/chips.js +1 -1
- package/dist/components.cjs +1 -1
- package/dist/components.js +1 -1
- package/dist/consume-Bb7_UzYd.cjs +2 -0
- package/dist/consume-Bb7_UzYd.cjs.map +1 -0
- package/dist/{consume-DSKPc5vj.js → consume-fRVATvdE.js} +8 -8
- package/dist/consume-fRVATvdE.js.map +1 -0
- package/dist/content-drawer.cjs +1 -1
- package/dist/content-drawer.js +1 -1
- package/dist/context-CHWQnKZ-.cjs +2 -0
- package/dist/{context-BATZj31H.cjs.map → context-CHWQnKZ-.cjs.map} +1 -1
- package/dist/context-YZmnxxIi.js +6 -0
- package/dist/{context-5nmahssp.js.map → context-YZmnxxIi.js.map} +1 -1
- package/dist/{date-range-DmaG6n9K.js → date-range-BhYqCSZp.js} +3 -3
- package/dist/{date-range-DmaG6n9K.js.map → date-range-BhYqCSZp.js.map} +1 -1
- package/dist/{date-range-DT5Gc-8v.cjs → date-range-J-JT-8ba.cjs} +2 -2
- package/dist/{date-range-DT5Gc-8v.cjs.map → date-range-J-JT-8ba.cjs.map} +1 -1
- package/dist/date-range.cjs +1 -1
- package/dist/date-range.js +1 -1
- package/dist/{delay-Dcxd6izx.cjs → delay-CpKz9qoJ.cjs} +2 -2
- package/dist/delay-CpKz9qoJ.cjs.map +1 -0
- package/dist/{delay-3BI6NTLb.js → delay-tojIaYXv.js} +6 -6
- package/dist/delay-tojIaYXv.js.map +1 -0
- package/dist/delay.cjs +1 -1
- package/dist/delay.js +1 -1
- package/dist/{divider-2FKklOvJ.cjs → divider-CjeXqpY8.cjs} +2 -2
- package/dist/{divider-2FKklOvJ.cjs.map → divider-CjeXqpY8.cjs.map} +1 -1
- package/dist/{divider-BoSDlAmp.js → divider-Dp6Usk1d.js} +3 -3
- package/dist/{divider-BoSDlAmp.js.map → divider-Dp6Usk1d.js.map} +1 -1
- package/dist/divider.cjs +1 -1
- package/dist/divider.js +1 -1
- package/dist/{flex-Rc813PWc.js → flex-CLZyrhZ_.js} +2 -2
- package/dist/{flex-Rc813PWc.js.map → flex-CLZyrhZ_.js.map} +1 -1
- package/dist/{flex-wH1HLvFA.cjs → flex-lEIKuhdY.cjs} +2 -2
- package/dist/{flex-wH1HLvFA.cjs.map → flex-lEIKuhdY.cjs.map} +1 -1
- package/dist/{form-k_nFgiSi.js → form-BfV5JUNV.js} +2 -2
- package/dist/{form-k_nFgiSi.js.map → form-BfV5JUNV.js.map} +1 -1
- package/dist/{form-C4cWM0em.cjs → form-Bnzb6YbT.cjs} +2 -2
- package/dist/{form-C4cWM0em.cjs.map → form-Bnzb6YbT.cjs.map} +1 -1
- package/dist/form.cjs +1 -1
- package/dist/form.js +1 -1
- package/dist/{icon-ClskDmBq.js → icon-CS7L7dYv.js} +3 -3
- package/dist/{icon-ClskDmBq.js.map → icon-CS7L7dYv.js.map} +1 -1
- package/dist/{icon-CLgg4kma.cjs → icon-DXyemmCt.cjs} +2 -2
- package/dist/{icon-CLgg4kma.cjs.map → icon-DXyemmCt.cjs.map} +1 -1
- package/dist/{icon-button-BkNubwVr.cjs → icon-button-CWUpvLIc.cjs} +2 -2
- package/dist/{icon-button-BkNubwVr.cjs.map → icon-button-CWUpvLIc.cjs.map} +1 -1
- package/dist/{icon-button-DTmOv8Ny.js → icon-button-GJ_fOvRP.js} +3 -3
- package/dist/{icon-button-DTmOv8Ny.js.map → icon-button-GJ_fOvRP.js.map} +1 -1
- package/dist/icons.cjs +1 -1
- package/dist/icons.js +1 -1
- package/dist/index-CuY8m6ta.js.map +1 -1
- package/dist/index-DyJ0oDpR.cjs.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +33 -33
- package/dist/{input-DMV5Kg7d.js → input-BOity9fs.js} +4 -4
- package/dist/input-BOity9fs.js.map +1 -0
- package/dist/{input-BqSrvFYo.cjs → input-DP4Mi51t.cjs} +3 -3
- package/dist/input-DP4Mi51t.cjs.map +1 -0
- package/dist/input.cjs +1 -1
- package/dist/input.js +1 -1
- package/dist/layout.cjs +1 -1
- package/dist/layout.js +1 -1
- package/dist/{list-CZlRzIBI.js → list-CGCKKnfk.js} +5 -5
- package/dist/{list-CZlRzIBI.js.map → list-CGCKKnfk.js.map} +1 -1
- package/dist/{list-CkruFXk2.cjs → list-CwampsMO.cjs} +2 -2
- package/dist/{list-CkruFXk2.cjs.map → list-CwampsMO.cjs.map} +1 -1
- package/dist/list.cjs +1 -1
- package/dist/list.js +1 -1
- package/dist/{litElement.mixin-AiJtwDLp.cjs → litElement.mixin-C-c-2rdW.cjs} +2 -2
- package/dist/{litElement.mixin-AiJtwDLp.cjs.map → litElement.mixin-C-c-2rdW.cjs.map} +1 -1
- package/dist/{litElement.mixin-BSd9c8Xf.js → litElement.mixin-vAR9BIyD.js} +2 -2
- package/dist/{litElement.mixin-BSd9c8Xf.js.map → litElement.mixin-vAR9BIyD.js.map} +1 -1
- package/dist/{menu-D5N7PhDE.js → menu-BW3qO2A1.js} +13 -13
- package/dist/{menu-D5N7PhDE.js.map → menu-BW3qO2A1.js.map} +1 -1
- package/dist/{menu-TbqjiUg2.cjs → menu-Dem8Myie.cjs} +3 -3
- package/dist/{menu-TbqjiUg2.cjs.map → menu-Dem8Myie.cjs.map} +1 -1
- package/dist/menu.cjs +1 -1
- package/dist/menu.js +1 -1
- package/dist/nav-drawer.cjs +1 -1
- package/dist/nav-drawer.js +1 -1
- package/dist/notification.cjs +1 -1
- package/dist/notification.js +1 -1
- package/dist/{option-J1ewccBk.cjs → option-C-gBYdv8.cjs} +2 -2
- package/dist/{option-J1ewccBk.cjs.map → option-C-gBYdv8.cjs.map} +1 -1
- package/dist/{option-Bc31vPPI.js → option-DCA4GidB.js} +2 -2
- package/dist/{option-Bc31vPPI.js.map → option-DCA4GidB.js.map} +1 -1
- package/dist/option.cjs +1 -1
- package/dist/option.js +1 -1
- package/dist/{outlet-eGbH9Byt.cjs → outlet-6MP6k9wf.cjs} +3 -3
- package/dist/{outlet-eGbH9Byt.cjs.map → outlet-6MP6k9wf.cjs.map} +1 -1
- package/dist/{outlet-DWLojgRf.js → outlet-jd-bRdrF.js} +21 -21
- package/dist/{outlet-DWLojgRf.js.map → outlet-jd-bRdrF.js.map} +1 -1
- package/dist/{payment-card-form-V5STwP-8.cjs → payment-card-form-BZiEUnKn.cjs} +2 -2
- package/dist/payment-card-form-BZiEUnKn.cjs.map +1 -0
- package/dist/{payment-card-form-Ctv_rIi1.js → payment-card-form-CInoqXsW.js} +3 -3
- package/dist/payment-card-form-CInoqXsW.js.map +1 -0
- package/dist/provide-BLSgVvMJ.js +105 -0
- package/dist/provide-BLSgVvMJ.js.map +1 -0
- package/dist/provide-DSU87U5x.cjs +2 -0
- package/dist/provide-DSU87U5x.cjs.map +1 -0
- package/dist/{radio-group-DPqaJa00.cjs → radio-group-B4Of8FBA.cjs} +2 -2
- package/dist/{radio-group-DPqaJa00.cjs.map → radio-group-B4Of8FBA.cjs.map} +1 -1
- package/dist/{radio-group-Pq_gbHVb.js → radio-group-C98aizGb.js} +2 -2
- package/dist/{radio-group-Pq_gbHVb.js.map → radio-group-C98aizGb.js.map} +1 -1
- package/dist/radio-group.cjs +1 -1
- package/dist/radio-group.js +1 -1
- package/dist/redispatch-event-vOGO-T8W.js.map +1 -1
- package/dist/redispatch-event-yBlefmeU.cjs.map +1 -1
- package/dist/{select-CENAt67G.cjs → select-BTSVFloo.cjs} +2 -2
- package/dist/{select-CENAt67G.cjs.map → select-BTSVFloo.cjs.map} +1 -1
- package/dist/{select-CmNozz2O.js → select-Iem1gGwb.js} +3 -3
- package/dist/{select-CmNozz2O.js.map → select-Iem1gGwb.js.map} +1 -1
- package/dist/select.cjs +1 -1
- package/dist/select.js +1 -1
- package/dist/{sheet-CpxhwF3c.cjs → sheet-BgbV6g2F.cjs} +2 -2
- package/dist/{sheet-CpxhwF3c.cjs.map → sheet-BgbV6g2F.cjs.map} +1 -1
- package/dist/{sheet-DEnU17L8.js → sheet-WsaFx6-i.js} +6 -6
- package/dist/{sheet-DEnU17L8.js.map → sheet-WsaFx6-i.js.map} +1 -1
- package/dist/sheet.cjs +1 -1
- package/dist/sheet.js +1 -1
- package/dist/{slider-Bwzc2P35.js → slider-BOXmzToY.js} +3 -3
- package/dist/{slider-Bwzc2P35.js.map → slider-BOXmzToY.js.map} +1 -1
- package/dist/{slider-0Uk2z9y_.cjs → slider-CR2itGT0.cjs} +2 -2
- package/dist/{slider-0Uk2z9y_.cjs.map → slider-CR2itGT0.cjs.map} +1 -1
- package/dist/slider.cjs +1 -1
- package/dist/slider.js +1 -1
- package/dist/{spinner-N0DFwOAl.js → spinner-BKVFC3qz.js} +18 -18
- package/dist/{spinner-N0DFwOAl.js.map → spinner-BKVFC3qz.js.map} +1 -1
- package/dist/{spinner-Azsjno5r.cjs → spinner-Do8LNQoW.cjs} +6 -6
- package/dist/{spinner-Azsjno5r.cjs.map → spinner-Do8LNQoW.cjs.map} +1 -1
- package/dist/{surface-KPpEcbzd.cjs → surface-CfAH2c9U.cjs} +2 -2
- package/dist/{surface-KPpEcbzd.cjs.map → surface-CfAH2c9U.cjs.map} +1 -1
- package/dist/{surface-yaUvZzID.js → surface-Ci1xR_sr.js} +4 -4
- package/dist/{surface-yaUvZzID.js.map → surface-Ci1xR_sr.js.map} +1 -1
- package/dist/surface.cjs +1 -1
- package/dist/surface.js +1 -1
- package/dist/table-379iohVA.cjs +6 -0
- package/dist/{table-CBJ26MIg.cjs.map → table-379iohVA.cjs.map} +1 -1
- package/dist/table-iRPRoThv.js +21 -0
- package/dist/{table-Ci3U3uYV.js.map → table-iRPRoThv.js.map} +1 -1
- package/dist/table.cjs +1 -1
- package/dist/table.js +1 -1
- package/dist/{tabs-group-CXTZCyMb.cjs → tabs-group-BTUwCflk.cjs} +2 -2
- package/dist/{tabs-group-CXTZCyMb.cjs.map → tabs-group-BTUwCflk.cjs.map} +1 -1
- package/dist/{tabs-group-Ccy51d97.js → tabs-group-BYuZ4dIc.js} +4 -4
- package/dist/{tabs-group-Ccy51d97.js.map → tabs-group-BYuZ4dIc.js.map} +1 -1
- package/dist/tabs.cjs +1 -1
- package/dist/tabs.js +1 -1
- package/dist/tailwind.mixin-B7_ZpVpC.cjs +2 -0
- package/dist/{tailwind.mixin-04vClyRW.cjs.map → tailwind.mixin-B7_ZpVpC.cjs.map} +1 -1
- package/dist/tailwind.mixin-DxmWMnBQ.js +43 -0
- package/dist/{tailwind.mixin-B1TvmOuJ.js.map → tailwind.mixin-DxmWMnBQ.js.map} +1 -1
- package/dist/teleport.cjs +1 -1
- package/dist/{teleport.component-Dj5lNIaQ.cjs → teleport.component-14_ksDPx.cjs} +13 -13
- package/dist/{teleport.component-Dj5lNIaQ.cjs.map → teleport.component-14_ksDPx.cjs.map} +1 -1
- package/dist/{teleport.component-QBoSpyzC.js → teleport.component-D2o6a-Yh.js} +84 -84
- package/dist/{teleport.component-QBoSpyzC.js.map → teleport.component-D2o6a-Yh.js.map} +1 -1
- package/dist/teleport.js +1 -1
- package/dist/{textarea-B0Q1ND3D.js → textarea-C5i4amtn.js} +2 -2
- package/dist/{textarea-B0Q1ND3D.js.map → textarea-C5i4amtn.js.map} +1 -1
- package/dist/{textarea-Ct0tCiZE.cjs → textarea-DFEdjfVW.cjs} +2 -2
- package/dist/{textarea-Ct0tCiZE.cjs.map → textarea-DFEdjfVW.cjs.map} +1 -1
- package/dist/textarea.cjs +1 -1
- package/dist/textarea.js +1 -1
- package/dist/{theme-button-Xe0AKvu4.js → theme-button-BFWwX__i.js} +2 -2
- package/dist/{theme-button-Xe0AKvu4.js.map → theme-button-BFWwX__i.js.map} +1 -1
- package/dist/{theme-button-CZICh6mv.cjs → theme-button-DsGEWHcv.cjs} +2 -2
- package/dist/{theme-button-CZICh6mv.cjs.map → theme-button-DsGEWHcv.cjs.map} +1 -1
- package/dist/theme-button.cjs +1 -1
- package/dist/theme-button.js +1 -1
- package/dist/theme.cjs +1 -1
- package/dist/{theme.component-DM774Lyr.cjs → theme.component-BTfo42Lo.cjs} +2 -2
- package/dist/theme.component-BTfo42Lo.cjs.map +1 -0
- package/dist/{theme.component-dphOzgia.js → theme.component-GuFArxKG.js} +3 -3
- package/dist/theme.component-GuFArxKG.js.map +1 -0
- package/dist/theme.js +1 -1
- package/dist/{tree-DAEL96xl.cjs → tree-DJDSDjnb.cjs} +2 -2
- package/dist/{tree-DAEL96xl.cjs.map → tree-DJDSDjnb.cjs.map} +1 -1
- package/dist/{tree-Dham7fla.js → tree-XbaraF4_.js} +2 -2
- package/dist/{tree-Dham7fla.js.map → tree-XbaraF4_.js.map} +1 -1
- package/dist/tree.cjs +1 -1
- package/dist/tree.js +1 -1
- package/dist/{typewriter-BBRroqBP.cjs → typewriter-BF7pgYH2.cjs} +2 -2
- package/dist/typewriter-BF7pgYH2.cjs.map +1 -0
- package/dist/{typewriter-CJijgjI7.js → typewriter-DGO4rddH.js} +5 -5
- package/dist/typewriter-DGO4rddH.js.map +1 -0
- package/dist/typewriter.cjs +1 -1
- package/dist/typewriter.js +1 -1
- package/dist/{typography-B1vPffcD.js → typography-CLPItwOI.js} +2 -2
- package/dist/{typography-B1vPffcD.js.map → typography-CLPItwOI.js.map} +1 -1
- package/dist/{typography-_8EJsERF.cjs → typography-DVm5bpVi.cjs} +2 -2
- package/dist/{typography-_8EJsERF.cjs.map → typography-DVm5bpVi.cjs.map} +1 -1
- package/dist/typography.cjs +1 -1
- package/dist/typography.js +1 -1
- package/package.json +7 -2
- package/dist/autocomplete-BdqEtlUZ.js.map +0 -1
- package/dist/autocomplete-Cwn1Bwj7.cjs.map +0 -1
- package/dist/checkbox-g8T27Ih6.cjs.map +0 -1
- package/dist/chips-8G-fC-BB.cjs.map +0 -1
- package/dist/chips-CcVWASnN.js.map +0 -1
- package/dist/consume-DSKPc5vj.js.map +0 -1
- package/dist/consume-Di0U0iBU.cjs +0 -2
- package/dist/consume-Di0U0iBU.cjs.map +0 -1
- package/dist/context-5nmahssp.js +0 -6
- package/dist/context-BATZj31H.cjs +0 -2
- package/dist/delay-3BI6NTLb.js.map +0 -1
- package/dist/delay-Dcxd6izx.cjs.map +0 -1
- package/dist/input-BqSrvFYo.cjs.map +0 -1
- package/dist/input-DMV5Kg7d.js.map +0 -1
- package/dist/payment-card-form-Ctv_rIi1.js.map +0 -1
- package/dist/payment-card-form-V5STwP-8.cjs.map +0 -1
- package/dist/provide-_VUNOf1R.cjs +0 -2
- package/dist/provide-_VUNOf1R.cjs.map +0 -1
- package/dist/provide-kj6-udep.js +0 -105
- package/dist/provide-kj6-udep.js.map +0 -1
- package/dist/table-CBJ26MIg.cjs +0 -6
- package/dist/table-Ci3U3uYV.js +0 -21
- package/dist/tailwind.mixin-04vClyRW.cjs +0 -2
- package/dist/tailwind.mixin-B1TvmOuJ.js +0 -43
- package/dist/theme.component-DM774Lyr.cjs.map +0 -1
- package/dist/theme.component-dphOzgia.js.map +0 -1
- package/dist/typewriter-BBRroqBP.cjs.map +0 -1
- package/dist/typewriter-CJijgjI7.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select-CmNozz2O.js","sources":["../src/select/select.ts"],"sourcesContent":["import { autoUpdate, computePosition, flip, offset, shift } from '@floating-ui/dom'\nimport { $LitElement } from '@mixins/index'\nimport { color } from '@schmancy/directives'\nimport SchmancyInput from '@schmancy/input/input'\nimport SchmancyOption from '@schmancy/option/option'\nimport { SchmancyTheme } from '@schmancy/theme/theme.interface'\nimport { css, html, TemplateResult } from 'lit'\nimport { customElement, property, query, queryAssignedElements, state } from 'lit/decorators.js'\nimport { classMap } from 'lit/directives/class-map.js'\n\nexport type SchmancySelectChangeEvent = CustomEvent<{\n\tvalue: string | string[]\n}>\n\n@customElement('schmancy-select')\nexport class SchmancySelect extends $LitElement(css`\n\t:host {\n\t\tdisplay: block;\n\t\tposition: relative;\n\t}\n\n\t[role='listbox'] {\n\t\t/* max-height: 25vh; */ /* Remove the fixed max-height */\n\t\toverflow-y: auto;\n\t\toutline: none;\n\t}\n`) {\n\t// API\n\t@property({ type: String }) name: string | undefined\n\t@property({ type: Boolean }) required = false\n\t@property({ type: String }) placeholder = ''\n\t@property({ type: String }) value = '' // for single-select\n\t@property({ type: Array }) selectedValues: string[] = [] // for multi-select\n\t@property({ type: Boolean }) multi = false\n\t@property({ type: String }) label = ''\n\n\t// Internal states\n\t@state() private isOpen = false\n\t@state() private valueLabel = ''\n\t@state() private isValid = true\n\t@property({ type: String }) validationMessage = ''\n\n\t@query('ul') private ul!: HTMLUListElement\n\n\t@query('schmancy-input') private inputRef!: SchmancyInput\n\t@queryAssignedElements({ flatten: true }) private options!: SchmancyOption[]\n\tprivate cleanupPositioner?: () => void\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\t\tif (!this.id) {\n\t\t\tthis.id = `schmancy-select-${Math.random().toString(36).substr(2, 9)}`\n\t\t}\n\t\tthis.addEventListener('keydown', this.handleKeyDown)\n\t}\n\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback()\n\t\tthis.removeEventListener('keydown', this.handleKeyDown)\n\t\tthis.cleanupPositioner?.()\n\t}\n\n\tfirstUpdated() {\n\t\tthis.syncSelection()\n\t\tthis.setupOptionsAccessibility()\n\t}\n\n\tprivate syncSelection() {\n\t\tif (this.multi) {\n\t\t\tthis.selectedValues = this.options.filter(o => o.selected).map(o => o.value)\n\t\t\tthis.valueLabel =\n\t\t\t\tthis.selectedValues.length > 0\n\t\t\t\t\t? this.options\n\t\t\t\t\t\t\t.filter(o => this.selectedValues.includes(o.value))\n\t\t\t\t\t\t\t.map(o => o.label)\n\t\t\t\t\t\t\t.join(', ')\n\t\t\t\t\t: this.placeholder\n\t\t} else {\n\t\t\tconst selectedOption = this.options.find(o => o.value === this.value)\n\t\t\tthis.valueLabel = selectedOption?.label || this.placeholder\n\t\t}\n\t}\n\n\tprivate setupOptionsAccessibility() {\n\t\tthis.options.forEach((option, index) => {\n\t\t\toption.setAttribute('role', 'option')\n\t\t\tif (!option.id) {\n\t\t\t\toption.id = `${this.id}-option-${index}`\n\t\t\t}\n\t\t\toption.tabIndex = -1\n\t\t\toption.setAttribute(\n\t\t\t\t'aria-selected',\n\t\t\t\tString(this.multi ? this.selectedValues.includes(option.value) : option.value === this.value),\n\t\t\t)\n\t\t})\n\t}\n\n\tprivate async positionDropdown() {\n\t\tconst reference = this.renderRoot.querySelector('.trigger') as HTMLElement\n\t\tif (!reference || !this.ul) return\n\n\t\t// Get the available height\n\t\tconst availableHeight = window.innerHeight - reference.getBoundingClientRect().bottom - 10 // 10px buffer\n\t\tthis.ul.style.maxHeight = `${availableHeight}px` // Set max height\n\n\t\tthis.cleanupPositioner = autoUpdate(reference, this.ul, async () => {\n\t\t\tconst { x, y } = await computePosition(reference, this.ul, {\n\t\t\t\tplacement: 'bottom-start',\n\t\t\t\tmiddleware: [offset(5), flip(), shift({ padding: 5 })],\n\t\t\t})\n\n\t\t\tObject.assign(this.ul.style, {\n\t\t\t\tleft: `${x}px`,\n\t\t\t\ttop: `${y}px`,\n\t\t\t\tposition: 'absolute',\n\t\t\t})\n\t\t})\n\t}\n\n\tprivate handleKeyDown(e: KeyboardEvent) {\n\t\tif (!this.isOpen) {\n\t\t\tif (['Enter', ' ', 'ArrowDown'].includes(e.key)) {\n\t\t\t\te.preventDefault()\n\t\t\t\tthis.openDropdown(false) // Modified: Call openDropdown directly\n\t\t\t}\n\t\t\treturn\n\t\t}\n\n\t\tconst current = this.options.findIndex(o => o.matches(':focus')) ?? -1\n\n\t\tswitch (e.key) {\n\t\t\tcase 'Escape':\n\t\t\t\tthis.closeDropdown()\n\t\t\t\tbreak\n\t\t\tcase 'ArrowDown':\n\t\t\t\te.preventDefault()\n\t\t\t\tthis.focusOption(this.options, Math.min(current + 1, this.options.length - 1))\n\t\t\t\tbreak\n\t\t\tcase 'ArrowUp':\n\t\t\t\te.preventDefault()\n\t\t\t\tthis.focusOption(this.options, Math.max(current - 1, 0))\n\t\t\t\tbreak\n\t\t\tcase 'Enter':\n\t\t\tcase ' ':\n\t\t\t\te.preventDefault()\n\t\t\t\tif (current >= 0) this.handleOptionSelect(this.options[current].value)\n\t\t\t\tbreak\n\t\t\tcase 'Tab':\n\t\t\t\tthis.closeDropdown()\n\t\t\t\tbreak\n\t\t}\n\t}\n\n\tprivate focusOption(options: HTMLElement[], index: number) {\n\t\tconst option = options[index]\n\t\tif (option) {\n\t\t\toption.focus()\n\t\t\tconst combobox = this.renderRoot.querySelector('.trigger')\n\t\t\tcombobox?.setAttribute('aria-activedescendant', option.id)\n\t\t}\n\t}\n\n\tprivate async openDropdown(report = false) {\n\t\t// Add a report flag\n\t\tthis.isOpen = true\n\t\tawait this.updateComplete\n\n\t\tthis.positionDropdown()\n\t\tthis.setupOptionsAccessibility()\n\n\t\tconst options = Array.from(this.ul.querySelectorAll('[role=\"option\"]')) as HTMLElement[]\n\t\tconst selectedIndex = this.multi ? 0 : options.findIndex(o => o.getAttribute('value') === this.value)\n\t\tthis.focusOption(options, Math.max(selectedIndex, 0))\n\t\t//Check if this needs to be reported\n\t\tif (report) this.reportValidity()\n\t}\n\n\tprivate closeDropdown() {\n\t\tthis.isOpen = false\n\t\tthis.cleanupPositioner?.()\n\t\tconst combobox = this.renderRoot.querySelector<HTMLElement>('.trigger')\n\t\tcombobox?.removeAttribute('aria-activedescendant')\n\t\tcombobox?.focus()\n\t}\n\n\tprivate handleOptionSelect(value: string) {\n\t\tif (this.multi) {\n\t\t\tconst option = this.options.find(o => o.value === value)\n\t\t\tif (!option) return\n\n\t\t\toption.selected = !option.selected\n\t\t\tif (option.selected) {\n\t\t\t\tthis.selectedValues = [...this.selectedValues, value]\n\t\t\t} else {\n\t\t\t\tthis.selectedValues = this.selectedValues.filter(v => v !== value)\n\t\t\t}\n\n\t\t\tthis.valueLabel =\n\t\t\t\tthis.selectedValues.length > 0\n\t\t\t\t\t? this.options\n\t\t\t\t\t\t\t.filter(o => this.selectedValues.includes(o.value))\n\t\t\t\t\t\t\t.map(o => o.label)\n\t\t\t\t\t\t\t.join(', ')\n\t\t\t\t\t: this.placeholder\n\n\t\t\tthis.dispatchChange(this.selectedValues)\n\t\t} else {\n\t\t\tthis.options.forEach(o => (o.selected = o.value === value))\n\t\t\tthis.value = value\n\t\t\tthis.valueLabel = this.options.find(o => o.value === value)?.label || this.placeholder\n\t\t\tthis.dispatchChange(value)\n\t\t\tthis.closeDropdown()\n\t\t}\n\n\t\tthis.setupOptionsAccessibility()\n\t}\n\n\tprivate dispatchChange(value: string | string[]) {\n\t\tthis.isValid = true // Reset validation on change\n\t\tthis.validationMessage = ''\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent<SchmancySelectChangeEvent['detail']>('change', {\n\t\t\t\tdetail: { value },\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t}\n\n\t/**\n\t * Native form methods:\n\t * - checkValidity()\n\t * - reportValidity()\n\t * - setCustomValidity()\n\t */\n\tpublic checkValidity(): boolean {\n\t\t//Check if there is a value\n\t\tthis.isValid = this.multi ? this.options.some(o => o.selected) : Boolean(this.value)\n\t\tthis.validationMessage = this.isValid ? '' : 'Please select an option.'\n\t\treturn this.isValid\n\t}\n\n\tpublic reportValidity(): boolean {\n\t\tif (this.required) {\n\t\t\tthis.checkValidity()\n\t\t\tthis.inputRef.required = true // Ensure the inner input knows it's required.\n\t\t\tif (!this.isValid) {\n\t\t\t\tthis.openDropdown()\n\t\t\t\tthis.inputRef.reportValidity()\n\t\t\t\treturn false\n\t\t\t} else {\n\t\t\t\tthis.inputRef.reportValidity()\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\t\treturn true // Always return true if not required\n\t}\n\n\tpublic setCustomValidity(message: string) {\n\t\tthis.validationMessage = message\n\t}\n\n\trender(): TemplateResult {\n\t\treturn html`\n\t\t\t<div class=\"relative\">\n\t\t\t\t<schmancy-input\n\t\t\t\t\t.name=${this.name}\n\t\t\t\t\ttabIndex=\"0\"\n\t\t\t\t\tclass=\"trigger\"\n\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\taria-haspopup=\"listbox\"\n\t\t\t\t\taria-expanded=${this.isOpen}\n\t\t\t\t\taria-controls=\"options\"\n\t\t\t\t\taria-autocomplete=\"none\"\n\t\t\t\t\taria-required=${this.required}\n\t\t\t\t\t.label=${this.label}\n\t\t\t\t\t.placeholder=${this.placeholder}\n\t\t\t\t\t.value=${this.valueLabel}\n\t\t\t\t\t.required=${this.required}\n\t\t\t\t\treadonly\n\t\t\t\t\t@click=${() => (this.isOpen ? this.closeDropdown() : this.openDropdown(true))}\n\t\t\t\t></schmancy-input>\n\n\t\t\t\t<div\n\t\t\t\t\tid=\"overlay\"\n\t\t\t\t\tclass=\"fixed inset-0\"\n\t\t\t\t\t?hidden=${!this.isOpen}\n\t\t\t\t\t@click=${this.closeDropdown}\n\t\t\t\t\ttabindex=\"-1\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t></div>\n\n\t\t\t\t<ul\n\t\t\t\t\tid=\"options\"\n\t\t\t\t\trole=\"listbox\"\n\t\t\t\t\taria-multiselectable=${this.multi}\n\t\t\t\t\tclass=${classMap({\n\t\t\t\t\t\t'absolute z-[1000] mt-1 w-full rounded-md shadow-sm': true,\n\t\t\t\t\t\thidden: !this.isOpen,\n\t\t\t\t\t})}\n\t\t\t\t\t${color({ bgColor: SchmancyTheme.sys.color.surface.container })}\n\t\t\t\t\t@click=${(e: Event) => {\n\t\t\t\t\t\tconst customEvt = e as CustomEvent\n\t\t\t\t\t\tconst detailVal = customEvt.detail?.value\n\t\t\t\t\t\tif (detailVal) {\n\t\t\t\t\t\t\tthis.handleOptionSelect(detailVal)\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<slot\n\t\t\t\t\t\t@slotchange=${() => {\n\t\t\t\t\t\t\tthis.syncSelection()\n\t\t\t\t\t\t\tthis.setupOptionsAccessibility()\n\t\t\t\t\t\t}}\n\t\t\t\t\t></slot>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-select': SchmancySelect\n\t}\n}\n"],"names":["SchmancySelect","$LitElement","css","super","arguments","this","required","placeholder","value","selectedValues","multi","label","isOpen","valueLabel","isValid","validationMessage","connectedCallback","id","Math","random","toString","substr","addEventListener","handleKeyDown","disconnectedCallback","removeEventListener","cleanupPositioner","firstUpdated","syncSelection","setupOptionsAccessibility","options","filter","o","selected","map","length","includes","join","selectedOption","find","forEach","option","index","setAttribute","tabIndex","String","positionDropdown","reference","renderRoot","querySelector","ul","availableHeight","window","innerHeight","getBoundingClientRect","bottom","style","maxHeight","autoUpdate","async","x","y","computePosition","placement","middleware","offset","flip","shift","padding","Object","assign","left","top","position","e","key","preventDefault","openDropdown","current","findIndex","matches","closeDropdown","focusOption","min","max","handleOptionSelect","focus","combobox","report","updateComplete","Array","from","querySelectorAll","selectedIndex","getAttribute","reportValidity","removeAttribute","v","dispatchChange","dispatchEvent","CustomEvent","detail","bubbles","composed","some","Boolean","checkValidity","inputRef","message","render","html","name","classMap","hidden","color","bgColor","SchmancyTheme","sys","surface","container","customEvt","detailVal","__decorateClass","property","type","prototype","state","query","queryAssignedElements","flatten","customElement"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"select-Iem1gGwb.js","sources":["../src/select/select.ts"],"sourcesContent":["import { autoUpdate, computePosition, flip, offset, shift } from '@floating-ui/dom'\nimport { $LitElement } from '@mixins/index'\nimport { color } from '@schmancy/directives'\nimport SchmancyInput from '@schmancy/input/input'\nimport SchmancyOption from '@schmancy/option/option'\nimport { SchmancyTheme } from '@schmancy/theme/theme.interface'\nimport { css, html, TemplateResult } from 'lit'\nimport { customElement, property, query, queryAssignedElements, state } from 'lit/decorators.js'\nimport { classMap } from 'lit/directives/class-map.js'\n\nexport type SchmancySelectChangeEvent = CustomEvent<{\n\tvalue: string | string[]\n}>\n\n@customElement('schmancy-select')\nexport class SchmancySelect extends $LitElement(css`\n\t:host {\n\t\tdisplay: block;\n\t\tposition: relative;\n\t}\n\n\t[role='listbox'] {\n\t\t/* max-height: 25vh; */ /* Remove the fixed max-height */\n\t\toverflow-y: auto;\n\t\toutline: none;\n\t}\n`) {\n\t// API\n\t@property({ type: String }) name: string | undefined\n\t@property({ type: Boolean }) required = false\n\t@property({ type: String }) placeholder = ''\n\t@property({ type: String }) value = '' // for single-select\n\t@property({ type: Array }) selectedValues: string[] = [] // for multi-select\n\t@property({ type: Boolean }) multi = false\n\t@property({ type: String }) label = ''\n\n\t// Internal states\n\t@state() private isOpen = false\n\t@state() private valueLabel = ''\n\t@state() private isValid = true\n\t@property({ type: String }) validationMessage = ''\n\n\t@query('ul') private ul!: HTMLUListElement\n\n\t@query('schmancy-input') private inputRef!: SchmancyInput\n\t@queryAssignedElements({ flatten: true }) private options!: SchmancyOption[]\n\tprivate cleanupPositioner?: () => void\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\t\tif (!this.id) {\n\t\t\tthis.id = `schmancy-select-${Math.random().toString(36).substr(2, 9)}`\n\t\t}\n\t\tthis.addEventListener('keydown', this.handleKeyDown)\n\t}\n\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback()\n\t\tthis.removeEventListener('keydown', this.handleKeyDown)\n\t\tthis.cleanupPositioner?.()\n\t}\n\n\tfirstUpdated() {\n\t\tthis.syncSelection()\n\t\tthis.setupOptionsAccessibility()\n\t}\n\n\tprivate syncSelection() {\n\t\tif (this.multi) {\n\t\t\tthis.selectedValues = this.options.filter(o => o.selected).map(o => o.value)\n\t\t\tthis.valueLabel =\n\t\t\t\tthis.selectedValues.length > 0\n\t\t\t\t\t? this.options\n\t\t\t\t\t\t\t.filter(o => this.selectedValues.includes(o.value))\n\t\t\t\t\t\t\t.map(o => o.label)\n\t\t\t\t\t\t\t.join(', ')\n\t\t\t\t\t: this.placeholder\n\t\t} else {\n\t\t\tconst selectedOption = this.options.find(o => o.value === this.value)\n\t\t\tthis.valueLabel = selectedOption?.label || this.placeholder\n\t\t}\n\t}\n\n\tprivate setupOptionsAccessibility() {\n\t\tthis.options.forEach((option, index) => {\n\t\t\toption.setAttribute('role', 'option')\n\t\t\tif (!option.id) {\n\t\t\t\toption.id = `${this.id}-option-${index}`\n\t\t\t}\n\t\t\toption.tabIndex = -1\n\t\t\toption.setAttribute(\n\t\t\t\t'aria-selected',\n\t\t\t\tString(this.multi ? this.selectedValues.includes(option.value) : option.value === this.value),\n\t\t\t)\n\t\t})\n\t}\n\n\tprivate async positionDropdown() {\n\t\tconst reference = this.renderRoot.querySelector('.trigger') as HTMLElement\n\t\tif (!reference || !this.ul) return\n\n\t\t// Get the available height\n\t\tconst availableHeight = window.innerHeight - reference.getBoundingClientRect().bottom - 10 // 10px buffer\n\t\tthis.ul.style.maxHeight = `${availableHeight}px` // Set max height\n\n\t\tthis.cleanupPositioner = autoUpdate(reference, this.ul, async () => {\n\t\t\tconst { x, y } = await computePosition(reference, this.ul, {\n\t\t\t\tplacement: 'bottom-start',\n\t\t\t\tmiddleware: [offset(5), flip(), shift({ padding: 5 })],\n\t\t\t})\n\n\t\t\tObject.assign(this.ul.style, {\n\t\t\t\tleft: `${x}px`,\n\t\t\t\ttop: `${y}px`,\n\t\t\t\tposition: 'absolute',\n\t\t\t})\n\t\t})\n\t}\n\n\tprivate handleKeyDown(e: KeyboardEvent) {\n\t\tif (!this.isOpen) {\n\t\t\tif (['Enter', ' ', 'ArrowDown'].includes(e.key)) {\n\t\t\t\te.preventDefault()\n\t\t\t\tthis.openDropdown(false) // Modified: Call openDropdown directly\n\t\t\t}\n\t\t\treturn\n\t\t}\n\n\t\tconst current = this.options.findIndex(o => o.matches(':focus')) ?? -1\n\n\t\tswitch (e.key) {\n\t\t\tcase 'Escape':\n\t\t\t\tthis.closeDropdown()\n\t\t\t\tbreak\n\t\t\tcase 'ArrowDown':\n\t\t\t\te.preventDefault()\n\t\t\t\tthis.focusOption(this.options, Math.min(current + 1, this.options.length - 1))\n\t\t\t\tbreak\n\t\t\tcase 'ArrowUp':\n\t\t\t\te.preventDefault()\n\t\t\t\tthis.focusOption(this.options, Math.max(current - 1, 0))\n\t\t\t\tbreak\n\t\t\tcase 'Enter':\n\t\t\tcase ' ':\n\t\t\t\te.preventDefault()\n\t\t\t\tif (current >= 0) this.handleOptionSelect(this.options[current].value)\n\t\t\t\tbreak\n\t\t\tcase 'Tab':\n\t\t\t\tthis.closeDropdown()\n\t\t\t\tbreak\n\t\t}\n\t}\n\n\tprivate focusOption(options: HTMLElement[], index: number) {\n\t\tconst option = options[index]\n\t\tif (option) {\n\t\t\toption.focus()\n\t\t\tconst combobox = this.renderRoot.querySelector('.trigger')\n\t\t\tcombobox?.setAttribute('aria-activedescendant', option.id)\n\t\t}\n\t}\n\n\tprivate async openDropdown(report = false) {\n\t\t// Add a report flag\n\t\tthis.isOpen = true\n\t\tawait this.updateComplete\n\n\t\tthis.positionDropdown()\n\t\tthis.setupOptionsAccessibility()\n\n\t\tconst options = Array.from(this.ul.querySelectorAll('[role=\"option\"]')) as HTMLElement[]\n\t\tconst selectedIndex = this.multi ? 0 : options.findIndex(o => o.getAttribute('value') === this.value)\n\t\tthis.focusOption(options, Math.max(selectedIndex, 0))\n\t\t//Check if this needs to be reported\n\t\tif (report) this.reportValidity()\n\t}\n\n\tprivate closeDropdown() {\n\t\tthis.isOpen = false\n\t\tthis.cleanupPositioner?.()\n\t\tconst combobox = this.renderRoot.querySelector<HTMLElement>('.trigger')\n\t\tcombobox?.removeAttribute('aria-activedescendant')\n\t\tcombobox?.focus()\n\t}\n\n\tprivate handleOptionSelect(value: string) {\n\t\tif (this.multi) {\n\t\t\tconst option = this.options.find(o => o.value === value)\n\t\t\tif (!option) return\n\n\t\t\toption.selected = !option.selected\n\t\t\tif (option.selected) {\n\t\t\t\tthis.selectedValues = [...this.selectedValues, value]\n\t\t\t} else {\n\t\t\t\tthis.selectedValues = this.selectedValues.filter(v => v !== value)\n\t\t\t}\n\n\t\t\tthis.valueLabel =\n\t\t\t\tthis.selectedValues.length > 0\n\t\t\t\t\t? this.options\n\t\t\t\t\t\t\t.filter(o => this.selectedValues.includes(o.value))\n\t\t\t\t\t\t\t.map(o => o.label)\n\t\t\t\t\t\t\t.join(', ')\n\t\t\t\t\t: this.placeholder\n\n\t\t\tthis.dispatchChange(this.selectedValues)\n\t\t} else {\n\t\t\tthis.options.forEach(o => (o.selected = o.value === value))\n\t\t\tthis.value = value\n\t\t\tthis.valueLabel = this.options.find(o => o.value === value)?.label || this.placeholder\n\t\t\tthis.dispatchChange(value)\n\t\t\tthis.closeDropdown()\n\t\t}\n\n\t\tthis.setupOptionsAccessibility()\n\t}\n\n\tprivate dispatchChange(value: string | string[]) {\n\t\tthis.isValid = true // Reset validation on change\n\t\tthis.validationMessage = ''\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent<SchmancySelectChangeEvent['detail']>('change', {\n\t\t\t\tdetail: { value },\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t}\n\n\t/**\n\t * Native form methods:\n\t * - checkValidity()\n\t * - reportValidity()\n\t * - setCustomValidity()\n\t */\n\tpublic checkValidity(): boolean {\n\t\t//Check if there is a value\n\t\tthis.isValid = this.multi ? this.options.some(o => o.selected) : Boolean(this.value)\n\t\tthis.validationMessage = this.isValid ? '' : 'Please select an option.'\n\t\treturn this.isValid\n\t}\n\n\tpublic reportValidity(): boolean {\n\t\tif (this.required) {\n\t\t\tthis.checkValidity()\n\t\t\tthis.inputRef.required = true // Ensure the inner input knows it's required.\n\t\t\tif (!this.isValid) {\n\t\t\t\tthis.openDropdown()\n\t\t\t\tthis.inputRef.reportValidity()\n\t\t\t\treturn false\n\t\t\t} else {\n\t\t\t\tthis.inputRef.reportValidity()\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\t\treturn true // Always return true if not required\n\t}\n\n\tpublic setCustomValidity(message: string) {\n\t\tthis.validationMessage = message\n\t}\n\n\trender(): TemplateResult {\n\t\treturn html`\n\t\t\t<div class=\"relative\">\n\t\t\t\t<schmancy-input\n\t\t\t\t\t.name=${this.name}\n\t\t\t\t\ttabIndex=\"0\"\n\t\t\t\t\tclass=\"trigger\"\n\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\taria-haspopup=\"listbox\"\n\t\t\t\t\taria-expanded=${this.isOpen}\n\t\t\t\t\taria-controls=\"options\"\n\t\t\t\t\taria-autocomplete=\"none\"\n\t\t\t\t\taria-required=${this.required}\n\t\t\t\t\t.label=${this.label}\n\t\t\t\t\t.placeholder=${this.placeholder}\n\t\t\t\t\t.value=${this.valueLabel}\n\t\t\t\t\t.required=${this.required}\n\t\t\t\t\treadonly\n\t\t\t\t\t@click=${() => (this.isOpen ? this.closeDropdown() : this.openDropdown(true))}\n\t\t\t\t></schmancy-input>\n\n\t\t\t\t<div\n\t\t\t\t\tid=\"overlay\"\n\t\t\t\t\tclass=\"fixed inset-0\"\n\t\t\t\t\t?hidden=${!this.isOpen}\n\t\t\t\t\t@click=${this.closeDropdown}\n\t\t\t\t\ttabindex=\"-1\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t></div>\n\n\t\t\t\t<ul\n\t\t\t\t\tid=\"options\"\n\t\t\t\t\trole=\"listbox\"\n\t\t\t\t\taria-multiselectable=${this.multi}\n\t\t\t\t\tclass=${classMap({\n\t\t\t\t\t\t'absolute z-[1000] mt-1 w-full rounded-md shadow-sm': true,\n\t\t\t\t\t\thidden: !this.isOpen,\n\t\t\t\t\t})}\n\t\t\t\t\t${color({ bgColor: SchmancyTheme.sys.color.surface.container })}\n\t\t\t\t\t@click=${(e: Event) => {\n\t\t\t\t\t\tconst customEvt = e as CustomEvent\n\t\t\t\t\t\tconst detailVal = customEvt.detail?.value\n\t\t\t\t\t\tif (detailVal) {\n\t\t\t\t\t\t\tthis.handleOptionSelect(detailVal)\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<slot\n\t\t\t\t\t\t@slotchange=${() => {\n\t\t\t\t\t\t\tthis.syncSelection()\n\t\t\t\t\t\t\tthis.setupOptionsAccessibility()\n\t\t\t\t\t\t}}\n\t\t\t\t\t></slot>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-select': SchmancySelect\n\t}\n}\n"],"names":["SchmancySelect","$LitElement","css","super","arguments","this","required","placeholder","value","selectedValues","multi","label","isOpen","valueLabel","isValid","validationMessage","connectedCallback","id","Math","random","toString","substr","addEventListener","handleKeyDown","disconnectedCallback","removeEventListener","cleanupPositioner","firstUpdated","syncSelection","setupOptionsAccessibility","options","filter","o","selected","map","length","includes","join","selectedOption","find","forEach","option","index","setAttribute","tabIndex","String","positionDropdown","reference","renderRoot","querySelector","ul","availableHeight","window","innerHeight","getBoundingClientRect","bottom","style","maxHeight","autoUpdate","async","x","y","computePosition","placement","middleware","offset","flip","shift","padding","Object","assign","left","top","position","e","key","preventDefault","openDropdown","current","findIndex","matches","closeDropdown","focusOption","min","max","handleOptionSelect","focus","combobox","report","updateComplete","Array","from","querySelectorAll","selectedIndex","getAttribute","reportValidity","removeAttribute","v","dispatchChange","dispatchEvent","CustomEvent","detail","bubbles","composed","some","Boolean","checkValidity","inputRef","message","render","html","name","classMap","hidden","color","bgColor","SchmancyTheme","sys","surface","container","customEvt","detailVal","__decorateClass","property","type","prototype","state","query","queryAssignedElements","flatten","customElement"],"mappings":"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"}
|
package/dist/select.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./select-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./select-BTSVFloo.cjs");Object.defineProperty(exports,"SchmancySelect",{enumerable:!0,get:()=>e.SchmancySelect});
|
|
2
2
|
//# sourceMappingURL=select.cjs.map
|
package/dist/select.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";const s=require("rxjs");require("lit/directives/class-map.js"),require("lit/directives/style-map.js");const w=require("./tailwind.mixin-
|
|
1
|
+
"use strict";const s=require("rxjs");require("lit/directives/class-map.js"),require("lit/directives/style-map.js");const w=require("./tailwind.mixin-B7_ZpVpC.cjs"),g=require("lit"),r=require("lit/decorators.js"),E=require("./litElement.mixin-C-c-2rdW.cjs");var S=Object.defineProperty,k=Object.getOwnPropertyDescriptor,b=(t,e,i,o)=>{for(var c,n=o>1?void 0:o?k(e,i):e,l=t.length-1;l>=0;l--)(c=t[l])&&(n=(o?c(e,i,n):c(n))||n);return o&&n&&S(e,i,n),n};let v=class extends w.TailwindElement(){render(){const t={absolute:this.title.length===0,relative:this.title.length>0};return g.html`
|
|
2
2
|
<schmancy-surface fill="width" elevation="1">
|
|
3
3
|
<schmancy-grid class="${this.classMap(t)}" align="center" justify="stretch" cols="auto 1fr auto">
|
|
4
4
|
<slot name="back">
|
|
@@ -38,4 +38,4 @@
|
|
|
38
38
|
</section>
|
|
39
39
|
</div>
|
|
40
40
|
`}};var d,p;h([r.property({type:String,reflect:!0})],a.prototype,"uid",2),h([r.property({type:Boolean,reflect:!0})],a.prototype,"open",2),h([r.property({type:String,reflect:!0})],a.prototype,"header",2),h([r.property({type:String,reflect:!0})],a.prototype,"position",2),h([r.property({type:Boolean,reflect:!0})],a.prototype,"persist",2),h([r.property({type:Boolean,reflect:!0})],a.prototype,"allowOverlayDismiss",2),h([r.property({type:String,reflect:!0})],a.prototype,"title",2),h([r.query(".sheet")],a.prototype,"sheet",2),h([r.queryAssignedElements({flatten:!0})],a.prototype,"assignedElements",2),h([r.property()],a.prototype,"focusAttribute",2),h([(d="open",(t,e)=>{const{willUpdate:i}=t;p=Object.assign({waitUntilFirstUpdate:!1},p),t.willUpdate=function(o){if(i.call(this,o),o.has(d)){const c=o.get(d),n=this[d];c!==n&&(p!=null&&p.waitUntilFirstUpdate&&!this.hasUpdated||this[e].call(this,c,n))}}})],a.prototype,"onOpenChange",1),a=h([r.customElement("schmancy-sheet")],a),exports.SchmancySheetPosition=f,exports.SheetHereMorty=y,exports.SheetWhereAreYouRicky=m,exports.sheet=u;
|
|
41
|
-
//# sourceMappingURL=sheet-
|
|
41
|
+
//# sourceMappingURL=sheet-BgbV6g2F.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sheet-CpxhwF3c.cjs","sources":["../src/sheet/header.ts","../src/sheet/sheet.service.ts","../src/sheet/sheet.ts","../src/sheet/hook.ts"],"sourcesContent":["import { TailwindElement } from '@mixins/index'\nimport { html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\n@customElement('schmancy-sheet-header')\nexport default class SchmancySheetHeader extends TailwindElement() {\n\t@property() title: string\n\trender() {\n\t\tconst classes = {\n\t\t\tabsolute: this.title.length === 0,\n\t\t\trelative: this.title.length > 0,\n\t\t}\n\t\treturn html`\n\t\t\t<schmancy-surface fill=\"width\" elevation=\"1\">\n\t\t\t\t<schmancy-grid class=\"${this.classMap(classes)}\" align=\"center\" justify=\"stretch\" cols=\"auto 1fr auto\">\n\t\t\t\t\t<slot name=\"back\">\n\t\t\t\t\t\t<schmancy-button\n\t\t\t\t\t\t\t@click=${() => {\n\t\t\t\t\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\t\t\t\t\tnew CustomEvent('dismiss', {\n\t\t\t\t\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span class=\"text-[24px]\">← </span>\n\t\t\t\t\t\t</schmancy-button>\n\t\t\t\t\t</slot>\n\t\t\t\t\t<schmancy-typography transform=\"capitalize\" type=\"headline\" token=\"lg\"> ${this.title} </schmancy-typography>\n\t\t\t\t\t<slot name=\"actions\">\n\t\t\t\t\t\t<schmancy-icon-button\n\t\t\t\t\t\t\t@click=${() => {\n\t\t\t\t\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\t\t\t\t\tnew CustomEvent('dismiss', {\n\t\t\t\t\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tclose\n\t\t\t\t\t\t</schmancy-icon-button>\n\t\t\t\t\t</slot>\n\t\t\t\t</schmancy-grid>\n\t\t\t</schmancy-surface>\n\t\t`\n\t}\n}\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-sheet-header': SchmancySheetHeader\n\t}\n}\n","import {\n\tdefaultIfEmpty,\n\tdelay,\n\tfilter,\n\tforkJoin,\n\tfromEvent,\n\tmap,\n\tmergeMap,\n\tof,\n\tSubject,\n\tswitchMap,\n\ttake,\n\ttakeUntil,\n\ttap,\n\ttimer,\n} from 'rxjs'\nimport SchmancySheet from './sheet'\n\nexport enum SchmancySheetPosition {\n\tSide = 'side',\n\tBottom = 'bottom',\n\t/**\n\t * @deprecated use bottom instead\n\t */\n\tBottomCenter = 'bottom-center',\n\t/**\n\t * @deprecated use side instead\n\t */\n\tTopRight = 'top-right',\n\t/**\n\t * @deprecated use side instead\n\t */\n\tBottomRight = 'bottom-right',\n}\n\ntype BottomSheeetTarget = {\n\tcomponent: HTMLElement\n\tuid?: string\n\tposition?: SchmancySheetPosition\n\tpersist?: boolean\n\tclose?: () => void\n\tallowOverlyDismiss?: boolean\n\ttitle?: string\n\theader?: 'hidden' | 'visible'\n}\n\n// Events for communication between bottom-sheet component and bottom-sheet.service\nexport type SheetWhereAreYouRickyEvent = CustomEvent<{\n\tuid: string\n}>\nexport const SheetWhereAreYouRicky = 'are-you-there-sheet'\n\nexport type SheetHereMortyEvent = CustomEvent<{\n\tsheet: SchmancySheet\n}>\nexport const SheetHereMorty = 'yes-here'\n\n// Function to determine the position based on screen size\nconst getPosition = (): SchmancySheetPosition => {\n\treturn window.innerWidth >= 768 ? SchmancySheetPosition.Side : SchmancySheetPosition.Bottom // Adjust 768 as needed for your breakpoint\n}\n\nclass BottomSheetService {\n\tbottomSheet = new Subject<BottomSheeetTarget>()\n\t$dismiss = new Subject<string>()\n\tconstructor() {\n\t\tthis.bottomSheet\n\t\t\t.pipe(\n\t\t\t\tswitchMap(target =>\n\t\t\t\t\tforkJoin([\n\t\t\t\t\t\tfromEvent<SheetHereMortyEvent>(window, SheetHereMorty).pipe(\n\t\t\t\t\t\t\ttakeUntil(timer(0)),\n\t\t\t\t\t\t\tmap(e => e.detail.sheet),\n\t\t\t\t\t\t\tdefaultIfEmpty(undefined),\n\t\t\t\t\t\t),\n\t\t\t\t\t\tof(target).pipe(\n\t\t\t\t\t\t\ttap(() => {\n\t\t\t\t\t\t\t\twindow.dispatchEvent(\n\t\t\t\t\t\t\t\t\tnew CustomEvent(SheetWhereAreYouRicky, {\n\t\t\t\t\t\t\t\t\t\tdetail: { uid: target.uid ?? target.component.tagName },\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t),\n\t\t\t\t\t]),\n\t\t\t\t),\n\t\t\t\tmap(([sheet, target]) => {\n\t\t\t\t\tconsole.log(sheet, target)\n\t\t\t\t\tif (!sheet) {\n\t\t\t\t\t\t// if sheet is not found, create it\n\t\t\t\t\t\tsheet = document.createElement('schmancy-sheet')\n\t\t\t\t\t\tdocument.body.appendChild(sheet)\n\t\t\t\t\t}\n\t\t\t\t\tsheet.setAttribute('uid', target.uid ?? target.component.tagName)\n\n\t\t\t\t\t// **Use the dynamic position function here**\n\t\t\t\t\tconst position = target.position || getPosition() // Use target.position if it's set, otherwise determine based on screen size\n\t\t\t\t\tsheet.setAttribute('position', position)\n\n\t\t\t\t\tsheet.setAttribute('allowOverlyDismiss', target.allowOverlyDismiss === false ? 'false' : 'true')\n\t\t\t\t\ttarget.title && sheet.setAttribute('title', target.title)\n\t\t\t\t\ttarget.persist && sheet.setAttribute('persist', target.persist ?? false)\n\t\t\t\t\ttarget.header && sheet.setAttribute('header', target.header)\n\t\t\t\t\tdocument.body.style.overflow = 'hidden' // lock the scroll of the host\n\t\t\t\t\treturn { target, sheet }\n\t\t\t\t}),\n\t\t\t\tdelay(20),\n\t\t\t\tfilter(({ target, sheet }) => {\n\t\t\t\t\t// if the sheet has already the component, just show it\n\t\t\t\t\tif (\n\t\t\t\t\t\ttarget.persist &&\n\t\t\t\t\t\tsheet?.shadowRoot\n\t\t\t\t\t\t\t?.querySelector('slot')\n\t\t\t\t\t\t\t?.assignedElements()\n\t\t\t\t\t\t\t.find(e => e.tagName === target.component.tagName)\n\t\t\t\t\t) {\n\t\t\t\t\t\tsheet?.setAttribute('open', 'true')\n\t\t\t\t\t\treturn false\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn true // if the sheet does not have the component, continue to the next step\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\ttap(({ target, sheet }) => {\n\t\t\t\t\tsheet?.appendChild(target.component)\n\t\t\t\t}),\n\t\t\t\tdelay(1),\n\t\t\t\ttap(({ sheet }) => {\n\t\t\t\t\tsheet?.setAttribute('open', 'true')\n\t\t\t\t}),\n\t\t\t\ttap(({ sheet }) => {\n\t\t\t\t\tfromEvent<CustomEvent>(sheet, 'close')\n\t\t\t\t\t\t.pipe(take(1))\n\t\t\t\t\t\t.pipe(delay(300))\n\t\t\t\t\t\t.subscribe(e => {\n\t\t\t\t\t\t\tconst target = e.target as SchmancySheet\n\t\t\t\t\t\t\tconsole.log(target)\n\n\t\t\t\t\t\t\tif (!target?.persist) target?.remove()\n\t\t\t\t\t\t\tdocument.body.style.overflow = 'auto' // unlock the scroll of the host\n\t\t\t\t\t\t})\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe()\n\n\t\tthis.$dismiss\n\t\t\t.pipe(\n\t\t\t\tmergeMap(uid =>\n\t\t\t\t\tforkJoin([\n\t\t\t\t\t\tfromEvent<SheetHereMortyEvent>(window, SheetHereMorty).pipe(\n\t\t\t\t\t\t\ttakeUntil(timer(100)), // Some people say why 10? I say why not?\n\t\t\t\t\t\t\tmap(e => e.detail.sheet),\n\t\t\t\t\t\t\tdefaultIfEmpty(undefined),\n\t\t\t\t\t\t),\n\t\t\t\t\t\tof(uid).pipe(\n\t\t\t\t\t\t\ttap(() => {\n\t\t\t\t\t\t\t\twindow.dispatchEvent(new CustomEvent(SheetWhereAreYouRicky, { detail: { uid } }))\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t),\n\t\t\t\t\t]),\n\t\t\t\t),\n\t\t\t\ttap(([sheet]) => {\n\t\t\t\t\tsheet?.closeSheet()\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\tdismiss(uid: string) {\n\t\tthis.$dismiss.next(uid)\n\t}\n\n\topen(target: BottomSheeetTarget) {\n\t\tthis.bottomSheet.next(target)\n\t}\n}\nexport const sheet = new BottomSheetService()\n","import { $LitElement } from '@mixins/index'\nimport { html } from 'lit'\nimport { customElement, property, query, queryAssignedElements } from 'lit/decorators.js'\nimport { fromEvent, merge, takeUntil, tap } from 'rxjs'\nimport style from './sheet.scss?inline'\nimport {\n\tSchmancySheetPosition,\n\tSheetHereMorty,\n\tSheetWhereAreYouRicky,\n\tSheetWhereAreYouRickyEvent,\n\tsheet,\n} from './sheet.service'\nimport { on } from './hook'\n\n@customElement('schmancy-sheet')\nexport default class SchmancySheet extends $LitElement(style) {\n\t@property({ type: String, reflect: true }) uid!: string\n\t@property({ type: Boolean, reflect: true }) open = false\n\t@property({ type: String, reflect: true }) header: 'hidden' | 'visible' = 'visible'\n\t@property({ type: String, reflect: true }) position: SchmancySheetPosition = SchmancySheetPosition.Side\n\t@property({ type: Boolean, reflect: true }) persist = false\n\t@property({ type: Boolean, reflect: true }) allowOverlayDismiss = true\n\t@property({ type: String, reflect: true }) title = ''\n\n\t@query('.sheet') private sheet!: HTMLElement\n\t@queryAssignedElements({ flatten: true }) private assignedElements!: HTMLElement[]\n\n\t@property() focusAttribute = 'autofocus'\n\tprivate lastFocusedElement: HTMLElement | null = null\n\n\t@on('open')\n\tonOpenChange(_oldValue: boolean, newValue: boolean) {\n\t\tif (newValue) {\n\t\t\tthis.lastFocusedElement = document.activeElement as HTMLElement\n\t\t\tthis.addFocusTrap()\n\t\t\tthis.focus()\n\t\t} else {\n\t\t\tthis.removeFocusTrap()\n\t\t\tthis.lastFocusedElement?.focus()\n\t\t\tthis.lastFocusedElement = null\n\t\t}\n\t}\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\t\tthis.setupEventListeners()\n\t}\n\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback()\n\t\tthis.disconnecting.next(true)\n\t}\n\n\tprivate setupEventListeners() {\n\t\t// Handle browser back button\n\t\tconst popState$ = fromEvent<PopStateEvent>(window, 'popstate').pipe(\n\t\t\ttap(e => {\n\t\t\t\te.preventDefault()\n\t\t\t\tthis.closeSheet()\n\t\t\t}),\n\t\t)\n\n\t\t// Handle ESC key\n\t\tconst keyUp$ = fromEvent<KeyboardEvent>(window, 'keyup').pipe(\n\t\t\ttap(event => {\n\t\t\t\tif (event.key === 'Escape' && !this.sheetContainsFocus()) {\n\t\t\t\t\tsheet.dismiss(this.uid)\n\t\t\t\t}\n\t\t\t}),\n\t\t)\n\n\t\t// Handle inter-component communication\n\t\tconst rickyComm$ = fromEvent<SheetWhereAreYouRickyEvent>(window, SheetWhereAreYouRicky).pipe(\n\t\t\ttap(e => {\n\t\t\t\tif (e.detail.uid === this.uid) this.announcePresence()\n\t\t\t}),\n\t\t)\n\n\t\tmerge(popState$, keyUp$, rickyComm$).pipe(takeUntil(this.disconnecting)).subscribe()\n\t}\n\n\tprivate sheetContainsFocus(): boolean {\n\t\treturn this.sheet?.contains(document.activeElement) ?? false\n\t}\n\n\tprivate announcePresence() {\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent(SheetHereMorty, {\n\t\t\t\tdetail: { sheet: this },\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t}\n\n\tprivate addFocusTrap() {\n\t\tdocument.addEventListener('focusin', this.handleFocusIn)\n\t}\n\n\tprivate removeFocusTrap() {\n\t\tdocument.removeEventListener('focusin', this.handleFocusIn)\n\t}\n\n\tprivate handleFocusIn = (e: Event) => {\n\t\tif (!this.sheet?.contains(e.target as Node)) {\n\t\t\tthis.focus()\n\t\t}\n\t}\n\n\tsetIsSheetShown(isShown: boolean) {\n\t\tthis.sheet?.setAttribute('aria-hidden', String(!isShown))\n\t\tthis.sheet?.setAttribute('aria-modal', String(isShown))\n\t}\n\n\tcloseSheet() {\n\t\tthis.open = false\n\t\tthis.dispatchEvent(new CustomEvent('close'))\n\t}\n\n\tprivate getFocusElement(): HTMLElement | null {\n\t\tconst selector = `[${this.focusAttribute}]`\n\t\treturn (this.assignedElements.find(el => el.matches(selector) || el.querySelector(selector)) as HTMLElement) ?? null\n\t}\n\n\toverride focus() {\n\t\tthis.getFocusElement()?.focus()\n\t}\n\n\trender() {\n\t\treturn html`\n\t\t\t<div class=\"sheet\" role=\"dialog\" aria-labelledby=\"sheet-title\" aria-hidden=${!this.open} aria-modal=${this.open}>\n\t\t\t\t<div\n\t\t\t\t\tclass=\"overlay\"\n\t\t\t\t\t@click=${(e: Event) => {\n\t\t\t\t\t\te.stopPropagation()\n\t\t\t\t\t\tif (this.allowOverlayDismiss) sheet.dismiss(this.uid)\n\t\t\t\t\t}}\n\t\t\t\t></div>\n\t\t\t\t<section class=\"content w-full\" data-position=${this.position}>\n\t\t\t\t\t<schmancy-sheet-header\n\t\t\t\t\t\tclass=\"sticky top-0 z-50 w-full\"\n\t\t\t\t\t\t@dismiss=${(e: CustomEvent) => {\n\t\t\t\t\t\t\te.stopPropagation()\n\t\t\t\t\t\t\tsheet.dismiss(this.uid)\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tid=\"sheet-title\"\n\t\t\t\t\t\t.hidden=${this.header === 'hidden'}\n\t\t\t\t\t\ttitle=${this.title}\n\t\t\t\t\t></schmancy-sheet-header>\n\t\t\t\t\t<schmancy-surface class=\"overflow-auto\" fill=\"all\" type=\"surface\">\n\t\t\t\t\t\t<slot></slot>\n\t\t\t\t\t</schmancy-surface>\n\t\t\t\t</section>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-sheet': SchmancySheet\n\t}\n}\n","// @watch decorator\n//\n// Runs when an observed property changes, e.g. @property or @state, but before the component updates.\n//\n// To wait for an update to complete after a change occurs, use `await this.updateComplete` in the handler. To start\n// watching after the initial update/render, use `{ waitUntilFirstUpdate: true }` or `this.hasUpdated` in the handler.\n//\n// Usage:\n//\n// @watch('propName')\n// handlePropChange(oldValue, newValue) {\n// ...\n// }\n//\ninterface WatchOptions {\n\twaitUntilFirstUpdate?: boolean\n}\n\nexport function on(propName: string, options?: WatchOptions) {\n\treturn (protoOrDescriptor: any, name: string): any => {\n\t\tconst { willUpdate } = protoOrDescriptor\n\n\t\toptions = Object.assign({ waitUntilFirstUpdate: false }, options) as WatchOptions\n\n\t\tprotoOrDescriptor.willUpdate = function (changedProps: Map<string, any>) {\n\t\t\twillUpdate.call(this, changedProps)\n\n\t\t\tif (changedProps.has(propName)) {\n\t\t\t\tconst oldValue = changedProps.get(propName)\n\t\t\t\tconst newValue = this[propName]\n\n\t\t\t\tif (oldValue !== newValue) {\n\t\t\t\t\tif (!options?.waitUntilFirstUpdate || this.hasUpdated) {\n\t\t\t\t\t\tthis[name].call(this, oldValue, newValue)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"],"names":["SchmancySheetHeader","TailwindElement","classes","absolute","this","title","length","relative","html","classMap","dispatchEvent","CustomEvent","bubbles","composed","__decorateClass","property","prototype","customElement","SchmancySheetPosition","SheetWhereAreYouRicky","SheetHereMorty","sheet","constructor","bottomSheet","Subject","$dismiss","pipe","switchMap","forkJoin","fromEvent","window","takeUntil","timer","map","e","detail","defaultIfEmpty","of","target","tap","uid","component","tagName","document","createElement","body","appendChild","setAttribute","position","innerWidth","allowOverlyDismiss","persist","header","style","overflow","delay","filter","shadowRoot","querySelector","assignedElements","find","take","subscribe","remove","mergeMap","closeSheet","next","SchmancySheet","$LitElement","super","arguments","open","Side","allowOverlayDismiss","focusAttribute","lastFocusedElement","handleFocusIn","contains","focus","_oldValue","newValue","activeElement","addFocusTrap","removeFocusTrap","connectedCallback","setupEventListeners","disconnectedCallback","disconnecting","popState$","preventDefault","keyUp$","event","key","sheetContainsFocus","dismiss","rickyComm$","announcePresence","merge","addEventListener","removeEventListener","isShown","String","selector","el","matches","getFocusElement","stopPropagation","propName","options","type","reflect","Boolean","query","queryAssignedElements","flatten","protoOrDescriptor","name","willUpdate","Object","assign","waitUntilFirstUpdate","changedProps","call","has","oldValue","get","hasUpdated"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sheet-BgbV6g2F.cjs","sources":["../src/sheet/header.ts","../src/sheet/sheet.service.ts","../src/sheet/sheet.ts","../src/sheet/hook.ts"],"sourcesContent":["import { TailwindElement } from '@mixins/index'\nimport { html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\n@customElement('schmancy-sheet-header')\nexport default class SchmancySheetHeader extends TailwindElement() {\n\t@property() title: string\n\trender() {\n\t\tconst classes = {\n\t\t\tabsolute: this.title.length === 0,\n\t\t\trelative: this.title.length > 0,\n\t\t}\n\t\treturn html`\n\t\t\t<schmancy-surface fill=\"width\" elevation=\"1\">\n\t\t\t\t<schmancy-grid class=\"${this.classMap(classes)}\" align=\"center\" justify=\"stretch\" cols=\"auto 1fr auto\">\n\t\t\t\t\t<slot name=\"back\">\n\t\t\t\t\t\t<schmancy-button\n\t\t\t\t\t\t\t@click=${() => {\n\t\t\t\t\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\t\t\t\t\tnew CustomEvent('dismiss', {\n\t\t\t\t\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span class=\"text-[24px]\">← </span>\n\t\t\t\t\t\t</schmancy-button>\n\t\t\t\t\t</slot>\n\t\t\t\t\t<schmancy-typography transform=\"capitalize\" type=\"headline\" token=\"lg\"> ${this.title} </schmancy-typography>\n\t\t\t\t\t<slot name=\"actions\">\n\t\t\t\t\t\t<schmancy-icon-button\n\t\t\t\t\t\t\t@click=${() => {\n\t\t\t\t\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\t\t\t\t\tnew CustomEvent('dismiss', {\n\t\t\t\t\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tclose\n\t\t\t\t\t\t</schmancy-icon-button>\n\t\t\t\t\t</slot>\n\t\t\t\t</schmancy-grid>\n\t\t\t</schmancy-surface>\n\t\t`\n\t}\n}\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-sheet-header': SchmancySheetHeader\n\t}\n}\n","import {\n\tdefaultIfEmpty,\n\tdelay,\n\tfilter,\n\tforkJoin,\n\tfromEvent,\n\tmap,\n\tmergeMap,\n\tof,\n\tSubject,\n\tswitchMap,\n\ttake,\n\ttakeUntil,\n\ttap,\n\ttimer,\n} from 'rxjs'\nimport SchmancySheet from './sheet'\n\nexport enum SchmancySheetPosition {\n\tSide = 'side',\n\tBottom = 'bottom',\n\t/**\n\t * @deprecated use bottom instead\n\t */\n\tBottomCenter = 'bottom-center',\n\t/**\n\t * @deprecated use side instead\n\t */\n\tTopRight = 'top-right',\n\t/**\n\t * @deprecated use side instead\n\t */\n\tBottomRight = 'bottom-right',\n}\n\ntype BottomSheeetTarget = {\n\tcomponent: HTMLElement\n\tuid?: string\n\tposition?: SchmancySheetPosition\n\tpersist?: boolean\n\tclose?: () => void\n\tallowOverlyDismiss?: boolean\n\ttitle?: string\n\theader?: 'hidden' | 'visible'\n}\n\n// Events for communication between bottom-sheet component and bottom-sheet.service\nexport type SheetWhereAreYouRickyEvent = CustomEvent<{\n\tuid: string\n}>\nexport const SheetWhereAreYouRicky = 'are-you-there-sheet'\n\nexport type SheetHereMortyEvent = CustomEvent<{\n\tsheet: SchmancySheet\n}>\nexport const SheetHereMorty = 'yes-here'\n\n// Function to determine the position based on screen size\nconst getPosition = (): SchmancySheetPosition => {\n\treturn window.innerWidth >= 768 ? SchmancySheetPosition.Side : SchmancySheetPosition.Bottom // Adjust 768 as needed for your breakpoint\n}\n\nclass BottomSheetService {\n\tbottomSheet = new Subject<BottomSheeetTarget>()\n\t$dismiss = new Subject<string>()\n\tconstructor() {\n\t\tthis.bottomSheet\n\t\t\t.pipe(\n\t\t\t\tswitchMap(target =>\n\t\t\t\t\tforkJoin([\n\t\t\t\t\t\tfromEvent<SheetHereMortyEvent>(window, SheetHereMorty).pipe(\n\t\t\t\t\t\t\ttakeUntil(timer(0)),\n\t\t\t\t\t\t\tmap(e => e.detail.sheet),\n\t\t\t\t\t\t\tdefaultIfEmpty(undefined),\n\t\t\t\t\t\t),\n\t\t\t\t\t\tof(target).pipe(\n\t\t\t\t\t\t\ttap(() => {\n\t\t\t\t\t\t\t\twindow.dispatchEvent(\n\t\t\t\t\t\t\t\t\tnew CustomEvent(SheetWhereAreYouRicky, {\n\t\t\t\t\t\t\t\t\t\tdetail: { uid: target.uid ?? target.component.tagName },\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t),\n\t\t\t\t\t]),\n\t\t\t\t),\n\t\t\t\tmap(([sheet, target]) => {\n\t\t\t\t\tconsole.log(sheet, target)\n\t\t\t\t\tif (!sheet) {\n\t\t\t\t\t\t// if sheet is not found, create it\n\t\t\t\t\t\tsheet = document.createElement('schmancy-sheet')\n\t\t\t\t\t\tdocument.body.appendChild(sheet)\n\t\t\t\t\t}\n\t\t\t\t\tsheet.setAttribute('uid', target.uid ?? target.component.tagName)\n\n\t\t\t\t\t// **Use the dynamic position function here**\n\t\t\t\t\tconst position = target.position || getPosition() // Use target.position if it's set, otherwise determine based on screen size\n\t\t\t\t\tsheet.setAttribute('position', position)\n\n\t\t\t\t\tsheet.setAttribute('allowOverlyDismiss', target.allowOverlyDismiss === false ? 'false' : 'true')\n\t\t\t\t\ttarget.title && sheet.setAttribute('title', target.title)\n\t\t\t\t\ttarget.persist && sheet.setAttribute('persist', target.persist ?? false)\n\t\t\t\t\ttarget.header && sheet.setAttribute('header', target.header)\n\t\t\t\t\tdocument.body.style.overflow = 'hidden' // lock the scroll of the host\n\t\t\t\t\treturn { target, sheet }\n\t\t\t\t}),\n\t\t\t\tdelay(20),\n\t\t\t\tfilter(({ target, sheet }) => {\n\t\t\t\t\t// if the sheet has already the component, just show it\n\t\t\t\t\tif (\n\t\t\t\t\t\ttarget.persist &&\n\t\t\t\t\t\tsheet?.shadowRoot\n\t\t\t\t\t\t\t?.querySelector('slot')\n\t\t\t\t\t\t\t?.assignedElements()\n\t\t\t\t\t\t\t.find(e => e.tagName === target.component.tagName)\n\t\t\t\t\t) {\n\t\t\t\t\t\tsheet?.setAttribute('open', 'true')\n\t\t\t\t\t\treturn false\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn true // if the sheet does not have the component, continue to the next step\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\ttap(({ target, sheet }) => {\n\t\t\t\t\tsheet?.appendChild(target.component)\n\t\t\t\t}),\n\t\t\t\tdelay(1),\n\t\t\t\ttap(({ sheet }) => {\n\t\t\t\t\tsheet?.setAttribute('open', 'true')\n\t\t\t\t}),\n\t\t\t\ttap(({ sheet }) => {\n\t\t\t\t\tfromEvent<CustomEvent>(sheet, 'close')\n\t\t\t\t\t\t.pipe(take(1))\n\t\t\t\t\t\t.pipe(delay(300))\n\t\t\t\t\t\t.subscribe(e => {\n\t\t\t\t\t\t\tconst target = e.target as SchmancySheet\n\t\t\t\t\t\t\tconsole.log(target)\n\n\t\t\t\t\t\t\tif (!target?.persist) target?.remove()\n\t\t\t\t\t\t\tdocument.body.style.overflow = 'auto' // unlock the scroll of the host\n\t\t\t\t\t\t})\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe()\n\n\t\tthis.$dismiss\n\t\t\t.pipe(\n\t\t\t\tmergeMap(uid =>\n\t\t\t\t\tforkJoin([\n\t\t\t\t\t\tfromEvent<SheetHereMortyEvent>(window, SheetHereMorty).pipe(\n\t\t\t\t\t\t\ttakeUntil(timer(100)), // Some people say why 10? I say why not?\n\t\t\t\t\t\t\tmap(e => e.detail.sheet),\n\t\t\t\t\t\t\tdefaultIfEmpty(undefined),\n\t\t\t\t\t\t),\n\t\t\t\t\t\tof(uid).pipe(\n\t\t\t\t\t\t\ttap(() => {\n\t\t\t\t\t\t\t\twindow.dispatchEvent(new CustomEvent(SheetWhereAreYouRicky, { detail: { uid } }))\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t),\n\t\t\t\t\t]),\n\t\t\t\t),\n\t\t\t\ttap(([sheet]) => {\n\t\t\t\t\tsheet?.closeSheet()\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\tdismiss(uid: string) {\n\t\tthis.$dismiss.next(uid)\n\t}\n\n\topen(target: BottomSheeetTarget) {\n\t\tthis.bottomSheet.next(target)\n\t}\n}\nexport const sheet = new BottomSheetService()\n","import { $LitElement } from '@mixins/index'\nimport { html } from 'lit'\nimport { customElement, property, query, queryAssignedElements } from 'lit/decorators.js'\nimport { fromEvent, merge, takeUntil, tap } from 'rxjs'\nimport style from './sheet.scss?inline'\nimport {\n\tSchmancySheetPosition,\n\tSheetHereMorty,\n\tSheetWhereAreYouRicky,\n\tSheetWhereAreYouRickyEvent,\n\tsheet,\n} from './sheet.service'\nimport { on } from './hook'\n\n@customElement('schmancy-sheet')\nexport default class SchmancySheet extends $LitElement(style) {\n\t@property({ type: String, reflect: true }) uid!: string\n\t@property({ type: Boolean, reflect: true }) open = false\n\t@property({ type: String, reflect: true }) header: 'hidden' | 'visible' = 'visible'\n\t@property({ type: String, reflect: true }) position: SchmancySheetPosition = SchmancySheetPosition.Side\n\t@property({ type: Boolean, reflect: true }) persist = false\n\t@property({ type: Boolean, reflect: true }) allowOverlayDismiss = true\n\t@property({ type: String, reflect: true }) title = ''\n\n\t@query('.sheet') private sheet!: HTMLElement\n\t@queryAssignedElements({ flatten: true }) private assignedElements!: HTMLElement[]\n\n\t@property() focusAttribute = 'autofocus'\n\tprivate lastFocusedElement: HTMLElement | null = null\n\n\t@on('open')\n\tonOpenChange(_oldValue: boolean, newValue: boolean) {\n\t\tif (newValue) {\n\t\t\tthis.lastFocusedElement = document.activeElement as HTMLElement\n\t\t\tthis.addFocusTrap()\n\t\t\tthis.focus()\n\t\t} else {\n\t\t\tthis.removeFocusTrap()\n\t\t\tthis.lastFocusedElement?.focus()\n\t\t\tthis.lastFocusedElement = null\n\t\t}\n\t}\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\t\tthis.setupEventListeners()\n\t}\n\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback()\n\t\tthis.disconnecting.next(true)\n\t}\n\n\tprivate setupEventListeners() {\n\t\t// Handle browser back button\n\t\tconst popState$ = fromEvent<PopStateEvent>(window, 'popstate').pipe(\n\t\t\ttap(e => {\n\t\t\t\te.preventDefault()\n\t\t\t\tthis.closeSheet()\n\t\t\t}),\n\t\t)\n\n\t\t// Handle ESC key\n\t\tconst keyUp$ = fromEvent<KeyboardEvent>(window, 'keyup').pipe(\n\t\t\ttap(event => {\n\t\t\t\tif (event.key === 'Escape' && !this.sheetContainsFocus()) {\n\t\t\t\t\tsheet.dismiss(this.uid)\n\t\t\t\t}\n\t\t\t}),\n\t\t)\n\n\t\t// Handle inter-component communication\n\t\tconst rickyComm$ = fromEvent<SheetWhereAreYouRickyEvent>(window, SheetWhereAreYouRicky).pipe(\n\t\t\ttap(e => {\n\t\t\t\tif (e.detail.uid === this.uid) this.announcePresence()\n\t\t\t}),\n\t\t)\n\n\t\tmerge(popState$, keyUp$, rickyComm$).pipe(takeUntil(this.disconnecting)).subscribe()\n\t}\n\n\tprivate sheetContainsFocus(): boolean {\n\t\treturn this.sheet?.contains(document.activeElement) ?? false\n\t}\n\n\tprivate announcePresence() {\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent(SheetHereMorty, {\n\t\t\t\tdetail: { sheet: this },\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t}\n\n\tprivate addFocusTrap() {\n\t\tdocument.addEventListener('focusin', this.handleFocusIn)\n\t}\n\n\tprivate removeFocusTrap() {\n\t\tdocument.removeEventListener('focusin', this.handleFocusIn)\n\t}\n\n\tprivate handleFocusIn = (e: Event) => {\n\t\tif (!this.sheet?.contains(e.target as Node)) {\n\t\t\tthis.focus()\n\t\t}\n\t}\n\n\tsetIsSheetShown(isShown: boolean) {\n\t\tthis.sheet?.setAttribute('aria-hidden', String(!isShown))\n\t\tthis.sheet?.setAttribute('aria-modal', String(isShown))\n\t}\n\n\tcloseSheet() {\n\t\tthis.open = false\n\t\tthis.dispatchEvent(new CustomEvent('close'))\n\t}\n\n\tprivate getFocusElement(): HTMLElement | null {\n\t\tconst selector = `[${this.focusAttribute}]`\n\t\treturn (this.assignedElements.find(el => el.matches(selector) || el.querySelector(selector)) as HTMLElement) ?? null\n\t}\n\n\toverride focus() {\n\t\tthis.getFocusElement()?.focus()\n\t}\n\n\trender() {\n\t\treturn html`\n\t\t\t<div class=\"sheet\" role=\"dialog\" aria-labelledby=\"sheet-title\" aria-hidden=${!this.open} aria-modal=${this.open}>\n\t\t\t\t<div\n\t\t\t\t\tclass=\"overlay\"\n\t\t\t\t\t@click=${(e: Event) => {\n\t\t\t\t\t\te.stopPropagation()\n\t\t\t\t\t\tif (this.allowOverlayDismiss) sheet.dismiss(this.uid)\n\t\t\t\t\t}}\n\t\t\t\t></div>\n\t\t\t\t<section class=\"content w-full\" data-position=${this.position}>\n\t\t\t\t\t<schmancy-sheet-header\n\t\t\t\t\t\tclass=\"sticky top-0 z-50 w-full\"\n\t\t\t\t\t\t@dismiss=${(e: CustomEvent) => {\n\t\t\t\t\t\t\te.stopPropagation()\n\t\t\t\t\t\t\tsheet.dismiss(this.uid)\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tid=\"sheet-title\"\n\t\t\t\t\t\t.hidden=${this.header === 'hidden'}\n\t\t\t\t\t\ttitle=${this.title}\n\t\t\t\t\t></schmancy-sheet-header>\n\t\t\t\t\t<schmancy-surface class=\"overflow-auto\" fill=\"all\" type=\"surface\">\n\t\t\t\t\t\t<slot></slot>\n\t\t\t\t\t</schmancy-surface>\n\t\t\t\t</section>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-sheet': SchmancySheet\n\t}\n}\n","// @watch decorator\n//\n// Runs when an observed property changes, e.g. @property or @state, but before the component updates.\n//\n// To wait for an update to complete after a change occurs, use `await this.updateComplete` in the handler. To start\n// watching after the initial update/render, use `{ waitUntilFirstUpdate: true }` or `this.hasUpdated` in the handler.\n//\n// Usage:\n//\n// @watch('propName')\n// handlePropChange(oldValue, newValue) {\n// ...\n// }\n//\ninterface WatchOptions {\n\twaitUntilFirstUpdate?: boolean\n}\n\nexport function on(propName: string, options?: WatchOptions) {\n\treturn (protoOrDescriptor: any, name: string): any => {\n\t\tconst { willUpdate } = protoOrDescriptor\n\n\t\toptions = Object.assign({ waitUntilFirstUpdate: false }, options) as WatchOptions\n\n\t\tprotoOrDescriptor.willUpdate = function (changedProps: Map<string, any>) {\n\t\t\twillUpdate.call(this, changedProps)\n\n\t\t\tif (changedProps.has(propName)) {\n\t\t\t\tconst oldValue = changedProps.get(propName)\n\t\t\t\tconst newValue = this[propName]\n\n\t\t\t\tif (oldValue !== newValue) {\n\t\t\t\t\tif (!options?.waitUntilFirstUpdate || this.hasUpdated) {\n\t\t\t\t\t\tthis[name].call(this, oldValue, newValue)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"],"names":["SchmancySheetHeader","TailwindElement","classes","absolute","this","title","length","relative","html","classMap","dispatchEvent","CustomEvent","bubbles","composed","__decorateClass","property","prototype","customElement","SchmancySheetPosition","SheetWhereAreYouRicky","SheetHereMorty","sheet","constructor","bottomSheet","Subject","$dismiss","pipe","switchMap","forkJoin","fromEvent","window","takeUntil","timer","map","e","detail","defaultIfEmpty","of","target","tap","uid","component","tagName","document","createElement","body","appendChild","setAttribute","position","innerWidth","allowOverlyDismiss","persist","header","style","overflow","delay","filter","shadowRoot","querySelector","assignedElements","find","take","subscribe","remove","mergeMap","closeSheet","next","SchmancySheet","$LitElement","super","arguments","open","Side","allowOverlayDismiss","focusAttribute","lastFocusedElement","handleFocusIn","contains","focus","_oldValue","newValue","activeElement","addFocusTrap","removeFocusTrap","connectedCallback","setupEventListeners","disconnectedCallback","disconnecting","popState$","preventDefault","keyUp$","event","key","sheetContainsFocus","dismiss","rickyComm$","announcePresence","merge","addEventListener","removeEventListener","isShown","String","selector","el","matches","getFocusElement","stopPropagation","propName","options","type","reflect","Boolean","query","queryAssignedElements","flatten","protoOrDescriptor","name","willUpdate","Object","assign","waitUntilFirstUpdate","changedProps","call","has","oldValue","get","hasUpdated"],"mappings":"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"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { Subject as E, switchMap as D, forkJoin as x, fromEvent as d, takeUntil as f, timer as
|
|
1
|
+
import { Subject as E, switchMap as D, forkJoin as x, fromEvent as d, of as S, takeUntil as f, timer as C, map as m, defaultIfEmpty as F, tap as h, delay as y, filter as U, take as j, mergeMap as P, merge as B } from "rxjs";
|
|
2
2
|
import "lit/directives/class-map.js";
|
|
3
3
|
import "lit/directives/style-map.js";
|
|
4
|
-
import { T } from "./tailwind.mixin-
|
|
4
|
+
import { T } from "./tailwind.mixin-DxmWMnBQ.js";
|
|
5
5
|
import { html as $ } from "lit";
|
|
6
6
|
import { property as c, customElement as O, query as z, queryAssignedElements as I } from "lit/decorators.js";
|
|
7
|
-
import { $ as q } from "./litElement.mixin-
|
|
7
|
+
import { $ as q } from "./litElement.mixin-vAR9BIyD.js";
|
|
8
8
|
var L = Object.defineProperty, N = Object.getOwnPropertyDescriptor, k = (t, e, s, i) => {
|
|
9
9
|
for (var a, o = i > 1 ? void 0 : i ? N(e, s) : e, l = t.length - 1; l >= 0; l--) (a = t[l]) && (o = (i ? a(e, s, o) : a(o)) || o);
|
|
10
10
|
return i && o && L(e, s, o), o;
|
|
@@ -43,7 +43,7 @@ k([c()], b.prototype, "title", 2), b = k([O("schmancy-sheet-header")], b);
|
|
|
43
43
|
var A = ((t) => (t.Side = "side", t.Bottom = "bottom", t.BottomCenter = "bottom-center", t.TopRight = "top-right", t.BottomRight = "bottom-right", t))(A || {});
|
|
44
44
|
const g = "are-you-there-sheet", w = "yes-here", v = new class {
|
|
45
45
|
constructor() {
|
|
46
|
-
this.bottomSheet = new E(), this.$dismiss = new E(), this.bottomSheet.pipe(D((t) => x([d(window, w).pipe(f(
|
|
46
|
+
this.bottomSheet = new E(), this.$dismiss = new E(), this.bottomSheet.pipe(D((t) => x([d(window, w).pipe(f(C(0)), m((e) => e.detail.sheet), F(void 0)), S(t).pipe(h(() => {
|
|
47
47
|
window.dispatchEvent(new CustomEvent(g, { detail: { uid: t.uid ?? t.component.tagName } }));
|
|
48
48
|
}))])), m(([t, e]) => {
|
|
49
49
|
t || (t = document.createElement("schmancy-sheet"), document.body.appendChild(t)), t.setAttribute("uid", e.uid ?? e.component.tagName);
|
|
@@ -61,7 +61,7 @@ const g = "are-you-there-sheet", w = "yes-here", v = new class {
|
|
|
61
61
|
const s = e.target;
|
|
62
62
|
s != null && s.persist || (s == null || s.remove()), document.body.style.overflow = "auto";
|
|
63
63
|
});
|
|
64
|
-
})).subscribe(), this.$dismiss.pipe(P((t) => x([d(window, w).pipe(f(
|
|
64
|
+
})).subscribe(), this.$dismiss.pipe(P((t) => x([d(window, w).pipe(f(C(100)), m((e) => e.detail.sheet), F(void 0)), S(t).pipe(h(() => {
|
|
65
65
|
window.dispatchEvent(new CustomEvent(g, { detail: { uid: t } }));
|
|
66
66
|
}))])), h(([t]) => {
|
|
67
67
|
t == null || t.closeSheet();
|
|
@@ -176,4 +176,4 @@ export {
|
|
|
176
176
|
w as b,
|
|
177
177
|
v as s
|
|
178
178
|
};
|
|
179
|
-
//# sourceMappingURL=sheet-
|
|
179
|
+
//# sourceMappingURL=sheet-WsaFx6-i.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sheet-DEnU17L8.js","sources":["../src/sheet/header.ts","../src/sheet/sheet.service.ts","../src/sheet/sheet.ts","../src/sheet/hook.ts"],"sourcesContent":["import { TailwindElement } from '@mixins/index'\nimport { html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\n@customElement('schmancy-sheet-header')\nexport default class SchmancySheetHeader extends TailwindElement() {\n\t@property() title: string\n\trender() {\n\t\tconst classes = {\n\t\t\tabsolute: this.title.length === 0,\n\t\t\trelative: this.title.length > 0,\n\t\t}\n\t\treturn html`\n\t\t\t<schmancy-surface fill=\"width\" elevation=\"1\">\n\t\t\t\t<schmancy-grid class=\"${this.classMap(classes)}\" align=\"center\" justify=\"stretch\" cols=\"auto 1fr auto\">\n\t\t\t\t\t<slot name=\"back\">\n\t\t\t\t\t\t<schmancy-button\n\t\t\t\t\t\t\t@click=${() => {\n\t\t\t\t\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\t\t\t\t\tnew CustomEvent('dismiss', {\n\t\t\t\t\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span class=\"text-[24px]\">← </span>\n\t\t\t\t\t\t</schmancy-button>\n\t\t\t\t\t</slot>\n\t\t\t\t\t<schmancy-typography transform=\"capitalize\" type=\"headline\" token=\"lg\"> ${this.title} </schmancy-typography>\n\t\t\t\t\t<slot name=\"actions\">\n\t\t\t\t\t\t<schmancy-icon-button\n\t\t\t\t\t\t\t@click=${() => {\n\t\t\t\t\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\t\t\t\t\tnew CustomEvent('dismiss', {\n\t\t\t\t\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tclose\n\t\t\t\t\t\t</schmancy-icon-button>\n\t\t\t\t\t</slot>\n\t\t\t\t</schmancy-grid>\n\t\t\t</schmancy-surface>\n\t\t`\n\t}\n}\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-sheet-header': SchmancySheetHeader\n\t}\n}\n","import {\n\tdefaultIfEmpty,\n\tdelay,\n\tfilter,\n\tforkJoin,\n\tfromEvent,\n\tmap,\n\tmergeMap,\n\tof,\n\tSubject,\n\tswitchMap,\n\ttake,\n\ttakeUntil,\n\ttap,\n\ttimer,\n} from 'rxjs'\nimport SchmancySheet from './sheet'\n\nexport enum SchmancySheetPosition {\n\tSide = 'side',\n\tBottom = 'bottom',\n\t/**\n\t * @deprecated use bottom instead\n\t */\n\tBottomCenter = 'bottom-center',\n\t/**\n\t * @deprecated use side instead\n\t */\n\tTopRight = 'top-right',\n\t/**\n\t * @deprecated use side instead\n\t */\n\tBottomRight = 'bottom-right',\n}\n\ntype BottomSheeetTarget = {\n\tcomponent: HTMLElement\n\tuid?: string\n\tposition?: SchmancySheetPosition\n\tpersist?: boolean\n\tclose?: () => void\n\tallowOverlyDismiss?: boolean\n\ttitle?: string\n\theader?: 'hidden' | 'visible'\n}\n\n// Events for communication between bottom-sheet component and bottom-sheet.service\nexport type SheetWhereAreYouRickyEvent = CustomEvent<{\n\tuid: string\n}>\nexport const SheetWhereAreYouRicky = 'are-you-there-sheet'\n\nexport type SheetHereMortyEvent = CustomEvent<{\n\tsheet: SchmancySheet\n}>\nexport const SheetHereMorty = 'yes-here'\n\n// Function to determine the position based on screen size\nconst getPosition = (): SchmancySheetPosition => {\n\treturn window.innerWidth >= 768 ? SchmancySheetPosition.Side : SchmancySheetPosition.Bottom // Adjust 768 as needed for your breakpoint\n}\n\nclass BottomSheetService {\n\tbottomSheet = new Subject<BottomSheeetTarget>()\n\t$dismiss = new Subject<string>()\n\tconstructor() {\n\t\tthis.bottomSheet\n\t\t\t.pipe(\n\t\t\t\tswitchMap(target =>\n\t\t\t\t\tforkJoin([\n\t\t\t\t\t\tfromEvent<SheetHereMortyEvent>(window, SheetHereMorty).pipe(\n\t\t\t\t\t\t\ttakeUntil(timer(0)),\n\t\t\t\t\t\t\tmap(e => e.detail.sheet),\n\t\t\t\t\t\t\tdefaultIfEmpty(undefined),\n\t\t\t\t\t\t),\n\t\t\t\t\t\tof(target).pipe(\n\t\t\t\t\t\t\ttap(() => {\n\t\t\t\t\t\t\t\twindow.dispatchEvent(\n\t\t\t\t\t\t\t\t\tnew CustomEvent(SheetWhereAreYouRicky, {\n\t\t\t\t\t\t\t\t\t\tdetail: { uid: target.uid ?? target.component.tagName },\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t),\n\t\t\t\t\t]),\n\t\t\t\t),\n\t\t\t\tmap(([sheet, target]) => {\n\t\t\t\t\tconsole.log(sheet, target)\n\t\t\t\t\tif (!sheet) {\n\t\t\t\t\t\t// if sheet is not found, create it\n\t\t\t\t\t\tsheet = document.createElement('schmancy-sheet')\n\t\t\t\t\t\tdocument.body.appendChild(sheet)\n\t\t\t\t\t}\n\t\t\t\t\tsheet.setAttribute('uid', target.uid ?? target.component.tagName)\n\n\t\t\t\t\t// **Use the dynamic position function here**\n\t\t\t\t\tconst position = target.position || getPosition() // Use target.position if it's set, otherwise determine based on screen size\n\t\t\t\t\tsheet.setAttribute('position', position)\n\n\t\t\t\t\tsheet.setAttribute('allowOverlyDismiss', target.allowOverlyDismiss === false ? 'false' : 'true')\n\t\t\t\t\ttarget.title && sheet.setAttribute('title', target.title)\n\t\t\t\t\ttarget.persist && sheet.setAttribute('persist', target.persist ?? false)\n\t\t\t\t\ttarget.header && sheet.setAttribute('header', target.header)\n\t\t\t\t\tdocument.body.style.overflow = 'hidden' // lock the scroll of the host\n\t\t\t\t\treturn { target, sheet }\n\t\t\t\t}),\n\t\t\t\tdelay(20),\n\t\t\t\tfilter(({ target, sheet }) => {\n\t\t\t\t\t// if the sheet has already the component, just show it\n\t\t\t\t\tif (\n\t\t\t\t\t\ttarget.persist &&\n\t\t\t\t\t\tsheet?.shadowRoot\n\t\t\t\t\t\t\t?.querySelector('slot')\n\t\t\t\t\t\t\t?.assignedElements()\n\t\t\t\t\t\t\t.find(e => e.tagName === target.component.tagName)\n\t\t\t\t\t) {\n\t\t\t\t\t\tsheet?.setAttribute('open', 'true')\n\t\t\t\t\t\treturn false\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn true // if the sheet does not have the component, continue to the next step\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\ttap(({ target, sheet }) => {\n\t\t\t\t\tsheet?.appendChild(target.component)\n\t\t\t\t}),\n\t\t\t\tdelay(1),\n\t\t\t\ttap(({ sheet }) => {\n\t\t\t\t\tsheet?.setAttribute('open', 'true')\n\t\t\t\t}),\n\t\t\t\ttap(({ sheet }) => {\n\t\t\t\t\tfromEvent<CustomEvent>(sheet, 'close')\n\t\t\t\t\t\t.pipe(take(1))\n\t\t\t\t\t\t.pipe(delay(300))\n\t\t\t\t\t\t.subscribe(e => {\n\t\t\t\t\t\t\tconst target = e.target as SchmancySheet\n\t\t\t\t\t\t\tconsole.log(target)\n\n\t\t\t\t\t\t\tif (!target?.persist) target?.remove()\n\t\t\t\t\t\t\tdocument.body.style.overflow = 'auto' // unlock the scroll of the host\n\t\t\t\t\t\t})\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe()\n\n\t\tthis.$dismiss\n\t\t\t.pipe(\n\t\t\t\tmergeMap(uid =>\n\t\t\t\t\tforkJoin([\n\t\t\t\t\t\tfromEvent<SheetHereMortyEvent>(window, SheetHereMorty).pipe(\n\t\t\t\t\t\t\ttakeUntil(timer(100)), // Some people say why 10? I say why not?\n\t\t\t\t\t\t\tmap(e => e.detail.sheet),\n\t\t\t\t\t\t\tdefaultIfEmpty(undefined),\n\t\t\t\t\t\t),\n\t\t\t\t\t\tof(uid).pipe(\n\t\t\t\t\t\t\ttap(() => {\n\t\t\t\t\t\t\t\twindow.dispatchEvent(new CustomEvent(SheetWhereAreYouRicky, { detail: { uid } }))\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t),\n\t\t\t\t\t]),\n\t\t\t\t),\n\t\t\t\ttap(([sheet]) => {\n\t\t\t\t\tsheet?.closeSheet()\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\tdismiss(uid: string) {\n\t\tthis.$dismiss.next(uid)\n\t}\n\n\topen(target: BottomSheeetTarget) {\n\t\tthis.bottomSheet.next(target)\n\t}\n}\nexport const sheet = new BottomSheetService()\n","import { $LitElement } from '@mixins/index'\nimport { html } from 'lit'\nimport { customElement, property, query, queryAssignedElements } from 'lit/decorators.js'\nimport { fromEvent, merge, takeUntil, tap } from 'rxjs'\nimport style from './sheet.scss?inline'\nimport {\n\tSchmancySheetPosition,\n\tSheetHereMorty,\n\tSheetWhereAreYouRicky,\n\tSheetWhereAreYouRickyEvent,\n\tsheet,\n} from './sheet.service'\nimport { on } from './hook'\n\n@customElement('schmancy-sheet')\nexport default class SchmancySheet extends $LitElement(style) {\n\t@property({ type: String, reflect: true }) uid!: string\n\t@property({ type: Boolean, reflect: true }) open = false\n\t@property({ type: String, reflect: true }) header: 'hidden' | 'visible' = 'visible'\n\t@property({ type: String, reflect: true }) position: SchmancySheetPosition = SchmancySheetPosition.Side\n\t@property({ type: Boolean, reflect: true }) persist = false\n\t@property({ type: Boolean, reflect: true }) allowOverlayDismiss = true\n\t@property({ type: String, reflect: true }) title = ''\n\n\t@query('.sheet') private sheet!: HTMLElement\n\t@queryAssignedElements({ flatten: true }) private assignedElements!: HTMLElement[]\n\n\t@property() focusAttribute = 'autofocus'\n\tprivate lastFocusedElement: HTMLElement | null = null\n\n\t@on('open')\n\tonOpenChange(_oldValue: boolean, newValue: boolean) {\n\t\tif (newValue) {\n\t\t\tthis.lastFocusedElement = document.activeElement as HTMLElement\n\t\t\tthis.addFocusTrap()\n\t\t\tthis.focus()\n\t\t} else {\n\t\t\tthis.removeFocusTrap()\n\t\t\tthis.lastFocusedElement?.focus()\n\t\t\tthis.lastFocusedElement = null\n\t\t}\n\t}\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\t\tthis.setupEventListeners()\n\t}\n\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback()\n\t\tthis.disconnecting.next(true)\n\t}\n\n\tprivate setupEventListeners() {\n\t\t// Handle browser back button\n\t\tconst popState$ = fromEvent<PopStateEvent>(window, 'popstate').pipe(\n\t\t\ttap(e => {\n\t\t\t\te.preventDefault()\n\t\t\t\tthis.closeSheet()\n\t\t\t}),\n\t\t)\n\n\t\t// Handle ESC key\n\t\tconst keyUp$ = fromEvent<KeyboardEvent>(window, 'keyup').pipe(\n\t\t\ttap(event => {\n\t\t\t\tif (event.key === 'Escape' && !this.sheetContainsFocus()) {\n\t\t\t\t\tsheet.dismiss(this.uid)\n\t\t\t\t}\n\t\t\t}),\n\t\t)\n\n\t\t// Handle inter-component communication\n\t\tconst rickyComm$ = fromEvent<SheetWhereAreYouRickyEvent>(window, SheetWhereAreYouRicky).pipe(\n\t\t\ttap(e => {\n\t\t\t\tif (e.detail.uid === this.uid) this.announcePresence()\n\t\t\t}),\n\t\t)\n\n\t\tmerge(popState$, keyUp$, rickyComm$).pipe(takeUntil(this.disconnecting)).subscribe()\n\t}\n\n\tprivate sheetContainsFocus(): boolean {\n\t\treturn this.sheet?.contains(document.activeElement) ?? false\n\t}\n\n\tprivate announcePresence() {\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent(SheetHereMorty, {\n\t\t\t\tdetail: { sheet: this },\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t}\n\n\tprivate addFocusTrap() {\n\t\tdocument.addEventListener('focusin', this.handleFocusIn)\n\t}\n\n\tprivate removeFocusTrap() {\n\t\tdocument.removeEventListener('focusin', this.handleFocusIn)\n\t}\n\n\tprivate handleFocusIn = (e: Event) => {\n\t\tif (!this.sheet?.contains(e.target as Node)) {\n\t\t\tthis.focus()\n\t\t}\n\t}\n\n\tsetIsSheetShown(isShown: boolean) {\n\t\tthis.sheet?.setAttribute('aria-hidden', String(!isShown))\n\t\tthis.sheet?.setAttribute('aria-modal', String(isShown))\n\t}\n\n\tcloseSheet() {\n\t\tthis.open = false\n\t\tthis.dispatchEvent(new CustomEvent('close'))\n\t}\n\n\tprivate getFocusElement(): HTMLElement | null {\n\t\tconst selector = `[${this.focusAttribute}]`\n\t\treturn (this.assignedElements.find(el => el.matches(selector) || el.querySelector(selector)) as HTMLElement) ?? null\n\t}\n\n\toverride focus() {\n\t\tthis.getFocusElement()?.focus()\n\t}\n\n\trender() {\n\t\treturn html`\n\t\t\t<div class=\"sheet\" role=\"dialog\" aria-labelledby=\"sheet-title\" aria-hidden=${!this.open} aria-modal=${this.open}>\n\t\t\t\t<div\n\t\t\t\t\tclass=\"overlay\"\n\t\t\t\t\t@click=${(e: Event) => {\n\t\t\t\t\t\te.stopPropagation()\n\t\t\t\t\t\tif (this.allowOverlayDismiss) sheet.dismiss(this.uid)\n\t\t\t\t\t}}\n\t\t\t\t></div>\n\t\t\t\t<section class=\"content w-full\" data-position=${this.position}>\n\t\t\t\t\t<schmancy-sheet-header\n\t\t\t\t\t\tclass=\"sticky top-0 z-50 w-full\"\n\t\t\t\t\t\t@dismiss=${(e: CustomEvent) => {\n\t\t\t\t\t\t\te.stopPropagation()\n\t\t\t\t\t\t\tsheet.dismiss(this.uid)\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tid=\"sheet-title\"\n\t\t\t\t\t\t.hidden=${this.header === 'hidden'}\n\t\t\t\t\t\ttitle=${this.title}\n\t\t\t\t\t></schmancy-sheet-header>\n\t\t\t\t\t<schmancy-surface class=\"overflow-auto\" fill=\"all\" type=\"surface\">\n\t\t\t\t\t\t<slot></slot>\n\t\t\t\t\t</schmancy-surface>\n\t\t\t\t</section>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-sheet': SchmancySheet\n\t}\n}\n","// @watch decorator\n//\n// Runs when an observed property changes, e.g. @property or @state, but before the component updates.\n//\n// To wait for an update to complete after a change occurs, use `await this.updateComplete` in the handler. To start\n// watching after the initial update/render, use `{ waitUntilFirstUpdate: true }` or `this.hasUpdated` in the handler.\n//\n// Usage:\n//\n// @watch('propName')\n// handlePropChange(oldValue, newValue) {\n// ...\n// }\n//\ninterface WatchOptions {\n\twaitUntilFirstUpdate?: boolean\n}\n\nexport function on(propName: string, options?: WatchOptions) {\n\treturn (protoOrDescriptor: any, name: string): any => {\n\t\tconst { willUpdate } = protoOrDescriptor\n\n\t\toptions = Object.assign({ waitUntilFirstUpdate: false }, options) as WatchOptions\n\n\t\tprotoOrDescriptor.willUpdate = function (changedProps: Map<string, any>) {\n\t\t\twillUpdate.call(this, changedProps)\n\n\t\t\tif (changedProps.has(propName)) {\n\t\t\t\tconst oldValue = changedProps.get(propName)\n\t\t\t\tconst newValue = this[propName]\n\n\t\t\t\tif (oldValue !== newValue) {\n\t\t\t\t\tif (!options?.waitUntilFirstUpdate || this.hasUpdated) {\n\t\t\t\t\t\tthis[name].call(this, oldValue, newValue)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"],"names":["SchmancySheetHeader","TailwindElement","render","classes","absolute","this","title","length","relative","html","classMap","dispatchEvent","CustomEvent","bubbles","composed","__decorateClass","property","prototype","customElement","SchmancySheetPosition","SheetWhereAreYouRicky","SheetHereMorty","sheet","bottomSheet","Subject","$dismiss","pipe","switchMap","forkJoin","fromEvent","window","takeUntil","timer","map","e","detail","defaultIfEmpty","undefined","of","target","tap","uid","component","tagName","document","createElement","body","appendChild","setAttribute","position","innerWidth","allowOverlyDismiss","persist","header","style","overflow","delay","filter","shadowRoot","querySelector","assignedElements","find","take","subscribe","remove","mergeMap","closeSheet","next","SchmancySheet","$LitElement","super","arguments","open","Side","allowOverlayDismiss","focusAttribute","lastFocusedElement","handleFocusIn","contains","focus","_oldValue","newValue","activeElement","addFocusTrap","removeFocusTrap","connectedCallback","setupEventListeners","disconnectedCallback","disconnecting","popState$","preventDefault","keyUp$","event","key","sheetContainsFocus","dismiss","rickyComm$","announcePresence","merge","addEventListener","removeEventListener","isShown","String","getFocusElement","selector","el","matches","stopPropagation","propName","options","type","reflect","Boolean","query","queryAssignedElements","flatten","protoOrDescriptor","name","willUpdate","Object","assign","waitUntilFirstUpdate","changedProps","call","has","oldValue","get","hasUpdated"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sheet-WsaFx6-i.js","sources":["../src/sheet/header.ts","../src/sheet/sheet.service.ts","../src/sheet/sheet.ts","../src/sheet/hook.ts"],"sourcesContent":["import { TailwindElement } from '@mixins/index'\nimport { html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\n@customElement('schmancy-sheet-header')\nexport default class SchmancySheetHeader extends TailwindElement() {\n\t@property() title: string\n\trender() {\n\t\tconst classes = {\n\t\t\tabsolute: this.title.length === 0,\n\t\t\trelative: this.title.length > 0,\n\t\t}\n\t\treturn html`\n\t\t\t<schmancy-surface fill=\"width\" elevation=\"1\">\n\t\t\t\t<schmancy-grid class=\"${this.classMap(classes)}\" align=\"center\" justify=\"stretch\" cols=\"auto 1fr auto\">\n\t\t\t\t\t<slot name=\"back\">\n\t\t\t\t\t\t<schmancy-button\n\t\t\t\t\t\t\t@click=${() => {\n\t\t\t\t\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\t\t\t\t\tnew CustomEvent('dismiss', {\n\t\t\t\t\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span class=\"text-[24px]\">← </span>\n\t\t\t\t\t\t</schmancy-button>\n\t\t\t\t\t</slot>\n\t\t\t\t\t<schmancy-typography transform=\"capitalize\" type=\"headline\" token=\"lg\"> ${this.title} </schmancy-typography>\n\t\t\t\t\t<slot name=\"actions\">\n\t\t\t\t\t\t<schmancy-icon-button\n\t\t\t\t\t\t\t@click=${() => {\n\t\t\t\t\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\t\t\t\t\tnew CustomEvent('dismiss', {\n\t\t\t\t\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tclose\n\t\t\t\t\t\t</schmancy-icon-button>\n\t\t\t\t\t</slot>\n\t\t\t\t</schmancy-grid>\n\t\t\t</schmancy-surface>\n\t\t`\n\t}\n}\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-sheet-header': SchmancySheetHeader\n\t}\n}\n","import {\n\tdefaultIfEmpty,\n\tdelay,\n\tfilter,\n\tforkJoin,\n\tfromEvent,\n\tmap,\n\tmergeMap,\n\tof,\n\tSubject,\n\tswitchMap,\n\ttake,\n\ttakeUntil,\n\ttap,\n\ttimer,\n} from 'rxjs'\nimport SchmancySheet from './sheet'\n\nexport enum SchmancySheetPosition {\n\tSide = 'side',\n\tBottom = 'bottom',\n\t/**\n\t * @deprecated use bottom instead\n\t */\n\tBottomCenter = 'bottom-center',\n\t/**\n\t * @deprecated use side instead\n\t */\n\tTopRight = 'top-right',\n\t/**\n\t * @deprecated use side instead\n\t */\n\tBottomRight = 'bottom-right',\n}\n\ntype BottomSheeetTarget = {\n\tcomponent: HTMLElement\n\tuid?: string\n\tposition?: SchmancySheetPosition\n\tpersist?: boolean\n\tclose?: () => void\n\tallowOverlyDismiss?: boolean\n\ttitle?: string\n\theader?: 'hidden' | 'visible'\n}\n\n// Events for communication between bottom-sheet component and bottom-sheet.service\nexport type SheetWhereAreYouRickyEvent = CustomEvent<{\n\tuid: string\n}>\nexport const SheetWhereAreYouRicky = 'are-you-there-sheet'\n\nexport type SheetHereMortyEvent = CustomEvent<{\n\tsheet: SchmancySheet\n}>\nexport const SheetHereMorty = 'yes-here'\n\n// Function to determine the position based on screen size\nconst getPosition = (): SchmancySheetPosition => {\n\treturn window.innerWidth >= 768 ? SchmancySheetPosition.Side : SchmancySheetPosition.Bottom // Adjust 768 as needed for your breakpoint\n}\n\nclass BottomSheetService {\n\tbottomSheet = new Subject<BottomSheeetTarget>()\n\t$dismiss = new Subject<string>()\n\tconstructor() {\n\t\tthis.bottomSheet\n\t\t\t.pipe(\n\t\t\t\tswitchMap(target =>\n\t\t\t\t\tforkJoin([\n\t\t\t\t\t\tfromEvent<SheetHereMortyEvent>(window, SheetHereMorty).pipe(\n\t\t\t\t\t\t\ttakeUntil(timer(0)),\n\t\t\t\t\t\t\tmap(e => e.detail.sheet),\n\t\t\t\t\t\t\tdefaultIfEmpty(undefined),\n\t\t\t\t\t\t),\n\t\t\t\t\t\tof(target).pipe(\n\t\t\t\t\t\t\ttap(() => {\n\t\t\t\t\t\t\t\twindow.dispatchEvent(\n\t\t\t\t\t\t\t\t\tnew CustomEvent(SheetWhereAreYouRicky, {\n\t\t\t\t\t\t\t\t\t\tdetail: { uid: target.uid ?? target.component.tagName },\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t),\n\t\t\t\t\t]),\n\t\t\t\t),\n\t\t\t\tmap(([sheet, target]) => {\n\t\t\t\t\tconsole.log(sheet, target)\n\t\t\t\t\tif (!sheet) {\n\t\t\t\t\t\t// if sheet is not found, create it\n\t\t\t\t\t\tsheet = document.createElement('schmancy-sheet')\n\t\t\t\t\t\tdocument.body.appendChild(sheet)\n\t\t\t\t\t}\n\t\t\t\t\tsheet.setAttribute('uid', target.uid ?? target.component.tagName)\n\n\t\t\t\t\t// **Use the dynamic position function here**\n\t\t\t\t\tconst position = target.position || getPosition() // Use target.position if it's set, otherwise determine based on screen size\n\t\t\t\t\tsheet.setAttribute('position', position)\n\n\t\t\t\t\tsheet.setAttribute('allowOverlyDismiss', target.allowOverlyDismiss === false ? 'false' : 'true')\n\t\t\t\t\ttarget.title && sheet.setAttribute('title', target.title)\n\t\t\t\t\ttarget.persist && sheet.setAttribute('persist', target.persist ?? false)\n\t\t\t\t\ttarget.header && sheet.setAttribute('header', target.header)\n\t\t\t\t\tdocument.body.style.overflow = 'hidden' // lock the scroll of the host\n\t\t\t\t\treturn { target, sheet }\n\t\t\t\t}),\n\t\t\t\tdelay(20),\n\t\t\t\tfilter(({ target, sheet }) => {\n\t\t\t\t\t// if the sheet has already the component, just show it\n\t\t\t\t\tif (\n\t\t\t\t\t\ttarget.persist &&\n\t\t\t\t\t\tsheet?.shadowRoot\n\t\t\t\t\t\t\t?.querySelector('slot')\n\t\t\t\t\t\t\t?.assignedElements()\n\t\t\t\t\t\t\t.find(e => e.tagName === target.component.tagName)\n\t\t\t\t\t) {\n\t\t\t\t\t\tsheet?.setAttribute('open', 'true')\n\t\t\t\t\t\treturn false\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn true // if the sheet does not have the component, continue to the next step\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\ttap(({ target, sheet }) => {\n\t\t\t\t\tsheet?.appendChild(target.component)\n\t\t\t\t}),\n\t\t\t\tdelay(1),\n\t\t\t\ttap(({ sheet }) => {\n\t\t\t\t\tsheet?.setAttribute('open', 'true')\n\t\t\t\t}),\n\t\t\t\ttap(({ sheet }) => {\n\t\t\t\t\tfromEvent<CustomEvent>(sheet, 'close')\n\t\t\t\t\t\t.pipe(take(1))\n\t\t\t\t\t\t.pipe(delay(300))\n\t\t\t\t\t\t.subscribe(e => {\n\t\t\t\t\t\t\tconst target = e.target as SchmancySheet\n\t\t\t\t\t\t\tconsole.log(target)\n\n\t\t\t\t\t\t\tif (!target?.persist) target?.remove()\n\t\t\t\t\t\t\tdocument.body.style.overflow = 'auto' // unlock the scroll of the host\n\t\t\t\t\t\t})\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe()\n\n\t\tthis.$dismiss\n\t\t\t.pipe(\n\t\t\t\tmergeMap(uid =>\n\t\t\t\t\tforkJoin([\n\t\t\t\t\t\tfromEvent<SheetHereMortyEvent>(window, SheetHereMorty).pipe(\n\t\t\t\t\t\t\ttakeUntil(timer(100)), // Some people say why 10? I say why not?\n\t\t\t\t\t\t\tmap(e => e.detail.sheet),\n\t\t\t\t\t\t\tdefaultIfEmpty(undefined),\n\t\t\t\t\t\t),\n\t\t\t\t\t\tof(uid).pipe(\n\t\t\t\t\t\t\ttap(() => {\n\t\t\t\t\t\t\t\twindow.dispatchEvent(new CustomEvent(SheetWhereAreYouRicky, { detail: { uid } }))\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t),\n\t\t\t\t\t]),\n\t\t\t\t),\n\t\t\t\ttap(([sheet]) => {\n\t\t\t\t\tsheet?.closeSheet()\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\tdismiss(uid: string) {\n\t\tthis.$dismiss.next(uid)\n\t}\n\n\topen(target: BottomSheeetTarget) {\n\t\tthis.bottomSheet.next(target)\n\t}\n}\nexport const sheet = new BottomSheetService()\n","import { $LitElement } from '@mixins/index'\nimport { html } from 'lit'\nimport { customElement, property, query, queryAssignedElements } from 'lit/decorators.js'\nimport { fromEvent, merge, takeUntil, tap } from 'rxjs'\nimport style from './sheet.scss?inline'\nimport {\n\tSchmancySheetPosition,\n\tSheetHereMorty,\n\tSheetWhereAreYouRicky,\n\tSheetWhereAreYouRickyEvent,\n\tsheet,\n} from './sheet.service'\nimport { on } from './hook'\n\n@customElement('schmancy-sheet')\nexport default class SchmancySheet extends $LitElement(style) {\n\t@property({ type: String, reflect: true }) uid!: string\n\t@property({ type: Boolean, reflect: true }) open = false\n\t@property({ type: String, reflect: true }) header: 'hidden' | 'visible' = 'visible'\n\t@property({ type: String, reflect: true }) position: SchmancySheetPosition = SchmancySheetPosition.Side\n\t@property({ type: Boolean, reflect: true }) persist = false\n\t@property({ type: Boolean, reflect: true }) allowOverlayDismiss = true\n\t@property({ type: String, reflect: true }) title = ''\n\n\t@query('.sheet') private sheet!: HTMLElement\n\t@queryAssignedElements({ flatten: true }) private assignedElements!: HTMLElement[]\n\n\t@property() focusAttribute = 'autofocus'\n\tprivate lastFocusedElement: HTMLElement | null = null\n\n\t@on('open')\n\tonOpenChange(_oldValue: boolean, newValue: boolean) {\n\t\tif (newValue) {\n\t\t\tthis.lastFocusedElement = document.activeElement as HTMLElement\n\t\t\tthis.addFocusTrap()\n\t\t\tthis.focus()\n\t\t} else {\n\t\t\tthis.removeFocusTrap()\n\t\t\tthis.lastFocusedElement?.focus()\n\t\t\tthis.lastFocusedElement = null\n\t\t}\n\t}\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\t\tthis.setupEventListeners()\n\t}\n\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback()\n\t\tthis.disconnecting.next(true)\n\t}\n\n\tprivate setupEventListeners() {\n\t\t// Handle browser back button\n\t\tconst popState$ = fromEvent<PopStateEvent>(window, 'popstate').pipe(\n\t\t\ttap(e => {\n\t\t\t\te.preventDefault()\n\t\t\t\tthis.closeSheet()\n\t\t\t}),\n\t\t)\n\n\t\t// Handle ESC key\n\t\tconst keyUp$ = fromEvent<KeyboardEvent>(window, 'keyup').pipe(\n\t\t\ttap(event => {\n\t\t\t\tif (event.key === 'Escape' && !this.sheetContainsFocus()) {\n\t\t\t\t\tsheet.dismiss(this.uid)\n\t\t\t\t}\n\t\t\t}),\n\t\t)\n\n\t\t// Handle inter-component communication\n\t\tconst rickyComm$ = fromEvent<SheetWhereAreYouRickyEvent>(window, SheetWhereAreYouRicky).pipe(\n\t\t\ttap(e => {\n\t\t\t\tif (e.detail.uid === this.uid) this.announcePresence()\n\t\t\t}),\n\t\t)\n\n\t\tmerge(popState$, keyUp$, rickyComm$).pipe(takeUntil(this.disconnecting)).subscribe()\n\t}\n\n\tprivate sheetContainsFocus(): boolean {\n\t\treturn this.sheet?.contains(document.activeElement) ?? false\n\t}\n\n\tprivate announcePresence() {\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent(SheetHereMorty, {\n\t\t\t\tdetail: { sheet: this },\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t}\n\n\tprivate addFocusTrap() {\n\t\tdocument.addEventListener('focusin', this.handleFocusIn)\n\t}\n\n\tprivate removeFocusTrap() {\n\t\tdocument.removeEventListener('focusin', this.handleFocusIn)\n\t}\n\n\tprivate handleFocusIn = (e: Event) => {\n\t\tif (!this.sheet?.contains(e.target as Node)) {\n\t\t\tthis.focus()\n\t\t}\n\t}\n\n\tsetIsSheetShown(isShown: boolean) {\n\t\tthis.sheet?.setAttribute('aria-hidden', String(!isShown))\n\t\tthis.sheet?.setAttribute('aria-modal', String(isShown))\n\t}\n\n\tcloseSheet() {\n\t\tthis.open = false\n\t\tthis.dispatchEvent(new CustomEvent('close'))\n\t}\n\n\tprivate getFocusElement(): HTMLElement | null {\n\t\tconst selector = `[${this.focusAttribute}]`\n\t\treturn (this.assignedElements.find(el => el.matches(selector) || el.querySelector(selector)) as HTMLElement) ?? null\n\t}\n\n\toverride focus() {\n\t\tthis.getFocusElement()?.focus()\n\t}\n\n\trender() {\n\t\treturn html`\n\t\t\t<div class=\"sheet\" role=\"dialog\" aria-labelledby=\"sheet-title\" aria-hidden=${!this.open} aria-modal=${this.open}>\n\t\t\t\t<div\n\t\t\t\t\tclass=\"overlay\"\n\t\t\t\t\t@click=${(e: Event) => {\n\t\t\t\t\t\te.stopPropagation()\n\t\t\t\t\t\tif (this.allowOverlayDismiss) sheet.dismiss(this.uid)\n\t\t\t\t\t}}\n\t\t\t\t></div>\n\t\t\t\t<section class=\"content w-full\" data-position=${this.position}>\n\t\t\t\t\t<schmancy-sheet-header\n\t\t\t\t\t\tclass=\"sticky top-0 z-50 w-full\"\n\t\t\t\t\t\t@dismiss=${(e: CustomEvent) => {\n\t\t\t\t\t\t\te.stopPropagation()\n\t\t\t\t\t\t\tsheet.dismiss(this.uid)\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tid=\"sheet-title\"\n\t\t\t\t\t\t.hidden=${this.header === 'hidden'}\n\t\t\t\t\t\ttitle=${this.title}\n\t\t\t\t\t></schmancy-sheet-header>\n\t\t\t\t\t<schmancy-surface class=\"overflow-auto\" fill=\"all\" type=\"surface\">\n\t\t\t\t\t\t<slot></slot>\n\t\t\t\t\t</schmancy-surface>\n\t\t\t\t</section>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-sheet': SchmancySheet\n\t}\n}\n","// @watch decorator\n//\n// Runs when an observed property changes, e.g. @property or @state, but before the component updates.\n//\n// To wait for an update to complete after a change occurs, use `await this.updateComplete` in the handler. To start\n// watching after the initial update/render, use `{ waitUntilFirstUpdate: true }` or `this.hasUpdated` in the handler.\n//\n// Usage:\n//\n// @watch('propName')\n// handlePropChange(oldValue, newValue) {\n// ...\n// }\n//\ninterface WatchOptions {\n\twaitUntilFirstUpdate?: boolean\n}\n\nexport function on(propName: string, options?: WatchOptions) {\n\treturn (protoOrDescriptor: any, name: string): any => {\n\t\tconst { willUpdate } = protoOrDescriptor\n\n\t\toptions = Object.assign({ waitUntilFirstUpdate: false }, options) as WatchOptions\n\n\t\tprotoOrDescriptor.willUpdate = function (changedProps: Map<string, any>) {\n\t\t\twillUpdate.call(this, changedProps)\n\n\t\t\tif (changedProps.has(propName)) {\n\t\t\t\tconst oldValue = changedProps.get(propName)\n\t\t\t\tconst newValue = this[propName]\n\n\t\t\t\tif (oldValue !== newValue) {\n\t\t\t\t\tif (!options?.waitUntilFirstUpdate || this.hasUpdated) {\n\t\t\t\t\t\tthis[name].call(this, oldValue, newValue)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"],"names":["SchmancySheetHeader","TailwindElement","render","classes","absolute","this","title","length","relative","html","classMap","dispatchEvent","CustomEvent","bubbles","composed","__decorateClass","property","prototype","customElement","SchmancySheetPosition","SheetWhereAreYouRicky","SheetHereMorty","sheet","bottomSheet","Subject","$dismiss","pipe","switchMap","forkJoin","fromEvent","window","takeUntil","timer","map","e","detail","defaultIfEmpty","of","target","tap","uid","component","tagName","document","createElement","body","appendChild","setAttribute","position","innerWidth","allowOverlyDismiss","persist","header","style","overflow","delay","filter","shadowRoot","querySelector","assignedElements","find","take","subscribe","remove","mergeMap","closeSheet","next","SchmancySheet","$LitElement","super","arguments","open","Side","allowOverlayDismiss","focusAttribute","lastFocusedElement","handleFocusIn","contains","focus","_oldValue","newValue","activeElement","addFocusTrap","removeFocusTrap","connectedCallback","setupEventListeners","disconnectedCallback","disconnecting","popState$","preventDefault","keyUp$","event","key","sheetContainsFocus","dismiss","rickyComm$","announcePresence","merge","addEventListener","removeEventListener","isShown","String","getFocusElement","selector","el","matches","stopPropagation","propName","options","type","reflect","Boolean","query","queryAssignedElements","flatten","protoOrDescriptor","name","willUpdate","Object","assign","waitUntilFirstUpdate","changedProps","call","has","oldValue","get","hasUpdated"],"mappings":"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"}
|
package/dist/sheet.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./sheet-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./sheet-BgbV6g2F.cjs");exports.SchmancySheetPosition=e.SchmancySheetPosition,exports.SheetHereMorty=e.SheetHereMorty,exports.SheetWhereAreYouRicky=e.SheetWhereAreYouRicky,exports.sheet=e.sheet;
|
|
2
2
|
//# sourceMappingURL=sheet.cjs.map
|
package/dist/sheet.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { fromEvent as x } from "rxjs";
|
|
2
2
|
import "lit/directives/class-map.js";
|
|
3
3
|
import "lit/directives/style-map.js";
|
|
4
|
-
import { $ as f } from "./litElement.mixin-
|
|
5
|
-
import "./tailwind.mixin-
|
|
4
|
+
import { $ as f } from "./litElement.mixin-vAR9BIyD.js";
|
|
5
|
+
import "./tailwind.mixin-DxmWMnBQ.js";
|
|
6
6
|
import { css as m, html as c } from "lit";
|
|
7
7
|
import { property as d, customElement as v, state as S, query as y } from "lit/decorators.js";
|
|
8
8
|
import { cache as w } from "lit/directives/cache.js";
|
|
@@ -162,4 +162,4 @@ export {
|
|
|
162
162
|
n as S,
|
|
163
163
|
h as a
|
|
164
164
|
};
|
|
165
|
-
//# sourceMappingURL=slider-
|
|
165
|
+
//# sourceMappingURL=slider-BOXmzToY.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slider-Bwzc2P35.js","sources":["../src/slider/slide.ts","../src/slider/slider.ts"],"sourcesContent":["import { $LitElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { cache } from 'lit/directives/cache.js'\n\n/**\n * Supported slide \"types.\"\n * - 'image': Renders an <img>\n * - 'video': Renders a <video>\n * - 'content': Renders a <slot> (the default)\n */\ntype SlideType = 'image' | 'video' | 'content'\n\n/**\n * Allowed values for the 'fit' property,\n * which maps to CSS object-fit.\n */\ntype ObjectFit = 'cover' | 'contain' | 'fill' | 'scale-down' | 'none'\n\n@customElement('schmancy-slide')\nexport class SchmancySlide extends $LitElement(css`\n\t:host {\n\t\tdisplay: block;\n\t\tscroll-snap-align: center; /* If your slider uses scroll-snap */\n\t}\n\n\t.slide {\n\t\tdisplay: block;\n\t\twidth: 100%;\n\t\theight: auto;\n\t\tobject-fit: var(--object-fit, cover);\n\t}\n`) {\n\t/**\n\t * Determines how this slide should be rendered.\n\t * Defaults to 'content' if not provided.\n\t */\n\t@property({ type: String }) type: SlideType = 'content'\n\n\t/**\n\t * Source for images or videos (if `type` is 'image' or 'video').\n\t */\n\t@property({ type: String }) src: string = ''\n\n\t/**\n\t * Alternate text for images.\n\t */\n\t@property({ type: String }) alt: string = ''\n\n\t/**\n\t * Whether to show default video controls (if `type` is 'video').\n\t */\n\t@property({ type: Boolean }) controls = true\n\n\t/**\n\t * Whether the video should autoplay (if `type` is 'video').\n\t */\n\t@property({ type: Boolean }) autoplay = false\n\n\t/**\n\t * Whether the video should loop (if `type` is 'video').\n\t */\n\t@property({ type: Boolean }) loop = false\n\n\t/**\n\t * Whether the video is muted (if `type` is 'video').\n\t */\n\t@property({ type: Boolean }) muted = false\n\n\t/**\n\t * CSS `object-fit` property, applied to images/videos.\n\t */\n\t@property({ type: String }) fit: ObjectFit = 'cover'\n\n\trender() {\n\t\treturn html` <div style=\"--object-fit: ${this.fit}\">${cache(this.renderSlide())}</div> `\n\t}\n\n\tprivate renderSlide() {\n\t\tswitch (this.type) {\n\t\t\tcase 'image':\n\t\t\t\treturn html` <img class=\"slide\" src=\"${this.src}\" alt=\"${this.alt}\" loading=\"lazy\" /> `\n\t\t\tcase 'video':\n\t\t\t\treturn html`\n\t\t\t\t\t<video\n\t\t\t\t\t\tclass=\"slide\"\n\t\t\t\t\t\tsrc=\"${this.src}\"\n\t\t\t\t\t\t?controls=\"${this.controls}\"\n\t\t\t\t\t\t?autoplay=\"${this.autoplay}\"\n\t\t\t\t\t\t?loop=\"${this.loop}\"\n\t\t\t\t\t\t?muted=\"${this.muted}\"\n\t\t\t\t\t>\n\t\t\t\t\t\tYour browser does not support HTML video.\n\t\t\t\t\t</video>\n\t\t\t\t`\n\t\t\tcase 'content':\n\t\t\tdefault:\n\t\t\t\treturn html`<slot></slot>`\n\t\t}\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-slide': SchmancySlide\n\t}\n}\n","import { $LitElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\nimport { fromEvent } from 'rxjs'\nimport { throttleTime } from 'rxjs/operators'\n\n@customElement('schmancy-slider')\nexport class SchmancySlider extends $LitElement(css`\n\t.slider {\n\t\t/* Lay out slides horizontally, one after another */\n\t\tdisplay: flex;\n\t\toverflow-x: auto;\n\n\t\t/* Optional: scroll snapping */\n\t\tscroll-snap-type: x mandatory;\n\n\t\t/* Hide scrollbars */\n\t\t-ms-overflow-style: none; /* IE and Edge */\n\t\tscrollbar-width: none; /* Firefox */\n\t}\n\t.slider::-webkit-scrollbar {\n\t\tdisplay: none; /* Chrome, Safari, Opera */\n\t}\n\n\t/* \n Ensure each slide takes up the full slider width.\n \"schmancy-slide\" is the child custom element.\n */\n\t::slotted(schmancy-slide) {\n\t\tflex: 0 0 100%;\n\t\tbox-sizing: border-box;\n\t}\n`) {\n\t/**\n\t * Currently centered slide index\n\t */\n\t@state() private selectedIndex: number = 0\n\n\t/**\n\t * If true, renders next/prev buttons\n\t */\n\t@property({ type: Boolean }) showArrows: boolean = true\n\n\t@query('#slider') private slider!: HTMLDivElement\n\t@query('slot') private defaultSlot!: HTMLSlotElement\n\n\tprotected firstUpdated() {\n\t\t// Start at leftmost position\n\t\tthis.slider.scrollLeft = 0\n\n\t\t// Throttle scroll events to update selected index\n\t\tfromEvent(this.slider, 'scroll')\n\t\t\t.pipe(throttleTime(100, undefined, { trailing: true }))\n\t\t\t.subscribe(() => {\n\t\t\t\tthis.updateSelectedIndexOnScroll()\n\t\t\t})\n\t}\n\n\tprivate updateSelectedIndexOnScroll() {\n\t\tconst slides = this.defaultSlot?.assignedElements({ flatten: true }) ?? []\n\t\tif (!slides.length) return\n\n\t\tconst oldIndex = this.selectedIndex\n\n\t\t// Center of the slider’s visible area\n\t\tconst sliderCenter = this.slider.scrollLeft + this.slider.clientWidth / 2\n\n\t\tlet closestIndex = 0\n\t\tlet closestDistance = Infinity\n\n\t\tslides.forEach((slide, index) => {\n\t\t\tconst itemStart = (slide as HTMLElement).offsetLeft\n\t\t\tconst itemCenter = itemStart + slide.clientWidth / 2\n\t\t\tconst distance = Math.abs(sliderCenter - itemCenter)\n\n\t\t\tif (distance < closestDistance) {\n\t\t\t\tclosestDistance = distance\n\t\t\t\tclosestIndex = index\n\t\t\t}\n\t\t})\n\n\t\tthis.selectedIndex = closestIndex\n\n\t\t// If the index changed, dispatch event\n\t\tif (this.selectedIndex !== oldIndex) {\n\t\t\tthis.dispatchEvent(\n\t\t\t\tnew CustomEvent('slide-changed', {\n\t\t\t\t\tdetail: { index: this.selectedIndex },\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\t}\n\n\tprivate goToSlide(newIndex: number) {\n\t\tconst slides = this.defaultSlot?.assignedElements({ flatten: true }) ?? []\n\t\tif (!slides[newIndex]) return\n\n\t\tthis.slider.scrollTo({\n\t\t\tleft: (slides[newIndex] as HTMLElement).offsetLeft,\n\t\t\tbehavior: 'smooth',\n\t\t})\n\t}\n\n\tprivate onPrevClick() {\n\t\tthis.goToSlide(this.selectedIndex - 1)\n\t}\n\n\tprivate onNextClick() {\n\t\tconst slides = this.defaultSlot?.assignedElements({ flatten: true }) ?? []\n\t\tif (this.selectedIndex < slides.length - 1) {\n\t\t\tthis.goToSlide(this.selectedIndex + 1)\n\t\t}\n\t}\n\n\trender() {\n\t\tconst slides = this.defaultSlot?.assignedElements({ flatten: true }) ?? []\n\n\t\treturn html`\n\t\t\t<div class=\"relative inset-0\">\n\t\t\t\t<!-- The scrollable track -->\n\t\t\t\t<div class=\"slider\" id=\"slider\">\n\t\t\t\t\t<slot></slot>\n\t\t\t\t</div>\n\n\t\t\t\t<!-- Next/Prev Buttons (Optional) -->\n\t\t\t\t${this.showArrows\n\t\t\t\t\t? html`\n\t\t\t\t\t\t\t<schmancy-icon-button\n\t\t\t\t\t\t\t\tclass=\"absolute left-2 top-1/2 -translate-y-1/2\"\n\t\t\t\t\t\t\t\t@click=${this.onPrevClick}\n\t\t\t\t\t\t\t\t?disabled=${this.selectedIndex === 0}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tchevron_left\n\t\t\t\t\t\t\t</schmancy-icon-button>\n\t\t\t\t\t\t\t<schmancy-icon-button\n\t\t\t\t\t\t\t\tclass=\"absolute right-2 top-1/2 -translate-y-1/2\"\n\t\t\t\t\t\t\t\t@click=${this.onNextClick}\n\t\t\t\t\t\t\t\t?disabled=${this.selectedIndex === slides.length - 1}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tchevron_right\n\t\t\t\t\t\t\t</schmancy-icon-button>\n\t\t\t\t\t\t`\n\t\t\t\t\t: null}\n\n\t\t\t\t<!-- Dots / indicators -->\n\t\t\t\t<div class=\"absolute bottom-4 left-1/2 -translate-x-1/2 flex space-x-2\">\n\t\t\t\t\t${slides.map((_, index) => {\n\t\t\t\t\t\tconst isSelected = index === this.selectedIndex\n\t\t\t\t\t\treturn html`\n\t\t\t\t\t\t\t<schmancy-button .variant=${isSelected ? 'filled tonal' : 'outlined'} class=\"rounded-full \">\n\t\t\t\t\t\t\t</schmancy-button>\n\t\t\t\t\t\t`\n\t\t\t\t\t})}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-slider': SchmancySlider\n\t}\n}\n"],"names":["SchmancySlide","$LitElement","css","constructor","super","arguments","this","type","src","alt","controls","autoplay","loop","muted","fit","html","cache","renderSlide","__decorateClass","property","String","prototype","Boolean","customElement","SchmancySlider","selectedIndex","showArrows","slider","scrollLeft","fromEvent","pipe","throttleTime","trailing","subscribe","updateSelectedIndexOnScroll","slides","defaultSlot","assignedElements","flatten","length","oldIndex","sliderCenter","clientWidth","closestIndex","closestDistance","Infinity","forEach","slide","index","itemCenter","offsetLeft","distance","Math","abs","dispatchEvent","CustomEvent","detail","newIndex","scrollTo","left","behavior","goToSlide","onNextClick","render","onPrevClick","map","_","isSelected","state","query"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"slider-BOXmzToY.js","sources":["../src/slider/slide.ts","../src/slider/slider.ts"],"sourcesContent":["import { $LitElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { cache } from 'lit/directives/cache.js'\n\n/**\n * Supported slide \"types.\"\n * - 'image': Renders an <img>\n * - 'video': Renders a <video>\n * - 'content': Renders a <slot> (the default)\n */\ntype SlideType = 'image' | 'video' | 'content'\n\n/**\n * Allowed values for the 'fit' property,\n * which maps to CSS object-fit.\n */\ntype ObjectFit = 'cover' | 'contain' | 'fill' | 'scale-down' | 'none'\n\n@customElement('schmancy-slide')\nexport class SchmancySlide extends $LitElement(css`\n\t:host {\n\t\tdisplay: block;\n\t\tscroll-snap-align: center; /* If your slider uses scroll-snap */\n\t}\n\n\t.slide {\n\t\tdisplay: block;\n\t\twidth: 100%;\n\t\theight: auto;\n\t\tobject-fit: var(--object-fit, cover);\n\t}\n`) {\n\t/**\n\t * Determines how this slide should be rendered.\n\t * Defaults to 'content' if not provided.\n\t */\n\t@property({ type: String }) type: SlideType = 'content'\n\n\t/**\n\t * Source for images or videos (if `type` is 'image' or 'video').\n\t */\n\t@property({ type: String }) src: string = ''\n\n\t/**\n\t * Alternate text for images.\n\t */\n\t@property({ type: String }) alt: string = ''\n\n\t/**\n\t * Whether to show default video controls (if `type` is 'video').\n\t */\n\t@property({ type: Boolean }) controls = true\n\n\t/**\n\t * Whether the video should autoplay (if `type` is 'video').\n\t */\n\t@property({ type: Boolean }) autoplay = false\n\n\t/**\n\t * Whether the video should loop (if `type` is 'video').\n\t */\n\t@property({ type: Boolean }) loop = false\n\n\t/**\n\t * Whether the video is muted (if `type` is 'video').\n\t */\n\t@property({ type: Boolean }) muted = false\n\n\t/**\n\t * CSS `object-fit` property, applied to images/videos.\n\t */\n\t@property({ type: String }) fit: ObjectFit = 'cover'\n\n\trender() {\n\t\treturn html` <div style=\"--object-fit: ${this.fit}\">${cache(this.renderSlide())}</div> `\n\t}\n\n\tprivate renderSlide() {\n\t\tswitch (this.type) {\n\t\t\tcase 'image':\n\t\t\t\treturn html` <img class=\"slide\" src=\"${this.src}\" alt=\"${this.alt}\" loading=\"lazy\" /> `\n\t\t\tcase 'video':\n\t\t\t\treturn html`\n\t\t\t\t\t<video\n\t\t\t\t\t\tclass=\"slide\"\n\t\t\t\t\t\tsrc=\"${this.src}\"\n\t\t\t\t\t\t?controls=\"${this.controls}\"\n\t\t\t\t\t\t?autoplay=\"${this.autoplay}\"\n\t\t\t\t\t\t?loop=\"${this.loop}\"\n\t\t\t\t\t\t?muted=\"${this.muted}\"\n\t\t\t\t\t>\n\t\t\t\t\t\tYour browser does not support HTML video.\n\t\t\t\t\t</video>\n\t\t\t\t`\n\t\t\tcase 'content':\n\t\t\tdefault:\n\t\t\t\treturn html`<slot></slot>`\n\t\t}\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-slide': SchmancySlide\n\t}\n}\n","import { $LitElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\nimport { fromEvent } from 'rxjs'\nimport { throttleTime } from 'rxjs/operators'\n\n@customElement('schmancy-slider')\nexport class SchmancySlider extends $LitElement(css`\n\t.slider {\n\t\t/* Lay out slides horizontally, one after another */\n\t\tdisplay: flex;\n\t\toverflow-x: auto;\n\n\t\t/* Optional: scroll snapping */\n\t\tscroll-snap-type: x mandatory;\n\n\t\t/* Hide scrollbars */\n\t\t-ms-overflow-style: none; /* IE and Edge */\n\t\tscrollbar-width: none; /* Firefox */\n\t}\n\t.slider::-webkit-scrollbar {\n\t\tdisplay: none; /* Chrome, Safari, Opera */\n\t}\n\n\t/* \n Ensure each slide takes up the full slider width.\n \"schmancy-slide\" is the child custom element.\n */\n\t::slotted(schmancy-slide) {\n\t\tflex: 0 0 100%;\n\t\tbox-sizing: border-box;\n\t}\n`) {\n\t/**\n\t * Currently centered slide index\n\t */\n\t@state() private selectedIndex: number = 0\n\n\t/**\n\t * If true, renders next/prev buttons\n\t */\n\t@property({ type: Boolean }) showArrows: boolean = true\n\n\t@query('#slider') private slider!: HTMLDivElement\n\t@query('slot') private defaultSlot!: HTMLSlotElement\n\n\tprotected firstUpdated() {\n\t\t// Start at leftmost position\n\t\tthis.slider.scrollLeft = 0\n\n\t\t// Throttle scroll events to update selected index\n\t\tfromEvent(this.slider, 'scroll')\n\t\t\t.pipe(throttleTime(100, undefined, { trailing: true }))\n\t\t\t.subscribe(() => {\n\t\t\t\tthis.updateSelectedIndexOnScroll()\n\t\t\t})\n\t}\n\n\tprivate updateSelectedIndexOnScroll() {\n\t\tconst slides = this.defaultSlot?.assignedElements({ flatten: true }) ?? []\n\t\tif (!slides.length) return\n\n\t\tconst oldIndex = this.selectedIndex\n\n\t\t// Center of the slider’s visible area\n\t\tconst sliderCenter = this.slider.scrollLeft + this.slider.clientWidth / 2\n\n\t\tlet closestIndex = 0\n\t\tlet closestDistance = Infinity\n\n\t\tslides.forEach((slide, index) => {\n\t\t\tconst itemStart = (slide as HTMLElement).offsetLeft\n\t\t\tconst itemCenter = itemStart + slide.clientWidth / 2\n\t\t\tconst distance = Math.abs(sliderCenter - itemCenter)\n\n\t\t\tif (distance < closestDistance) {\n\t\t\t\tclosestDistance = distance\n\t\t\t\tclosestIndex = index\n\t\t\t}\n\t\t})\n\n\t\tthis.selectedIndex = closestIndex\n\n\t\t// If the index changed, dispatch event\n\t\tif (this.selectedIndex !== oldIndex) {\n\t\t\tthis.dispatchEvent(\n\t\t\t\tnew CustomEvent('slide-changed', {\n\t\t\t\t\tdetail: { index: this.selectedIndex },\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\t}\n\n\tprivate goToSlide(newIndex: number) {\n\t\tconst slides = this.defaultSlot?.assignedElements({ flatten: true }) ?? []\n\t\tif (!slides[newIndex]) return\n\n\t\tthis.slider.scrollTo({\n\t\t\tleft: (slides[newIndex] as HTMLElement).offsetLeft,\n\t\t\tbehavior: 'smooth',\n\t\t})\n\t}\n\n\tprivate onPrevClick() {\n\t\tthis.goToSlide(this.selectedIndex - 1)\n\t}\n\n\tprivate onNextClick() {\n\t\tconst slides = this.defaultSlot?.assignedElements({ flatten: true }) ?? []\n\t\tif (this.selectedIndex < slides.length - 1) {\n\t\t\tthis.goToSlide(this.selectedIndex + 1)\n\t\t}\n\t}\n\n\trender() {\n\t\tconst slides = this.defaultSlot?.assignedElements({ flatten: true }) ?? []\n\n\t\treturn html`\n\t\t\t<div class=\"relative inset-0\">\n\t\t\t\t<!-- The scrollable track -->\n\t\t\t\t<div class=\"slider\" id=\"slider\">\n\t\t\t\t\t<slot></slot>\n\t\t\t\t</div>\n\n\t\t\t\t<!-- Next/Prev Buttons (Optional) -->\n\t\t\t\t${this.showArrows\n\t\t\t\t\t? html`\n\t\t\t\t\t\t\t<schmancy-icon-button\n\t\t\t\t\t\t\t\tclass=\"absolute left-2 top-1/2 -translate-y-1/2\"\n\t\t\t\t\t\t\t\t@click=${this.onPrevClick}\n\t\t\t\t\t\t\t\t?disabled=${this.selectedIndex === 0}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tchevron_left\n\t\t\t\t\t\t\t</schmancy-icon-button>\n\t\t\t\t\t\t\t<schmancy-icon-button\n\t\t\t\t\t\t\t\tclass=\"absolute right-2 top-1/2 -translate-y-1/2\"\n\t\t\t\t\t\t\t\t@click=${this.onNextClick}\n\t\t\t\t\t\t\t\t?disabled=${this.selectedIndex === slides.length - 1}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tchevron_right\n\t\t\t\t\t\t\t</schmancy-icon-button>\n\t\t\t\t\t\t`\n\t\t\t\t\t: null}\n\n\t\t\t\t<!-- Dots / indicators -->\n\t\t\t\t<div class=\"absolute bottom-4 left-1/2 -translate-x-1/2 flex space-x-2\">\n\t\t\t\t\t${slides.map((_, index) => {\n\t\t\t\t\t\tconst isSelected = index === this.selectedIndex\n\t\t\t\t\t\treturn html`\n\t\t\t\t\t\t\t<schmancy-button .variant=${isSelected ? 'filled tonal' : 'outlined'} class=\"rounded-full \">\n\t\t\t\t\t\t\t</schmancy-button>\n\t\t\t\t\t\t`\n\t\t\t\t\t})}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-slider': SchmancySlider\n\t}\n}\n"],"names":["SchmancySlide","$LitElement","css","constructor","super","arguments","this","type","src","alt","controls","autoplay","loop","muted","fit","html","cache","renderSlide","__decorateClass","property","String","prototype","Boolean","customElement","SchmancySlider","selectedIndex","showArrows","slider","scrollLeft","fromEvent","pipe","throttleTime","trailing","subscribe","updateSelectedIndexOnScroll","slides","defaultSlot","assignedElements","flatten","length","oldIndex","sliderCenter","clientWidth","closestIndex","closestDistance","Infinity","forEach","slide","index","itemCenter","offsetLeft","distance","Math","abs","dispatchEvent","CustomEvent","detail","newIndex","scrollTo","left","behavior","goToSlide","onNextClick","render","onPrevClick","map","_","isSelected","state","query"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";const m=require("rxjs");require("lit/directives/class-map.js"),require("lit/directives/style-map.js");const p=require("./litElement.mixin-
|
|
1
|
+
"use strict";const m=require("rxjs");require("lit/directives/class-map.js"),require("lit/directives/style-map.js");const p=require("./litElement.mixin-C-c-2rdW.cjs");require("./tailwind.mixin-B7_ZpVpC.cjs");const d=require("lit"),o=require("lit/decorators.js"),S=require("lit/directives/cache.js"),f=require("rxjs/operators");var v=Object.defineProperty,b=Object.getOwnPropertyDescriptor,c=(s,e,i,l)=>{for(var r,t=l>1?void 0:l?b(e,i):e,n=s.length-1;n>=0;n--)(r=s[n])&&(t=(l?r(e,i,t):r(t))||t);return l&&t&&v(e,i,t),t};exports.SchmancySlide=class extends p.$LitElement(d.css`
|
|
2
2
|
:host {
|
|
3
3
|
display: block;
|
|
4
4
|
scroll-snap-align: center; /* If your slider uses scroll-snap */
|
|
@@ -80,4 +80,4 @@
|
|
|
80
80
|
</div>
|
|
81
81
|
</div>
|
|
82
82
|
`}},a([o.state()],exports.SchmancySlider.prototype,"selectedIndex",2),a([o.property({type:Boolean})],exports.SchmancySlider.prototype,"showArrows",2),a([o.query("#slider")],exports.SchmancySlider.prototype,"slider",2),a([o.query("slot")],exports.SchmancySlider.prototype,"defaultSlot",2),exports.SchmancySlider=a([o.customElement("schmancy-slider")],exports.SchmancySlider);
|
|
83
|
-
//# sourceMappingURL=slider-
|
|
83
|
+
//# sourceMappingURL=slider-CR2itGT0.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slider-0Uk2z9y_.cjs","sources":["../src/slider/slide.ts","../src/slider/slider.ts"],"sourcesContent":["import { $LitElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { cache } from 'lit/directives/cache.js'\n\n/**\n * Supported slide \"types.\"\n * - 'image': Renders an <img>\n * - 'video': Renders a <video>\n * - 'content': Renders a <slot> (the default)\n */\ntype SlideType = 'image' | 'video' | 'content'\n\n/**\n * Allowed values for the 'fit' property,\n * which maps to CSS object-fit.\n */\ntype ObjectFit = 'cover' | 'contain' | 'fill' | 'scale-down' | 'none'\n\n@customElement('schmancy-slide')\nexport class SchmancySlide extends $LitElement(css`\n\t:host {\n\t\tdisplay: block;\n\t\tscroll-snap-align: center; /* If your slider uses scroll-snap */\n\t}\n\n\t.slide {\n\t\tdisplay: block;\n\t\twidth: 100%;\n\t\theight: auto;\n\t\tobject-fit: var(--object-fit, cover);\n\t}\n`) {\n\t/**\n\t * Determines how this slide should be rendered.\n\t * Defaults to 'content' if not provided.\n\t */\n\t@property({ type: String }) type: SlideType = 'content'\n\n\t/**\n\t * Source for images or videos (if `type` is 'image' or 'video').\n\t */\n\t@property({ type: String }) src: string = ''\n\n\t/**\n\t * Alternate text for images.\n\t */\n\t@property({ type: String }) alt: string = ''\n\n\t/**\n\t * Whether to show default video controls (if `type` is 'video').\n\t */\n\t@property({ type: Boolean }) controls = true\n\n\t/**\n\t * Whether the video should autoplay (if `type` is 'video').\n\t */\n\t@property({ type: Boolean }) autoplay = false\n\n\t/**\n\t * Whether the video should loop (if `type` is 'video').\n\t */\n\t@property({ type: Boolean }) loop = false\n\n\t/**\n\t * Whether the video is muted (if `type` is 'video').\n\t */\n\t@property({ type: Boolean }) muted = false\n\n\t/**\n\t * CSS `object-fit` property, applied to images/videos.\n\t */\n\t@property({ type: String }) fit: ObjectFit = 'cover'\n\n\trender() {\n\t\treturn html` <div style=\"--object-fit: ${this.fit}\">${cache(this.renderSlide())}</div> `\n\t}\n\n\tprivate renderSlide() {\n\t\tswitch (this.type) {\n\t\t\tcase 'image':\n\t\t\t\treturn html` <img class=\"slide\" src=\"${this.src}\" alt=\"${this.alt}\" loading=\"lazy\" /> `\n\t\t\tcase 'video':\n\t\t\t\treturn html`\n\t\t\t\t\t<video\n\t\t\t\t\t\tclass=\"slide\"\n\t\t\t\t\t\tsrc=\"${this.src}\"\n\t\t\t\t\t\t?controls=\"${this.controls}\"\n\t\t\t\t\t\t?autoplay=\"${this.autoplay}\"\n\t\t\t\t\t\t?loop=\"${this.loop}\"\n\t\t\t\t\t\t?muted=\"${this.muted}\"\n\t\t\t\t\t>\n\t\t\t\t\t\tYour browser does not support HTML video.\n\t\t\t\t\t</video>\n\t\t\t\t`\n\t\t\tcase 'content':\n\t\t\tdefault:\n\t\t\t\treturn html`<slot></slot>`\n\t\t}\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-slide': SchmancySlide\n\t}\n}\n","import { $LitElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\nimport { fromEvent } from 'rxjs'\nimport { throttleTime } from 'rxjs/operators'\n\n@customElement('schmancy-slider')\nexport class SchmancySlider extends $LitElement(css`\n\t.slider {\n\t\t/* Lay out slides horizontally, one after another */\n\t\tdisplay: flex;\n\t\toverflow-x: auto;\n\n\t\t/* Optional: scroll snapping */\n\t\tscroll-snap-type: x mandatory;\n\n\t\t/* Hide scrollbars */\n\t\t-ms-overflow-style: none; /* IE and Edge */\n\t\tscrollbar-width: none; /* Firefox */\n\t}\n\t.slider::-webkit-scrollbar {\n\t\tdisplay: none; /* Chrome, Safari, Opera */\n\t}\n\n\t/* \n Ensure each slide takes up the full slider width.\n \"schmancy-slide\" is the child custom element.\n */\n\t::slotted(schmancy-slide) {\n\t\tflex: 0 0 100%;\n\t\tbox-sizing: border-box;\n\t}\n`) {\n\t/**\n\t * Currently centered slide index\n\t */\n\t@state() private selectedIndex: number = 0\n\n\t/**\n\t * If true, renders next/prev buttons\n\t */\n\t@property({ type: Boolean }) showArrows: boolean = true\n\n\t@query('#slider') private slider!: HTMLDivElement\n\t@query('slot') private defaultSlot!: HTMLSlotElement\n\n\tprotected firstUpdated() {\n\t\t// Start at leftmost position\n\t\tthis.slider.scrollLeft = 0\n\n\t\t// Throttle scroll events to update selected index\n\t\tfromEvent(this.slider, 'scroll')\n\t\t\t.pipe(throttleTime(100, undefined, { trailing: true }))\n\t\t\t.subscribe(() => {\n\t\t\t\tthis.updateSelectedIndexOnScroll()\n\t\t\t})\n\t}\n\n\tprivate updateSelectedIndexOnScroll() {\n\t\tconst slides = this.defaultSlot?.assignedElements({ flatten: true }) ?? []\n\t\tif (!slides.length) return\n\n\t\tconst oldIndex = this.selectedIndex\n\n\t\t// Center of the slider’s visible area\n\t\tconst sliderCenter = this.slider.scrollLeft + this.slider.clientWidth / 2\n\n\t\tlet closestIndex = 0\n\t\tlet closestDistance = Infinity\n\n\t\tslides.forEach((slide, index) => {\n\t\t\tconst itemStart = (slide as HTMLElement).offsetLeft\n\t\t\tconst itemCenter = itemStart + slide.clientWidth / 2\n\t\t\tconst distance = Math.abs(sliderCenter - itemCenter)\n\n\t\t\tif (distance < closestDistance) {\n\t\t\t\tclosestDistance = distance\n\t\t\t\tclosestIndex = index\n\t\t\t}\n\t\t})\n\n\t\tthis.selectedIndex = closestIndex\n\n\t\t// If the index changed, dispatch event\n\t\tif (this.selectedIndex !== oldIndex) {\n\t\t\tthis.dispatchEvent(\n\t\t\t\tnew CustomEvent('slide-changed', {\n\t\t\t\t\tdetail: { index: this.selectedIndex },\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\t}\n\n\tprivate goToSlide(newIndex: number) {\n\t\tconst slides = this.defaultSlot?.assignedElements({ flatten: true }) ?? []\n\t\tif (!slides[newIndex]) return\n\n\t\tthis.slider.scrollTo({\n\t\t\tleft: (slides[newIndex] as HTMLElement).offsetLeft,\n\t\t\tbehavior: 'smooth',\n\t\t})\n\t}\n\n\tprivate onPrevClick() {\n\t\tthis.goToSlide(this.selectedIndex - 1)\n\t}\n\n\tprivate onNextClick() {\n\t\tconst slides = this.defaultSlot?.assignedElements({ flatten: true }) ?? []\n\t\tif (this.selectedIndex < slides.length - 1) {\n\t\t\tthis.goToSlide(this.selectedIndex + 1)\n\t\t}\n\t}\n\n\trender() {\n\t\tconst slides = this.defaultSlot?.assignedElements({ flatten: true }) ?? []\n\n\t\treturn html`\n\t\t\t<div class=\"relative inset-0\">\n\t\t\t\t<!-- The scrollable track -->\n\t\t\t\t<div class=\"slider\" id=\"slider\">\n\t\t\t\t\t<slot></slot>\n\t\t\t\t</div>\n\n\t\t\t\t<!-- Next/Prev Buttons (Optional) -->\n\t\t\t\t${this.showArrows\n\t\t\t\t\t? html`\n\t\t\t\t\t\t\t<schmancy-icon-button\n\t\t\t\t\t\t\t\tclass=\"absolute left-2 top-1/2 -translate-y-1/2\"\n\t\t\t\t\t\t\t\t@click=${this.onPrevClick}\n\t\t\t\t\t\t\t\t?disabled=${this.selectedIndex === 0}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tchevron_left\n\t\t\t\t\t\t\t</schmancy-icon-button>\n\t\t\t\t\t\t\t<schmancy-icon-button\n\t\t\t\t\t\t\t\tclass=\"absolute right-2 top-1/2 -translate-y-1/2\"\n\t\t\t\t\t\t\t\t@click=${this.onNextClick}\n\t\t\t\t\t\t\t\t?disabled=${this.selectedIndex === slides.length - 1}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tchevron_right\n\t\t\t\t\t\t\t</schmancy-icon-button>\n\t\t\t\t\t\t`\n\t\t\t\t\t: null}\n\n\t\t\t\t<!-- Dots / indicators -->\n\t\t\t\t<div class=\"absolute bottom-4 left-1/2 -translate-x-1/2 flex space-x-2\">\n\t\t\t\t\t${slides.map((_, index) => {\n\t\t\t\t\t\tconst isSelected = index === this.selectedIndex\n\t\t\t\t\t\treturn html`\n\t\t\t\t\t\t\t<schmancy-button .variant=${isSelected ? 'filled tonal' : 'outlined'} class=\"rounded-full \">\n\t\t\t\t\t\t\t</schmancy-button>\n\t\t\t\t\t\t`\n\t\t\t\t\t})}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-slider': SchmancySlider\n\t}\n}\n"],"names":["SchmancySlide","$LitElement","css","super","arguments","this","type","src","alt","controls","autoplay","loop","muted","fit","render","html","cache","renderSlide","__decorateClass","property","String","prototype","Boolean","customElement","SchmancySlider","selectedIndex","showArrows","slider","scrollLeft","fromEvent","pipe","throttleTime","trailing","subscribe","updateSelectedIndexOnScroll","slides","defaultSlot","assignedElements","flatten","length","oldIndex","sliderCenter","clientWidth","closestIndex","closestDistance","Infinity","forEach","slide","index","itemCenter","offsetLeft","distance","Math","abs","dispatchEvent","CustomEvent","detail","newIndex","scrollTo","left","behavior","goToSlide","onNextClick","onPrevClick","map","_","isSelected","state","query"],"mappings":"sgBAoBaA,QAAAA,cAAN,cAA4BC,EAAAA,YAAYC,EAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,CAAxC,CAAA,CAAA,aAAAC,CAAAA,MAAAA,GAAAC,SAiBwCC,EAAAA,KAAAC,KAAA,UAKJD,KAAAE,IAAA,GAKAF,KAAAG,IAAA,GAKFH,KAAAI,SAAAA,GAKAJ,KAAAK,SAAA,GAKJL,KAAAM,KAAAA,GAKCN,KAAAO,MAAA,GAKQP,KAAAQ,IAAA,OAAA,CAE7C,QAAAC,CACQ,OAAAC,oCAAkCV,KAAKQ,GAAAA,KAAQG,QAAMX,KAAKY,YAAAA,CAAAA,CAAAA,SAAc,CAGxE,aACP,CAAA,OAAQZ,KAAKC,KAAAA,CACZ,IAAK,QACJ,OAAOS,EAAgCA,gCAAAV,KAAKE,GAAAA,UAAaF,KAAKG,GAAAA,uBAC/D,IAAK,QACG,OAAAO,EAAAA;AAAAA;AAAAA;AAAAA,aAGEV,KAAKE,GAAAA;AAAAA,mBACCF,KAAKI,QAAAA;AAAAA,mBACLJ,KAAKK,QAAAA;AAAAA,eACTL,KAAKM,IAAAA;AAAAA,gBACJN,KAAKO,KAAAA;AAAAA;AAAAA;AAAAA;AAAAA,MAMlB,QACQ,OAAAG,EAAAA,mBACT,CAAA,CAAA,EA7D2BG,EAAA,CAA3BC,WAAS,CAAEb,KAAMc,MAjBNpB,CAAAA,CAAAA,EAAAA,sBAiBgBqB,UAAA,OAAA,GAKAH,EAAA,CAA3BC,WAAS,CAAEb,KAAMc,MAAAA,CAAAA,CAAAA,EAtBNpB,sBAsBgBqB,UAAA,MAAA,CAKAH,EAAAA,EAAA,CAA3BC,WAAS,CAAEb,KAAMc,UA3BNpB,sBA2BgBqB,UAAA,MAAA,CAAA,EAKCH,EAAA,CAA5BC,WAAS,CAAEb,KAAMgB,OAAAA,CAAAA,CAAAA,EAhCNtB,sBAgCiBqB,UAAA,WAAA,CAAA,EAKAH,EAAA,CAA5BC,WAAS,CAAEb,KAAMgB,WArCNtB,sBAqCiBqB,UAAA,WAAA,GAKAH,EAAA,CAA5BC,WAAS,CAAEb,KAAMgB,OA1CNtB,CAAAA,CAAAA,EAAAA,sBA0CiBqB,UAAA,OAAA,CAKAH,EAAAA,EAAA,CAA5BC,WAAS,CAAEb,KAAMgB,OAAAA,CAAAA,CAAAA,EA/CNtB,sBA+CiBqB,UAAA,QAAA,CAAA,EAKDH,EAAA,CAA3BC,WAAS,CAAEb,KAAMc,MAAAA,CAAAA,CAAAA,EApDNpB,sBAoDgBqB,UAAA,MAAA,CApDhBrB,EAAAA,QAANA,cAAAkB,EAAA,CADNK,EAAAA,cAAc,mBACFvB,uNCbAwB,QAAAA,eAAN,cAA6BvB,EAAAA,YAAYC,EAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,CAAzC,CAAA,CAAA,cAAAC,MAAAC,GAAAA,SAAAA,EA6BGC,KAAQoB,cAAwB,EAKUpB,KAAAqB,WAAA,EAAA,CAKzC,eAETrB,KAAKsB,OAAOC,WAAa,EAGzBC,EAAAA,UAAUxB,KAAKsB,OAAQ,QACrBG,EAAAA,KAAKC,EAAaA,aAAA,IAAA,OAAgB,CAAEC,SAAAA,MACpCC,UAAU,IAAA,CACV5B,KAAK6B,4BAA4B,CAAA,CAAA,CACjC,CAGK,6BAAAA,OACD,MAAAC,IAAS9B,EAAAA,KAAK+B,cAAL/B,YAAAA,EAAkBgC,iBAAiB,CAAEC,QAAS,EAAA,KAAW,GACpE,GAACH,CAAAA,EAAOI,OAAQ,OAEpB,MAAMC,EAAWnC,KAAKoB,cAGhBgB,EAAepC,KAAKsB,OAAOC,WAAavB,KAAKsB,OAAOe,YAAc,EAExE,IAAIC,EAAe,EACfC,EAAkBC,IAEfV,EAAAW,QAAQ,CAACC,EAAOC,IACtB,CAAA,MACMC,EADaF,EAAsBG,WACVH,EAAML,YAAc,EAC7CS,EAAWC,KAAKC,IAAIZ,EAAeQ,CAErCE,EAAAA,EAAWP,IACIA,EAAAO,EACHR,EAAAK,EAAA,GAIjB3C,KAAKoB,cAAgBkB,EAGjBtC,KAAKoB,gBAAkBe,GACrBnC,KAAAiD,cACJ,IAAIC,YAAY,gBAAiB,CAChCC,OAAQ,CAAER,MAAO3C,KAAKoB,iBAGzB,CAGO,UAAUgC,EAAAA,OACX,MAAAtB,IAAS9B,EAAAA,KAAK+B,cAAL/B,YAAAA,EAAkBgC,iBAAiB,CAAEC,UAAoB,KAAA,CAAA,EACnEH,EAAOsB,CAEZpD,GAAAA,KAAKsB,OAAO+B,SAAS,CACpBC,KAAOxB,EAAOsB,CAAAA,EAA0BP,WACxCU,SAAU,QAAA,CAAA,CACV,CAGM,cACFvD,KAAAwD,UAAUxD,KAAKoB,cAAgB,CAAA,CAAC,CAG9B,aAAAqC,OACD,MAAA3B,IAAS9B,EAAAA,KAAK+B,cAAL/B,YAAAA,EAAkBgC,iBAAiB,CAAEC,UAAoB,KAAA,CAAA,EACpEjC,KAAKoB,cAAgBU,EAAOI,OAAS,GACnClC,KAAAwD,UAAUxD,KAAKoB,cAAgB,CACrC,CAAA,CAGD,QACO,OAAA,MAAAU,IAAS9B,EAAAA,KAAK+B,cAAL/B,YAAAA,EAAkBgC,iBAAiB,CAAEC,QAAAA,OAAoB,CAEjE,EAAA,OAAAvB,EAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,MAQHV,KAAKqB,WACJX,EAAAA;AAAAA;AAAAA;AAAAA,iBAGUV,KAAK0D,WAAAA;AAAAA,oBACF1D,KAAKoB,gBAAkB,CAAlBA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,iBAMRpB,KAAKyD,WAAAA;AAAAA,oBACFzD,KAAKoB,gBAAkBU,EAAOI,OAAS,CAAA;AAAA;AAAA;AAAA;AAAA,QAKpD,IAAA;AAAA;AAAA;AAAA;AAAA,OAIAJ,EAAO6B,IAAI,CAACC,EAAGjB,IACV,CAAA,MAAAkB,EAAalB,IAAU3C,KAAKoB,cAC3B,OAAAV,EAAAA;AAAAA,mCACsBmD,EAAa,eAAiB,UAAA;AAAA;AAAA,OAAU,CAAA,CAAA;AAAA;AAAA;AAAA,GAGpE,CApHWhD,EAAAA,EAAA,CAAhBiD,EAAMA,MAAAA,CAAAA,EA7BK3C,uBA6BKH,UAAA,gBAAA,CAAA,EAKYH,EAAA,CAA5BC,WAAS,CAAEb,KAAMgB,OAlCNE,CAAAA,CAAAA,EAAAA,uBAkCiBH,UAAA,aAAA,CAEHH,EAAAA,EAAA,CAAzBkD,EAAAA,MAAM,SApCK5C,CAAAA,EAAAA,uBAoCcH,UAAA,SAAA,GACHH,EAAA,CAAtBkD,EAAAA,MAAM,MArCK5C,CAAAA,EAAAA,uBAqCWH,UAAA,cAAA,GArCXG,QAANA,eAAAN,EAAA,CADNK,EAAAA,cAAc,iBAAA,CAAA,EACFC"}
|
|
1
|
+
{"version":3,"file":"slider-CR2itGT0.cjs","sources":["../src/slider/slide.ts","../src/slider/slider.ts"],"sourcesContent":["import { $LitElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { cache } from 'lit/directives/cache.js'\n\n/**\n * Supported slide \"types.\"\n * - 'image': Renders an <img>\n * - 'video': Renders a <video>\n * - 'content': Renders a <slot> (the default)\n */\ntype SlideType = 'image' | 'video' | 'content'\n\n/**\n * Allowed values for the 'fit' property,\n * which maps to CSS object-fit.\n */\ntype ObjectFit = 'cover' | 'contain' | 'fill' | 'scale-down' | 'none'\n\n@customElement('schmancy-slide')\nexport class SchmancySlide extends $LitElement(css`\n\t:host {\n\t\tdisplay: block;\n\t\tscroll-snap-align: center; /* If your slider uses scroll-snap */\n\t}\n\n\t.slide {\n\t\tdisplay: block;\n\t\twidth: 100%;\n\t\theight: auto;\n\t\tobject-fit: var(--object-fit, cover);\n\t}\n`) {\n\t/**\n\t * Determines how this slide should be rendered.\n\t * Defaults to 'content' if not provided.\n\t */\n\t@property({ type: String }) type: SlideType = 'content'\n\n\t/**\n\t * Source for images or videos (if `type` is 'image' or 'video').\n\t */\n\t@property({ type: String }) src: string = ''\n\n\t/**\n\t * Alternate text for images.\n\t */\n\t@property({ type: String }) alt: string = ''\n\n\t/**\n\t * Whether to show default video controls (if `type` is 'video').\n\t */\n\t@property({ type: Boolean }) controls = true\n\n\t/**\n\t * Whether the video should autoplay (if `type` is 'video').\n\t */\n\t@property({ type: Boolean }) autoplay = false\n\n\t/**\n\t * Whether the video should loop (if `type` is 'video').\n\t */\n\t@property({ type: Boolean }) loop = false\n\n\t/**\n\t * Whether the video is muted (if `type` is 'video').\n\t */\n\t@property({ type: Boolean }) muted = false\n\n\t/**\n\t * CSS `object-fit` property, applied to images/videos.\n\t */\n\t@property({ type: String }) fit: ObjectFit = 'cover'\n\n\trender() {\n\t\treturn html` <div style=\"--object-fit: ${this.fit}\">${cache(this.renderSlide())}</div> `\n\t}\n\n\tprivate renderSlide() {\n\t\tswitch (this.type) {\n\t\t\tcase 'image':\n\t\t\t\treturn html` <img class=\"slide\" src=\"${this.src}\" alt=\"${this.alt}\" loading=\"lazy\" /> `\n\t\t\tcase 'video':\n\t\t\t\treturn html`\n\t\t\t\t\t<video\n\t\t\t\t\t\tclass=\"slide\"\n\t\t\t\t\t\tsrc=\"${this.src}\"\n\t\t\t\t\t\t?controls=\"${this.controls}\"\n\t\t\t\t\t\t?autoplay=\"${this.autoplay}\"\n\t\t\t\t\t\t?loop=\"${this.loop}\"\n\t\t\t\t\t\t?muted=\"${this.muted}\"\n\t\t\t\t\t>\n\t\t\t\t\t\tYour browser does not support HTML video.\n\t\t\t\t\t</video>\n\t\t\t\t`\n\t\t\tcase 'content':\n\t\t\tdefault:\n\t\t\t\treturn html`<slot></slot>`\n\t\t}\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-slide': SchmancySlide\n\t}\n}\n","import { $LitElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\nimport { fromEvent } from 'rxjs'\nimport { throttleTime } from 'rxjs/operators'\n\n@customElement('schmancy-slider')\nexport class SchmancySlider extends $LitElement(css`\n\t.slider {\n\t\t/* Lay out slides horizontally, one after another */\n\t\tdisplay: flex;\n\t\toverflow-x: auto;\n\n\t\t/* Optional: scroll snapping */\n\t\tscroll-snap-type: x mandatory;\n\n\t\t/* Hide scrollbars */\n\t\t-ms-overflow-style: none; /* IE and Edge */\n\t\tscrollbar-width: none; /* Firefox */\n\t}\n\t.slider::-webkit-scrollbar {\n\t\tdisplay: none; /* Chrome, Safari, Opera */\n\t}\n\n\t/* \n Ensure each slide takes up the full slider width.\n \"schmancy-slide\" is the child custom element.\n */\n\t::slotted(schmancy-slide) {\n\t\tflex: 0 0 100%;\n\t\tbox-sizing: border-box;\n\t}\n`) {\n\t/**\n\t * Currently centered slide index\n\t */\n\t@state() private selectedIndex: number = 0\n\n\t/**\n\t * If true, renders next/prev buttons\n\t */\n\t@property({ type: Boolean }) showArrows: boolean = true\n\n\t@query('#slider') private slider!: HTMLDivElement\n\t@query('slot') private defaultSlot!: HTMLSlotElement\n\n\tprotected firstUpdated() {\n\t\t// Start at leftmost position\n\t\tthis.slider.scrollLeft = 0\n\n\t\t// Throttle scroll events to update selected index\n\t\tfromEvent(this.slider, 'scroll')\n\t\t\t.pipe(throttleTime(100, undefined, { trailing: true }))\n\t\t\t.subscribe(() => {\n\t\t\t\tthis.updateSelectedIndexOnScroll()\n\t\t\t})\n\t}\n\n\tprivate updateSelectedIndexOnScroll() {\n\t\tconst slides = this.defaultSlot?.assignedElements({ flatten: true }) ?? []\n\t\tif (!slides.length) return\n\n\t\tconst oldIndex = this.selectedIndex\n\n\t\t// Center of the slider’s visible area\n\t\tconst sliderCenter = this.slider.scrollLeft + this.slider.clientWidth / 2\n\n\t\tlet closestIndex = 0\n\t\tlet closestDistance = Infinity\n\n\t\tslides.forEach((slide, index) => {\n\t\t\tconst itemStart = (slide as HTMLElement).offsetLeft\n\t\t\tconst itemCenter = itemStart + slide.clientWidth / 2\n\t\t\tconst distance = Math.abs(sliderCenter - itemCenter)\n\n\t\t\tif (distance < closestDistance) {\n\t\t\t\tclosestDistance = distance\n\t\t\t\tclosestIndex = index\n\t\t\t}\n\t\t})\n\n\t\tthis.selectedIndex = closestIndex\n\n\t\t// If the index changed, dispatch event\n\t\tif (this.selectedIndex !== oldIndex) {\n\t\t\tthis.dispatchEvent(\n\t\t\t\tnew CustomEvent('slide-changed', {\n\t\t\t\t\tdetail: { index: this.selectedIndex },\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\t}\n\n\tprivate goToSlide(newIndex: number) {\n\t\tconst slides = this.defaultSlot?.assignedElements({ flatten: true }) ?? []\n\t\tif (!slides[newIndex]) return\n\n\t\tthis.slider.scrollTo({\n\t\t\tleft: (slides[newIndex] as HTMLElement).offsetLeft,\n\t\t\tbehavior: 'smooth',\n\t\t})\n\t}\n\n\tprivate onPrevClick() {\n\t\tthis.goToSlide(this.selectedIndex - 1)\n\t}\n\n\tprivate onNextClick() {\n\t\tconst slides = this.defaultSlot?.assignedElements({ flatten: true }) ?? []\n\t\tif (this.selectedIndex < slides.length - 1) {\n\t\t\tthis.goToSlide(this.selectedIndex + 1)\n\t\t}\n\t}\n\n\trender() {\n\t\tconst slides = this.defaultSlot?.assignedElements({ flatten: true }) ?? []\n\n\t\treturn html`\n\t\t\t<div class=\"relative inset-0\">\n\t\t\t\t<!-- The scrollable track -->\n\t\t\t\t<div class=\"slider\" id=\"slider\">\n\t\t\t\t\t<slot></slot>\n\t\t\t\t</div>\n\n\t\t\t\t<!-- Next/Prev Buttons (Optional) -->\n\t\t\t\t${this.showArrows\n\t\t\t\t\t? html`\n\t\t\t\t\t\t\t<schmancy-icon-button\n\t\t\t\t\t\t\t\tclass=\"absolute left-2 top-1/2 -translate-y-1/2\"\n\t\t\t\t\t\t\t\t@click=${this.onPrevClick}\n\t\t\t\t\t\t\t\t?disabled=${this.selectedIndex === 0}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tchevron_left\n\t\t\t\t\t\t\t</schmancy-icon-button>\n\t\t\t\t\t\t\t<schmancy-icon-button\n\t\t\t\t\t\t\t\tclass=\"absolute right-2 top-1/2 -translate-y-1/2\"\n\t\t\t\t\t\t\t\t@click=${this.onNextClick}\n\t\t\t\t\t\t\t\t?disabled=${this.selectedIndex === slides.length - 1}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tchevron_right\n\t\t\t\t\t\t\t</schmancy-icon-button>\n\t\t\t\t\t\t`\n\t\t\t\t\t: null}\n\n\t\t\t\t<!-- Dots / indicators -->\n\t\t\t\t<div class=\"absolute bottom-4 left-1/2 -translate-x-1/2 flex space-x-2\">\n\t\t\t\t\t${slides.map((_, index) => {\n\t\t\t\t\t\tconst isSelected = index === this.selectedIndex\n\t\t\t\t\t\treturn html`\n\t\t\t\t\t\t\t<schmancy-button .variant=${isSelected ? 'filled tonal' : 'outlined'} class=\"rounded-full \">\n\t\t\t\t\t\t\t</schmancy-button>\n\t\t\t\t\t\t`\n\t\t\t\t\t})}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-slider': SchmancySlider\n\t}\n}\n"],"names":["SchmancySlide","$LitElement","css","super","arguments","this","type","src","alt","controls","autoplay","loop","muted","fit","render","html","cache","renderSlide","__decorateClass","property","String","prototype","Boolean","customElement","SchmancySlider","selectedIndex","showArrows","slider","scrollLeft","fromEvent","pipe","throttleTime","trailing","subscribe","updateSelectedIndexOnScroll","slides","defaultSlot","assignedElements","flatten","length","oldIndex","sliderCenter","clientWidth","closestIndex","closestDistance","Infinity","forEach","slide","index","itemCenter","offsetLeft","distance","Math","abs","dispatchEvent","CustomEvent","detail","newIndex","scrollTo","left","behavior","goToSlide","onNextClick","onPrevClick","map","_","isSelected","state","query"],"mappings":"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"}
|