@mhmo91/schmancy 0.7.5 → 0.7.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ai/details.md +309 -44
- package/ai/directives.md +214 -7
- package/ai/typewriter.md +151 -33
- package/dist/ai/details.md +309 -44
- package/dist/ai/directives.md +214 -7
- package/dist/ai/typewriter.md +151 -33
- package/dist/{animated-text-DnFenRS1.cjs → animated-text-Be290e6l.cjs} +2 -2
- package/dist/{animated-text-DnFenRS1.cjs.map → animated-text-Be290e6l.cjs.map} +1 -1
- package/dist/{animated-text-YBgWXuVJ.js → animated-text-DuLrWJ6O.js} +3 -3
- package/dist/{animated-text-YBgWXuVJ.js.map → animated-text-DuLrWJ6O.js.map} +1 -1
- package/dist/animated-text.cjs +1 -1
- package/dist/animated-text.js +1 -1
- package/dist/area.cjs +1 -1
- package/dist/{area.component-C_nUxyiY.js → area.component-BzjJiNTJ.js} +47 -39
- package/dist/area.component-BzjJiNTJ.js.map +1 -0
- package/dist/{area.component-BojFAcRk.cjs → area.component-FL_IUylM.cjs} +4 -4
- package/dist/area.component-FL_IUylM.cjs.map +1 -0
- package/dist/area.js +1 -1
- package/dist/{autocomplete-B8oOdRsV.cjs → autocomplete-CHmGhBNt.cjs} +2 -2
- package/dist/{autocomplete-B8oOdRsV.cjs.map → autocomplete-CHmGhBNt.cjs.map} +1 -1
- package/dist/{autocomplete-B-X_D8MC.js → autocomplete-FLkd9ju8.js} +5 -5
- package/dist/{autocomplete-B-X_D8MC.js.map → autocomplete-FLkd9ju8.js.map} +1 -1
- package/dist/autocomplete.cjs +1 -1
- package/dist/autocomplete.js +1 -1
- package/dist/{avatar-DBdyON6Y.cjs → avatar-B_uJN9WV.cjs} +2 -2
- package/dist/{avatar-DBdyON6Y.cjs.map → avatar-B_uJN9WV.cjs.map} +1 -1
- package/dist/{avatar-Cro3M4Lw.js → avatar-C8P4lVfa.js} +52 -52
- package/dist/{avatar-Cro3M4Lw.js.map → avatar-C8P4lVfa.js.map} +1 -1
- package/dist/badge.cjs +1 -1
- package/dist/badge.js +1 -1
- package/dist/boat-Ma6LW-ny.js +301 -0
- package/dist/boat-Ma6LW-ny.js.map +1 -0
- package/dist/boat-kYOUec8f.cjs +97 -0
- package/dist/boat-kYOUec8f.cjs.map +1 -0
- package/dist/boat.cjs +1 -1
- package/dist/boat.js +1 -1
- package/dist/busy.cjs +1 -1
- package/dist/busy.js +1 -1
- package/dist/button.cjs +1 -1
- package/dist/button.js +1 -1
- package/dist/card.cjs +1 -1
- package/dist/card.js +1 -1
- package/dist/{checkbox-DMfwDgYx.cjs → checkbox-DLZkKaon.cjs} +2 -2
- package/dist/{checkbox-DMfwDgYx.cjs.map → checkbox-DLZkKaon.cjs.map} +1 -1
- package/dist/{checkbox-BOmazo-k.js → checkbox-x46L-XTG.js} +2 -2
- package/dist/{checkbox-BOmazo-k.js.map → checkbox-x46L-XTG.js.map} +1 -1
- package/dist/checkbox.cjs +1 -1
- package/dist/checkbox.js +1 -1
- package/dist/chips.cjs +1 -1
- package/dist/chips.js +2 -2
- package/dist/code-highlight.cjs +1 -1
- package/dist/code-highlight.js +1 -1
- package/dist/{code-preview-CbZzYTk2.cjs → code-preview-BsQq77nu.cjs} +2 -2
- package/dist/{code-preview-CbZzYTk2.cjs.map → code-preview-BsQq77nu.cjs.map} +1 -1
- package/dist/{code-preview-DgyY3Jlw.js → code-preview-C3DLglSl.js} +2 -2
- package/dist/{code-preview-DgyY3Jlw.js.map → code-preview-C3DLglSl.js.map} +1 -1
- package/dist/components.cjs +1 -1
- package/dist/components.js +1 -1
- package/dist/content-drawer.cjs +1 -1
- package/dist/content-drawer.js +1 -1
- package/dist/{date-range-BV0479CW.js → date-range-Cm0TCfwu.js} +3 -3
- package/dist/{date-range-BV0479CW.js.map → date-range-Cm0TCfwu.js.map} +1 -1
- package/dist/{date-range-47SnbVM6.cjs → date-range-Cy97kOP_.cjs} +2 -2
- package/dist/{date-range-47SnbVM6.cjs.map → date-range-Cy97kOP_.cjs.map} +1 -1
- package/dist/{date-range-inline-GfLao0NN.js → date-range-inline-CfDu-lIo.js} +3 -3
- package/dist/{date-range-inline-GfLao0NN.js.map → date-range-inline-CfDu-lIo.js.map} +1 -1
- package/dist/{date-range-inline-HNDLTnYi.cjs → date-range-inline-cGptw0hr.cjs} +2 -2
- package/dist/{date-range-inline-HNDLTnYi.cjs.map → date-range-inline-cGptw0hr.cjs.map} +1 -1
- package/dist/date-range-inline.cjs +1 -1
- package/dist/date-range-inline.js +1 -1
- package/dist/date-range.cjs +1 -1
- package/dist/date-range.js +1 -1
- package/dist/{delay-B40l99jW.js → delay-BINGOQ7f.js} +2 -2
- package/dist/{delay-B40l99jW.js.map → delay-BINGOQ7f.js.map} +1 -1
- package/dist/{delay-Dr3Fr5YB.cjs → delay-CXFIM6qK.cjs} +2 -2
- package/dist/{delay-Dr3Fr5YB.cjs.map → delay-CXFIM6qK.cjs.map} +1 -1
- package/dist/delay.cjs +1 -1
- package/dist/delay.js +1 -1
- package/dist/details-CLRikV4s.cjs +64 -0
- package/dist/details-CLRikV4s.cjs.map +1 -0
- package/dist/details-bgq2X_hO.js +115 -0
- package/dist/details-bgq2X_hO.js.map +1 -0
- package/dist/details.cjs +1 -1
- package/dist/details.js +1 -1
- package/dist/{dialog-content-Emd7BLQA.cjs → dialog-content-B59ekS_y.cjs} +2 -2
- package/dist/{dialog-content-Emd7BLQA.cjs.map → dialog-content-B59ekS_y.cjs.map} +1 -1
- package/dist/{dialog-content-B_amCfq7.js → dialog-content-Cu7fqN8Y.js} +3 -3
- package/dist/{dialog-content-B_amCfq7.js.map → dialog-content-Cu7fqN8Y.js.map} +1 -1
- package/dist/dialog.cjs +1 -1
- package/dist/dialog.js +1 -1
- package/dist/directives.cjs +1 -1
- package/dist/directives.js +10 -6
- package/dist/divider-8tk2mDbL.cjs +58 -0
- package/dist/divider-8tk2mDbL.cjs.map +1 -0
- package/dist/divider-Bu6tzwGl.js +84 -0
- package/dist/divider-Bu6tzwGl.js.map +1 -0
- package/dist/divider.cjs +1 -1
- package/dist/divider.js +1 -1
- package/dist/{dropdown-content-BpJq8Q1u.cjs → dropdown-content-DFb07S8x.cjs} +2 -2
- package/dist/{dropdown-content-BpJq8Q1u.cjs.map → dropdown-content-DFb07S8x.cjs.map} +1 -1
- package/dist/{dropdown-content-Bw9jnfCR.js → dropdown-content-fVhnEKdY.js} +3 -3
- package/dist/{dropdown-content-Bw9jnfCR.js.map → dropdown-content-fVhnEKdY.js.map} +1 -1
- package/dist/dropdown.cjs +1 -1
- package/dist/dropdown.js +1 -1
- package/dist/{email-recipients-Bxvu6zi9.cjs → email-recipients-BG3GxJvc.cjs} +2 -2
- package/dist/{email-recipients-Bxvu6zi9.cjs.map → email-recipients-BG3GxJvc.cjs.map} +1 -1
- package/dist/{email-recipients-DZGMhyg4.js → email-recipients-OG52RGiH.js} +6 -6
- package/dist/{email-recipients-DZGMhyg4.js.map → email-recipients-OG52RGiH.js.map} +1 -1
- package/dist/extra.cjs +1 -1
- package/dist/extra.js +1 -1
- package/dist/{flex-DUgMxT_9.js → flex-CYQU6Pf8.js} +2 -2
- package/dist/{flex-DUgMxT_9.js.map → flex-CYQU6Pf8.js.map} +1 -1
- package/dist/{flex-DakK9gco.cjs → flex-DytMcHmq.cjs} +2 -2
- package/dist/{flex-DakK9gco.cjs.map → flex-DytMcHmq.cjs.map} +1 -1
- package/dist/{form-CPmMvWvE.cjs → form-cWJBcwc6.cjs} +2 -2
- package/dist/{form-CPmMvWvE.cjs.map → form-cWJBcwc6.cjs.map} +1 -1
- package/dist/{form-yZ1fh3h9.js → form-tpyd1nsT.js} +2 -2
- package/dist/{form-yZ1fh3h9.js.map → form-tpyd1nsT.js.map} +1 -1
- package/dist/form.cjs +1 -1
- package/dist/form.js +1 -1
- package/dist/{formField.mixin-Cmb9YpmX.js → formField.mixin-Mx5CwYUh.js} +2 -2
- package/dist/{formField.mixin-Cmb9YpmX.js.map → formField.mixin-Mx5CwYUh.js.map} +1 -1
- package/dist/{formField.mixin-D51klHq7.cjs → formField.mixin-XlN2pAL0.cjs} +2 -2
- package/dist/{formField.mixin-D51klHq7.cjs.map → formField.mixin-XlN2pAL0.cjs.map} +1 -1
- package/dist/{icon-Dsa_BddL.cjs → icon-C8Q_XMtJ.cjs} +2 -2
- package/dist/{icon-Dsa_BddL.cjs.map → icon-C8Q_XMtJ.cjs.map} +1 -1
- package/dist/{icon-DHT8YsE3.js → icon-Y2qLOFqe.js} +2 -2
- package/dist/{icon-DHT8YsE3.js.map → icon-Y2qLOFqe.js.map} +1 -1
- package/dist/{icon-button-PpRHFLCj.js → icon-button-CJ6AVTv9.js} +19 -19
- package/dist/icon-button-CJ6AVTv9.js.map +1 -0
- package/dist/{icon-button-BRcfLsJL.cjs → icon-button-IdG1NVgA.cjs} +8 -8
- package/dist/icon-button-IdG1NVgA.cjs.map +1 -0
- package/dist/icons.cjs +1 -1
- package/dist/icons.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +196 -192
- package/dist/{input-CYGSlByl.js → input-DDCFZ3cr.js} +4 -4
- package/dist/{input-CYGSlByl.js.map → input-DDCFZ3cr.js.map} +1 -1
- package/dist/input-UyknNHNr.cjs +51 -0
- package/dist/{input-DB269a2X.cjs.map → input-UyknNHNr.cjs.map} +1 -1
- package/dist/{input-chip-CKYO8Lww.cjs → input-chip-Bht9MU9G.cjs} +2 -2
- package/dist/{input-chip-CKYO8Lww.cjs.map → input-chip-Bht9MU9G.cjs.map} +1 -1
- package/dist/{input-chip-CTKPIRVA.js → input-chip-DVE4_1wn.js} +2 -2
- package/dist/{input-chip-CTKPIRVA.js.map → input-chip-DVE4_1wn.js.map} +1 -1
- package/dist/input.cjs +1 -1
- package/dist/input.js +1 -1
- package/dist/layout.cjs +1 -1
- package/dist/layout.js +1 -1
- package/dist/{list-BbzeVuby.js → list-BO1gnjmc.js} +2 -2
- package/dist/{list-BbzeVuby.js.map → list-BO1gnjmc.js.map} +1 -1
- package/dist/{list-BQVTFNkq.cjs → list-Bac329kq.cjs} +2 -2
- package/dist/{list-BQVTFNkq.cjs.map → list-Bac329kq.cjs.map} +1 -1
- package/dist/list.cjs +1 -1
- package/dist/list.js +1 -1
- package/dist/{litElement.mixin-DzCpXwcY.cjs → litElement.mixin-B1WTI3WY.cjs} +2 -2
- package/dist/{litElement.mixin-DzCpXwcY.cjs.map → litElement.mixin-B1WTI3WY.cjs.map} +1 -1
- package/dist/{litElement.mixin-BzbZQbxa.js → litElement.mixin-CVje6z-M.js} +2 -2
- package/dist/{litElement.mixin-BzbZQbxa.js.map → litElement.mixin-CVje6z-M.js.map} +1 -1
- package/dist/mailbox.cjs +1 -1
- package/dist/mailbox.js +1 -1
- package/dist/{map-DuTFI2lm.cjs → map-BlmS6Zfx.cjs} +2 -2
- package/dist/{map-DuTFI2lm.cjs.map → map-BlmS6Zfx.cjs.map} +1 -1
- package/dist/{map-CgwU5Px4.js → map-C1jVMhlF.js} +2 -2
- package/dist/{map-CgwU5Px4.js.map → map-C1jVMhlF.js.map} +1 -1
- package/dist/map.cjs +1 -1
- package/dist/map.js +1 -1
- package/dist/{media-BnktmFRW.js → media-CNMZbEJe.js} +2 -2
- package/dist/{media-BnktmFRW.js.map → media-CNMZbEJe.js.map} +1 -1
- package/dist/{media-gtpSHRFx.cjs → media-CxfrOjie.cjs} +2 -2
- package/dist/{media-gtpSHRFx.cjs.map → media-CxfrOjie.cjs.map} +1 -1
- package/dist/menu-CUKV4pVJ.js +61 -0
- package/dist/menu-CUKV4pVJ.js.map +1 -0
- package/dist/menu-DEa2K7Pk.cjs +26 -0
- package/dist/menu-DEa2K7Pk.cjs.map +1 -0
- package/dist/menu.cjs +1 -1
- package/dist/menu.js +1 -1
- package/dist/mixins.cjs +1 -1
- package/dist/mixins.js +3 -3
- package/dist/nav-drawer.cjs +1 -1
- package/dist/nav-drawer.js +1 -1
- package/dist/navigation-bar.cjs +1 -1
- package/dist/navigation-bar.js +1 -1
- package/dist/{navigation-rail-CUMNSz0h.js → navigation-rail-CYKfvZs9.js} +3 -3
- package/dist/{navigation-rail-CUMNSz0h.js.map → navigation-rail-CYKfvZs9.js.map} +1 -1
- package/dist/{navigation-rail-D8otIR2P.cjs → navigation-rail-DXr4NJnN.cjs} +2 -2
- package/dist/{navigation-rail-D8otIR2P.cjs.map → navigation-rail-DXr4NJnN.cjs.map} +1 -1
- package/dist/navigation-rail.cjs +1 -1
- package/dist/navigation-rail.js +1 -1
- package/dist/{notification-service-E16lPsiT.js → notification-service-CZ56fXew.js} +5 -5
- package/dist/{notification-service-E16lPsiT.js.map → notification-service-CZ56fXew.js.map} +1 -1
- package/dist/{notification-service-CP6kGXVL.cjs → notification-service-DQGs9O0f.cjs} +2 -2
- package/dist/{notification-service-CP6kGXVL.cjs.map → notification-service-DQGs9O0f.cjs.map} +1 -1
- package/dist/notification.cjs +1 -1
- package/dist/notification.js +2 -2
- package/dist/{notify-D865xIlu.js → notify-KvHZ-8z9.js} +2 -2
- package/dist/{notify-D865xIlu.js.map → notify-KvHZ-8z9.js.map} +1 -1
- package/dist/{notify-Czdp7BbG.cjs → notify-VkDx6hMZ.cjs} +2 -2
- package/dist/{notify-Czdp7BbG.cjs.map → notify-VkDx6hMZ.cjs.map} +1 -1
- package/dist/{option-cJ8fM5qJ.js → option-DnRdbsTb.js} +2 -2
- package/dist/{option-cJ8fM5qJ.js.map → option-DnRdbsTb.js.map} +1 -1
- package/dist/{option-B1r0hb3H.cjs → option-Eh2AXe-Z.cjs} +2 -2
- package/dist/{option-B1r0hb3H.cjs.map → option-Eh2AXe-Z.cjs.map} +1 -1
- package/dist/option.cjs +1 -1
- package/dist/option.js +1 -1
- package/dist/{payment-card-form-EO3auDS8.cjs → payment-card-form-8a4Nqqhy.cjs} +2 -2
- package/dist/{payment-card-form-EO3auDS8.cjs.map → payment-card-form-8a4Nqqhy.cjs.map} +1 -1
- package/dist/{payment-card-form-RBjpMc2m.js → payment-card-form-EVQEb5OX.js} +3 -3
- package/dist/{payment-card-form-RBjpMc2m.js.map → payment-card-form-EVQEb5OX.js.map} +1 -1
- package/dist/{progress-4v9FzvOT.js → progress-D5kgn2Fg.js} +2 -2
- package/dist/{progress-4v9FzvOT.js.map → progress-D5kgn2Fg.js.map} +1 -1
- package/dist/{progress-DnhvJMz_.cjs → progress-yFxoJDYf.cjs} +2 -2
- package/dist/{progress-DnhvJMz_.cjs.map → progress-yFxoJDYf.cjs.map} +1 -1
- package/dist/progress.cjs +1 -1
- package/dist/progress.js +1 -1
- package/dist/{radio-button-BVegeFKE.cjs → radio-button-BTdqEOSJ.cjs} +2 -2
- package/dist/{radio-button-BVegeFKE.cjs.map → radio-button-BTdqEOSJ.cjs.map} +1 -1
- package/dist/{radio-button-DDavzgCz.js → radio-button-QCukBJLy.js} +3 -3
- package/dist/{radio-button-DDavzgCz.js.map → radio-button-QCukBJLy.js.map} +1 -1
- package/dist/radio-group.cjs +1 -1
- package/dist/radio-group.js +1 -1
- package/dist/ripple-QoNZUUw_.js +148 -0
- package/dist/ripple-QoNZUUw_.js.map +1 -0
- package/dist/ripple-Ujq_REH4.cjs +16 -0
- package/dist/ripple-Ujq_REH4.cjs.map +1 -0
- package/dist/{schmancy-steps-container-s6kZWhcr.cjs → schmancy-steps-container-CtwqkRBU.cjs} +2 -2
- package/dist/{schmancy-steps-container-s6kZWhcr.cjs.map → schmancy-steps-container-CtwqkRBU.cjs.map} +1 -1
- package/dist/{schmancy-steps-container-DN9c-HeX.js → schmancy-steps-container-NZOamraF.js} +2 -2
- package/dist/{schmancy-steps-container-DN9c-HeX.js.map → schmancy-steps-container-NZOamraF.js.map} +1 -1
- package/dist/search-B1s7thB0.cjs +2 -0
- package/dist/search-B1s7thB0.cjs.map +1 -0
- package/dist/search-DxxnLa5u.js +95 -0
- package/dist/search-DxxnLa5u.js.map +1 -0
- package/dist/{select-DVT_kFNR.cjs → select-C-Kv7ey_.cjs} +2 -2
- package/dist/{select-DVT_kFNR.cjs.map → select-C-Kv7ey_.cjs.map} +1 -1
- package/dist/{select--D6l5ru7.js → select-DSTQ-Zau.js} +4 -4
- package/dist/{select--D6l5ru7.js.map → select-DSTQ-Zau.js.map} +1 -1
- package/dist/select.cjs +1 -1
- package/dist/select.js +1 -1
- package/dist/selector-hook-Cok22ifx.cjs +2 -0
- package/dist/selector-hook-Cok22ifx.cjs.map +1 -0
- package/dist/selector-hook-l2fe2UO5.js +319 -0
- package/dist/selector-hook-l2fe2UO5.js.map +1 -0
- package/dist/{sheet-CNn_huhz.js → sheet-DY-z5_tm.js} +14 -14
- package/dist/sheet-DY-z5_tm.js.map +1 -0
- package/dist/{sheet-Bza5jVS2.cjs → sheet-IzYy3H8n.cjs} +4 -4
- package/dist/sheet-IzYy3H8n.cjs.map +1 -0
- package/dist/sheet.cjs +1 -1
- package/dist/sheet.js +2 -2
- package/dist/{sheet.service--zUgftN3.cjs → sheet.service-BNz-ird-.cjs} +2 -2
- package/dist/{sheet.service--zUgftN3.cjs.map → sheet.service-BNz-ird-.cjs.map} +1 -1
- package/dist/{sheet.service-CmNDL4f6.js → sheet.service-DuVcXyOB.js} +2 -2
- package/dist/{sheet.service-CmNDL4f6.js.map → sheet.service-DuVcXyOB.js.map} +1 -1
- package/dist/{slider-DPxBmmFD.js → slider-CFtbSQ9Y.js} +3 -3
- package/dist/{slider-DPxBmmFD.js.map → slider-CFtbSQ9Y.js.map} +1 -1
- package/dist/{slider-Cf0pED-U.cjs → slider-CGE_Qeok.cjs} +2 -2
- package/dist/{slider-Cf0pED-U.cjs.map → slider-CGE_Qeok.cjs.map} +1 -1
- package/dist/slider.cjs +1 -1
- package/dist/slider.js +1 -1
- package/dist/{spinner-BDSDxr_W.cjs → spinner-CSPJs8CL.cjs} +3 -3
- package/dist/spinner-CSPJs8CL.cjs.map +1 -0
- package/dist/{spinner-Dyz6HBFa.js → spinner-DAF-hCvQ.js} +3 -3
- package/dist/spinner-DAF-hCvQ.js.map +1 -0
- package/dist/steps.cjs +1 -1
- package/dist/steps.js +1 -1
- package/dist/store.cjs +1 -1
- package/dist/store.js +1 -1
- package/dist/{suggestion-chip-CCW8g_3S.js → suggestion-chip-CYu-4xrL.js} +3 -3
- package/dist/{suggestion-chip-CCW8g_3S.js.map → suggestion-chip-CYu-4xrL.js.map} +1 -1
- package/dist/{suggestion-chip-B7COqb4l.cjs → suggestion-chip-Cj8gwZqq.cjs} +2 -2
- package/dist/{suggestion-chip-B7COqb4l.cjs.map → suggestion-chip-Cj8gwZqq.cjs.map} +1 -1
- package/dist/{surface-B4CxtF38.js → surface-DTOK-0E4.js} +34 -10
- package/dist/{surface-B4CxtF38.js.map → surface-DTOK-0E4.js.map} +1 -1
- package/dist/{surface-CkzbeSYN.cjs → surface-VX_THUHv.cjs} +27 -3
- package/dist/{surface-CkzbeSYN.cjs.map → surface-VX_THUHv.cjs.map} +1 -1
- package/dist/surface.cjs +1 -1
- package/dist/surface.js +1 -1
- package/dist/{table-D-g4ZBys.cjs → table-BV0-o9Wi.cjs} +4 -3
- package/dist/{table-D-g4ZBys.cjs.map → table-BV0-o9Wi.cjs.map} +1 -1
- package/dist/{table-KPNVMJtn.js → table-CkXbXqi9.js} +14 -10
- package/dist/{table-KPNVMJtn.js.map → table-CkXbXqi9.js.map} +1 -1
- package/dist/table.cjs +1 -1
- package/dist/table.js +1 -1
- package/dist/{tabs-compatibility-xUK4vD1M.js → tabs-compatibility-D_BBW655.js} +2 -2
- package/dist/{tabs-compatibility-xUK4vD1M.js.map → tabs-compatibility-D_BBW655.js.map} +1 -1
- package/dist/{tabs-compatibility-sMoQP12I.cjs → tabs-compatibility-DsfD60U_.cjs} +2 -2
- package/dist/{tabs-compatibility-sMoQP12I.cjs.map → tabs-compatibility-DsfD60U_.cjs.map} +1 -1
- package/dist/tabs.cjs +1 -1
- package/dist/tabs.js +1 -1
- package/dist/tailwind.mixin-JFXu3GSo.cjs +2 -0
- package/dist/{tailwind.mixin-scDxsqaX.cjs.map → tailwind.mixin-JFXu3GSo.cjs.map} +1 -1
- package/dist/tailwind.mixin-wLaKUxf1.js +67 -0
- package/dist/{tailwind.mixin-xIIxrXd8.js.map → tailwind.mixin-wLaKUxf1.js.map} +1 -1
- package/dist/teleport.cjs +1 -1
- package/dist/teleport.js +1 -1
- package/dist/{textarea-BSBYVs99.cjs → textarea-B6LDhRed.cjs} +2 -2
- package/dist/{textarea-BSBYVs99.cjs.map → textarea-B6LDhRed.cjs.map} +1 -1
- package/dist/{textarea-CFrirT5y.js → textarea-TeVnUeIJ.js} +3 -3
- package/dist/{textarea-CFrirT5y.js.map → textarea-TeVnUeIJ.js.map} +1 -1
- package/dist/textarea.cjs +1 -1
- package/dist/textarea.js +1 -1
- package/dist/{theme-button-D-LTPh88.js → theme-button-BXXqAu2Y.js} +2 -2
- package/dist/{theme-button-D-LTPh88.js.map → theme-button-BXXqAu2Y.js.map} +1 -1
- package/dist/{theme-button-B8Xqrz1M.cjs → theme-button-DxMbO3yP.cjs} +2 -2
- package/dist/{theme-button-B8Xqrz1M.cjs.map → theme-button-DxMbO3yP.cjs.map} +1 -1
- package/dist/theme-button.cjs +1 -1
- package/dist/theme-button.js +1 -1
- package/dist/{theme-controller-boat-C2F-qRyu.cjs → theme-controller-boat-CCBNOGxF.cjs} +2 -2
- package/dist/{theme-controller-boat-C2F-qRyu.cjs.map → theme-controller-boat-CCBNOGxF.cjs.map} +1 -1
- package/dist/{theme-controller-boat-BOddzVdU.js → theme-controller-boat-CVS77gnH.js} +3 -3
- package/dist/{theme-controller-boat-BOddzVdU.js.map → theme-controller-boat-CVS77gnH.js.map} +1 -1
- package/dist/theme.cjs +1 -1
- package/dist/theme.js +1 -1
- package/dist/{timezone-xHmnktrm.cjs → timezone-D7YOMM8G.cjs} +2 -2
- package/dist/{timezone-xHmnktrm.cjs.map → timezone-D7YOMM8G.cjs.map} +1 -1
- package/dist/{timezone-BvOWa9Nt.js → timezone-RBV74f85.js} +3 -3
- package/dist/{timezone-BvOWa9Nt.js.map → timezone-RBV74f85.js.map} +1 -1
- package/dist/{tooltip-D24v5bvM.cjs → tooltip-BH_RLoZI.cjs} +2 -2
- package/dist/{tooltip-D24v5bvM.cjs.map → tooltip-BH_RLoZI.cjs.map} +1 -1
- package/dist/{tooltip-D3ZZJEAk.js → tooltip-DssL6Qfx.js} +2 -2
- package/dist/{tooltip-D3ZZJEAk.js.map → tooltip-DssL6Qfx.js.map} +1 -1
- package/dist/tooltip.cjs +1 -1
- package/dist/tooltip.js +1 -1
- package/dist/{tree-DC_jbDRu.cjs → tree-7Zz1sJKl.cjs} +2 -2
- package/dist/{tree-DC_jbDRu.cjs.map → tree-7Zz1sJKl.cjs.map} +1 -1
- package/dist/{tree-CfVyhRIH.js → tree-C33t9-0j.js} +2 -2
- package/dist/{tree-CfVyhRIH.js.map → tree-C33t9-0j.js.map} +1 -1
- package/dist/tree.cjs +1 -1
- package/dist/tree.js +1 -1
- package/dist/{typewriter-By-3T0Jm.js → typewriter-Dt1Js2lP.js} +247 -118
- package/dist/typewriter-Dt1Js2lP.js.map +1 -0
- package/dist/typewriter-WbYqfXO7.cjs +124 -0
- package/dist/typewriter-WbYqfXO7.cjs.map +1 -0
- package/dist/typewriter.cjs +1 -1
- package/dist/typewriter.js +1 -1
- package/dist/{typography-9lVCjAbj.cjs → typography-Ck-OdI83.cjs} +2 -2
- package/dist/{typography-9lVCjAbj.cjs.map → typography-Ck-OdI83.cjs.map} +1 -1
- package/dist/{typography-B7kvO8iJ.js → typography-DdG9aEAg.js} +2 -2
- package/dist/{typography-B7kvO8iJ.js.map → typography-DdG9aEAg.js.map} +1 -1
- package/dist/typography.cjs +1 -1
- package/dist/typography.js +1 -1
- package/dist/utils.cjs +1 -1
- package/dist/utils.js +1 -1
- package/package.json +1 -1
- package/types/src/area/router.types.d.ts +1 -0
- package/types/src/boat/boat.d.ts +0 -1
- package/types/src/button/button.d.ts +8 -0
- package/types/src/details/details.d.ts +12 -11
- package/types/src/directives/drag.d.ts +30 -0
- package/types/src/directives/index.d.ts +1 -0
- package/types/src/divider/divider.d.ts +6 -1
- package/types/src/menu/menu-item.d.ts +0 -1
- package/types/src/store/filter-directive.d.ts +1 -1
- package/types/src/surface/surface.d.ts +2 -1
- package/types/src/types/surface.d.ts +1 -1
- package/types/src/typewriter/typewriter.d.ts +15 -0
- package/types/src/utils/index.d.ts +4 -4
- package/types/src/utils/search.d.ts +39 -1
- package/dist/area.component-BojFAcRk.cjs.map +0 -1
- package/dist/area.component-C_nUxyiY.js.map +0 -1
- package/dist/boat-B7AKN6Ge.js +0 -276
- package/dist/boat-B7AKN6Ge.js.map +0 -1
- package/dist/boat-BhAuteUk.cjs +0 -93
- package/dist/boat-BhAuteUk.cjs.map +0 -1
- package/dist/details-CQPpI_la.js +0 -211
- package/dist/details-CQPpI_la.js.map +0 -1
- package/dist/details-DydvHvfw.cjs +0 -143
- package/dist/details-DydvHvfw.cjs.map +0 -1
- package/dist/divider-BF9xljgI.cjs +0 -2
- package/dist/divider-BF9xljgI.cjs.map +0 -1
- package/dist/divider-BHruVdsE.js +0 -23
- package/dist/divider-BHruVdsE.js.map +0 -1
- package/dist/icon-button-BRcfLsJL.cjs.map +0 -1
- package/dist/icon-button-PpRHFLCj.js.map +0 -1
- package/dist/input-DB269a2X.cjs +0 -51
- package/dist/menu-DA2pO48m.cjs +0 -26
- package/dist/menu-DA2pO48m.cjs.map +0 -1
- package/dist/menu-DwFriXTu.js +0 -63
- package/dist/menu-DwFriXTu.js.map +0 -1
- package/dist/ripple-Cy-nvO8W.js +0 -80
- package/dist/ripple-Cy-nvO8W.js.map +0 -1
- package/dist/ripple-DqQrvaTe.cjs +0 -16
- package/dist/ripple-DqQrvaTe.cjs.map +0 -1
- package/dist/search-BeEqIiuO.js +0 -53
- package/dist/search-BeEqIiuO.js.map +0 -1
- package/dist/search-bfOHCuHZ.cjs +0 -2
- package/dist/search-bfOHCuHZ.cjs.map +0 -1
- package/dist/selector-hook-BG6g_IEN.cjs +0 -2
- package/dist/selector-hook-BG6g_IEN.cjs.map +0 -1
- package/dist/selector-hook-CrwQCPxL.js +0 -313
- package/dist/selector-hook-CrwQCPxL.js.map +0 -1
- package/dist/sheet-Bza5jVS2.cjs.map +0 -1
- package/dist/sheet-CNn_huhz.js.map +0 -1
- package/dist/spinner-BDSDxr_W.cjs.map +0 -1
- package/dist/spinner-Dyz6HBFa.js.map +0 -1
- package/dist/tailwind.mixin-scDxsqaX.cjs +0 -2
- package/dist/tailwind.mixin-xIIxrXd8.js +0 -67
- package/dist/typewriter-By-3T0Jm.js.map +0 -1
- package/dist/typewriter-vit0P1N1.cjs +0 -9
- package/dist/typewriter-vit0P1N1.cjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select--D6l5ru7.js","sources":["../src/select/select.ts"],"sourcesContent":["import { autoUpdate, computePosition, flip, offset, shift } from '@floating-ui/dom'\nimport { $LitElement } from '@mixins/index'\nimport { color } from '@schmancy/directives'\nimport SchmancyInput from '@schmancy/input/input'\nimport SchmancyOption from '@schmancy/option/option'\nimport { SchmancyTheme } from '@schmancy/theme/theme.interface'\nimport { css, html, PropertyValues, TemplateResult } from 'lit'\nimport { customElement, property, query, queryAssignedElements, state } from 'lit/decorators.js'\nimport { classMap } from 'lit/directives/class-map.js'\nimport { BehaviorSubject, combineLatest, fromEvent, Subject, takeUntil } from 'rxjs'\nimport { tap, withLatestFrom } from 'rxjs/operators'\n\nexport type SchmancySelectChangeEvent = CustomEvent<{\n\tvalue: string | string[]\n}>\n\n/**\n * Select dropdown component with single and multi-select support.\n *\n * @prop {string} name - Name attribute for form submission\n * @prop {string} label - Label text displayed above the select\n * @prop {string} placeholder - Placeholder text when no value is selected\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-select')\nexport class SchmancySelect extends $LitElement(css`\n\t:host {\n\t\tdisplay: block;\n\t\tposition: relative;\n\t}\n\n\t[role='listbox'] {\n\t\toverflow-y: auto;\n\t\toutline: none;\n\t}\n`) {\n\t// Form association setup\n\tstatic formAssociated = true\n\tprivate internals?: ElementInternals\n\n\t// API\n\t@property({ type: String }) name: string | undefined\n\t@property({ type: Boolean, reflect: true }) required = false\n\t@property({ type: Boolean, reflect: true }) disabled = false\n\t@property({ type: String }) placeholder = ''\n\t@property({ type: String, reflect: true })\n\tget value() {\n\t\treturn this.multi\n\t\t\t? this._selectedValues$.value.join(',')\n\t\t\t: this._selectedValue$.value\n\t}\n\tset value(val: string | string[]) {\n\t\tif (this.multi) {\n\t\t\tconst values = Array.isArray(val)\n\t\t\t\t? val\n\t\t\t\t: val ? String(val).split(',').map(v => v.trim()).filter(Boolean) : []\n\t\t\tthis._selectedValues$.next(values)\n\t\t} else {\n\t\t\tthis._selectedValue$.next(String(val || ''))\n\t\t}\n\t}\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._selectedValues$.next(Array.isArray(vals) ? [...vals] : [])\n\t}\n\n\t@property({ type: Boolean }) multi = false\n\t@property({ type: String }) label = ''\n\t@property({ type: String }) hint = ''\n\t@property({ type: String }) validateOn: 'always' | 'touched' | 'dirty' | 'submitted' = 'touched'\n\t@property({ type: String }) size: 'sm' | 'md' | 'lg' = 'md'\n\n\t// Internal states\n\t@state() private isOpen = false\n\t@state() private valueLabel = ''\n\t@state() private isValid = true\n\t@property({ type: String }) validationMessage = ''\n\n\t// Store the initial/default value for reset behavior\n\t@state() private defaultValue: string | string[] = ''\n\n\t@query('ul') private ul!: HTMLUListElement\n\t@query('sch-input') private inputRef!: SchmancyInput\n\t@queryAssignedElements({ flatten: true }) private options!: SchmancyOption[]\n\tprivate cleanupPositioner?: () => void\n\n\t// Reactive state management\n\tprivate _options$ = new BehaviorSubject<SchmancyOption[]>([])\n\tprivate _selectedValue$ = new BehaviorSubject<string>('')\n\tprivate _selectedValues$ = new BehaviorSubject<string[]>([])\n\tprivate _optionSelect$ = new Subject<SchmancyOption>()\n\t@state() _userInteracted = false\n\t@state() private _touched = false\n\t@state() private _dirty = false\n\t@state() private _submitted = false\n\n\t// Reference to current focused option (for keyboard navigation)\n\t@state() private _focusedOptionId = ''\n\n\t// Form event handlers\n\tprivate formSubmitHandler = () => {\n\t\tthis._submitted = true\n\t\tthis.checkValidity()\n\t}\n\n\tprivate formResetHandler = () => {\n\t\tthis.reset()\n\t}\n\n\tconstructor() {\n\t\tsuper()\n\t\t// Initialize ElementInternals for form association\n\t\ttry {\n\t\t\tthis.internals = this.attachInternals()\n\t\t} catch (e) {\n\t\t\tconsole.warn('FormAssociated elements not supported in this browser', e)\n\t\t}\n\t}\n\n\tget form() {\n\t\treturn this.internals?.form\n\t}\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\t\tif (!this.id) {\n\t\t\tthis.id = `schmancy-select-${Math.random().toString(36).substring(2, 9)}`\n\t\t}\n\n\t\t// Store initial value for reset\n\t\tthis.defaultValue = this.value\n\n\t\t// Add keyboard handling to host element\n\t\tfromEvent<KeyboardEvent>(this, 'keydown').pipe(takeUntil(this.disconnecting)).subscribe(this.handleKeyDown)\n\n\t\t// Setup reactive pipelines\n\t\tthis._setupReactivePipelines()\n\n\t\t// Listen for form submission events to mark field as submitted\n\t\tif (this.internals?.form) {\n\t\t\tfromEvent(this.internals.form, 'submit')\n\t\t\t\t.pipe(takeUntil(this.disconnecting))\n\t\t\t\t.subscribe(this.formSubmitHandler)\n\n\t\t\t// Listen for form reset\n\t\t\tfromEvent(this.internals.form, 'reset')\n\t\t\t\t.pipe(takeUntil(this.disconnecting))\n\t\t\t\t.subscribe(this.formResetHandler)\n\t\t}\n\n\t\t// Initially hide any validation errors until user interacts\n\t\tif (this.inputRef) {\n\t\t\tthis.inputRef.error = false\n\t\t}\n\t}\n\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback()\n\t\tthis.cleanupPositioner?.()\n\t\t// Form event listeners are automatically cleaned up via takeUntil(this.disconnecting)\n\t}\n\n\tfirstUpdated() {\n\t\tthis.syncSelection()\n\t\tthis.setupOptionsAccessibility()\n\t}\n\n\tupdated(changedProps: PropertyValues) {\n\t\tsuper.updated(changedProps)\n\n\t\tif (changedProps.has('value')) {\n\t\t\t// Update form value when component value changes\n\t\t\tconst formValue = Array.isArray(this.value) ? this.value.join(',') : this.value\n\t\t\tthis.internals?.setFormValue(formValue)\n\n\t\t\t// Mark as dirty if value changes from initial value\n\t\t\tif (this.hasUpdated) {\n\t\t\t\tthis._dirty = true\n\t\t\t}\n\n\t\t\t// Check validity based on validation strategy\n\t\t\tif (this.hasUpdated) {\n\t\t\t\tthis.checkValidity()\n\t\t\t}\n\t\t}\n\n\t\t// When open state changes, setup or cleanup the dropdown positioner\n\t\tif (changedProps.has('isOpen')) {\n\t\t\tif (this.isOpen) {\n\t\t\t\tthis.positionDropdown()\n\t\t\t} else {\n\t\t\t\tthis.cleanupPositioner?.()\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Determines if validation errors should be shown based on current state\n\t * and validation strategy\n\t */\n\tprivate shouldShowValidation(forceValidation = false): boolean {\n\t\tif (forceValidation) return true\n\n\t\tswitch (this.validateOn) {\n\t\t\tcase 'always':\n\t\t\t\treturn true\n\t\t\tcase 'touched':\n\t\t\t\treturn this._touched\n\t\t\tcase 'dirty':\n\t\t\t\treturn this._dirty\n\t\t\tcase 'submitted':\n\t\t\t\treturn this._submitted\n\t\t\tdefault:\n\t\t\t\treturn this._touched\n\t\t}\n\t}\n\n\tprivate syncSelection() {\n\t\tif (this.multi) {\n\t\t\t// Read directly from the BehaviorSubject to avoid string conversion issues\n\t\t\tconst selectedValues = this._selectedValues$.value\n\t\t\tthis.options?.forEach(o => (o.selected = selectedValues.includes(o.value))) // Update option selected state\n\t\t\tthis.valueLabel =\n\t\t\t\tselectedValues.length > 0\n\t\t\t\t\t? this.options\n\t\t\t\t\t\t\t?.filter(o => selectedValues.includes(o.value))\n\t\t\t\t\t\t\t.map(o => o.label || o.textContent || '')\n\t\t\t\t\t\t\t.join(', ') || this.placeholder\n\t\t\t\t\t: this.placeholder\n\t\t} else {\n\t\t\t// Single select - read from BehaviorSubject\n\t\t\tconst currentValue = this._selectedValue$.value\n\t\t\tthis.options?.forEach(o => {\n\t\t\t\t// Set selected property on each option based on matching value\n\t\t\t\to.selected = o.value === currentValue\n\t\t\t})\n\t\t\tconst selectedOption = this.options?.find(o => o.value === currentValue)\n\t\t\tthis.valueLabel = selectedOption ? (selectedOption.label || selectedOption.textContent || '') : this.placeholder\n\t\t}\n\t}\n\n\tprivate setupOptionsAccessibility() {\n\t\tthis.options?.forEach((option, index) => {\n\t\t\toption.setAttribute('role', 'option')\n\t\t\tif (!option.id) {\n\t\t\t\toption.id = `${this.id}-option-${index}`\n\t\t\t}\n\n\t\t\t// Set tabindex to -1 so they're focusable programmatically but not in the tab order\n\t\t\toption.tabIndex = -1\n\t\t\tconst selectedValues = Array.isArray(this.value) ? this.value : this.value ? this.value.split(',') : []\n\n\t\t\toption.setAttribute(\n\t\t\t\t'aria-selected',\n\t\t\t\tString(this.multi ? selectedValues.includes(option.value) : option.value === this.value),\n\t\t\t)\n\t\t})\n\t}\n\n\tprivate async positionDropdown() {\n\t\tconst reference = this.renderRoot.querySelector('.trigger') as HTMLElement\n\t\tif (!reference || !this.ul) return\n\n\t\tthis.cleanupPositioner = autoUpdate(reference, this.ul, async () => {\n\t\t\t// Get viewport dimensions\n\t\t\tconst viewportHeight = window.innerHeight\n\t\t\tconst triggerRect = reference.getBoundingClientRect()\n\n\t\t\t// Calculate available space below and above\n\t\t\tconst spaceBelow = viewportHeight - triggerRect.bottom\n\t\t\tconst spaceAbove = triggerRect.top\n\n\t\t\t// Calculate max height - use 75% of the largest available space, but at least 150px\n\t\t\tconst maxHeight = Math.max(Math.max(spaceBelow, spaceAbove) * 0.75, 150)\n\n\t\t\t// Determine if we should flip\n\t\t\tconst shouldFlip = spaceBelow < 200 && spaceAbove > spaceBelow\n\n\t\t\t// Apply max height\n\t\t\tthis.ul.style.maxHeight = `${maxHeight}px`\n\n\t\t\tconst { x, y } = await computePosition(reference, this.ul, {\n\t\t\t\tplacement: shouldFlip ? 'top-start' : 'bottom-start',\n\t\t\t\tmiddleware: [offset(5), flip(), shift({ padding: 5 })],\n\t\t\t})\n\n\t\t\tObject.assign(this.ul.style, {\n\t\t\t\tleft: `${x}px`,\n\t\t\t\ttop: `${y}px`,\n\t\t\t\tposition: 'absolute',\n\t\t\t\twidth: `${reference.offsetWidth}px`, // Match the width of the trigger\n\t\t\t})\n\t\t})\n\t}\n\n\tprivate handleKeyDown = (e: KeyboardEvent) => {\n\t\t// Don't handle keyboard events when disabled\n\t\tif (this.disabled) {\n\t\t\treturn\n\t\t}\n\n\t\tif (!this.isOpen) {\n\t\t\tif (['Enter', ' ', 'ArrowDown'].includes(e.key)) {\n\t\t\t\te.preventDefault()\n\t\t\t\tthis.openDropdown(false)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\n\t\t// Find current focused option\n\t\tconst options = Array.from(this.options || [])\n\t\tconst current = options.findIndex(o => o.id === this._focusedOptionId) ?? -1\n\n\t\tswitch (e.key) {\n\t\t\tcase 'Escape':\n\t\t\t\te.preventDefault()\n\t\t\t\tthis.closeDropdown()\n\t\t\t\tbreak\n\t\t\tcase 'ArrowDown':\n\t\t\t\te.preventDefault()\n\t\t\t\tthis.focusOption(options, Math.min(current + 1, options.length - 1))\n\t\t\t\tbreak\n\t\t\tcase 'ArrowUp':\n\t\t\t\te.preventDefault()\n\t\t\t\tthis.focusOption(options, Math.max(current - 1, 0))\n\t\t\t\tbreak\n\t\t\tcase 'Home':\n\t\t\t\te.preventDefault()\n\t\t\t\tthis.focusOption(options, 0)\n\t\t\t\tbreak\n\t\t\tcase 'End':\n\t\t\t\te.preventDefault()\n\t\t\t\tthis.focusOption(options, options.length - 1)\n\t\t\t\tbreak\n\t\t\tcase 'Enter':\n\t\t\tcase ' ':\n\t\t\t\te.preventDefault()\n\t\t\t\tif (this._focusedOptionId) {\n\t\t\t\t\tconst focusedOption = options.find(opt => opt.id === this._focusedOptionId)\n\t\t\t\t\tif (focusedOption) {\n\t\t\t\t\t\tthis.handleOptionSelect(focusedOption.value)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tcase 'Tab':\n\t\t\t\tthis.closeDropdown()\n\t\t\t\tbreak\n\t\t}\n\t}\n\n\tprivate focusOption(options: SchmancyOption[], index: number) {\n\t\tconst option = options[index]\n\t\tif (option) {\n\t\t\toption.focus()\n\t\t\tthis._focusedOptionId = option.id\n\n\t\t\t// Update aria-activedescendant on the combobox\n\t\t\tconst combobox = this.renderRoot.querySelector('.trigger')\n\t\t\tif (combobox) {\n\t\t\t\tcombobox.setAttribute('aria-activedescendant', option.id)\n\t\t\t}\n\n\t\t\t// Ensure option is visible in the scrollable area\n\t\t\tif (this.ul && option.offsetTop !== undefined) {\n\t\t\t\t// Get position info\n\t\t\t\tconst optionTop = option.offsetTop\n\t\t\t\tconst optionHeight = option.offsetHeight\n\t\t\t\tconst scrollTop = this.ul.scrollTop\n\t\t\t\tconst ulHeight = this.ul.clientHeight\n\n\t\t\t\t// Scroll into view if needed\n\t\t\t\tif (optionTop < scrollTop) {\n\t\t\t\t\tthis.ul.scrollTop = optionTop\n\t\t\t\t} else if (optionTop + optionHeight > scrollTop + ulHeight) {\n\t\t\t\t\tthis.ul.scrollTop = optionTop + optionHeight - ulHeight\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async openDropdown(report = false) {\n\t\t// Don't open if disabled\n\t\tif (this.disabled) {\n\t\t\treturn\n\t\t}\n\n\t\t// Don't mark as touched on opening - we'll do that on closing\n\t\t// so errors only show after interaction is complete\n\n\t\tthis.isOpen = true\n\t\tawait this.updateComplete\n\n\t\t// Focus first or selected option\n\t\tconst options = Array.from(this.options || [])\n\t\tconst selectedIndex = this.multi ? 0 : options.findIndex(o => o.value === String(this.value))\n\n\t\tthis.focusOption(options, Math.max(selectedIndex, 0))\n\n\t\t// Don't automatically validate when opening\n\t\t// Only validate if explicitly requested (like from a form submission)\n\t\tif (report) this.reportValidity()\n\t}\n\n\tprivate closeDropdown() {\n\t\t// Only mark as touched if the user actually interacted with the component\n\t\t// and made a selection or explicitly closed it without selecting\n\t\tif (this._userInteracted) {\n\t\t\tthis._touched = true\n\t\t}\n\n\t\tthis.isOpen = false\n\t\tthis._focusedOptionId = ''\n\n\t\t// Update combobox to remove aria-activedescendant\n\t\tconst combobox = this.renderRoot.querySelector<HTMLElement>('.trigger')\n\t\tif (combobox) {\n\t\t\tcombobox.removeAttribute('aria-activedescendant')\n\t\t\tcombobox?.focus()\n\t\t}\n\n\t\t// Only check validity when closing if the user has actually interacted\n\t\t// with the component and validation should be shown\n\t\tif (this._userInteracted && this.shouldShowValidation()) {\n\t\t\tthis.checkValidity()\n\t\t}\n\t}\n\n\tprivate _setupReactivePipelines() {\n\t\t// Listen for option-select events from child options\n\t\tfromEvent<CustomEvent>(this, 'option-select')\n\t\t\t.pipe(\n\t\t\t\ttap((e) => {\n\t\t\t\t\te.stopPropagation() // Prevent event from bubbling further\n\t\t\t\t\tconst option = this.options.find(o => o.value === e.detail.value)\n\t\t\t\t\tif (option) {\n\t\t\t\t\t\tthis._optionSelect$.next(option)\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// Handle option selection through reactive pipeline\n\t\tthis._optionSelect$\n\t\t\t.pipe(\n\t\t\t\twithLatestFrom(this._selectedValue$, this._selectedValues$),\n\t\t\t\ttap(([option, _, currentValues]) => {\n\t\t\t\t\tthis._userInteracted = true\n\t\t\t\t\tthis._touched = true\n\t\t\t\t\tthis._dirty = true\n\n\t\t\t\t\tif (this.multi) {\n\t\t\t\t\t\tconst index = currentValues.indexOf(option.value)\n\t\t\t\t\t\tconst newValues = index > -1\n\t\t\t\t\t\t\t? [...currentValues.slice(0, index), ...currentValues.slice(index + 1)]\n\t\t\t\t\t\t\t: [...currentValues, option.value]\n\t\t\t\t\t\tthis._selectedValues$.next(newValues)\n\n\t\t\t\t\t\t// Update display label\n\t\t\t\t\t\tthis.valueLabel = newValues.length > 0\n\t\t\t\t\t\t\t? this.options\n\t\t\t\t\t\t\t\t\t.filter(o => newValues.includes(o.value))\n\t\t\t\t\t\t\t\t\t.map(o => o.label || o.textContent || '')\n\t\t\t\t\t\t\t\t\t.join(', ')\n\t\t\t\t\t\t\t: this.placeholder\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Single select\n\t\t\t\t\t\tthis._selectedValue$.next(option.value)\n\t\t\t\t\t\tthis.valueLabel = option.label || option.textContent || this.placeholder\n\t\t\t\t\t\tthis.closeDropdown()\n\t\t\t\t\t}\n\n\t\t\t\t\t// Update the option's accessibility state\n\t\t\t\t\tthis.setupOptionsAccessibility()\n\n\t\t\t\t\t// Dispatch change event\n\t\t\t\t\tthis._fireChangeEvent()\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// Options management pipeline - bind pointerdown events exactly like autocomplete\n\t\tthis._options$\n\t\t\t.pipe(\n\t\t\t\ttap((options) => {\n\t\t\t\t\toptions.forEach((option, index) => {\n\t\t\t\t\t\toption.setAttribute('role', 'option')\n\t\t\t\t\t\toption.tabIndex = -1\n\t\t\t\t\t\tif (!option.id) {\n\t\t\t\t\t\t\toption.id = `${this.id}-option-${index}`\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Use data-event-bound to prevent duplicate bindings\n\t\t\t\t\t\tif (!option.hasAttribute('data-event-bound')) {\n\t\t\t\t\t\t\t// Use click event instead of pointerdown for better mobile UX\n\t\t\t\t\t\t\t// This allows users to scroll through options without immediately selecting\n\t\t\t\t\t\t\tfromEvent(option, 'click').pipe(\n\t\t\t\t\t\t\t\ttap(e => {\n\t\t\t\t\t\t\t\t\te.stopPropagation()\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\ttakeUntil(this.disconnecting)\n\t\t\t\t\t\t\t).subscribe(() => this._optionSelect$.next(option))\n\t\t\t\t\t\t\toption.setAttribute('data-event-bound', 'true')\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// Selection sync pipeline - sync selected states with value changes\n\t\tcombineLatest([this._selectedValue$, this._selectedValues$, this._options$])\n\t\t\t.pipe(\n\t\t\t\ttap(([singleValue, multiValues, options]) => {\n\t\t\t\t\tif (options.length === 0) return\n\n\t\t\t\t\tif (this.multi) {\n\t\t\t\t\t\toptions.forEach(option => {\n\t\t\t\t\t\t\toption.selected = multiValues.includes(option.value)\n\t\t\t\t\t\t})\n\t\t\t\t\t} else {\n\t\t\t\t\t\toptions.forEach(option => {\n\t\t\t\t\t\t\toption.selected = option.value === singleValue\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\t}\n\n\tprivate handleOptionSelect(value: string) {\n\t\t// This method is now called from keyboard navigation only\n\t\tconst option = this.options.find(o => o.value === value)\n\t\tif (option) {\n\t\t\tthis._optionSelect$.next(option)\n\t\t}\n\t}\n\n\tprivate _fireChangeEvent() {\n\t\t// Get the current value based on multi/single mode\n\t\tconst value = this.multi ? this._selectedValues$.value : this._selectedValue$.value\n\n\t\t// Dispatch only one change event with the value in detail\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent<SchmancySelectChangeEvent['detail']>('change', {\n\t\t\t\tdetail: { value },\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\n\t\t// Then check validity (only show error if validation should be shown)\n\t\tthis.checkValidity()\n\t}\n\n\tpublic checkValidity(): boolean {\n\t\t// Disabled fields are always valid\n\t\tif (this.disabled) {\n\t\t\treturn true\n\t\t}\n\n\t\t// Determine if the select is empty based on whether it's multi-select or single-select\n\t\tconst isEmpty = this.multi ? (Array.isArray(this.value) ? this.value.length === 0 : !this.value) : !this.value\n\n\t\t// Check if the value is valid (not empty when required)\n\t\tconst isValid = !(this.required && isEmpty)\n\n\t\t// Set the validity state\n\t\tthis.isValid = isValid\n\n\t\tif (!this.isValid) {\n\t\t\tthis.validationMessage = 'Please select an option.'\n\t\t\tthis.internals?.setValidity({ valueMissing: true }, 'Please select an option.', this.inputRef)\n\t\t} else {\n\t\t\t// Clear validation message\n\t\t\tthis.validationMessage = ''\n\t\t\tthis.internals?.setValidity({})\n\t\t}\n\n\t\t// Update the input component to reflect our validation state\n\t\tif (this.inputRef && this.hasUpdated) {\n\t\t\tconst showError = !this.isValid && this.shouldShowValidation()\n\t\t\tthis.inputRef.error = showError\n\t\t\tthis.inputRef.hint = showError ? this.validationMessage : this.hint\n\t\t}\n\n\t\treturn this.isValid\n\t}\n\n\tpublic reportValidity(): boolean {\n\t\t// Force validation display regardless of validation strategy\n\t\tconst valid = this.checkValidity()\n\n\t\t// Force the input to show validation errors\n\t\tif (this.inputRef) {\n\t\t\t// Set the input's error state\n\t\t\tthis.inputRef.error = !valid\n\t\t\tthis.inputRef.hint = !valid ? this.validationMessage : this.hint\n\n\t\t\t// If invalid and not already open, automatically open the dropdown to show options\n\t\t\tif (!valid && !this.isOpen) {\n\t\t\t\t// Open the dropdown but don't mark as user interaction yet\n\t\t\t\t// This helps users immediately see available options when validation fails\n\t\t\t\tthis.openDropdown(false)\n\t\t\t}\n\n\t\t\t// Only call reportValidity on the input if invalid to show the native popup\n\t\t\tif (!valid) {\n\t\t\t\tthis.inputRef.reportValidity()\n\t\t\t}\n\t\t}\n\n\t\treturn valid\n\t}\n\n\tpublic setCustomValidity(message: string) {\n\t\tthis.validationMessage = message\n\t\tif (message) {\n\t\t\tthis.isValid = false\n\t\t\tthis.internals?.setValidity({ customError: true }, message, this.inputRef)\n\t\t} else {\n\t\t\tthis.isValid = true\n\t\t\tthis.internals?.setValidity({})\n\t\t}\n\n\t\t// Update input if needed\n\t\tif (this.inputRef && this.shouldShowValidation()) {\n\t\t\tthis.inputRef.error = !this.isValid\n\t\t\tthis.inputRef.hint = !this.isValid ? this.validationMessage : this.hint\n\t\t}\n\t}\n\n\tpublic reset() {\n\t\t// Reset to initial value\n\t\tthis.value = this.defaultValue\n\t\tthis.valueLabel = this.placeholder\n\t\tthis.isValid = true\n\t\tthis.validationMessage = ''\n\t\tthis._touched = false\n\t\tthis._dirty = false\n\t\tthis._submitted = false\n\t\tthis._userInteracted = false\n\t\tthis.internals?.setValidity({})\n\n\t\tif (this.inputRef) {\n\t\t\tthis.inputRef.error = false\n\t\t\tthis.inputRef.hint = this.hint\n\t\t}\n\t}\n\n\trender(): TemplateResult {\n\t\t// Determine if we should show errors based on the validation strategy and interaction\n\t\t// Never show errors on initial render or if the dropdown is open\n\t\tconst showErrors = !this.isValid && this.shouldShowValidation() && !this.isOpen\n\n\t\t// Add caret icon based on open state\n\t\tconst caretIcon = this.isOpen\n\t\t\t? html`<span class=\"absolute right-3 top-1/2 transform -translate-y-1/2\">▲</span>`\n\t\t\t: html`<span class=\"absolute right-3 top-1/2 transform -translate-y-1/2\">▼</span>`\n\n\t\treturn html`\n\t\t\t<div class=\"relative ${this.disabled ? 'opacity-60 cursor-not-allowed' : ''}\">\n\t\t\t\t<sch-input\n\t\t\t\t\t.name=${this.name}\n\t\t\t\t\ttabIndex=${this.disabled ? '-1' : '0'}\n\t\t\t\t\tclass=\"trigger\"\n\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\taria-haspopup=\"listbox\"\n\t\t\t\t\taria-expanded=${this.isOpen}\n\t\t\t\t\taria-controls=\"options\"\n\t\t\t\t\taria-autocomplete=\"none\"\n\t\t\t\t\taria-required=${this.required}\n\t\t\t\t\taria-activedescendant=${this._focusedOptionId || undefined}\n\t\t\t\t\taria-disabled=${this.disabled}\n\t\t\t\t\t.label=${this.label}\n\t\t\t\t\t.placeholder=${this.placeholder}\n\t\t\t\t\t.value=${this.valueLabel}\n\t\t\t\t\t.required=${this.required}\n\t\t\t\t\t.disabled=${this.disabled}\n\t\t\t\t\t.hint=${showErrors ? this.validationMessage : this.hint}\n\t\t\t\t\t.error=${showErrors}\n\t\t\t\t\t.validateOn=${this.validateOn}\n\t\t\t\t\t.size=${this.size}\n\t\t\t\t\treadonly\n\t\t\t\t\tclickable\n\t\t\t\t\t@click=${(e: MouseEvent) => {\n\t\t\t\t\t\t// Don't process clicks if disabled\n\t\t\t\t\t\tif (this.disabled) {\n\t\t\t\t\t\t\te.preventDefault()\n\t\t\t\t\t\t\te.stopPropagation()\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// On first click, don't count this as user interaction yet\n\t\t\t\t\t\tif (!this.isOpen) {\n\t\t\t\t\t\t\t// Open without triggering validation - we'll validate when they close\n\t\t\t\t\t\t\tthis.openDropdown(false)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Mark as interacted when they close the dropdown\n\t\t\t\t\t\t\tthis._userInteracted = true\n\t\t\t\t\t\t\tthis.closeDropdown()\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t${caretIcon}\n\t\t\t\t</sch-input>\n\n\t\t\t\t<!-- Overlay for capturing clicks outside when dropdown is open -->\n\t\t\t\t${this.isOpen\n\t\t\t\t\t? html` <div class=\"fixed inset-0 z-10\" @click=${this.closeDropdown} tabindex=\"-1\" aria-hidden=\"true\"></div> `\n\t\t\t\t\t: ''}\n\n\t\t\t\t<ul\n\t\t\t\t\tid=\"options\"\n\t\t\t\t\trole=\"listbox\"\n\t\t\t\t\taria-multiselectable=${this.multi}\n\t\t\t\t\tclass=${classMap({\n\t\t\t\t\t\t'absolute min-w-full w-full z-20 mt-1 rounded-md shadow-lg': true,\n\t\t\t\t\t\thidden: !this.isOpen,\n\t\t\t\t\t})}\n\t\t\t\t\t${color({\n\t\t\t\t\t\tbgColor: SchmancyTheme.sys.color.surface.low,\n\t\t\t\t\t\tcolor: SchmancyTheme.sys.color.surface.on,\n\t\t\t\t\t})}\n\t\t\t\t>\n\t\t\t\t\t<slot\n\t\t\t\t\t\t@slotchange=${() => {\n\t\t\t\t\t\t\tthis._options$.next(this.options)\n\t\t\t\t\t\t\t// Sync selection state when options re-render\n\t\t\t\t\t\t\tthis.syncSelection()\n\t\t\t\t\t\t}}\n\t\t\t\t\t></slot>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\n// Don't export 'select' here as it conflicts with the store's select decorator\n// export const select = SchmancySelect\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-select': SchmancySelect\n\t}\n}\n"],"names":["SchmancySelect","$LitElement","css","super","this","required","disabled","placeholder","multi","label","hint","validateOn","size","isOpen","valueLabel","isValid","validationMessage","defaultValue","_options$","BehaviorSubject","_selectedValue$","_selectedValues$","_optionSelect$","Subject","_userInteracted","_touched","_dirty","_submitted","_focusedOptionId","formSubmitHandler","checkValidity","formResetHandler","reset","handleKeyDown","e","includes","key","preventDefault","openDropdown","options","Array","from","current","findIndex","o","id","closeDropdown","focusOption","Math","min","length","max","focusedOption","find","opt","handleOptionSelect","value","internals","attachInternals","join","val","values","isArray","String","split","map","v","trim","filter","Boolean","next","vals","form","connectedCallback","random","toString","substring","fromEvent","pipe","takeUntil","disconnecting","subscribe","_setupReactivePipelines","inputRef","error","disconnectedCallback","cleanupPositioner","firstUpdated","syncSelection","setupOptionsAccessibility","changedProps","updated","has","formValue","setFormValue","hasUpdated","positionDropdown","forceValidation","selectedValues","forEach","selected","textContent","currentValue","selectedOption","option","index","setAttribute","tabIndex","reference","renderRoot","querySelector","ul","autoUpdate","async","viewportHeight","window","innerHeight","triggerRect","getBoundingClientRect","spaceBelow","bottom","spaceAbove","top","maxHeight","shouldFlip","style","x","y","computePosition","placement","middleware","offset","flip","shift","padding","Object","assign","left","position","width","offsetWidth","focus","combobox","offsetTop","optionTop","optionHeight","offsetHeight","scrollTop","ulHeight","clientHeight","report","updateComplete","selectedIndex","reportValidity","removeAttribute","shouldShowValidation","tap","stopPropagation","detail","withLatestFrom","_","currentValues","indexOf","newValues","slice","_fireChangeEvent","hasAttribute","combineLatest","singleValue","multiValues","dispatchEvent","CustomEvent","bubbles","composed","isEmpty","setValidity","valueMissing","showError","valid","message","customError","showErrors","caretIcon","html","name","classMap","hidden","color","bgColor","SchmancyTheme","sys","surface","low","on","formAssociated","__decorateClass","property","type","prototype","reflect","state","query","queryAssignedElements","flatten","customElement"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"select-DSTQ-Zau.js","sources":["../src/select/select.ts"],"sourcesContent":["import { autoUpdate, computePosition, flip, offset, shift } from '@floating-ui/dom'\nimport { $LitElement } from '@mixins/index'\nimport { color } from '@schmancy/directives'\nimport SchmancyInput from '@schmancy/input/input'\nimport SchmancyOption from '@schmancy/option/option'\nimport { SchmancyTheme } from '@schmancy/theme/theme.interface'\nimport { css, html, PropertyValues, TemplateResult } from 'lit'\nimport { customElement, property, query, queryAssignedElements, state } from 'lit/decorators.js'\nimport { classMap } from 'lit/directives/class-map.js'\nimport { BehaviorSubject, combineLatest, fromEvent, Subject, takeUntil } from 'rxjs'\nimport { tap, withLatestFrom } from 'rxjs/operators'\n\nexport type SchmancySelectChangeEvent = CustomEvent<{\n\tvalue: string | string[]\n}>\n\n/**\n * Select dropdown component with single and multi-select support.\n *\n * @prop {string} name - Name attribute for form submission\n * @prop {string} label - Label text displayed above the select\n * @prop {string} placeholder - Placeholder text when no value is selected\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-select')\nexport class SchmancySelect extends $LitElement(css`\n\t:host {\n\t\tdisplay: block;\n\t\tposition: relative;\n\t}\n\n\t[role='listbox'] {\n\t\toverflow-y: auto;\n\t\toutline: none;\n\t}\n`) {\n\t// Form association setup\n\tstatic formAssociated = true\n\tprivate internals?: ElementInternals\n\n\t// API\n\t@property({ type: String }) name: string | undefined\n\t@property({ type: Boolean, reflect: true }) required = false\n\t@property({ type: Boolean, reflect: true }) disabled = false\n\t@property({ type: String }) placeholder = ''\n\t@property({ type: String, reflect: true })\n\tget value() {\n\t\treturn this.multi\n\t\t\t? this._selectedValues$.value.join(',')\n\t\t\t: this._selectedValue$.value\n\t}\n\tset value(val: string | string[]) {\n\t\tif (this.multi) {\n\t\t\tconst values = Array.isArray(val)\n\t\t\t\t? val\n\t\t\t\t: val ? String(val).split(',').map(v => v.trim()).filter(Boolean) : []\n\t\t\tthis._selectedValues$.next(values)\n\t\t} else {\n\t\t\tthis._selectedValue$.next(String(val || ''))\n\t\t}\n\t}\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._selectedValues$.next(Array.isArray(vals) ? [...vals] : [])\n\t}\n\n\t@property({ type: Boolean }) multi = false\n\t@property({ type: String }) label = ''\n\t@property({ type: String }) hint = ''\n\t@property({ type: String }) validateOn: 'always' | 'touched' | 'dirty' | 'submitted' = 'touched'\n\t@property({ type: String }) size: 'sm' | 'md' | 'lg' = 'md'\n\n\t// Internal states\n\t@state() private isOpen = false\n\t@state() private valueLabel = ''\n\t@state() private isValid = true\n\t@property({ type: String }) validationMessage = ''\n\n\t// Store the initial/default value for reset behavior\n\t@state() private defaultValue: string | string[] = ''\n\n\t@query('ul') private ul!: HTMLUListElement\n\t@query('sch-input') private inputRef!: SchmancyInput\n\t@queryAssignedElements({ flatten: true }) private options!: SchmancyOption[]\n\tprivate cleanupPositioner?: () => void\n\n\t// Reactive state management\n\tprivate _options$ = new BehaviorSubject<SchmancyOption[]>([])\n\tprivate _selectedValue$ = new BehaviorSubject<string>('')\n\tprivate _selectedValues$ = new BehaviorSubject<string[]>([])\n\tprivate _optionSelect$ = new Subject<SchmancyOption>()\n\t@state() _userInteracted = false\n\t@state() private _touched = false\n\t@state() private _dirty = false\n\t@state() private _submitted = false\n\n\t// Reference to current focused option (for keyboard navigation)\n\t@state() private _focusedOptionId = ''\n\n\t// Form event handlers\n\tprivate formSubmitHandler = () => {\n\t\tthis._submitted = true\n\t\tthis.checkValidity()\n\t}\n\n\tprivate formResetHandler = () => {\n\t\tthis.reset()\n\t}\n\n\tconstructor() {\n\t\tsuper()\n\t\t// Initialize ElementInternals for form association\n\t\ttry {\n\t\t\tthis.internals = this.attachInternals()\n\t\t} catch (e) {\n\t\t\tconsole.warn('FormAssociated elements not supported in this browser', e)\n\t\t}\n\t}\n\n\tget form() {\n\t\treturn this.internals?.form\n\t}\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\t\tif (!this.id) {\n\t\t\tthis.id = `schmancy-select-${Math.random().toString(36).substring(2, 9)}`\n\t\t}\n\n\t\t// Store initial value for reset\n\t\tthis.defaultValue = this.value\n\n\t\t// Add keyboard handling to host element\n\t\tfromEvent<KeyboardEvent>(this, 'keydown').pipe(takeUntil(this.disconnecting)).subscribe(this.handleKeyDown)\n\n\t\t// Setup reactive pipelines\n\t\tthis._setupReactivePipelines()\n\n\t\t// Listen for form submission events to mark field as submitted\n\t\tif (this.internals?.form) {\n\t\t\tfromEvent(this.internals.form, 'submit')\n\t\t\t\t.pipe(takeUntil(this.disconnecting))\n\t\t\t\t.subscribe(this.formSubmitHandler)\n\n\t\t\t// Listen for form reset\n\t\t\tfromEvent(this.internals.form, 'reset')\n\t\t\t\t.pipe(takeUntil(this.disconnecting))\n\t\t\t\t.subscribe(this.formResetHandler)\n\t\t}\n\n\t\t// Initially hide any validation errors until user interacts\n\t\tif (this.inputRef) {\n\t\t\tthis.inputRef.error = false\n\t\t}\n\t}\n\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback()\n\t\tthis.cleanupPositioner?.()\n\t\t// Form event listeners are automatically cleaned up via takeUntil(this.disconnecting)\n\t}\n\n\tfirstUpdated() {\n\t\tthis.syncSelection()\n\t\tthis.setupOptionsAccessibility()\n\t}\n\n\tupdated(changedProps: PropertyValues) {\n\t\tsuper.updated(changedProps)\n\n\t\tif (changedProps.has('value')) {\n\t\t\t// Update form value when component value changes\n\t\t\tconst formValue = Array.isArray(this.value) ? this.value.join(',') : this.value\n\t\t\tthis.internals?.setFormValue(formValue)\n\n\t\t\t// Mark as dirty if value changes from initial value\n\t\t\tif (this.hasUpdated) {\n\t\t\t\tthis._dirty = true\n\t\t\t}\n\n\t\t\t// Check validity based on validation strategy\n\t\t\tif (this.hasUpdated) {\n\t\t\t\tthis.checkValidity()\n\t\t\t}\n\t\t}\n\n\t\t// When open state changes, setup or cleanup the dropdown positioner\n\t\tif (changedProps.has('isOpen')) {\n\t\t\tif (this.isOpen) {\n\t\t\t\tthis.positionDropdown()\n\t\t\t} else {\n\t\t\t\tthis.cleanupPositioner?.()\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Determines if validation errors should be shown based on current state\n\t * and validation strategy\n\t */\n\tprivate shouldShowValidation(forceValidation = false): boolean {\n\t\tif (forceValidation) return true\n\n\t\tswitch (this.validateOn) {\n\t\t\tcase 'always':\n\t\t\t\treturn true\n\t\t\tcase 'touched':\n\t\t\t\treturn this._touched\n\t\t\tcase 'dirty':\n\t\t\t\treturn this._dirty\n\t\t\tcase 'submitted':\n\t\t\t\treturn this._submitted\n\t\t\tdefault:\n\t\t\t\treturn this._touched\n\t\t}\n\t}\n\n\tprivate syncSelection() {\n\t\tif (this.multi) {\n\t\t\t// Read directly from the BehaviorSubject to avoid string conversion issues\n\t\t\tconst selectedValues = this._selectedValues$.value\n\t\t\tthis.options?.forEach(o => (o.selected = selectedValues.includes(o.value))) // Update option selected state\n\t\t\tthis.valueLabel =\n\t\t\t\tselectedValues.length > 0\n\t\t\t\t\t? this.options\n\t\t\t\t\t\t\t?.filter(o => selectedValues.includes(o.value))\n\t\t\t\t\t\t\t.map(o => o.label || o.textContent || '')\n\t\t\t\t\t\t\t.join(', ') || this.placeholder\n\t\t\t\t\t: this.placeholder\n\t\t} else {\n\t\t\t// Single select - read from BehaviorSubject\n\t\t\tconst currentValue = this._selectedValue$.value\n\t\t\tthis.options?.forEach(o => {\n\t\t\t\t// Set selected property on each option based on matching value\n\t\t\t\to.selected = o.value === currentValue\n\t\t\t})\n\t\t\tconst selectedOption = this.options?.find(o => o.value === currentValue)\n\t\t\tthis.valueLabel = selectedOption ? (selectedOption.label || selectedOption.textContent || '') : this.placeholder\n\t\t}\n\t}\n\n\tprivate setupOptionsAccessibility() {\n\t\tthis.options?.forEach((option, index) => {\n\t\t\toption.setAttribute('role', 'option')\n\t\t\tif (!option.id) {\n\t\t\t\toption.id = `${this.id}-option-${index}`\n\t\t\t}\n\n\t\t\t// Set tabindex to -1 so they're focusable programmatically but not in the tab order\n\t\t\toption.tabIndex = -1\n\t\t\tconst selectedValues = Array.isArray(this.value) ? this.value : this.value ? this.value.split(',') : []\n\n\t\t\toption.setAttribute(\n\t\t\t\t'aria-selected',\n\t\t\t\tString(this.multi ? selectedValues.includes(option.value) : option.value === this.value),\n\t\t\t)\n\t\t})\n\t}\n\n\tprivate async positionDropdown() {\n\t\tconst reference = this.renderRoot.querySelector('.trigger') as HTMLElement\n\t\tif (!reference || !this.ul) return\n\n\t\tthis.cleanupPositioner = autoUpdate(reference, this.ul, async () => {\n\t\t\t// Get viewport dimensions\n\t\t\tconst viewportHeight = window.innerHeight\n\t\t\tconst triggerRect = reference.getBoundingClientRect()\n\n\t\t\t// Calculate available space below and above\n\t\t\tconst spaceBelow = viewportHeight - triggerRect.bottom\n\t\t\tconst spaceAbove = triggerRect.top\n\n\t\t\t// Calculate max height - use 75% of the largest available space, but at least 150px\n\t\t\tconst maxHeight = Math.max(Math.max(spaceBelow, spaceAbove) * 0.75, 150)\n\n\t\t\t// Determine if we should flip\n\t\t\tconst shouldFlip = spaceBelow < 200 && spaceAbove > spaceBelow\n\n\t\t\t// Apply max height\n\t\t\tthis.ul.style.maxHeight = `${maxHeight}px`\n\n\t\t\tconst { x, y } = await computePosition(reference, this.ul, {\n\t\t\t\tplacement: shouldFlip ? 'top-start' : 'bottom-start',\n\t\t\t\tmiddleware: [offset(5), flip(), shift({ padding: 5 })],\n\t\t\t})\n\n\t\t\tObject.assign(this.ul.style, {\n\t\t\t\tleft: `${x}px`,\n\t\t\t\ttop: `${y}px`,\n\t\t\t\tposition: 'absolute',\n\t\t\t\twidth: `${reference.offsetWidth}px`, // Match the width of the trigger\n\t\t\t})\n\t\t})\n\t}\n\n\tprivate handleKeyDown = (e: KeyboardEvent) => {\n\t\t// Don't handle keyboard events when disabled\n\t\tif (this.disabled) {\n\t\t\treturn\n\t\t}\n\n\t\tif (!this.isOpen) {\n\t\t\tif (['Enter', ' ', 'ArrowDown'].includes(e.key)) {\n\t\t\t\te.preventDefault()\n\t\t\t\tthis.openDropdown(false)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\n\t\t// Find current focused option\n\t\tconst options = Array.from(this.options || [])\n\t\tconst current = options.findIndex(o => o.id === this._focusedOptionId) ?? -1\n\n\t\tswitch (e.key) {\n\t\t\tcase 'Escape':\n\t\t\t\te.preventDefault()\n\t\t\t\tthis.closeDropdown()\n\t\t\t\tbreak\n\t\t\tcase 'ArrowDown':\n\t\t\t\te.preventDefault()\n\t\t\t\tthis.focusOption(options, Math.min(current + 1, options.length - 1))\n\t\t\t\tbreak\n\t\t\tcase 'ArrowUp':\n\t\t\t\te.preventDefault()\n\t\t\t\tthis.focusOption(options, Math.max(current - 1, 0))\n\t\t\t\tbreak\n\t\t\tcase 'Home':\n\t\t\t\te.preventDefault()\n\t\t\t\tthis.focusOption(options, 0)\n\t\t\t\tbreak\n\t\t\tcase 'End':\n\t\t\t\te.preventDefault()\n\t\t\t\tthis.focusOption(options, options.length - 1)\n\t\t\t\tbreak\n\t\t\tcase 'Enter':\n\t\t\tcase ' ':\n\t\t\t\te.preventDefault()\n\t\t\t\tif (this._focusedOptionId) {\n\t\t\t\t\tconst focusedOption = options.find(opt => opt.id === this._focusedOptionId)\n\t\t\t\t\tif (focusedOption) {\n\t\t\t\t\t\tthis.handleOptionSelect(focusedOption.value)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tcase 'Tab':\n\t\t\t\tthis.closeDropdown()\n\t\t\t\tbreak\n\t\t}\n\t}\n\n\tprivate focusOption(options: SchmancyOption[], index: number) {\n\t\tconst option = options[index]\n\t\tif (option) {\n\t\t\toption.focus()\n\t\t\tthis._focusedOptionId = option.id\n\n\t\t\t// Update aria-activedescendant on the combobox\n\t\t\tconst combobox = this.renderRoot.querySelector('.trigger')\n\t\t\tif (combobox) {\n\t\t\t\tcombobox.setAttribute('aria-activedescendant', option.id)\n\t\t\t}\n\n\t\t\t// Ensure option is visible in the scrollable area\n\t\t\tif (this.ul && option.offsetTop !== undefined) {\n\t\t\t\t// Get position info\n\t\t\t\tconst optionTop = option.offsetTop\n\t\t\t\tconst optionHeight = option.offsetHeight\n\t\t\t\tconst scrollTop = this.ul.scrollTop\n\t\t\t\tconst ulHeight = this.ul.clientHeight\n\n\t\t\t\t// Scroll into view if needed\n\t\t\t\tif (optionTop < scrollTop) {\n\t\t\t\t\tthis.ul.scrollTop = optionTop\n\t\t\t\t} else if (optionTop + optionHeight > scrollTop + ulHeight) {\n\t\t\t\t\tthis.ul.scrollTop = optionTop + optionHeight - ulHeight\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async openDropdown(report = false) {\n\t\t// Don't open if disabled\n\t\tif (this.disabled) {\n\t\t\treturn\n\t\t}\n\n\t\t// Don't mark as touched on opening - we'll do that on closing\n\t\t// so errors only show after interaction is complete\n\n\t\tthis.isOpen = true\n\t\tawait this.updateComplete\n\n\t\t// Focus first or selected option\n\t\tconst options = Array.from(this.options || [])\n\t\tconst selectedIndex = this.multi ? 0 : options.findIndex(o => o.value === String(this.value))\n\n\t\tthis.focusOption(options, Math.max(selectedIndex, 0))\n\n\t\t// Don't automatically validate when opening\n\t\t// Only validate if explicitly requested (like from a form submission)\n\t\tif (report) this.reportValidity()\n\t}\n\n\tprivate closeDropdown() {\n\t\t// Only mark as touched if the user actually interacted with the component\n\t\t// and made a selection or explicitly closed it without selecting\n\t\tif (this._userInteracted) {\n\t\t\tthis._touched = true\n\t\t}\n\n\t\tthis.isOpen = false\n\t\tthis._focusedOptionId = ''\n\n\t\t// Update combobox to remove aria-activedescendant\n\t\tconst combobox = this.renderRoot.querySelector<HTMLElement>('.trigger')\n\t\tif (combobox) {\n\t\t\tcombobox.removeAttribute('aria-activedescendant')\n\t\t\tcombobox?.focus()\n\t\t}\n\n\t\t// Only check validity when closing if the user has actually interacted\n\t\t// with the component and validation should be shown\n\t\tif (this._userInteracted && this.shouldShowValidation()) {\n\t\t\tthis.checkValidity()\n\t\t}\n\t}\n\n\tprivate _setupReactivePipelines() {\n\t\t// Listen for option-select events from child options\n\t\tfromEvent<CustomEvent>(this, 'option-select')\n\t\t\t.pipe(\n\t\t\t\ttap((e) => {\n\t\t\t\t\te.stopPropagation() // Prevent event from bubbling further\n\t\t\t\t\tconst option = this.options.find(o => o.value === e.detail.value)\n\t\t\t\t\tif (option) {\n\t\t\t\t\t\tthis._optionSelect$.next(option)\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// Handle option selection through reactive pipeline\n\t\tthis._optionSelect$\n\t\t\t.pipe(\n\t\t\t\twithLatestFrom(this._selectedValue$, this._selectedValues$),\n\t\t\t\ttap(([option, _, currentValues]) => {\n\t\t\t\t\tthis._userInteracted = true\n\t\t\t\t\tthis._touched = true\n\t\t\t\t\tthis._dirty = true\n\n\t\t\t\t\tif (this.multi) {\n\t\t\t\t\t\tconst index = currentValues.indexOf(option.value)\n\t\t\t\t\t\tconst newValues = index > -1\n\t\t\t\t\t\t\t? [...currentValues.slice(0, index), ...currentValues.slice(index + 1)]\n\t\t\t\t\t\t\t: [...currentValues, option.value]\n\t\t\t\t\t\tthis._selectedValues$.next(newValues)\n\n\t\t\t\t\t\t// Update display label\n\t\t\t\t\t\tthis.valueLabel = newValues.length > 0\n\t\t\t\t\t\t\t? this.options\n\t\t\t\t\t\t\t\t\t.filter(o => newValues.includes(o.value))\n\t\t\t\t\t\t\t\t\t.map(o => o.label || o.textContent || '')\n\t\t\t\t\t\t\t\t\t.join(', ')\n\t\t\t\t\t\t\t: this.placeholder\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Single select\n\t\t\t\t\t\tthis._selectedValue$.next(option.value)\n\t\t\t\t\t\tthis.valueLabel = option.label || option.textContent || this.placeholder\n\t\t\t\t\t\tthis.closeDropdown()\n\t\t\t\t\t}\n\n\t\t\t\t\t// Update the option's accessibility state\n\t\t\t\t\tthis.setupOptionsAccessibility()\n\n\t\t\t\t\t// Dispatch change event\n\t\t\t\t\tthis._fireChangeEvent()\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// Options management pipeline - bind pointerdown events exactly like autocomplete\n\t\tthis._options$\n\t\t\t.pipe(\n\t\t\t\ttap((options) => {\n\t\t\t\t\toptions.forEach((option, index) => {\n\t\t\t\t\t\toption.setAttribute('role', 'option')\n\t\t\t\t\t\toption.tabIndex = -1\n\t\t\t\t\t\tif (!option.id) {\n\t\t\t\t\t\t\toption.id = `${this.id}-option-${index}`\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Use data-event-bound to prevent duplicate bindings\n\t\t\t\t\t\tif (!option.hasAttribute('data-event-bound')) {\n\t\t\t\t\t\t\t// Use click event instead of pointerdown for better mobile UX\n\t\t\t\t\t\t\t// This allows users to scroll through options without immediately selecting\n\t\t\t\t\t\t\tfromEvent(option, 'click').pipe(\n\t\t\t\t\t\t\t\ttap(e => {\n\t\t\t\t\t\t\t\t\te.stopPropagation()\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\ttakeUntil(this.disconnecting)\n\t\t\t\t\t\t\t).subscribe(() => this._optionSelect$.next(option))\n\t\t\t\t\t\t\toption.setAttribute('data-event-bound', 'true')\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// Selection sync pipeline - sync selected states with value changes\n\t\tcombineLatest([this._selectedValue$, this._selectedValues$, this._options$])\n\t\t\t.pipe(\n\t\t\t\ttap(([singleValue, multiValues, options]) => {\n\t\t\t\t\tif (options.length === 0) return\n\n\t\t\t\t\tif (this.multi) {\n\t\t\t\t\t\toptions.forEach(option => {\n\t\t\t\t\t\t\toption.selected = multiValues.includes(option.value)\n\t\t\t\t\t\t})\n\t\t\t\t\t} else {\n\t\t\t\t\t\toptions.forEach(option => {\n\t\t\t\t\t\t\toption.selected = option.value === singleValue\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\t}\n\n\tprivate handleOptionSelect(value: string) {\n\t\t// This method is now called from keyboard navigation only\n\t\tconst option = this.options.find(o => o.value === value)\n\t\tif (option) {\n\t\t\tthis._optionSelect$.next(option)\n\t\t}\n\t}\n\n\tprivate _fireChangeEvent() {\n\t\t// Get the current value based on multi/single mode\n\t\tconst value = this.multi ? this._selectedValues$.value : this._selectedValue$.value\n\n\t\t// Dispatch only one change event with the value in detail\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent<SchmancySelectChangeEvent['detail']>('change', {\n\t\t\t\tdetail: { value },\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\n\t\t// Then check validity (only show error if validation should be shown)\n\t\tthis.checkValidity()\n\t}\n\n\tpublic checkValidity(): boolean {\n\t\t// Disabled fields are always valid\n\t\tif (this.disabled) {\n\t\t\treturn true\n\t\t}\n\n\t\t// Determine if the select is empty based on whether it's multi-select or single-select\n\t\tconst isEmpty = this.multi ? (Array.isArray(this.value) ? this.value.length === 0 : !this.value) : !this.value\n\n\t\t// Check if the value is valid (not empty when required)\n\t\tconst isValid = !(this.required && isEmpty)\n\n\t\t// Set the validity state\n\t\tthis.isValid = isValid\n\n\t\tif (!this.isValid) {\n\t\t\tthis.validationMessage = 'Please select an option.'\n\t\t\tthis.internals?.setValidity({ valueMissing: true }, 'Please select an option.', this.inputRef)\n\t\t} else {\n\t\t\t// Clear validation message\n\t\t\tthis.validationMessage = ''\n\t\t\tthis.internals?.setValidity({})\n\t\t}\n\n\t\t// Update the input component to reflect our validation state\n\t\tif (this.inputRef && this.hasUpdated) {\n\t\t\tconst showError = !this.isValid && this.shouldShowValidation()\n\t\t\tthis.inputRef.error = showError\n\t\t\tthis.inputRef.hint = showError ? this.validationMessage : this.hint\n\t\t}\n\n\t\treturn this.isValid\n\t}\n\n\tpublic reportValidity(): boolean {\n\t\t// Force validation display regardless of validation strategy\n\t\tconst valid = this.checkValidity()\n\n\t\t// Force the input to show validation errors\n\t\tif (this.inputRef) {\n\t\t\t// Set the input's error state\n\t\t\tthis.inputRef.error = !valid\n\t\t\tthis.inputRef.hint = !valid ? this.validationMessage : this.hint\n\n\t\t\t// If invalid and not already open, automatically open the dropdown to show options\n\t\t\tif (!valid && !this.isOpen) {\n\t\t\t\t// Open the dropdown but don't mark as user interaction yet\n\t\t\t\t// This helps users immediately see available options when validation fails\n\t\t\t\tthis.openDropdown(false)\n\t\t\t}\n\n\t\t\t// Only call reportValidity on the input if invalid to show the native popup\n\t\t\tif (!valid) {\n\t\t\t\tthis.inputRef.reportValidity()\n\t\t\t}\n\t\t}\n\n\t\treturn valid\n\t}\n\n\tpublic setCustomValidity(message: string) {\n\t\tthis.validationMessage = message\n\t\tif (message) {\n\t\t\tthis.isValid = false\n\t\t\tthis.internals?.setValidity({ customError: true }, message, this.inputRef)\n\t\t} else {\n\t\t\tthis.isValid = true\n\t\t\tthis.internals?.setValidity({})\n\t\t}\n\n\t\t// Update input if needed\n\t\tif (this.inputRef && this.shouldShowValidation()) {\n\t\t\tthis.inputRef.error = !this.isValid\n\t\t\tthis.inputRef.hint = !this.isValid ? this.validationMessage : this.hint\n\t\t}\n\t}\n\n\tpublic reset() {\n\t\t// Reset to initial value\n\t\tthis.value = this.defaultValue\n\t\tthis.valueLabel = this.placeholder\n\t\tthis.isValid = true\n\t\tthis.validationMessage = ''\n\t\tthis._touched = false\n\t\tthis._dirty = false\n\t\tthis._submitted = false\n\t\tthis._userInteracted = false\n\t\tthis.internals?.setValidity({})\n\n\t\tif (this.inputRef) {\n\t\t\tthis.inputRef.error = false\n\t\t\tthis.inputRef.hint = this.hint\n\t\t}\n\t}\n\n\trender(): TemplateResult {\n\t\t// Determine if we should show errors based on the validation strategy and interaction\n\t\t// Never show errors on initial render or if the dropdown is open\n\t\tconst showErrors = !this.isValid && this.shouldShowValidation() && !this.isOpen\n\n\t\t// Add caret icon based on open state\n\t\tconst caretIcon = this.isOpen\n\t\t\t? html`<span class=\"absolute right-3 top-1/2 transform -translate-y-1/2\">▲</span>`\n\t\t\t: html`<span class=\"absolute right-3 top-1/2 transform -translate-y-1/2\">▼</span>`\n\n\t\treturn html`\n\t\t\t<div class=\"relative ${this.disabled ? 'opacity-60 cursor-not-allowed' : ''}\">\n\t\t\t\t<sch-input\n\t\t\t\t\t.name=${this.name}\n\t\t\t\t\ttabIndex=${this.disabled ? '-1' : '0'}\n\t\t\t\t\tclass=\"trigger\"\n\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\taria-haspopup=\"listbox\"\n\t\t\t\t\taria-expanded=${this.isOpen}\n\t\t\t\t\taria-controls=\"options\"\n\t\t\t\t\taria-autocomplete=\"none\"\n\t\t\t\t\taria-required=${this.required}\n\t\t\t\t\taria-activedescendant=${this._focusedOptionId || undefined}\n\t\t\t\t\taria-disabled=${this.disabled}\n\t\t\t\t\t.label=${this.label}\n\t\t\t\t\t.placeholder=${this.placeholder}\n\t\t\t\t\t.value=${this.valueLabel}\n\t\t\t\t\t.required=${this.required}\n\t\t\t\t\t.disabled=${this.disabled}\n\t\t\t\t\t.hint=${showErrors ? this.validationMessage : this.hint}\n\t\t\t\t\t.error=${showErrors}\n\t\t\t\t\t.validateOn=${this.validateOn}\n\t\t\t\t\t.size=${this.size}\n\t\t\t\t\treadonly\n\t\t\t\t\tclickable\n\t\t\t\t\t@click=${(e: MouseEvent) => {\n\t\t\t\t\t\t// Don't process clicks if disabled\n\t\t\t\t\t\tif (this.disabled) {\n\t\t\t\t\t\t\te.preventDefault()\n\t\t\t\t\t\t\te.stopPropagation()\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// On first click, don't count this as user interaction yet\n\t\t\t\t\t\tif (!this.isOpen) {\n\t\t\t\t\t\t\t// Open without triggering validation - we'll validate when they close\n\t\t\t\t\t\t\tthis.openDropdown(false)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Mark as interacted when they close the dropdown\n\t\t\t\t\t\t\tthis._userInteracted = true\n\t\t\t\t\t\t\tthis.closeDropdown()\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t${caretIcon}\n\t\t\t\t</sch-input>\n\n\t\t\t\t<!-- Overlay for capturing clicks outside when dropdown is open -->\n\t\t\t\t${this.isOpen\n\t\t\t\t\t? html` <div class=\"fixed inset-0 z-10\" @click=${this.closeDropdown} tabindex=\"-1\" aria-hidden=\"true\"></div> `\n\t\t\t\t\t: ''}\n\n\t\t\t\t<ul\n\t\t\t\t\tid=\"options\"\n\t\t\t\t\trole=\"listbox\"\n\t\t\t\t\taria-multiselectable=${this.multi}\n\t\t\t\t\tclass=${classMap({\n\t\t\t\t\t\t'absolute min-w-full w-full z-20 mt-1 rounded-md shadow-lg': true,\n\t\t\t\t\t\thidden: !this.isOpen,\n\t\t\t\t\t})}\n\t\t\t\t\t${color({\n\t\t\t\t\t\tbgColor: SchmancyTheme.sys.color.surface.low,\n\t\t\t\t\t\tcolor: SchmancyTheme.sys.color.surface.on,\n\t\t\t\t\t})}\n\t\t\t\t>\n\t\t\t\t\t<slot\n\t\t\t\t\t\t@slotchange=${() => {\n\t\t\t\t\t\t\tthis._options$.next(this.options)\n\t\t\t\t\t\t\t// Sync selection state when options re-render\n\t\t\t\t\t\t\tthis.syncSelection()\n\t\t\t\t\t\t}}\n\t\t\t\t\t></slot>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\n// Don't export 'select' here as it conflicts with the store's select decorator\n// export const select = SchmancySelect\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-select': SchmancySelect\n\t}\n}\n"],"names":["SchmancySelect","$LitElement","css","super","this","required","disabled","placeholder","multi","label","hint","validateOn","size","isOpen","valueLabel","isValid","validationMessage","defaultValue","_options$","BehaviorSubject","_selectedValue$","_selectedValues$","_optionSelect$","Subject","_userInteracted","_touched","_dirty","_submitted","_focusedOptionId","formSubmitHandler","checkValidity","formResetHandler","reset","handleKeyDown","e","includes","key","preventDefault","openDropdown","options","Array","from","current","findIndex","o","id","closeDropdown","focusOption","Math","min","length","max","focusedOption","find","opt","handleOptionSelect","value","internals","attachInternals","join","val","values","isArray","String","split","map","v","trim","filter","Boolean","next","vals","form","connectedCallback","random","toString","substring","fromEvent","pipe","takeUntil","disconnecting","subscribe","_setupReactivePipelines","inputRef","error","disconnectedCallback","cleanupPositioner","firstUpdated","syncSelection","setupOptionsAccessibility","changedProps","updated","has","formValue","setFormValue","hasUpdated","positionDropdown","forceValidation","selectedValues","forEach","selected","textContent","currentValue","selectedOption","option","index","setAttribute","tabIndex","reference","renderRoot","querySelector","ul","autoUpdate","async","viewportHeight","window","innerHeight","triggerRect","getBoundingClientRect","spaceBelow","bottom","spaceAbove","top","maxHeight","shouldFlip","style","x","y","computePosition","placement","middleware","offset","flip","shift","padding","Object","assign","left","position","width","offsetWidth","focus","combobox","offsetTop","optionTop","optionHeight","offsetHeight","scrollTop","ulHeight","clientHeight","report","updateComplete","selectedIndex","reportValidity","removeAttribute","shouldShowValidation","tap","stopPropagation","detail","withLatestFrom","_","currentValues","indexOf","newValues","slice","_fireChangeEvent","hasAttribute","combineLatest","singleValue","multiValues","dispatchEvent","CustomEvent","bubbles","composed","isEmpty","setValidity","valueMissing","showError","valid","message","customError","showErrors","caretIcon","html","name","classMap","hidden","color","bgColor","SchmancyTheme","sys","surface","low","on","formAssociated","__decorateClass","property","type","prototype","reflect","state","query","queryAssignedElements","flatten","customElement"],"mappings":"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"}
|
package/dist/select.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./select-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./select-C-Kv7ey_.cjs");Object.defineProperty(exports,"SchmancySelect",{enumerable:!0,get:()=>e.SchmancySelect});
|
|
2
2
|
//# sourceMappingURL=select.cjs.map
|
package/dist/select.js
CHANGED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";const D=require("lit/decorators.js"),y=require("rxjs"),P=require("rxjs/operators"),E=require("./context-create-BJkkLr1D.cjs"),W=(t,e)=>{if(!e)return t;const r=e.split(".");let n=t;for(const i of r){if(n==null)return;n=n[i]}return n},z=t=>{if(!t||t.length<2)return[];const e=[];for(let r=0;r<t.length-1;r++)e.push(t.substring(r,r+2).toLowerCase());return e},N=(t,e)=>{if(!t||!e)return 0;const r=t.toLowerCase().trim(),n=e.toLowerCase().trim();if(r===n)return 1;const i=r.includes(n)?1:0,c=((s,u)=>{if(!s)return!0;if(!u)return!1;let l=0,a=0;for(;l<s.length&&a<u.length;)s[l].toLowerCase()===u[a].toLowerCase()&&l++,a++;return l===s.length})(n,r)?.8:0,d=((s,u)=>{if(!s)return!0;if(!u)return!1;const l=w=>w.toLowerCase().split("").reduce((L,v)=>(L[v]=(L[v]||0)+1,L),{}),a=l(s),p=l(u);return Object.keys(a).every(w=>(p[w]||0)>=a[w])})(n,r)?.7:0,h=((s,u)=>{if(!s||!u||s.length<2||u.length<2)return 0;const l=z(s),a=z(u);if(l.length===0||a.length===0)return 0;let p=0;const w=new Array(a.length).fill(!1);for(const L of l)for(let v=0;v<a.length;v++)if(!w[v]&&a[v]===L){p++,w[v]=!0;break}return 2*p/(l.length+a.length)})(r,n),o=Math.max(r.length,n.length),f=o?1-((s,u)=>{if(s===u)return 0;const l=Array(u.length+1).fill(null).map((a,p)=>[p]);for(let a=0;a<=s.length;a++)l[0][a]=a;for(let a=1;a<=u.length;a++)for(let p=1;p<=s.length;p++)u.charAt(a-1)===s.charAt(p-1)?l[a][p]=l[a-1][p-1]:l[a][p]=Math.min(l[a-1][p]+1,l[a][p-1]+1,l[a-1][p-1]+1);return l[u.length][s.length]})(r,n)/o:0;return Math.max(i,c,d,h,f)},U=t=>t==null?"":String(t);function F(t,e,r=.3){let n,i,c,d=!1;if(Array.isArray(e))[n,i,c,d=!1]=e;else{if(Array.isArray(e.key))return e.key.map(o=>F(t,{...e,key:o},r)).reduce((o,f)=>f.valid&&f.score>o.score?f:o,{valid:!1,score:0});n=e.key,i=e.operator,c=e.value,d=e.strict||!1}if(!d&&(c===""||c==null||j(c)&&c.length===0))return{valid:!0,score:1};const h=W(t,n);if(d){if(i==="any"){if(typeof h!="string"||typeof c!="string")return{valid:!1,score:0};const o=N(h,c);return{valid:o>=r,score:o>=r?o:0}}{const o=T(i,h,c);return{valid:o,score:o?1:0}}}if(i==="any"){if(typeof h!="string"||typeof c!="string")return{valid:!1,score:0};const o=N(h,c);return o<r?{valid:!1,score:0}:{valid:!0,score:o}}{const o=T(i,h,c);return{valid:o,score:o?1:0}}}function I(t,e=[],r=.3){if(!e.length)return Array.from(t.values());const n=[];for(const[i,c]of t.entries()){let d=0,h=0,o=!0;for(const f of e){const s=F(c,f,r);if(!s.valid){o=!1;break}d+=s.score,h++}o&&n.push({item:c,score:h>0?d/h:1})}return n.sort((i,c)=>c.score-i.score),n.map(i=>i.item)}function R(t,e=[],r=.3){const n=new Map;return t.forEach((i,c)=>n.set(String(c),i)),I(n,e,r)}function j(t){return Array.isArray(t)}function m(t){return typeof t=="string"}function C(t){return typeof t=="number"&&!isNaN(t)}function S(t){return t instanceof Date&&!isNaN(t.getTime())}function M(t){return t instanceof Map}function $(t){return t instanceof Set}function q(t){return t==null}function T(t,e,r){if(q(e)&&q(r))return!0;if(q(e)||q(r))return t==="=="?e===r:t==="!="&&e!==r;switch(t){case"==":return e===r;case"!=":return e!==r;case">":return C(e)&&C(r)?e>r:S(e)&&S(r)?e.getTime()>r.getTime():!(!m(e)||!m(r))&&e.localeCompare(r)>0;case"<":return C(e)&&C(r)?e<r:S(e)&&S(r)?e.getTime()<r.getTime():!(!m(e)||!m(r))&&e.localeCompare(r)<0;case">=":return C(e)&&C(r)?e>=r:S(e)&&S(r)?e.getTime()>=r.getTime():!(!m(e)||!m(r))&&e.localeCompare(r)>=0;case"<=":return C(e)&&C(r)?e<=r:S(e)&&S(r)?e.getTime()<=r.getTime():!(!m(e)||!m(r))&&e.localeCompare(r)<=0;case"includes":return m(e)?e.toLowerCase().includes(U(r).toLowerCase()):j(e)?e.includes(r):$(e)?e.has(r):!!M(e)&&Array.from(e.values()).includes(r);case"notIncludes":return m(e)?!e.toLowerCase().includes(U(r).toLowerCase()):j(e)?!e.includes(r):$(e)?!e.has(r):!M(e)||!Array.from(e.values()).includes(r);case"startsWith":return!(!m(e)||!m(r))&&e.toLowerCase().startsWith(r.toLowerCase());case"endsWith":return!(!m(e)||!m(r))&&e.toLowerCase().endsWith(r.toLowerCase());case"in":return j(r)?r.includes(e):$(r)?r.has(e):!!M(r)&&(r.has(e)||Array.from(r.values()).includes(e));case"notIn":return j(r)?!r.includes(e):$(r)?!r.has(e):!M(r)||!r.has(e)&&!Array.from(r.values()).includes(e);default:return!1}}const K=I,Z=R;function x(t,e){if(t===e)return!0;if(t instanceof Map&&e instanceof Map){if(t.size!==e.size)return!1;for(const[r,n]of t)if(!e.has(r)||!x(n,e.get(r)))return!1;return!0}if(t instanceof Set&&e instanceof Set){if(t.size!==e.size)return!1;for(const r of t)if(!e.has(r))return!1;return!0}if(typeof t=="object"&&t!==null&&typeof e=="object"&&e!==null){const r=Object.keys(t),n=Object.keys(e);if(r.length!==n.length)return!1;for(const i of r)if(!x(t[i],e[i]))return!1;return!0}return!1}function B(t,e){return t.$.pipe(y.map(e),y.distinctUntilChanged(x),y.shareReplay(1))}function g(t,e){return t.$.pipe(y.map(e),y.distinctUntilChanged(x),y.shareReplay(1))}const A=Symbol("selectorCleanup"),b=Symbol("selectorSubscriptions"),k=Symbol("selectorInitialized"),O=Symbol("connectedCallbackCalled");function V(t,e=n=>n,r={required:!0}){return function(n,i,c){D.property({attribute:!1,type:Object})(n,i);const d=n.connectedCallback,h=n.disconnectedCallback;n.connectedCallback=function(){var o;(o=this)[A]&&!o[A].closed||(o[A]=new y.Subject),o[b]||(o[b]=new Map),o[k]||(o[k]=new Set);const f=(function(u){return"set"in u&&typeof u.set=="function"&&u.value instanceof Map})(t)?g(t,e):B(t,e);r.required||this[O]||(d?.call(this),this[O]=!0),this[b].has(i)&&(this[b].get(i)?.unsubscribe(),this[b].delete(i)),r.debug;const s=f.pipe(P.takeUntil(this[A])).subscribe({next:u=>{const l=r.deepClone?structuredClone(u):u;r.debug,r.updateOnly||(this[i]=l),this.requestUpdate?.(),r.required&&!this[k].has(i)&&l!==void 0&&(this[k].add(i),this[O]||(r.debug,d?.call(this),this[O]=!0))},error:u=>{this.isConnected&&setTimeout(()=>{this.isConnected&&(r.debug,this.connectedCallback?.())},1e3)}});this[b].set(i,s)},n.disconnectedCallback=function(){var o;h?.call(this),r.debug,(o=this)[A]&&(o[A].next(),o[A].complete(),o[A]=void 0),o[b]&&(o[b].forEach(f=>f.unsubscribe()),o[b].clear(),o[b]=void 0),o[k]&&(o[k].clear(),o[k]=void 0),o[O]=void 0}}}exports.compareValues=T,exports.createCollectionSelector=g,exports.createCompoundSelector=function(t,e,r){const n=t.map((f,s)=>e[s](f.value)),i=r(...n),c={$:new y.BehaviorSubject(i),error$:new y.BehaviorSubject(null),ready:!0,defaultValue:i,get value(){return this.$.getValue()},set(f,s){},clear(){this.$.next(this.defaultValue)},replace(f){},delete(f){},destroy(){this.$.complete(),this.error$.complete()}},d=t.map((f,s)=>f.$),h=y.combineLatest(d).subscribe({next:f=>{try{const s=f.map((l,a)=>e[a](l)),u=r(...s);c.$.next(u)}catch(s){const u=new E.StoreError("Error in compound selector",s);c.error$.next(u)}},error:f=>{const s=new E.StoreError("Error in store subscription",f);c.error$.next(s)}}),o=c.destroy;return c.destroy=function(){h.unsubscribe(),o.call(this)},c},exports.createCountSelector=function(t,e){return g(t,r=>e?Array.from(r.entries()).filter(([n,i])=>e(i,n)).length:r.size)},exports.createEntriesSelector=function(t){return g(t,e=>Array.from(e.entries()))},exports.createFilterSelector=function(t,e){return g(t,r=>Array.from(r.entries()).filter(([n,i])=>e(i,n)).map(([n,i])=>i))},exports.createFindSelector=function(t,e){return g(t,r=>{for(const[n,i]of r.entries())if(e(i,n))return i})},exports.createItemSelector=function(t,e){return g(t,r=>r.get(e))},exports.createItemsSelector=function(t){return g(t,e=>Array.from(e.values()))},exports.createKeysSelector=function(t){return g(t,e=>Array.from(e.keys()))},exports.createMapSelector=function(t,e){return g(t,r=>Array.from(r.entries()).map(([n,i])=>e(i,n)))},exports.createOptimizedSelector=function(t,e){return t.$.pipe(y.map(e),y.distinctUntilChanged(x),y.share({resetOnRefCountZero:!0,resetOnError:!1,resetOnComplete:!1}))},exports.createSelector=B,exports.createSortSelector=function(t,e){return g(t,r=>Array.from(r.values()).sort(e))},exports.filterArray=Z,exports.filterArrayItems=R,exports.filterMap=K,exports.filterMapItems=I,exports.getFieldValue=W,exports.isArray=j,exports.isDate=S,exports.isIterable=function(t){return t!=null&&typeof t=="object"&&Symbol.iterator in Object(t)&&typeof t[Symbol.iterator]=="function"},exports.isMap=M,exports.isNil=q,exports.isNumber=C,exports.isPlainObject=function(t){if(t===null||typeof t!="object")return!1;const e=Object.getPrototypeOf(t);return e===Object.prototype||e===null},exports.isSet=$,exports.isString=m,exports.select=V,exports.selectItem=function(t,e,r={required:!0}){return function(n,i,c){V(t,function(d){const h=e(this);return h?d.get(h):void 0},r)(n,i)}};
|
|
2
|
+
//# sourceMappingURL=selector-hook-Cok22ifx.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selector-hook-Cok22ifx.cjs","sources":["../src/store/filter-directive.ts","../src/store/selectors.ts","../src/store/selector-hook.ts"],"sourcesContent":["// src/store/filter-directive.ts\n\n/** Supported comparison operators with TypeScript literal types */\nexport type ComparisonOperator =\n\t| '=='\n\t| '!='\n\t| '>'\n\t| '<'\n\t| '>='\n\t| '<='\n\t| 'includes'\n\t| 'notIncludes'\n\t| 'startsWith'\n\t| 'endsWith'\n\t| 'in'\n\t| 'notIn'\n\t| 'any' // fuzzy search operator\n\n/**\n * Type-safe condition tuple\n */\nexport type ConditionTuple = [field: string, op: ComparisonOperator, expected: unknown, strict?: boolean]\n\n/**\n * Type-safe condition object\n */\nexport interface ConditionObject {\n\tkey: string | string[] // Array of keys applies OR logic across fields\n\toperator: ComparisonOperator\n\tvalue: unknown\n\tstrict?: boolean\n}\n\n/**\n * Unified query condition type\n */\nexport type QueryCondition = ConditionTuple | ConditionObject\n\n/**\n * Filter result with item and score\n */\nexport interface ScoredItem<T> {\n\titem: T\n\tscore: number\n}\n\n/**\n * Get a nested value from an object using a dot-separated path.\n * Checks explicitly for null/undefined so falsy values like 0 or false are preserved.\n */\nexport const getFieldValue = <T = any>(item: Record<string, any>, path: string): T => {\n\tif (!path) return item as unknown as T\n\n\tconst parts = path.split('.')\n\tlet value: any = item\n\n\tfor (const part of parts) {\n\t\tif (value == null) return undefined as unknown as T\n\t\tvalue = value[part]\n\t}\n\n\treturn value as T\n}\n\n/**\n * Compute the Levenshtein distance between two strings.\n */\nconst levenshtein = (a: string, b: string): number => {\n\tif (a === b) return 0\n\n\tconst matrix: number[][] = Array(b.length + 1)\n\t\t.fill(null)\n\t\t.map((_, i) => [i])\n\n\t// initialize the first row\n\tfor (let j = 0; j <= a.length; j++) {\n\t\tmatrix[0][j] = j\n\t}\n\n\tfor (let i = 1; i <= b.length; i++) {\n\t\tfor (let j = 1; j <= a.length; j++) {\n\t\t\tif (b.charAt(i - 1) === a.charAt(j - 1)) {\n\t\t\t\tmatrix[i][j] = matrix[i - 1][j - 1]\n\t\t\t} else {\n\t\t\t\tmatrix[i][j] = Math.min(\n\t\t\t\t\tmatrix[i - 1][j] + 1, // deletion\n\t\t\t\t\tmatrix[i][j - 1] + 1, // insertion\n\t\t\t\t\tmatrix[i - 1][j - 1] + 1, // substitution\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t}\n\treturn matrix[b.length][a.length]\n}\n\n/**\n * Check if string `sub` is a subsequence of string `str`.\n * All characters in `sub` must appear in order in `str` (they need not be contiguous).\n */\nconst isSubsequence = (sub: string, str: string): boolean => {\n\tif (!sub) return true\n\tif (!str) return false\n\n\tlet i = 0,\n\t\tj = 0\n\twhile (i < sub.length && j < str.length) {\n\t\tif (sub[i].toLowerCase() === str[j].toLowerCase()) i++\n\t\tj++\n\t}\n\treturn i === sub.length\n}\n\n/**\n * Check if every character (with frequency) in the query exists in the target.\n * For example, \"aovc\" matches \"avocados\".\n */\nconst anagramMatch = (query: string, target: string): boolean => {\n\tif (!query) return true\n\tif (!target) return false\n\n\tconst countChars = (s: string): Record<string, number> =>\n\t\ts\n\t\t\t.toLowerCase()\n\t\t\t.split('')\n\t\t\t.reduce(\n\t\t\t\t(acc, char) => {\n\t\t\t\t\tacc[char] = (acc[char] || 0) + 1\n\t\t\t\t\treturn acc\n\t\t\t\t},\n\t\t\t\t{} as Record<string, number>,\n\t\t\t)\n\n\tconst queryCount = countChars(query)\n\tconst targetCount = countChars(target)\n\treturn Object.keys(queryCount).every(char => (targetCount[char] || 0) >= queryCount[char])\n}\n\n/**\n * Generate bigrams for a string.\n */\nconst getBigrams = (s: string): string[] => {\n\tif (!s || s.length < 2) return []\n\n\tconst bigrams: string[] = []\n\tfor (let i = 0; i < s.length - 1; i++) {\n\t\tbigrams.push(s.substring(i, i + 2).toLowerCase())\n\t}\n\treturn bigrams\n}\n\n/**\n * Compute Dice's coefficient for two strings based on bigrams.\n * Returns a value between 0 (no similarity) and 1 (perfect match).\n */\nconst diceCoefficient = (s1: string, s2: string): number => {\n\tif (!s1 || !s2 || s1.length < 2 || s2.length < 2) return 0\n\n\tconst bigrams1 = getBigrams(s1)\n\tconst bigrams2 = getBigrams(s2)\n\n\tif (bigrams1.length === 0 || bigrams2.length === 0) return 0\n\n\tlet intersection = 0\n\tconst used = new Array(bigrams2.length).fill(false)\n\n\tfor (const bigram of bigrams1) {\n\t\tfor (let i = 0; i < bigrams2.length; i++) {\n\t\t\tif (!used[i] && bigrams2[i] === bigram) {\n\t\t\t\tintersection++\n\t\t\t\tused[i] = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\n\treturn (2 * intersection) / (bigrams1.length + bigrams2.length)\n}\n\n/**\n * Compute a fuzzy similarity score between two strings.\n * The score is computed by taking the maximum of several methods:\n * - Direct substring match (score 1)\n * - Subsequence check (score 0.8)\n * - Anagram subset match (score 0.7)\n * - Dice coefficient\n * - Normalized Levenshtein similarity\n */\nconst computeFuzzyScore = (actual: string, expected: string): number => {\n\tif (!actual || !expected) return 0\n\n\tconst a = actual.toLowerCase().trim()\n\tconst b = expected.toLowerCase().trim()\n\n\tif (a === b) return 1\n\n\tconst substringScore = a.includes(b) ? 1 : 0\n\tconst subsequenceScore = isSubsequence(b, a) ? 0.8 : 0\n\tconst anagramScore = anagramMatch(b, a) ? 0.7 : 0\n\tconst diceScore = diceCoefficient(a, b)\n\n\tconst maxLen = Math.max(a.length, b.length)\n\tconst levenshteinScore = maxLen ? 1 - levenshtein(a, b) / maxLen : 0\n\n\treturn Math.max(substringScore, subsequenceScore, anagramScore, diceScore, levenshteinScore)\n}\n\n/**\n * Safely coerce value to string if possible, or return empty string\n */\nconst safeString = (value: unknown): string => {\n\tif (value == null) return ''\n\treturn String(value)\n}\n\n/**\n * Apply a query condition to an item and return score\n */\nfunction applyQueryCondition<T extends Record<string, any>>(\n\titem: T,\n\tquery: QueryCondition,\n\tfuzzyThreshold: number = 0.3,\n): { valid: boolean; score: number } {\n\tlet field: string,\n\t\top: ComparisonOperator,\n\t\texpected: unknown,\n\t\tstrict = false\n\n\tif (Array.isArray(query)) {\n\t\t;[field, op, expected, strict = false] = query\n\t} else {\n\t\t// Handle array of keys (OR logic)\n\t\tif (Array.isArray(query.key)) {\n\t\t\tconst results = query.key.map(k =>\n\t\t\t\tapplyQueryCondition(item, { ...query, key: k }, fuzzyThreshold)\n\t\t\t)\n\t\t\t// Return best valid result, or invalid if none valid\n\t\t\treturn results.reduce(\n\t\t\t\t(best, curr) => (curr.valid ? (curr.score > best.score ? curr : best) : best),\n\t\t\t\t{ valid: false, score: 0 }\n\t\t\t)\n\t\t}\n\n\t\tfield = query.key\n\t\top = query.operator\n\t\texpected = query.value\n\t\tstrict = query.strict || false\n\t}\n\n\t// Skip empty filters for non-strict queries\n\tif (!strict && (expected === '' || expected == null || (isArray(expected) && expected.length === 0))) {\n\t\treturn { valid: true, score: 1 }\n\t}\n\n\tconst actual = getFieldValue(item, field)\n\n\t// FIXED: Properly handle strict mode\n\tif (strict) {\n\t\t// For strict mode, use exact equality comparison for all operators except 'any'\n\t\tif (op === 'any') {\n\t\t\t// Fuzzy search still applies with strict mode\n\t\t\tif (typeof actual !== 'string' || typeof expected !== 'string') {\n\t\t\t\treturn { valid: false, score: 0 }\n\t\t\t}\n\n\t\t\tconst score = computeFuzzyScore(actual, expected)\n\t\t\treturn {\n\t\t\t\tvalid: score >= fuzzyThreshold,\n\t\t\t\tscore: score >= fuzzyThreshold ? score : 0,\n\t\t\t}\n\t\t} else {\n\t\t\t// For all other operators in strict mode,\n\t\t\t// delegate to compareValues function but return precise scores\n\t\t\tconst matches = compareValues(op, actual, expected)\n\t\t\treturn {\n\t\t\t\tvalid: matches,\n\t\t\t\tscore: matches ? 1 : 0,\n\t\t\t}\n\t\t}\n\t} else if (op === 'any') {\n\t\t// Fuzzy search requires both values to be strings\n\t\tif (typeof actual !== 'string' || typeof expected !== 'string') {\n\t\t\treturn { valid: false, score: 0 }\n\t\t}\n\n\t\tconst score = computeFuzzyScore(actual, expected)\n\t\tif (score < fuzzyThreshold) {\n\t\t\treturn { valid: false, score: 0 }\n\t\t}\n\n\t\treturn { valid: true, score }\n\t} else {\n\t\t// For non-fuzzy operators, check condition\n\t\tconst matches = compareValues(op, actual, expected)\n\t\treturn {\n\t\t\tvalid: matches,\n\t\t\tscore: matches ? 1 : 0,\n\t\t}\n\t}\n}\n\n/**\n * Filter a Map of items given an array of query conditions.\n * For each query condition:\n * - If the expected value is empty/null/undefined, it is treated as a match.\n * - For non-fuzzy operators, the condition must strictly match.\n * - For the \"any\" operator, a fuzzy similarity score is computed.\n * Items with a fuzzy score below a given threshold (e.g., 0.3) are excluded.\n *\n * The overall item score is the average of the scores from all conditions.\n * The results are sorted in descending order of relevance.\n *\n * @param items - A Map containing items to filter.\n * @param queries - An array of query conditions to apply.\n * @param fuzzyThreshold - Minimum score required for fuzzy matches (default: 0.3)\n * @returns An array of items that match all query conditions, sorted by relevance.\n */\nexport function filterMapItems<T extends Record<string, any>>(\n\titems: Map<string, T>,\n\tqueries: QueryCondition[] = [],\n\tfuzzyThreshold: number = 0.3,\n): T[] {\n\t// If no queries, return all items unsorted\n\tif (!queries.length) {\n\t\treturn Array.from(items.values())\n\t}\n\n\t// Score and filter each item\n\tconst scoredItems: ScoredItem<T>[] = []\n\n\tfor (const [_, item] of items.entries()) {\n\t\tlet totalScore = 0\n\t\tlet matchCount = 0\n\t\tlet valid = true\n\n\t\tfor (const query of queries) {\n\t\t\tconst result = applyQueryCondition(item, query, fuzzyThreshold)\n\n\t\t\tif (!result.valid) {\n\t\t\t\tvalid = false\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\ttotalScore += result.score\n\t\t\tmatchCount++\n\t\t}\n\n\t\tif (valid) {\n\t\t\tscoredItems.push({\n\t\t\t\titem,\n\t\t\t\tscore: matchCount > 0 ? totalScore / matchCount : 1,\n\t\t\t})\n\t\t}\n\t}\n\n\t// Sort by descending score\n\tscoredItems.sort((a, b) => b.score - a.score)\n\n\treturn scoredItems.map(x => x.item)\n}\n\n/**\n * Filter an array of items using query conditions\n */\nexport function filterArrayItems<T extends Record<string, any>>(\n\titems: T[],\n\tqueries: QueryCondition[] = [],\n\tfuzzyThreshold: number = 0.3,\n): T[] {\n\t// Create temporary map with numeric indices as keys\n\tconst map = new Map<string, T>()\n\titems.forEach((item, index) => map.set(String(index), item))\n\n\treturn filterMapItems(map, queries, fuzzyThreshold)\n}\n\n// Improved type guards for filter-directive.ts\n\n/**\n * Type guard for checking if a value is an array with better type inference\n * @param value Value to check\n * @returns True if the value is an array\n */\nexport function isArray<T = unknown>(value: unknown): value is Array<T> {\n\treturn Array.isArray(value)\n}\n\n/**\n * Type guard for checking if a value is a string\n * @param value Value to check\n * @returns True if the value is a string\n */\nexport function isString(value: unknown): value is string {\n\treturn typeof value === 'string'\n}\n\n/**\n * Type guard for checking if a value is a number\n * @param value Value to check\n * @returns True if the value is a number and not NaN\n */\nexport function isNumber(value: unknown): value is number {\n\treturn typeof value === 'number' && !isNaN(value)\n}\n\n/**\n * Type guard for checking if a value is a date\n * @param value Value to check\n * @returns True if the value is a valid Date object\n */\nexport function isDate(value: unknown): value is Date {\n\treturn value instanceof Date && !isNaN(value.getTime())\n}\n\n/**\n * Type guard for checking if a value is an iterable collection\n * @param value Value to check\n * @returns True if the value implements the iterable protocol\n */\nexport function isIterable<T = unknown>(value: unknown): value is Iterable<T> {\n\t// Must be non-null and of type 'object'\n\tif (value == null || typeof value !== 'object') {\n\t\treturn false\n\t}\n\n\t// Check for Symbol.iterator method\n\treturn Symbol.iterator in Object(value) && typeof (value as any)[Symbol.iterator] === 'function'\n}\n\n/**\n * Type guard for checking if a value is a Map\n * @param value Value to check\n * @returns True if the value is a Map\n */\nexport function isMap<K = unknown, V = unknown>(value: unknown): value is Map<K, V> {\n\treturn value instanceof Map\n}\n\n/**\n * Type guard for checking if a value is a Set\n * @param value Value to check\n * @returns True if the value is a Set\n */\nexport function isSet<T = unknown>(value: unknown): value is Set<T> {\n\treturn value instanceof Set\n}\n\n/**\n * Type guard for checking if a value is a plain object (not an array, Map, etc.)\n * @param value Value to check\n * @returns True if the value is a plain object\n */\nexport function isPlainObject(value: unknown): value is Record<string, unknown> {\n\tif (value === null || typeof value !== 'object') {\n\t\treturn false\n\t}\n\n\tconst proto = Object.getPrototypeOf(value)\n\treturn proto === Object.prototype || proto === null\n}\n\n/**\n * Type guard for checking if a value is undefined or null\n * @param value Value to check\n * @returns True if the value is undefined or null\n */\nexport function isNil(value: unknown): value is undefined | null {\n\treturn value === undefined || value === null\n}\n\n/**\n * Improved type-safe comparison function that uses appropriate type guards\n * @param op Comparison operator\n * @param actual Actual value\n * @param expected Expected value\n * @returns Result of the comparison\n */\nexport function compareValues(op: ComparisonOperator, actual: unknown, expected: unknown): boolean {\n\t// Handle null/undefined cases\n\tif (isNil(actual) && isNil(expected)) return true\n\tif (isNil(actual) || isNil(expected)) {\n\t\t// For equality operators, null == null but null != non-null\n\t\tif (op === '==') return actual === expected\n\t\tif (op === '!=') return actual !== expected\n\t\t// Other operators should return false for null/undefined values\n\t\treturn false\n\t}\n\n\tswitch (op) {\n\t\tcase '==':\n\t\t\treturn actual === expected\n\t\tcase '!=':\n\t\t\treturn actual !== expected\n\t\tcase '>':\n\t\t\tif (isNumber(actual) && isNumber(expected)) {\n\t\t\t\treturn actual > expected\n\t\t\t}\n\t\t\tif (isDate(actual) && isDate(expected)) {\n\t\t\t\treturn actual.getTime() > expected.getTime()\n\t\t\t}\n\t\t\tif (isString(actual) && isString(expected)) {\n\t\t\t\treturn actual.localeCompare(expected) > 0\n\t\t\t}\n\t\t\treturn false\n\t\tcase '<':\n\t\t\tif (isNumber(actual) && isNumber(expected)) {\n\t\t\t\treturn actual < expected\n\t\t\t}\n\t\t\tif (isDate(actual) && isDate(expected)) {\n\t\t\t\treturn actual.getTime() < expected.getTime()\n\t\t\t}\n\t\t\tif (isString(actual) && isString(expected)) {\n\t\t\t\treturn actual.localeCompare(expected) < 0\n\t\t\t}\n\t\t\treturn false\n\t\tcase '>=':\n\t\t\tif (isNumber(actual) && isNumber(expected)) {\n\t\t\t\treturn actual >= expected\n\t\t\t}\n\t\t\tif (isDate(actual) && isDate(expected)) {\n\t\t\t\treturn actual.getTime() >= expected.getTime()\n\t\t\t}\n\t\t\tif (isString(actual) && isString(expected)) {\n\t\t\t\treturn actual.localeCompare(expected) >= 0\n\t\t\t}\n\t\t\treturn false\n\t\tcase '<=':\n\t\t\tif (isNumber(actual) && isNumber(expected)) {\n\t\t\t\treturn actual <= expected\n\t\t\t}\n\t\t\tif (isDate(actual) && isDate(expected)) {\n\t\t\t\treturn actual.getTime() <= expected.getTime()\n\t\t\t}\n\t\t\tif (isString(actual) && isString(expected)) {\n\t\t\t\treturn actual.localeCompare(expected) <= 0\n\t\t\t}\n\t\t\treturn false\n\t\tcase 'includes': {\n\t\t\tif (isString(actual)) {\n\t\t\t\treturn actual.toLowerCase().includes(safeString(expected).toLowerCase())\n\t\t\t}\n\t\t\tif (isArray(actual)) {\n\t\t\t\treturn actual.includes(expected as any)\n\t\t\t}\n\t\t\tif (isSet(actual)) {\n\t\t\t\treturn actual.has(expected as any)\n\t\t\t}\n\t\t\tif (isMap(actual)) {\n\t\t\t\treturn Array.from(actual.values()).includes(expected as any)\n\t\t\t}\n\t\t\treturn false\n\t\t}\n\t\tcase 'notIncludes': {\n\t\t\tif (isString(actual)) {\n\t\t\t\treturn !actual.toLowerCase().includes(safeString(expected).toLowerCase())\n\t\t\t}\n\t\t\tif (isArray(actual)) {\n\t\t\t\treturn !actual.includes(expected as any)\n\t\t\t}\n\t\t\tif (isSet(actual)) {\n\t\t\t\treturn !actual.has(expected as any)\n\t\t\t}\n\t\t\tif (isMap(actual)) {\n\t\t\t\treturn !Array.from(actual.values()).includes(expected as any)\n\t\t\t}\n\t\t\treturn true\n\t\t}\n\t\tcase 'startsWith': {\n\t\t\tif (isString(actual) && isString(expected)) {\n\t\t\t\treturn actual.toLowerCase().startsWith(expected.toLowerCase())\n\t\t\t}\n\t\t\treturn false\n\t\t}\n\t\tcase 'endsWith': {\n\t\t\tif (isString(actual) && isString(expected)) {\n\t\t\t\treturn actual.toLowerCase().endsWith(expected.toLowerCase())\n\t\t\t}\n\t\t\treturn false\n\t\t}\n\t\tcase 'in': {\n\t\t\tif (isArray(expected)) {\n\t\t\t\treturn expected.includes(actual as any)\n\t\t\t}\n\t\t\tif (isSet(expected)) {\n\t\t\t\treturn expected.has(actual as any)\n\t\t\t}\n\t\t\tif (isMap(expected)) {\n\t\t\t\treturn expected.has(actual as any) || Array.from(expected.values()).includes(actual as any)\n\t\t\t}\n\t\t\treturn false\n\t\t}\n\t\tcase 'notIn': {\n\t\t\tif (isArray(expected)) {\n\t\t\t\treturn !expected.includes(actual as any)\n\t\t\t}\n\t\t\tif (isSet(expected)) {\n\t\t\t\treturn !expected.has(actual as any)\n\t\t\t}\n\t\t\tif (isMap(expected)) {\n\t\t\t\treturn !expected.has(actual as any) && !Array.from(expected.values()).includes(actual as any)\n\t\t\t}\n\t\t\treturn true\n\t\t}\n\t\tdefault: {\n\t\t\tconsole.warn(`Operator \"${op}\" is not supported in comparison.`)\n\t\t\treturn false\n\t\t}\n\t}\n}\n\n// Export a simpler alias for filterMapItems\nexport const filterMap = filterMapItems\n\n// Export an alias for filterArrayItems\nexport const filterArray = filterArrayItems\n","// src/store/selectors.ts\nimport { BehaviorSubject, Observable, combineLatest, distinctUntilChanged, map, share, shareReplay } from 'rxjs'\nimport { ICollectionStore, IStore, StoreError } from './types'\n\n/**\n * Deep equality comparison for maps and complex objects\n * More efficient than JSON.stringify for large objects\n */\nfunction deepEqual(a: unknown, b: unknown): boolean {\n\tif (a === b) return true\n\n\tif (a instanceof Map && b instanceof Map) {\n\t\tif (a.size !== b.size) return false\n\t\tfor (const [key, value] of a) {\n\t\t\tif (!b.has(key) || !deepEqual(value, b.get(key))) return false\n\t\t}\n\t\treturn true\n\t}\n\n\tif (a instanceof Set && b instanceof Set) {\n\t\tif (a.size !== b.size) return false\n\t\tfor (const item of a) {\n\t\t\tif (!b.has(item)) return false\n\t\t}\n\t\treturn true\n\t}\n\n\tif (typeof a === 'object' && a !== null && typeof b === 'object' && b !== null) {\n\t\tconst keysA = Object.keys(a)\n\t\tconst keysB = Object.keys(b)\n\n\t\tif (keysA.length !== keysB.length) return false\n\n\t\tfor (const key of keysA) {\n\t\t\t// @ts-ignore: Index signature\n\t\t\tif (!deepEqual(a[key], b[key])) return false\n\t\t}\n\n\t\treturn true\n\t}\n\n\treturn false\n}\n\n/**\n * Creates a selector that derives a value from store state\n *\n * @param store The store to observe\n * @param selectorFn Function that transforms the state\n * @returns An observable of the selected state that only emits when the derived value changes\n */\nexport function createSelector<T, R>(store: IStore<T>, selectorFn: (state: T) => R): Observable<R> {\n\treturn store.$.pipe(map(selectorFn), distinctUntilChanged<R>(deepEqual), shareReplay(1))\n}\n\n/**\n * Creates a selector for collection stores that derives a value from the collection\n *\n * @param store The collection store to observe\n * @param selectorFn Function that transforms the collection\n * @returns An observable of the selected state that only emits when the derived value changes\n */\nexport function createCollectionSelector<T, R>(\n\tstore: ICollectionStore<T>,\n\tselectorFn: (state: Map<string, T>) => R,\n): Observable<R> {\n\treturn store.$.pipe(map(selectorFn), distinctUntilChanged<R>(deepEqual), shareReplay(1))\n}\n\n/**\n * Creates a selector that returns all items from a collection as an array\n *\n * @param store The collection store\n * @returns An observable of all items as an array\n */\nexport function createItemsSelector<T>(store: ICollectionStore<T>): Observable<T[]> {\n\treturn createCollectionSelector(store, collection => Array.from(collection.values()))\n}\n\n/**\n * Creates a selector that retrieves a single item from a collection\n *\n * @param store The collection store\n * @param itemKey The key of the item to select\n * @returns An observable of the selected item that emits when the item changes\n */\nexport function createItemSelector<T>(store: ICollectionStore<T>, itemKey: string): Observable<T | undefined> {\n\treturn createCollectionSelector(store, collection => collection.get(itemKey))\n}\n\n/**\n * Creates a selector that returns all keys from a collection\n */\nexport function createKeysSelector<T>(store: ICollectionStore<T>): Observable<string[]> {\n\treturn createCollectionSelector(store, collection => Array.from(collection.keys()))\n}\n\n/**\n * Creates a selector that returns entries (key-value pairs) from a collection\n */\nexport function createEntriesSelector<T>(store: ICollectionStore<T>): Observable<[string, T][]> {\n\treturn createCollectionSelector(store, collection => Array.from(collection.entries()))\n}\n\n/**\n * Creates a selector that sorts collection items\n */\nexport function createSortSelector<T>(store: ICollectionStore<T>, compareFn: (a: T, b: T) => number): Observable<T[]> {\n\treturn createCollectionSelector(store, collection => {\n\t\treturn Array.from(collection.values()).sort(compareFn)\n\t})\n}\n\n/**\n * Creates a selector that finds the first item matching a predicate\n */\nexport function createFindSelector<T>(\n\tstore: ICollectionStore<T>,\n\tpredicate: (item: T, key: string) => boolean,\n): Observable<T | undefined> {\n\treturn createCollectionSelector(store, collection => {\n\t\tfor (const [key, item] of collection.entries()) {\n\t\t\tif (predicate(item, key)) {\n\t\t\t\treturn item\n\t\t\t}\n\t\t}\n\t\treturn undefined\n\t})\n}\n\n/**\n * Creates a selector that filters items from a collection - OPTIMIZED\n *\n * @param store The collection store\n * @param filterFn Function that returns true for items to include\n * @returns An observable of filtered items as an array\n */\nexport function createFilterSelector<T>(\n\tstore: ICollectionStore<T>,\n\tfilterFn: (item: T, key: string) => boolean,\n): Observable<T[]> {\n\treturn createCollectionSelector(store, collection =>\n\t\tArray.from(collection.entries())\n\t\t\t.filter(([key, item]) => filterFn(item, key))\n\t\t\t.map(([_, item]) => item),\n\t)\n}\n\n/**\n * Creates a selector that maps collection values through a transform function - OPTIMIZED\n */\nexport function createMapSelector<T, R>(\n\tstore: ICollectionStore<T>,\n\tmapFn: (item: T, key: string) => R,\n): Observable<R[]> {\n\treturn createCollectionSelector(store, collection =>\n\t\tArray.from(collection.entries()).map(([key, item]) => mapFn(item, key)),\n\t)\n}\n\n/**\n * Creates a selector that counts items in a collection, optionally filtered - OPTIMIZED\n *\n * @param store The collection store\n * @param filterFn Optional function to filter which items to count\n * @returns An observable of the count\n */\nexport function createCountSelector<T>(\n\tstore: ICollectionStore<T>,\n\tfilterFn?: (item: T, key: string) => boolean,\n): Observable<number> {\n\treturn createCollectionSelector(store, collection => {\n\t\tif (!filterFn) return collection.size\n\n\t\treturn Array.from(collection.entries()).filter(([key, item]) => filterFn(item, key)).length\n\t})\n}\n\n/**\n * Optimized RxJS Pipeline - use share with reset on refCount zero for better memory management\n * in scenarios where selector subscriptions come and go\n *\n * @param store The store to observe\n * @param selectorFn Function that transforms the state\n * @returns An observable of the selected state with improved memory management\n */\nexport function createOptimizedSelector<T, R>(store: IStore<T>, selectorFn: (state: T) => R): Observable<R> {\n\treturn store.$.pipe(\n\t\tmap(selectorFn),\n\t\tdistinctUntilChanged<R>(deepEqual),\n\t\tshare({\n\t\t\tresetOnRefCountZero: true,\n\t\t\tresetOnError: false,\n\t\t\tresetOnComplete: false,\n\t\t}),\n\t)\n}\n\n/**\n * Creates a compound selector from multiple stores\n *\n * This function combines data from multiple stores to create a derived\n * state that's compatible with the @select decorator.\n *\n * @param stores Array of stores to derive state from\n * @param selectorFns Selector functions for each store\n * @param combinerFn Function that combines the selected values\n * @returns A store-compatible object to use with @select\n */\nexport function createCompoundSelector<R>(\n\tstores: Array<IStore<any> | ICollectionStore<any>>,\n\tselectorFns: Array<(state: any) => any>,\n\tcombinerFn: (...values: any[]) => R,\n): IStore<R> {\n\t// Calculate initial value\n\tconst initialValues = stores.map((store, index) => selectorFns[index](store.value))\n\tconst initialValue = combinerFn(...initialValues)\n\n\t// Create a store with the initial value\n\tconst result: IStore<R> = {\n\t\t$: new BehaviorSubject<R>(initialValue),\n\t\terror$: new BehaviorSubject<StoreError | null>(null),\n\t\tready: true,\n\t\tdefaultValue: initialValue,\n\n\t\tget value(): R {\n\t\t\treturn this.$.getValue()\n\t\t},\n\n\t\t// These methods are no-ops for read-only stores\n\t\tset(_value: Partial<R>, _merge?: boolean): void {\n\t\t\tconsole.warn('Compound selector store is read-only')\n\t\t},\n\n\t\tclear(): void {\n\t\t\tthis.$.next(this.defaultValue)\n\t\t},\n\n\t\treplace(_newValue: R): void {\n\t\t\tconsole.warn('Compound selector store is read-only')\n\t\t},\n\n\t\tdelete<K extends keyof R>(_key: K): void {\n\t\t\tconsole.warn('Compound selector store is read-only')\n\t\t},\n\n\t\tdestroy(): void {\n\t\t\tthis.$.complete()\n\t\t\tthis.error$.complete()\n\t\t},\n\t}\n\n\t// Set up the reactivity by subscribing to all source stores\n\tconst observables = stores.map((store, _) => store.$)\n\n\t// Create a subscription that updates the result whenever any source changes\n\tconst subscription = combineLatest(observables).subscribe({\n\t\tnext: storeValues => {\n\t\t\ttry {\n\t\t\t\t// Apply selectors to each store value\n\t\t\t\tconst selectedValues = storeValues.map((value, index) => selectorFns[index](value))\n\n\t\t\t\t// Apply combiner function\n\t\t\t\tconst newValue = combinerFn(...selectedValues)\n\n\t\t\t\t// Update the BehaviorSubject\n\t\t\t\tresult.$.next(newValue)\n\t\t\t} catch (err) {\n\t\t\t\tconst error = new StoreError('Error in compound selector', err)\n\t\t\t\tresult.error$.next(error)\n\t\t\t\tconsole.error(error)\n\t\t\t}\n\t\t},\n\t\terror: err => {\n\t\t\tconst error = new StoreError('Error in store subscription', err)\n\t\t\tresult.error$.next(error)\n\t\t\tconsole.error(error)\n\t\t},\n\t})\n\n\t// Ensure the subscription is cleaned up when the store is destroyed\n\tconst originalDestroy = result.destroy\n\tresult.destroy = function () {\n\t\tsubscription.unsubscribe()\n\t\toriginalDestroy.call(this)\n\t}\n\n\treturn result\n}\n","// src/store/selector-hook.ts - Improved memory management\nimport { property as litProperty } from 'lit/decorators.js'\nimport { Observable, Subject, Subscription } from 'rxjs'\nimport { takeUntil } from 'rxjs/operators'\nimport { createCollectionSelector, createSelector } from './selectors'\nimport { ICollectionStore, IStore } from './types'\n\n/**\n * Symbol used for storing cleanup resources\n * Using a Symbol prevents name collisions with component properties\n */\nconst CLEANUP_SUBJECT = Symbol('selectorCleanup')\nconst SUBSCRIPTIONS = Symbol('selectorSubscriptions')\nconst INITIALIZED = Symbol('selectorInitialized')\nconst CONNECTED_CALLED = Symbol('connectedCallbackCalled')\n\n/**\n * Component lifecycle interface\n */\ninterface ComponentWithLifecycle {\n\t// Lifecycle hooks\n\tisConnected: boolean\n\tdisconnectedCallback?: () => void\n\tconnectedCallback?: () => void\n\trequestUpdate?: () => void\n\n\t// Internal properties using symbols to avoid name collisions\n\t[CLEANUP_SUBJECT]?: Subject<void>\n\t[SUBSCRIPTIONS]?: Map<string, Subscription>\n\t[INITIALIZED]?: Set<string>\n\t[CONNECTED_CALLED]?: boolean\n\n\t// Value storage\n\t[key: string]: any\n}\n\n/**\n * Property descriptor interface\n */\ntype PropertyDescriptor<T> = {\n\tget?: () => T\n\tset?: (value: T) => void\n\tvalue?: T\n\tconfigurable?: boolean\n\tenumerable?: boolean\n\twritable?: boolean\n}\n\n/**\n * Options for selecting from a store\n */\ninterface SelectOptions {\n\t/** If true, will wait for selector to emit a value (including null) before calling connectedCallback. Only undefined is considered \"not ready\". Default is true. */\n\trequired?: boolean\n\n\t/** If true, will only update the component and not set the property value */\n\tupdateOnly?: boolean\n\n\t/** If true, will use structuredClone to deeply clone values (prevents mutations) */\n\tdeepClone?: boolean\n\n\t/** Custom equality function to determine when to update */\n\tequals?: (a: any, b: any) => boolean\n\n\t/** Debug mode - logs selector activity */\n\tdebug?: boolean\n}\n\n/**\n * Type guard to check if a store is a collection store\n */\nfunction isCollectionStore<T>(store: IStore<any> | ICollectionStore<T>): store is ICollectionStore<T> {\n\treturn 'set' in store && typeof store.set === 'function' && store.value instanceof Map\n}\n\n/**\n * Ensures the cleanup resources exist on the component\n */\nfunction ensureCleanupResources(component: ComponentWithLifecycle): void {\n\tif (!component[CLEANUP_SUBJECT] || component[CLEANUP_SUBJECT].closed) {\n\t\tcomponent[CLEANUP_SUBJECT] = new Subject<void>()\n\t}\n\n\tif (!component[SUBSCRIPTIONS]) {\n\t\tcomponent[SUBSCRIPTIONS] = new Map()\n\t}\n\n\tif (!component[INITIALIZED]) {\n\t\tcomponent[INITIALIZED] = new Set()\n\t}\n}\n\n/**\n * Cleans up all selector resources\n */\nfunction cleanupSelectorResources(component: ComponentWithLifecycle): void {\n\tif (component[CLEANUP_SUBJECT]) {\n\t\tcomponent[CLEANUP_SUBJECT].next()\n\t\tcomponent[CLEANUP_SUBJECT].complete()\n\t\tcomponent[CLEANUP_SUBJECT] = undefined\n\t}\n\n\tif (component[SUBSCRIPTIONS]) {\n\t\tcomponent[SUBSCRIPTIONS].forEach(sub => sub.unsubscribe())\n\t\tcomponent[SUBSCRIPTIONS].clear()\n\t\tcomponent[SUBSCRIPTIONS] = undefined\n\t}\n\n\tif (component[INITIALIZED]) {\n\t\tcomponent[INITIALIZED].clear()\n\t\tcomponent[INITIALIZED] = undefined\n\t}\n\n\t// Reset the connected flag when cleaning up\n\tcomponent[CONNECTED_CALLED] = undefined\n}\n\n/**\n * Selector decorator that connects a component property to a store selector\n * with improved memory management\n *\n * @param store The store to select from\n * @param selectorFn Optional function to transform the store state\n * @param options Additional options for the selector\n */\nexport function select<T, R>(\n\tstore: IStore<T> | ICollectionStore<T>,\n\tselectorFn: (state: any) => R = (state: R) => state,\n\toptions: SelectOptions = { required: true },\n) {\n\treturn function (proto: Record<string, any>, propName: string, _descriptor?: PropertyDescriptor<R>) {\n\t\t// Register as a Lit property\n\t\tlitProperty({ attribute: false, type: Object })(proto, propName)\n\n\t\t// Store original lifecycle methods\n\t\tconst originalConnectedCallback = proto.connectedCallback\n\t\tconst originalDisconnectedCallback = proto.disconnectedCallback\n\n\t\t// Override connectedCallback to set up subscription\n\t\tproto.connectedCallback = function (this: ComponentWithLifecycle) {\n\t\t\t// Initialize cleanup resources\n\t\t\tensureCleanupResources(this)\n\n\t\t\t// Create the appropriate selector\n\t\t\tconst selector: Observable<R> = isCollectionStore(store)\n\t\t\t\t? createCollectionSelector(store, selectorFn)\n\t\t\t\t: createSelector(store as IStore<T>, selectorFn)\n\n\t\t\t// Call original connectedCallback immediately if not waiting for data\n\t\t\tif (!options.required && !this[CONNECTED_CALLED]) {\n\t\t\t\toriginalConnectedCallback?.call(this)\n\t\t\t\tthis[CONNECTED_CALLED] = true\n\t\t\t}\n\n\t\t\t// Clean up any existing subscription\n\t\t\tif (this[SUBSCRIPTIONS]!.has(propName)) {\n\t\t\t\tthis[SUBSCRIPTIONS]!.get(propName)?.unsubscribe()\n\t\t\t\tthis[SUBSCRIPTIONS]!.delete(propName)\n\t\t\t}\n\n\t\t\t// Debug log if needed\n\t\t\tif (options.debug) {\n\t\t\t\tconsole.debug(`[select] Setting up subscription for ${propName}`)\n\t\t\t}\n\n\t\t\t// Create new subscription with better error handling\n\t\t\tconst subscription = selector.pipe(takeUntil(this[CLEANUP_SUBJECT]!)).subscribe({\n\t\t\t\tnext: (value: R) => {\n\t\t\t\t\t// Handle value updates\n\t\t\t\t\tconst newValue = options.deepClone ? structuredClone(value) : value\n\n\t\t\t\t\tif (options.debug) {\n\t\t\t\t\t\tconsole.debug(`[select] New value for ${propName}:`, newValue)\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!options.updateOnly) {\n\t\t\t\t\t\tthis[propName] = newValue\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.requestUpdate?.()\n\n\t\t\t\t\t// If required and not initialized, call connectedCallback when we get a value\n\t\t\t\t\t// Allow null values but not undefined (undefined means the selector hasn't emitted yet)\n\t\t\t\t\tif (options.required && !this[INITIALIZED]!.has(propName) && newValue !== undefined) {\n\t\t\t\t\t\tthis[INITIALIZED]!.add(propName)\n\t\t\t\t\t\t\n\t\t\t\t\t\t// Only call original connectedCallback once, regardless of how many selectors\n\t\t\t\t\t\tif (!this[CONNECTED_CALLED]) {\n\t\t\t\t\t\t\tif (options.debug) {\n\t\t\t\t\t\t\t\tconsole.debug(`[select] Calling delayed connectedCallback for ${propName}`)\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\toriginalConnectedCallback?.call(this)\n\t\t\t\t\t\t\tthis[CONNECTED_CALLED] = true\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\terror: (err: Error) => {\n\t\t\t\t\tconsole.error(`Error in selector subscription for ${propName}:`, err)\n\t\t\t\t\t// Resubscribe on error to prevent component from becoming unresponsive\n\t\t\t\t\tif (this.isConnected) {\n\t\t\t\t\t\t// Small delay to prevent immediate resubscription\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\tif (this.isConnected) {\n\t\t\t\t\t\t\t\tif (options.debug) {\n\t\t\t\t\t\t\t\t\tconsole.debug(`[select] Resubscribing after error for ${propName}`)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tthis.connectedCallback?.()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, 1000)\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t})\n\n\t\t\t// Store the subscription for cleanup\n\t\t\tthis[SUBSCRIPTIONS]!.set(propName, subscription)\n\t\t}\n\n\t\t// Override disconnectedCallback to clean up subscriptions\n\t\tproto.disconnectedCallback = function (this: ComponentWithLifecycle) {\n\t\t\t// Call original disconnectedCallback\n\t\t\toriginalDisconnectedCallback?.call(this)\n\n\t\t\t// Debug log if needed\n\t\t\tif (options.debug) {\n\t\t\t\tconsole.debug(`[select] Cleaning up resources in disconnectedCallback`)\n\t\t\t}\n\n\t\t\t// Clean up all subscription resources\n\t\t\tcleanupSelectorResources(this)\n\t\t}\n\t}\n}\n\n/**\n * Creates a selector decorator that selects a specific item from a collection store\n * with improved memory management\n *\n * @param store The collection store\n * @param keyGetter Function that returns the key to select\n * @param options Additional options\n */\nexport function selectItem<T>(\n\tstore: ICollectionStore<T>,\n\tkeyGetter: (component: any) => string,\n\toptions: SelectOptions = { required: true },\n) {\n\treturn function (proto: Record<string, any>, propName: string, _descriptor?: PropertyDescriptor<T | undefined>) {\n\t\tselect(\n\t\t\tstore,\n\t\t\tfunction (state) {\n\t\t\t\t// This will be evaluated during subscription, when 'this' is available\n\t\t\t\tconst itemKey = keyGetter(this)\n\t\t\t\treturn itemKey ? state.get(itemKey) : undefined\n\t\t\t},\n\t\t\toptions,\n\t\t)(proto, propName)\n\t}\n}\n"],"names":["getFieldValue","item","path","parts","split","value","part","getBigrams","s","length","bigrams","i","push","substring","toLowerCase","computeFuzzyScore","actual","expected","a","trim","b","substringScore","includes","subsequenceScore","sub","str","j","anagramScore","query","target","countChars","reduce","acc","char","queryCount","targetCount","Object","keys","every","diceScore","s1","s2","bigrams1","bigrams2","intersection","used","Array","fill","bigram","maxLen","Math","max","levenshteinScore","matrix","map","_","charAt","min","safeString","String","applyQueryCondition","fuzzyThreshold","field","op","strict","isArray","key","k","best","curr","valid","score","operator","matches","compareValues","filterMapItems","items","queries","from","values","scoredItems","entries","totalScore","matchCount","result","sort","x","filterArrayItems","Map","forEach","index","set","isString","isNumber","isNaN","isDate","Date","getTime","isMap","isSet","Set","isNil","localeCompare","has","startsWith","endsWith","filterMap","filterArray","deepEqual","size","get","keysA","keysB","createSelector","store","selectorFn","$","pipe","distinctUntilChanged","shareReplay","createCollectionSelector","CLEANUP_SUBJECT","Symbol","SUBSCRIPTIONS","INITIALIZED","CONNECTED_CALLED","select","state","options","required","proto","propName","_descriptor","litProperty","attribute","type","originalConnectedCallback","connectedCallback","originalDisconnectedCallback","disconnectedCallback","component","this","closed","Subject","selector","call","unsubscribe","delete","debug","subscription","takeUntil","subscribe","next","newValue","deepClone","structuredClone","updateOnly","requestUpdate","add","error","err","isConnected","setTimeout","complete","clear","stores","selectorFns","combinerFn","initialValues","initialValue","BehaviorSubject","error$","ready","defaultValue","getValue","_value","_merge","_newValue","_key","destroy","observables","combineLatest","storeValues","selectedValues","StoreError","originalDestroy","filterFn","collection","filter","predicate","itemKey","mapFn","share","resetOnRefCountZero","resetOnError","resetOnComplete","compareFn","iterator","getPrototypeOf","prototype","keyGetter"],"mappings":"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"}
|