@mhmo91/schmancy 0.10.41 → 0.10.43
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/custom-elements.json +291 -179
- package/dist/SchmancyElement-CeKrBW2j.cjs +2 -0
- package/dist/SchmancyElement-CeKrBW2j.cjs.map +1 -0
- package/dist/SchmancyElement-Ob9yGkiG.js +286 -0
- package/dist/SchmancyElement-Ob9yGkiG.js.map +1 -0
- package/dist/agent/schmancy.agent.js +4057 -4082
- package/dist/agent/schmancy.agent.js.map +1 -1
- package/dist/agent/schmancy.manifest.json +225 -94
- package/dist/animation-CCOIW4wJ.cjs.map +1 -1
- package/dist/animation-DCznELuT.js.map +1 -1
- package/dist/area-CbajcnmJ.cjs +21 -0
- package/dist/area-CbajcnmJ.cjs.map +1 -0
- package/dist/{area-BiM7V2ns.js → area-MxLAyWgV.js} +22 -22
- package/dist/area-MxLAyWgV.js.map +1 -0
- package/dist/area.cjs +1 -1
- package/dist/area.js +1 -1
- package/dist/{audio-CxO_j__6.js → audio-B_0PGwYC.js} +1 -1
- package/dist/audio-B_0PGwYC.js.map +1 -0
- package/dist/{audio-xXFfMPCS.cjs → audio-CpwrIaw-.cjs} +1 -1
- package/dist/audio-CpwrIaw-.cjs.map +1 -0
- package/dist/audio.cjs +1 -1
- package/dist/audio.js +2 -2
- package/dist/autocomplete-CILzaDB7.cjs +115 -0
- package/dist/autocomplete-CILzaDB7.cjs.map +1 -0
- package/dist/{autocomplete-DUBY9RtH.js → autocomplete-DV9RxCun.js} +113 -113
- package/dist/autocomplete-DV9RxCun.js.map +1 -0
- package/dist/autocomplete.cjs +1 -1
- package/dist/autocomplete.js +1 -1
- package/dist/avatar.cjs +1 -1
- package/dist/avatar.cjs.map +1 -1
- package/dist/avatar.js +4 -4
- package/dist/avatar.js.map +1 -1
- package/dist/badge.cjs +1 -1
- package/dist/badge.js +1 -1
- package/dist/{boat-ScvAima3.js → boat-DoZGgQ0P.js} +6 -8
- package/dist/{boat-ScvAima3.js.map → boat-DoZGgQ0P.js.map} +1 -1
- package/dist/{boat-BIYaPAHp.cjs → boat-sg0cWO8a.cjs} +3 -5
- package/dist/{boat-BIYaPAHp.cjs.map → boat-sg0cWO8a.cjs.map} +1 -1
- package/dist/boat.cjs +1 -1
- package/dist/boat.js +1 -1
- package/dist/breadcrumb.cjs +32 -31
- package/dist/breadcrumb.cjs.map +1 -1
- package/dist/breadcrumb.js +33 -32
- package/dist/breadcrumb.js.map +1 -1
- package/dist/busy-Brs-TDh9.cjs +133 -0
- package/dist/busy-Brs-TDh9.cjs.map +1 -0
- package/dist/busy-g4LoQmhB.js +172 -0
- package/dist/busy-g4LoQmhB.js.map +1 -0
- package/dist/busy.cjs +1 -1
- package/dist/busy.js +1 -1
- package/dist/{button-BTpxQ1Kd.cjs → button-Cml67Y_d.cjs} +41 -32
- package/dist/button-Cml67Y_d.cjs.map +1 -0
- package/dist/{button-D7QHfYf4.js → button-DWANpZfD.js} +43 -34
- package/dist/button-DWANpZfD.js.map +1 -0
- package/dist/button.cjs +40 -33
- package/dist/button.cjs.map +1 -1
- package/dist/button.js +42 -35
- package/dist/button.js.map +1 -1
- package/dist/calendar-2dJrw9pR.cjs +58 -0
- package/dist/calendar-2dJrw9pR.cjs.map +1 -0
- package/dist/calendar-kCe5LaBa.js +434 -0
- package/dist/calendar-kCe5LaBa.js.map +1 -0
- package/dist/calendar.cjs +1 -0
- package/dist/calendar.js +2 -0
- package/dist/{card-DCdtJ5Dy.js → card-CS_hYJbz.js} +136 -136
- package/dist/card-CS_hYJbz.js.map +1 -0
- package/dist/card-d0KhTnx5.cjs +177 -0
- package/dist/card-d0KhTnx5.cjs.map +1 -0
- package/dist/card.cjs +1 -1
- package/dist/card.js +1 -1
- package/dist/{checkbox-DVtyPk7l.js → checkbox-Bjp7kWuE.js} +2 -2
- package/dist/{checkbox-DVtyPk7l.js.map → checkbox-Bjp7kWuE.js.map} +1 -1
- package/dist/{checkbox-CYGOVPP-.cjs → checkbox-DZ2Wrz7Y.cjs} +1 -1
- package/dist/{checkbox-CYGOVPP-.cjs.map → checkbox-DZ2Wrz7Y.cjs.map} +1 -1
- package/dist/checkbox.cjs +1 -1
- package/dist/checkbox.js +1 -1
- package/dist/{chips-DVes-BSz.cjs → chips-BHBVkxsa.cjs} +142 -153
- package/dist/chips-BHBVkxsa.cjs.map +1 -0
- package/dist/{chips-C5bpgWyf.js → chips-DACeW7YL.js} +127 -138
- package/dist/chips-DACeW7YL.js.map +1 -0
- package/dist/chips.cjs +1 -1
- package/dist/chips.js +2 -2
- package/dist/connectivity.cjs +54 -38
- package/dist/connectivity.cjs.map +1 -1
- package/dist/connectivity.js +56 -40
- package/dist/connectivity.js.map +1 -1
- package/dist/content-drawer.cjs +1 -1
- package/dist/content-drawer.js +1 -1
- package/dist/cursor-glow-Ah7VXSj7.js.map +1 -1
- package/dist/cursor-glow-Bulq-38P.cjs.map +1 -1
- package/dist/date-range-CVAWMdar.cjs +138 -0
- package/dist/date-range-CVAWMdar.cjs.map +1 -0
- package/dist/date-range-D2NZU5Yg.js +433 -0
- package/dist/date-range-D2NZU5Yg.js.map +1 -0
- package/dist/{date-range-inline-Dx4Reboo.cjs → date-range-inline-CGM0SPK9.cjs} +2 -4
- package/dist/date-range-inline-CGM0SPK9.cjs.map +1 -0
- package/dist/{date-range-inline-DPqY9YYf.js → date-range-inline-D6Ozerzw.js} +3 -5
- package/dist/date-range-inline-D6Ozerzw.js.map +1 -0
- 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 +2 -2
- package/dist/dayjs.min-CvRZTfam.cjs +1 -0
- package/dist/dayjs.min-CvRZTfam.cjs.map +1 -0
- package/dist/dayjs.min-DnELezPs.js +296 -0
- package/dist/dayjs.min-DnELezPs.js.map +1 -0
- package/dist/delay.cjs +1 -1
- package/dist/delay.js +3 -3
- package/dist/{details-BnleHmYe.js → details-Ct1_GwKr.js} +104 -92
- package/dist/details-Ct1_GwKr.js.map +1 -0
- package/dist/{details-Bx2jSJxG.cjs → details-D4fVOaj4.cjs} +109 -97
- package/dist/details-D4fVOaj4.cjs.map +1 -0
- package/dist/details.cjs +1 -1
- package/dist/details.js +1 -1
- package/dist/{directives-CYf2fAdA.cjs → directives-B2VxfwRL.cjs} +1 -1
- package/dist/directives-B2VxfwRL.cjs.map +1 -0
- package/dist/{directives-d1rEbW1A.js → directives-Dj8jlv-Q.js} +3 -3
- package/dist/directives-Dj8jlv-Q.js.map +1 -0
- package/dist/directives.cjs +1 -1
- package/dist/directives.js +2 -2
- package/dist/discovery.service-CIa3Eeuk.cjs.map +1 -1
- package/dist/discovery.service-DZFxtRwW.js.map +1 -1
- package/dist/divider-B3v33OnX.cjs +57 -0
- package/dist/divider-B3v33OnX.cjs.map +1 -0
- package/dist/divider-BJHW3q11.js +89 -0
- package/dist/divider-BJHW3q11.js.map +1 -0
- package/dist/divider.cjs +1 -1
- package/dist/divider.js +1 -1
- package/dist/dropdown.cjs +40 -40
- package/dist/dropdown.cjs.map +1 -1
- package/dist/dropdown.js +41 -41
- package/dist/dropdown.js.map +1 -1
- package/dist/{expand-DNrWuG_-.js → expand-BT8mOu8Q.js} +103 -97
- package/dist/expand-BT8mOu8Q.js.map +1 -0
- package/dist/expand-D0YdR9nR.cjs +147 -0
- package/dist/expand-D0YdR9nR.cjs.map +1 -0
- package/dist/expand.cjs +1 -1
- package/dist/expand.js +1 -1
- package/dist/fab.cjs +1 -1
- package/dist/fab.cjs.map +1 -1
- package/dist/fab.js +2 -2
- package/dist/fab.js.map +1 -1
- package/dist/{float-V7VQKTb8.cjs → float-BPQlDyai.cjs} +1 -1
- package/dist/{float-V7VQKTb8.cjs.map → float-BPQlDyai.cjs.map} +1 -1
- package/dist/{float-C_CMle0q.js → float-BQcxj3i_.js} +2 -2
- package/dist/{float-C_CMle0q.js.map → float-BQcxj3i_.js.map} +1 -1
- package/dist/float.cjs +1 -1
- package/dist/float.js +1 -1
- package/dist/{form-DaaAQd2A.cjs → form-CoWFnClb.cjs} +8 -13
- package/dist/form-CoWFnClb.cjs.map +1 -0
- package/dist/{form-CMgYSZ3y.js → form-hC2LvCHX.js} +10 -15
- package/dist/form-hC2LvCHX.js.map +1 -0
- package/dist/form.cjs +12 -13
- package/dist/form.cjs.map +1 -1
- package/dist/form.js +23 -24
- package/dist/form.js.map +1 -1
- package/dist/gravity-6pL6CfIr.cjs.map +1 -1
- package/dist/gravity-sVK3zGBF.js.map +1 -1
- package/dist/handover/agent-runtime-followups.md +1 -1
- package/dist/handover/agent-runtime-v1.md +3 -3
- package/dist/{hashContent-iRZJJWtE.cjs.map → hashContent--s09Ed_g.cjs.map} +1 -1
- package/dist/{hashContent-BqU6v1Xr.js.map → hashContent-CAvrQ56N.js.map} +1 -1
- package/dist/icons-BeGKDZ-k.cjs +22 -0
- package/dist/icons-BeGKDZ-k.cjs.map +1 -0
- package/dist/{icons-mbpHO_73.js → icons-DEJnIxml.js} +20 -22
- package/dist/icons-DEJnIxml.js.map +1 -0
- package/dist/icons.cjs +1 -1
- package/dist/icons.js +1 -1
- package/dist/{iframe-88SN5JPu.cjs → iframe-BkSukM9C.cjs} +9 -9
- package/dist/iframe-BkSukM9C.cjs.map +1 -0
- package/dist/{iframe-U3P1DnQv.js → iframe-V3S-bwEY.js} +10 -10
- package/dist/iframe-V3S-bwEY.js.map +1 -0
- package/dist/iframe.cjs +1 -1
- package/dist/iframe.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +61 -60
- package/dist/{input-CPWvGjE4.js → input-CPFCSQld.js} +3 -10
- package/dist/input-CPFCSQld.js.map +1 -0
- package/dist/{input-BY4Korc5.cjs → input-DSfwfhhj.cjs} +2 -9
- package/dist/input-DSfwfhhj.cjs.map +1 -0
- package/dist/input-chip-BUuFJUky.cjs +129 -0
- package/dist/input-chip-BUuFJUky.cjs.map +1 -0
- package/dist/{input-chip-CCZ3i3Sf.js → input-chip-C3a1fwKB.js} +87 -104
- package/dist/input-chip-C3a1fwKB.js.map +1 -0
- package/dist/input.cjs +1 -1
- package/dist/input.js +1 -1
- package/dist/json.cjs +5 -1
- package/dist/json.cjs.map +1 -1
- package/dist/json.js +8 -4
- package/dist/json.js.map +1 -1
- package/dist/kbd.cjs +28 -28
- package/dist/kbd.cjs.map +1 -1
- package/dist/kbd.js +29 -29
- package/dist/kbd.js.map +1 -1
- package/dist/{layout-BhfC26Ks.cjs → layout-CdyHy_oX.cjs} +1 -1
- package/dist/layout-CdyHy_oX.cjs.map +1 -0
- package/dist/{layout-DC0Npqu7.js → layout-k6fOkpif.js} +1 -1
- package/dist/layout-k6fOkpif.js.map +1 -0
- package/dist/layout.cjs +26 -26
- package/dist/layout.cjs.map +1 -1
- package/dist/layout.js +27 -27
- package/dist/layout.js.map +1 -1
- package/dist/lazy-BaAiIUru.js.map +1 -1
- package/dist/lazy-C-7a4FAe.cjs.map +1 -1
- package/dist/{lightbox-BSwWvDQc.js → lightbox-DIG0VLOK.js} +8 -14
- package/dist/lightbox-DIG0VLOK.js.map +1 -0
- package/dist/{lightbox-KrZQH9w9.cjs → lightbox-E5rgd-hu.cjs} +7 -13
- package/dist/lightbox-E5rgd-hu.cjs.map +1 -0
- package/dist/lightbox.cjs +1 -1
- package/dist/lightbox.js +1 -1
- package/dist/list-BRz0rDSH.cjs +47 -0
- package/dist/list-BRz0rDSH.cjs.map +1 -0
- package/dist/{list-BwGtAAfi.js → list-NrOYDPBo.js} +48 -34
- package/dist/list-NrOYDPBo.js.map +1 -0
- package/dist/list.cjs +1 -1
- package/dist/list.js +1 -1
- package/dist/magnetic-DKtc4umC.cjs.map +1 -1
- package/dist/magnetic-DaOOv5Dz.js.map +1 -1
- package/dist/{menu-DX8d96x-.js → menu-B1Ei9SVj.js} +12 -12
- package/dist/menu-B1Ei9SVj.js.map +1 -0
- package/dist/{menu-jT_yAk5V.cjs → menu-Duvl66Nl.cjs} +10 -10
- package/dist/menu-Duvl66Nl.cjs.map +1 -0
- package/dist/menu.cjs +1 -1
- package/dist/menu.js +1 -1
- package/dist/{mixins-XGVIOvKt.cjs → mixins-Cjn20BQH.cjs} +42 -170
- package/dist/mixins-Cjn20BQH.cjs.map +1 -0
- package/dist/{mixins-COeG4DiX.js → mixins-q4KAL8Xr.js} +43 -177
- package/dist/mixins-q4KAL8Xr.js.map +1 -0
- package/dist/mixins.cjs +1 -1
- package/dist/mixins.js +2 -2
- 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.cjs +2 -4
- package/dist/navigation-rail.cjs.map +1 -1
- package/dist/navigation-rail.js +3 -5
- package/dist/navigation-rail.js.map +1 -1
- package/dist/{notification-CAJVpLne.js → notification-COhUhUCr.js} +5 -7
- package/dist/notification-COhUhUCr.js.map +1 -0
- package/dist/{notification-DO3VXceY.cjs → notification-DsdA_MJe.cjs} +2 -4
- package/dist/notification-DsdA_MJe.cjs.map +1 -0
- package/dist/notification.cjs +1 -1
- package/dist/notification.js +1 -1
- package/dist/{option-JISY0wZJ.js → option-BIzgTbXz.js} +20 -20
- package/dist/option-BIzgTbXz.js.map +1 -0
- package/dist/option-C5hhqR2z.cjs +43 -0
- package/dist/option-C5hhqR2z.cjs.map +1 -0
- package/dist/option.cjs +1 -1
- package/dist/option.js +1 -1
- package/dist/{overlay-B1jVf-ge.cjs → overlay-BzgF8P7i.cjs} +48 -41
- package/dist/overlay-BzgF8P7i.cjs.map +1 -0
- package/dist/{overlay-CT-tMHDX.js → overlay-LoRRemny.js} +52 -45
- package/dist/overlay-LoRRemny.js.map +1 -0
- package/dist/overlay-stack-Bdr9lOqi.cjs.map +1 -1
- package/dist/overlay-stack-D2rgxQLh.js.map +1 -1
- package/dist/overlay.cjs +1 -1
- package/dist/{overlay.confirm-body-Dn-Zgogx.js → overlay.confirm-body-D0b1MoCw.js} +30 -45
- package/dist/overlay.confirm-body-D0b1MoCw.js.map +1 -0
- package/dist/{overlay.confirm-body-mYDYoJL8.cjs → overlay.confirm-body-DCneq73Z.cjs} +22 -37
- package/dist/overlay.confirm-body-DCneq73Z.cjs.map +1 -0
- package/dist/overlay.js +3 -3
- package/dist/{overlay.service-yqTOyLlr.js → overlay.service-BuUeti6X.js} +2 -2
- package/dist/overlay.service-BuUeti6X.js.map +1 -0
- package/dist/{overlay.service-BQmva9GY.cjs → overlay.service-MMTiW2T3.cjs} +1 -1
- package/dist/overlay.service-MMTiW2T3.cjs.map +1 -0
- package/dist/{progress-CGWozq_n.js → progress-D7n3SKAO.js} +50 -50
- package/dist/progress-D7n3SKAO.js.map +1 -0
- package/dist/progress-DsCnFsH5.cjs +51 -0
- package/dist/progress-DsCnFsH5.cjs.map +1 -0
- package/dist/progress.cjs +1 -1
- package/dist/progress.js +1 -1
- package/dist/{radio-group-DoSX5D2V.cjs → radio-group-CaAjg9UV.cjs} +1 -1
- package/dist/radio-group-CaAjg9UV.cjs.map +1 -0
- package/dist/{radio-group-CXkq6qAF.js → radio-group-Drpl6Pl8.js} +2 -2
- package/dist/radio-group-Drpl6Pl8.js.map +1 -0
- package/dist/radio-group.cjs +1 -1
- package/dist/radio-group.js +1 -1
- package/dist/range.cjs +4 -2
- package/dist/range.cjs.map +1 -1
- package/dist/range.js +5 -3
- package/dist/range.js.map +1 -1
- package/dist/reduced-motion-D-L12p7G.js.map +1 -1
- package/dist/reduced-motion-Ds-HjMzn.cjs.map +1 -1
- package/dist/{rxjs-utils-Csnks202.cjs.map → rxjs-utils-4P2v57ke.cjs.map} +1 -1
- package/dist/{rxjs-utils-d-ivVN84.js.map → rxjs-utils-JMFdgQSl.js.map} +1 -1
- package/dist/rxjs-utils.cjs +1 -1
- package/dist/rxjs-utils.js +1 -1
- package/dist/search-DPKoC-dT.cjs.map +1 -1
- package/dist/search-MvIBA93K.js.map +1 -1
- package/dist/{select-CU90i50_.js → select-CTXkrrVZ.js} +13 -13
- package/dist/select-CTXkrrVZ.js.map +1 -0
- package/dist/select-DcLcpPCh.cjs +56 -0
- package/dist/select-DcLcpPCh.cjs.map +1 -0
- package/dist/select.cjs +1 -1
- package/dist/select.js +1 -1
- package/dist/skeleton.cjs +37 -33
- package/dist/skeleton.cjs.map +1 -1
- package/dist/skeleton.js +38 -34
- package/dist/skeleton.js.map +1 -1
- package/dist/skills/schmancy/surface.md +79 -39
- package/dist/skills/surface.md +79 -39
- package/dist/slider.cjs +31 -31
- package/dist/slider.cjs.map +1 -1
- package/dist/slider.js +32 -32
- package/dist/slider.js.map +1 -1
- package/dist/{sound.service-m8WjOhjn.js → sound.service-AJwuk3yr.js} +1 -1
- package/dist/sound.service-AJwuk3yr.js.map +1 -0
- package/dist/{sound.service-Qhr8nCeG.cjs → sound.service-CVsxhQkX.cjs} +1 -1
- package/dist/sound.service-CVsxhQkX.cjs.map +1 -0
- package/dist/{splash-screen-Cs3dbPN3.js → splash-screen-DANfqvlo.js} +23 -26
- package/dist/splash-screen-DANfqvlo.js.map +1 -0
- package/dist/splash-screen-K74cgU6S.cjs +38 -0
- package/dist/splash-screen-K74cgU6S.cjs.map +1 -0
- package/dist/splash-screen.cjs +1 -1
- package/dist/splash-screen.js +1 -1
- package/dist/{src-CCVbLLgC.js → src-DAtcPmCb.js} +295 -389
- package/dist/src-DAtcPmCb.js.map +1 -0
- package/dist/src-DuRvYagm.cjs +237 -0
- package/dist/src-DuRvYagm.cjs.map +1 -0
- package/dist/{state--x58-AuK.cjs → state-BWQiqN6I.cjs} +1 -1
- package/dist/state-BWQiqN6I.cjs.map +1 -0
- package/dist/{state-QSwQ61sA.js → state-DBA_gzJO.js} +1 -1
- package/dist/state-DBA_gzJO.js.map +1 -0
- package/dist/state.cjs +1 -1
- package/dist/state.js +2 -2
- package/dist/steps.cjs +20 -12
- package/dist/steps.cjs.map +1 -1
- package/dist/steps.js +21 -13
- package/dist/steps.js.map +1 -1
- package/dist/surface-COBvWWFb.cjs +7 -0
- package/dist/surface-COBvWWFb.cjs.map +1 -0
- package/dist/{surface-cqMsHJHM.js → surface-DXk1X1tL.js} +9 -9
- package/dist/surface-DXk1X1tL.js.map +1 -0
- package/dist/surface.cjs +1 -1
- package/dist/surface.js +1 -1
- package/dist/switch.cjs +13 -4
- package/dist/switch.cjs.map +1 -1
- package/dist/switch.js +14 -5
- package/dist/switch.js.map +1 -1
- package/dist/table.cjs +4 -10
- package/dist/table.cjs.map +1 -1
- package/dist/table.js +5 -11
- package/dist/table.js.map +1 -1
- package/dist/{tabs-Ib0Mh__1.js → tabs-BYhFWnsx.js} +7 -7
- package/dist/tabs-BYhFWnsx.js.map +1 -0
- package/dist/{tabs-Dk9UDWpq.cjs → tabs-CJwB0fr0.cjs} +6 -6
- package/dist/tabs-CJwB0fr0.cjs.map +1 -0
- package/dist/tabs.cjs +1 -1
- package/dist/tabs.js +1 -1
- package/dist/teleport.cjs +1 -1
- package/dist/teleport.js +1 -1
- package/dist/{textarea-CcRsw08B.js → textarea-BjDx1w2g.js} +37 -41
- package/dist/textarea-BjDx1w2g.js.map +1 -0
- package/dist/{textarea-Cntd9tfV.cjs → textarea-CGgznhd6.cjs} +36 -40
- package/dist/textarea-CGgznhd6.cjs.map +1 -0
- package/dist/textarea.cjs +1 -1
- package/dist/textarea.js +1 -1
- package/dist/{theme-wwFbvp5e.cjs → theme-BVul7lHS.cjs} +6 -6
- package/dist/{theme-wwFbvp5e.cjs.map → theme-BVul7lHS.cjs.map} +1 -1
- package/dist/{theme-CKYXG0le.js → theme-Dvm5J8nh.js} +11 -11
- package/dist/{theme-CKYXG0le.js.map → theme-Dvm5J8nh.js.map} +1 -1
- package/dist/{theme-button-iLqT56KA.js → theme-button-Bko5ohFP.js} +2 -2
- package/dist/{theme-button-iLqT56KA.js.map → theme-button-Bko5ohFP.js.map} +1 -1
- package/dist/{theme-button-DE9Lrl7m.cjs → theme-button-YLY7zR1c.cjs} +1 -1
- package/dist/{theme-button-DE9Lrl7m.cjs.map → theme-button-YLY7zR1c.cjs.map} +1 -1
- package/dist/theme-button.cjs +1 -1
- package/dist/theme-button.js +1 -1
- package/dist/theme.cjs +1 -1
- package/dist/{theme.interface-CSt7JUBD.cjs.map → theme.interface-B-qxDsZQ.cjs.map} +1 -1
- package/dist/{theme.interface-odQEpZZH.js.map → theme.interface-B7caS5cg.js.map} +1 -1
- package/dist/theme.js +4 -4
- package/dist/{theme.service-5RjyR7Sy.js → theme.service-D94nm7Bf.js} +1 -1
- package/dist/theme.service-D94nm7Bf.js.map +1 -0
- package/dist/{theme.service-DA6KY52G.cjs → theme.service-h2fXQq7x.cjs} +1 -1
- package/dist/theme.service-h2fXQq7x.cjs.map +1 -0
- package/dist/tooltip.cjs.map +1 -1
- package/dist/tooltip.js.map +1 -1
- package/dist/tree.cjs +14 -14
- package/dist/tree.cjs.map +1 -1
- package/dist/tree.js +15 -15
- package/dist/tree.js.map +1 -1
- package/dist/types.cjs +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.js +19 -2
- package/dist/types.js.map +1 -1
- package/dist/typewriter.cjs.map +1 -1
- package/dist/typewriter.js.map +1 -1
- package/dist/typography-ByF2k5yW.js +358 -0
- package/dist/typography-ByF2k5yW.js.map +1 -0
- package/dist/typography-Cfav17it.cjs +282 -0
- package/dist/typography-Cfav17it.cjs.map +1 -0
- package/dist/typography.cjs +1 -1
- package/dist/typography.js +1 -1
- package/dist/utils-DIXndz6Q.cjs.map +1 -0
- package/dist/utils-dSPH7Oh9.js.map +1 -0
- package/dist/utils.cjs +1 -1
- package/dist/utils.js +1 -1
- package/dist/visually-hidden.cjs +13 -13
- package/dist/visually-hidden.cjs.map +1 -1
- package/dist/visually-hidden.js +14 -14
- package/dist/visually-hidden.js.map +1 -1
- package/dist/window-Br1OmpL-.cjs +67 -0
- package/dist/window-Br1OmpL-.cjs.map +1 -0
- package/dist/{window-Db5ZYY6t.js → window-CCmN4but.js} +28 -20
- package/dist/window-CCmN4but.js.map +1 -0
- package/dist/window.cjs +1 -1
- package/dist/window.js +1 -1
- package/package.json +1 -1
- package/skills/schmancy/surface.md +79 -39
- package/src/area/area.component.ts +249 -163
- package/src/area/area.service.test.ts +994 -1006
- package/src/area/area.service.ts +76 -72
- package/src/area/index.ts +7 -7
- package/src/area/lazy.ts +39 -42
- package/src/area/route.component.ts +54 -52
- package/src/area/router.types.ts +7 -7
- package/src/audio/emotional-sounds.ts +880 -801
- package/src/audio/sound.service.ts +26 -5
- package/src/avatar/avatar.ts +4 -4
- package/src/badge/badge.ts +60 -209
- package/src/badge/index.ts +1 -1
- package/src/boat/boat.ts +2 -4
- package/src/breadcrumb/breadcrumb.ts +37 -32
- package/src/busy/busy.ts +15 -12
- package/src/busy/index.ts +2 -2
- package/src/busy/spinner.ts +132 -119
- package/src/button/button.test.ts +5 -1
- package/src/button/button.ts +113 -72
- package/src/button/icon-button.ts +64 -46
- package/src/button/index.ts +2 -2
- package/src/calendar/calendar.test.ts +504 -0
- package/src/calendar/calendar.ts +587 -0
- package/src/calendar/index.ts +2 -0
- package/src/card/actions.ts +11 -9
- package/src/card/card.ts +79 -77
- package/src/card/content.ts +8 -6
- package/src/card/index.ts +4 -4
- package/src/card/media.ts +50 -50
- package/src/chips/assist-chip.ts +1 -1
- package/src/chips/chips.ts +1 -1
- package/src/chips/filter-chip.ts +1 -1
- package/src/chips/index.ts +1 -1
- package/src/chips/input-chip.ts +1 -1
- package/src/chips/suggestion-chip.ts +1 -1
- package/src/connectivity/connectivity-status.ts +91 -65
- package/src/content-drawer/drawer.service.ts +47 -36
- package/src/content-drawer/drawer.ts +31 -18
- package/src/content-drawer/index.ts +5 -5
- package/src/content-drawer/main.ts +9 -7
- package/src/content-drawer/sheet.ts +8 -6
- package/src/date-range-inline/date-range-inline.ts +523 -522
- package/src/date-range-inline/index.ts +2 -2
- package/src/delay/index.ts +1 -1
- package/src/details/details.ts +119 -105
- package/src/details/index.ts +1 -1
- package/src/directives/ai-badge.ts +1 -5
- package/src/directives/animate-text.ts +43 -31
- package/src/directives/art/effects/howl.ts +1 -4
- package/src/directives/art/effects/samwa.ts +11 -5
- package/src/directives/art/effects/snow.ts +1 -2
- package/src/directives/battery.ts +21 -12
- package/src/directives/confirm-click.ts +9 -17
- package/src/directives/cursor-glow.ts +1 -1
- package/src/directives/cycle-text.ts +7 -21
- package/src/directives/drag.ts +50 -45
- package/src/directives/fyi.ts +1 -6
- package/src/directives/gravity.ts +10 -8
- package/src/directives/hummingbird.ts +256 -107
- package/src/directives/index.ts +29 -29
- package/src/directives/intersect.ts +11 -11
- package/src/directives/layout.ts +25 -36
- package/src/directives/liquid.ts +4 -10
- package/src/directives/living-border.ts +7 -5
- package/src/directives/long-press.ts +2 -1
- package/src/directives/magnetic.ts +7 -6
- package/src/directives/nebula.ts +34 -28
- package/src/directives/overflow-within.ts +18 -20
- package/src/directives/reduced-motion.ts +9 -9
- package/src/directives/reveal.ts +193 -195
- package/src/directives/ripple.ts +9 -7
- package/src/directives/urgent.ts +3 -1
- package/src/directives/working-snake.ts +1 -1
- package/src/discovery/discovery.service.ts +198 -210
- package/src/discovery/index.ts +1 -1
- package/src/divider/divider.ts +49 -47
- package/src/divider/index.ts +1 -1
- package/src/dropdown/dropdown-content.ts +42 -40
- package/src/dropdown/index.ts +2 -2
- package/src/expand/expand-root.component.ts +70 -61
- package/src/expand/expand.component.ts +48 -43
- package/src/fab/fab.test.ts +1 -2
- package/src/fab/fab.ts +2 -4
- package/src/form/fields/autocomplete/autocomplete.scss +6 -2
- package/src/form/fields/autocomplete/autocomplete.ts +712 -724
- package/src/form/fields/autocomplete/index.ts +1 -1
- package/src/form/fields/checkbox/checkbox.ts +1 -4
- package/src/form/fields/chips/assist-chip.ts +69 -72
- package/src/form/fields/chips/chips.ts +14 -15
- package/src/form/fields/chips/filter-chip.ts +36 -32
- package/src/form/fields/chips/index.ts +5 -5
- package/src/form/fields/chips/input-chip.ts +130 -142
- package/src/form/fields/chips/suggestion-chip.ts +69 -72
- package/src/form/fields/date-range/date-range-dialog.ts +141 -194
- package/src/form/fields/date-range/date-range-helpers.ts +63 -64
- package/src/form/fields/date-range/date-range.test.ts +359 -122
- package/src/form/fields/date-range/date-range.ts +319 -395
- package/src/form/fields/date-range/index.ts +2 -2
- package/src/form/fields/input/index.ts +8 -8
- package/src/form/fields/input/input.scss +30 -26
- package/src/form/fields/input/input.test.ts +4 -1
- package/src/form/fields/input/input.ts +4 -20
- package/src/form/fields/radio-group/index.ts +2 -2
- package/src/form/fields/radio-group/radio-button.ts +8 -8
- package/src/form/fields/radio-group/radio-group.ts +4 -1
- package/src/form/fields/range/range.ts +3 -1
- package/src/form/fields/select/index.ts +2 -2
- package/src/form/fields/select/select.ts +51 -45
- package/src/form/fields/switch/switch.ts +13 -7
- package/src/form/fields/textarea/index.ts +1 -1
- package/src/form/fields/textarea/textarea.ts +44 -49
- package/src/form/form-summary.ts +15 -14
- package/src/form/form.test.ts +0 -1
- package/src/form/form.ts +11 -23
- package/src/icons/icon.ts +25 -25
- package/src/icons/index.ts +1 -1
- package/src/iframe/iframe.ts +11 -9
- package/src/index.ts +1 -0
- package/src/json/json.ts +9 -2
- package/src/kbd/kbd.ts +30 -28
- package/src/layout/scroll/index.ts +1 -1
- package/src/layout/scroll/scroll.ts +54 -54
- package/src/lightbox/lightbox-service.ts +27 -18
- package/src/lightbox/lightbox.directive.ts +2 -1
- package/src/lightbox/lightbox.ts +21 -38
- package/src/list/index.ts +3 -3
- package/src/list/list-item.ts +32 -26
- package/src/list/list.ts +13 -8
- package/src/menu/index.ts +2 -2
- package/src/menu/menu-item.ts +7 -5
- package/src/menu/menu.ts +8 -6
- package/src/nav-drawer/appbar.ts +9 -7
- package/src/nav-drawer/content.ts +10 -8
- package/src/nav-drawer/drawer.ts +29 -25
- package/src/nav-drawer/index.ts +6 -6
- package/src/navigation-bar/index.ts +2 -2
- package/src/navigation-bar/navigation-bar-item.ts +127 -118
- package/src/navigation-bar/navigation-bar.ts +103 -91
- package/src/navigation-rail/index.ts +2 -2
- package/src/navigation-rail/navigation-rail.ts +21 -22
- package/src/notification/index.ts +6 -6
- package/src/notification/notification-service.ts +1 -2
- package/src/notification/notification.scss +5 -1
- package/src/notification/notification.ts +1 -3
- package/src/notification/notify.ts +204 -207
- package/src/option/index.ts +1 -1
- package/src/option/option.ts +26 -25
- package/src/overlay/overlay.animations.ts +4 -14
- package/src/overlay/overlay.component.ts +110 -131
- package/src/overlay/overlay.confirm-body.ts +26 -48
- package/src/overlay/overlay.gestures.ts +8 -10
- package/src/overlay/overlay.layout.ts +1 -4
- package/src/overlay/overlay.positioning.ts +4 -15
- package/src/overlay/overlay.service.ts +9 -24
- package/src/overlay/overlay.stack.test.ts +4 -1
- package/src/overlay/overlay.stack.ts +4 -4
- package/src/overlay/overlay.types.ts +11 -20
- package/src/progress/index.ts +1 -1
- package/src/progress/progress.ts +135 -133
- package/src/rxjs-utils/index.ts +6 -6
- package/src/rxjs-utils/waitForElement.ts +20 -20
- package/src/rxjs-utils/waitForElementAll.ts +21 -21
- package/src/rxjs-utils/waitForElements.ts +27 -27
- package/src/rxjs-utils/waitForElementsAll.ts +27 -29
- package/src/rxjs-utils/waitUntil.ts +7 -12
- package/src/skeleton/skeleton.ts +39 -33
- package/src/slider/index.ts +2 -2
- package/src/slider/slide.ts +14 -12
- package/src/slider/slider.ts +24 -22
- package/src/splash-screen/index.ts +1 -1
- package/src/splash-screen/splash-screen.ts +26 -27
- package/src/state/active-host.ts +4 -5
- package/src/state/index.ts +34 -53
- package/src/state/persist.ts +14 -11
- package/src/state/schmancy-context.ts +88 -88
- package/src/state/state.test-d.ts +3 -13
- package/src/state/state.test.ts +1 -4
- package/src/steps/index.ts +3 -3
- package/src/steps/schmancy-step.ts +41 -31
- package/src/steps/schmancy-steps.ts +7 -5
- package/src/surface/index.ts +1 -1
- package/src/surface/surface.styles.ts +55 -191
- package/src/surface/surface.ts +18 -16
- package/src/table/index.ts +2 -2
- package/src/table/row.ts +1 -4
- package/src/table/table.ts +2 -5
- package/src/tabs/index.ts +2 -2
- package/src/tabs/tabs-group.ts +8 -6
- package/src/teleport/index.ts +2 -2
- package/src/test-utils/a11y.ts +1 -3
- package/src/theme/index.ts +17 -17
- package/src/theme/theme-audio-player.ts +18 -16
- package/src/theme/theme-controller-boat.ts +1 -1
- package/src/theme/theme-controller.ts +36 -32
- package/src/theme/theme.component.ts +5 -9
- package/src/theme/theme.events.ts +1 -1
- package/src/theme/theme.format.ts +7 -7
- package/src/theme/theme.service.ts +453 -468
- package/src/theme/theme.style.css +78 -23
- package/src/theme-button/index.ts +1 -1
- package/src/tooltip/tooltip.directive.ts +1 -1
- package/src/tree/index.ts +1 -1
- package/src/tree/tree.ts +24 -16
- package/src/types/surface.ts +38 -44
- package/src/typewriter/typewriter.directive.ts +30 -39
- package/src/typography/typography.ts +289 -269
- package/src/utils/animation.ts +2 -8
- package/src/utils/index.ts +6 -6
- package/src/utils/number.ts +480 -517
- package/src/utils/overlay-stack.ts +1 -3
- package/src/utils/search.ts +5 -9
- package/src/visually-hidden/visually-hidden.ts +15 -13
- package/src/window/window-manager.ts +6 -1
- package/src/window/window-position.ts +7 -5
- package/src/window/window.ts +146 -114
- package/types/mixins/surface.mixin.d.ts +8 -14
- package/types/src/badge/badge.d.ts +15 -48
- package/types/src/calendar/calendar.d.ts +108 -0
- package/types/src/calendar/calendar.test.d.ts +1 -0
- package/types/src/calendar/index.d.ts +2 -0
- package/types/src/directives/cursor-glow.d.ts +1 -1
- package/types/src/directives/hummingbird.d.ts +3 -3
- package/types/src/form/fields/date-range/date-range-dialog.d.ts +24 -28
- package/types/src/form/fields/date-range/date-range.d.ts +35 -66
- package/types/src/form/fields/date-range/date-range.test.d.ts +1 -0
- package/types/src/form/fields/date-range/index.d.ts +1 -1
- package/types/src/index.d.ts +1 -0
- package/types/src/surface/surface.d.ts +9 -7
- package/types/src/surface/surface.styles.d.ts +15 -20
- package/types/src/types/surface.d.ts +17 -22
- package/types/src/utils/number.d.ts +1 -1
- package/types/src/window/window.d.ts +0 -1
- package/dist/SchmancyElement-D9WA9FP9.cjs +0 -2
- package/dist/SchmancyElement-D9WA9FP9.cjs.map +0 -1
- package/dist/SchmancyElement-OWgz9ePG.js +0 -286
- package/dist/SchmancyElement-OWgz9ePG.js.map +0 -1
- package/dist/area-BiM7V2ns.js.map +0 -1
- package/dist/area-C7XjCoet.cjs +0 -21
- package/dist/area-C7XjCoet.cjs.map +0 -1
- package/dist/audio-CxO_j__6.js.map +0 -1
- package/dist/audio-xXFfMPCS.cjs.map +0 -1
- package/dist/autocomplete-DD7Hd59N.cjs +0 -115
- package/dist/autocomplete-DD7Hd59N.cjs.map +0 -1
- package/dist/autocomplete-DUBY9RtH.js.map +0 -1
- package/dist/busy-BjsO3y2A.js +0 -173
- package/dist/busy-BjsO3y2A.js.map +0 -1
- package/dist/busy-UbCGkTAi.cjs +0 -134
- package/dist/busy-UbCGkTAi.cjs.map +0 -1
- package/dist/button-BTpxQ1Kd.cjs.map +0 -1
- package/dist/button-D7QHfYf4.js.map +0 -1
- package/dist/card-DCdtJ5Dy.js.map +0 -1
- package/dist/card-rprhCYIC.cjs +0 -177
- package/dist/card-rprhCYIC.cjs.map +0 -1
- package/dist/chips-C5bpgWyf.js.map +0 -1
- package/dist/chips-DVes-BSz.cjs.map +0 -1
- package/dist/date-range-DDUuBlJ6.cjs +0 -142
- package/dist/date-range-DDUuBlJ6.cjs.map +0 -1
- package/dist/date-range-IPlbrhwW.js +0 -966
- package/dist/date-range-IPlbrhwW.js.map +0 -1
- package/dist/date-range-inline-DPqY9YYf.js.map +0 -1
- package/dist/date-range-inline-Dx4Reboo.cjs.map +0 -1
- package/dist/details-BnleHmYe.js.map +0 -1
- package/dist/details-Bx2jSJxG.cjs.map +0 -1
- package/dist/directives-CYf2fAdA.cjs.map +0 -1
- package/dist/directives-d1rEbW1A.js.map +0 -1
- package/dist/divider-CimQJVr3.cjs +0 -57
- package/dist/divider-CimQJVr3.cjs.map +0 -1
- package/dist/divider-Cr-rx3vA.js +0 -89
- package/dist/divider-Cr-rx3vA.js.map +0 -1
- package/dist/expand-DNrWuG_-.js.map +0 -1
- package/dist/expand-_cp8oBjp.cjs +0 -141
- package/dist/expand-_cp8oBjp.cjs.map +0 -1
- package/dist/form-CMgYSZ3y.js.map +0 -1
- package/dist/form-DaaAQd2A.cjs.map +0 -1
- package/dist/icons-C2RkSXjP.cjs +0 -24
- package/dist/icons-C2RkSXjP.cjs.map +0 -1
- package/dist/icons-mbpHO_73.js.map +0 -1
- package/dist/iframe-88SN5JPu.cjs.map +0 -1
- package/dist/iframe-U3P1DnQv.js.map +0 -1
- package/dist/input-BY4Korc5.cjs.map +0 -1
- package/dist/input-CPWvGjE4.js.map +0 -1
- package/dist/input-chip-CCZ3i3Sf.js.map +0 -1
- package/dist/input-chip-kytMdbaM.cjs +0 -146
- package/dist/input-chip-kytMdbaM.cjs.map +0 -1
- package/dist/layout-BhfC26Ks.cjs.map +0 -1
- package/dist/layout-DC0Npqu7.js.map +0 -1
- package/dist/lightbox-BSwWvDQc.js.map +0 -1
- package/dist/lightbox-KrZQH9w9.cjs.map +0 -1
- package/dist/list-BwGtAAfi.js.map +0 -1
- package/dist/list-DIs02A3d.cjs +0 -40
- package/dist/list-DIs02A3d.cjs.map +0 -1
- package/dist/menu-DX8d96x-.js.map +0 -1
- package/dist/menu-jT_yAk5V.cjs.map +0 -1
- package/dist/mixins-COeG4DiX.js.map +0 -1
- package/dist/mixins-XGVIOvKt.cjs.map +0 -1
- package/dist/notification-CAJVpLne.js.map +0 -1
- package/dist/notification-DO3VXceY.cjs.map +0 -1
- package/dist/option-BNo1Zs-l.cjs +0 -43
- package/dist/option-BNo1Zs-l.cjs.map +0 -1
- package/dist/option-JISY0wZJ.js.map +0 -1
- package/dist/overlay-B1jVf-ge.cjs.map +0 -1
- package/dist/overlay-CT-tMHDX.js.map +0 -1
- package/dist/overlay.confirm-body-Dn-Zgogx.js.map +0 -1
- package/dist/overlay.confirm-body-mYDYoJL8.cjs.map +0 -1
- package/dist/overlay.service-BQmva9GY.cjs.map +0 -1
- package/dist/overlay.service-yqTOyLlr.js.map +0 -1
- package/dist/progress-CGWozq_n.js.map +0 -1
- package/dist/progress-DOVJhsR0.cjs +0 -51
- package/dist/progress-DOVJhsR0.cjs.map +0 -1
- package/dist/radio-group-CXkq6qAF.js.map +0 -1
- package/dist/radio-group-DoSX5D2V.cjs.map +0 -1
- package/dist/select-CObZenqg.cjs +0 -56
- package/dist/select-CObZenqg.cjs.map +0 -1
- package/dist/select-CU90i50_.js.map +0 -1
- package/dist/sound.service-Qhr8nCeG.cjs.map +0 -1
- package/dist/sound.service-m8WjOhjn.js.map +0 -1
- package/dist/splash-screen-Ca6Ew8p6.cjs +0 -41
- package/dist/splash-screen-Ca6Ew8p6.cjs.map +0 -1
- package/dist/splash-screen-Cs3dbPN3.js.map +0 -1
- package/dist/src-CCVbLLgC.js.map +0 -1
- package/dist/src-CpftzdZV.cjs +0 -264
- package/dist/src-CpftzdZV.cjs.map +0 -1
- package/dist/state--x58-AuK.cjs.map +0 -1
- package/dist/state-QSwQ61sA.js.map +0 -1
- package/dist/surface-bTjOiq8n.cjs +0 -7
- package/dist/surface-bTjOiq8n.cjs.map +0 -1
- package/dist/surface-cqMsHJHM.js.map +0 -1
- package/dist/tabs-Dk9UDWpq.cjs.map +0 -1
- package/dist/tabs-Ib0Mh__1.js.map +0 -1
- package/dist/textarea-CcRsw08B.js.map +0 -1
- package/dist/textarea-Cntd9tfV.cjs.map +0 -1
- package/dist/theme.service-5RjyR7Sy.js.map +0 -1
- package/dist/theme.service-DA6KY52G.cjs.map +0 -1
- package/dist/typography-DeEYdMhW.js +0 -358
- package/dist/typography-DeEYdMhW.js.map +0 -1
- package/dist/typography-Tm7wSaB2.cjs +0 -282
- package/dist/typography-Tm7wSaB2.cjs.map +0 -1
- package/dist/utils-DTa3QHxk.cjs.map +0 -1
- package/dist/utils-H8wNknWC.js.map +0 -1
- package/dist/window-Db5ZYY6t.js.map +0 -1
- package/dist/window-oQqx5xqQ.cjs +0 -59
- package/dist/window-oQqx5xqQ.cjs.map +0 -1
- package/src/form/fields/date-range/date-range-presets.ts +0 -220
- package/src/form/fields/date-range/date-utils.ts +0 -58
- package/types/src/form/fields/date-range/date-range-presets.d.ts +0 -18
- package/types/src/form/fields/date-range/date-utils.d.ts +0 -15
- /package/dist/{hashContent-iRZJJWtE.cjs → hashContent--s09Ed_g.cjs} +0 -0
- /package/dist/{hashContent-BqU6v1Xr.js → hashContent-CAvrQ56N.js} +0 -0
- /package/dist/{rxjs-utils-Csnks202.cjs → rxjs-utils-4P2v57ke.cjs} +0 -0
- /package/dist/{rxjs-utils-d-ivVN84.js → rxjs-utils-JMFdgQSl.js} +0 -0
- /package/dist/{theme.interface-CSt7JUBD.cjs → theme.interface-B-qxDsZQ.cjs} +0 -0
- /package/dist/{theme.interface-odQEpZZH.js → theme.interface-B7caS5cg.js} +0 -0
- /package/dist/{utils-DTa3QHxk.cjs → utils-DIXndz6Q.cjs} +0 -0
- /package/dist/{utils-H8wNknWC.js → utils-dSPH7Oh9.js} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audio-B_0PGwYC.js","names":[],"sources":["../src/audio/emotional-sounds.ts"],"sourcesContent":["/**\n * Schmancy Emotional Sound Library\n *\n * A curated collection of soft, elegant sounds organized by emotional categories.\n * Each sound is designed to be non-intrusive, emotionally evocative, and beautiful.\n *\n * Inspired by the gentle sounds of nature - soft air, gentle chimes, and warm tones.\n *\n * @example\n * ```typescript\n * import { $sounds } from '@schmancy/audio'\n *\n * // Play a feeling\n * $sounds.play('joyful')\n * $sounds.play('relieved')\n * $sounds.play('curious')\n *\n * // Adjust volume\n * $sounds.setVolume(0.2)\n *\n * // Mute/unmute\n * $sounds.mute()\n * $sounds.unmute()\n * ```\n */\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\n/** Happy / Pleasant feelings */\nexport type HappyFeeling =\n\t| 'joyful'\n\t| 'content'\n\t| 'excited'\n\t| 'proud'\n\t| 'hopeful'\n\t| 'relieved'\n\t| 'grateful'\n\t| 'peaceful'\n\t| 'playful'\n\t| 'amused'\n\t| 'curious'\n\t| 'inspired'\n\t| 'confident'\n\t| 'loved'\n\t| 'comforted'\n\t| 'energized'\n\t| 'celebrated'\n\n/** Sad / Low feelings */\nexport type SadFeeling =\n\t| 'sad'\n\t| 'lonely'\n\t| 'disappointed'\n\t| 'heartbroken'\n\t| 'grieving'\n\t| 'hopeless'\n\t| 'empty'\n\t| 'discouraged'\n\t| 'melancholic'\n\t| 'homesick'\n\t| 'hurt'\n\t| 'miserable'\n\t| 'regretful'\n\t| 'ashamed'\n\t| 'inferior'\n\n/** Anxious / Fearful feelings */\nexport type AnxiousFeeling =\n\t| 'anxious'\n\t| 'worried'\n\t| 'afraid'\n\t| 'terrified'\n\t| 'panicked'\n\t| 'nervous'\n\t| 'uneasy'\n\t| 'insecure'\n\t| 'overwhelmed'\n\t| 'stressed'\n\t| 'tense'\n\t| 'apprehensive'\n\t| 'startled'\n\t| 'suspicious'\n\t| 'vulnerable'\n\n/** Angry / Frustrated feelings */\nexport type AngryFeeling =\n\t| 'annoyed'\n\t| 'irritated'\n\t| 'frustrated'\n\t| 'angry'\n\t| 'enraged'\n\t| 'bitter'\n\t| 'resentful'\n\t| 'jealous'\n\t| 'envious'\n\t| 'indignant'\n\t| 'impatient'\n\t| 'hostile'\n\t| 'contemptuous'\n\n/** Tired / Drained feelings */\nexport type TiredFeeling =\n\t| 'tired'\n\t| 'exhausted'\n\t| 'drained'\n\t| 'burnedOut'\n\t| 'numb'\n\t| 'bored'\n\t| 'unmotivated'\n\t| 'apathetic'\n\t| 'restless'\n\n/** Calm / Grounded feelings */\nexport type CalmFeeling =\n\t| 'calm'\n\t| 'relaxed'\n\t| 'atEase'\n\t| 'balanced'\n\t| 'stable'\n\t| 'secure'\n\t| 'safe'\n\t| 'centered'\n\t| 'grounded'\n\t| 'accepting'\n\n/** Connected / Social feelings */\nexport type ConnectedFeeling =\n\t| 'connected'\n\t| 'accepted'\n\t| 'included'\n\t| 'belonging'\n\t| 'appreciated'\n\t| 'valued'\n\t| 'respected'\n\t| 'supported'\n\t| 'protective'\n\t| 'compassionate'\n\t| 'empathetic'\n\n/** Mixed / Complicated feelings */\nexport type MixedFeeling =\n\t| 'conflicted'\n\t| 'confused'\n\t| 'ambivalent'\n\t| 'nostalgic'\n\t| 'guilty'\n\t| 'embarrassed'\n\t| 'surprised'\n\t| 'shocked'\n\t| 'awestruck'\n\t| 'skeptical'\n\n/** All feelings */\nexport type Feeling =\n\t| HappyFeeling\n\t| SadFeeling\n\t| AnxiousFeeling\n\t| AngryFeeling\n\t| TiredFeeling\n\t| CalmFeeling\n\t| ConnectedFeeling\n\t| MixedFeeling\n\n// FeelingCategory is defined in ../types/mood-audio.types.ts and re-exported\n// from ./index.ts — the canonical source.\n\n// ============================================================================\n// SOUND GENERATOR\n// ============================================================================\n\n/**\n * Emotional Sound Generator\n * Creates soft, beautiful sounds using Web Audio API\n */\nexport class EmotionalSoundGenerator {\n\tprivate audioContext: AudioContext | null = null\n\tprivate volume = 0.15\n\tprivate muted = false\n\n\tprivate getContext(): AudioContext {\n\t\tif (!this.audioContext) {\n\t\t\tconst AudioContextClass = window.AudioContext || (window as any).webkitAudioContext\n\t\t\tthis.audioContext = new AudioContextClass()\n\t\t}\n\t\t// Resume if suspended (autoplay policy)\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// CORE SOUND PRIMITIVES\n\t// ==========================================================================\n\n\t/** Soft air puff - the foundation of our sound palette */\n\tprivate puff(startTime: number, duration: number, freq: number, vol: number): void {\n\t\tconst ctx = this.getContext()\n\t\tconst bufferSize = Math.floor(ctx.sampleRate * 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 = freq\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(vol * this.volume, startTime + 0.015)\n\t\tgain.gain.exponentialRampToValueAtTime(0.001, startTime + duration)\n\n\t\tnoise.connect(filter).connect(gain).connect(ctx.destination)\n\t\tnoise.start(startTime)\n\t\tnoise.stop(startTime + duration)\n\t}\n\n\t/** Gentle tone with envelope */\n\tprivate tone(\n\t\tstartTime: number,\n\t\tduration: number,\n\t\tfreq: number,\n\t\tvol: number,\n\t\ttype: OscillatorType = 'sine',\n\t\tfreqEnd?: number,\n\t): void {\n\t\tconst ctx = this.getContext()\n\t\tconst osc = ctx.createOscillator()\n\t\tconst gain = ctx.createGain()\n\n\t\tosc.type = type\n\t\tosc.frequency.setValueAtTime(freq, startTime)\n\t\tif (freqEnd) {\n\t\t\tosc.frequency.exponentialRampToValueAtTime(freqEnd, startTime + duration * 0.8)\n\t\t}\n\n\t\tgain.gain.setValueAtTime(0, startTime)\n\t\tgain.gain.linearRampToValueAtTime(vol * this.volume, startTime + 0.02)\n\t\tgain.gain.exponentialRampToValueAtTime(0.001, startTime + duration)\n\n\t\tosc.connect(gain).connect(ctx.destination)\n\t\tosc.start(startTime)\n\t\tosc.stop(startTime + duration)\n\t}\n\n\t/** Warm filtered tone */\n\tprivate warmTone(startTime: number, duration: number, freq: number, vol: number, filterFreq = 800): void {\n\t\tconst ctx = this.getContext()\n\t\tconst osc = ctx.createOscillator()\n\t\tconst filter = ctx.createBiquadFilter()\n\t\tconst gain = ctx.createGain()\n\n\t\tosc.type = 'sine'\n\t\tosc.frequency.value = freq\n\n\t\tfilter.type = 'lowpass'\n\t\tfilter.frequency.value = filterFreq\n\n\t\tgain.gain.setValueAtTime(0, startTime)\n\t\tgain.gain.linearRampToValueAtTime(vol * this.volume, startTime + 0.03)\n\t\tgain.gain.exponentialRampToValueAtTime(0.001, startTime + duration)\n\n\t\tosc.connect(filter).connect(gain).connect(ctx.destination)\n\t\tosc.start(startTime)\n\t\tosc.stop(startTime + duration)\n\t}\n\n\t/** Shimmer - multiple soft tones */\n\tprivate shimmer(startTime: number, duration: number, baseFreq: number, vol: number): void {\n\t\tconst freqs = [baseFreq, baseFreq * 1.5, baseFreq * 2]\n\t\tfreqs.forEach((f, i) => {\n\t\t\tthis.tone(startTime + i * 0.02, duration - i * 0.02, f, vol * (1 - i * 0.2))\n\t\t})\n\t}\n\n\t// ==========================================================================\n\t// HAPPY / PLEASANT FEELINGS\n\t// ==========================================================================\n\n\tprivate playJoyful(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Double puff (excited exhale)\n\t\tthis.puff(now, 0.08, 3000, 0.3)\n\t\tthis.puff(now + 0.06, 0.1, 3500, 0.35)\n\n\t\t// Rising happy tones\n\t\tthis.tone(now + 0.02, 0.15, 784, 0.25) // G5\n\t\tthis.tone(now + 0.1, 0.2, 988, 0.3) // B5\n\t\tthis.tone(now + 0.18, 0.25, 1175, 0.25) // D6\n\t}\n\n\tprivate playContent(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Gentle satisfied sigh\n\t\tthis.puff(now, 0.2, 1500, 0.25)\n\t\tthis.warmTone(now + 0.05, 0.3, 523, 0.2) // C5\n\t\tthis.warmTone(now + 0.15, 0.35, 659, 0.15) // E5\n\t}\n\n\tprivate playExcited(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Quick ascending puffs\n\t\tthis.puff(now, 0.06, 2500, 0.25)\n\t\tthis.puff(now + 0.05, 0.06, 3000, 0.3)\n\t\tthis.puff(now + 0.1, 0.08, 3500, 0.35)\n\n\t\t// Sparkly ascending tones\n\t\tthis.tone(now + 0.02, 0.12, 880, 0.2)\n\t\tthis.tone(now + 0.08, 0.12, 1047, 0.25)\n\t\tthis.tone(now + 0.14, 0.15, 1319, 0.3)\n\t}\n\n\tprivate playProud(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Confident puff\n\t\tthis.puff(now, 0.15, 1800, 0.3)\n\n\t\t// Strong rising chord\n\t\tthis.tone(now + 0.05, 0.25, 523, 0.25) // C5\n\t\tthis.tone(now + 0.08, 0.25, 659, 0.2) // E5\n\t\tthis.tone(now + 0.11, 0.3, 784, 0.25) // G5\n\t}\n\n\tprivate playHopeful(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Light ascending puff\n\t\tthis.puff(now, 0.12, 2200, 0.2)\n\n\t\t// Gentle rising tone\n\t\tthis.tone(now + 0.03, 0.3, 659, 0.2, 'sine', 880) // E5 -> A5\n\t}\n\n\tprivate playRelieved(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Long exhale\n\t\tthis.puff(now, 0.25, 1200, 0.35)\n\n\t\t// Descending release\n\t\tthis.warmTone(now + 0.1, 0.35, 659, 0.2) // E5\n\t\tthis.warmTone(now + 0.25, 0.4, 523, 0.15) // C5\n\t}\n\n\tprivate playGrateful(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Warm gentle puff\n\t\tthis.puff(now, 0.15, 1500, 0.25)\n\n\t\t// Warm embracing tones\n\t\tthis.warmTone(now + 0.05, 0.3, 440, 0.2) // A4\n\t\tthis.warmTone(now + 0.15, 0.35, 523, 0.2) // C5\n\t\tthis.warmTone(now + 0.25, 0.4, 659, 0.15) // E5\n\t}\n\n\tprivate playPeaceful(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Very soft puff\n\t\tthis.puff(now, 0.3, 800, 0.15)\n\n\t\t// Gentle sustained tone\n\t\tthis.warmTone(now + 0.1, 0.5, 392, 0.12, 500) // G4\n\t}\n\n\tprivate playPlayful(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Bouncy puffs\n\t\tthis.puff(now, 0.05, 2800, 0.2)\n\t\tthis.puff(now + 0.08, 0.05, 3200, 0.25)\n\t\tthis.puff(now + 0.14, 0.06, 2800, 0.2)\n\n\t\t// Playful tones\n\t\tthis.tone(now + 0.03, 0.1, 784, 0.2)\n\t\tthis.tone(now + 0.1, 0.08, 988, 0.25)\n\t\tthis.tone(now + 0.16, 0.12, 784, 0.2)\n\t}\n\n\tprivate playAmused(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Little chuckle puffs\n\t\tthis.puff(now, 0.04, 2500, 0.2)\n\t\tthis.puff(now + 0.06, 0.04, 2800, 0.22)\n\t\tthis.puff(now + 0.11, 0.05, 2600, 0.18)\n\n\t\t// Amused tone\n\t\tthis.tone(now + 0.05, 0.15, 880, 0.15)\n\t}\n\n\tprivate playCurious(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Questioning puff\n\t\tthis.puff(now, 0.1, 2000, 0.2)\n\n\t\t// Rising questioning tone\n\t\tthis.tone(now + 0.03, 0.2, 659, 0.2, 'sine', 880) // E5 -> A5 (question)\n\t}\n\n\tprivate playInspired(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Bright puff\n\t\tthis.puff(now, 0.1, 2500, 0.25)\n\n\t\t// Ascending shimmer\n\t\tthis.shimmer(now + 0.05, 0.3, 523, 0.2)\n\t}\n\n\tprivate playConfident(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Solid puff\n\t\tthis.puff(now, 0.12, 1500, 0.3)\n\n\t\t// Strong chord\n\t\tthis.tone(now + 0.04, 0.2, 523, 0.25) // C5\n\t\tthis.tone(now + 0.06, 0.22, 659, 0.2) // E5\n\t}\n\n\tprivate playLoved(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Warm embrace puff\n\t\tthis.puff(now, 0.2, 1000, 0.2)\n\n\t\t// Warm loving tones\n\t\tthis.warmTone(now + 0.08, 0.4, 392, 0.18, 600) // G4\n\t\tthis.warmTone(now + 0.2, 0.45, 494, 0.15, 600) // B4\n\t}\n\n\tprivate playComforted(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Soft blanket puff\n\t\tthis.puff(now, 0.25, 900, 0.18)\n\n\t\t// Gentle descending comfort\n\t\tthis.warmTone(now + 0.1, 0.35, 523, 0.15) // C5\n\t\tthis.warmTone(now + 0.25, 0.4, 440, 0.12) // A4\n\t}\n\n\tprivate playEnergized(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Quick energetic puffs\n\t\tthis.puff(now, 0.05, 3000, 0.25)\n\t\tthis.puff(now + 0.04, 0.05, 3500, 0.28)\n\n\t\t// Bright ascending tones\n\t\tthis.tone(now + 0.02, 0.1, 784, 0.2)\n\t\tthis.tone(now + 0.08, 0.12, 988, 0.25)\n\t\tthis.tone(now + 0.14, 0.15, 1175, 0.22)\n\t}\n\n\tprivate playCelebrated(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Bright celebratory chime\n\t\tthis.puff(now, 0.08, 2500, 0.2)\n\n\t\t// Triumphant ascending arpeggio (C major -> resolve)\n\t\tthis.tone(now + 0.02, 0.18, 523, 0.22) // C5\n\t\tthis.tone(now + 0.08, 0.18, 659, 0.24) // E5\n\t\tthis.tone(now + 0.14, 0.2, 784, 0.26) // G5\n\t\tthis.tone(now + 0.22, 0.3, 1047, 0.22) // C6 - resolution\n\n\t\t// Warm shimmer on resolution\n\t\tthis.shimmer(now + 0.25, 0.35, 523, 0.12)\n\t}\n\n\t// ==========================================================================\n\t// SAD / LOW FEELINGS\n\t// ==========================================================================\n\n\tprivate playSad(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Heavy sigh\n\t\tthis.puff(now, 0.3, 600, 0.25)\n\n\t\t// Descending sad tone\n\t\tthis.warmTone(now + 0.1, 0.4, 392, 0.2, 400) // G4\n\t\tthis.warmTone(now + 0.3, 0.45, 294, 0.15, 350) // D4\n\t}\n\n\tprivate playLonely(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Single isolated puff\n\t\tthis.puff(now, 0.2, 700, 0.2)\n\n\t\t// Sparse, distant tone\n\t\tthis.warmTone(now + 0.15, 0.5, 330, 0.12, 450) // E4\n\t}\n\n\tprivate playDisappointed(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Deflating puff\n\t\tthis.puff(now, 0.25, 800, 0.25)\n\n\t\t// Falling tone\n\t\tthis.tone(now + 0.08, 0.3, 523, 0.18, 'sine', 349) // C5 -> F4\n\t}\n\n\tprivate playMelancholic(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Wistful puff\n\t\tthis.puff(now, 0.3, 700, 0.18)\n\n\t\t// Bittersweet tones\n\t\tthis.warmTone(now + 0.1, 0.45, 440, 0.15, 500) // A4\n\t\tthis.warmTone(now + 0.3, 0.5, 392, 0.12, 450) // G4\n\t}\n\n\t// ==========================================================================\n\t// ANXIOUS / FEARFUL FEELINGS\n\t// ==========================================================================\n\n\tprivate playAnxious(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Tight, quick puffs\n\t\tthis.puff(now, 0.08, 1800, 0.2)\n\t\tthis.puff(now + 0.12, 0.08, 1900, 0.22)\n\n\t\t// Uncertain wobble\n\t\tconst osc = ctx.createOscillator()\n\t\tconst gain = ctx.createGain()\n\t\tconst lfo = ctx.createOscillator()\n\t\tconst lfoGain = ctx.createGain()\n\n\t\tosc.frequency.value = 440\n\t\tlfo.frequency.value = 8\n\t\tlfoGain.gain.value = 20\n\n\t\tlfo.connect(lfoGain).connect(osc.frequency)\n\n\t\tgain.gain.setValueAtTime(0, now)\n\t\tgain.gain.linearRampToValueAtTime(this.volume * 0.15, now + 0.03)\n\t\tgain.gain.exponentialRampToValueAtTime(0.001, now + 0.25)\n\n\t\tosc.connect(gain).connect(ctx.destination)\n\t\tlfo.start(now)\n\t\tosc.start(now)\n\t\tosc.stop(now + 0.3)\n\t\tlfo.stop(now + 0.3)\n\t}\n\n\tprivate playWorried(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Hesitant puff\n\t\tthis.puff(now, 0.15, 1200, 0.2)\n\n\t\t// Minor questioning tone\n\t\tthis.tone(now + 0.05, 0.25, 349, 0.15, 'sine', 392) // F4 -> G4 (uncertain)\n\t}\n\n\tprivate playNervous(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Quick shallow puffs\n\t\tthis.puff(now, 0.05, 2000, 0.18)\n\t\tthis.puff(now + 0.08, 0.05, 2100, 0.18)\n\t\tthis.puff(now + 0.15, 0.06, 2000, 0.16)\n\n\t\t// Trembling tone\n\t\tthis.tone(now + 0.04, 0.2, 494, 0.12) // B4\n\t}\n\n\tprivate playStartled(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Quick sharp puff\n\t\tthis.puff(now, 0.04, 3500, 0.3)\n\n\t\t// Quick high tone\n\t\tthis.tone(now, 0.08, 1047, 0.25) // C6\n\t\tthis.tone(now + 0.05, 0.15, 880, 0.15) // A5\n\t}\n\n\t// ==========================================================================\n\t// ANGRY / FRUSTRATED FEELINGS\n\t// ==========================================================================\n\n\tprivate playAnnoyed(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Short frustrated puff\n\t\tthis.puff(now, 0.1, 1000, 0.25)\n\n\t\t// Low rumble\n\t\tthis.warmTone(now + 0.03, 0.2, 294, 0.18, 400) // D4\n\t}\n\n\tprivate playFrustrated(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Tense puff\n\t\tthis.puff(now, 0.12, 900, 0.28)\n\n\t\t// Blocked feeling\n\t\tthis.tone(now + 0.04, 0.15, 349, 0.2) // F4\n\t\tthis.tone(now + 0.12, 0.12, 330, 0.18) // E4\n\t}\n\n\tprivate playImpatient(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Quick tapping puffs\n\t\tthis.puff(now, 0.04, 1500, 0.2)\n\t\tthis.puff(now + 0.08, 0.04, 1500, 0.2)\n\t\tthis.puff(now + 0.16, 0.04, 1500, 0.22)\n\n\t\t// Urgent tone\n\t\tthis.tone(now + 0.06, 0.1, 523, 0.15)\n\t}\n\n\t// ==========================================================================\n\t// TIRED / DRAINED FEELINGS\n\t// ==========================================================================\n\n\tprivate playTired(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Heavy slow puff\n\t\tthis.puff(now, 0.35, 500, 0.2)\n\n\t\t// Drooping tone\n\t\tthis.warmTone(now + 0.1, 0.4, 330, 0.12, 350) // E4\n\t}\n\n\tprivate playExhausted(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Very slow, heavy exhale\n\t\tthis.puff(now, 0.45, 400, 0.18)\n\n\t\t// Descending fade\n\t\tthis.warmTone(now + 0.15, 0.5, 294, 0.1, 300) // D4\n\t}\n\n\tprivate playBored(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Flat sigh\n\t\tthis.puff(now, 0.25, 600, 0.15)\n\n\t\t// Monotone\n\t\tthis.warmTone(now + 0.1, 0.3, 349, 0.1, 400) // F4\n\t}\n\n\t// ==========================================================================\n\t// CALM / GROUNDED FEELINGS\n\t// ==========================================================================\n\n\tprivate playCalm(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Slow, peaceful puff\n\t\tthis.puff(now, 0.3, 600, 0.12)\n\n\t\t// Sustained gentle tone\n\t\tthis.warmTone(now + 0.1, 0.5, 392, 0.1, 500) // G4\n\t}\n\n\tprivate playRelaxed(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Long soft exhale\n\t\tthis.puff(now, 0.35, 700, 0.15)\n\n\t\t// Gentle descending\n\t\tthis.warmTone(now + 0.15, 0.45, 440, 0.1) // A4\n\t\tthis.warmTone(now + 0.35, 0.5, 392, 0.08) // G4\n\t}\n\n\tprivate playGrounded(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Deep centered puff\n\t\tthis.puff(now, 0.25, 500, 0.2)\n\n\t\t// Low stable tone\n\t\tthis.warmTone(now + 0.1, 0.4, 262, 0.15, 350) // C4\n\t}\n\n\tprivate playSafe(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Soft enveloping puff\n\t\tthis.puff(now, 0.3, 700, 0.15)\n\n\t\t// Warm embracing tones\n\t\tthis.warmTone(now + 0.1, 0.4, 349, 0.12) // F4\n\t\tthis.warmTone(now + 0.25, 0.45, 440, 0.1) // A4\n\t}\n\n\t// ==========================================================================\n\t// CONNECTED / SOCIAL FEELINGS\n\t// ==========================================================================\n\n\tprivate playConnected(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Warm shared breath\n\t\tthis.puff(now, 0.2, 1200, 0.18)\n\n\t\t// Harmonious tones\n\t\tthis.warmTone(now + 0.08, 0.3, 440, 0.15) // A4\n\t\tthis.warmTone(now + 0.12, 0.32, 523, 0.12) // C5\n\t}\n\n\tprivate playAppreciated(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Touched puff\n\t\tthis.puff(now, 0.15, 1500, 0.2)\n\n\t\t// Warm ascending\n\t\tthis.warmTone(now + 0.05, 0.25, 440, 0.15)\n\t\tthis.warmTone(now + 0.15, 0.3, 523, 0.18)\n\t}\n\n\tprivate playSupported(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Held puff\n\t\tthis.puff(now, 0.25, 900, 0.18)\n\n\t\t// Stable harmonies\n\t\tthis.warmTone(now + 0.1, 0.35, 349, 0.12)\n\t\tthis.warmTone(now + 0.15, 0.4, 440, 0.1)\n\t}\n\n\t// ==========================================================================\n\t// MIXED / COMPLICATED FEELINGS\n\t// ==========================================================================\n\n\tprivate playNostalgic(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Wistful distant puff\n\t\tthis.puff(now, 0.25, 800, 0.15)\n\n\t\t// Bittersweet memory tones\n\t\tthis.warmTone(now + 0.1, 0.4, 440, 0.12, 500) // A4\n\t\tthis.warmTone(now + 0.3, 0.45, 392, 0.1, 450) // G4\n\t}\n\n\tprivate playSurprised(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Quick gasp\n\t\tthis.puff(now, 0.06, 2800, 0.25)\n\n\t\t// Rising tone\n\t\tthis.tone(now + 0.02, 0.15, 659, 0.2, 'sine', 988) // E5 -> B5\n\t}\n\n\tprivate playAwestruck(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Wonder-filled breath\n\t\tthis.puff(now, 0.2, 1500, 0.2)\n\n\t\t// Ascending wonder\n\t\tthis.shimmer(now + 0.08, 0.4, 440, 0.15)\n\t}\n\n\tprivate playConfused(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Uncertain puff\n\t\tthis.puff(now, 0.12, 1200, 0.18)\n\n\t\t// Questioning wobble\n\t\tthis.tone(now + 0.04, 0.2, 440, 0.12, 'sine', 494) // A4 -> B4\n\t\tthis.tone(now + 0.15, 0.15, 466, 0.1) // Bb4 (chromatic confusion)\n\t}\n\n\t// ==========================================================================\n\t// PUBLIC API\n\t// ==========================================================================\n\n\t/** Set volume (0.0 - 1.0) */\n\tsetVolume(vol: number): void {\n\t\tthis.volume = Math.max(0, Math.min(1, vol))\n\t}\n\n\t/** Get current volume */\n\tgetVolume(): number {\n\t\treturn this.volume\n\t}\n\n\t/** Mute all sounds */\n\tmute(): void {\n\t\tthis.muted = true\n\t}\n\n\t/** Unmute sounds */\n\tunmute(): void {\n\t\tthis.muted = false\n\t}\n\n\t/** Check if muted */\n\tisMuted(): boolean {\n\t\treturn this.muted\n\t}\n\n\t/** Play a feeling */\n\tplay(feeling: Feeling): void {\n\t\tif (this.muted) return\n\n\t\t// Map feelings to their sound methods\n\t\tconst soundMap: Record<Feeling, () => void> = {\n\t\t\t// Happy\n\t\t\tjoyful: () => this.playJoyful(),\n\t\t\tcontent: () => this.playContent(),\n\t\t\texcited: () => this.playExcited(),\n\t\t\tproud: () => this.playProud(),\n\t\t\thopeful: () => this.playHopeful(),\n\t\t\trelieved: () => this.playRelieved(),\n\t\t\tgrateful: () => this.playGrateful(),\n\t\t\tpeaceful: () => this.playPeaceful(),\n\t\t\tplayful: () => this.playPlayful(),\n\t\t\tamused: () => this.playAmused(),\n\t\t\tcurious: () => this.playCurious(),\n\t\t\tinspired: () => this.playInspired(),\n\t\t\tconfident: () => this.playConfident(),\n\t\t\tloved: () => this.playLoved(),\n\t\t\tcomforted: () => this.playComforted(),\n\t\t\tenergized: () => this.playEnergized(),\n\t\t\tcelebrated: () => this.playCelebrated(),\n\n\t\t\t// Sad\n\t\t\tsad: () => this.playSad(),\n\t\t\tlonely: () => this.playLonely(),\n\t\t\tdisappointed: () => this.playDisappointed(),\n\t\t\theartbroken: () => this.playSad(), // Similar to sad\n\t\t\tgrieving: () => this.playSad(),\n\t\t\thopeless: () => this.playLonely(),\n\t\t\tempty: () => this.playLonely(),\n\t\t\tdiscouraged: () => this.playDisappointed(),\n\t\t\tmelancholic: () => this.playMelancholic(),\n\t\t\thomesick: () => this.playNostalgic(),\n\t\t\thurt: () => this.playSad(),\n\t\t\tmiserable: () => this.playSad(),\n\t\t\tregretful: () => this.playMelancholic(),\n\t\t\tashamed: () => this.playDisappointed(),\n\t\t\tinferior: () => this.playDisappointed(),\n\n\t\t\t// Anxious\n\t\t\tanxious: () => this.playAnxious(),\n\t\t\tworried: () => this.playWorried(),\n\t\t\tafraid: () => this.playAnxious(),\n\t\t\tterrified: () => this.playStartled(),\n\t\t\tpanicked: () => this.playStartled(),\n\t\t\tnervous: () => this.playNervous(),\n\t\t\tuneasy: () => this.playWorried(),\n\t\t\tinsecure: () => this.playNervous(),\n\t\t\toverwhelmed: () => this.playAnxious(),\n\t\t\tstressed: () => this.playAnxious(),\n\t\t\ttense: () => this.playAnxious(),\n\t\t\tapprehensive: () => this.playWorried(),\n\t\t\tstartled: () => this.playStartled(),\n\t\t\tsuspicious: () => this.playWorried(),\n\t\t\tvulnerable: () => this.playNervous(),\n\n\t\t\t// Angry\n\t\t\tannoyed: () => this.playAnnoyed(),\n\t\t\tirritated: () => this.playAnnoyed(),\n\t\t\tfrustrated: () => this.playFrustrated(),\n\t\t\tangry: () => this.playFrustrated(),\n\t\t\tenraged: () => this.playFrustrated(),\n\t\t\tbitter: () => this.playFrustrated(),\n\t\t\tresentful: () => this.playAnnoyed(),\n\t\t\tjealous: () => this.playAnnoyed(),\n\t\t\tenvious: () => this.playAnnoyed(),\n\t\t\tindignant: () => this.playFrustrated(),\n\t\t\timpatient: () => this.playImpatient(),\n\t\t\thostile: () => this.playFrustrated(),\n\t\t\tcontemptuous: () => this.playAnnoyed(),\n\n\t\t\t// Tired\n\t\t\ttired: () => this.playTired(),\n\t\t\texhausted: () => this.playExhausted(),\n\t\t\tdrained: () => this.playExhausted(),\n\t\t\tburnedOut: () => this.playExhausted(),\n\t\t\tnumb: () => this.playExhausted(),\n\t\t\tbored: () => this.playBored(),\n\t\t\tunmotivated: () => this.playBored(),\n\t\t\tapathetic: () => this.playBored(),\n\t\t\trestless: () => this.playTired(),\n\n\t\t\t// Calm\n\t\t\tcalm: () => this.playCalm(),\n\t\t\trelaxed: () => this.playRelaxed(),\n\t\t\tatEase: () => this.playRelaxed(),\n\t\t\tbalanced: () => this.playCalm(),\n\t\t\tstable: () => this.playGrounded(),\n\t\t\tsecure: () => this.playSafe(),\n\t\t\tsafe: () => this.playSafe(),\n\t\t\tcentered: () => this.playGrounded(),\n\t\t\tgrounded: () => this.playGrounded(),\n\t\t\taccepting: () => this.playCalm(),\n\n\t\t\t// Connected\n\t\t\tconnected: () => this.playConnected(),\n\t\t\taccepted: () => this.playAppreciated(),\n\t\t\tincluded: () => this.playConnected(),\n\t\t\tbelonging: () => this.playConnected(),\n\t\t\tappreciated: () => this.playAppreciated(),\n\t\t\tvalued: () => this.playAppreciated(),\n\t\t\trespected: () => this.playAppreciated(),\n\t\t\tsupported: () => this.playSupported(),\n\t\t\tprotective: () => this.playSupported(),\n\t\t\tcompassionate: () => this.playConnected(),\n\t\t\tempathetic: () => this.playConnected(),\n\n\t\t\t// Mixed\n\t\t\tconflicted: () => this.playConfused(),\n\t\t\tconfused: () => this.playConfused(),\n\t\t\tambivalent: () => this.playConfused(),\n\t\t\tnostalgic: () => this.playNostalgic(),\n\t\t\tguilty: () => this.playDisappointed(),\n\t\t\tembarrassed: () => this.playNervous(),\n\t\t\tsurprised: () => this.playSurprised(),\n\t\t\tshocked: () => this.playStartled(),\n\t\t\tawestruck: () => this.playAwestruck(),\n\t\t\tskeptical: () => this.playConfused(),\n\t\t}\n\n\t\tconst playFn = soundMap[feeling]\n\t\tif (playFn) {\n\t\t\tplayFn()\n\t\t}\n\t}\n\n\t/** Dispose audio context */\n\tdispose(): 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\n// ============================================================================\n// SINGLETON EXPORT\n// ============================================================================\n\n/** Global emotional sound player */\nexport const $sounds = new EmotionalSoundGenerator()\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`./sound.service-Qhr8nCeG.cjs`);var e=class{constructor(){this.audioContext=null,this.volume=.15,this.muted=!1}getContext(){if(!this.audioContext){let e=window.AudioContext||window.webkitAudioContext;this.audioContext=new e}return this.audioContext.state===`suspended`&&this.audioContext.resume(),this.audioContext}puff(e,t,n,r){let i=this.getContext(),a=Math.floor(i.sampleRate*t),o=i.createBuffer(1,a,i.sampleRate),s=o.getChannelData(0);for(let e=0;e<a;e++)s[e]=2*Math.random()-1;let c=i.createBufferSource();c.buffer=o;let l=i.createBiquadFilter();l.type=`bandpass`,l.frequency.value=n,l.Q.value=.7;let u=i.createGain();u.gain.setValueAtTime(0,e),u.gain.linearRampToValueAtTime(r*this.volume,e+.015),u.gain.exponentialRampToValueAtTime(.001,e+t),c.connect(l).connect(u).connect(i.destination),c.start(e),c.stop(e+t)}tone(e,t,n,r,i=`sine`,a){let o=this.getContext(),s=o.createOscillator(),c=o.createGain();s.type=i,s.frequency.setValueAtTime(n,e),a&&s.frequency.exponentialRampToValueAtTime(a,e+.8*t),c.gain.setValueAtTime(0,e),c.gain.linearRampToValueAtTime(r*this.volume,e+.02),c.gain.exponentialRampToValueAtTime(.001,e+t),s.connect(c).connect(o.destination),s.start(e),s.stop(e+t)}warmTone(e,t,n,r,i=800){let a=this.getContext(),o=a.createOscillator(),s=a.createBiquadFilter(),c=a.createGain();o.type=`sine`,o.frequency.value=n,s.type=`lowpass`,s.frequency.value=i,c.gain.setValueAtTime(0,e),c.gain.linearRampToValueAtTime(r*this.volume,e+.03),c.gain.exponentialRampToValueAtTime(.001,e+t),o.connect(s).connect(c).connect(a.destination),o.start(e),o.stop(e+t)}shimmer(e,t,n,r){[n,1.5*n,2*n].forEach((n,i)=>{this.tone(e+.02*i,t-.02*i,n,r*(1-.2*i))})}playJoyful(){let e=this.getContext().currentTime;this.puff(e,.08,3e3,.3),this.puff(e+.06,.1,3500,.35),this.tone(e+.02,.15,784,.25),this.tone(e+.1,.2,988,.3),this.tone(e+.18,.25,1175,.25)}playContent(){let e=this.getContext().currentTime;this.puff(e,.2,1500,.25),this.warmTone(e+.05,.3,523,.2),this.warmTone(e+.15,.35,659,.15)}playExcited(){let e=this.getContext().currentTime;this.puff(e,.06,2500,.25),this.puff(e+.05,.06,3e3,.3),this.puff(e+.1,.08,3500,.35),this.tone(e+.02,.12,880,.2),this.tone(e+.08,.12,1047,.25),this.tone(e+.14,.15,1319,.3)}playProud(){let e=this.getContext().currentTime;this.puff(e,.15,1800,.3),this.tone(e+.05,.25,523,.25),this.tone(e+.08,.25,659,.2),this.tone(e+.11,.3,784,.25)}playHopeful(){let e=this.getContext().currentTime;this.puff(e,.12,2200,.2),this.tone(e+.03,.3,659,.2,`sine`,880)}playRelieved(){let e=this.getContext().currentTime;this.puff(e,.25,1200,.35),this.warmTone(e+.1,.35,659,.2),this.warmTone(e+.25,.4,523,.15)}playGrateful(){let e=this.getContext().currentTime;this.puff(e,.15,1500,.25),this.warmTone(e+.05,.3,440,.2),this.warmTone(e+.15,.35,523,.2),this.warmTone(e+.25,.4,659,.15)}playPeaceful(){let e=this.getContext().currentTime;this.puff(e,.3,800,.15),this.warmTone(e+.1,.5,392,.12,500)}playPlayful(){let e=this.getContext().currentTime;this.puff(e,.05,2800,.2),this.puff(e+.08,.05,3200,.25),this.puff(e+.14,.06,2800,.2),this.tone(e+.03,.1,784,.2),this.tone(e+.1,.08,988,.25),this.tone(e+.16,.12,784,.2)}playAmused(){let e=this.getContext().currentTime;this.puff(e,.04,2500,.2),this.puff(e+.06,.04,2800,.22),this.puff(e+.11,.05,2600,.18),this.tone(e+.05,.15,880,.15)}playCurious(){let e=this.getContext().currentTime;this.puff(e,.1,2e3,.2),this.tone(e+.03,.2,659,.2,`sine`,880)}playInspired(){let e=this.getContext().currentTime;this.puff(e,.1,2500,.25),this.shimmer(e+.05,.3,523,.2)}playConfident(){let e=this.getContext().currentTime;this.puff(e,.12,1500,.3),this.tone(e+.04,.2,523,.25),this.tone(e+.06,.22,659,.2)}playLoved(){let e=this.getContext().currentTime;this.puff(e,.2,1e3,.2),this.warmTone(e+.08,.4,392,.18,600),this.warmTone(e+.2,.45,494,.15,600)}playComforted(){let e=this.getContext().currentTime;this.puff(e,.25,900,.18),this.warmTone(e+.1,.35,523,.15),this.warmTone(e+.25,.4,440,.12)}playEnergized(){let e=this.getContext().currentTime;this.puff(e,.05,3e3,.25),this.puff(e+.04,.05,3500,.28),this.tone(e+.02,.1,784,.2),this.tone(e+.08,.12,988,.25),this.tone(e+.14,.15,1175,.22)}playCelebrated(){let e=this.getContext().currentTime;this.puff(e,.08,2500,.2),this.tone(e+.02,.18,523,.22),this.tone(e+.08,.18,659,.24),this.tone(e+.14,.2,784,.26),this.tone(e+.22,.3,1047,.22),this.shimmer(e+.25,.35,523,.12)}playSad(){let e=this.getContext().currentTime;this.puff(e,.3,600,.25),this.warmTone(e+.1,.4,392,.2,400),this.warmTone(e+.3,.45,294,.15,350)}playLonely(){let e=this.getContext().currentTime;this.puff(e,.2,700,.2),this.warmTone(e+.15,.5,330,.12,450)}playDisappointed(){let e=this.getContext().currentTime;this.puff(e,.25,800,.25),this.tone(e+.08,.3,523,.18,`sine`,349)}playMelancholic(){let e=this.getContext().currentTime;this.puff(e,.3,700,.18),this.warmTone(e+.1,.45,440,.15,500),this.warmTone(e+.3,.5,392,.12,450)}playAnxious(){let e=this.getContext(),t=e.currentTime;this.puff(t,.08,1800,.2),this.puff(t+.12,.08,1900,.22);let n=e.createOscillator(),r=e.createGain(),i=e.createOscillator(),a=e.createGain();n.frequency.value=440,i.frequency.value=8,a.gain.value=20,i.connect(a).connect(n.frequency),r.gain.setValueAtTime(0,t),r.gain.linearRampToValueAtTime(.15*this.volume,t+.03),r.gain.exponentialRampToValueAtTime(.001,t+.25),n.connect(r).connect(e.destination),i.start(t),n.start(t),n.stop(t+.3),i.stop(t+.3)}playWorried(){let e=this.getContext().currentTime;this.puff(e,.15,1200,.2),this.tone(e+.05,.25,349,.15,`sine`,392)}playNervous(){let e=this.getContext().currentTime;this.puff(e,.05,2e3,.18),this.puff(e+.08,.05,2100,.18),this.puff(e+.15,.06,2e3,.16),this.tone(e+.04,.2,494,.12)}playStartled(){let e=this.getContext().currentTime;this.puff(e,.04,3500,.3),this.tone(e,.08,1047,.25),this.tone(e+.05,.15,880,.15)}playAnnoyed(){let e=this.getContext().currentTime;this.puff(e,.1,1e3,.25),this.warmTone(e+.03,.2,294,.18,400)}playFrustrated(){let e=this.getContext().currentTime;this.puff(e,.12,900,.28),this.tone(e+.04,.15,349,.2),this.tone(e+.12,.12,330,.18)}playImpatient(){let e=this.getContext().currentTime;this.puff(e,.04,1500,.2),this.puff(e+.08,.04,1500,.2),this.puff(e+.16,.04,1500,.22),this.tone(e+.06,.1,523,.15)}playTired(){let e=this.getContext().currentTime;this.puff(e,.35,500,.2),this.warmTone(e+.1,.4,330,.12,350)}playExhausted(){let e=this.getContext().currentTime;this.puff(e,.45,400,.18),this.warmTone(e+.15,.5,294,.1,300)}playBored(){let e=this.getContext().currentTime;this.puff(e,.25,600,.15),this.warmTone(e+.1,.3,349,.1,400)}playCalm(){let e=this.getContext().currentTime;this.puff(e,.3,600,.12),this.warmTone(e+.1,.5,392,.1,500)}playRelaxed(){let e=this.getContext().currentTime;this.puff(e,.35,700,.15),this.warmTone(e+.15,.45,440,.1),this.warmTone(e+.35,.5,392,.08)}playGrounded(){let e=this.getContext().currentTime;this.puff(e,.25,500,.2),this.warmTone(e+.1,.4,262,.15,350)}playSafe(){let e=this.getContext().currentTime;this.puff(e,.3,700,.15),this.warmTone(e+.1,.4,349,.12),this.warmTone(e+.25,.45,440,.1)}playConnected(){let e=this.getContext().currentTime;this.puff(e,.2,1200,.18),this.warmTone(e+.08,.3,440,.15),this.warmTone(e+.12,.32,523,.12)}playAppreciated(){let e=this.getContext().currentTime;this.puff(e,.15,1500,.2),this.warmTone(e+.05,.25,440,.15),this.warmTone(e+.15,.3,523,.18)}playSupported(){let e=this.getContext().currentTime;this.puff(e,.25,900,.18),this.warmTone(e+.1,.35,349,.12),this.warmTone(e+.15,.4,440,.1)}playNostalgic(){let e=this.getContext().currentTime;this.puff(e,.25,800,.15),this.warmTone(e+.1,.4,440,.12,500),this.warmTone(e+.3,.45,392,.1,450)}playSurprised(){let e=this.getContext().currentTime;this.puff(e,.06,2800,.25),this.tone(e+.02,.15,659,.2,`sine`,988)}playAwestruck(){let e=this.getContext().currentTime;this.puff(e,.2,1500,.2),this.shimmer(e+.08,.4,440,.15)}playConfused(){let e=this.getContext().currentTime;this.puff(e,.12,1200,.18),this.tone(e+.04,.2,440,.12,`sine`,494),this.tone(e+.15,.15,466,.1)}setVolume(e){this.volume=Math.max(0,Math.min(1,e))}getVolume(){return this.volume}mute(){this.muted=!0}unmute(){this.muted=!1}isMuted(){return this.muted}play(e){if(this.muted)return;let t={joyful:()=>this.playJoyful(),content:()=>this.playContent(),excited:()=>this.playExcited(),proud:()=>this.playProud(),hopeful:()=>this.playHopeful(),relieved:()=>this.playRelieved(),grateful:()=>this.playGrateful(),peaceful:()=>this.playPeaceful(),playful:()=>this.playPlayful(),amused:()=>this.playAmused(),curious:()=>this.playCurious(),inspired:()=>this.playInspired(),confident:()=>this.playConfident(),loved:()=>this.playLoved(),comforted:()=>this.playComforted(),energized:()=>this.playEnergized(),celebrated:()=>this.playCelebrated(),sad:()=>this.playSad(),lonely:()=>this.playLonely(),disappointed:()=>this.playDisappointed(),heartbroken:()=>this.playSad(),grieving:()=>this.playSad(),hopeless:()=>this.playLonely(),empty:()=>this.playLonely(),discouraged:()=>this.playDisappointed(),melancholic:()=>this.playMelancholic(),homesick:()=>this.playNostalgic(),hurt:()=>this.playSad(),miserable:()=>this.playSad(),regretful:()=>this.playMelancholic(),ashamed:()=>this.playDisappointed(),inferior:()=>this.playDisappointed(),anxious:()=>this.playAnxious(),worried:()=>this.playWorried(),afraid:()=>this.playAnxious(),terrified:()=>this.playStartled(),panicked:()=>this.playStartled(),nervous:()=>this.playNervous(),uneasy:()=>this.playWorried(),insecure:()=>this.playNervous(),overwhelmed:()=>this.playAnxious(),stressed:()=>this.playAnxious(),tense:()=>this.playAnxious(),apprehensive:()=>this.playWorried(),startled:()=>this.playStartled(),suspicious:()=>this.playWorried(),vulnerable:()=>this.playNervous(),annoyed:()=>this.playAnnoyed(),irritated:()=>this.playAnnoyed(),frustrated:()=>this.playFrustrated(),angry:()=>this.playFrustrated(),enraged:()=>this.playFrustrated(),bitter:()=>this.playFrustrated(),resentful:()=>this.playAnnoyed(),jealous:()=>this.playAnnoyed(),envious:()=>this.playAnnoyed(),indignant:()=>this.playFrustrated(),impatient:()=>this.playImpatient(),hostile:()=>this.playFrustrated(),contemptuous:()=>this.playAnnoyed(),tired:()=>this.playTired(),exhausted:()=>this.playExhausted(),drained:()=>this.playExhausted(),burnedOut:()=>this.playExhausted(),numb:()=>this.playExhausted(),bored:()=>this.playBored(),unmotivated:()=>this.playBored(),apathetic:()=>this.playBored(),restless:()=>this.playTired(),calm:()=>this.playCalm(),relaxed:()=>this.playRelaxed(),atEase:()=>this.playRelaxed(),balanced:()=>this.playCalm(),stable:()=>this.playGrounded(),secure:()=>this.playSafe(),safe:()=>this.playSafe(),centered:()=>this.playGrounded(),grounded:()=>this.playGrounded(),accepting:()=>this.playCalm(),connected:()=>this.playConnected(),accepted:()=>this.playAppreciated(),included:()=>this.playConnected(),belonging:()=>this.playConnected(),appreciated:()=>this.playAppreciated(),valued:()=>this.playAppreciated(),respected:()=>this.playAppreciated(),supported:()=>this.playSupported(),protective:()=>this.playSupported(),compassionate:()=>this.playConnected(),empathetic:()=>this.playConnected(),conflicted:()=>this.playConfused(),confused:()=>this.playConfused(),ambivalent:()=>this.playConfused(),nostalgic:()=>this.playNostalgic(),guilty:()=>this.playDisappointed(),embarrassed:()=>this.playNervous(),surprised:()=>this.playSurprised(),shocked:()=>this.playStartled(),awestruck:()=>this.playAwestruck(),skeptical:()=>this.playConfused()}[e];t&&t()}dispose(){this.audioContext&&=(this.audioContext.close(),null)}},t=new e;Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return e}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return t}});
|
|
1
|
+
require(`./sound.service-CVsxhQkX.cjs`);var e=class{constructor(){this.audioContext=null,this.volume=.15,this.muted=!1}getContext(){if(!this.audioContext){let e=window.AudioContext||window.webkitAudioContext;this.audioContext=new e}return this.audioContext.state===`suspended`&&this.audioContext.resume(),this.audioContext}puff(e,t,n,r){let i=this.getContext(),a=Math.floor(i.sampleRate*t),o=i.createBuffer(1,a,i.sampleRate),s=o.getChannelData(0);for(let e=0;e<a;e++)s[e]=2*Math.random()-1;let c=i.createBufferSource();c.buffer=o;let l=i.createBiquadFilter();l.type=`bandpass`,l.frequency.value=n,l.Q.value=.7;let u=i.createGain();u.gain.setValueAtTime(0,e),u.gain.linearRampToValueAtTime(r*this.volume,e+.015),u.gain.exponentialRampToValueAtTime(.001,e+t),c.connect(l).connect(u).connect(i.destination),c.start(e),c.stop(e+t)}tone(e,t,n,r,i=`sine`,a){let o=this.getContext(),s=o.createOscillator(),c=o.createGain();s.type=i,s.frequency.setValueAtTime(n,e),a&&s.frequency.exponentialRampToValueAtTime(a,e+.8*t),c.gain.setValueAtTime(0,e),c.gain.linearRampToValueAtTime(r*this.volume,e+.02),c.gain.exponentialRampToValueAtTime(.001,e+t),s.connect(c).connect(o.destination),s.start(e),s.stop(e+t)}warmTone(e,t,n,r,i=800){let a=this.getContext(),o=a.createOscillator(),s=a.createBiquadFilter(),c=a.createGain();o.type=`sine`,o.frequency.value=n,s.type=`lowpass`,s.frequency.value=i,c.gain.setValueAtTime(0,e),c.gain.linearRampToValueAtTime(r*this.volume,e+.03),c.gain.exponentialRampToValueAtTime(.001,e+t),o.connect(s).connect(c).connect(a.destination),o.start(e),o.stop(e+t)}shimmer(e,t,n,r){[n,1.5*n,2*n].forEach((n,i)=>{this.tone(e+.02*i,t-.02*i,n,r*(1-.2*i))})}playJoyful(){let e=this.getContext().currentTime;this.puff(e,.08,3e3,.3),this.puff(e+.06,.1,3500,.35),this.tone(e+.02,.15,784,.25),this.tone(e+.1,.2,988,.3),this.tone(e+.18,.25,1175,.25)}playContent(){let e=this.getContext().currentTime;this.puff(e,.2,1500,.25),this.warmTone(e+.05,.3,523,.2),this.warmTone(e+.15,.35,659,.15)}playExcited(){let e=this.getContext().currentTime;this.puff(e,.06,2500,.25),this.puff(e+.05,.06,3e3,.3),this.puff(e+.1,.08,3500,.35),this.tone(e+.02,.12,880,.2),this.tone(e+.08,.12,1047,.25),this.tone(e+.14,.15,1319,.3)}playProud(){let e=this.getContext().currentTime;this.puff(e,.15,1800,.3),this.tone(e+.05,.25,523,.25),this.tone(e+.08,.25,659,.2),this.tone(e+.11,.3,784,.25)}playHopeful(){let e=this.getContext().currentTime;this.puff(e,.12,2200,.2),this.tone(e+.03,.3,659,.2,`sine`,880)}playRelieved(){let e=this.getContext().currentTime;this.puff(e,.25,1200,.35),this.warmTone(e+.1,.35,659,.2),this.warmTone(e+.25,.4,523,.15)}playGrateful(){let e=this.getContext().currentTime;this.puff(e,.15,1500,.25),this.warmTone(e+.05,.3,440,.2),this.warmTone(e+.15,.35,523,.2),this.warmTone(e+.25,.4,659,.15)}playPeaceful(){let e=this.getContext().currentTime;this.puff(e,.3,800,.15),this.warmTone(e+.1,.5,392,.12,500)}playPlayful(){let e=this.getContext().currentTime;this.puff(e,.05,2800,.2),this.puff(e+.08,.05,3200,.25),this.puff(e+.14,.06,2800,.2),this.tone(e+.03,.1,784,.2),this.tone(e+.1,.08,988,.25),this.tone(e+.16,.12,784,.2)}playAmused(){let e=this.getContext().currentTime;this.puff(e,.04,2500,.2),this.puff(e+.06,.04,2800,.22),this.puff(e+.11,.05,2600,.18),this.tone(e+.05,.15,880,.15)}playCurious(){let e=this.getContext().currentTime;this.puff(e,.1,2e3,.2),this.tone(e+.03,.2,659,.2,`sine`,880)}playInspired(){let e=this.getContext().currentTime;this.puff(e,.1,2500,.25),this.shimmer(e+.05,.3,523,.2)}playConfident(){let e=this.getContext().currentTime;this.puff(e,.12,1500,.3),this.tone(e+.04,.2,523,.25),this.tone(e+.06,.22,659,.2)}playLoved(){let e=this.getContext().currentTime;this.puff(e,.2,1e3,.2),this.warmTone(e+.08,.4,392,.18,600),this.warmTone(e+.2,.45,494,.15,600)}playComforted(){let e=this.getContext().currentTime;this.puff(e,.25,900,.18),this.warmTone(e+.1,.35,523,.15),this.warmTone(e+.25,.4,440,.12)}playEnergized(){let e=this.getContext().currentTime;this.puff(e,.05,3e3,.25),this.puff(e+.04,.05,3500,.28),this.tone(e+.02,.1,784,.2),this.tone(e+.08,.12,988,.25),this.tone(e+.14,.15,1175,.22)}playCelebrated(){let e=this.getContext().currentTime;this.puff(e,.08,2500,.2),this.tone(e+.02,.18,523,.22),this.tone(e+.08,.18,659,.24),this.tone(e+.14,.2,784,.26),this.tone(e+.22,.3,1047,.22),this.shimmer(e+.25,.35,523,.12)}playSad(){let e=this.getContext().currentTime;this.puff(e,.3,600,.25),this.warmTone(e+.1,.4,392,.2,400),this.warmTone(e+.3,.45,294,.15,350)}playLonely(){let e=this.getContext().currentTime;this.puff(e,.2,700,.2),this.warmTone(e+.15,.5,330,.12,450)}playDisappointed(){let e=this.getContext().currentTime;this.puff(e,.25,800,.25),this.tone(e+.08,.3,523,.18,`sine`,349)}playMelancholic(){let e=this.getContext().currentTime;this.puff(e,.3,700,.18),this.warmTone(e+.1,.45,440,.15,500),this.warmTone(e+.3,.5,392,.12,450)}playAnxious(){let e=this.getContext(),t=e.currentTime;this.puff(t,.08,1800,.2),this.puff(t+.12,.08,1900,.22);let n=e.createOscillator(),r=e.createGain(),i=e.createOscillator(),a=e.createGain();n.frequency.value=440,i.frequency.value=8,a.gain.value=20,i.connect(a).connect(n.frequency),r.gain.setValueAtTime(0,t),r.gain.linearRampToValueAtTime(.15*this.volume,t+.03),r.gain.exponentialRampToValueAtTime(.001,t+.25),n.connect(r).connect(e.destination),i.start(t),n.start(t),n.stop(t+.3),i.stop(t+.3)}playWorried(){let e=this.getContext().currentTime;this.puff(e,.15,1200,.2),this.tone(e+.05,.25,349,.15,`sine`,392)}playNervous(){let e=this.getContext().currentTime;this.puff(e,.05,2e3,.18),this.puff(e+.08,.05,2100,.18),this.puff(e+.15,.06,2e3,.16),this.tone(e+.04,.2,494,.12)}playStartled(){let e=this.getContext().currentTime;this.puff(e,.04,3500,.3),this.tone(e,.08,1047,.25),this.tone(e+.05,.15,880,.15)}playAnnoyed(){let e=this.getContext().currentTime;this.puff(e,.1,1e3,.25),this.warmTone(e+.03,.2,294,.18,400)}playFrustrated(){let e=this.getContext().currentTime;this.puff(e,.12,900,.28),this.tone(e+.04,.15,349,.2),this.tone(e+.12,.12,330,.18)}playImpatient(){let e=this.getContext().currentTime;this.puff(e,.04,1500,.2),this.puff(e+.08,.04,1500,.2),this.puff(e+.16,.04,1500,.22),this.tone(e+.06,.1,523,.15)}playTired(){let e=this.getContext().currentTime;this.puff(e,.35,500,.2),this.warmTone(e+.1,.4,330,.12,350)}playExhausted(){let e=this.getContext().currentTime;this.puff(e,.45,400,.18),this.warmTone(e+.15,.5,294,.1,300)}playBored(){let e=this.getContext().currentTime;this.puff(e,.25,600,.15),this.warmTone(e+.1,.3,349,.1,400)}playCalm(){let e=this.getContext().currentTime;this.puff(e,.3,600,.12),this.warmTone(e+.1,.5,392,.1,500)}playRelaxed(){let e=this.getContext().currentTime;this.puff(e,.35,700,.15),this.warmTone(e+.15,.45,440,.1),this.warmTone(e+.35,.5,392,.08)}playGrounded(){let e=this.getContext().currentTime;this.puff(e,.25,500,.2),this.warmTone(e+.1,.4,262,.15,350)}playSafe(){let e=this.getContext().currentTime;this.puff(e,.3,700,.15),this.warmTone(e+.1,.4,349,.12),this.warmTone(e+.25,.45,440,.1)}playConnected(){let e=this.getContext().currentTime;this.puff(e,.2,1200,.18),this.warmTone(e+.08,.3,440,.15),this.warmTone(e+.12,.32,523,.12)}playAppreciated(){let e=this.getContext().currentTime;this.puff(e,.15,1500,.2),this.warmTone(e+.05,.25,440,.15),this.warmTone(e+.15,.3,523,.18)}playSupported(){let e=this.getContext().currentTime;this.puff(e,.25,900,.18),this.warmTone(e+.1,.35,349,.12),this.warmTone(e+.15,.4,440,.1)}playNostalgic(){let e=this.getContext().currentTime;this.puff(e,.25,800,.15),this.warmTone(e+.1,.4,440,.12,500),this.warmTone(e+.3,.45,392,.1,450)}playSurprised(){let e=this.getContext().currentTime;this.puff(e,.06,2800,.25),this.tone(e+.02,.15,659,.2,`sine`,988)}playAwestruck(){let e=this.getContext().currentTime;this.puff(e,.2,1500,.2),this.shimmer(e+.08,.4,440,.15)}playConfused(){let e=this.getContext().currentTime;this.puff(e,.12,1200,.18),this.tone(e+.04,.2,440,.12,`sine`,494),this.tone(e+.15,.15,466,.1)}setVolume(e){this.volume=Math.max(0,Math.min(1,e))}getVolume(){return this.volume}mute(){this.muted=!0}unmute(){this.muted=!1}isMuted(){return this.muted}play(e){if(this.muted)return;let t={joyful:()=>this.playJoyful(),content:()=>this.playContent(),excited:()=>this.playExcited(),proud:()=>this.playProud(),hopeful:()=>this.playHopeful(),relieved:()=>this.playRelieved(),grateful:()=>this.playGrateful(),peaceful:()=>this.playPeaceful(),playful:()=>this.playPlayful(),amused:()=>this.playAmused(),curious:()=>this.playCurious(),inspired:()=>this.playInspired(),confident:()=>this.playConfident(),loved:()=>this.playLoved(),comforted:()=>this.playComforted(),energized:()=>this.playEnergized(),celebrated:()=>this.playCelebrated(),sad:()=>this.playSad(),lonely:()=>this.playLonely(),disappointed:()=>this.playDisappointed(),heartbroken:()=>this.playSad(),grieving:()=>this.playSad(),hopeless:()=>this.playLonely(),empty:()=>this.playLonely(),discouraged:()=>this.playDisappointed(),melancholic:()=>this.playMelancholic(),homesick:()=>this.playNostalgic(),hurt:()=>this.playSad(),miserable:()=>this.playSad(),regretful:()=>this.playMelancholic(),ashamed:()=>this.playDisappointed(),inferior:()=>this.playDisappointed(),anxious:()=>this.playAnxious(),worried:()=>this.playWorried(),afraid:()=>this.playAnxious(),terrified:()=>this.playStartled(),panicked:()=>this.playStartled(),nervous:()=>this.playNervous(),uneasy:()=>this.playWorried(),insecure:()=>this.playNervous(),overwhelmed:()=>this.playAnxious(),stressed:()=>this.playAnxious(),tense:()=>this.playAnxious(),apprehensive:()=>this.playWorried(),startled:()=>this.playStartled(),suspicious:()=>this.playWorried(),vulnerable:()=>this.playNervous(),annoyed:()=>this.playAnnoyed(),irritated:()=>this.playAnnoyed(),frustrated:()=>this.playFrustrated(),angry:()=>this.playFrustrated(),enraged:()=>this.playFrustrated(),bitter:()=>this.playFrustrated(),resentful:()=>this.playAnnoyed(),jealous:()=>this.playAnnoyed(),envious:()=>this.playAnnoyed(),indignant:()=>this.playFrustrated(),impatient:()=>this.playImpatient(),hostile:()=>this.playFrustrated(),contemptuous:()=>this.playAnnoyed(),tired:()=>this.playTired(),exhausted:()=>this.playExhausted(),drained:()=>this.playExhausted(),burnedOut:()=>this.playExhausted(),numb:()=>this.playExhausted(),bored:()=>this.playBored(),unmotivated:()=>this.playBored(),apathetic:()=>this.playBored(),restless:()=>this.playTired(),calm:()=>this.playCalm(),relaxed:()=>this.playRelaxed(),atEase:()=>this.playRelaxed(),balanced:()=>this.playCalm(),stable:()=>this.playGrounded(),secure:()=>this.playSafe(),safe:()=>this.playSafe(),centered:()=>this.playGrounded(),grounded:()=>this.playGrounded(),accepting:()=>this.playCalm(),connected:()=>this.playConnected(),accepted:()=>this.playAppreciated(),included:()=>this.playConnected(),belonging:()=>this.playConnected(),appreciated:()=>this.playAppreciated(),valued:()=>this.playAppreciated(),respected:()=>this.playAppreciated(),supported:()=>this.playSupported(),protective:()=>this.playSupported(),compassionate:()=>this.playConnected(),empathetic:()=>this.playConnected(),conflicted:()=>this.playConfused(),confused:()=>this.playConfused(),ambivalent:()=>this.playConfused(),nostalgic:()=>this.playNostalgic(),guilty:()=>this.playDisappointed(),embarrassed:()=>this.playNervous(),surprised:()=>this.playSurprised(),shocked:()=>this.playStartled(),awestruck:()=>this.playAwestruck(),skeptical:()=>this.playConfused()}[e];t&&t()}dispose(){this.audioContext&&=(this.audioContext.close(),null)}},t=new e;Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return e}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return t}});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audio-CpwrIaw-.cjs","names":[],"sources":["../src/audio/emotional-sounds.ts"],"sourcesContent":["/**\n * Schmancy Emotional Sound Library\n *\n * A curated collection of soft, elegant sounds organized by emotional categories.\n * Each sound is designed to be non-intrusive, emotionally evocative, and beautiful.\n *\n * Inspired by the gentle sounds of nature - soft air, gentle chimes, and warm tones.\n *\n * @example\n * ```typescript\n * import { $sounds } from '@schmancy/audio'\n *\n * // Play a feeling\n * $sounds.play('joyful')\n * $sounds.play('relieved')\n * $sounds.play('curious')\n *\n * // Adjust volume\n * $sounds.setVolume(0.2)\n *\n * // Mute/unmute\n * $sounds.mute()\n * $sounds.unmute()\n * ```\n */\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\n/** Happy / Pleasant feelings */\nexport type HappyFeeling =\n\t| 'joyful'\n\t| 'content'\n\t| 'excited'\n\t| 'proud'\n\t| 'hopeful'\n\t| 'relieved'\n\t| 'grateful'\n\t| 'peaceful'\n\t| 'playful'\n\t| 'amused'\n\t| 'curious'\n\t| 'inspired'\n\t| 'confident'\n\t| 'loved'\n\t| 'comforted'\n\t| 'energized'\n\t| 'celebrated'\n\n/** Sad / Low feelings */\nexport type SadFeeling =\n\t| 'sad'\n\t| 'lonely'\n\t| 'disappointed'\n\t| 'heartbroken'\n\t| 'grieving'\n\t| 'hopeless'\n\t| 'empty'\n\t| 'discouraged'\n\t| 'melancholic'\n\t| 'homesick'\n\t| 'hurt'\n\t| 'miserable'\n\t| 'regretful'\n\t| 'ashamed'\n\t| 'inferior'\n\n/** Anxious / Fearful feelings */\nexport type AnxiousFeeling =\n\t| 'anxious'\n\t| 'worried'\n\t| 'afraid'\n\t| 'terrified'\n\t| 'panicked'\n\t| 'nervous'\n\t| 'uneasy'\n\t| 'insecure'\n\t| 'overwhelmed'\n\t| 'stressed'\n\t| 'tense'\n\t| 'apprehensive'\n\t| 'startled'\n\t| 'suspicious'\n\t| 'vulnerable'\n\n/** Angry / Frustrated feelings */\nexport type AngryFeeling =\n\t| 'annoyed'\n\t| 'irritated'\n\t| 'frustrated'\n\t| 'angry'\n\t| 'enraged'\n\t| 'bitter'\n\t| 'resentful'\n\t| 'jealous'\n\t| 'envious'\n\t| 'indignant'\n\t| 'impatient'\n\t| 'hostile'\n\t| 'contemptuous'\n\n/** Tired / Drained feelings */\nexport type TiredFeeling =\n\t| 'tired'\n\t| 'exhausted'\n\t| 'drained'\n\t| 'burnedOut'\n\t| 'numb'\n\t| 'bored'\n\t| 'unmotivated'\n\t| 'apathetic'\n\t| 'restless'\n\n/** Calm / Grounded feelings */\nexport type CalmFeeling =\n\t| 'calm'\n\t| 'relaxed'\n\t| 'atEase'\n\t| 'balanced'\n\t| 'stable'\n\t| 'secure'\n\t| 'safe'\n\t| 'centered'\n\t| 'grounded'\n\t| 'accepting'\n\n/** Connected / Social feelings */\nexport type ConnectedFeeling =\n\t| 'connected'\n\t| 'accepted'\n\t| 'included'\n\t| 'belonging'\n\t| 'appreciated'\n\t| 'valued'\n\t| 'respected'\n\t| 'supported'\n\t| 'protective'\n\t| 'compassionate'\n\t| 'empathetic'\n\n/** Mixed / Complicated feelings */\nexport type MixedFeeling =\n\t| 'conflicted'\n\t| 'confused'\n\t| 'ambivalent'\n\t| 'nostalgic'\n\t| 'guilty'\n\t| 'embarrassed'\n\t| 'surprised'\n\t| 'shocked'\n\t| 'awestruck'\n\t| 'skeptical'\n\n/** All feelings */\nexport type Feeling =\n\t| HappyFeeling\n\t| SadFeeling\n\t| AnxiousFeeling\n\t| AngryFeeling\n\t| TiredFeeling\n\t| CalmFeeling\n\t| ConnectedFeeling\n\t| MixedFeeling\n\n// FeelingCategory is defined in ../types/mood-audio.types.ts and re-exported\n// from ./index.ts — the canonical source.\n\n// ============================================================================\n// SOUND GENERATOR\n// ============================================================================\n\n/**\n * Emotional Sound Generator\n * Creates soft, beautiful sounds using Web Audio API\n */\nexport class EmotionalSoundGenerator {\n\tprivate audioContext: AudioContext | null = null\n\tprivate volume = 0.15\n\tprivate muted = false\n\n\tprivate getContext(): AudioContext {\n\t\tif (!this.audioContext) {\n\t\t\tconst AudioContextClass = window.AudioContext || (window as any).webkitAudioContext\n\t\t\tthis.audioContext = new AudioContextClass()\n\t\t}\n\t\t// Resume if suspended (autoplay policy)\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// CORE SOUND PRIMITIVES\n\t// ==========================================================================\n\n\t/** Soft air puff - the foundation of our sound palette */\n\tprivate puff(startTime: number, duration: number, freq: number, vol: number): void {\n\t\tconst ctx = this.getContext()\n\t\tconst bufferSize = Math.floor(ctx.sampleRate * 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 = freq\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(vol * this.volume, startTime + 0.015)\n\t\tgain.gain.exponentialRampToValueAtTime(0.001, startTime + duration)\n\n\t\tnoise.connect(filter).connect(gain).connect(ctx.destination)\n\t\tnoise.start(startTime)\n\t\tnoise.stop(startTime + duration)\n\t}\n\n\t/** Gentle tone with envelope */\n\tprivate tone(\n\t\tstartTime: number,\n\t\tduration: number,\n\t\tfreq: number,\n\t\tvol: number,\n\t\ttype: OscillatorType = 'sine',\n\t\tfreqEnd?: number,\n\t): void {\n\t\tconst ctx = this.getContext()\n\t\tconst osc = ctx.createOscillator()\n\t\tconst gain = ctx.createGain()\n\n\t\tosc.type = type\n\t\tosc.frequency.setValueAtTime(freq, startTime)\n\t\tif (freqEnd) {\n\t\t\tosc.frequency.exponentialRampToValueAtTime(freqEnd, startTime + duration * 0.8)\n\t\t}\n\n\t\tgain.gain.setValueAtTime(0, startTime)\n\t\tgain.gain.linearRampToValueAtTime(vol * this.volume, startTime + 0.02)\n\t\tgain.gain.exponentialRampToValueAtTime(0.001, startTime + duration)\n\n\t\tosc.connect(gain).connect(ctx.destination)\n\t\tosc.start(startTime)\n\t\tosc.stop(startTime + duration)\n\t}\n\n\t/** Warm filtered tone */\n\tprivate warmTone(startTime: number, duration: number, freq: number, vol: number, filterFreq = 800): void {\n\t\tconst ctx = this.getContext()\n\t\tconst osc = ctx.createOscillator()\n\t\tconst filter = ctx.createBiquadFilter()\n\t\tconst gain = ctx.createGain()\n\n\t\tosc.type = 'sine'\n\t\tosc.frequency.value = freq\n\n\t\tfilter.type = 'lowpass'\n\t\tfilter.frequency.value = filterFreq\n\n\t\tgain.gain.setValueAtTime(0, startTime)\n\t\tgain.gain.linearRampToValueAtTime(vol * this.volume, startTime + 0.03)\n\t\tgain.gain.exponentialRampToValueAtTime(0.001, startTime + duration)\n\n\t\tosc.connect(filter).connect(gain).connect(ctx.destination)\n\t\tosc.start(startTime)\n\t\tosc.stop(startTime + duration)\n\t}\n\n\t/** Shimmer - multiple soft tones */\n\tprivate shimmer(startTime: number, duration: number, baseFreq: number, vol: number): void {\n\t\tconst freqs = [baseFreq, baseFreq * 1.5, baseFreq * 2]\n\t\tfreqs.forEach((f, i) => {\n\t\t\tthis.tone(startTime + i * 0.02, duration - i * 0.02, f, vol * (1 - i * 0.2))\n\t\t})\n\t}\n\n\t// ==========================================================================\n\t// HAPPY / PLEASANT FEELINGS\n\t// ==========================================================================\n\n\tprivate playJoyful(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Double puff (excited exhale)\n\t\tthis.puff(now, 0.08, 3000, 0.3)\n\t\tthis.puff(now + 0.06, 0.1, 3500, 0.35)\n\n\t\t// Rising happy tones\n\t\tthis.tone(now + 0.02, 0.15, 784, 0.25) // G5\n\t\tthis.tone(now + 0.1, 0.2, 988, 0.3) // B5\n\t\tthis.tone(now + 0.18, 0.25, 1175, 0.25) // D6\n\t}\n\n\tprivate playContent(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Gentle satisfied sigh\n\t\tthis.puff(now, 0.2, 1500, 0.25)\n\t\tthis.warmTone(now + 0.05, 0.3, 523, 0.2) // C5\n\t\tthis.warmTone(now + 0.15, 0.35, 659, 0.15) // E5\n\t}\n\n\tprivate playExcited(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Quick ascending puffs\n\t\tthis.puff(now, 0.06, 2500, 0.25)\n\t\tthis.puff(now + 0.05, 0.06, 3000, 0.3)\n\t\tthis.puff(now + 0.1, 0.08, 3500, 0.35)\n\n\t\t// Sparkly ascending tones\n\t\tthis.tone(now + 0.02, 0.12, 880, 0.2)\n\t\tthis.tone(now + 0.08, 0.12, 1047, 0.25)\n\t\tthis.tone(now + 0.14, 0.15, 1319, 0.3)\n\t}\n\n\tprivate playProud(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Confident puff\n\t\tthis.puff(now, 0.15, 1800, 0.3)\n\n\t\t// Strong rising chord\n\t\tthis.tone(now + 0.05, 0.25, 523, 0.25) // C5\n\t\tthis.tone(now + 0.08, 0.25, 659, 0.2) // E5\n\t\tthis.tone(now + 0.11, 0.3, 784, 0.25) // G5\n\t}\n\n\tprivate playHopeful(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Light ascending puff\n\t\tthis.puff(now, 0.12, 2200, 0.2)\n\n\t\t// Gentle rising tone\n\t\tthis.tone(now + 0.03, 0.3, 659, 0.2, 'sine', 880) // E5 -> A5\n\t}\n\n\tprivate playRelieved(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Long exhale\n\t\tthis.puff(now, 0.25, 1200, 0.35)\n\n\t\t// Descending release\n\t\tthis.warmTone(now + 0.1, 0.35, 659, 0.2) // E5\n\t\tthis.warmTone(now + 0.25, 0.4, 523, 0.15) // C5\n\t}\n\n\tprivate playGrateful(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Warm gentle puff\n\t\tthis.puff(now, 0.15, 1500, 0.25)\n\n\t\t// Warm embracing tones\n\t\tthis.warmTone(now + 0.05, 0.3, 440, 0.2) // A4\n\t\tthis.warmTone(now + 0.15, 0.35, 523, 0.2) // C5\n\t\tthis.warmTone(now + 0.25, 0.4, 659, 0.15) // E5\n\t}\n\n\tprivate playPeaceful(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Very soft puff\n\t\tthis.puff(now, 0.3, 800, 0.15)\n\n\t\t// Gentle sustained tone\n\t\tthis.warmTone(now + 0.1, 0.5, 392, 0.12, 500) // G4\n\t}\n\n\tprivate playPlayful(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Bouncy puffs\n\t\tthis.puff(now, 0.05, 2800, 0.2)\n\t\tthis.puff(now + 0.08, 0.05, 3200, 0.25)\n\t\tthis.puff(now + 0.14, 0.06, 2800, 0.2)\n\n\t\t// Playful tones\n\t\tthis.tone(now + 0.03, 0.1, 784, 0.2)\n\t\tthis.tone(now + 0.1, 0.08, 988, 0.25)\n\t\tthis.tone(now + 0.16, 0.12, 784, 0.2)\n\t}\n\n\tprivate playAmused(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Little chuckle puffs\n\t\tthis.puff(now, 0.04, 2500, 0.2)\n\t\tthis.puff(now + 0.06, 0.04, 2800, 0.22)\n\t\tthis.puff(now + 0.11, 0.05, 2600, 0.18)\n\n\t\t// Amused tone\n\t\tthis.tone(now + 0.05, 0.15, 880, 0.15)\n\t}\n\n\tprivate playCurious(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Questioning puff\n\t\tthis.puff(now, 0.1, 2000, 0.2)\n\n\t\t// Rising questioning tone\n\t\tthis.tone(now + 0.03, 0.2, 659, 0.2, 'sine', 880) // E5 -> A5 (question)\n\t}\n\n\tprivate playInspired(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Bright puff\n\t\tthis.puff(now, 0.1, 2500, 0.25)\n\n\t\t// Ascending shimmer\n\t\tthis.shimmer(now + 0.05, 0.3, 523, 0.2)\n\t}\n\n\tprivate playConfident(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Solid puff\n\t\tthis.puff(now, 0.12, 1500, 0.3)\n\n\t\t// Strong chord\n\t\tthis.tone(now + 0.04, 0.2, 523, 0.25) // C5\n\t\tthis.tone(now + 0.06, 0.22, 659, 0.2) // E5\n\t}\n\n\tprivate playLoved(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Warm embrace puff\n\t\tthis.puff(now, 0.2, 1000, 0.2)\n\n\t\t// Warm loving tones\n\t\tthis.warmTone(now + 0.08, 0.4, 392, 0.18, 600) // G4\n\t\tthis.warmTone(now + 0.2, 0.45, 494, 0.15, 600) // B4\n\t}\n\n\tprivate playComforted(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Soft blanket puff\n\t\tthis.puff(now, 0.25, 900, 0.18)\n\n\t\t// Gentle descending comfort\n\t\tthis.warmTone(now + 0.1, 0.35, 523, 0.15) // C5\n\t\tthis.warmTone(now + 0.25, 0.4, 440, 0.12) // A4\n\t}\n\n\tprivate playEnergized(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Quick energetic puffs\n\t\tthis.puff(now, 0.05, 3000, 0.25)\n\t\tthis.puff(now + 0.04, 0.05, 3500, 0.28)\n\n\t\t// Bright ascending tones\n\t\tthis.tone(now + 0.02, 0.1, 784, 0.2)\n\t\tthis.tone(now + 0.08, 0.12, 988, 0.25)\n\t\tthis.tone(now + 0.14, 0.15, 1175, 0.22)\n\t}\n\n\tprivate playCelebrated(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Bright celebratory chime\n\t\tthis.puff(now, 0.08, 2500, 0.2)\n\n\t\t// Triumphant ascending arpeggio (C major -> resolve)\n\t\tthis.tone(now + 0.02, 0.18, 523, 0.22) // C5\n\t\tthis.tone(now + 0.08, 0.18, 659, 0.24) // E5\n\t\tthis.tone(now + 0.14, 0.2, 784, 0.26) // G5\n\t\tthis.tone(now + 0.22, 0.3, 1047, 0.22) // C6 - resolution\n\n\t\t// Warm shimmer on resolution\n\t\tthis.shimmer(now + 0.25, 0.35, 523, 0.12)\n\t}\n\n\t// ==========================================================================\n\t// SAD / LOW FEELINGS\n\t// ==========================================================================\n\n\tprivate playSad(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Heavy sigh\n\t\tthis.puff(now, 0.3, 600, 0.25)\n\n\t\t// Descending sad tone\n\t\tthis.warmTone(now + 0.1, 0.4, 392, 0.2, 400) // G4\n\t\tthis.warmTone(now + 0.3, 0.45, 294, 0.15, 350) // D4\n\t}\n\n\tprivate playLonely(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Single isolated puff\n\t\tthis.puff(now, 0.2, 700, 0.2)\n\n\t\t// Sparse, distant tone\n\t\tthis.warmTone(now + 0.15, 0.5, 330, 0.12, 450) // E4\n\t}\n\n\tprivate playDisappointed(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Deflating puff\n\t\tthis.puff(now, 0.25, 800, 0.25)\n\n\t\t// Falling tone\n\t\tthis.tone(now + 0.08, 0.3, 523, 0.18, 'sine', 349) // C5 -> F4\n\t}\n\n\tprivate playMelancholic(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Wistful puff\n\t\tthis.puff(now, 0.3, 700, 0.18)\n\n\t\t// Bittersweet tones\n\t\tthis.warmTone(now + 0.1, 0.45, 440, 0.15, 500) // A4\n\t\tthis.warmTone(now + 0.3, 0.5, 392, 0.12, 450) // G4\n\t}\n\n\t// ==========================================================================\n\t// ANXIOUS / FEARFUL FEELINGS\n\t// ==========================================================================\n\n\tprivate playAnxious(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Tight, quick puffs\n\t\tthis.puff(now, 0.08, 1800, 0.2)\n\t\tthis.puff(now + 0.12, 0.08, 1900, 0.22)\n\n\t\t// Uncertain wobble\n\t\tconst osc = ctx.createOscillator()\n\t\tconst gain = ctx.createGain()\n\t\tconst lfo = ctx.createOscillator()\n\t\tconst lfoGain = ctx.createGain()\n\n\t\tosc.frequency.value = 440\n\t\tlfo.frequency.value = 8\n\t\tlfoGain.gain.value = 20\n\n\t\tlfo.connect(lfoGain).connect(osc.frequency)\n\n\t\tgain.gain.setValueAtTime(0, now)\n\t\tgain.gain.linearRampToValueAtTime(this.volume * 0.15, now + 0.03)\n\t\tgain.gain.exponentialRampToValueAtTime(0.001, now + 0.25)\n\n\t\tosc.connect(gain).connect(ctx.destination)\n\t\tlfo.start(now)\n\t\tosc.start(now)\n\t\tosc.stop(now + 0.3)\n\t\tlfo.stop(now + 0.3)\n\t}\n\n\tprivate playWorried(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Hesitant puff\n\t\tthis.puff(now, 0.15, 1200, 0.2)\n\n\t\t// Minor questioning tone\n\t\tthis.tone(now + 0.05, 0.25, 349, 0.15, 'sine', 392) // F4 -> G4 (uncertain)\n\t}\n\n\tprivate playNervous(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Quick shallow puffs\n\t\tthis.puff(now, 0.05, 2000, 0.18)\n\t\tthis.puff(now + 0.08, 0.05, 2100, 0.18)\n\t\tthis.puff(now + 0.15, 0.06, 2000, 0.16)\n\n\t\t// Trembling tone\n\t\tthis.tone(now + 0.04, 0.2, 494, 0.12) // B4\n\t}\n\n\tprivate playStartled(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Quick sharp puff\n\t\tthis.puff(now, 0.04, 3500, 0.3)\n\n\t\t// Quick high tone\n\t\tthis.tone(now, 0.08, 1047, 0.25) // C6\n\t\tthis.tone(now + 0.05, 0.15, 880, 0.15) // A5\n\t}\n\n\t// ==========================================================================\n\t// ANGRY / FRUSTRATED FEELINGS\n\t// ==========================================================================\n\n\tprivate playAnnoyed(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Short frustrated puff\n\t\tthis.puff(now, 0.1, 1000, 0.25)\n\n\t\t// Low rumble\n\t\tthis.warmTone(now + 0.03, 0.2, 294, 0.18, 400) // D4\n\t}\n\n\tprivate playFrustrated(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Tense puff\n\t\tthis.puff(now, 0.12, 900, 0.28)\n\n\t\t// Blocked feeling\n\t\tthis.tone(now + 0.04, 0.15, 349, 0.2) // F4\n\t\tthis.tone(now + 0.12, 0.12, 330, 0.18) // E4\n\t}\n\n\tprivate playImpatient(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Quick tapping puffs\n\t\tthis.puff(now, 0.04, 1500, 0.2)\n\t\tthis.puff(now + 0.08, 0.04, 1500, 0.2)\n\t\tthis.puff(now + 0.16, 0.04, 1500, 0.22)\n\n\t\t// Urgent tone\n\t\tthis.tone(now + 0.06, 0.1, 523, 0.15)\n\t}\n\n\t// ==========================================================================\n\t// TIRED / DRAINED FEELINGS\n\t// ==========================================================================\n\n\tprivate playTired(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Heavy slow puff\n\t\tthis.puff(now, 0.35, 500, 0.2)\n\n\t\t// Drooping tone\n\t\tthis.warmTone(now + 0.1, 0.4, 330, 0.12, 350) // E4\n\t}\n\n\tprivate playExhausted(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Very slow, heavy exhale\n\t\tthis.puff(now, 0.45, 400, 0.18)\n\n\t\t// Descending fade\n\t\tthis.warmTone(now + 0.15, 0.5, 294, 0.1, 300) // D4\n\t}\n\n\tprivate playBored(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Flat sigh\n\t\tthis.puff(now, 0.25, 600, 0.15)\n\n\t\t// Monotone\n\t\tthis.warmTone(now + 0.1, 0.3, 349, 0.1, 400) // F4\n\t}\n\n\t// ==========================================================================\n\t// CALM / GROUNDED FEELINGS\n\t// ==========================================================================\n\n\tprivate playCalm(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Slow, peaceful puff\n\t\tthis.puff(now, 0.3, 600, 0.12)\n\n\t\t// Sustained gentle tone\n\t\tthis.warmTone(now + 0.1, 0.5, 392, 0.1, 500) // G4\n\t}\n\n\tprivate playRelaxed(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Long soft exhale\n\t\tthis.puff(now, 0.35, 700, 0.15)\n\n\t\t// Gentle descending\n\t\tthis.warmTone(now + 0.15, 0.45, 440, 0.1) // A4\n\t\tthis.warmTone(now + 0.35, 0.5, 392, 0.08) // G4\n\t}\n\n\tprivate playGrounded(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Deep centered puff\n\t\tthis.puff(now, 0.25, 500, 0.2)\n\n\t\t// Low stable tone\n\t\tthis.warmTone(now + 0.1, 0.4, 262, 0.15, 350) // C4\n\t}\n\n\tprivate playSafe(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Soft enveloping puff\n\t\tthis.puff(now, 0.3, 700, 0.15)\n\n\t\t// Warm embracing tones\n\t\tthis.warmTone(now + 0.1, 0.4, 349, 0.12) // F4\n\t\tthis.warmTone(now + 0.25, 0.45, 440, 0.1) // A4\n\t}\n\n\t// ==========================================================================\n\t// CONNECTED / SOCIAL FEELINGS\n\t// ==========================================================================\n\n\tprivate playConnected(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Warm shared breath\n\t\tthis.puff(now, 0.2, 1200, 0.18)\n\n\t\t// Harmonious tones\n\t\tthis.warmTone(now + 0.08, 0.3, 440, 0.15) // A4\n\t\tthis.warmTone(now + 0.12, 0.32, 523, 0.12) // C5\n\t}\n\n\tprivate playAppreciated(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Touched puff\n\t\tthis.puff(now, 0.15, 1500, 0.2)\n\n\t\t// Warm ascending\n\t\tthis.warmTone(now + 0.05, 0.25, 440, 0.15)\n\t\tthis.warmTone(now + 0.15, 0.3, 523, 0.18)\n\t}\n\n\tprivate playSupported(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Held puff\n\t\tthis.puff(now, 0.25, 900, 0.18)\n\n\t\t// Stable harmonies\n\t\tthis.warmTone(now + 0.1, 0.35, 349, 0.12)\n\t\tthis.warmTone(now + 0.15, 0.4, 440, 0.1)\n\t}\n\n\t// ==========================================================================\n\t// MIXED / COMPLICATED FEELINGS\n\t// ==========================================================================\n\n\tprivate playNostalgic(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Wistful distant puff\n\t\tthis.puff(now, 0.25, 800, 0.15)\n\n\t\t// Bittersweet memory tones\n\t\tthis.warmTone(now + 0.1, 0.4, 440, 0.12, 500) // A4\n\t\tthis.warmTone(now + 0.3, 0.45, 392, 0.1, 450) // G4\n\t}\n\n\tprivate playSurprised(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Quick gasp\n\t\tthis.puff(now, 0.06, 2800, 0.25)\n\n\t\t// Rising tone\n\t\tthis.tone(now + 0.02, 0.15, 659, 0.2, 'sine', 988) // E5 -> B5\n\t}\n\n\tprivate playAwestruck(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Wonder-filled breath\n\t\tthis.puff(now, 0.2, 1500, 0.2)\n\n\t\t// Ascending wonder\n\t\tthis.shimmer(now + 0.08, 0.4, 440, 0.15)\n\t}\n\n\tprivate playConfused(): void {\n\t\tconst ctx = this.getContext()\n\t\tconst now = ctx.currentTime\n\n\t\t// Uncertain puff\n\t\tthis.puff(now, 0.12, 1200, 0.18)\n\n\t\t// Questioning wobble\n\t\tthis.tone(now + 0.04, 0.2, 440, 0.12, 'sine', 494) // A4 -> B4\n\t\tthis.tone(now + 0.15, 0.15, 466, 0.1) // Bb4 (chromatic confusion)\n\t}\n\n\t// ==========================================================================\n\t// PUBLIC API\n\t// ==========================================================================\n\n\t/** Set volume (0.0 - 1.0) */\n\tsetVolume(vol: number): void {\n\t\tthis.volume = Math.max(0, Math.min(1, vol))\n\t}\n\n\t/** Get current volume */\n\tgetVolume(): number {\n\t\treturn this.volume\n\t}\n\n\t/** Mute all sounds */\n\tmute(): void {\n\t\tthis.muted = true\n\t}\n\n\t/** Unmute sounds */\n\tunmute(): void {\n\t\tthis.muted = false\n\t}\n\n\t/** Check if muted */\n\tisMuted(): boolean {\n\t\treturn this.muted\n\t}\n\n\t/** Play a feeling */\n\tplay(feeling: Feeling): void {\n\t\tif (this.muted) return\n\n\t\t// Map feelings to their sound methods\n\t\tconst soundMap: Record<Feeling, () => void> = {\n\t\t\t// Happy\n\t\t\tjoyful: () => this.playJoyful(),\n\t\t\tcontent: () => this.playContent(),\n\t\t\texcited: () => this.playExcited(),\n\t\t\tproud: () => this.playProud(),\n\t\t\thopeful: () => this.playHopeful(),\n\t\t\trelieved: () => this.playRelieved(),\n\t\t\tgrateful: () => this.playGrateful(),\n\t\t\tpeaceful: () => this.playPeaceful(),\n\t\t\tplayful: () => this.playPlayful(),\n\t\t\tamused: () => this.playAmused(),\n\t\t\tcurious: () => this.playCurious(),\n\t\t\tinspired: () => this.playInspired(),\n\t\t\tconfident: () => this.playConfident(),\n\t\t\tloved: () => this.playLoved(),\n\t\t\tcomforted: () => this.playComforted(),\n\t\t\tenergized: () => this.playEnergized(),\n\t\t\tcelebrated: () => this.playCelebrated(),\n\n\t\t\t// Sad\n\t\t\tsad: () => this.playSad(),\n\t\t\tlonely: () => this.playLonely(),\n\t\t\tdisappointed: () => this.playDisappointed(),\n\t\t\theartbroken: () => this.playSad(), // Similar to sad\n\t\t\tgrieving: () => this.playSad(),\n\t\t\thopeless: () => this.playLonely(),\n\t\t\tempty: () => this.playLonely(),\n\t\t\tdiscouraged: () => this.playDisappointed(),\n\t\t\tmelancholic: () => this.playMelancholic(),\n\t\t\thomesick: () => this.playNostalgic(),\n\t\t\thurt: () => this.playSad(),\n\t\t\tmiserable: () => this.playSad(),\n\t\t\tregretful: () => this.playMelancholic(),\n\t\t\tashamed: () => this.playDisappointed(),\n\t\t\tinferior: () => this.playDisappointed(),\n\n\t\t\t// Anxious\n\t\t\tanxious: () => this.playAnxious(),\n\t\t\tworried: () => this.playWorried(),\n\t\t\tafraid: () => this.playAnxious(),\n\t\t\tterrified: () => this.playStartled(),\n\t\t\tpanicked: () => this.playStartled(),\n\t\t\tnervous: () => this.playNervous(),\n\t\t\tuneasy: () => this.playWorried(),\n\t\t\tinsecure: () => this.playNervous(),\n\t\t\toverwhelmed: () => this.playAnxious(),\n\t\t\tstressed: () => this.playAnxious(),\n\t\t\ttense: () => this.playAnxious(),\n\t\t\tapprehensive: () => this.playWorried(),\n\t\t\tstartled: () => this.playStartled(),\n\t\t\tsuspicious: () => this.playWorried(),\n\t\t\tvulnerable: () => this.playNervous(),\n\n\t\t\t// Angry\n\t\t\tannoyed: () => this.playAnnoyed(),\n\t\t\tirritated: () => this.playAnnoyed(),\n\t\t\tfrustrated: () => this.playFrustrated(),\n\t\t\tangry: () => this.playFrustrated(),\n\t\t\tenraged: () => this.playFrustrated(),\n\t\t\tbitter: () => this.playFrustrated(),\n\t\t\tresentful: () => this.playAnnoyed(),\n\t\t\tjealous: () => this.playAnnoyed(),\n\t\t\tenvious: () => this.playAnnoyed(),\n\t\t\tindignant: () => this.playFrustrated(),\n\t\t\timpatient: () => this.playImpatient(),\n\t\t\thostile: () => this.playFrustrated(),\n\t\t\tcontemptuous: () => this.playAnnoyed(),\n\n\t\t\t// Tired\n\t\t\ttired: () => this.playTired(),\n\t\t\texhausted: () => this.playExhausted(),\n\t\t\tdrained: () => this.playExhausted(),\n\t\t\tburnedOut: () => this.playExhausted(),\n\t\t\tnumb: () => this.playExhausted(),\n\t\t\tbored: () => this.playBored(),\n\t\t\tunmotivated: () => this.playBored(),\n\t\t\tapathetic: () => this.playBored(),\n\t\t\trestless: () => this.playTired(),\n\n\t\t\t// Calm\n\t\t\tcalm: () => this.playCalm(),\n\t\t\trelaxed: () => this.playRelaxed(),\n\t\t\tatEase: () => this.playRelaxed(),\n\t\t\tbalanced: () => this.playCalm(),\n\t\t\tstable: () => this.playGrounded(),\n\t\t\tsecure: () => this.playSafe(),\n\t\t\tsafe: () => this.playSafe(),\n\t\t\tcentered: () => this.playGrounded(),\n\t\t\tgrounded: () => this.playGrounded(),\n\t\t\taccepting: () => this.playCalm(),\n\n\t\t\t// Connected\n\t\t\tconnected: () => this.playConnected(),\n\t\t\taccepted: () => this.playAppreciated(),\n\t\t\tincluded: () => this.playConnected(),\n\t\t\tbelonging: () => this.playConnected(),\n\t\t\tappreciated: () => this.playAppreciated(),\n\t\t\tvalued: () => this.playAppreciated(),\n\t\t\trespected: () => this.playAppreciated(),\n\t\t\tsupported: () => this.playSupported(),\n\t\t\tprotective: () => this.playSupported(),\n\t\t\tcompassionate: () => this.playConnected(),\n\t\t\tempathetic: () => this.playConnected(),\n\n\t\t\t// Mixed\n\t\t\tconflicted: () => this.playConfused(),\n\t\t\tconfused: () => this.playConfused(),\n\t\t\tambivalent: () => this.playConfused(),\n\t\t\tnostalgic: () => this.playNostalgic(),\n\t\t\tguilty: () => this.playDisappointed(),\n\t\t\tembarrassed: () => this.playNervous(),\n\t\t\tsurprised: () => this.playSurprised(),\n\t\t\tshocked: () => this.playStartled(),\n\t\t\tawestruck: () => this.playAwestruck(),\n\t\t\tskeptical: () => this.playConfused(),\n\t\t}\n\n\t\tconst playFn = soundMap[feeling]\n\t\tif (playFn) {\n\t\t\tplayFn()\n\t\t}\n\t}\n\n\t/** Dispose audio context */\n\tdispose(): 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\n// ============================================================================\n// SINGLETON EXPORT\n// ============================================================================\n\n/** Global emotional sound player */\nexport const $sounds = new EmotionalSoundGenerator()\n"],"mappings":"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"}
|
package/dist/audio.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./sound.service-
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./sound.service-CVsxhQkX.cjs`),t=require(`./audio-CpwrIaw-.cjs`);exports.$sounds=t.t,exports.EmotionalSoundGenerator=t.n,exports.schmancySound=e.t,exports.sound=e.n;
|
package/dist/audio.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { n as e, t } from "./sound.service-
|
|
2
|
-
import { n, t as r } from "./audio-
|
|
1
|
+
import { n as e, t } from "./sound.service-AJwuk3yr.js";
|
|
2
|
+
import { n, t as r } from "./audio-B_0PGwYC.js";
|
|
3
3
|
export { r as $sounds, n as EmotionalSoundGenerator, t as schmancySound, e as sound };
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
require(`./chunk-CncqDLb2.cjs`);const e=require(`./SchmancyElement-CeKrBW2j.cjs`),t=require(`./mixins-Cjn20BQH.cjs`),n=require(`./search-DPKoC-dT.cjs`);require(`./input-chip-BUuFJUky.cjs`);let r=require(`rxjs`),i=require(`rxjs/operators`),a=require(`lit/directives/class-map.js`),o=require(`lit/decorators.js`),s=require(`lit`),c=require(`lit/directives/if-defined.js`),l=require(`lit/directives/ref.js`),u=require(`lit/directives/repeat.js`),d=require(`lit/directives/when.js`);var f=class extends t.o((0,s.unsafeCSS)(`:host{display:block;border:unset!important;line-height:unset!important;background:unset!important;padding:unset!important;font-size:unset!important;box-shadow:unset!important}:host:focus{box-shadow:unset!important}@keyframes onAutoFillStart{0%{}to{}}:-webkit-any(sch-input::part(input):-webkit-autofill,sch-input input:-webkit-autofill){animation-name:onAutoFillStart;animation-duration:1ms}:is(sch-input::part(input):autofill,sch-input input:autofill){animation-name:onAutoFillStart;animation-duration:1ms}`)){constructor(...e){super(...e),this.valueSet=!1,this.valuesSet=!1,this.placeholder=``,this.maxHeight=`300px`,this.multi=!1,this.description=``,this.size=`md`,this.autocomplete=`off`,this.debounceMs=200,this.similarityThreshold=.3,this.a11yId=`schmancy-autocomplete-${Math.random().toString(36).slice(2,10)}`,this.open=!1,this.inputValue=``,this.visibleOptionsCount=0,this.hasResults=!0,this.inputElementRef=(0,l.createRef)(),this.selectedValue$=new r.BehaviorSubject(``),this.selectedValues$=new r.BehaviorSubject([]),this.inputValue$=new r.BehaviorSubject(``)}resetForm(){this.multi?this.selectedValues$.next([]):this.selectedValue$.next(``),this.inputValue=``,this.inputValue$.next(``),super.resetForm()}get values(){return[...this.selectedValues$.value]}set values(e){this.valuesSet=!0,this.selectedValues$.next(Array.isArray(e)?[...e]:[])}get value(){return this.multi?this.selectedValues$.value.join(`,`):this.selectedValue$.value}set value(e){if(this.valueSet=!0,this.multi){let t=e?e.split(`,`).map(e=>e.trim()).filter(Boolean):[],n=this.selectedValues$.value;JSON.stringify(t)!==JSON.stringify(n)&&this.selectedValues$.next(t)}else e!==this.selectedValue$.value&&(this.selectedValue$.next(e),this.updateInputDisplay())}connectedCallback(){super.connectedCallback(),this.setupAutocompleteLogic(),this.setupDocumentClickHandler()}setupAutocompleteLogic(){(0,r.combineLatest)([this.selectedValue$,this.selectedValues$]).pipe((0,i.tap)(([e,t])=>{this.updateOptionSelection(e,t);let n=this.multi?t.join(`,`):e;if(this.internals?.setFormValue(n||null),this.required){let n=this.multi?t.length===0:!e;this.internals?.setValidity(n?{valueMissing:!0}:{},n?this.validationMessage||`Please select an option.`:void 0)}}),(0,i.takeUntil)(this.disconnecting)).subscribe(),this.inputValue$.pipe((0,i.distinctUntilChanged)(),(0,i.debounceTime)(this.debounceMs),(0,i.tap)(e=>{this.open&&this.filterOptions(e)}),(0,i.takeUntil)(this.disconnecting)).subscribe()}setupOptionHandlers(){this.options.forEach((e,t)=>{e.setAttribute(`role`,`option`),e.tabIndex=-1,e.id||=`${this.id}-option-${t}`,e.dataset.schmancyAutocompleteHandlers!==`attached`&&(e.dataset.schmancyAutocompleteHandlers=`attached`,(0,r.fromEvent)(e,`mousedown`).pipe((0,i.takeUntil)(this.disconnecting)).subscribe(e=>e.preventDefault()),(0,r.fromEvent)(e,`click`).pipe((0,i.takeUntil)(this.disconnecting)).subscribe(t=>{t.stopPropagation(),this.selectOption(e)}))})}updateOptionSelection(e,t){this.options.forEach(n=>{n.selected=this.multi?t.includes(n.value):n.value===e,n.setAttribute(`aria-selected`,String(n.selected))})}filterOptions(e){let t=e.trim();if(t){let e=this.options.map(e=>{let r=e.label||e.textContent||``,i=e.value,a=n.t(t,r),o=n.t(t,i);return{option:e,score:Math.max(1.1*a,o)}});e.sort((e,t)=>t.score-e.score);let r=0;e.forEach((e,t)=>{let{option:n,score:i}=e;i<this.similarityThreshold?n.hidden=!0:(n.hidden=!1,r++,n.style.order=String(t))}),this.visibleOptionsCount=r,this.hasResults=r>0}else this.options.forEach(e=>{e.hidden=!1,e.style.order=`0`}),this.visibleOptionsCount=this.options.length,this.hasResults=!0;this.announceToScreenReader(this.visibleOptionsCount>0?`${this.visibleOptionsCount} option${this.visibleOptionsCount===1?``:`s`} available.`:`No results found.`)}openDropdown(){this.open=!0,this.filterOptions(this.inputValue)}selectOption(e){if(this.multi){let t=this.selectedValues$.value,n=t.indexOf(e.value)>-1?t.filter(t=>t!==e.value):[...t,e.value];this.selectedValues$.next(n),this.announceToScreenReader(n.length>0?`Selected: ${this.getSelectedLabels().join(`, `)}`:`No options selected`),this.fireChangeEvent()}else this.selectedValue$.next(e.value),this.open=!1,this.fireChangeEvent(),this.inputValue=e.label||e.textContent||``,this.inputValue$.next(this.inputValue),this.announceToScreenReader(`Selected: ${e.label||e.textContent}`)}setupDocumentClickHandler(){(0,r.fromEvent)(document,`click`).pipe((0,i.takeUntil)(this.disconnecting)).subscribe(e=>{if(!this.open)return;let t=e.composedPath();t.includes(this)||this.options.some(e=>t.includes(e))||(this.open=!1,this.updateInputDisplay())})}updateInputDisplay(){if(this.multi)return;let e=this.selectedValue$.value,t=this.options.find(t=>t.value===e);this.inputValue=t&&(t.label||t.textContent)||``,this.inputValue$.next(this.inputValue),this.inputElementRef.value&&(this.inputElementRef.value.value=this.inputValue)}getSelectedLabels(){return this.options.filter(e=>this.multi?this.selectedValues$.value.includes(e.value):e.value===this.selectedValue$.value).map(e=>e.label||e.textContent||``)}announceToScreenReader(e){let t=this.shadowRoot?.querySelector(`#live-status`);t&&(t.textContent=e)}fireChangeEvent(){let e={value:this.value};this.multi&&(e.values=[...this.selectedValues$.value]),this.dispatchEvent(new CustomEvent(`change`,{detail:e,bubbles:!0,composed:!0}))}checkValidity(){return!this.required||(this.multi?this.selectedValues$.value.length>0:!!this.selectedValue$.value)}reportValidity(){return this.inputElementRef.value?this.inputElementRef.value.reportValidity():this.checkValidity()}firstUpdated(){this.setupOptionHandlers(),this.updateInputDisplay(),(this.shadowRoot?.querySelector(`slot`))?.addEventListener(`slotchange`,()=>{this.setupOptionHandlers(),this.updateOptionSelection(this.selectedValue$.value,this.selectedValues$.value)})}handleChipRemove(e){let t=this.selectedValues$.value.filter(t=>t!==e);this.selectedValues$.next(t),this.fireChangeEvent(),this.announceToScreenReader(`Removed: ${this.getChipLabel(e)}`)}getChipLabel(e){let t=this.options.find(t=>t.value===e);return t&&(t.label||t.textContent)||e}focusTextInput(){this.inputElementRef.value&&this.inputElementRef.value.focus()}render(){let e=`${this.id}-desc`,{height:t,padding:n,fontSize:r,labelSize:i}=(()=>{switch(this.size){case`sm`:return{height:`min-h-[40px]`,padding:`px-2`,fontSize:`text-sm`,labelSize:`text-sm`};case`lg`:return{height:`min-h-[60px]`,padding:`px-5`,fontSize:`text-lg`,labelSize:`text-lg`};default:return{height:`min-h-[50px]`,padding:`px-4`,fontSize:`text-base`,labelSize:`text-base`}}})();return s.html`
|
|
2
|
+
<div class="relative">
|
|
3
|
+
<!-- Screen reader live region -->
|
|
4
|
+
<div id="live-status" role="status" aria-live="polite" class="sr-only"></div>
|
|
5
|
+
|
|
6
|
+
<!-- Description -->
|
|
7
|
+
${this.description?s.html`<div id="${e}" class="sr-only">${this.description}</div>`:``}
|
|
8
|
+
|
|
9
|
+
<!-- Custom input wrapper for Gmail-style chip input -->
|
|
10
|
+
<slot name="trigger">
|
|
11
|
+
${(0,d.when)(this.multi,()=>s.html`
|
|
12
|
+
<!-- Custom multi-select input with inline chips -->
|
|
13
|
+
<div class="relative">
|
|
14
|
+
${(0,d.when)(this.label,()=>s.html`
|
|
15
|
+
<label
|
|
16
|
+
class="${(0,a.classMap)({"block mb-1 font-medium":!0,"text-primary-default":!this.error,"text-error-default":this.error,[i]:!0})}"
|
|
17
|
+
>
|
|
18
|
+
${this.label}${this.required?s.html`<span class="text-error-default ml-1">*</span>`:``}
|
|
19
|
+
</label>
|
|
20
|
+
`)}
|
|
21
|
+
<div
|
|
22
|
+
class="${(0,a.classMap)({"flex flex-wrap items-center gap-1":!0,[t]:!0,[n]:!0,"block w-full min-w-0 rounded-[8px] border-0":!0,"bg-surface-highest text-surface-on":!0,"ring-0 ring-inset focus-within:ring-1 focus-within:ring-inset":!0,"ring-secondary-default focus-within:ring-secondary-default":!this.error,"ring-error-default focus-within:ring-error-default":this.error,"cursor-text transition-colors duration-200":!0})}"
|
|
23
|
+
@click=${()=>this.focusTextInput()}
|
|
24
|
+
role="combobox"
|
|
25
|
+
aria-autocomplete="list"
|
|
26
|
+
aria-haspopup="listbox"
|
|
27
|
+
aria-controls="options"
|
|
28
|
+
aria-expanded=${this.open}
|
|
29
|
+
>
|
|
30
|
+
<!-- Render chips inline -->
|
|
31
|
+
${(0,u.repeat)(this.selectedValues$.value,e=>e,e=>s.html`
|
|
32
|
+
<schmancy-input-chip
|
|
33
|
+
.value=${e}
|
|
34
|
+
@remove=${e=>this.handleChipRemove(e.detail.value)}
|
|
35
|
+
class="shrink-0 my-0.5"
|
|
36
|
+
>
|
|
37
|
+
${this.getChipLabel(e)}
|
|
38
|
+
</schmancy-input-chip>
|
|
39
|
+
`)}
|
|
40
|
+
|
|
41
|
+
<!-- Text input for typing -->
|
|
42
|
+
<input
|
|
43
|
+
${(0,l.ref)(this.inputElementRef)}
|
|
44
|
+
id="autocomplete-input"
|
|
45
|
+
type="text"
|
|
46
|
+
class="flex-1 min-w-[120px] py-1 bg-transparent border-none outline-none ${r} font-medium text-surface-on placeholder:text-muted"
|
|
47
|
+
name=${this.name||this.label?.toLowerCase().replace(/\s+/g,`-`)||``}
|
|
48
|
+
.placeholder=${this.selectedValues$.value.length>0?`Add more...`:this.placeholder}
|
|
49
|
+
.value=${this.inputValue}
|
|
50
|
+
.autocomplete=${this.autocomplete}
|
|
51
|
+
aria-invalid=${this.error?`true`:`false`}
|
|
52
|
+
aria-required=${this.required?`true`:`false`}
|
|
53
|
+
aria-describedby=${this.error&&this.validationMessage?`${this.a11yId}-err`:s.nothing}
|
|
54
|
+
aria-label=${!this.label&&this.placeholder?this.placeholder:s.nothing}
|
|
55
|
+
@input=${e=>{let t=e.target.value;this.inputValue=t,this.inputValue$.next(t)}}
|
|
56
|
+
@focus=${e=>{e.stopPropagation(),this.inputValue=``,this.inputValue$.next(``),this.openDropdown()}}
|
|
57
|
+
@keydown=${e=>{this.handleKeyDown(e)}}
|
|
58
|
+
@blur=${()=>{this.handleAutoSelectOnBlur()}}
|
|
59
|
+
/>
|
|
60
|
+
</div>
|
|
61
|
+
|
|
62
|
+
<!-- Validation message -->
|
|
63
|
+
${(0,d.when)(this.error&&this.validationMessage,()=>s.html`
|
|
64
|
+
<div id="${this.a11yId}-err" class="mt-1 text-sm text-error-default" role="alert">
|
|
65
|
+
${this.validationMessage}
|
|
66
|
+
</div>
|
|
67
|
+
`)}
|
|
68
|
+
</div>
|
|
69
|
+
`,()=>s.html`
|
|
70
|
+
<!-- Regular single-select input -->
|
|
71
|
+
<schmancy-input
|
|
72
|
+
.size=${this.size}
|
|
73
|
+
${(0,l.ref)(this.inputElementRef)}
|
|
74
|
+
id="autocomplete-input"
|
|
75
|
+
class="w-full"
|
|
76
|
+
.name=${this.name||this.label?.toLowerCase().replace(/\s+/g,`-`)||``}
|
|
77
|
+
.label=${this.label}
|
|
78
|
+
.placeholder=${this.placeholder}
|
|
79
|
+
.required=${this.required}
|
|
80
|
+
.value=${this.inputValue}
|
|
81
|
+
type="text"
|
|
82
|
+
autocomplete=${this.autocomplete}
|
|
83
|
+
clickable
|
|
84
|
+
role="combobox"
|
|
85
|
+
aria-autocomplete="list"
|
|
86
|
+
aria-haspopup="listbox"
|
|
87
|
+
aria-controls="options"
|
|
88
|
+
aria-expanded=${this.open}
|
|
89
|
+
aria-describedby=${(0,c.ifDefined)(this.description?e:void 0)}
|
|
90
|
+
@input=${e=>{let t=e.target.value;this.inputValue=t,this.inputValue$.next(t)}}
|
|
91
|
+
@focus=${e=>{e.stopPropagation(),this.openDropdown()}}
|
|
92
|
+
@click=${e=>{e.stopPropagation(),this.openDropdown()}}
|
|
93
|
+
@keydown=${e=>{this.handleKeyDown(e)}}
|
|
94
|
+
@blur=${()=>{this.handleAutoSelectOnBlur()}}
|
|
95
|
+
>
|
|
96
|
+
</schmancy-input>
|
|
97
|
+
`)}
|
|
98
|
+
</slot>
|
|
99
|
+
|
|
100
|
+
<!-- Options dropdown -->
|
|
101
|
+
<ul
|
|
102
|
+
id="options"
|
|
103
|
+
class=${(0,a.classMap)({absolute:!0,"z-[1000]":!0,"mt-1":!0,"w-full":!0,"rounded-md":!0,"shadow-md":!0,"overflow-auto":!0,"min-w-full":!0,"bg-surface-low":!0,flex:!0,"flex-col":!0})}
|
|
104
|
+
role="listbox"
|
|
105
|
+
aria-multiselectable=${this.multi?`true`:`false`}
|
|
106
|
+
aria-label=${`${this.label||`Options`} dropdown`}
|
|
107
|
+
?hidden=${!this.open}
|
|
108
|
+
style="max-height: ${this.maxHeight}; display: ${this.open?`flex`:`none`};"
|
|
109
|
+
@slotchange=${()=>{this.setupOptionHandlers()}}
|
|
110
|
+
>
|
|
111
|
+
<slot></slot>
|
|
112
|
+
${this.hasResults?``:s.html` <li class="px-3 py-2 text-sm text-muted">No results found</li> `}
|
|
113
|
+
</ul>
|
|
114
|
+
</div>
|
|
115
|
+
`}handleAutoSelectOnBlur(){if(this.multi||!this.open||!this.inputValue.trim())return;let e=this.inputValue.trim(),t=null,r=0;this.options.forEach(i=>{if(i.hidden)return;let a=i.label||i.textContent||``,o=i.value,s=n.t(e,a),c=n.t(e,o),l=Math.max(1.1*s,c);l>r&&l>=this.similarityThreshold&&(r=l,t=i)}),t&&(this.selectedValue$.next(t.value),this.inputValue=t.label||t.textContent||``,this.inputValue$.next(this.inputValue),this.open=!1)}handleKeyDown(e){let t=this.open,n=this.selectedValues$.value;if(this.multi&&e.key===`Backspace`&&!this.inputValue&&n.length>0&&!t){e.preventDefault();let t=n[n.length-1];this.handleChipRemove(t);return}if(!t&&(e.key===`ArrowDown`||e.key===`Enter`))return e.preventDefault(),this.openDropdown(),void(0,r.timer)(10).pipe((0,i.takeUntil)(this.disconnecting)).subscribe(()=>{this.options.find(e=>!e.hidden)?.focus()});if(!t)return;let a=this.options.filter(e=>!e.hidden).toSorted((e,t)=>parseInt(e.style.order||`0`)-parseInt(t.style.order||`0`)),o=a.find(e=>e===document.activeElement),s=o?a.indexOf(o):-1;switch(e.key){case`Escape`:e.preventDefault(),this.open=!1,this.updateInputDisplay(),this.inputElementRef.value?.focus();break;case`Tab`:this.open=!1,this.updateInputDisplay();break;case`ArrowDown`:e.preventDefault(),a[s<a.length-1?s+1:0]?.focus();break;case`ArrowUp`:e.preventDefault(),a[s>0?s-1:a.length-1]?.focus();break;case`Home`:e.preventDefault(),a[0]?.focus();break;case`End`:e.preventDefault(),a[a.length-1]?.focus();break;case`Enter`:case` `:o&&(e.preventDefault(),this.selectOption(o))}}};e.u([(0,o.property)({type:String})],f.prototype,`placeholder`,void 0),e.u([(0,o.property)({type:String})],f.prototype,`maxHeight`,void 0),e.u([(0,o.property)({type:Boolean})],f.prototype,`multi`,void 0),e.u([(0,o.property)({type:String})],f.prototype,`description`,void 0),e.u([(0,o.property)({type:String,reflect:!0})],f.prototype,`size`,void 0),e.u([(0,o.property)({type:String})],f.prototype,`autocomplete`,void 0),e.u([(0,o.property)({type:Number})],f.prototype,`debounceMs`,void 0),e.u([(0,o.property)({type:Number})],f.prototype,`similarityThreshold`,void 0),e.u([(0,o.property)({type:Array})],f.prototype,`values`,null),e.u([(0,o.property)({type:String,reflect:!0})],f.prototype,`value`,null),e.u([(0,o.state)()],f.prototype,`open`,void 0),e.u([(0,o.state)()],f.prototype,`inputValue`,void 0),e.u([(0,o.state)()],f.prototype,`visibleOptionsCount`,void 0),e.u([(0,o.state)()],f.prototype,`hasResults`,void 0),e.u([(0,o.query)(`#options`)],f.prototype,`listbox`,void 0),e.u([(0,o.query)(`sch-input`)],f.prototype,`input`,void 0),e.u([(0,o.queryAssignedElements)({flatten:!0})],f.prototype,`options`,void 0),f=e.u([(0,o.customElement)(`schmancy-autocomplete`)],f);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autocomplete-CILzaDB7.cjs","names":[],"sources":["../src/form/fields/autocomplete/autocomplete.scss?inline","../src/form/fields/autocomplete/autocomplete.ts"],"sourcesContent":[":host {\n\tdisplay: block;\n\tborder: unset !important;\n\tline-height: unset !important;\n\tbackground: unset !important;\n\tpadding: unset !important;\n\tfont-size: unset !important;\n\tbox-shadow: unset !important;\n}\n\n:host:focus {\n\tbox-shadow: unset !important;\n}\n\n@keyframes onAutoFillStart {\n\tfrom {\n\t\t/**/\n\t}\n\tto {\n\t\t/**/\n\t}\n}\n\nsch-input::part(input):-webkit-autofill,\nsch-input input:-webkit-autofill {\n\tanimation-name: onAutoFillStart;\n\tanimation-duration: 1ms;\n}\n","import { SchmancyFormField } from '@mixins/index'\nimport { InputSize, SchmancyInput } from '@schmancy/input'\nimport SchmancyOption from '@schmancy/option/option'\nimport { html, nothing, unsafeCSS } from 'lit'\nimport { customElement, property, query, queryAssignedElements, state } from 'lit/decorators.js'\nimport { classMap } from 'lit/directives/class-map.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\nimport { createRef, ref } from 'lit/directives/ref.js'\nimport { repeat } from 'lit/directives/repeat.js'\nimport { when } from 'lit/directives/when.js'\nimport { BehaviorSubject, combineLatest, fromEvent, timer } from 'rxjs'\nimport { debounceTime, distinctUntilChanged, takeUntil, tap } from 'rxjs/operators'\nimport style from './autocomplete.scss?inline'\n\n// Import the similarity function (or include it inline)\nimport { similarity } from '../../../utils/search'\n// Import chip component for multi-select display\nimport '../../../chips/input-chip'\n\nexport type SchmancyAutocompleteChangeEvent = CustomEvent<{\n\tvalue: string | string[]\n\tvalues?: string[]\n}>\n\ninterface FilteredOption {\n\toption: SchmancyOption\n\tscore: number\n}\n\n/**\n * Autocomplete input component with filtering and multi-select support.\n *\n * @prop {string} name - Name attribute for form submission\n * @prop {string} label - Label text displayed above the input\n * @prop {string} placeholder - Placeholder text for the input\n * @prop {boolean} required - Whether the field is required\n * @prop {boolean} multi - Enable multi-select mode\n * @prop {string} value - Selected value (single select mode)\n * @prop {string[]} values - Selected values (multi-select mode)\n */\n@customElement('schmancy-autocomplete')\nexport default class SchmancyAutocomplete extends SchmancyFormField(unsafeCSS(style)) {\n\t// `formAssociated`, `internals`, `attachInternals`, `name`, `label`,\n\t// `required`, `disabled`, `error`, `validationMessage`, `hint`, `id`,\n\t// `validateOn`, `touched/dirty/submitted`, `markTouched/markSubmitted`,\n\t// `setCustomValidity`, `formDisabledCallback`, FIELD_CONNECT_EVENT dispatch\n\t// — all from the mixin.\n\n\t/** Override mixin's resetForm with autocomplete-specific subject reset. */\n\toverride resetForm(): void {\n\t\tif (this.multi) {\n\t\t\tthis.selectedValues$.next([])\n\t\t} else {\n\t\t\tthis.selectedValue$.next('')\n\t\t}\n\t\tthis.inputValue = ''\n\t\tthis.inputValue$.next('')\n\t\tsuper.resetForm()\n\t}\n\n\t// Track whether value/values have been explicitly set\n\tvalueSet: boolean = false\n\tvaluesSet: boolean = false\n\n\t// Autocomplete-specific properties only — `name`, `label`, `required`,\n\t// `error`, `validationMessage` come from the mixin.\n\t@property({ type: String }) placeholder = ''\n\t@property({ type: String }) maxHeight = '300px'\n\t@property({ type: Boolean }) multi = false\n\t@property({ type: String }) description = ''\n\t@property({ type: String, reflect: true }) size: InputSize = 'md'\n\t@property({ type: String }) autocomplete = 'off'\n\t@property({ type: Number }) debounceMs = 200\n\t@property({ type: Number }) similarityThreshold = 0.3 // Minimum similarity score to show option\n\n\tprivate readonly a11yId = `schmancy-autocomplete-${Math.random().toString(36).slice(2, 10)}`\n\n\t// Values property for multi-select mode\n\t@property({ type: Array })\n\tget values() {\n\t\treturn [...this.selectedValues$.value]\n\t}\n\tset values(vals: string[]) {\n\t\tthis.valuesSet = true\n\t\tthis.selectedValues$.next(Array.isArray(vals) ? [...vals] : [])\n\t}\n\n\t// Value property — narrowed override of the mixin's wide value union.\n\t@property({ type: String, reflect: true })\n\toverride get value(): string {\n\t\treturn this.multi ? this.selectedValues$.value.join(',') : this.selectedValue$.value\n\t}\n\toverride set value(val: string) {\n\t\tthis.valueSet = true\n\t\tif (this.multi) {\n\t\t\tconst newValues = val\n\t\t\t\t? val\n\t\t\t\t\t\t.split(',')\n\t\t\t\t\t\t.map(v => v.trim())\n\t\t\t\t\t\t.filter(Boolean)\n\t\t\t\t: []\n\t\t\tconst currentValues = this.selectedValues$.value\n\t\t\t// Only update if values actually changed\n\t\t\tif (JSON.stringify(newValues) !== JSON.stringify(currentValues)) {\n\t\t\t\tthis.selectedValues$.next(newValues)\n\t\t\t}\n\t\t} else {\n\t\t\t// Only update if value actually changed\n\t\t\tif (val !== this.selectedValue$.value) {\n\t\t\t\tthis.selectedValue$.next(val)\n\t\t\t\t// Update the input display when value is set\n\t\t\t\tthis.updateInputDisplay()\n\t\t\t}\n\t\t}\n\t}\n\n\t// State\n\t@state() private open = false\n\t@state() private inputValue = ''\n\t@state() private visibleOptionsCount = 0\n\t@state() private hasResults = true\n\n\t// DOM references\n\t@query('#options') listbox!: HTMLUListElement\n\t@query('sch-input') input!: SchmancyInput\n\t@queryAssignedElements({ flatten: true }) private options!: SchmancyOption[]\n\tprivate inputElementRef = createRef<HTMLInputElement>()\n\n\t// RxJS Subjects - only what we actually need\n\tprivate selectedValue$ = new BehaviorSubject<string>('')\n\tprivate selectedValues$ = new BehaviorSubject<string[]>([])\n\tprivate inputValue$ = new BehaviorSubject<string>('')\n\n\toverride connectedCallback() {\n\t\t// FIELD_CONNECT_EVENT is dispatched by the mixin's connectedCallback.\n\t\tsuper.connectedCallback()\n\t\tthis.setupAutocompleteLogic()\n\t\tthis.setupDocumentClickHandler()\n\t}\n\n\tprivate setupAutocompleteLogic() {\n\t\t// Sync selection state\n\t\tcombineLatest([this.selectedValue$, this.selectedValues$])\n\t\t\t.pipe(\n\t\t\t\ttap(([selectedValue, selectedValues]) => {\n\t\t\t\t\tthis.updateOptionSelection(selectedValue, selectedValues)\n\t\t\t\t\t// Keep ElementInternals form value in sync with selection (single and multi).\n\t\t\t\t\tconst formValue = this.multi ? selectedValues.join(',') : selectedValue\n\t\t\t\t\tthis.internals?.setFormValue(formValue || null)\n\t\t\t\t\tif (this.required) {\n\t\t\t\t\t\tconst missing = this.multi ? selectedValues.length === 0 : !selectedValue\n\t\t\t\t\t\tthis.internals?.setValidity(\n\t\t\t\t\t\t\tmissing ? { valueMissing: true } : {},\n\t\t\t\t\t\t\tmissing ? this.validationMessage || 'Please select an option.' : undefined,\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe()\n\n\t\t// Filter options based on input\n\t\tthis.inputValue$\n\t\t\t.pipe(\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t\tdebounceTime(this.debounceMs),\n\t\t\t\ttap(searchTerm => {\n\t\t\t\t\tif (this.open) {\n\t\t\t\t\t\tthis.filterOptions(searchTerm)\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\tprivate setupOptionHandlers() {\n\t\tthis.options.forEach((option, index) => {\n\t\t\toption.setAttribute('role', 'option')\n\t\t\toption.tabIndex = -1\n\t\t\tif (!option.id) {\n\t\t\t\toption.id = `${this.id}-option-${index}`\n\t\t\t}\n\t\t\t// Idempotent: slotchange may fire repeatedly for the same option nodes,\n\t\t\t// and addEventListener doesn't replace prior handlers like onfoo= did.\n\t\t\tif (option.dataset.schmancyAutocompleteHandlers === 'attached') return\n\t\t\toption.dataset.schmancyAutocompleteHandlers = 'attached'\n\n\t\t\t// Prevent blur handler from interfering with option selection\n\t\t\tfromEvent<MouseEvent>(option, 'mousedown')\n\t\t\t\t.pipe(takeUntil(this.disconnecting))\n\t\t\t\t.subscribe(e => e.preventDefault())\n\n\t\t\t// Handle the actual selection\n\t\t\tfromEvent<MouseEvent>(option, 'click')\n\t\t\t\t.pipe(takeUntil(this.disconnecting))\n\t\t\t\t.subscribe(e => {\n\t\t\t\t\te.stopPropagation()\n\t\t\t\t\tthis.selectOption(option)\n\t\t\t\t})\n\t\t})\n\t}\n\n\tprivate updateOptionSelection(selectedValue: string, selectedValues: string[]) {\n\t\tthis.options.forEach(option => {\n\t\t\toption.selected = this.multi ? selectedValues.includes(option.value) : option.value === selectedValue\n\t\t\toption.setAttribute('aria-selected', String(option.selected))\n\t\t})\n\t}\n\n\tprivate filterOptions(searchTerm: string) {\n\t\tconst term = searchTerm.trim()\n\n\t\tif (!term) {\n\t\t\t// Show all options if no search term\n\t\t\tthis.options.forEach(option => {\n\t\t\t\toption.hidden = false\n\t\t\t\toption.style.order = '0'\n\t\t\t})\n\t\t\tthis.visibleOptionsCount = this.options.length\n\t\t\tthis.hasResults = true\n\t\t} else {\n\t\t\t// Calculate similarity scores for all options\n\t\t\tconst scoredOptions: FilteredOption[] = this.options.map(option => {\n\t\t\t\tconst optionLabel = option.label || option.textContent || ''\n\t\t\t\tconst optionValue = option.value\n\n\t\t\t\tconst labelScore = similarity(term, optionLabel)\n\t\t\t\tconst valueScore = similarity(term, optionValue)\n\t\t\t\tconst score = Math.max(labelScore * 1.1, valueScore)\n\n\t\t\t\treturn { option, score }\n\t\t\t})\n\n\t\t\t// Sort by score (highest first)\n\t\t\tscoredOptions.sort((a, b) => b.score - a.score)\n\n\t\t\t// Apply visibility and ordering\n\t\t\tlet visibleCount = 0\n\t\t\tscoredOptions.forEach((item, index) => {\n\t\t\t\tconst { option, score } = item\n\n\t\t\t\tif (score < this.similarityThreshold) {\n\t\t\t\t\toption.hidden = true\n\t\t\t\t} else {\n\t\t\t\t\toption.hidden = false\n\t\t\t\t\tvisibleCount++\n\t\t\t\t\toption.style.order = String(index)\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tthis.visibleOptionsCount = visibleCount\n\t\t\tthis.hasResults = visibleCount > 0\n\t\t}\n\n\t\tthis.announceToScreenReader(\n\t\t\tthis.visibleOptionsCount > 0\n\t\t\t\t? `${this.visibleOptionsCount} option${this.visibleOptionsCount === 1 ? '' : 's'} available.`\n\t\t\t\t: 'No results found.',\n\t\t)\n\t}\n\n\tprivate openDropdown() {\n\t\tthis.open = true\n\t\t// Reset filters based on current input value when dropdown opens\n\t\tthis.filterOptions(this.inputValue)\n\t}\n\n\tprivate selectOption(option: SchmancyOption) {\n\t\tif (this.multi) {\n\t\t\tconst currentValues = this.selectedValues$.value\n\t\t\tconst index = currentValues.indexOf(option.value)\n\t\t\tconst newValues = index > -1 ? currentValues.filter(v => v !== option.value) : [...currentValues, option.value]\n\n\t\t\tthis.selectedValues$.next(newValues)\n\t\t\tthis.announceToScreenReader(\n\t\t\t\tnewValues.length > 0 ? `Selected: ${this.getSelectedLabels().join(', ')}` : 'No options selected',\n\t\t\t)\n\t\t\tthis.fireChangeEvent()\n\t\t} else {\n\t\t\t// Update value first\n\t\t\tthis.selectedValue$.next(option.value)\n\n\t\t\t// Close dropdown IMMEDIATELY to prevent blur handler from firing\n\t\t\tthis.open = false\n\n\t\t\t// Now fire event with the NEW value\n\t\t\tthis.fireChangeEvent()\n\n\t\t\t// Update UI\n\t\t\tthis.inputValue = option.label || option.textContent || ''\n\t\t\tthis.inputValue$.next(this.inputValue)\n\n\t\t\tthis.announceToScreenReader(`Selected: ${option.label || option.textContent}`)\n\t\t}\n\t}\n\n\tprivate setupDocumentClickHandler() {\n\t\tfromEvent<MouseEvent>(document, 'click')\n\t\t\t.pipe(takeUntil(this.disconnecting))\n\t\t\t.subscribe(e => {\n\t\t\t\tif (!this.open) return\n\t\t\t\tconst path = e.composedPath()\n\t\t\t\tif (!path.includes(this) && !this.options.some(opt => path.includes(opt))) {\n\t\t\t\t\tthis.open = false\n\t\t\t\t\tthis.updateInputDisplay()\n\t\t\t\t}\n\t\t\t})\n\t}\n\n\tprivate updateInputDisplay() {\n\t\t// For multi-select, we don't update input display since chips show the selections\n\t\tif (this.multi) return\n\n\t\tconst selectedValue = this.selectedValue$.value\n\t\tconst option = this.options.find(opt => opt.value === selectedValue)\n\t\tthis.inputValue = option ? option.label || option.textContent || '' : ''\n\t\tthis.inputValue$.next(this.inputValue)\n\n\t\tif (this.inputElementRef.value) {\n\t\t\tthis.inputElementRef.value.value = this.inputValue\n\t\t}\n\t}\n\n\tprivate getSelectedLabels(): string[] {\n\t\treturn this.options\n\t\t\t.filter(option =>\n\t\t\t\tthis.multi ? this.selectedValues$.value.includes(option.value) : option.value === this.selectedValue$.value,\n\t\t\t)\n\t\t\t.map(option => option.label || option.textContent || '')\n\t}\n\n\tprivate announceToScreenReader(message: string) {\n\t\tconst liveRegion = this.shadowRoot?.querySelector('#live-status')\n\t\tif (liveRegion) {\n\t\t\tliveRegion.textContent = message\n\t\t}\n\t}\n\n\tprivate fireChangeEvent() {\n\t\tconst detail: SchmancyAutocompleteChangeEvent['detail'] = {\n\t\t\tvalue: this.value,\n\t\t}\n\n\t\tif (this.multi) {\n\t\t\tdetail.values = [...this.selectedValues$.value]\n\t\t}\n\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent<SchmancyAutocompleteChangeEvent['detail']>('change', {\n\t\t\t\tdetail,\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t}\n\n\tpublic checkValidity(): boolean {\n\t\tif (!this.required) return true\n\t\treturn this.multi ? this.selectedValues$.value.length > 0 : Boolean(this.selectedValue$.value)\n\t}\n\n\tpublic reportValidity(): boolean {\n\t\tif (this.inputElementRef.value) {\n\t\t\treturn this.inputElementRef.value.reportValidity()\n\t\t}\n\t\treturn this.checkValidity()\n\t}\n\n\tfirstUpdated() {\n\t\tthis.setupOptionHandlers()\n\n\t\t// Sync initial value with display after options are available\n\t\tthis.updateInputDisplay()\n\n\t\t// Update options when slot changes\n\t\tconst slot = this.shadowRoot?.querySelector('slot')\n\t\tslot?.addEventListener('slotchange', () => {\n\t\t\tthis.setupOptionHandlers()\n\t\t\tthis.updateOptionSelection(this.selectedValue$.value, this.selectedValues$.value)\n\t\t})\n\t}\n\n\tprivate handleChipRemove(value: string) {\n\t\tconst currentValues = this.selectedValues$.value\n\t\tconst newValues = currentValues.filter(v => v !== value)\n\t\tthis.selectedValues$.next(newValues)\n\t\tthis.fireChangeEvent()\n\t\tthis.announceToScreenReader(`Removed: ${this.getChipLabel(value)}`)\n\t}\n\n\tprivate getChipLabel(value: string): string {\n\t\tconst option = this.options.find(opt => opt.value === value)\n\t\treturn option ? option.label || option.textContent || value : value\n\t}\n\n\tprivate focusTextInput() {\n\t\tif (this.inputElementRef.value) {\n\t\t\tthis.inputElementRef.value.focus()\n\t\t}\n\t}\n\n\trender() {\n\t\tconst descriptionId = `${this.id}-desc`\n\n\t\t// Get size-based styling to match Schmancy input\n\t\tconst getSizeStyles = () => {\n\t\t\tswitch (this.size) {\n\t\t\t\tcase 'sm':\n\t\t\t\t\treturn {\n\t\t\t\t\t\theight: 'min-h-[40px]',\n\t\t\t\t\t\tpadding: 'px-2',\n\t\t\t\t\t\tfontSize: 'text-sm', // 14px\n\t\t\t\t\t\tlabelSize: 'text-sm',\n\t\t\t\t\t}\n\t\t\t\tcase 'lg':\n\t\t\t\t\treturn {\n\t\t\t\t\t\theight: 'min-h-[60px]',\n\t\t\t\t\t\tpadding: 'px-5',\n\t\t\t\t\t\tfontSize: 'text-lg', // 18px\n\t\t\t\t\t\tlabelSize: 'text-lg',\n\t\t\t\t\t}\n\t\t\t\tcase 'md':\n\t\t\t\tdefault:\n\t\t\t\t\treturn {\n\t\t\t\t\t\theight: 'min-h-[50px]',\n\t\t\t\t\t\tpadding: 'px-4',\n\t\t\t\t\t\tfontSize: 'text-base', // 16px\n\t\t\t\t\t\tlabelSize: 'text-base',\n\t\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst { height, padding, fontSize, labelSize } = getSizeStyles()\n\n\t\treturn html`\n\t\t\t<div class=\"relative\">\n\t\t\t\t<!-- Screen reader live region -->\n\t\t\t\t<div id=\"live-status\" role=\"status\" aria-live=\"polite\" class=\"sr-only\"></div>\n\n\t\t\t\t<!-- Description -->\n\t\t\t\t${this.description ? html`<div id=\"${descriptionId}\" class=\"sr-only\">${this.description}</div>` : ''}\n\n\t\t\t\t<!-- Custom input wrapper for Gmail-style chip input -->\n\t\t\t\t<slot name=\"trigger\">\n\t\t\t\t\t${when(\n\t\t\t\t\t\tthis.multi,\n\t\t\t\t\t\t() => html`\n\t\t\t\t\t\t\t<!-- Custom multi-select input with inline chips -->\n\t\t\t\t\t\t\t<div class=\"relative\">\n\t\t\t\t\t\t\t\t${when(\n\t\t\t\t\t\t\t\t\tthis.label,\n\t\t\t\t\t\t\t\t\t() => html`\n\t\t\t\t\t\t\t\t\t\t<label\n\t\t\t\t\t\t\t\t\t\t\tclass=\"${classMap({\n\t\t\t\t\t\t\t\t\t\t\t\t'block mb-1 font-medium': true,\n\t\t\t\t\t\t\t\t\t\t\t\t'text-primary-default': !this.error,\n\t\t\t\t\t\t\t\t\t\t\t\t'text-error-default': this.error,\n\t\t\t\t\t\t\t\t\t\t\t\t[labelSize]: true,\n\t\t\t\t\t\t\t\t\t\t\t})}\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t${this.label}${this.required ? html`<span class=\"text-error-default ml-1\">*</span>` : ''}\n\t\t\t\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t\t\t\t`,\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclass=\"${classMap({\n\t\t\t\t\t\t\t\t\t\t'flex flex-wrap items-center gap-1': true,\n\t\t\t\t\t\t\t\t\t\t[height]: true,\n\t\t\t\t\t\t\t\t\t\t[padding]: true,\n\t\t\t\t\t\t\t\t\t\t'block w-full min-w-0 rounded-[8px] border-0': true,\n\t\t\t\t\t\t\t\t\t\t'bg-surface-highest text-surface-on': true,\n\t\t\t\t\t\t\t\t\t\t'ring-0 ring-inset focus-within:ring-1 focus-within:ring-inset': true,\n\t\t\t\t\t\t\t\t\t\t'ring-secondary-default focus-within:ring-secondary-default': !this.error,\n\t\t\t\t\t\t\t\t\t\t'ring-error-default focus-within:ring-error-default': this.error,\n\t\t\t\t\t\t\t\t\t\t'cursor-text transition-colors duration-200': true,\n\t\t\t\t\t\t\t\t\t})}\"\n\t\t\t\t\t\t\t\t\t@click=${() => this.focusTextInput()}\n\t\t\t\t\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\t\t\t\t\taria-autocomplete=\"list\"\n\t\t\t\t\t\t\t\t\taria-haspopup=\"listbox\"\n\t\t\t\t\t\t\t\t\taria-controls=\"options\"\n\t\t\t\t\t\t\t\t\taria-expanded=${this.open}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<!-- Render chips inline -->\n\t\t\t\t\t\t\t\t\t${repeat(\n\t\t\t\t\t\t\t\t\t\tthis.selectedValues$.value,\n\t\t\t\t\t\t\t\t\t\tvalue => value,\n\t\t\t\t\t\t\t\t\t\tvalue => html`\n\t\t\t\t\t\t\t\t\t\t\t<schmancy-input-chip\n\t\t\t\t\t\t\t\t\t\t\t\t.value=${value}\n\t\t\t\t\t\t\t\t\t\t\t\t@remove=${(e: CustomEvent) => this.handleChipRemove(e.detail.value)}\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"shrink-0 my-0.5\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t${this.getChipLabel(value)}\n\t\t\t\t\t\t\t\t\t\t\t</schmancy-input-chip>\n\t\t\t\t\t\t\t\t\t\t`,\n\t\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t\t<!-- Text input for typing -->\n\t\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\t\t${ref(this.inputElementRef)}\n\t\t\t\t\t\t\t\t\t\tid=\"autocomplete-input\"\n\t\t\t\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\t\t\t\tclass=\"flex-1 min-w-[120px] py-1 bg-transparent border-none outline-none ${fontSize} font-medium text-surface-on placeholder:text-muted\"\n\t\t\t\t\t\t\t\t\t\tname=${this.name || this.label?.toLowerCase().replace(/\\s+/g, '-') || ''}\n\t\t\t\t\t\t\t\t\t\t.placeholder=${this.selectedValues$.value.length > 0 ? 'Add more...' : this.placeholder}\n\t\t\t\t\t\t\t\t\t\t.value=${this.inputValue}\n\t\t\t\t\t\t\t\t\t\t.autocomplete=${this.autocomplete}\n\t\t\t\t\t\t\t\t\t\taria-invalid=${this.error ? 'true' : 'false'}\n\t\t\t\t\t\t\t\t\t\taria-required=${this.required ? 'true' : 'false'}\n\t\t\t\t\t\t\t\t\t\taria-describedby=${this.error && this.validationMessage ? `${this.a11yId}-err` : nothing}\n\t\t\t\t\t\t\t\t\t\taria-label=${!this.label && this.placeholder ? this.placeholder : nothing}\n\t\t\t\t\t\t\t\t\t\t@input=${(e: Event) => {\n\t\t\t\t\t\t\t\t\t\t\tconst value = (e.target as HTMLInputElement).value\n\t\t\t\t\t\t\t\t\t\t\tthis.inputValue = value\n\t\t\t\t\t\t\t\t\t\t\tthis.inputValue$.next(value)\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t@focus=${(e: FocusEvent) => {\n\t\t\t\t\t\t\t\t\t\t\te.stopPropagation()\n\t\t\t\t\t\t\t\t\t\t\t// Clear input on focus for new searches\n\t\t\t\t\t\t\t\t\t\t\tthis.inputValue = ''\n\t\t\t\t\t\t\t\t\t\t\tthis.inputValue$.next('')\n\t\t\t\t\t\t\t\t\t\t\tthis.openDropdown()\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t@keydown=${(e: KeyboardEvent) => {\n\t\t\t\t\t\t\t\t\t\t\tthis.handleKeyDown(e)\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t@blur=${() => {\n\t\t\t\t\t\t\t\t\t\t\tthis.handleAutoSelectOnBlur()\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t<!-- Validation message -->\n\t\t\t\t\t\t\t\t${when(\n\t\t\t\t\t\t\t\t\tthis.error && this.validationMessage,\n\t\t\t\t\t\t\t\t\t() => html`\n\t\t\t\t\t\t\t\t\t\t<div id=\"${this.a11yId}-err\" class=\"mt-1 text-sm text-error-default\" role=\"alert\">\n\t\t\t\t\t\t\t\t\t\t\t${this.validationMessage}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t`,\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t`,\n\t\t\t\t\t\t() => html`\n\t\t\t\t\t\t\t<!-- Regular single-select input -->\n\t\t\t\t\t\t\t<schmancy-input\n\t\t\t\t\t\t\t\t.size=${this.size}\n\t\t\t\t\t\t\t\t${ref(this.inputElementRef)}\n\t\t\t\t\t\t\t\tid=\"autocomplete-input\"\n\t\t\t\t\t\t\t\tclass=\"w-full\"\n\t\t\t\t\t\t\t\t.name=${this.name || this.label?.toLowerCase().replace(/\\s+/g, '-') || ''}\n\t\t\t\t\t\t\t\t.label=${this.label}\n\t\t\t\t\t\t\t\t.placeholder=${this.placeholder}\n\t\t\t\t\t\t\t\t.required=${this.required}\n\t\t\t\t\t\t\t\t.value=${this.inputValue}\n\t\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\t\tautocomplete=${this.autocomplete}\n\t\t\t\t\t\t\t\tclickable\n\t\t\t\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\t\t\t\taria-autocomplete=\"list\"\n\t\t\t\t\t\t\t\taria-haspopup=\"listbox\"\n\t\t\t\t\t\t\t\taria-controls=\"options\"\n\t\t\t\t\t\t\t\taria-expanded=${this.open}\n\t\t\t\t\t\t\t\taria-describedby=${ifDefined(this.description ? descriptionId : undefined)}\n\t\t\t\t\t\t\t\t@input=${(e: Event) => {\n\t\t\t\t\t\t\t\t\tconst value = (e.target as HTMLInputElement).value\n\t\t\t\t\t\t\t\t\tthis.inputValue = value\n\t\t\t\t\t\t\t\t\tthis.inputValue$.next(value)\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t@focus=${(e: FocusEvent) => {\n\t\t\t\t\t\t\t\t\te.stopPropagation()\n\t\t\t\t\t\t\t\t\tthis.openDropdown()\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t@click=${(e: MouseEvent) => {\n\t\t\t\t\t\t\t\t\te.stopPropagation()\n\t\t\t\t\t\t\t\t\tthis.openDropdown()\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t@keydown=${(e: KeyboardEvent) => {\n\t\t\t\t\t\t\t\t\tthis.handleKeyDown(e)\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t@blur=${() => {\n\t\t\t\t\t\t\t\t\tthis.handleAutoSelectOnBlur()\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t</schmancy-input>\n\t\t\t\t\t\t`,\n\t\t\t\t\t)}\n\t\t\t\t</slot>\n\n\t\t\t\t<!-- Options dropdown -->\n\t\t\t\t<ul\n\t\t\t\t\tid=\"options\"\n\t\t\t\t\tclass=${classMap({\n\t\t\t\t\t\tabsolute: true,\n\t\t\t\t\t\t'z-[1000]': true,\n\t\t\t\t\t\t'mt-1': true,\n\t\t\t\t\t\t'w-full': true,\n\t\t\t\t\t\t'rounded-md': true,\n\t\t\t\t\t\t'shadow-md': true,\n\t\t\t\t\t\t'overflow-auto': true,\n\t\t\t\t\t\t'min-w-full': true,\n\t\t\t\t\t\t'bg-surface-low': true,\n\t\t\t\t\t\tflex: true,\n\t\t\t\t\t\t'flex-col': true, // Enable flexbox for ordering\n\t\t\t\t\t})}\n\t\t\t\t\trole=\"listbox\"\n\t\t\t\t\taria-multiselectable=${this.multi ? 'true' : 'false'}\n\t\t\t\t\taria-label=${`${this.label || 'Options'} dropdown`}\n\t\t\t\t\t?hidden=${!this.open}\n\t\t\t\t\tstyle=\"max-height: ${this.maxHeight}; display: ${this.open ? 'flex' : 'none'};\"\n\t\t\t\t\t@slotchange=${() => {\n\t\t\t\t\t\tthis.setupOptionHandlers()\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<slot></slot>\n\t\t\t\t\t${!this.hasResults ? html` <li class=\"px-3 py-2 text-sm text-muted\">No results found</li> ` : ''}\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t`\n\t}\n\n\tprivate handleAutoSelectOnBlur() {\n\t\t// Only auto-select in single-select mode and when dropdown is open with a search term\n\t\tif (this.multi || !this.open || !this.inputValue.trim()) {\n\t\t\treturn\n\t\t}\n\n\t\tconst searchTerm = this.inputValue.trim()\n\n\t\t// Find the best matching option using the same similarity logic as filtering\n\t\tlet bestMatch: SchmancyOption | null = null\n\t\tlet bestScore = 0\n\n\t\tthis.options.forEach(option => {\n\t\t\t// Skip hidden options\n\t\t\tif (option.hidden) return\n\n\t\t\t// Get text to search in (prioritize label, then textContent, then value)\n\t\t\tconst optionLabel = option.label || option.textContent || ''\n\t\t\tconst optionValue = option.value\n\n\t\t\t// Calculate similarity scores for both label and value\n\t\t\tconst labelScore = similarity(searchTerm, optionLabel)\n\t\t\tconst valueScore = similarity(searchTerm, optionValue)\n\n\t\t\t// Use the higher score (prioritizing label matches)\n\t\t\tconst score = Math.max(labelScore * 1.1, valueScore) // Slight boost for label matches\n\n\t\t\t// Keep track of best match that meets threshold\n\t\t\tif (score > bestScore && score >= this.similarityThreshold) {\n\t\t\t\tbestScore = score\n\t\t\t\tbestMatch = option\n\t\t\t}\n\t\t})\n\n\t\t// Auto-select the best match if found\n\t\tif (bestMatch) {\n\t\t\t// Silently update the selected value without firing change event\n\t\t\tthis.selectedValue$.next(bestMatch.value)\n\t\t\tthis.inputValue = bestMatch.label || bestMatch.textContent || ''\n\t\t\tthis.inputValue$.next(this.inputValue)\n\t\t\tthis.open = false\n\t\t}\n\t}\n\n\tprivate handleKeyDown(event: KeyboardEvent) {\n\t\tconst isOpen = this.open\n\t\tconst selectedValues = this.selectedValues$.value\n\n\t\t// Handle backspace to remove last chip in multi-select when input is empty\n\t\tif (this.multi && event.key === 'Backspace' && !this.inputValue && selectedValues.length > 0 && !isOpen) {\n\t\t\tevent.preventDefault()\n\t\t\tconst lastValue = selectedValues[selectedValues.length - 1]\n\t\t\tthis.handleChipRemove(lastValue)\n\t\t\treturn\n\t\t}\n\n\t\tif (!isOpen && (event.key === 'ArrowDown' || event.key === 'Enter')) {\n\t\t\tevent.preventDefault()\n\t\t\tthis.openDropdown()\n\n\t\t\ttimer(10)\n\t\t\t\t.pipe(takeUntil(this.disconnecting))\n\t\t\t\t.subscribe(() => {\n\t\t\t\t\tconst firstVisible = this.options.find(opt => !opt.hidden)\n\t\t\t\t\tfirstVisible?.focus()\n\t\t\t\t})\n\t\t\treturn\n\t\t}\n\n\t\tif (!isOpen) return\n\n\t\tconst visibleOptions = this.options\n\t\t\t.filter(opt => !opt.hidden)\n\t\t\t.toSorted((a, b) => parseInt(a.style.order || '0') - parseInt(b.style.order || '0'))\n\n\t\tconst focusedOption = visibleOptions.find(opt => opt === document.activeElement)\n\t\tconst currentIndex = focusedOption ? visibleOptions.indexOf(focusedOption) : -1\n\n\t\tswitch (event.key) {\n\t\t\tcase 'Escape':\n\t\t\t\tevent.preventDefault()\n\t\t\t\tthis.open = false\n\t\t\t\tthis.updateInputDisplay()\n\t\t\t\tthis.inputElementRef.value?.focus()\n\t\t\t\tbreak\n\n\t\t\tcase 'Tab':\n\t\t\t\tthis.open = false\n\t\t\t\tthis.updateInputDisplay()\n\t\t\t\tbreak\n\n\t\t\tcase 'ArrowDown':\n\t\t\t\tevent.preventDefault()\n\t\t\t\tconst nextIndex = currentIndex < visibleOptions.length - 1 ? currentIndex + 1 : 0\n\t\t\t\tvisibleOptions[nextIndex]?.focus()\n\t\t\t\tbreak\n\n\t\t\tcase 'ArrowUp':\n\t\t\t\tevent.preventDefault()\n\t\t\t\tconst prevIndex = currentIndex > 0 ? currentIndex - 1 : visibleOptions.length - 1\n\t\t\t\tvisibleOptions[prevIndex]?.focus()\n\t\t\t\tbreak\n\n\t\t\tcase 'Home':\n\t\t\t\tevent.preventDefault()\n\t\t\t\tvisibleOptions[0]?.focus()\n\t\t\t\tbreak\n\n\t\t\tcase 'End':\n\t\t\t\tevent.preventDefault()\n\t\t\t\tvisibleOptions[visibleOptions.length - 1]?.focus()\n\t\t\t\tbreak\n\n\t\t\tcase 'Enter':\n\t\t\tcase ' ':\n\t\t\t\tif (focusedOption) {\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tthis.selectOption(focusedOption)\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t}\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-autocomplete': SchmancyAutocomplete\n\t}\n}\n"],"mappings":"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"}
|