@mhmo91/schmancy 0.7.6 → 0.8.3
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/ai/audio.md +241 -0
- package/ai/content-drawer.md +163 -70
- package/ai/details.md +309 -44
- package/ai/lightbox.md +381 -0
- package/ai/typography.md +75 -49
- package/dist/ai/audio.md +241 -0
- package/dist/ai/content-drawer.md +163 -70
- package/dist/ai/details.md +309 -44
- package/dist/ai/lightbox.md +381 -0
- package/dist/ai/typography.md +75 -49
- package/dist/{animated-text-1FDC-OTA.cjs → animated-text-Bc3qyXjp.cjs} +2 -2
- package/dist/{animated-text-1FDC-OTA.cjs.map → animated-text-Bc3qyXjp.cjs.map} +1 -1
- package/dist/{animated-text-1_latidd.js → animated-text-CNx6Pmlo.js} +3 -3
- package/dist/{animated-text-1_latidd.js.map → animated-text-CNx6Pmlo.js.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-CQq-Mh0Z.js → area.component-7mWxekxE.js} +104 -98
- package/dist/area.component-7mWxekxE.js.map +1 -0
- package/dist/area.component-CS_gSutH.cjs +12 -0
- package/dist/area.component-CS_gSutH.cjs.map +1 -0
- package/dist/area.js +1 -1
- package/dist/audio.cjs +2 -0
- package/dist/audio.cjs.map +1 -0
- package/dist/audio.js +9 -0
- package/dist/audio.js.map +1 -0
- package/dist/{autocomplete-DT9MFPEG.js → autocomplete-Ci4jo3Ur.js} +4 -4
- package/dist/{autocomplete-DT9MFPEG.js.map → autocomplete-Ci4jo3Ur.js.map} +1 -1
- package/dist/{autocomplete-auTO_M_w.cjs → autocomplete-y-IyzH4r.cjs} +2 -2
- package/dist/{autocomplete-auTO_M_w.cjs.map → autocomplete-y-IyzH4r.cjs.map} +1 -1
- package/dist/autocomplete.cjs +1 -1
- package/dist/autocomplete.js +1 -1
- package/dist/{avatar-Dm_qg-n1.js → avatar-BdyuuIk7.js} +243 -258
- package/dist/avatar-BdyuuIk7.js.map +1 -0
- package/dist/avatar-DBfJucB9.cjs +273 -0
- package/dist/avatar-DBfJucB9.cjs.map +1 -0
- package/dist/badge.cjs +1 -1
- package/dist/badge.js +1 -1
- package/dist/{boat-RNCKlx8b.js → boat-CowHieO2.js} +6 -6
- package/dist/{boat-RNCKlx8b.js.map → boat-CowHieO2.js.map} +1 -1
- package/dist/{boat-98He5-K8.cjs → boat-DkNUc1UO.cjs} +5 -5
- package/dist/{boat-98He5-K8.cjs.map → boat-DkNUc1UO.cjs.map} +1 -1
- package/dist/boat.cjs +1 -1
- package/dist/boat.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/charts.cjs +2 -0
- package/dist/charts.cjs.map +1 -0
- package/dist/charts.js +9 -0
- package/dist/charts.js.map +1 -0
- package/dist/{checkbox-Bdn1_WJg.js → checkbox-BY4Sn8F2.js} +6 -6
- package/dist/{checkbox-Bdn1_WJg.js.map → checkbox-BY4Sn8F2.js.map} +1 -1
- package/dist/{checkbox-Dj06r6MD.cjs → checkbox-BvWcABPr.cjs} +2 -2
- package/dist/{checkbox-Dj06r6MD.cjs.map → checkbox-BvWcABPr.cjs.map} +1 -1
- package/dist/checkbox.cjs +1 -1
- package/dist/checkbox.js +1 -1
- package/dist/chips.cjs +1 -1
- package/dist/chips.js +2 -2
- package/dist/code-highlight.cjs +1 -1
- package/dist/code-highlight.js +1 -1
- package/dist/{code-preview-ByxcwPma.cjs → code-preview-BIFIJigy.cjs} +2 -2
- package/dist/{code-preview-ByxcwPma.cjs.map → code-preview-BIFIJigy.cjs.map} +1 -1
- package/dist/{code-preview-Br7zBkyM.js → code-preview-CYjmAxfs.js} +3 -3
- package/dist/{code-preview-Br7zBkyM.js.map → code-preview-CYjmAxfs.js.map} +1 -1
- package/dist/components.cjs +1 -1
- package/dist/components.js +1 -1
- package/dist/content-drawer.cjs +1 -1
- package/dist/content-drawer.js +1 -1
- package/dist/{context-create-BvxbWTgj.js → context-create-B_S-sD5B.js} +69 -57
- package/dist/context-create-B_S-sD5B.js.map +1 -0
- package/dist/context-create-DTybDbZp.cjs +2 -0
- package/dist/context-create-DTybDbZp.cjs.map +1 -0
- package/dist/date-range-B80Ummtv.cjs +119 -0
- package/dist/date-range-B80Ummtv.cjs.map +1 -0
- package/dist/date-range-BdIqI7LC.js +639 -0
- package/dist/date-range-BdIqI7LC.js.map +1 -0
- package/dist/{date-range-inline-l2G48xTX.js → date-range-inline-Cnhs9atd.js} +3 -3
- package/dist/{date-range-inline-l2G48xTX.js.map → date-range-inline-Cnhs9atd.js.map} +1 -1
- package/dist/{date-range-inline-kbokz03Z.cjs → date-range-inline-Df8u6Ecy.cjs} +2 -2
- package/dist/{date-range-inline-kbokz03Z.cjs.map → date-range-inline-Df8u6Ecy.cjs.map} +1 -1
- package/dist/date-range-inline.cjs +1 -1
- package/dist/date-range-inline.js +1 -1
- package/dist/date-range.cjs +1 -1
- package/dist/date-range.js +1 -1
- package/dist/{delay-CCreUpYu.cjs → delay-BWsVHQib.cjs} +2 -2
- package/dist/delay-BWsVHQib.cjs.map +1 -0
- package/dist/{delay-Nu7RVtYd.js → delay-CCa9nN4A.js} +45 -45
- package/dist/delay-CCa9nN4A.js.map +1 -0
- package/dist/delay.cjs +1 -1
- package/dist/delay.js +1 -1
- package/dist/details-Bee5ya0L.js +100 -0
- package/dist/details-Bee5ya0L.js.map +1 -0
- package/dist/details-oaVHXU7U.cjs +55 -0
- package/dist/details-oaVHXU7U.cjs.map +1 -0
- package/dist/details.cjs +1 -1
- package/dist/details.js +1 -1
- package/dist/dialog-service-C86xTS8q.cjs +2 -0
- package/dist/dialog-service-C86xTS8q.cjs.map +1 -0
- package/dist/dialog-service-D9E3jLAR.js +118 -0
- package/dist/dialog-service-D9E3jLAR.js.map +1 -0
- package/dist/dialog.cjs +1 -1
- package/dist/dialog.component-BriB-kFi.cjs +48 -0
- package/dist/dialog.component-BriB-kFi.cjs.map +1 -0
- package/dist/dialog.component-CMUoCC7O.js +145 -0
- package/dist/dialog.component-CMUoCC7O.js.map +1 -0
- package/dist/dialog.js +7 -7
- package/dist/directives.cjs +1 -1
- package/dist/directives.js +11 -10
- package/dist/directives.js.map +1 -1
- package/dist/{divider-CqyzFfn1.js → divider-B7DBbYFI.js} +3 -3
- package/dist/{divider-CqyzFfn1.js.map → divider-B7DBbYFI.js.map} +1 -1
- package/dist/{divider-0yHQS8kR.cjs → divider-Dl4TToQZ.cjs} +2 -2
- package/dist/{divider-0yHQS8kR.cjs.map → divider-Dl4TToQZ.cjs.map} +1 -1
- package/dist/divider.cjs +1 -1
- package/dist/divider.js +1 -1
- package/dist/{dropdown-content-BmHQE5-P.cjs → dropdown-content-C2W7OttQ.cjs} +2 -2
- package/dist/{dropdown-content-BmHQE5-P.cjs.map → dropdown-content-C2W7OttQ.cjs.map} +1 -1
- package/dist/{dropdown-content-iFlLupVo.js → dropdown-content-DzhOtilY.js} +3 -3
- package/dist/{dropdown-content-iFlLupVo.js.map → dropdown-content-DzhOtilY.js.map} +1 -1
- package/dist/dropdown.cjs +1 -1
- package/dist/dropdown.js +1 -1
- package/dist/{email-recipients-CmAEJDMC.js → email-recipients-BWqZKo3m.js} +8 -7
- package/dist/{email-recipients-CmAEJDMC.js.map → email-recipients-BWqZKo3m.js.map} +1 -1
- package/dist/{email-recipients-Cioc3U0Z.cjs → email-recipients-Bh5VC0rc.cjs} +2 -2
- package/dist/{email-recipients-Cioc3U0Z.cjs.map → email-recipients-Bh5VC0rc.cjs.map} +1 -1
- package/dist/emotional-sounds-BRnFhww6.js +234 -0
- package/dist/emotional-sounds-BRnFhww6.js.map +1 -0
- package/dist/emotional-sounds-DVGhmoZf.cjs +2 -0
- package/dist/emotional-sounds-DVGhmoZf.cjs.map +1 -0
- package/dist/extra.cjs +1 -1
- package/dist/extra.js +1 -1
- package/dist/flex-53G-PJx7.js +183 -0
- package/dist/flex-53G-PJx7.js.map +1 -0
- package/dist/flex-DFSIy0t4.cjs +18 -0
- package/dist/flex-DFSIy0t4.cjs.map +1 -0
- package/dist/{form-CxrvY530.js → form-BtRK9bnp.js} +2 -2
- package/dist/{form-CxrvY530.js.map → form-BtRK9bnp.js.map} +1 -1
- package/dist/{form-DFDTspmH.cjs → form-Zq7g2JS8.cjs} +2 -2
- package/dist/{form-DFDTspmH.cjs.map → form-Zq7g2JS8.cjs.map} +1 -1
- package/dist/form.cjs +1 -1
- package/dist/form.js +1 -1
- package/dist/{formField.mixin-hZ2qP4iG.js → formField.mixin-2jSL7WF_.js} +2 -2
- package/dist/{formField.mixin-hZ2qP4iG.js.map → formField.mixin-2jSL7WF_.js.map} +1 -1
- package/dist/{formField.mixin-C7H5DaEl.cjs → formField.mixin-DkN2ufR_.cjs} +2 -2
- package/dist/{formField.mixin-C7H5DaEl.cjs.map → formField.mixin-DkN2ufR_.cjs.map} +1 -1
- package/dist/height-CfECBO2j.js +44 -0
- package/dist/height-CfECBO2j.js.map +1 -0
- package/dist/height-Z70qJYJK.cjs +2 -0
- package/dist/height-Z70qJYJK.cjs.map +1 -0
- package/dist/{icon-D0FAI5uJ.js → icon-B5qeYrDu.js} +17 -17
- package/dist/icon-B5qeYrDu.js.map +1 -0
- package/dist/icon-button-BpmGFjaR.cjs +70 -0
- package/dist/icon-button-BpmGFjaR.cjs.map +1 -0
- package/dist/icon-button-HSYaQBNF.js +164 -0
- package/dist/icon-button-HSYaQBNF.js.map +1 -0
- package/dist/icon-pU_cfmpD.cjs +49 -0
- package/dist/icon-pU_cfmpD.cjs.map +1 -0
- package/dist/icons.cjs +1 -1
- package/dist/icons.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +275 -250
- package/dist/index.js.map +1 -1
- package/dist/input-8G9YY9qv.cjs +51 -0
- package/dist/input-8G9YY9qv.cjs.map +1 -0
- package/dist/{input-DLnKAj3B.js → input-BJMF5Fyk.js} +35 -31
- package/dist/input-BJMF5Fyk.js.map +1 -0
- package/dist/{input-chip-C3EPsHcP.cjs → input-chip-CocdqTzr.cjs} +2 -2
- package/dist/{input-chip-C3EPsHcP.cjs.map → input-chip-CocdqTzr.cjs.map} +1 -1
- package/dist/{input-chip-dmqYCExV.js → input-chip-tbrw56ix.js} +2 -2
- package/dist/{input-chip-dmqYCExV.js.map → input-chip-tbrw56ix.js.map} +1 -1
- package/dist/input.cjs +1 -1
- package/dist/input.js +1 -1
- package/dist/json-CvcloKQv.js +51 -0
- package/dist/json-CvcloKQv.js.map +1 -0
- package/dist/json-DPnyOA3K.cjs +12 -0
- package/dist/json-DPnyOA3K.cjs.map +1 -0
- package/dist/json.cjs +2 -0
- package/dist/json.cjs.map +1 -0
- package/dist/json.js +5 -0
- package/dist/json.js.map +1 -0
- package/dist/layout.cjs +1 -1
- package/dist/layout.js +4 -3
- package/dist/layout.js.map +1 -1
- package/dist/lightbox-service-3mHqBKEh.cjs +202 -0
- package/dist/lightbox-service-3mHqBKEh.cjs.map +1 -0
- package/dist/lightbox-service-DxbYZAuv.js +458 -0
- package/dist/lightbox-service-DxbYZAuv.js.map +1 -0
- package/dist/lightbox.cjs +2 -0
- package/dist/lightbox.cjs.map +1 -0
- package/dist/lightbox.js +8 -0
- package/dist/lightbox.js.map +1 -0
- package/dist/{list-BegNkhOn.js → list-FWXmY-eQ.js} +2 -2
- package/dist/{list-BegNkhOn.js.map → list-FWXmY-eQ.js.map} +1 -1
- package/dist/{list-CLKiZ6lk.cjs → list-JjR7WOrd.cjs} +2 -2
- package/dist/{list-CLKiZ6lk.cjs.map → list-JjR7WOrd.cjs.map} +1 -1
- package/dist/list.cjs +1 -1
- package/dist/list.js +1 -1
- package/dist/{litElement.mixin-CPQYJnK_.cjs → litElement.mixin-BVBdv0GP.cjs} +2 -2
- package/dist/{litElement.mixin-CPQYJnK_.cjs.map → litElement.mixin-BVBdv0GP.cjs.map} +1 -1
- package/dist/{litElement.mixin-DWDPaNoc.js → litElement.mixin-Wcu4yIIs.js} +2 -2
- package/dist/{litElement.mixin-DWDPaNoc.js.map → litElement.mixin-Wcu4yIIs.js.map} +1 -1
- package/dist/mailbox.cjs +1 -1
- package/dist/mailbox.js +1 -1
- package/dist/{map-CUKZ6LrR.js → map-Br6xJFxG.js} +2 -2
- package/dist/{map-CUKZ6LrR.js.map → map-Br6xJFxG.js.map} +1 -1
- package/dist/{map-w4Kdtycx.cjs → map-D9R3OCne.cjs} +2 -2
- package/dist/{map-w4Kdtycx.cjs.map → map-D9R3OCne.cjs.map} +1 -1
- package/dist/map.cjs +1 -1
- package/dist/map.js +1 -1
- package/dist/{media-CjdCchz8.js → media-BV_1DfcW.js} +2 -2
- package/dist/{media-CjdCchz8.js.map → media-BV_1DfcW.js.map} +1 -1
- package/dist/{media-DDNmuoV0.cjs → media-DibPwAjJ.cjs} +2 -2
- package/dist/{media-DDNmuoV0.cjs.map → media-DibPwAjJ.cjs.map} +1 -1
- package/dist/menu-HKqlq99V.js +60 -0
- package/dist/{menu-ofiPDY2a.js.map → menu-HKqlq99V.js.map} +1 -1
- package/dist/{menu-D9-9vipn.cjs → menu-vNrV-Nuq.cjs} +4 -6
- package/dist/{menu-D9-9vipn.cjs.map → menu-vNrV-Nuq.cjs.map} +1 -1
- package/dist/menu.cjs +1 -1
- package/dist/menu.js +1 -1
- package/dist/mixins.cjs +1 -1
- package/dist/mixins.js +3 -3
- package/dist/nav-drawer.cjs +1 -1
- package/dist/nav-drawer.js +1 -1
- package/dist/navigation-bar.cjs +1 -1
- package/dist/navigation-bar.js +1 -1
- package/dist/{navigation-rail-CEDLJTrH.cjs → navigation-rail-D1o3qDe_.cjs} +15 -17
- package/dist/navigation-rail-D1o3qDe_.cjs.map +1 -0
- package/dist/{navigation-rail-weSW6BCv.js → navigation-rail-DKXumnmt.js} +30 -32
- package/dist/navigation-rail-DKXumnmt.js.map +1 -0
- package/dist/navigation-rail.cjs +1 -1
- package/dist/navigation-rail.js +1 -1
- package/dist/notification-service-B5ljba4P.js +155 -0
- package/dist/notification-service-B5ljba4P.js.map +1 -0
- package/dist/notification-service-ICRT05L0.cjs +19 -0
- package/dist/notification-service-ICRT05L0.cjs.map +1 -0
- package/dist/notification.cjs +1 -1
- package/dist/notification.js +6 -8
- package/dist/{notify-Ci0HrUIo.js → notify-B9CpO1Ru.js} +2 -2
- package/dist/notify-B9CpO1Ru.js.map +1 -0
- package/dist/{notify-aasSKQGA.cjs → notify-NX-dl60E.cjs} +2 -2
- package/dist/notify-NX-dl60E.cjs.map +1 -0
- package/dist/{option-Cs4e3CzF.js → option-B4JKMrLg.js} +2 -2
- package/dist/{option-Cs4e3CzF.js.map → option-B4JKMrLg.js.map} +1 -1
- package/dist/{option-Uze_q9Ef.cjs → option-epyXLWoY.cjs} +2 -2
- package/dist/{option-Uze_q9Ef.cjs.map → option-epyXLWoY.cjs.map} +1 -1
- package/dist/option.cjs +1 -1
- package/dist/option.js +1 -1
- package/dist/page-Bmi1QHtq.cjs +20 -0
- package/dist/page-Bmi1QHtq.cjs.map +1 -0
- package/dist/page-BpygEntU.js +48 -0
- package/dist/page-BpygEntU.js.map +1 -0
- package/dist/page.cjs +2 -0
- package/dist/page.cjs.map +1 -0
- package/dist/page.js +5 -0
- package/dist/page.js.map +1 -0
- package/dist/{payment-card-form-rJCPUtWE.cjs → payment-card-form-3kAXDbXf.cjs} +2 -2
- package/dist/{payment-card-form-rJCPUtWE.cjs.map → payment-card-form-3kAXDbXf.cjs.map} +1 -1
- package/dist/{payment-card-form-BLoUTYiB.js → payment-card-form-BxkHuSls.js} +3 -3
- package/dist/{payment-card-form-BLoUTYiB.js.map → payment-card-form-BxkHuSls.js.map} +1 -1
- package/dist/pills-C3fIvfn8.js +346 -0
- package/dist/pills-C3fIvfn8.js.map +1 -0
- package/dist/pills-MmHyBGQu.cjs +113 -0
- package/dist/pills-MmHyBGQu.cjs.map +1 -0
- package/dist/progress-0POmJs5o.js +59 -0
- package/dist/progress-0POmJs5o.js.map +1 -0
- package/dist/progress-qx8jtrOA.cjs +35 -0
- package/dist/progress-qx8jtrOA.cjs.map +1 -0
- package/dist/progress.cjs +1 -1
- package/dist/progress.js +1 -1
- package/dist/qr-scanner-DQq-WLyo.cjs +29 -0
- package/dist/qr-scanner-DQq-WLyo.cjs.map +1 -0
- package/dist/qr-scanner-jwOSrD0N.js +743 -0
- package/dist/qr-scanner-jwOSrD0N.js.map +1 -0
- package/dist/qr-scanner.cjs +2 -0
- package/dist/qr-scanner.cjs.map +1 -0
- package/dist/qr-scanner.js +5 -0
- package/dist/qr-scanner.js.map +1 -0
- package/dist/{radio-button-CaDaw5VH.js → radio-button-B0EUK_wg.js} +3 -3
- package/dist/{radio-button-CaDaw5VH.js.map → radio-button-B0EUK_wg.js.map} +1 -1
- package/dist/{radio-button-BAS7gKmA.cjs → radio-button-DraEYR2R.cjs} +2 -2
- package/dist/{radio-button-BAS7gKmA.cjs.map → radio-button-DraEYR2R.cjs.map} +1 -1
- package/dist/radio-group.cjs +1 -1
- package/dist/radio-group.js +1 -1
- package/dist/ripple-BgJXbNSP.js +124 -0
- package/dist/ripple-BgJXbNSP.js.map +1 -0
- package/dist/ripple-x6sTX02K.cjs +16 -0
- package/dist/ripple-x6sTX02K.cjs.map +1 -0
- package/dist/{schmancy-steps-container-wQsksygx.cjs → schmancy-steps-container-B5aiqgMA.cjs} +2 -2
- package/dist/{schmancy-steps-container-wQsksygx.cjs.map → schmancy-steps-container-B5aiqgMA.cjs.map} +1 -1
- package/dist/{schmancy-steps-container-BInNput3.js → schmancy-steps-container-C2StAA5K.js} +3 -3
- package/dist/{schmancy-steps-container-BInNput3.js.map → schmancy-steps-container-C2StAA5K.js.map} +1 -1
- package/dist/scroll-BqT7bvhu.cjs +27 -0
- package/dist/scroll-BqT7bvhu.cjs.map +1 -0
- package/dist/scroll-Bu-vAg3d.js +87 -0
- package/dist/scroll-Bu-vAg3d.js.map +1 -0
- package/dist/{select-_2Ag_znm.cjs → select-HiEGJvOX.cjs} +2 -2
- package/dist/select-HiEGJvOX.cjs.map +1 -0
- package/dist/{select-ApLZefMf.js → select-i-uKur-W.js} +5 -4
- package/dist/select-i-uKur-W.js.map +1 -0
- package/dist/select.cjs +1 -1
- package/dist/select.js +1 -1
- package/dist/{selector-hook-Cok22ifx.cjs → selector-hook-9w2auh2O.cjs} +2 -2
- package/dist/{selector-hook-Cok22ifx.cjs.map → selector-hook-9w2auh2O.cjs.map} +1 -1
- package/dist/{selector-hook-l2fe2UO5.js → selector-hook-CHV4kDMd.js} +3 -3
- package/dist/{selector-hook-l2fe2UO5.js.map → selector-hook-CHV4kDMd.js.map} +1 -1
- package/dist/{sheet-DovyNsok.js → sheet-B1g7E4dQ.js} +5 -5
- package/dist/{sheet-DovyNsok.js.map → sheet-B1g7E4dQ.js.map} +1 -1
- package/dist/{sheet-wjDOQ8Hs.cjs → sheet-BbrRW0S5.cjs} +2 -2
- package/dist/{sheet-wjDOQ8Hs.cjs.map → sheet-BbrRW0S5.cjs.map} +1 -1
- package/dist/sheet.cjs +1 -1
- package/dist/sheet.js +2 -2
- package/dist/{sheet.service-BvOiOFMm.js → sheet.service-4etIM-p6.js} +20 -18
- package/dist/sheet.service-4etIM-p6.js.map +1 -0
- package/dist/sheet.service-BiRZjCdN.cjs +2 -0
- package/dist/sheet.service-BiRZjCdN.cjs.map +1 -0
- package/dist/{slider-CeVgx4pL.js → slider-8E3Wad0t.js} +3 -3
- package/dist/{slider-CeVgx4pL.js.map → slider-8E3Wad0t.js.map} +1 -1
- package/dist/{slider-BgJccHrg.cjs → slider-VYnbIRH2.cjs} +2 -2
- package/dist/{slider-BgJccHrg.cjs.map → slider-VYnbIRH2.cjs.map} +1 -1
- package/dist/slider.cjs +1 -1
- package/dist/slider.js +1 -1
- package/dist/sound.service-Nza4c6wv.js +102 -0
- package/dist/sound.service-Nza4c6wv.js.map +1 -0
- package/dist/sound.service-eRirZw59.cjs +2 -0
- package/dist/sound.service-eRirZw59.cjs.map +1 -0
- package/dist/{spinner-Brq1TenP.js → spinner-CKm13CKN.js} +15 -12
- package/dist/spinner-CKm13CKN.js.map +1 -0
- package/dist/{spinner-BKeA2bdB.cjs → spinner-DJgcI5wr.cjs} +9 -9
- package/dist/spinner-DJgcI5wr.cjs.map +1 -0
- package/dist/steps.cjs +1 -1
- package/dist/steps.js +1 -1
- package/dist/store.cjs +1 -1
- package/dist/store.js +2 -2
- package/dist/{suggestion-chip-CWBSzu7C.js → suggestion-chip-6njXvvHm.js} +50 -46
- package/dist/suggestion-chip-6njXvvHm.js.map +1 -0
- package/dist/{suggestion-chip-dq20NKWy.cjs → suggestion-chip-DdLfqk7o.cjs} +18 -23
- package/dist/suggestion-chip-DdLfqk7o.cjs.map +1 -0
- package/dist/{surface-Bf8pvmdG.js → surface-BYU3l_Q2.js} +12 -11
- package/dist/surface-BYU3l_Q2.js.map +1 -0
- package/dist/{surface-fEPJ-cuu.cjs → surface-DcqbWGub.cjs} +5 -4
- package/dist/surface-DcqbWGub.cjs.map +1 -0
- package/dist/surface.cjs +1 -1
- package/dist/surface.js +1 -1
- package/dist/{table-DEnB9_Rf.cjs → table-C9fzDjjk.cjs} +2 -2
- package/dist/{table-DEnB9_Rf.cjs.map → table-C9fzDjjk.cjs.map} +1 -1
- package/dist/{table-MLd3oXm6.js → table-Dq12ollZ.js} +3 -3
- package/dist/{table-MLd3oXm6.js.map → table-Dq12ollZ.js.map} +1 -1
- package/dist/table.cjs +1 -1
- package/dist/table.js +1 -1
- package/dist/{tabs-compatibility-CXVHOR5X.cjs → tabs-compatibility-Dwtjfkcf.cjs} +2 -2
- package/dist/{tabs-compatibility-CXVHOR5X.cjs.map → tabs-compatibility-Dwtjfkcf.cjs.map} +1 -1
- package/dist/{tabs-compatibility-KWKzYolX.js → tabs-compatibility-wnzlHtln.js} +2 -2
- package/dist/{tabs-compatibility-KWKzYolX.js.map → tabs-compatibility-wnzlHtln.js.map} +1 -1
- package/dist/tabs.cjs +1 -1
- package/dist/tabs.js +1 -1
- package/dist/tailwind.mixin-Ddt05Frc.js +67 -0
- package/dist/{tailwind.mixin-DIW0B_of.js.map → tailwind.mixin-Ddt05Frc.js.map} +1 -1
- package/dist/tailwind.mixin-UijsBrYW.cjs +2 -0
- package/dist/{tailwind.mixin-3TPVvhYf.cjs.map → tailwind.mixin-UijsBrYW.cjs.map} +1 -1
- package/dist/teleport.cjs +1 -1
- package/dist/teleport.js +1 -1
- package/dist/textarea-DGmsw1B_.cjs +44 -0
- package/dist/{textarea-B7arkA7y.cjs.map → textarea-DGmsw1B_.cjs.map} +1 -1
- package/dist/{textarea-BK1m_CFR.js → textarea-Vd3zayJZ.js} +4 -3
- package/dist/{textarea-BK1m_CFR.js.map → textarea-Vd3zayJZ.js.map} +1 -1
- package/dist/textarea.cjs +1 -1
- package/dist/textarea.js +1 -1
- package/dist/{theme-button-BTKwL3oC.cjs → theme-button-DG_Xwg9H.cjs} +2 -2
- package/dist/{theme-button-BTKwL3oC.cjs.map → theme-button-DG_Xwg9H.cjs.map} +1 -1
- package/dist/{theme-button-C6kk8bay.js → theme-button-rGpEW_xS.js} +2 -2
- package/dist/{theme-button-C6kk8bay.js.map → theme-button-rGpEW_xS.js.map} +1 -1
- package/dist/theme-button.cjs +1 -1
- package/dist/theme-button.js +1 -1
- package/dist/{theme-controller-boat-BK59LqH9.js → theme-controller-boat-B1fjcqJI.js} +420 -228
- package/dist/theme-controller-boat-B1fjcqJI.js.map +1 -0
- package/dist/theme-controller-boat-pLzK5zxL.cjs +178 -0
- package/dist/theme-controller-boat-pLzK5zxL.cjs.map +1 -0
- package/dist/theme.cjs +1 -1
- package/dist/theme.js +13 -11
- package/dist/{timezone-nbn0o5GC.cjs → timezone-BhUaIAV7.cjs} +2 -2
- package/dist/{timezone-nbn0o5GC.cjs.map → timezone-BhUaIAV7.cjs.map} +1 -1
- package/dist/{timezone-D_skWX6Z.js → timezone-IQkwr6Oh.js} +3 -3
- package/dist/{timezone-D_skWX6Z.js.map → timezone-IQkwr6Oh.js.map} +1 -1
- package/dist/{tooltip-Btl0IKYC.js → tooltip-CwaiZC8f.js} +2 -2
- package/dist/{tooltip-Btl0IKYC.js.map → tooltip-CwaiZC8f.js.map} +1 -1
- package/dist/{tooltip-DyuMJEjL.cjs → tooltip-iEvxKg8g.cjs} +2 -2
- package/dist/{tooltip-DyuMJEjL.cjs.map → tooltip-iEvxKg8g.cjs.map} +1 -1
- package/dist/tooltip.cjs +1 -1
- package/dist/tooltip.js +1 -1
- package/dist/{tree-N4Y6MoQe.cjs → tree-Bclu6uvv.cjs} +2 -2
- package/dist/{tree-N4Y6MoQe.cjs.map → tree-Bclu6uvv.cjs.map} +1 -1
- package/dist/{tree-B_2eIFQi.js → tree-D9EbEsxn.js} +2 -2
- package/dist/{tree-B_2eIFQi.js.map → tree-D9EbEsxn.js.map} +1 -1
- package/dist/tree.cjs +1 -1
- package/dist/tree.js +1 -1
- package/dist/{typewriter-Blyrk_4c.js → typewriter-BjDPgRlj.js} +5 -5
- package/dist/{typewriter-Blyrk_4c.js.map → typewriter-BjDPgRlj.js.map} +1 -1
- package/dist/{typewriter-CFQAeOaw.cjs → typewriter-Bscwd-36.cjs} +4 -4
- package/dist/{typewriter-CFQAeOaw.cjs.map → typewriter-Bscwd-36.cjs.map} +1 -1
- package/dist/typewriter.cjs +1 -1
- package/dist/typewriter.js +1 -1
- package/dist/{typography-DjGWK58I.js → typography-CConBBFH.js} +13 -53
- package/dist/typography-CConBBFH.js.map +1 -0
- package/dist/{typography-DsIU0TGe.cjs → typography-DLGT3DGz.cjs} +3 -46
- package/dist/typography-DLGT3DGz.cjs.map +1 -0
- package/dist/typography.cjs +1 -1
- package/dist/typography.js +1 -1
- package/mixins/tailwind.css +37 -6
- package/package.json +21 -20
- package/types/src/area/area.service.d.ts +1 -1
- package/types/src/area/router.types.d.ts +1 -0
- package/types/src/audio/emotional-sounds.d.ts +122 -0
- package/types/src/audio/index.d.ts +30 -0
- package/types/src/audio/sound.service.d.ts +111 -0
- package/types/src/avatar.d.ts +10 -1
- package/types/src/busy/spinner.d.ts +6 -1
- package/types/src/button/button.d.ts +15 -2
- package/types/src/button/icon-button.d.ts +1 -1
- package/types/src/charts/area-chart.d.ts +58 -0
- package/types/src/charts/index.d.ts +4 -0
- package/types/src/charts/pills.d.ts +51 -0
- package/types/src/charts/types.d.ts +62 -0
- package/types/src/charts/utils.d.ts +28 -0
- package/types/src/checkbox/checkbox.d.ts +3 -2
- package/types/src/chips/chips.d.ts +2 -0
- package/types/src/content-drawer/drawer.service.d.ts +1 -7
- package/types/src/date-range/date-range-dialog.d.ts +16 -0
- package/types/src/date-range/date-range.d.ts +1 -1
- package/types/src/details/details.d.ts +8 -3
- package/types/src/dialog/dailog.d.ts +1 -5
- package/types/src/dialog/dialog-base.mixin.d.ts +26 -0
- package/types/src/dialog/dialog-service.d.ts +3 -66
- package/types/src/dialog/dialog.component.d.ts +63 -30
- package/types/src/dialog/index.d.ts +1 -3
- package/types/src/directives/height.d.ts +11 -6
- package/types/src/icons/icon.d.ts +17 -0
- package/types/src/index.d.ts +6 -0
- package/types/src/input/input.d.ts +13 -9
- package/types/src/json/index.d.ts +1 -0
- package/types/src/json/json.d.ts +15 -0
- package/types/src/lightbox/flip-directive.d.ts +29 -0
- package/types/src/lightbox/flip.directive.d.ts +22 -0
- package/types/src/lightbox/index.d.ts +4 -0
- package/types/src/lightbox/lightbox-service.d.ts +24 -0
- package/types/src/lightbox/lightbox.d.ts +34 -0
- package/types/src/lightbox/lightbox.directive.d.ts +30 -0
- package/types/src/nav-drawer/appbar.d.ts +0 -5
- package/types/src/nav-drawer/drawer.d.ts +1 -32
- package/types/src/notification/index.d.ts +1 -3
- package/types/src/notification/notification-service.d.ts +13 -1
- package/types/src/notification/notification.d.ts +13 -12
- package/types/src/notification/notify.d.ts +1 -1
- package/types/src/page/index.d.ts +1 -0
- package/types/src/page/page.d.ts +31 -0
- package/types/src/progress/progress.d.ts +2 -2
- package/types/src/qr-scanner/index.d.ts +1 -0
- package/types/src/qr-scanner/qr-scanner.d.ts +26 -0
- package/types/src/select/select.d.ts +1 -1
- package/types/src/theme/index.d.ts +1 -0
- package/types/src/theme/theme-audio-player.d.ts +100 -0
- package/types/src/theme/theme-controller-boat.d.ts +1 -0
- package/types/src/theme/theme.component.d.ts +1 -1
- package/types/src/types/index.d.ts +1 -0
- package/types/src/types/mood-audio.types.d.ts +173 -0
- package/types/src/typography/typography.d.ts +1 -0
- package/dist/area.component-CQq-Mh0Z.js.map +0 -1
- package/dist/area.component-Ciw7vGsx.cjs +0 -12
- package/dist/area.component-Ciw7vGsx.cjs.map +0 -1
- package/dist/avatar-Bo8kRnA-.cjs +0 -288
- package/dist/avatar-Bo8kRnA-.cjs.map +0 -1
- package/dist/avatar-Dm_qg-n1.js.map +0 -1
- package/dist/context-create-BJkkLr1D.cjs +0 -2
- package/dist/context-create-BJkkLr1D.cjs.map +0 -1
- package/dist/context-create-BvxbWTgj.js.map +0 -1
- package/dist/date-range-VkIMcQdT.js +0 -664
- package/dist/date-range-VkIMcQdT.js.map +0 -1
- package/dist/date-range-xYUr_KKx.cjs +0 -134
- package/dist/date-range-xYUr_KKx.cjs.map +0 -1
- package/dist/delay-CCreUpYu.cjs.map +0 -1
- package/dist/delay-Nu7RVtYd.js.map +0 -1
- package/dist/details-CjQrqBli.cjs +0 -98
- package/dist/details-CjQrqBli.cjs.map +0 -1
- package/dist/details-DVIWpEsI.js +0 -137
- package/dist/details-DVIWpEsI.js.map +0 -1
- package/dist/dialog-content-BgxKi73O.js +0 -256
- package/dist/dialog-content-BgxKi73O.js.map +0 -1
- package/dist/dialog-content-CM3-RXQQ.cjs +0 -85
- package/dist/dialog-content-CM3-RXQQ.cjs.map +0 -1
- package/dist/dialog-service-B4nR8Em5.cjs +0 -2
- package/dist/dialog-service-B4nR8Em5.cjs.map +0 -1
- package/dist/dialog-service-Bege4HF4.js +0 -140
- package/dist/dialog-service-Bege4HF4.js.map +0 -1
- package/dist/flex-BEB1yuMF.cjs +0 -43
- package/dist/flex-BEB1yuMF.cjs.map +0 -1
- package/dist/flex-BgcbHlPo.js +0 -260
- package/dist/flex-BgcbHlPo.js.map +0 -1
- package/dist/icon-D0FAI5uJ.js.map +0 -1
- package/dist/icon-DJnGMAQ2.cjs +0 -49
- package/dist/icon-DJnGMAQ2.cjs.map +0 -1
- package/dist/icon-button-CSZtSmOy.cjs +0 -65
- package/dist/icon-button-CSZtSmOy.cjs.map +0 -1
- package/dist/icon-button-CbgQp3AL.js +0 -156
- package/dist/icon-button-CbgQp3AL.js.map +0 -1
- package/dist/input-DLnKAj3B.js.map +0 -1
- package/dist/input-wZ6ORWru.cjs +0 -51
- package/dist/input-wZ6ORWru.cjs.map +0 -1
- package/dist/menu-ofiPDY2a.js +0 -61
- package/dist/navigation-rail-CEDLJTrH.cjs.map +0 -1
- package/dist/navigation-rail-weSW6BCv.js.map +0 -1
- package/dist/notification-service-B4nvP2Jc.js +0 -532
- package/dist/notification-service-B4nvP2Jc.js.map +0 -1
- package/dist/notification-service-B_pa74hl.cjs +0 -143
- package/dist/notification-service-B_pa74hl.cjs.map +0 -1
- package/dist/notify-Ci0HrUIo.js.map +0 -1
- package/dist/notify-aasSKQGA.cjs.map +0 -1
- package/dist/progress-B1f3y-Mf.js +0 -58
- package/dist/progress-B1f3y-Mf.js.map +0 -1
- package/dist/progress-DdBHNIMT.cjs +0 -35
- package/dist/progress-DdBHNIMT.cjs.map +0 -1
- package/dist/ripple-QoNZUUw_.js +0 -148
- package/dist/ripple-QoNZUUw_.js.map +0 -1
- package/dist/ripple-Ujq_REH4.cjs +0 -16
- package/dist/ripple-Ujq_REH4.cjs.map +0 -1
- package/dist/select-ApLZefMf.js.map +0 -1
- package/dist/select-_2Ag_znm.cjs.map +0 -1
- package/dist/sheet.service-BvOiOFMm.js.map +0 -1
- package/dist/sheet.service-DfHrOxyc.cjs +0 -2
- package/dist/sheet.service-DfHrOxyc.cjs.map +0 -1
- package/dist/spinner-BKeA2bdB.cjs.map +0 -1
- package/dist/spinner-Brq1TenP.js.map +0 -1
- package/dist/suggestion-chip-CWBSzu7C.js.map +0 -1
- package/dist/suggestion-chip-dq20NKWy.cjs.map +0 -1
- package/dist/surface-Bf8pvmdG.js.map +0 -1
- package/dist/surface-fEPJ-cuu.cjs.map +0 -1
- package/dist/tailwind.mixin-3TPVvhYf.cjs +0 -2
- package/dist/tailwind.mixin-DIW0B_of.js +0 -67
- package/dist/textarea-B7arkA7y.cjs +0 -44
- package/dist/theme-controller-boat-BK59LqH9.js.map +0 -1
- package/dist/theme-controller-boat-Y5QXwJxW.cjs +0 -64
- package/dist/theme-controller-boat-Y5QXwJxW.cjs.map +0 -1
- package/dist/typography-DjGWK58I.js.map +0 -1
- package/dist/typography-DsIU0TGe.cjs.map +0 -1
- package/types/src/notification/notification-audio-generator.d.ts +0 -45
- package/types/src/notification/notification-audio.d.ts +0 -79
- package/types/src/notification/notification-container.d.ts +0 -48
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";const s=require("rxjs");require("./sound.service-eRirZw59.cjs");const r=require("./emotional-sounds-DVGhmoZf.cjs"),h=require("./tailwind.mixin-UijsBrYW.cjs");var c=(e=>(e.Side="side",e.Bottom="bottom",e))(c||{});const p=new class{constructor(){this.bottomSheet=new s.Subject,this.activeSheets=new Set,this.popStateListenerActive=!1,this.setupSheetOpeningLogic(),this.setupPopStateListener()}setupSheetOpeningLogic(){this.bottomSheet.pipe(s.switchMap(e=>{const t=e.uid??`sheet-${Date.now()}`;return h.discoverComponent("schmancy-sheet").pipe(s.map(i=>{const o=i?.getAttribute("uid")===t?i:null;return{target:e,existingSheet:o,uid:t}}))}),s.switchMap(({target:e,existingSheet:t,uid:i})=>t?s.of({target:e,sheet:t,uid:i}):h.discoverComponent("schmancy-theme").pipe(s.map(o=>{const a=o||document.body,n=document.createElement("schmancy-sheet");return n.setAttribute("uid",i),a.appendChild(n),{target:e,sheet:n,uid:i}}))),s.tap(({target:e,sheet:t})=>{e.lock&&t.setAttribute("lock","true");const i=e.position||(window.innerWidth>=768?"side":"bottom");t.setAttribute("position",i),e.persist&&t.setAttribute("persist",String(e.persist)),document.body.style.overflow="hidden"}),s.delay(20),s.tap(({target:e,uid:t})=>{window.dispatchEvent(new CustomEvent("schmancy-sheet-render",{detail:{component:e.component,uid:t,props:e.props},bubbles:!0,composed:!0}))}),s.delay(1),s.tap(({sheet:e,uid:t})=>{e.setAttribute("open","true"),r.$sounds.play("curious"),this.activeSheets.add(t),s.fromEvent(e,"close").pipe(s.take(1),s.delay(300)).subscribe(()=>{this.activeSheets.delete(t);const i=e.getAttribute("persist");(!i||i==="false")&&e.remove(),document.body.style.overflow="auto"})})).subscribe()}setupPopStateListener(){this.popStateListenerActive||(s.fromEvent(window,"popstate").subscribe(e=>{if(this.activeSheets.size>0){const t=Array.from(this.activeSheets).pop();t&&(this.dismiss(t),e.state&&e.state.schmancySheet&&history.pushState({},"",window.location.href))}}),this.popStateListenerActive=!0)}dismiss(e){if(!e&&this.activeSheets.size>0){const t=Array.from(this.activeSheets);e=t[t.length-1]}e&&(r.$sounds.play("atEase"),window.dispatchEvent(new CustomEvent("schmancy-sheet-dismiss",{detail:{uid:e},bubbles:!0,composed:!0})),this.activeSheets.delete(e))}open(e){this.bottomSheet.next(e)}push(e){this.bottomSheet.next(e)}isOpen(e){return this.activeSheets.has(e)}closeAll(){Array.from(this.activeSheets).forEach(e=>{this.dismiss(e)})}};exports.SchmancySheetPosition=c,exports.sheet=p;
|
|
2
|
+
//# sourceMappingURL=sheet.service-BiRZjCdN.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sheet.service-BiRZjCdN.cjs","sources":["../src/sheet/sheet.service.ts"],"sourcesContent":["import {\n\tdelay,\n\tfromEvent,\n\tmap,\n\tof,\n\tSubject,\n\tswitchMap,\n\ttake,\n\ttap,\n} from 'rxjs'\nimport { $sounds } from '../audio'\nimport { ComponentType } from '../area/router.types'\nimport { discoverComponent } from '@mixins/discovery.service'\nimport SchmancySheet from './sheet'\n\nexport enum SchmancySheetPosition {\n\tSide = 'side',\n\tBottom = 'bottom',\n}\n\nexport type SheetConfig = {\n\tcomponent: ComponentType\n\tuid?: string\n\tposition?: SchmancySheetPosition\n\tpersist?: boolean\n\tclose?: () => void\n\tlock?: boolean // Controls both ESC and overlay click dismissal\n\tonBeforeOpen?: (component: HTMLElement) => void\n\tonAfterOpen?: (component: HTMLElement) => void\n\tprops?: Record<string, unknown> // Properties to pass to the component\n}\n\n// Keep old name for backward compatibility\ntype BottomSheeetTarget = SheetConfig\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// Track currently open sheets\n\tprivate activeSheets = new Set<string>()\n\t// To track if we've set up the popstate listener\n\tprivate popStateListenerActive = false\n\n\tconstructor() {\n\t\tthis.setupSheetOpeningLogic()\n\t\tthis.setupPopStateListener()\n\t}\n\n\t/**\n\t * Sets up the main sheet opening logic\n\t */\n\tprivate setupSheetOpeningLogic() {\n\t\tthis.bottomSheet\n\t\t\t.pipe(\n\t\t\t\tswitchMap(target => {\n\t\t\t\t\tconst uid = target.uid ?? `sheet-${Date.now()}`\n\n\t\t\t\t\t// Discover existing sheet with this uid\n\t\t\t\t\treturn discoverComponent<SchmancySheet>('schmancy-sheet').pipe(\n\t\t\t\t\t\tmap(existingSheet => {\n\t\t\t\t\t\t\t// Check if discovered sheet matches our uid\n\t\t\t\t\t\t\tconst sheet = existingSheet?.getAttribute('uid') === uid ? existingSheet : null\n\t\t\t\t\t\t\treturn { target, existingSheet: sheet, uid }\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t}),\n\t\t\t\tswitchMap(({ target, existingSheet, uid }) => {\n\t\t\t\t\t// Discover theme container if creating new sheet\n\t\t\t\t\tif (existingSheet) {\n\t\t\t\t\t\treturn of({ target, sheet: existingSheet, uid })\n\t\t\t\t\t}\n\n\t\t\t\t\treturn discoverComponent<HTMLElement>('schmancy-theme').pipe(\n\t\t\t\t\t\tmap(theme => {\n\t\t\t\t\t\t\t// Determine container - use theme or fallback to body\n\t\t\t\t\t\t\tconst targetContainer = theme || document.body\n\n\t\t\t\t\t\t\t// Create new sheet\n\t\t\t\t\t\t\tconst sheet = document.createElement('schmancy-sheet')\n\t\t\t\t\t\t\tsheet.setAttribute('uid', uid)\n\t\t\t\t\t\t\ttargetContainer.appendChild(sheet)\n\n\t\t\t\t\t\t\treturn { target, sheet: sheet as SchmancySheet, uid }\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t}),\n\t\t\t\ttap(({ target, sheet }) => {\n\t\t\t\t\t// Configure sheet attributes\n\t\t\t\t\tif (target.lock) sheet.setAttribute('lock', 'true')\n\n\t\t\t\t\tconst position = target.position || getPosition()\n\t\t\t\t\tsheet.setAttribute('position', position)\n\n\t\t\t\t\tif (target.persist) sheet.setAttribute('persist', String(target.persist))\n\n\t\t\t\t\tdocument.body.style.overflow = 'hidden' // lock the scroll of the host\n\t\t\t\t}),\n\t\t\t\tdelay(20),\n\t\t\t\ttap(({ target, uid }) => {\n\t\t\t\t\t// Dispatch render event - area router handles duplicate prevention\n\t\t\t\t\twindow.dispatchEvent(\n\t\t\t\t\t\tnew CustomEvent('schmancy-sheet-render', {\n\t\t\t\t\t\t\tdetail: {\n\t\t\t\t\t\t\t\tcomponent: target.component,\n\t\t\t\t\t\t\t\tuid,\n\t\t\t\t\t\t\t\tprops: target.props\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t\t}),\n\t\t\t\t\t)\n\t\t\t\t}),\n\t\t\t\tdelay(1),\n\t\t\t\ttap(({ sheet, uid }) => {\n\t\t\t\t\tsheet.setAttribute('open', 'true')\n\t\t\t\t\t$sounds.play('curious')\n\n\t\t\t\t\t// Add to active sheets tracking\n\t\t\t\t\tthis.activeSheets.add(uid)\n\n\t\t\t\t\t// Set up close event listener\n\t\t\t\t\tfromEvent<CustomEvent>(sheet, 'close')\n\t\t\t\t\t\t.pipe(take(1), delay(300))\n\t\t\t\t\t\t.subscribe(() => {\n\t\t\t\t\t\t\t// Remove from active sheets tracking\n\t\t\t\t\t\t\tthis.activeSheets.delete(uid)\n\n\t\t\t\t\t\t\t// Only keep sheet if persist is explicitly set to a truthy value\n\t\t\t\t\t\t\tconst persistAttr = sheet.getAttribute('persist')\n\t\t\t\t\t\t\tconst shouldRemove = !persistAttr || persistAttr === 'false'\n\n\t\t\t\t\t\t\tif (shouldRemove) {\n\t\t\t\t\t\t\t\tsheet.remove()\n\t\t\t\t\t\t\t}\n\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\t}\n\n\t/**\n\t * Sets up the popstate listener to handle browser back button\n\t */\n\tprivate setupPopStateListener() {\n\t\tif (this.popStateListenerActive) return\n\n\t\tfromEvent<PopStateEvent>(window, 'popstate').subscribe(event => {\n\t\t\t// If we have active sheets, close the most recently opened one\n\t\t\tif (this.activeSheets.size > 0) {\n\t\t\t\t// Get the last sheet (Set maintains insertion order)\n\t\t\t\tconst lastSheet = Array.from(this.activeSheets).pop()\n\t\t\t\tif (lastSheet) {\n\t\t\t\t\tthis.dismiss(lastSheet)\n\n\t\t\t\t\t// Prevent default navigation behavior by pushing a new state\n\t\t\t\t\t// This effectively cancels out the back navigation\n\t\t\t\t\tif (event.state && event.state.schmancySheet) {\n\t\t\t\t\t\thistory.pushState({}, '', window.location.href)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\t\tthis.popStateListenerActive = true\n\t}\n\n\t/**\n\t * Dismiss a sheet by uid, or dismiss the most recently opened sheet if no uid provided\n\t */\n\tdismiss(uid?: string) {\n\t\tif (!uid && this.activeSheets.size > 0) {\n\t\t\t// Get the last sheet opened (Set maintains insertion order)\n\t\t\tconst sheetsArray = Array.from(this.activeSheets)\n\t\t\tuid = sheetsArray[sheetsArray.length - 1]\n\t\t}\n\n\t\tif (uid) {\n\t\t\t$sounds.play('atEase')\n\t\t\twindow.dispatchEvent(\n\t\t\t\tnew CustomEvent('schmancy-sheet-dismiss', {\n\t\t\t\t\tdetail: { uid },\n\t\t\t\t\tbubbles: true,\n\t\t\t\t\tcomposed: true,\n\t\t\t\t})\n\t\t\t)\n\t\t\tthis.activeSheets.delete(uid)\n\t\t}\n\t}\n\n\t/**\n\t * Open a sheet with the given target configuration\n\t * @deprecated Use `push` instead for consistency with area router API\n\t */\n\topen(target: BottomSheeetTarget) {\n\t\tthis.bottomSheet.next(target)\n\t}\n\n\t/**\n\t * Push a component to the sheet (recommended method)\n\t * Follows the same API pattern as area.push for consistency\n\t */\n\tpush(target: BottomSheeetTarget) {\n\t\tthis.bottomSheet.next(target)\n\t}\n\n\t/**\n\t * Check if a sheet is currently open by uid\n\t */\n\tisOpen(uid: string): boolean {\n\t\treturn this.activeSheets.has(uid)\n\t}\n\n\t/**\n\t * Close all open sheets\n\t */\n\tcloseAll() {\n\t\t// Copy the set to avoid modification during iteration\n\t\tArray.from(this.activeSheets).forEach(uid => {\n\t\t\tthis.dismiss(uid)\n\t\t})\n\t}\n\n}\nexport const sheet = new BottomSheetService()\n"],"names":["SchmancySheetPosition","sheet","constructor","this","bottomSheet","Subject","activeSheets","Set","popStateListenerActive","setupSheetOpeningLogic","setupPopStateListener","pipe","switchMap","target","uid","Date","now","discoverComponent","map","existingSheet","getAttribute","of","theme","targetContainer","document","body","createElement","setAttribute","appendChild","tap","lock","position","window","innerWidth","persist","String","style","overflow","delay","dispatchEvent","CustomEvent","detail","component","props","bubbles","composed","$sounds","play","add","fromEvent","take","subscribe","delete","persistAttr","remove","event","size","lastSheet","Array","from","pop","dismiss","state","schmancySheet","history","pushState","location","href","sheetsArray","length","next","has","closeAll","forEach"],"mappings":"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"}
|
|
@@ -3,8 +3,8 @@ import { throttleTime as x } from "rxjs/operators";
|
|
|
3
3
|
import "lit/directives/class-map.js";
|
|
4
4
|
import "lit/directives/style-map.js";
|
|
5
5
|
import { property as d, customElement as f, state as S, query as y } from "lit/decorators.js";
|
|
6
|
-
import "./tailwind.mixin-
|
|
7
|
-
import { $ as m } from "./litElement.mixin-
|
|
6
|
+
import "./tailwind.mixin-Ddt05Frc.js";
|
|
7
|
+
import { $ as m } from "./litElement.mixin-Wcu4yIIs.js";
|
|
8
8
|
import { css as v, html as c } from "lit";
|
|
9
9
|
import { cache as w } from "lit/directives/cache.js";
|
|
10
10
|
var $ = Object.defineProperty, I = Object.getOwnPropertyDescriptor, a = (e, s, l, o) => {
|
|
@@ -158,4 +158,4 @@ export {
|
|
|
158
158
|
i as S,
|
|
159
159
|
h as a
|
|
160
160
|
};
|
|
161
|
-
//# sourceMappingURL=slider-
|
|
161
|
+
//# sourceMappingURL=slider-8E3Wad0t.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slider-CeVgx4pL.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","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","onPrevClick","goToSlide","onNextClick","map","_","isSelected","state","query"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"slider-8E3Wad0t.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","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","onPrevClick","goToSlide","onNextClick","map","_","isSelected","state","query"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";const u=require("rxjs"),m=require("rxjs/operators");require("lit/directives/class-map.js"),require("lit/directives/style-map.js");const o=require("lit/decorators.js");require("./tailwind.mixin-
|
|
1
|
+
"use strict";const u=require("rxjs"),m=require("rxjs/operators");require("lit/directives/class-map.js"),require("lit/directives/style-map.js");const o=require("lit/decorators.js");require("./tailwind.mixin-UijsBrYW.cjs");const p=require("./litElement.mixin-BVBdv0GP.cjs"),d=require("lit"),S=require("lit/directives/cache.js");var f=Object.defineProperty,v=Object.getOwnPropertyDescriptor,c=(t,s,i,l)=>{for(var r,e=l>1?void 0:l?v(s,i):s,n=t.length-1;n>=0;n--)(r=t[n])&&(e=(l?r(s,i,e):r(e))||e);return l&&e&&f(s,i,e),e};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-VYnbIRH2.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slider-BgJccHrg.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","constructor","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","onPrevClick","goToSlide","onNextClick","map","_","isSelected","state","query"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"slider-VYnbIRH2.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","constructor","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","onPrevClick","goToSlide","onNextClick","map","_","isSelected","state","query"],"mappings":"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"}
|
package/dist/slider.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./slider-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./slider-VYnbIRH2.cjs");Object.defineProperty(exports,"SchmancySlide",{enumerable:!0,get:()=>e.SchmancySlide}),Object.defineProperty(exports,"SchmancySlider",{enumerable:!0,get:()=>e.SchmancySlider});
|
|
2
2
|
//# sourceMappingURL=slider.cjs.map
|
package/dist/slider.js
CHANGED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { map as l, shareReplay as d, distinctUntilChanged as q, BehaviorSubject as p } from "rxjs";
|
|
2
|
+
import { c as v } from "./context-create-B_S-sD5B.js";
|
|
3
|
+
import "lit/decorators.js";
|
|
4
|
+
import "rxjs/operators";
|
|
5
|
+
const i = v({ theme: null, volume: 0.15, muted: !1 }, "local", "schmancy-sound-settings"), T = { joyful: { puffs: [{ startTime: 0, duration: 0.08, frequency: 3e3, volume: 0.3 }, { startTime: 0.06, duration: 0.1, frequency: 3500, volume: 0.35 }], tones: [{ startTime: 0.02, duration: 0.15, frequency: 784, volume: 0.25, type: "sine" }, { startTime: 0.1, duration: 0.2, frequency: 988, volume: 0.3, type: "sine" }, { startTime: 0.18, duration: 0.25, frequency: 1175, volume: 0.25, type: "sine" }] }, content: { puffs: [{ startTime: 0, duration: 0.2, frequency: 1500, volume: 0.25 }], tones: [{ startTime: 0.05, duration: 0.3, frequency: 523, volume: 0.2, type: "sine", filterFrequency: 800 }, { startTime: 0.15, duration: 0.35, frequency: 659, volume: 0.15, type: "sine", filterFrequency: 800 }] }, excited: { puffs: [{ startTime: 0, duration: 0.06, frequency: 2500, volume: 0.25 }, { startTime: 0.05, duration: 0.06, frequency: 3e3, volume: 0.3 }, { startTime: 0.1, duration: 0.08, frequency: 3500, volume: 0.35 }], tones: [{ startTime: 0.02, duration: 0.12, frequency: 880, volume: 0.2, type: "sine" }, { startTime: 0.08, duration: 0.12, frequency: 1047, volume: 0.25, type: "sine" }, { startTime: 0.14, duration: 0.15, frequency: 1319, volume: 0.3, type: "sine" }] }, proud: { puffs: [{ startTime: 0, duration: 0.15, frequency: 1800, volume: 0.3 }], tones: [{ startTime: 0.05, duration: 0.25, frequency: 523, volume: 0.25, type: "sine" }, { startTime: 0.08, duration: 0.25, frequency: 659, volume: 0.2, type: "sine" }, { startTime: 0.11, duration: 0.3, frequency: 784, volume: 0.25, type: "sine" }] }, hopeful: { puffs: [{ startTime: 0, duration: 0.12, frequency: 2200, volume: 0.2 }], tones: [{ startTime: 0.03, duration: 0.3, frequency: 659, volume: 0.2, type: "sine", frequencyEnd: 880 }] }, relieved: { puffs: [{ startTime: 0, duration: 0.25, frequency: 1200, volume: 0.35 }], tones: [{ startTime: 0.1, duration: 0.35, frequency: 659, volume: 0.2, type: "sine", filterFrequency: 800 }, { startTime: 0.25, duration: 0.4, frequency: 523, volume: 0.15, type: "sine", filterFrequency: 800 }] }, grateful: { puffs: [{ startTime: 0, duration: 0.15, frequency: 1500, volume: 0.25 }], tones: [{ startTime: 0.05, duration: 0.3, frequency: 440, volume: 0.2, type: "sine", filterFrequency: 800 }, { startTime: 0.15, duration: 0.35, frequency: 523, volume: 0.2, type: "sine", filterFrequency: 800 }, { startTime: 0.25, duration: 0.4, frequency: 659, volume: 0.15, type: "sine", filterFrequency: 800 }] }, peaceful: { puffs: [{ startTime: 0, duration: 0.3, frequency: 800, volume: 0.15 }], tones: [{ startTime: 0.1, duration: 0.5, frequency: 392, volume: 0.12, type: "sine", filterFrequency: 500 }] }, playful: { puffs: [{ startTime: 0, duration: 0.05, frequency: 2800, volume: 0.2 }, { startTime: 0.08, duration: 0.05, frequency: 3200, volume: 0.25 }, { startTime: 0.14, duration: 0.06, frequency: 2800, volume: 0.2 }], tones: [{ startTime: 0.03, duration: 0.1, frequency: 784, volume: 0.2, type: "sine" }, { startTime: 0.1, duration: 0.08, frequency: 988, volume: 0.25, type: "sine" }, { startTime: 0.16, duration: 0.12, frequency: 784, volume: 0.2, type: "sine" }] }, amused: { puffs: [{ startTime: 0, duration: 0.04, frequency: 2500, volume: 0.2 }, { startTime: 0.06, duration: 0.04, frequency: 2800, volume: 0.22 }, { startTime: 0.11, duration: 0.05, frequency: 2600, volume: 0.18 }], tones: [{ startTime: 0.05, duration: 0.15, frequency: 880, volume: 0.15, type: "sine" }] }, curious: { puffs: [{ startTime: 0, duration: 0.1, frequency: 2e3, volume: 0.2 }], tones: [{ startTime: 0.03, duration: 0.2, frequency: 659, volume: 0.2, type: "sine", frequencyEnd: 880 }] }, inspired: { puffs: [{ startTime: 0, duration: 0.1, frequency: 2500, volume: 0.25 }], tones: [{ startTime: 0.05, duration: 0.3, frequency: 523, volume: 0.2, type: "sine" }, { startTime: 0.07, duration: 0.28, frequency: 784.5, volume: 0.16, type: "sine" }, { startTime: 0.09, duration: 0.26, frequency: 1046, volume: 0.12, type: "sine" }] }, confident: { puffs: [{ startTime: 0, duration: 0.12, frequency: 1500, volume: 0.3 }], tones: [{ startTime: 0.04, duration: 0.2, frequency: 523, volume: 0.25, type: "sine" }, { startTime: 0.06, duration: 0.22, frequency: 659, volume: 0.2, type: "sine" }] }, loved: { puffs: [{ startTime: 0, duration: 0.2, frequency: 1e3, volume: 0.2 }], tones: [{ startTime: 0.08, duration: 0.4, frequency: 392, volume: 0.18, type: "sine", filterFrequency: 600 }, { startTime: 0.2, duration: 0.45, frequency: 494, volume: 0.15, type: "sine", filterFrequency: 600 }] }, comforted: { puffs: [{ startTime: 0, duration: 0.25, frequency: 900, volume: 0.18 }], tones: [{ startTime: 0.1, duration: 0.35, frequency: 523, volume: 0.15, type: "sine", filterFrequency: 800 }, { startTime: 0.25, duration: 0.4, frequency: 440, volume: 0.12, type: "sine", filterFrequency: 800 }] }, energized: { puffs: [{ startTime: 0, duration: 0.05, frequency: 3e3, volume: 0.25 }, { startTime: 0.04, duration: 0.05, frequency: 3500, volume: 0.28 }], tones: [{ startTime: 0.02, duration: 0.1, frequency: 784, volume: 0.2, type: "sine" }, { startTime: 0.08, duration: 0.12, frequency: 988, volume: 0.25, type: "sine" }, { startTime: 0.14, duration: 0.15, frequency: 1175, volume: 0.22, type: "sine" }] }, celebrated: { puffs: [{ startTime: 0, duration: 0.08, frequency: 2500, volume: 0.2 }], tones: [{ startTime: 0.02, duration: 0.18, frequency: 523, volume: 0.22, type: "sine" }, { startTime: 0.08, duration: 0.18, frequency: 659, volume: 0.24, type: "sine" }, { startTime: 0.14, duration: 0.2, frequency: 784, volume: 0.26, type: "sine" }, { startTime: 0.22, duration: 0.3, frequency: 1047, volume: 0.22, type: "sine" }] }, sad: { puffs: [{ startTime: 0, duration: 0.3, frequency: 600, volume: 0.25 }], tones: [{ startTime: 0.1, duration: 0.4, frequency: 392, volume: 0.2, type: "sine", filterFrequency: 400 }, { startTime: 0.3, duration: 0.45, frequency: 294, volume: 0.15, type: "sine", filterFrequency: 350 }] }, lonely: { puffs: [{ startTime: 0, duration: 0.2, frequency: 700, volume: 0.2 }], tones: [{ startTime: 0.15, duration: 0.5, frequency: 330, volume: 0.12, type: "sine", filterFrequency: 450 }] }, disappointed: { puffs: [{ startTime: 0, duration: 0.25, frequency: 800, volume: 0.25 }], tones: [{ startTime: 0.08, duration: 0.3, frequency: 523, volume: 0.18, type: "sine", frequencyEnd: 349 }] }, heartbroken: { puffs: [{ startTime: 0, duration: 0.3, frequency: 600, volume: 0.25 }], tones: [{ startTime: 0.1, duration: 0.4, frequency: 392, volume: 0.2, type: "sine", filterFrequency: 400 }, { startTime: 0.3, duration: 0.45, frequency: 294, volume: 0.15, type: "sine", filterFrequency: 350 }] }, grieving: { puffs: [{ startTime: 0, duration: 0.3, frequency: 600, volume: 0.25 }], tones: [{ startTime: 0.1, duration: 0.4, frequency: 392, volume: 0.2, type: "sine", filterFrequency: 400 }, { startTime: 0.3, duration: 0.45, frequency: 294, volume: 0.15, type: "sine", filterFrequency: 350 }] }, hopeless: { puffs: [{ startTime: 0, duration: 0.2, frequency: 700, volume: 0.2 }], tones: [{ startTime: 0.15, duration: 0.5, frequency: 330, volume: 0.12, type: "sine", filterFrequency: 450 }] }, empty: { puffs: [{ startTime: 0, duration: 0.2, frequency: 700, volume: 0.2 }], tones: [{ startTime: 0.15, duration: 0.5, frequency: 330, volume: 0.12, type: "sine", filterFrequency: 450 }] }, discouraged: { puffs: [{ startTime: 0, duration: 0.25, frequency: 800, volume: 0.25 }], tones: [{ startTime: 0.08, duration: 0.3, frequency: 523, volume: 0.18, type: "sine", frequencyEnd: 349 }] }, melancholic: { puffs: [{ startTime: 0, duration: 0.3, frequency: 700, volume: 0.18 }], tones: [{ startTime: 0.1, duration: 0.45, frequency: 440, volume: 0.15, type: "sine", filterFrequency: 500 }, { startTime: 0.3, duration: 0.5, frequency: 392, volume: 0.12, type: "sine", filterFrequency: 450 }] }, homesick: { puffs: [{ startTime: 0, duration: 0.25, frequency: 800, volume: 0.15 }], tones: [{ startTime: 0.1, duration: 0.4, frequency: 440, volume: 0.12, type: "sine", filterFrequency: 500 }, { startTime: 0.3, duration: 0.45, frequency: 392, volume: 0.1, type: "sine", filterFrequency: 450 }] }, hurt: { puffs: [{ startTime: 0, duration: 0.3, frequency: 600, volume: 0.25 }], tones: [{ startTime: 0.1, duration: 0.4, frequency: 392, volume: 0.2, type: "sine", filterFrequency: 400 }, { startTime: 0.3, duration: 0.45, frequency: 294, volume: 0.15, type: "sine", filterFrequency: 350 }] }, miserable: { puffs: [{ startTime: 0, duration: 0.3, frequency: 600, volume: 0.25 }], tones: [{ startTime: 0.1, duration: 0.4, frequency: 392, volume: 0.2, type: "sine", filterFrequency: 400 }, { startTime: 0.3, duration: 0.45, frequency: 294, volume: 0.15, type: "sine", filterFrequency: 350 }] }, regretful: { puffs: [{ startTime: 0, duration: 0.3, frequency: 700, volume: 0.18 }], tones: [{ startTime: 0.1, duration: 0.45, frequency: 440, volume: 0.15, type: "sine", filterFrequency: 500 }, { startTime: 0.3, duration: 0.5, frequency: 392, volume: 0.12, type: "sine", filterFrequency: 450 }] }, ashamed: { puffs: [{ startTime: 0, duration: 0.25, frequency: 800, volume: 0.25 }], tones: [{ startTime: 0.08, duration: 0.3, frequency: 523, volume: 0.18, type: "sine", frequencyEnd: 349 }] }, inferior: { puffs: [{ startTime: 0, duration: 0.25, frequency: 800, volume: 0.25 }], tones: [{ startTime: 0.08, duration: 0.3, frequency: 523, volume: 0.18, type: "sine", frequencyEnd: 349 }] }, anxious: { puffs: [{ startTime: 0, duration: 0.08, frequency: 1800, volume: 0.2 }, { startTime: 0.12, duration: 0.08, frequency: 1900, volume: 0.22 }], tones: [{ startTime: 0.03, duration: 0.25, frequency: 440, volume: 0.15, type: "sine" }], description: "Tight, quick puffs with uncertain wobble" }, worried: { puffs: [{ startTime: 0, duration: 0.15, frequency: 1200, volume: 0.2 }], tones: [{ startTime: 0.05, duration: 0.25, frequency: 349, volume: 0.15, type: "sine", frequencyEnd: 392 }] }, afraid: { puffs: [{ startTime: 0, duration: 0.08, frequency: 1800, volume: 0.2 }, { startTime: 0.12, duration: 0.08, frequency: 1900, volume: 0.22 }], tones: [{ startTime: 0.03, duration: 0.25, frequency: 440, volume: 0.15, type: "sine" }] }, terrified: { puffs: [{ startTime: 0, duration: 0.04, frequency: 3500, volume: 0.3 }], tones: [{ startTime: 0, duration: 0.08, frequency: 1047, volume: 0.25, type: "sine" }, { startTime: 0.05, duration: 0.15, frequency: 880, volume: 0.15, type: "sine" }] }, panicked: { puffs: [{ startTime: 0, duration: 0.04, frequency: 3500, volume: 0.3 }], tones: [{ startTime: 0, duration: 0.08, frequency: 1047, volume: 0.25, type: "sine" }, { startTime: 0.05, duration: 0.15, frequency: 880, volume: 0.15, type: "sine" }] }, nervous: { puffs: [{ startTime: 0, duration: 0.05, frequency: 2e3, volume: 0.18 }, { startTime: 0.08, duration: 0.05, frequency: 2100, volume: 0.18 }, { startTime: 0.15, duration: 0.06, frequency: 2e3, volume: 0.16 }], tones: [{ startTime: 0.04, duration: 0.2, frequency: 494, volume: 0.12, type: "sine" }] }, uneasy: { puffs: [{ startTime: 0, duration: 0.15, frequency: 1200, volume: 0.2 }], tones: [{ startTime: 0.05, duration: 0.25, frequency: 349, volume: 0.15, type: "sine", frequencyEnd: 392 }] }, insecure: { puffs: [{ startTime: 0, duration: 0.05, frequency: 2e3, volume: 0.18 }, { startTime: 0.08, duration: 0.05, frequency: 2100, volume: 0.18 }, { startTime: 0.15, duration: 0.06, frequency: 2e3, volume: 0.16 }], tones: [{ startTime: 0.04, duration: 0.2, frequency: 494, volume: 0.12, type: "sine" }] }, overwhelmed: { puffs: [{ startTime: 0, duration: 0.08, frequency: 1800, volume: 0.2 }, { startTime: 0.12, duration: 0.08, frequency: 1900, volume: 0.22 }], tones: [{ startTime: 0.03, duration: 0.25, frequency: 440, volume: 0.15, type: "sine" }] }, stressed: { puffs: [{ startTime: 0, duration: 0.08, frequency: 1800, volume: 0.2 }, { startTime: 0.12, duration: 0.08, frequency: 1900, volume: 0.22 }], tones: [{ startTime: 0.03, duration: 0.25, frequency: 440, volume: 0.15, type: "sine" }] }, tense: { puffs: [{ startTime: 0, duration: 0.08, frequency: 1800, volume: 0.2 }, { startTime: 0.12, duration: 0.08, frequency: 1900, volume: 0.22 }], tones: [{ startTime: 0.03, duration: 0.25, frequency: 440, volume: 0.15, type: "sine" }] }, apprehensive: { puffs: [{ startTime: 0, duration: 0.15, frequency: 1200, volume: 0.2 }], tones: [{ startTime: 0.05, duration: 0.25, frequency: 349, volume: 0.15, type: "sine", frequencyEnd: 392 }] }, startled: { puffs: [{ startTime: 0, duration: 0.04, frequency: 3500, volume: 0.3 }], tones: [{ startTime: 0, duration: 0.08, frequency: 1047, volume: 0.25, type: "sine" }, { startTime: 0.05, duration: 0.15, frequency: 880, volume: 0.15, type: "sine" }] }, suspicious: { puffs: [{ startTime: 0, duration: 0.15, frequency: 1200, volume: 0.2 }], tones: [{ startTime: 0.05, duration: 0.25, frequency: 349, volume: 0.15, type: "sine", frequencyEnd: 392 }] }, vulnerable: { puffs: [{ startTime: 0, duration: 0.05, frequency: 2e3, volume: 0.18 }, { startTime: 0.08, duration: 0.05, frequency: 2100, volume: 0.18 }, { startTime: 0.15, duration: 0.06, frequency: 2e3, volume: 0.16 }], tones: [{ startTime: 0.04, duration: 0.2, frequency: 494, volume: 0.12, type: "sine" }] }, annoyed: { puffs: [{ startTime: 0, duration: 0.1, frequency: 1e3, volume: 0.25 }], tones: [{ startTime: 0.03, duration: 0.2, frequency: 294, volume: 0.18, type: "sine", filterFrequency: 400 }] }, irritated: { puffs: [{ startTime: 0, duration: 0.1, frequency: 1e3, volume: 0.25 }], tones: [{ startTime: 0.03, duration: 0.2, frequency: 294, volume: 0.18, type: "sine", filterFrequency: 400 }] }, frustrated: { puffs: [{ startTime: 0, duration: 0.12, frequency: 900, volume: 0.28 }], tones: [{ startTime: 0.04, duration: 0.15, frequency: 349, volume: 0.2, type: "sine" }, { startTime: 0.12, duration: 0.12, frequency: 330, volume: 0.18, type: "sine" }] }, angry: { puffs: [{ startTime: 0, duration: 0.12, frequency: 900, volume: 0.28 }], tones: [{ startTime: 0.04, duration: 0.15, frequency: 349, volume: 0.2, type: "sine" }, { startTime: 0.12, duration: 0.12, frequency: 330, volume: 0.18, type: "sine" }] }, enraged: { puffs: [{ startTime: 0, duration: 0.12, frequency: 900, volume: 0.28 }], tones: [{ startTime: 0.04, duration: 0.15, frequency: 349, volume: 0.2, type: "sine" }, { startTime: 0.12, duration: 0.12, frequency: 330, volume: 0.18, type: "sine" }] }, bitter: { puffs: [{ startTime: 0, duration: 0.12, frequency: 900, volume: 0.28 }], tones: [{ startTime: 0.04, duration: 0.15, frequency: 349, volume: 0.2, type: "sine" }, { startTime: 0.12, duration: 0.12, frequency: 330, volume: 0.18, type: "sine" }] }, resentful: { puffs: [{ startTime: 0, duration: 0.1, frequency: 1e3, volume: 0.25 }], tones: [{ startTime: 0.03, duration: 0.2, frequency: 294, volume: 0.18, type: "sine", filterFrequency: 400 }] }, jealous: { puffs: [{ startTime: 0, duration: 0.1, frequency: 1e3, volume: 0.25 }], tones: [{ startTime: 0.03, duration: 0.2, frequency: 294, volume: 0.18, type: "sine", filterFrequency: 400 }] }, envious: { puffs: [{ startTime: 0, duration: 0.1, frequency: 1e3, volume: 0.25 }], tones: [{ startTime: 0.03, duration: 0.2, frequency: 294, volume: 0.18, type: "sine", filterFrequency: 400 }] }, indignant: { puffs: [{ startTime: 0, duration: 0.12, frequency: 900, volume: 0.28 }], tones: [{ startTime: 0.04, duration: 0.15, frequency: 349, volume: 0.2, type: "sine" }, { startTime: 0.12, duration: 0.12, frequency: 330, volume: 0.18, type: "sine" }] }, impatient: { puffs: [{ startTime: 0, duration: 0.04, frequency: 1500, volume: 0.2 }, { startTime: 0.08, duration: 0.04, frequency: 1500, volume: 0.2 }, { startTime: 0.16, duration: 0.04, frequency: 1500, volume: 0.22 }], tones: [{ startTime: 0.06, duration: 0.1, frequency: 523, volume: 0.15, type: "sine" }] }, hostile: { puffs: [{ startTime: 0, duration: 0.12, frequency: 900, volume: 0.28 }], tones: [{ startTime: 0.04, duration: 0.15, frequency: 349, volume: 0.2, type: "sine" }, { startTime: 0.12, duration: 0.12, frequency: 330, volume: 0.18, type: "sine" }] }, contemptuous: { puffs: [{ startTime: 0, duration: 0.1, frequency: 1e3, volume: 0.25 }], tones: [{ startTime: 0.03, duration: 0.2, frequency: 294, volume: 0.18, type: "sine", filterFrequency: 400 }] }, tired: { puffs: [{ startTime: 0, duration: 0.35, frequency: 500, volume: 0.2 }], tones: [{ startTime: 0.1, duration: 0.4, frequency: 330, volume: 0.12, type: "sine", filterFrequency: 350 }] }, exhausted: { puffs: [{ startTime: 0, duration: 0.45, frequency: 400, volume: 0.18 }], tones: [{ startTime: 0.15, duration: 0.5, frequency: 294, volume: 0.1, type: "sine", filterFrequency: 300 }] }, drained: { puffs: [{ startTime: 0, duration: 0.45, frequency: 400, volume: 0.18 }], tones: [{ startTime: 0.15, duration: 0.5, frequency: 294, volume: 0.1, type: "sine", filterFrequency: 300 }] }, burnedOut: { puffs: [{ startTime: 0, duration: 0.45, frequency: 400, volume: 0.18 }], tones: [{ startTime: 0.15, duration: 0.5, frequency: 294, volume: 0.1, type: "sine", filterFrequency: 300 }] }, numb: { puffs: [{ startTime: 0, duration: 0.45, frequency: 400, volume: 0.18 }], tones: [{ startTime: 0.15, duration: 0.5, frequency: 294, volume: 0.1, type: "sine", filterFrequency: 300 }] }, bored: { puffs: [{ startTime: 0, duration: 0.25, frequency: 600, volume: 0.15 }], tones: [{ startTime: 0.1, duration: 0.3, frequency: 349, volume: 0.1, type: "sine", filterFrequency: 400 }] }, unmotivated: { puffs: [{ startTime: 0, duration: 0.25, frequency: 600, volume: 0.15 }], tones: [{ startTime: 0.1, duration: 0.3, frequency: 349, volume: 0.1, type: "sine", filterFrequency: 400 }] }, apathetic: { puffs: [{ startTime: 0, duration: 0.25, frequency: 600, volume: 0.15 }], tones: [{ startTime: 0.1, duration: 0.3, frequency: 349, volume: 0.1, type: "sine", filterFrequency: 400 }] }, restless: { puffs: [{ startTime: 0, duration: 0.35, frequency: 500, volume: 0.2 }], tones: [{ startTime: 0.1, duration: 0.4, frequency: 330, volume: 0.12, type: "sine", filterFrequency: 350 }] }, calm: { puffs: [{ startTime: 0, duration: 0.3, frequency: 600, volume: 0.12 }], tones: [{ startTime: 0.1, duration: 0.5, frequency: 392, volume: 0.1, type: "sine", filterFrequency: 500 }] }, relaxed: { puffs: [{ startTime: 0, duration: 0.35, frequency: 700, volume: 0.15 }], tones: [{ startTime: 0.15, duration: 0.45, frequency: 440, volume: 0.1, type: "sine", filterFrequency: 800 }, { startTime: 0.35, duration: 0.5, frequency: 392, volume: 0.08, type: "sine", filterFrequency: 800 }] }, atEase: { puffs: [{ startTime: 0, duration: 0.35, frequency: 700, volume: 0.15 }], tones: [{ startTime: 0.15, duration: 0.45, frequency: 440, volume: 0.1, type: "sine", filterFrequency: 800 }, { startTime: 0.35, duration: 0.5, frequency: 392, volume: 0.08, type: "sine", filterFrequency: 800 }] }, balanced: { puffs: [{ startTime: 0, duration: 0.3, frequency: 600, volume: 0.12 }], tones: [{ startTime: 0.1, duration: 0.5, frequency: 392, volume: 0.1, type: "sine", filterFrequency: 500 }] }, stable: { puffs: [{ startTime: 0, duration: 0.25, frequency: 500, volume: 0.2 }], tones: [{ startTime: 0.1, duration: 0.4, frequency: 262, volume: 0.15, type: "sine", filterFrequency: 350 }] }, secure: { puffs: [{ startTime: 0, duration: 0.3, frequency: 700, volume: 0.15 }], tones: [{ startTime: 0.1, duration: 0.4, frequency: 349, volume: 0.12, type: "sine", filterFrequency: 800 }, { startTime: 0.25, duration: 0.45, frequency: 440, volume: 0.1, type: "sine", filterFrequency: 800 }] }, safe: { puffs: [{ startTime: 0, duration: 0.3, frequency: 700, volume: 0.15 }], tones: [{ startTime: 0.1, duration: 0.4, frequency: 349, volume: 0.12, type: "sine", filterFrequency: 800 }, { startTime: 0.25, duration: 0.45, frequency: 440, volume: 0.1, type: "sine", filterFrequency: 800 }] }, centered: { puffs: [{ startTime: 0, duration: 0.25, frequency: 500, volume: 0.2 }], tones: [{ startTime: 0.1, duration: 0.4, frequency: 262, volume: 0.15, type: "sine", filterFrequency: 350 }] }, grounded: { puffs: [{ startTime: 0, duration: 0.25, frequency: 500, volume: 0.2 }], tones: [{ startTime: 0.1, duration: 0.4, frequency: 262, volume: 0.15, type: "sine", filterFrequency: 350 }] }, accepting: { puffs: [{ startTime: 0, duration: 0.3, frequency: 600, volume: 0.12 }], tones: [{ startTime: 0.1, duration: 0.5, frequency: 392, volume: 0.1, type: "sine", filterFrequency: 500 }] }, connected: { puffs: [{ startTime: 0, duration: 0.2, frequency: 1200, volume: 0.18 }], tones: [{ startTime: 0.08, duration: 0.3, frequency: 440, volume: 0.15, type: "sine", filterFrequency: 800 }, { startTime: 0.12, duration: 0.32, frequency: 523, volume: 0.12, type: "sine", filterFrequency: 800 }] }, accepted: { puffs: [{ startTime: 0, duration: 0.15, frequency: 1500, volume: 0.2 }], tones: [{ startTime: 0.05, duration: 0.25, frequency: 440, volume: 0.15, type: "sine", filterFrequency: 800 }, { startTime: 0.15, duration: 0.3, frequency: 523, volume: 0.18, type: "sine", filterFrequency: 800 }] }, included: { puffs: [{ startTime: 0, duration: 0.2, frequency: 1200, volume: 0.18 }], tones: [{ startTime: 0.08, duration: 0.3, frequency: 440, volume: 0.15, type: "sine", filterFrequency: 800 }, { startTime: 0.12, duration: 0.32, frequency: 523, volume: 0.12, type: "sine", filterFrequency: 800 }] }, belonging: { puffs: [{ startTime: 0, duration: 0.2, frequency: 1200, volume: 0.18 }], tones: [{ startTime: 0.08, duration: 0.3, frequency: 440, volume: 0.15, type: "sine", filterFrequency: 800 }, { startTime: 0.12, duration: 0.32, frequency: 523, volume: 0.12, type: "sine", filterFrequency: 800 }] }, appreciated: { puffs: [{ startTime: 0, duration: 0.15, frequency: 1500, volume: 0.2 }], tones: [{ startTime: 0.05, duration: 0.25, frequency: 440, volume: 0.15, type: "sine", filterFrequency: 800 }, { startTime: 0.15, duration: 0.3, frequency: 523, volume: 0.18, type: "sine", filterFrequency: 800 }] }, valued: { puffs: [{ startTime: 0, duration: 0.15, frequency: 1500, volume: 0.2 }], tones: [{ startTime: 0.05, duration: 0.25, frequency: 440, volume: 0.15, type: "sine", filterFrequency: 800 }, { startTime: 0.15, duration: 0.3, frequency: 523, volume: 0.18, type: "sine", filterFrequency: 800 }] }, respected: { puffs: [{ startTime: 0, duration: 0.15, frequency: 1500, volume: 0.2 }], tones: [{ startTime: 0.05, duration: 0.25, frequency: 440, volume: 0.15, type: "sine", filterFrequency: 800 }, { startTime: 0.15, duration: 0.3, frequency: 523, volume: 0.18, type: "sine", filterFrequency: 800 }] }, supported: { puffs: [{ startTime: 0, duration: 0.25, frequency: 900, volume: 0.18 }], tones: [{ startTime: 0.1, duration: 0.35, frequency: 349, volume: 0.12, type: "sine", filterFrequency: 800 }, { startTime: 0.15, duration: 0.4, frequency: 440, volume: 0.1, type: "sine", filterFrequency: 800 }] }, protective: { puffs: [{ startTime: 0, duration: 0.25, frequency: 900, volume: 0.18 }], tones: [{ startTime: 0.1, duration: 0.35, frequency: 349, volume: 0.12, type: "sine", filterFrequency: 800 }, { startTime: 0.15, duration: 0.4, frequency: 440, volume: 0.1, type: "sine", filterFrequency: 800 }] }, compassionate: { puffs: [{ startTime: 0, duration: 0.2, frequency: 1200, volume: 0.18 }], tones: [{ startTime: 0.08, duration: 0.3, frequency: 440, volume: 0.15, type: "sine", filterFrequency: 800 }, { startTime: 0.12, duration: 0.32, frequency: 523, volume: 0.12, type: "sine", filterFrequency: 800 }] }, empathetic: { puffs: [{ startTime: 0, duration: 0.2, frequency: 1200, volume: 0.18 }], tones: [{ startTime: 0.08, duration: 0.3, frequency: 440, volume: 0.15, type: "sine", filterFrequency: 800 }, { startTime: 0.12, duration: 0.32, frequency: 523, volume: 0.12, type: "sine", filterFrequency: 800 }] }, conflicted: { puffs: [{ startTime: 0, duration: 0.12, frequency: 1200, volume: 0.18 }], tones: [{ startTime: 0.04, duration: 0.2, frequency: 440, volume: 0.12, type: "sine", frequencyEnd: 494 }, { startTime: 0.15, duration: 0.15, frequency: 466, volume: 0.1, type: "sine" }] }, confused: { puffs: [{ startTime: 0, duration: 0.12, frequency: 1200, volume: 0.18 }], tones: [{ startTime: 0.04, duration: 0.2, frequency: 440, volume: 0.12, type: "sine", frequencyEnd: 494 }, { startTime: 0.15, duration: 0.15, frequency: 466, volume: 0.1, type: "sine" }] }, ambivalent: { puffs: [{ startTime: 0, duration: 0.12, frequency: 1200, volume: 0.18 }], tones: [{ startTime: 0.04, duration: 0.2, frequency: 440, volume: 0.12, type: "sine", frequencyEnd: 494 }, { startTime: 0.15, duration: 0.15, frequency: 466, volume: 0.1, type: "sine" }] }, nostalgic: { puffs: [{ startTime: 0, duration: 0.25, frequency: 800, volume: 0.15 }], tones: [{ startTime: 0.1, duration: 0.4, frequency: 440, volume: 0.12, type: "sine", filterFrequency: 500 }, { startTime: 0.3, duration: 0.45, frequency: 392, volume: 0.1, type: "sine", filterFrequency: 450 }] }, guilty: { puffs: [{ startTime: 0, duration: 0.25, frequency: 800, volume: 0.25 }], tones: [{ startTime: 0.08, duration: 0.3, frequency: 523, volume: 0.18, type: "sine", frequencyEnd: 349 }] }, embarrassed: { puffs: [{ startTime: 0, duration: 0.05, frequency: 2e3, volume: 0.18 }, { startTime: 0.08, duration: 0.05, frequency: 2100, volume: 0.18 }, { startTime: 0.15, duration: 0.06, frequency: 2e3, volume: 0.16 }], tones: [{ startTime: 0.04, duration: 0.2, frequency: 494, volume: 0.12, type: "sine" }] }, surprised: { puffs: [{ startTime: 0, duration: 0.06, frequency: 2800, volume: 0.25 }], tones: [{ startTime: 0.02, duration: 0.15, frequency: 659, volume: 0.2, type: "sine", frequencyEnd: 988 }] }, shocked: { puffs: [{ startTime: 0, duration: 0.04, frequency: 3500, volume: 0.3 }], tones: [{ startTime: 0, duration: 0.08, frequency: 1047, volume: 0.25, type: "sine" }, { startTime: 0.05, duration: 0.15, frequency: 880, volume: 0.15, type: "sine" }] }, awestruck: { puffs: [{ startTime: 0, duration: 0.2, frequency: 1500, volume: 0.2 }], tones: [{ startTime: 0.08, duration: 0.4, frequency: 440, volume: 0.15, type: "sine" }, { startTime: 0.1, duration: 0.38, frequency: 660, volume: 0.12, type: "sine" }, { startTime: 0.12, duration: 0.36, frequency: 880, volume: 0.09, type: "sine" }] }, skeptical: { puffs: [{ startTime: 0, duration: 0.12, frequency: 1200, volume: 0.18 }], tones: [{ startTime: 0.04, duration: 0.2, frequency: 440, volume: 0.12, type: "sine", frequencyEnd: 494 }, { startTime: 0.15, duration: 0.15, frequency: 466, volume: 0.1, type: "sine" }] } };
|
|
6
|
+
class a {
|
|
7
|
+
constructor() {
|
|
8
|
+
this.audioContext = null, this.theme$ = i.$.pipe(l((e) => e.theme), d(1)), this.volume$ = i.$.pipe(l((e) => e.volume), q(), d(1)), this.muted$ = i.$.pipe(l((e) => e.muted), q(), d(1)), this._themeName$ = new p("default"), this.themeName$ = this._themeName$.asObservable(), this.theme$.subscribe((e) => {
|
|
9
|
+
this._themeName$.next(e?.name ?? "default");
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
get theme() {
|
|
13
|
+
return i.value.theme;
|
|
14
|
+
}
|
|
15
|
+
get volume() {
|
|
16
|
+
return i.value.volume;
|
|
17
|
+
}
|
|
18
|
+
get muted() {
|
|
19
|
+
return i.value.muted;
|
|
20
|
+
}
|
|
21
|
+
get themeName() {
|
|
22
|
+
return this.theme?.name ?? "default";
|
|
23
|
+
}
|
|
24
|
+
getContext() {
|
|
25
|
+
if (!this.audioContext) {
|
|
26
|
+
const e = window.AudioContext || window.webkitAudioContext;
|
|
27
|
+
this.audioContext = new e();
|
|
28
|
+
}
|
|
29
|
+
return this.audioContext.state === "suspended" && this.audioContext.resume(), this.audioContext;
|
|
30
|
+
}
|
|
31
|
+
playPuff(e, t, s) {
|
|
32
|
+
const u = this.getContext(), r = Math.floor(u.sampleRate * t.duration), n = u.createBuffer(1, r, u.sampleRate), m = n.getChannelData(0);
|
|
33
|
+
for (let c = 0; c < r; c++) m[c] = 2 * Math.random() - 1;
|
|
34
|
+
const o = u.createBufferSource();
|
|
35
|
+
o.buffer = n;
|
|
36
|
+
const f = u.createBiquadFilter();
|
|
37
|
+
f.type = "bandpass", f.frequency.value = t.frequency, f.Q.value = 0.7;
|
|
38
|
+
const y = u.createGain();
|
|
39
|
+
y.gain.setValueAtTime(0, e), y.gain.linearRampToValueAtTime(t.volume * s, e + 0.015), y.gain.exponentialRampToValueAtTime(1e-3, e + t.duration), o.connect(f).connect(y).connect(u.destination), o.start(e), o.stop(e + t.duration);
|
|
40
|
+
}
|
|
41
|
+
playTone(e, t, s) {
|
|
42
|
+
const u = this.getContext(), r = u.createOscillator(), n = u.createGain();
|
|
43
|
+
r.type = t.type, r.frequency.setValueAtTime(t.frequency, e), t.frequencyEnd && r.frequency.exponentialRampToValueAtTime(t.frequencyEnd, e + 0.8 * t.duration);
|
|
44
|
+
let m = r;
|
|
45
|
+
if (t.filterFrequency) {
|
|
46
|
+
const o = u.createBiquadFilter();
|
|
47
|
+
o.type = "lowpass", o.frequency.value = t.filterFrequency, r.connect(o), m = o;
|
|
48
|
+
}
|
|
49
|
+
n.gain.setValueAtTime(0, e), n.gain.linearRampToValueAtTime(t.volume * s, e + 0.02), n.gain.exponentialRampToValueAtTime(1e-3, e + t.duration), m.connect(n).connect(u.destination), r.start(e), r.stop(e + t.duration);
|
|
50
|
+
}
|
|
51
|
+
setTheme(e) {
|
|
52
|
+
i.set({ theme: e });
|
|
53
|
+
}
|
|
54
|
+
resetTheme() {
|
|
55
|
+
i.set({ theme: null });
|
|
56
|
+
}
|
|
57
|
+
setVolume(e) {
|
|
58
|
+
i.set({ volume: Math.max(0, Math.min(1, e)) });
|
|
59
|
+
}
|
|
60
|
+
mute() {
|
|
61
|
+
i.set({ muted: !0 });
|
|
62
|
+
}
|
|
63
|
+
unmute() {
|
|
64
|
+
i.set({ muted: !1 });
|
|
65
|
+
}
|
|
66
|
+
toggleMute() {
|
|
67
|
+
i.set({ muted: !this.muted });
|
|
68
|
+
}
|
|
69
|
+
getSoundForFeeling(e) {
|
|
70
|
+
const t = this.theme;
|
|
71
|
+
if (t?.feelings?.[e]) return t.feelings[e];
|
|
72
|
+
if (t?.categoryDefaults) {
|
|
73
|
+
const s = this.getCategoryForFeeling(e);
|
|
74
|
+
if (t.categoryDefaults[s]) return t.categoryDefaults[s];
|
|
75
|
+
}
|
|
76
|
+
return T[e];
|
|
77
|
+
}
|
|
78
|
+
getCategoryForFeeling(e) {
|
|
79
|
+
return ["joyful", "content", "excited", "proud", "hopeful", "relieved", "grateful", "peaceful", "playful", "amused", "curious", "inspired", "confident", "loved", "comforted", "energized", "celebrated"].includes(e) ? "happy" : ["sad", "lonely", "disappointed", "heartbroken", "grieving", "hopeless", "empty", "discouraged", "melancholic", "homesick", "hurt", "miserable", "regretful", "ashamed", "inferior"].includes(e) ? "sad" : ["anxious", "worried", "afraid", "terrified", "panicked", "nervous", "uneasy", "insecure", "overwhelmed", "stressed", "tense", "apprehensive", "startled", "suspicious", "vulnerable"].includes(e) ? "anxious" : ["annoyed", "irritated", "frustrated", "angry", "enraged", "bitter", "resentful", "jealous", "envious", "indignant", "impatient", "hostile", "contemptuous"].includes(e) ? "angry" : ["tired", "exhausted", "drained", "burnedOut", "numb", "bored", "unmotivated", "apathetic", "restless"].includes(e) ? "tired" : ["calm", "relaxed", "atEase", "balanced", "stable", "secure", "safe", "centered", "grounded", "accepting"].includes(e) ? "calm" : ["connected", "accepted", "included", "belonging", "appreciated", "valued", "respected", "supported", "protective", "compassionate", "empathetic"].includes(e) ? "connected" : "mixed";
|
|
80
|
+
}
|
|
81
|
+
play(e) {
|
|
82
|
+
if (this.muted) return;
|
|
83
|
+
const t = this.getSoundForFeeling(e), s = this.getContext().currentTime, u = this.theme?.masterVolume ?? 1, r = this.volume * u;
|
|
84
|
+
t.puffs.forEach((n) => {
|
|
85
|
+
this.playPuff(s + n.startTime, n, r);
|
|
86
|
+
}), t.tones.forEach((n) => {
|
|
87
|
+
this.playTone(s + n.startTime, n, r);
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
dispose() {
|
|
91
|
+
this.audioContext && (this.audioContext.close(), this.audioContext = null);
|
|
92
|
+
}
|
|
93
|
+
static getInstance() {
|
|
94
|
+
return a.instance || (a.instance = new a()), a.instance;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
const F = a.getInstance(), E = F;
|
|
98
|
+
export {
|
|
99
|
+
E as a,
|
|
100
|
+
F as s
|
|
101
|
+
};
|
|
102
|
+
//# sourceMappingURL=sound.service-Nza4c6wv.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sound.service-Nza4c6wv.js","sources":["../src/audio/sound.service.ts"],"sourcesContent":["/**\n * Schmancy Sound Service\n *\n * Centralized sound management following the theme service pattern.\n * Provides reactive observables for sound state and methods to control sounds.\n *\n * @example\n * ```typescript\n * import { sound } from '@schmancy/audio'\n *\n * // Play a feeling sound\n * sound.play('joyful')\n *\n * // Set volume\n * sound.setVolume(0.2)\n *\n * // Apply AI-generated sound theme\n * sound.setTheme(aiGeneratedTheme)\n *\n * // Reset to defaults\n * sound.resetTheme()\n *\n * // Subscribe to theme changes\n * sound.theme$.subscribe(theme => {\n * console.log('Current theme:', theme?.name ?? 'default')\n * })\n * ```\n */\n\nimport { BehaviorSubject, distinctUntilChanged, map, shareReplay } from 'rxjs'\nimport { createContext } from '../store'\nimport type {\n\tFeeling,\n\tFeelingCategory,\n\tFeelingSound,\n\tPuffParams,\n\tSoundTheme,\n\tSoundThemeSettings,\n\tToneParams,\n} from '../types/mood-audio.types'\n\n// ============================================================================\n// CONTEXT\n// ============================================================================\n\n/** Sound settings context - persists to local storage */\nconst SoundContext = createContext<SoundThemeSettings>(\n\t{\n\t\ttheme: null,\n\t\tvolume: 0.15,\n\t\tmuted: false,\n\t},\n\t'local',\n\t'schmancy-sound-settings'\n)\n\n// ============================================================================\n// DEFAULT SOUND THEME\n// ============================================================================\n\n/**\n * Default sound definitions for all feelings\n * These are used when no custom theme is applied\n */\nconst DEFAULT_SOUNDS: Record<Feeling, FeelingSound> = {\n\t// ========== HAPPY / PLEASANT ==========\n\tjoyful: {\n\t\tpuffs: [\n\t\t\t{ startTime: 0, duration: 0.08, frequency: 3000, volume: 0.3 },\n\t\t\t{ startTime: 0.06, duration: 0.1, frequency: 3500, volume: 0.35 },\n\t\t],\n\t\ttones: [\n\t\t\t{ startTime: 0.02, duration: 0.15, frequency: 784, volume: 0.25, type: 'sine' },\n\t\t\t{ startTime: 0.1, duration: 0.2, frequency: 988, volume: 0.3, type: 'sine' },\n\t\t\t{ startTime: 0.18, duration: 0.25, frequency: 1175, volume: 0.25, type: 'sine' },\n\t\t],\n\t},\n\tcontent: {\n\t\tpuffs: [{ startTime: 0, duration: 0.2, frequency: 1500, volume: 0.25 }],\n\t\ttones: [\n\t\t\t{ startTime: 0.05, duration: 0.3, frequency: 523, volume: 0.2, type: 'sine', filterFrequency: 800 },\n\t\t\t{ startTime: 0.15, duration: 0.35, frequency: 659, volume: 0.15, type: 'sine', filterFrequency: 800 },\n\t\t],\n\t},\n\texcited: {\n\t\tpuffs: [\n\t\t\t{ startTime: 0, duration: 0.06, frequency: 2500, volume: 0.25 },\n\t\t\t{ startTime: 0.05, duration: 0.06, frequency: 3000, volume: 0.3 },\n\t\t\t{ startTime: 0.1, duration: 0.08, frequency: 3500, volume: 0.35 },\n\t\t],\n\t\ttones: [\n\t\t\t{ startTime: 0.02, duration: 0.12, frequency: 880, volume: 0.2, type: 'sine' },\n\t\t\t{ startTime: 0.08, duration: 0.12, frequency: 1047, volume: 0.25, type: 'sine' },\n\t\t\t{ startTime: 0.14, duration: 0.15, frequency: 1319, volume: 0.3, type: 'sine' },\n\t\t],\n\t},\n\tproud: {\n\t\tpuffs: [{ startTime: 0, duration: 0.15, frequency: 1800, volume: 0.3 }],\n\t\ttones: [\n\t\t\t{ startTime: 0.05, duration: 0.25, frequency: 523, volume: 0.25, type: 'sine' },\n\t\t\t{ startTime: 0.08, duration: 0.25, frequency: 659, volume: 0.2, type: 'sine' },\n\t\t\t{ startTime: 0.11, duration: 0.3, frequency: 784, volume: 0.25, type: 'sine' },\n\t\t],\n\t},\n\thopeful: {\n\t\tpuffs: [{ startTime: 0, duration: 0.12, frequency: 2200, volume: 0.2 }],\n\t\ttones: [{ startTime: 0.03, duration: 0.3, frequency: 659, volume: 0.2, type: 'sine', frequencyEnd: 880 }],\n\t},\n\trelieved: {\n\t\tpuffs: [{ startTime: 0, duration: 0.25, frequency: 1200, volume: 0.35 }],\n\t\ttones: [\n\t\t\t{ startTime: 0.1, duration: 0.35, frequency: 659, volume: 0.2, type: 'sine', filterFrequency: 800 },\n\t\t\t{ startTime: 0.25, duration: 0.4, frequency: 523, volume: 0.15, type: 'sine', filterFrequency: 800 },\n\t\t],\n\t},\n\tgrateful: {\n\t\tpuffs: [{ startTime: 0, duration: 0.15, frequency: 1500, volume: 0.25 }],\n\t\ttones: [\n\t\t\t{ startTime: 0.05, duration: 0.3, frequency: 440, volume: 0.2, type: 'sine', filterFrequency: 800 },\n\t\t\t{ startTime: 0.15, duration: 0.35, frequency: 523, volume: 0.2, type: 'sine', filterFrequency: 800 },\n\t\t\t{ startTime: 0.25, duration: 0.4, frequency: 659, volume: 0.15, type: 'sine', filterFrequency: 800 },\n\t\t],\n\t},\n\tpeaceful: {\n\t\tpuffs: [{ startTime: 0, duration: 0.3, frequency: 800, volume: 0.15 }],\n\t\ttones: [{ startTime: 0.1, duration: 0.5, frequency: 392, volume: 0.12, type: 'sine', filterFrequency: 500 }],\n\t},\n\tplayful: {\n\t\tpuffs: [\n\t\t\t{ startTime: 0, duration: 0.05, frequency: 2800, volume: 0.2 },\n\t\t\t{ startTime: 0.08, duration: 0.05, frequency: 3200, volume: 0.25 },\n\t\t\t{ startTime: 0.14, duration: 0.06, frequency: 2800, volume: 0.2 },\n\t\t],\n\t\ttones: [\n\t\t\t{ startTime: 0.03, duration: 0.1, frequency: 784, volume: 0.2, type: 'sine' },\n\t\t\t{ startTime: 0.1, duration: 0.08, frequency: 988, volume: 0.25, type: 'sine' },\n\t\t\t{ startTime: 0.16, duration: 0.12, frequency: 784, volume: 0.2, type: 'sine' },\n\t\t],\n\t},\n\tamused: {\n\t\tpuffs: [\n\t\t\t{ startTime: 0, duration: 0.04, frequency: 2500, volume: 0.2 },\n\t\t\t{ startTime: 0.06, duration: 0.04, frequency: 2800, volume: 0.22 },\n\t\t\t{ startTime: 0.11, duration: 0.05, frequency: 2600, volume: 0.18 },\n\t\t],\n\t\ttones: [{ startTime: 0.05, duration: 0.15, frequency: 880, volume: 0.15, type: 'sine' }],\n\t},\n\tcurious: {\n\t\tpuffs: [{ startTime: 0, duration: 0.1, frequency: 2000, volume: 0.2 }],\n\t\ttones: [{ startTime: 0.03, duration: 0.2, frequency: 659, volume: 0.2, type: 'sine', frequencyEnd: 880 }],\n\t},\n\tinspired: {\n\t\tpuffs: [{ startTime: 0, duration: 0.1, frequency: 2500, volume: 0.25 }],\n\t\ttones: [\n\t\t\t{ startTime: 0.05, duration: 0.3, frequency: 523, volume: 0.2, type: 'sine' },\n\t\t\t{ startTime: 0.07, duration: 0.28, frequency: 784.5, volume: 0.16, type: 'sine' },\n\t\t\t{ startTime: 0.09, duration: 0.26, frequency: 1046, volume: 0.12, type: 'sine' },\n\t\t],\n\t},\n\tconfident: {\n\t\tpuffs: [{ startTime: 0, duration: 0.12, frequency: 1500, volume: 0.3 }],\n\t\ttones: [\n\t\t\t{ startTime: 0.04, duration: 0.2, frequency: 523, volume: 0.25, type: 'sine' },\n\t\t\t{ startTime: 0.06, duration: 0.22, frequency: 659, volume: 0.2, type: 'sine' },\n\t\t],\n\t},\n\tloved: {\n\t\tpuffs: [{ startTime: 0, duration: 0.2, frequency: 1000, volume: 0.2 }],\n\t\ttones: [\n\t\t\t{ startTime: 0.08, duration: 0.4, frequency: 392, volume: 0.18, type: 'sine', filterFrequency: 600 },\n\t\t\t{ startTime: 0.2, duration: 0.45, frequency: 494, volume: 0.15, type: 'sine', filterFrequency: 600 },\n\t\t],\n\t},\n\tcomforted: {\n\t\tpuffs: [{ startTime: 0, duration: 0.25, frequency: 900, volume: 0.18 }],\n\t\ttones: [\n\t\t\t{ startTime: 0.1, duration: 0.35, frequency: 523, volume: 0.15, type: 'sine', filterFrequency: 800 },\n\t\t\t{ startTime: 0.25, duration: 0.4, frequency: 440, volume: 0.12, type: 'sine', filterFrequency: 800 },\n\t\t],\n\t},\n\tenergized: {\n\t\tpuffs: [\n\t\t\t{ startTime: 0, duration: 0.05, frequency: 3000, volume: 0.25 },\n\t\t\t{ startTime: 0.04, duration: 0.05, frequency: 3500, volume: 0.28 },\n\t\t],\n\t\ttones: [\n\t\t\t{ startTime: 0.02, duration: 0.1, frequency: 784, volume: 0.2, type: 'sine' },\n\t\t\t{ startTime: 0.08, duration: 0.12, frequency: 988, volume: 0.25, type: 'sine' },\n\t\t\t{ startTime: 0.14, duration: 0.15, frequency: 1175, volume: 0.22, type: 'sine' },\n\t\t],\n\t},\n\tcelebrated: {\n\t\tpuffs: [{ startTime: 0, duration: 0.08, frequency: 2500, volume: 0.2 }],\n\t\ttones: [\n\t\t\t{ startTime: 0.02, duration: 0.18, frequency: 523, volume: 0.22, type: 'sine' },\n\t\t\t{ startTime: 0.08, duration: 0.18, frequency: 659, volume: 0.24, type: 'sine' },\n\t\t\t{ startTime: 0.14, duration: 0.2, frequency: 784, volume: 0.26, type: 'sine' },\n\t\t\t{ startTime: 0.22, duration: 0.3, frequency: 1047, volume: 0.22, type: 'sine' },\n\t\t],\n\t},\n\n\t// ========== SAD / LOW ==========\n\tsad: {\n\t\tpuffs: [{ startTime: 0, duration: 0.3, frequency: 600, volume: 0.25 }],\n\t\ttones: [\n\t\t\t{ startTime: 0.1, duration: 0.4, frequency: 392, volume: 0.2, type: 'sine', filterFrequency: 400 },\n\t\t\t{ startTime: 0.3, duration: 0.45, frequency: 294, volume: 0.15, type: 'sine', filterFrequency: 350 },\n\t\t],\n\t},\n\tlonely: {\n\t\tpuffs: [{ startTime: 0, duration: 0.2, frequency: 700, volume: 0.2 }],\n\t\ttones: [{ startTime: 0.15, duration: 0.5, frequency: 330, volume: 0.12, type: 'sine', filterFrequency: 450 }],\n\t},\n\tdisappointed: {\n\t\tpuffs: [{ startTime: 0, duration: 0.25, frequency: 800, volume: 0.25 }],\n\t\ttones: [{ startTime: 0.08, duration: 0.3, frequency: 523, volume: 0.18, type: 'sine', frequencyEnd: 349 }],\n\t},\n\theartbroken: {\n\t\tpuffs: [{ startTime: 0, duration: 0.3, frequency: 600, volume: 0.25 }],\n\t\ttones: [\n\t\t\t{ startTime: 0.1, duration: 0.4, frequency: 392, volume: 0.2, type: 'sine', filterFrequency: 400 },\n\t\t\t{ startTime: 0.3, duration: 0.45, frequency: 294, volume: 0.15, type: 'sine', filterFrequency: 350 },\n\t\t],\n\t},\n\tgrieving: {\n\t\tpuffs: [{ startTime: 0, duration: 0.3, frequency: 600, volume: 0.25 }],\n\t\ttones: [\n\t\t\t{ startTime: 0.1, duration: 0.4, frequency: 392, volume: 0.2, type: 'sine', filterFrequency: 400 },\n\t\t\t{ startTime: 0.3, duration: 0.45, frequency: 294, volume: 0.15, type: 'sine', filterFrequency: 350 },\n\t\t],\n\t},\n\thopeless: {\n\t\tpuffs: [{ startTime: 0, duration: 0.2, frequency: 700, volume: 0.2 }],\n\t\ttones: [{ startTime: 0.15, duration: 0.5, frequency: 330, volume: 0.12, type: 'sine', filterFrequency: 450 }],\n\t},\n\tempty: {\n\t\tpuffs: [{ startTime: 0, duration: 0.2, frequency: 700, volume: 0.2 }],\n\t\ttones: [{ startTime: 0.15, duration: 0.5, frequency: 330, volume: 0.12, type: 'sine', filterFrequency: 450 }],\n\t},\n\tdiscouraged: {\n\t\tpuffs: [{ startTime: 0, duration: 0.25, frequency: 800, volume: 0.25 }],\n\t\ttones: [{ startTime: 0.08, duration: 0.3, frequency: 523, volume: 0.18, type: 'sine', frequencyEnd: 349 }],\n\t},\n\tmelancholic: {\n\t\tpuffs: [{ startTime: 0, duration: 0.3, frequency: 700, volume: 0.18 }],\n\t\ttones: [\n\t\t\t{ startTime: 0.1, duration: 0.45, frequency: 440, volume: 0.15, type: 'sine', filterFrequency: 500 },\n\t\t\t{ startTime: 0.3, duration: 0.5, frequency: 392, volume: 0.12, type: 'sine', filterFrequency: 450 },\n\t\t],\n\t},\n\thomesick: {\n\t\tpuffs: [{ startTime: 0, duration: 0.25, frequency: 800, volume: 0.15 }],\n\t\ttones: [\n\t\t\t{ startTime: 0.1, duration: 0.4, frequency: 440, volume: 0.12, type: 'sine', filterFrequency: 500 },\n\t\t\t{ startTime: 0.3, duration: 0.45, frequency: 392, volume: 0.1, type: 'sine', filterFrequency: 450 },\n\t\t],\n\t},\n\thurt: {\n\t\tpuffs: [{ startTime: 0, duration: 0.3, frequency: 600, volume: 0.25 }],\n\t\ttones: [\n\t\t\t{ startTime: 0.1, duration: 0.4, frequency: 392, volume: 0.2, type: 'sine', filterFrequency: 400 },\n\t\t\t{ startTime: 0.3, duration: 0.45, frequency: 294, volume: 0.15, type: 'sine', filterFrequency: 350 },\n\t\t],\n\t},\n\tmiserable: {\n\t\tpuffs: [{ startTime: 0, duration: 0.3, frequency: 600, volume: 0.25 }],\n\t\ttones: [\n\t\t\t{ startTime: 0.1, duration: 0.4, frequency: 392, volume: 0.2, type: 'sine', filterFrequency: 400 },\n\t\t\t{ startTime: 0.3, duration: 0.45, frequency: 294, volume: 0.15, type: 'sine', filterFrequency: 350 },\n\t\t],\n\t},\n\tregretful: {\n\t\tpuffs: [{ startTime: 0, duration: 0.3, frequency: 700, volume: 0.18 }],\n\t\ttones: [\n\t\t\t{ startTime: 0.1, duration: 0.45, frequency: 440, volume: 0.15, type: 'sine', filterFrequency: 500 },\n\t\t\t{ startTime: 0.3, duration: 0.5, frequency: 392, volume: 0.12, type: 'sine', filterFrequency: 450 },\n\t\t],\n\t},\n\tashamed: {\n\t\tpuffs: [{ startTime: 0, duration: 0.25, frequency: 800, volume: 0.25 }],\n\t\ttones: [{ startTime: 0.08, duration: 0.3, frequency: 523, volume: 0.18, type: 'sine', frequencyEnd: 349 }],\n\t},\n\tinferior: {\n\t\tpuffs: [{ startTime: 0, duration: 0.25, frequency: 800, volume: 0.25 }],\n\t\ttones: [{ startTime: 0.08, duration: 0.3, frequency: 523, volume: 0.18, type: 'sine', frequencyEnd: 349 }],\n\t},\n\n\t// ========== ANXIOUS / FEARFUL ==========\n\tanxious: {\n\t\tpuffs: [\n\t\t\t{ startTime: 0, duration: 0.08, frequency: 1800, volume: 0.2 },\n\t\t\t{ startTime: 0.12, duration: 0.08, frequency: 1900, volume: 0.22 },\n\t\t],\n\t\ttones: [{ startTime: 0.03, duration: 0.25, frequency: 440, volume: 0.15, type: 'sine' }],\n\t\tdescription: 'Tight, quick puffs with uncertain wobble',\n\t},\n\tworried: {\n\t\tpuffs: [{ startTime: 0, duration: 0.15, frequency: 1200, volume: 0.2 }],\n\t\ttones: [{ startTime: 0.05, duration: 0.25, frequency: 349, volume: 0.15, type: 'sine', frequencyEnd: 392 }],\n\t},\n\tafraid: {\n\t\tpuffs: [\n\t\t\t{ startTime: 0, duration: 0.08, frequency: 1800, volume: 0.2 },\n\t\t\t{ startTime: 0.12, duration: 0.08, frequency: 1900, volume: 0.22 },\n\t\t],\n\t\ttones: [{ startTime: 0.03, duration: 0.25, frequency: 440, volume: 0.15, type: 'sine' }],\n\t},\n\tterrified: {\n\t\tpuffs: [{ startTime: 0, duration: 0.04, frequency: 3500, volume: 0.3 }],\n\t\ttones: [\n\t\t\t{ startTime: 0, duration: 0.08, frequency: 1047, volume: 0.25, type: 'sine' },\n\t\t\t{ startTime: 0.05, duration: 0.15, frequency: 880, volume: 0.15, type: 'sine' },\n\t\t],\n\t},\n\tpanicked: {\n\t\tpuffs: [{ startTime: 0, duration: 0.04, frequency: 3500, volume: 0.3 }],\n\t\ttones: [\n\t\t\t{ startTime: 0, duration: 0.08, frequency: 1047, volume: 0.25, type: 'sine' },\n\t\t\t{ startTime: 0.05, duration: 0.15, frequency: 880, volume: 0.15, type: 'sine' },\n\t\t],\n\t},\n\tnervous: {\n\t\tpuffs: [\n\t\t\t{ startTime: 0, duration: 0.05, frequency: 2000, volume: 0.18 },\n\t\t\t{ startTime: 0.08, duration: 0.05, frequency: 2100, volume: 0.18 },\n\t\t\t{ startTime: 0.15, duration: 0.06, frequency: 2000, volume: 0.16 },\n\t\t],\n\t\ttones: [{ startTime: 0.04, duration: 0.2, frequency: 494, volume: 0.12, type: 'sine' }],\n\t},\n\tuneasy: {\n\t\tpuffs: [{ startTime: 0, duration: 0.15, frequency: 1200, volume: 0.2 }],\n\t\ttones: [{ startTime: 0.05, duration: 0.25, frequency: 349, volume: 0.15, type: 'sine', frequencyEnd: 392 }],\n\t},\n\tinsecure: {\n\t\tpuffs: [\n\t\t\t{ startTime: 0, duration: 0.05, frequency: 2000, volume: 0.18 },\n\t\t\t{ startTime: 0.08, duration: 0.05, frequency: 2100, volume: 0.18 },\n\t\t\t{ startTime: 0.15, duration: 0.06, frequency: 2000, volume: 0.16 },\n\t\t],\n\t\ttones: [{ startTime: 0.04, duration: 0.2, frequency: 494, volume: 0.12, type: 'sine' }],\n\t},\n\toverwhelmed: {\n\t\tpuffs: [\n\t\t\t{ startTime: 0, duration: 0.08, frequency: 1800, volume: 0.2 },\n\t\t\t{ startTime: 0.12, duration: 0.08, frequency: 1900, volume: 0.22 },\n\t\t],\n\t\ttones: [{ startTime: 0.03, duration: 0.25, frequency: 440, volume: 0.15, type: 'sine' }],\n\t},\n\tstressed: {\n\t\tpuffs: [\n\t\t\t{ startTime: 0, duration: 0.08, frequency: 1800, volume: 0.2 },\n\t\t\t{ startTime: 0.12, duration: 0.08, frequency: 1900, volume: 0.22 },\n\t\t],\n\t\ttones: [{ startTime: 0.03, duration: 0.25, frequency: 440, volume: 0.15, type: 'sine' }],\n\t},\n\ttense: {\n\t\tpuffs: [\n\t\t\t{ startTime: 0, duration: 0.08, frequency: 1800, volume: 0.2 },\n\t\t\t{ startTime: 0.12, duration: 0.08, frequency: 1900, volume: 0.22 },\n\t\t],\n\t\ttones: [{ startTime: 0.03, duration: 0.25, frequency: 440, volume: 0.15, type: 'sine' }],\n\t},\n\tapprehensive: {\n\t\tpuffs: [{ startTime: 0, duration: 0.15, frequency: 1200, volume: 0.2 }],\n\t\ttones: [{ startTime: 0.05, duration: 0.25, frequency: 349, volume: 0.15, type: 'sine', frequencyEnd: 392 }],\n\t},\n\tstartled: {\n\t\tpuffs: [{ startTime: 0, duration: 0.04, frequency: 3500, volume: 0.3 }],\n\t\ttones: [\n\t\t\t{ startTime: 0, duration: 0.08, frequency: 1047, volume: 0.25, type: 'sine' },\n\t\t\t{ startTime: 0.05, duration: 0.15, frequency: 880, volume: 0.15, type: 'sine' },\n\t\t],\n\t},\n\tsuspicious: {\n\t\tpuffs: [{ startTime: 0, duration: 0.15, frequency: 1200, volume: 0.2 }],\n\t\ttones: [{ startTime: 0.05, duration: 0.25, frequency: 349, volume: 0.15, type: 'sine', frequencyEnd: 392 }],\n\t},\n\tvulnerable: {\n\t\tpuffs: [\n\t\t\t{ startTime: 0, duration: 0.05, frequency: 2000, volume: 0.18 },\n\t\t\t{ startTime: 0.08, duration: 0.05, frequency: 2100, volume: 0.18 },\n\t\t\t{ startTime: 0.15, duration: 0.06, frequency: 2000, volume: 0.16 },\n\t\t],\n\t\ttones: [{ startTime: 0.04, duration: 0.2, frequency: 494, volume: 0.12, type: 'sine' }],\n\t},\n\n\t// ========== ANGRY / FRUSTRATED ==========\n\tannoyed: {\n\t\tpuffs: [{ startTime: 0, duration: 0.1, frequency: 1000, volume: 0.25 }],\n\t\ttones: [{ startTime: 0.03, duration: 0.2, frequency: 294, volume: 0.18, type: 'sine', filterFrequency: 400 }],\n\t},\n\tirritated: {\n\t\tpuffs: [{ startTime: 0, duration: 0.1, frequency: 1000, volume: 0.25 }],\n\t\ttones: [{ startTime: 0.03, duration: 0.2, frequency: 294, volume: 0.18, type: 'sine', filterFrequency: 400 }],\n\t},\n\tfrustrated: {\n\t\tpuffs: [{ startTime: 0, duration: 0.12, frequency: 900, volume: 0.28 }],\n\t\ttones: [\n\t\t\t{ startTime: 0.04, duration: 0.15, frequency: 349, volume: 0.2, type: 'sine' },\n\t\t\t{ startTime: 0.12, duration: 0.12, frequency: 330, volume: 0.18, type: 'sine' },\n\t\t],\n\t},\n\tangry: {\n\t\tpuffs: [{ startTime: 0, duration: 0.12, frequency: 900, volume: 0.28 }],\n\t\ttones: [\n\t\t\t{ startTime: 0.04, duration: 0.15, frequency: 349, volume: 0.2, type: 'sine' },\n\t\t\t{ startTime: 0.12, duration: 0.12, frequency: 330, volume: 0.18, type: 'sine' },\n\t\t],\n\t},\n\tenraged: {\n\t\tpuffs: [{ startTime: 0, duration: 0.12, frequency: 900, volume: 0.28 }],\n\t\ttones: [\n\t\t\t{ startTime: 0.04, duration: 0.15, frequency: 349, volume: 0.2, type: 'sine' },\n\t\t\t{ startTime: 0.12, duration: 0.12, frequency: 330, volume: 0.18, type: 'sine' },\n\t\t],\n\t},\n\tbitter: {\n\t\tpuffs: [{ startTime: 0, duration: 0.12, frequency: 900, volume: 0.28 }],\n\t\ttones: [\n\t\t\t{ startTime: 0.04, duration: 0.15, frequency: 349, volume: 0.2, type: 'sine' },\n\t\t\t{ startTime: 0.12, duration: 0.12, frequency: 330, volume: 0.18, type: 'sine' },\n\t\t],\n\t},\n\tresentful: {\n\t\tpuffs: [{ startTime: 0, duration: 0.1, frequency: 1000, volume: 0.25 }],\n\t\ttones: [{ startTime: 0.03, duration: 0.2, frequency: 294, volume: 0.18, type: 'sine', filterFrequency: 400 }],\n\t},\n\tjealous: {\n\t\tpuffs: [{ startTime: 0, duration: 0.1, frequency: 1000, volume: 0.25 }],\n\t\ttones: [{ startTime: 0.03, duration: 0.2, frequency: 294, volume: 0.18, type: 'sine', filterFrequency: 400 }],\n\t},\n\tenvious: {\n\t\tpuffs: [{ startTime: 0, duration: 0.1, frequency: 1000, volume: 0.25 }],\n\t\ttones: [{ startTime: 0.03, duration: 0.2, frequency: 294, volume: 0.18, type: 'sine', filterFrequency: 400 }],\n\t},\n\tindignant: {\n\t\tpuffs: [{ startTime: 0, duration: 0.12, frequency: 900, volume: 0.28 }],\n\t\ttones: [\n\t\t\t{ startTime: 0.04, duration: 0.15, frequency: 349, volume: 0.2, type: 'sine' },\n\t\t\t{ startTime: 0.12, duration: 0.12, frequency: 330, volume: 0.18, type: 'sine' },\n\t\t],\n\t},\n\timpatient: {\n\t\tpuffs: [\n\t\t\t{ startTime: 0, duration: 0.04, frequency: 1500, volume: 0.2 },\n\t\t\t{ startTime: 0.08, duration: 0.04, frequency: 1500, volume: 0.2 },\n\t\t\t{ startTime: 0.16, duration: 0.04, frequency: 1500, volume: 0.22 },\n\t\t],\n\t\ttones: [{ startTime: 0.06, duration: 0.1, frequency: 523, volume: 0.15, type: 'sine' }],\n\t},\n\thostile: {\n\t\tpuffs: [{ startTime: 0, duration: 0.12, frequency: 900, volume: 0.28 }],\n\t\ttones: [\n\t\t\t{ startTime: 0.04, duration: 0.15, frequency: 349, volume: 0.2, type: 'sine' },\n\t\t\t{ startTime: 0.12, duration: 0.12, frequency: 330, volume: 0.18, type: 'sine' },\n\t\t],\n\t},\n\tcontemptuous: {\n\t\tpuffs: [{ startTime: 0, duration: 0.1, frequency: 1000, volume: 0.25 }],\n\t\ttones: [{ startTime: 0.03, duration: 0.2, frequency: 294, volume: 0.18, type: 'sine', filterFrequency: 400 }],\n\t},\n\n\t// ========== TIRED / DRAINED ==========\n\ttired: {\n\t\tpuffs: [{ startTime: 0, duration: 0.35, frequency: 500, volume: 0.2 }],\n\t\ttones: [{ startTime: 0.1, duration: 0.4, frequency: 330, volume: 0.12, type: 'sine', filterFrequency: 350 }],\n\t},\n\texhausted: {\n\t\tpuffs: [{ startTime: 0, duration: 0.45, frequency: 400, volume: 0.18 }],\n\t\ttones: [{ startTime: 0.15, duration: 0.5, frequency: 294, volume: 0.1, type: 'sine', filterFrequency: 300 }],\n\t},\n\tdrained: {\n\t\tpuffs: [{ startTime: 0, duration: 0.45, frequency: 400, volume: 0.18 }],\n\t\ttones: [{ startTime: 0.15, duration: 0.5, frequency: 294, volume: 0.1, type: 'sine', filterFrequency: 300 }],\n\t},\n\tburnedOut: {\n\t\tpuffs: [{ startTime: 0, duration: 0.45, frequency: 400, volume: 0.18 }],\n\t\ttones: [{ startTime: 0.15, duration: 0.5, frequency: 294, volume: 0.1, type: 'sine', filterFrequency: 300 }],\n\t},\n\tnumb: {\n\t\tpuffs: [{ startTime: 0, duration: 0.45, frequency: 400, volume: 0.18 }],\n\t\ttones: [{ startTime: 0.15, duration: 0.5, frequency: 294, volume: 0.1, type: 'sine', filterFrequency: 300 }],\n\t},\n\tbored: {\n\t\tpuffs: [{ startTime: 0, duration: 0.25, frequency: 600, volume: 0.15 }],\n\t\ttones: [{ startTime: 0.1, duration: 0.3, frequency: 349, volume: 0.1, type: 'sine', filterFrequency: 400 }],\n\t},\n\tunmotivated: {\n\t\tpuffs: [{ startTime: 0, duration: 0.25, frequency: 600, volume: 0.15 }],\n\t\ttones: [{ startTime: 0.1, duration: 0.3, frequency: 349, volume: 0.1, type: 'sine', filterFrequency: 400 }],\n\t},\n\tapathetic: {\n\t\tpuffs: [{ startTime: 0, duration: 0.25, frequency: 600, volume: 0.15 }],\n\t\ttones: [{ startTime: 0.1, duration: 0.3, frequency: 349, volume: 0.1, type: 'sine', filterFrequency: 400 }],\n\t},\n\trestless: {\n\t\tpuffs: [{ startTime: 0, duration: 0.35, frequency: 500, volume: 0.2 }],\n\t\ttones: [{ startTime: 0.1, duration: 0.4, frequency: 330, volume: 0.12, type: 'sine', filterFrequency: 350 }],\n\t},\n\n\t// ========== CALM / GROUNDED ==========\n\tcalm: {\n\t\tpuffs: [{ startTime: 0, duration: 0.3, frequency: 600, volume: 0.12 }],\n\t\ttones: [{ startTime: 0.1, duration: 0.5, frequency: 392, volume: 0.1, type: 'sine', filterFrequency: 500 }],\n\t},\n\trelaxed: {\n\t\tpuffs: [{ startTime: 0, duration: 0.35, frequency: 700, volume: 0.15 }],\n\t\ttones: [\n\t\t\t{ startTime: 0.15, duration: 0.45, frequency: 440, volume: 0.1, type: 'sine', filterFrequency: 800 },\n\t\t\t{ startTime: 0.35, duration: 0.5, frequency: 392, volume: 0.08, type: 'sine', filterFrequency: 800 },\n\t\t],\n\t},\n\tatEase: {\n\t\tpuffs: [{ startTime: 0, duration: 0.35, frequency: 700, volume: 0.15 }],\n\t\ttones: [\n\t\t\t{ startTime: 0.15, duration: 0.45, frequency: 440, volume: 0.1, type: 'sine', filterFrequency: 800 },\n\t\t\t{ startTime: 0.35, duration: 0.5, frequency: 392, volume: 0.08, type: 'sine', filterFrequency: 800 },\n\t\t],\n\t},\n\tbalanced: {\n\t\tpuffs: [{ startTime: 0, duration: 0.3, frequency: 600, volume: 0.12 }],\n\t\ttones: [{ startTime: 0.1, duration: 0.5, frequency: 392, volume: 0.1, type: 'sine', filterFrequency: 500 }],\n\t},\n\tstable: {\n\t\tpuffs: [{ startTime: 0, duration: 0.25, frequency: 500, volume: 0.2 }],\n\t\ttones: [{ startTime: 0.1, duration: 0.4, frequency: 262, volume: 0.15, type: 'sine', filterFrequency: 350 }],\n\t},\n\tsecure: {\n\t\tpuffs: [{ startTime: 0, duration: 0.3, frequency: 700, volume: 0.15 }],\n\t\ttones: [\n\t\t\t{ startTime: 0.1, duration: 0.4, frequency: 349, volume: 0.12, type: 'sine', filterFrequency: 800 },\n\t\t\t{ startTime: 0.25, duration: 0.45, frequency: 440, volume: 0.1, type: 'sine', filterFrequency: 800 },\n\t\t],\n\t},\n\tsafe: {\n\t\tpuffs: [{ startTime: 0, duration: 0.3, frequency: 700, volume: 0.15 }],\n\t\ttones: [\n\t\t\t{ startTime: 0.1, duration: 0.4, frequency: 349, volume: 0.12, type: 'sine', filterFrequency: 800 },\n\t\t\t{ startTime: 0.25, duration: 0.45, frequency: 440, volume: 0.1, type: 'sine', filterFrequency: 800 },\n\t\t],\n\t},\n\tcentered: {\n\t\tpuffs: [{ startTime: 0, duration: 0.25, frequency: 500, volume: 0.2 }],\n\t\ttones: [{ startTime: 0.1, duration: 0.4, frequency: 262, volume: 0.15, type: 'sine', filterFrequency: 350 }],\n\t},\n\tgrounded: {\n\t\tpuffs: [{ startTime: 0, duration: 0.25, frequency: 500, volume: 0.2 }],\n\t\ttones: [{ startTime: 0.1, duration: 0.4, frequency: 262, volume: 0.15, type: 'sine', filterFrequency: 350 }],\n\t},\n\taccepting: {\n\t\tpuffs: [{ startTime: 0, duration: 0.3, frequency: 600, volume: 0.12 }],\n\t\ttones: [{ startTime: 0.1, duration: 0.5, frequency: 392, volume: 0.1, type: 'sine', filterFrequency: 500 }],\n\t},\n\n\t// ========== CONNECTED / SOCIAL ==========\n\tconnected: {\n\t\tpuffs: [{ startTime: 0, duration: 0.2, frequency: 1200, volume: 0.18 }],\n\t\ttones: [\n\t\t\t{ startTime: 0.08, duration: 0.3, frequency: 440, volume: 0.15, type: 'sine', filterFrequency: 800 },\n\t\t\t{ startTime: 0.12, duration: 0.32, frequency: 523, volume: 0.12, type: 'sine', filterFrequency: 800 },\n\t\t],\n\t},\n\taccepted: {\n\t\tpuffs: [{ startTime: 0, duration: 0.15, frequency: 1500, volume: 0.2 }],\n\t\ttones: [\n\t\t\t{ startTime: 0.05, duration: 0.25, frequency: 440, volume: 0.15, type: 'sine', filterFrequency: 800 },\n\t\t\t{ startTime: 0.15, duration: 0.3, frequency: 523, volume: 0.18, type: 'sine', filterFrequency: 800 },\n\t\t],\n\t},\n\tincluded: {\n\t\tpuffs: [{ startTime: 0, duration: 0.2, frequency: 1200, volume: 0.18 }],\n\t\ttones: [\n\t\t\t{ startTime: 0.08, duration: 0.3, frequency: 440, volume: 0.15, type: 'sine', filterFrequency: 800 },\n\t\t\t{ startTime: 0.12, duration: 0.32, frequency: 523, volume: 0.12, type: 'sine', filterFrequency: 800 },\n\t\t],\n\t},\n\tbelonging: {\n\t\tpuffs: [{ startTime: 0, duration: 0.2, frequency: 1200, volume: 0.18 }],\n\t\ttones: [\n\t\t\t{ startTime: 0.08, duration: 0.3, frequency: 440, volume: 0.15, type: 'sine', filterFrequency: 800 },\n\t\t\t{ startTime: 0.12, duration: 0.32, frequency: 523, volume: 0.12, type: 'sine', filterFrequency: 800 },\n\t\t],\n\t},\n\tappreciated: {\n\t\tpuffs: [{ startTime: 0, duration: 0.15, frequency: 1500, volume: 0.2 }],\n\t\ttones: [\n\t\t\t{ startTime: 0.05, duration: 0.25, frequency: 440, volume: 0.15, type: 'sine', filterFrequency: 800 },\n\t\t\t{ startTime: 0.15, duration: 0.3, frequency: 523, volume: 0.18, type: 'sine', filterFrequency: 800 },\n\t\t],\n\t},\n\tvalued: {\n\t\tpuffs: [{ startTime: 0, duration: 0.15, frequency: 1500, volume: 0.2 }],\n\t\ttones: [\n\t\t\t{ startTime: 0.05, duration: 0.25, frequency: 440, volume: 0.15, type: 'sine', filterFrequency: 800 },\n\t\t\t{ startTime: 0.15, duration: 0.3, frequency: 523, volume: 0.18, type: 'sine', filterFrequency: 800 },\n\t\t],\n\t},\n\trespected: {\n\t\tpuffs: [{ startTime: 0, duration: 0.15, frequency: 1500, volume: 0.2 }],\n\t\ttones: [\n\t\t\t{ startTime: 0.05, duration: 0.25, frequency: 440, volume: 0.15, type: 'sine', filterFrequency: 800 },\n\t\t\t{ startTime: 0.15, duration: 0.3, frequency: 523, volume: 0.18, type: 'sine', filterFrequency: 800 },\n\t\t],\n\t},\n\tsupported: {\n\t\tpuffs: [{ startTime: 0, duration: 0.25, frequency: 900, volume: 0.18 }],\n\t\ttones: [\n\t\t\t{ startTime: 0.1, duration: 0.35, frequency: 349, volume: 0.12, type: 'sine', filterFrequency: 800 },\n\t\t\t{ startTime: 0.15, duration: 0.4, frequency: 440, volume: 0.1, type: 'sine', filterFrequency: 800 },\n\t\t],\n\t},\n\tprotective: {\n\t\tpuffs: [{ startTime: 0, duration: 0.25, frequency: 900, volume: 0.18 }],\n\t\ttones: [\n\t\t\t{ startTime: 0.1, duration: 0.35, frequency: 349, volume: 0.12, type: 'sine', filterFrequency: 800 },\n\t\t\t{ startTime: 0.15, duration: 0.4, frequency: 440, volume: 0.1, type: 'sine', filterFrequency: 800 },\n\t\t],\n\t},\n\tcompassionate: {\n\t\tpuffs: [{ startTime: 0, duration: 0.2, frequency: 1200, volume: 0.18 }],\n\t\ttones: [\n\t\t\t{ startTime: 0.08, duration: 0.3, frequency: 440, volume: 0.15, type: 'sine', filterFrequency: 800 },\n\t\t\t{ startTime: 0.12, duration: 0.32, frequency: 523, volume: 0.12, type: 'sine', filterFrequency: 800 },\n\t\t],\n\t},\n\tempathetic: {\n\t\tpuffs: [{ startTime: 0, duration: 0.2, frequency: 1200, volume: 0.18 }],\n\t\ttones: [\n\t\t\t{ startTime: 0.08, duration: 0.3, frequency: 440, volume: 0.15, type: 'sine', filterFrequency: 800 },\n\t\t\t{ startTime: 0.12, duration: 0.32, frequency: 523, volume: 0.12, type: 'sine', filterFrequency: 800 },\n\t\t],\n\t},\n\n\t// ========== MIXED / COMPLICATED ==========\n\tconflicted: {\n\t\tpuffs: [{ startTime: 0, duration: 0.12, frequency: 1200, volume: 0.18 }],\n\t\ttones: [\n\t\t\t{ startTime: 0.04, duration: 0.2, frequency: 440, volume: 0.12, type: 'sine', frequencyEnd: 494 },\n\t\t\t{ startTime: 0.15, duration: 0.15, frequency: 466, volume: 0.1, type: 'sine' },\n\t\t],\n\t},\n\tconfused: {\n\t\tpuffs: [{ startTime: 0, duration: 0.12, frequency: 1200, volume: 0.18 }],\n\t\ttones: [\n\t\t\t{ startTime: 0.04, duration: 0.2, frequency: 440, volume: 0.12, type: 'sine', frequencyEnd: 494 },\n\t\t\t{ startTime: 0.15, duration: 0.15, frequency: 466, volume: 0.1, type: 'sine' },\n\t\t],\n\t},\n\tambivalent: {\n\t\tpuffs: [{ startTime: 0, duration: 0.12, frequency: 1200, volume: 0.18 }],\n\t\ttones: [\n\t\t\t{ startTime: 0.04, duration: 0.2, frequency: 440, volume: 0.12, type: 'sine', frequencyEnd: 494 },\n\t\t\t{ startTime: 0.15, duration: 0.15, frequency: 466, volume: 0.1, type: 'sine' },\n\t\t],\n\t},\n\tnostalgic: {\n\t\tpuffs: [{ startTime: 0, duration: 0.25, frequency: 800, volume: 0.15 }],\n\t\ttones: [\n\t\t\t{ startTime: 0.1, duration: 0.4, frequency: 440, volume: 0.12, type: 'sine', filterFrequency: 500 },\n\t\t\t{ startTime: 0.3, duration: 0.45, frequency: 392, volume: 0.1, type: 'sine', filterFrequency: 450 },\n\t\t],\n\t},\n\tguilty: {\n\t\tpuffs: [{ startTime: 0, duration: 0.25, frequency: 800, volume: 0.25 }],\n\t\ttones: [{ startTime: 0.08, duration: 0.3, frequency: 523, volume: 0.18, type: 'sine', frequencyEnd: 349 }],\n\t},\n\tembarrassed: {\n\t\tpuffs: [\n\t\t\t{ startTime: 0, duration: 0.05, frequency: 2000, volume: 0.18 },\n\t\t\t{ startTime: 0.08, duration: 0.05, frequency: 2100, volume: 0.18 },\n\t\t\t{ startTime: 0.15, duration: 0.06, frequency: 2000, volume: 0.16 },\n\t\t],\n\t\ttones: [{ startTime: 0.04, duration: 0.2, frequency: 494, volume: 0.12, type: 'sine' }],\n\t},\n\tsurprised: {\n\t\tpuffs: [{ startTime: 0, duration: 0.06, frequency: 2800, volume: 0.25 }],\n\t\ttones: [{ startTime: 0.02, duration: 0.15, frequency: 659, volume: 0.2, type: 'sine', frequencyEnd: 988 }],\n\t},\n\tshocked: {\n\t\tpuffs: [{ startTime: 0, duration: 0.04, frequency: 3500, volume: 0.3 }],\n\t\ttones: [\n\t\t\t{ startTime: 0, duration: 0.08, frequency: 1047, volume: 0.25, type: 'sine' },\n\t\t\t{ startTime: 0.05, duration: 0.15, frequency: 880, volume: 0.15, type: 'sine' },\n\t\t],\n\t},\n\tawestruck: {\n\t\tpuffs: [{ startTime: 0, duration: 0.2, frequency: 1500, volume: 0.2 }],\n\t\ttones: [\n\t\t\t{ startTime: 0.08, duration: 0.4, frequency: 440, volume: 0.15, type: 'sine' },\n\t\t\t{ startTime: 0.1, duration: 0.38, frequency: 660, volume: 0.12, type: 'sine' },\n\t\t\t{ startTime: 0.12, duration: 0.36, frequency: 880, volume: 0.09, type: 'sine' },\n\t\t],\n\t},\n\tskeptical: {\n\t\tpuffs: [{ startTime: 0, duration: 0.12, frequency: 1200, volume: 0.18 }],\n\t\ttones: [\n\t\t\t{ startTime: 0.04, duration: 0.2, frequency: 440, volume: 0.12, type: 'sine', frequencyEnd: 494 },\n\t\t\t{ startTime: 0.15, duration: 0.15, frequency: 466, volume: 0.1, type: 'sine' },\n\t\t],\n\t},\n}\n\n// ============================================================================\n// SOUND SERVICE\n// ============================================================================\n\n/**\n * Sound Service - Provides centralized sound management for Schmancy components\n *\n * Following the theme service pattern:\n * - Has default sounds as fallback\n * - Can receive custom sound theme from AI\n * - Reactive observables for state changes\n * - Persists settings to session storage\n */\nclass SoundService {\n\tprivate static instance: SoundService\n\n\t/** Audio context for Web Audio API */\n\tprivate audioContext: AudioContext | null = null\n\n\t// Public observables derived from context\n\t// Don't use distinctUntilChanged for theme - we need all emissions including storage loads\n\tpublic readonly theme$ = SoundContext.$.pipe(\n\t\tmap(settings => settings.theme),\n\t\tshareReplay(1)\n\t)\n\n\tpublic readonly volume$ = SoundContext.$.pipe(\n\t\tmap(settings => settings.volume),\n\t\tdistinctUntilChanged(),\n\t\tshareReplay(1)\n\t)\n\n\tpublic readonly muted$ = SoundContext.$.pipe(\n\t\tmap(settings => settings.muted),\n\t\tdistinctUntilChanged(),\n\t\tshareReplay(1)\n\t)\n\n\t/** BehaviorSubject for current theme name (for debugging/display) */\n\tprivate readonly _themeName$ = new BehaviorSubject<string>('default')\n\tpublic readonly themeName$ = this._themeName$.asObservable()\n\n\t// Getters for synchronous access\n\tget theme(): SoundTheme | null {\n\t\treturn SoundContext.value.theme\n\t}\n\n\tget volume(): number {\n\t\treturn SoundContext.value.volume\n\t}\n\n\tget muted(): boolean {\n\t\treturn SoundContext.value.muted\n\t}\n\n\tget themeName(): string {\n\t\treturn this.theme?.name ?? 'default'\n\t}\n\n\tprivate constructor() {\n\t\t// Subscribe to theme changes to update theme name\n\t\tthis.theme$.subscribe(theme => {\n\t\t\tthis._themeName$.next(theme?.name ?? 'default')\n\t\t})\n\t}\n\n\t// ==========================================================================\n\t// AUDIO CONTEXT MANAGEMENT\n\t// ==========================================================================\n\n\tprivate getContext(): AudioContext {\n\t\tif (!this.audioContext) {\n\t\t\tconst AudioContextClass =\n\t\t\t\twindow.AudioContext || (window as unknown as { webkitAudioContext: typeof AudioContext }).webkitAudioContext\n\t\t\tthis.audioContext = new AudioContextClass()\n\t\t}\n\t\tif (this.audioContext.state === 'suspended') {\n\t\t\tthis.audioContext.resume()\n\t\t}\n\t\treturn this.audioContext\n\t}\n\n\t// ==========================================================================\n\t// SOUND PRIMITIVES\n\t// ==========================================================================\n\n\t/** Play a puff (breath/air) sound */\n\tprivate playPuff(startTime: number, params: PuffParams, masterVolume: number): void {\n\t\tconst ctx = this.getContext()\n\t\tconst bufferSize = Math.floor(ctx.sampleRate * params.duration)\n\t\tconst buffer = ctx.createBuffer(1, bufferSize, ctx.sampleRate)\n\t\tconst data = buffer.getChannelData(0)\n\n\t\tfor (let i = 0; i < bufferSize; i++) {\n\t\t\tdata[i] = Math.random() * 2 - 1\n\t\t}\n\n\t\tconst noise = ctx.createBufferSource()\n\t\tnoise.buffer = buffer\n\n\t\tconst filter = ctx.createBiquadFilter()\n\t\tfilter.type = 'bandpass'\n\t\tfilter.frequency.value = params.frequency\n\t\tfilter.Q.value = 0.7\n\n\t\tconst gain = ctx.createGain()\n\t\tgain.gain.setValueAtTime(0, startTime)\n\t\tgain.gain.linearRampToValueAtTime(params.volume * masterVolume, startTime + 0.015)\n\t\tgain.gain.exponentialRampToValueAtTime(0.001, startTime + params.duration)\n\n\t\tnoise.connect(filter).connect(gain).connect(ctx.destination)\n\t\tnoise.start(startTime)\n\t\tnoise.stop(startTime + params.duration)\n\t}\n\n\t/** Play a tone (musical) sound */\n\tprivate playTone(startTime: number, params: ToneParams, masterVolume: number): void {\n\t\tconst ctx = this.getContext()\n\t\tconst osc = ctx.createOscillator()\n\t\tconst gain = ctx.createGain()\n\n\t\tosc.type = params.type\n\t\tosc.frequency.setValueAtTime(params.frequency, startTime)\n\n\t\tif (params.frequencyEnd) {\n\t\t\tosc.frequency.exponentialRampToValueAtTime(params.frequencyEnd, startTime + params.duration * 0.8)\n\t\t}\n\n\t\t// Apply filter if specified\n\t\tlet lastNode: AudioNode = osc\n\t\tif (params.filterFrequency) {\n\t\t\tconst filter = ctx.createBiquadFilter()\n\t\t\tfilter.type = 'lowpass'\n\t\t\tfilter.frequency.value = params.filterFrequency\n\t\t\tosc.connect(filter)\n\t\t\tlastNode = filter\n\t\t}\n\n\t\tgain.gain.setValueAtTime(0, startTime)\n\t\tgain.gain.linearRampToValueAtTime(params.volume * masterVolume, startTime + 0.02)\n\t\tgain.gain.exponentialRampToValueAtTime(0.001, startTime + params.duration)\n\n\t\tlastNode.connect(gain).connect(ctx.destination)\n\t\tosc.start(startTime)\n\t\tosc.stop(startTime + params.duration)\n\t}\n\n\t// ==========================================================================\n\t// PUBLIC API - THEME MANAGEMENT\n\t// ==========================================================================\n\n\t/**\n\t * Set a custom sound theme (e.g., from AI generation)\n\t * @param theme The sound theme to apply\n\t */\n\tpublic setTheme(theme: SoundTheme): void {\n\t\tSoundContext.set({ theme })\n\t}\n\n\t/**\n\t * Reset to default sounds (removes custom theme)\n\t */\n\tpublic resetTheme(): void {\n\t\tSoundContext.set({ theme: null })\n\t}\n\n\t/**\n\t * Set volume level (0.0 - 1.0)\n\t * @param volume Volume level\n\t */\n\tpublic setVolume(volume: number): void {\n\t\tSoundContext.set({ volume: Math.max(0, Math.min(1, volume)) })\n\t}\n\n\t/**\n\t * Mute all sounds\n\t */\n\tpublic mute(): void {\n\t\tSoundContext.set({ muted: true })\n\t}\n\n\t/**\n\t * Unmute sounds\n\t */\n\tpublic unmute(): void {\n\t\tSoundContext.set({ muted: false })\n\t}\n\n\t/**\n\t * Toggle mute state\n\t */\n\tpublic toggleMute(): void {\n\t\tSoundContext.set({ muted: !this.muted })\n\t}\n\n\t// ==========================================================================\n\t// PUBLIC API - SOUND PLAYBACK\n\t// ==========================================================================\n\n\t/**\n\t * Get the sound definition for a feeling\n\t * Uses custom theme if available, falls back to defaults\n\t */\n\tpublic getSoundForFeeling(feeling: Feeling): FeelingSound {\n\t\tconst customTheme = this.theme\n\n\t\t// Try custom theme first\n\t\tif (customTheme?.feelings?.[feeling]) {\n\t\t\treturn customTheme.feelings[feeling]!\n\t\t}\n\n\t\t// Try category default from custom theme\n\t\tif (customTheme?.categoryDefaults) {\n\t\t\tconst category = this.getCategoryForFeeling(feeling)\n\t\t\tif (customTheme.categoryDefaults[category]) {\n\t\t\t\treturn customTheme.categoryDefaults[category]!\n\t\t\t}\n\t\t}\n\n\t\t// Fall back to defaults\n\t\treturn DEFAULT_SOUNDS[feeling]\n\t}\n\n\t/**\n\t * Get the category for a feeling\n\t */\n\tprivate getCategoryForFeeling(feeling: Feeling): FeelingCategory {\n\t\tconst happyFeelings: Feeling[] = [\n\t\t\t'joyful',\n\t\t\t'content',\n\t\t\t'excited',\n\t\t\t'proud',\n\t\t\t'hopeful',\n\t\t\t'relieved',\n\t\t\t'grateful',\n\t\t\t'peaceful',\n\t\t\t'playful',\n\t\t\t'amused',\n\t\t\t'curious',\n\t\t\t'inspired',\n\t\t\t'confident',\n\t\t\t'loved',\n\t\t\t'comforted',\n\t\t\t'energized',\n\t\t\t'celebrated',\n\t\t]\n\t\tconst sadFeelings: Feeling[] = [\n\t\t\t'sad',\n\t\t\t'lonely',\n\t\t\t'disappointed',\n\t\t\t'heartbroken',\n\t\t\t'grieving',\n\t\t\t'hopeless',\n\t\t\t'empty',\n\t\t\t'discouraged',\n\t\t\t'melancholic',\n\t\t\t'homesick',\n\t\t\t'hurt',\n\t\t\t'miserable',\n\t\t\t'regretful',\n\t\t\t'ashamed',\n\t\t\t'inferior',\n\t\t]\n\t\tconst anxiousFeelings: Feeling[] = [\n\t\t\t'anxious',\n\t\t\t'worried',\n\t\t\t'afraid',\n\t\t\t'terrified',\n\t\t\t'panicked',\n\t\t\t'nervous',\n\t\t\t'uneasy',\n\t\t\t'insecure',\n\t\t\t'overwhelmed',\n\t\t\t'stressed',\n\t\t\t'tense',\n\t\t\t'apprehensive',\n\t\t\t'startled',\n\t\t\t'suspicious',\n\t\t\t'vulnerable',\n\t\t]\n\t\tconst angryFeelings: Feeling[] = [\n\t\t\t'annoyed',\n\t\t\t'irritated',\n\t\t\t'frustrated',\n\t\t\t'angry',\n\t\t\t'enraged',\n\t\t\t'bitter',\n\t\t\t'resentful',\n\t\t\t'jealous',\n\t\t\t'envious',\n\t\t\t'indignant',\n\t\t\t'impatient',\n\t\t\t'hostile',\n\t\t\t'contemptuous',\n\t\t]\n\t\tconst tiredFeelings: Feeling[] = ['tired', 'exhausted', 'drained', 'burnedOut', 'numb', 'bored', 'unmotivated', 'apathetic', 'restless']\n\t\tconst calmFeelings: Feeling[] = ['calm', 'relaxed', 'atEase', 'balanced', 'stable', 'secure', 'safe', 'centered', 'grounded', 'accepting']\n\t\tconst connectedFeelings: Feeling[] = [\n\t\t\t'connected',\n\t\t\t'accepted',\n\t\t\t'included',\n\t\t\t'belonging',\n\t\t\t'appreciated',\n\t\t\t'valued',\n\t\t\t'respected',\n\t\t\t'supported',\n\t\t\t'protective',\n\t\t\t'compassionate',\n\t\t\t'empathetic',\n\t\t]\n\n\t\tif (happyFeelings.includes(feeling)) return 'happy'\n\t\tif (sadFeelings.includes(feeling)) return 'sad'\n\t\tif (anxiousFeelings.includes(feeling)) return 'anxious'\n\t\tif (angryFeelings.includes(feeling)) return 'angry'\n\t\tif (tiredFeelings.includes(feeling)) return 'tired'\n\t\tif (calmFeelings.includes(feeling)) return 'calm'\n\t\tif (connectedFeelings.includes(feeling)) return 'connected'\n\t\treturn 'mixed'\n\t}\n\n\t/**\n\t * Play a feeling sound\n\t * @param feeling The feeling to play\n\t */\n\tpublic play(feeling: Feeling): void {\n\t\tif (this.muted) return\n\n\t\tconst sound = this.getSoundForFeeling(feeling)\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Calculate master volume (theme + user setting)\n\t\tconst themeMasterVolume = this.theme?.masterVolume ?? 1\n\t\tconst masterVolume = this.volume * themeMasterVolume\n\n\t\t// Play puffs\n\t\tsound.puffs.forEach(puff => {\n\t\t\tthis.playPuff(now + puff.startTime, puff, masterVolume)\n\t\t})\n\n\t\t// Play tones\n\t\tsound.tones.forEach(tone => {\n\t\t\tthis.playTone(now + tone.startTime, tone, masterVolume)\n\t\t})\n\t}\n\n\t/**\n\t * Dispose audio context\n\t */\n\tpublic dispose(): void {\n\t\tif (this.audioContext) {\n\t\t\tthis.audioContext.close()\n\t\t\tthis.audioContext = null\n\t\t}\n\t}\n\n\t/**\n\t * Get singleton instance\n\t */\n\tstatic getInstance(): SoundService {\n\t\tif (!SoundService.instance) {\n\t\t\tSoundService.instance = new SoundService()\n\t\t}\n\t\treturn SoundService.instance\n\t}\n}\n\n// ============================================================================\n// EXPORTS\n// ============================================================================\n\n/** Global sound service singleton */\nexport const sound = SoundService.getInstance()\nexport const schmancySound = sound // Alias for consistency with theme\n\nexport default sound\n"],"names":["SoundContext","createContext","theme","volume","muted","DEFAULT_SOUNDS","joyful","puffs","startTime","duration","frequency","tones","type","content","filterFrequency","excited","proud","hopeful","frequencyEnd","relieved","grateful","peaceful","playful","amused","curious","inspired","confident","loved","comforted","energized","celebrated","sad","lonely","disappointed","heartbroken","grieving","hopeless","empty","discouraged","melancholic","homesick","hurt","miserable","regretful","ashamed","inferior","anxious","description","worried","afraid","terrified","panicked","nervous","uneasy","insecure","overwhelmed","stressed","tense","apprehensive","startled","suspicious","vulnerable","annoyed","irritated","frustrated","angry","enraged","bitter","resentful","jealous","envious","indignant","impatient","hostile","contemptuous","tired","exhausted","drained","burnedOut","numb","bored","unmotivated","apathetic","restless","calm","relaxed","atEase","balanced","stable","secure","safe","centered","grounded","accepting","connected","accepted","included","belonging","appreciated","valued","respected","supported","protective","compassionate","empathetic","conflicted","confused","ambivalent","nostalgic","guilty","embarrassed","surprised","shocked","awestruck","skeptical","SoundService","this","audioContext","theme$","$","pipe","map","settings","shareReplay","volume$","distinctUntilChanged","muted$","_themeName$","BehaviorSubject","themeName$","asObservable","subscribe","next","name","value","themeName","getContext","AudioContextClass","window","AudioContext","webkitAudioContext","state","resume","params","masterVolume","ctx","bufferSize","Math","floor","sampleRate","buffer","createBuffer","data","getChannelData","i","random","noise","createBufferSource","filter","createBiquadFilter","Q","gain","createGain","setValueAtTime","linearRampToValueAtTime","exponentialRampToValueAtTime","connect","destination","start","stop","osc","createOscillator","lastNode","set","resetTheme","max","min","mute","unmute","toggleMute","feeling","customTheme","feelings","categoryDefaults","category","getCategoryForFeeling","includes","sound","getSoundForFeeling","now","currentTime","themeMasterVolume","forEach","puff","playPuff","tone","playTone","dispose","close","getInstance","instance","schmancySound"],"mappings":"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"}
|