@mhmo91/schmancy 0.3.1 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{animated-text-GWb1KFIg.js → animated-text-B2RjyIK5.js} +3 -3
- package/dist/{animated-text-GWb1KFIg.js.map → animated-text-B2RjyIK5.js.map} +1 -1
- package/dist/{animated-text-CwhCnj-Z.cjs → animated-text-DuL0BVFF.cjs} +2 -2
- package/dist/{animated-text-CwhCnj-Z.cjs.map → animated-text-DuL0BVFF.cjs.map} +1 -1
- package/dist/animated-text.cjs +1 -1
- package/dist/animated-text.js +1 -1
- package/dist/area.cjs +1 -1
- package/dist/{area.component-BArN-q7n.js → area.component-C4lraBSz.js} +3 -3
- package/dist/{area.component-BArN-q7n.js.map → area.component-C4lraBSz.js.map} +1 -1
- package/dist/{area.component-6ZFpx2Be.cjs → area.component-DYh2KKnh.cjs} +2 -2
- package/dist/{area.component-6ZFpx2Be.cjs.map → area.component-DYh2KKnh.cjs.map} +1 -1
- package/dist/area.js +1 -1
- package/dist/{autocomplete-CY5UhcZ0.js → autocomplete-BXf34fA-.js} +3 -3
- package/dist/{autocomplete-CY5UhcZ0.js.map → autocomplete-BXf34fA-.js.map} +1 -1
- package/dist/{autocomplete-Lrf6Xs9H.cjs → autocomplete-C2MgBZdi.cjs} +2 -2
- package/dist/{autocomplete-Lrf6Xs9H.cjs.map → autocomplete-C2MgBZdi.cjs.map} +1 -1
- package/dist/autocomplete.cjs +1 -1
- package/dist/autocomplete.js +1 -1
- package/dist/{avatar-DO2e262N.cjs → avatar-DVN44OzV.cjs} +2 -2
- package/dist/{avatar-DO2e262N.cjs.map → avatar-DVN44OzV.cjs.map} +1 -1
- package/dist/{avatar-BMCu6edd.js → avatar-DupGPy32.js} +43 -43
- package/dist/{avatar-BMCu6edd.js.map → avatar-DupGPy32.js.map} +1 -1
- package/dist/badge.cjs +1 -1
- package/dist/badge.js +1 -1
- package/dist/{boat-BB6LmYdx.js → boat-D6RMa9wL.js} +3 -3
- package/dist/{boat-BB6LmYdx.js.map → boat-D6RMa9wL.js.map} +1 -1
- package/dist/{boat-CJ9Tg8fB.cjs → boat-DeEs020x.cjs} +2 -2
- package/dist/{boat-CJ9Tg8fB.cjs.map → boat-DeEs020x.cjs.map} +1 -1
- package/dist/boat.cjs +1 -1
- package/dist/boat.js +1 -1
- package/dist/busy.cjs +1 -1
- package/dist/busy.js +1 -1
- package/dist/button.cjs +1 -1
- package/dist/button.js +1 -1
- package/dist/card.cjs +1 -1
- package/dist/card.js +1 -1
- package/dist/{checkbox-B7DRyBjt.cjs → checkbox-BSndX5zU.cjs} +2 -2
- package/dist/{checkbox-B7DRyBjt.cjs.map → checkbox-BSndX5zU.cjs.map} +1 -1
- package/dist/{checkbox-BuOkiA0j.js → checkbox-CZUwhaUm.js} +2 -2
- package/dist/{checkbox-BuOkiA0j.js.map → checkbox-CZUwhaUm.js.map} +1 -1
- package/dist/checkbox.cjs +1 -1
- package/dist/checkbox.js +1 -1
- package/dist/{chips-DyoQtkqC.js → chips-Cy-Uf0By.js} +3 -3
- package/dist/{chips-DyoQtkqC.js.map → chips-Cy-Uf0By.js.map} +1 -1
- package/dist/{chips-w7_Vv_P1.cjs → chips-Do9LFtJA.cjs} +2 -2
- package/dist/{chips-w7_Vv_P1.cjs.map → chips-Do9LFtJA.cjs.map} +1 -1
- package/dist/chips.cjs +1 -1
- package/dist/chips.js +1 -1
- package/dist/{circular-progress-B7VSuyu1.js → circular-progress-D5vVDl4d.js} +3 -3
- package/dist/{circular-progress-B7VSuyu1.js.map → circular-progress-D5vVDl4d.js.map} +1 -1
- package/dist/{circular-progress-BT_cAg-m.cjs → circular-progress-DS6pw54i.cjs} +2 -2
- package/dist/{circular-progress-BT_cAg-m.cjs.map → circular-progress-DS6pw54i.cjs.map} +1 -1
- package/dist/circular-progress.cjs +1 -1
- package/dist/circular-progress.js +1 -1
- package/dist/code-highlight.cjs +1 -1
- package/dist/code-highlight.js +1 -1
- package/dist/{code-preview-WdmERMCO.js → code-preview-AQ1T_x11.js} +407 -364
- package/dist/{code-preview-WdmERMCO.js.map → code-preview-AQ1T_x11.js.map} +1 -1
- package/dist/code-preview-CXO3vsRi.cjs +185 -0
- package/dist/{code-preview-BsEGjZB8.cjs.map → code-preview-CXO3vsRi.cjs.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-ooOpxbeQ.cjs → date-range-B0CSi1D6.cjs} +2 -2
- package/dist/{date-range-ooOpxbeQ.cjs.map → date-range-B0CSi1D6.cjs.map} +1 -1
- package/dist/{date-range-DtrUQ__m.js → date-range-IrXoBUVr.js} +3 -3
- package/dist/{date-range-DtrUQ__m.js.map → date-range-IrXoBUVr.js.map} +1 -1
- package/dist/date-range.cjs +1 -1
- package/dist/date-range.js +1 -1
- package/dist/{delay-Bi7N7rfi.cjs → delay-BV4QWYDw.cjs} +2 -2
- package/dist/{delay-Bi7N7rfi.cjs.map → delay-BV4QWYDw.cjs.map} +1 -1
- package/dist/{delay-CpadwhcQ.js → delay-BjYDvkud.js} +2 -2
- package/dist/{delay-CpadwhcQ.js.map → delay-BjYDvkud.js.map} +1 -1
- package/dist/delay.cjs +1 -1
- package/dist/delay.js +1 -1
- package/dist/{dialog-content-C-hz1uOo.cjs → dialog-content-D5kti4-b.cjs} +2 -2
- package/dist/{dialog-content-C-hz1uOo.cjs.map → dialog-content-D5kti4-b.cjs.map} +1 -1
- package/dist/{dialog-content-DHu6t4FZ.js → dialog-content-D9uVow4E.js} +3 -3
- package/dist/{dialog-content-DHu6t4FZ.js.map → dialog-content-D9uVow4E.js.map} +1 -1
- package/dist/dialog.cjs +1 -1
- package/dist/dialog.js +1 -1
- package/dist/{divider-_-MZUPzR.js → divider-3tv52Nso.js} +3 -3
- package/dist/{divider-_-MZUPzR.js.map → divider-3tv52Nso.js.map} +1 -1
- package/dist/{divider-CMaphWTG.cjs → divider-CEyi1ooH.cjs} +2 -2
- package/dist/{divider-CMaphWTG.cjs.map → divider-CEyi1ooH.cjs.map} +1 -1
- package/dist/divider.cjs +1 -1
- package/dist/divider.js +1 -1
- package/dist/{dropdown-content-TrKH6CPO.cjs → dropdown-content-BoKXumxT.cjs} +2 -2
- package/dist/{dropdown-content-TrKH6CPO.cjs.map → dropdown-content-BoKXumxT.cjs.map} +1 -1
- package/dist/{dropdown-content-DMhWEC5P.js → dropdown-content-R-EVmTas.js} +3 -3
- package/dist/{dropdown-content-DMhWEC5P.js.map → dropdown-content-R-EVmTas.js.map} +1 -1
- package/dist/dropdown.cjs +1 -1
- package/dist/dropdown.js +1 -1
- package/dist/extra.cjs +1 -1
- package/dist/extra.js +1 -1
- package/dist/{flex-Dr8l_bpn.js → flex-DFGC-5rG.js} +2 -2
- package/dist/{flex-Dr8l_bpn.js.map → flex-DFGC-5rG.js.map} +1 -1
- package/dist/{flex-CaC7hDYr.cjs → flex-Dfk62-Dn.cjs} +2 -2
- package/dist/{flex-CaC7hDYr.cjs.map → flex-Dfk62-Dn.cjs.map} +1 -1
- package/dist/{form-DXe2MLM6.cjs → form-C-YpNF0Z.cjs} +2 -2
- package/dist/{form-DXe2MLM6.cjs.map → form-C-YpNF0Z.cjs.map} +1 -1
- package/dist/{form-CWRGjc2L.js → form-DWz7p8Ru.js} +2 -2
- package/dist/{form-CWRGjc2L.js.map → form-DWz7p8Ru.js.map} +1 -1
- package/dist/form.cjs +1 -1
- package/dist/form.js +1 -1
- package/dist/{icon-BhA1UDKp.js → icon-D-o0ZArk.js} +2 -2
- package/dist/{icon-BhA1UDKp.js.map → icon-D-o0ZArk.js.map} +1 -1
- package/dist/{icon-Cpm7fcMG.cjs → icon-D_0MYmHT.cjs} +2 -2
- package/dist/{icon-Cpm7fcMG.cjs.map → icon-D_0MYmHT.cjs.map} +1 -1
- package/dist/{icon-button-DRJRp7NW.js → icon-button-6K7j0Ifl.js} +3 -3
- package/dist/{icon-button-DRJRp7NW.js.map → icon-button-6K7j0Ifl.js.map} +1 -1
- package/dist/{icon-button-DuaFGduO.cjs → icon-button-fT0E5fJN.cjs} +2 -2
- package/dist/{icon-button-DuaFGduO.cjs.map → icon-button-fT0E5fJN.cjs.map} +1 -1
- package/dist/icons.cjs +1 -1
- package/dist/icons.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +41 -41
- package/dist/{input-D8ZNzDHV.js → input-3-d9ijGr.js} +2 -2
- package/dist/{input-D8ZNzDHV.js.map → input-3-d9ijGr.js.map} +1 -1
- package/dist/{input-Cm1CnbuH.cjs → input-y7H2rS_c.cjs} +2 -2
- package/dist/{input-Cm1CnbuH.cjs.map → input-y7H2rS_c.cjs.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-DGcdO8kB.cjs → list-CQCRYpMc.cjs} +2 -2
- package/dist/{list-DGcdO8kB.cjs.map → list-CQCRYpMc.cjs.map} +1 -1
- package/dist/{list-oTKIr7PQ.js → list-DdZ0XbRC.js} +2 -2
- package/dist/{list-oTKIr7PQ.js.map → list-DdZ0XbRC.js.map} +1 -1
- package/dist/list.cjs +1 -1
- package/dist/list.js +1 -1
- package/dist/{litElement.mixin-DgPgTgtr.js → litElement.mixin-DCTPuIQ4.js} +2 -2
- package/dist/{litElement.mixin-DgPgTgtr.js.map → litElement.mixin-DCTPuIQ4.js.map} +1 -1
- package/dist/{litElement.mixin-9Gop8K6U.cjs → litElement.mixin-DcYItU_Y.cjs} +2 -2
- package/dist/{litElement.mixin-9Gop8K6U.cjs.map → litElement.mixin-DcYItU_Y.cjs.map} +1 -1
- package/dist/{menu-DENXkCTG.js → menu-BBeCodjv.js} +3 -3
- package/dist/{menu-DENXkCTG.js.map → menu-BBeCodjv.js.map} +1 -1
- package/dist/{menu-DrqS9xPK.cjs → menu-DTNNwC3X.cjs} +2 -2
- package/dist/{menu-DrqS9xPK.cjs.map → menu-DTNNwC3X.cjs.map} +1 -1
- package/dist/menu.cjs +1 -1
- package/dist/menu.js +1 -1
- package/dist/nav-drawer.cjs +1 -1
- package/dist/nav-drawer.js +1 -1
- package/dist/{notification-service-DL1fq8hm.cjs → notification-service-Dw1vWE8m.cjs} +2 -2
- package/dist/{notification-service-DL1fq8hm.cjs.map → notification-service-Dw1vWE8m.cjs.map} +1 -1
- package/dist/{notification-service-B9B2SOMf.js → notification-service-cV_jYoFM.js} +3 -3
- package/dist/{notification-service-B9B2SOMf.js.map → notification-service-cV_jYoFM.js.map} +1 -1
- package/dist/notification.cjs +1 -1
- package/dist/notification.js +1 -1
- package/dist/{option-x_gU_P71.cjs → option-BkYybtqQ.cjs} +2 -2
- package/dist/{option-x_gU_P71.cjs.map → option-BkYybtqQ.cjs.map} +1 -1
- package/dist/{option-D7hTrzgh.js → option-D9kAMX93.js} +2 -2
- package/dist/{option-D7hTrzgh.js.map → option-D9kAMX93.js.map} +1 -1
- package/dist/option.cjs +1 -1
- package/dist/option.js +1 -1
- package/dist/{payment-card-form-D3hyDbdZ.js → payment-card-form-C2X4AyyB.js} +3 -3
- package/dist/{payment-card-form-D3hyDbdZ.js.map → payment-card-form-C2X4AyyB.js.map} +1 -1
- package/dist/{payment-card-form-AFtDtRfH.cjs → payment-card-form-CLRmWodS.cjs} +2 -2
- package/dist/{payment-card-form-AFtDtRfH.cjs.map → payment-card-form-CLRmWodS.cjs.map} +1 -1
- package/dist/{radio-button-ncZSGkqc.js → radio-button-C0IThgUp.js} +2 -2
- package/dist/{radio-button-ncZSGkqc.js.map → radio-button-C0IThgUp.js.map} +1 -1
- package/dist/{radio-button-DaLz4Z3S.cjs → radio-button-b-3WocDM.cjs} +2 -2
- package/dist/{radio-button-DaLz4Z3S.cjs.map → radio-button-b-3WocDM.cjs.map} +1 -1
- package/dist/radio-group.cjs +1 -1
- package/dist/radio-group.js +1 -1
- package/dist/{schmancy-steps-container-BMHLfmfG.js → schmancy-steps-container-B1pLiWXH.js} +2 -2
- package/dist/{schmancy-steps-container-BMHLfmfG.js.map → schmancy-steps-container-B1pLiWXH.js.map} +1 -1
- package/dist/{schmancy-steps-container-Oj0-kdzs.cjs → schmancy-steps-container-zat0B8ZS.cjs} +2 -2
- package/dist/{schmancy-steps-container-Oj0-kdzs.cjs.map → schmancy-steps-container-zat0B8ZS.cjs.map} +1 -1
- package/dist/{select-CNfzjQc7.js → select-BLI7oX60.js} +3 -3
- package/dist/{select-CNfzjQc7.js.map → select-BLI7oX60.js.map} +1 -1
- package/dist/{select-kgqACG9u.cjs → select-DsFHJyZw.cjs} +2 -2
- package/dist/{select-kgqACG9u.cjs.map → select-DsFHJyZw.cjs.map} +1 -1
- package/dist/select.cjs +1 -1
- package/dist/select.js +1 -1
- package/dist/{sheet-CWGztMJM.js → sheet-cxQG63jb.js} +3 -3
- package/dist/{sheet-CWGztMJM.js.map → sheet-cxQG63jb.js.map} +1 -1
- package/dist/{sheet-8KVbmBT0.cjs → sheet-xbPPu7eJ.cjs} +2 -2
- package/dist/{sheet-8KVbmBT0.cjs.map → sheet-xbPPu7eJ.cjs.map} +1 -1
- package/dist/sheet.cjs +1 -1
- package/dist/sheet.js +1 -1
- package/dist/{slider-BpGbCj5P.js → slider-D5GAJBtp.js} +3 -3
- package/dist/{slider-BpGbCj5P.js.map → slider-D5GAJBtp.js.map} +1 -1
- package/dist/{slider-BTJK0M8p.cjs → slider-DI42q9wf.cjs} +2 -2
- package/dist/{slider-BTJK0M8p.cjs.map → slider-DI42q9wf.cjs.map} +1 -1
- package/dist/slider.cjs +1 -1
- package/dist/slider.js +1 -1
- package/dist/{spinner-o6SsnYml.cjs → spinner-I_J8koHo.cjs} +2 -2
- package/dist/{spinner-o6SsnYml.cjs.map → spinner-I_J8koHo.cjs.map} +1 -1
- package/dist/{spinner-CZEpYGDr.js → spinner-jxwBlOT6.js} +3 -3
- package/dist/{spinner-CZEpYGDr.js.map → spinner-jxwBlOT6.js.map} +1 -1
- package/dist/steps.cjs +1 -1
- package/dist/steps.js +1 -1
- package/dist/{surface-v1R6gg3O.cjs → surface-CgjTa2At.cjs} +2 -2
- package/dist/{surface-v1R6gg3O.cjs.map → surface-CgjTa2At.cjs.map} +1 -1
- package/dist/{surface-CULbYLWK.js → surface-KO5G93q6.js} +2 -2
- package/dist/{surface-CULbYLWK.js.map → surface-KO5G93q6.js.map} +1 -1
- package/dist/surface.cjs +1 -1
- package/dist/surface.js +1 -1
- package/dist/{table-DiyvbCo7.js → table-ae8AvxxX.js} +2 -2
- package/dist/{table-DiyvbCo7.js.map → table-ae8AvxxX.js.map} +1 -1
- package/dist/{table-C-bANOR2.cjs → table-tMVVNYqd.cjs} +2 -2
- package/dist/{table-C-bANOR2.cjs.map → table-tMVVNYqd.cjs.map} +1 -1
- package/dist/table.cjs +1 -1
- package/dist/table.js +1 -1
- package/dist/{tabs-compatibility-gBgyoF-Q.js → tabs-compatibility-DgqIx0_d.js} +2 -2
- package/dist/{tabs-compatibility-gBgyoF-Q.js.map → tabs-compatibility-DgqIx0_d.js.map} +1 -1
- package/dist/{tabs-compatibility-H_ztF6ET.cjs → tabs-compatibility-K7hN1FMS.cjs} +2 -2
- package/dist/{tabs-compatibility-H_ztF6ET.cjs.map → tabs-compatibility-K7hN1FMS.cjs.map} +1 -1
- package/dist/tabs.cjs +1 -1
- package/dist/tabs.js +1 -1
- package/dist/{tailwind.mixin-CBugs0NU.js → tailwind.mixin-BPIDvfDe.js} +2 -2
- package/dist/{tailwind.mixin-CBugs0NU.js.map → tailwind.mixin-BPIDvfDe.js.map} +1 -1
- package/dist/{tailwind.mixin-by-9p2wJ.cjs → tailwind.mixin-DWvvleWP.cjs} +2 -2
- package/dist/{tailwind.mixin-by-9p2wJ.cjs.map → tailwind.mixin-DWvvleWP.cjs.map} +1 -1
- package/dist/teleport.cjs +1 -1
- package/dist/teleport.js +1 -1
- package/dist/{textarea-B1qCCWUj.js → textarea-Coqtz8dI.js} +2 -2
- package/dist/{textarea-B1qCCWUj.js.map → textarea-Coqtz8dI.js.map} +1 -1
- package/dist/{textarea-uDNXN7E5.cjs → textarea-DlxS_YbV.cjs} +2 -2
- package/dist/{textarea-uDNXN7E5.cjs.map → textarea-DlxS_YbV.cjs.map} +1 -1
- package/dist/textarea.cjs +1 -1
- package/dist/textarea.js +1 -1
- package/dist/{theme-button-GGwBDTFe.cjs → theme-button-MLe6lqim.cjs} +2 -2
- package/dist/{theme-button-GGwBDTFe.cjs.map → theme-button-MLe6lqim.cjs.map} +1 -1
- package/dist/{theme-button-Bb5gE3fO.js → theme-button-aGO9tJ2X.js} +2 -2
- package/dist/{theme-button-Bb5gE3fO.js.map → theme-button-aGO9tJ2X.js.map} +1 -1
- package/dist/theme-button.cjs +1 -1
- package/dist/theme-button.js +1 -1
- package/dist/theme.cjs +1 -1
- package/dist/{theme.component-Du-mYia7.cjs → theme.component-Bhodmw04.cjs} +2 -2
- package/dist/{theme.component-Du-mYia7.cjs.map → theme.component-Bhodmw04.cjs.map} +1 -1
- package/dist/{theme.component-C3Az3LCn.js → theme.component-DtSJBwyz.js} +2 -2
- package/dist/{theme.component-C3Az3LCn.js.map → theme.component-DtSJBwyz.js.map} +1 -1
- package/dist/theme.js +1 -1
- package/dist/{timezone-8fpYlPih.js → timezone-DRzBs7kc.js} +3 -3
- package/dist/{timezone-8fpYlPih.js.map → timezone-DRzBs7kc.js.map} +1 -1
- package/dist/{timezone-BNXuXIk_.cjs → timezone-MNEWy4jq.cjs} +2 -2
- package/dist/{timezone-BNXuXIk_.cjs.map → timezone-MNEWy4jq.cjs.map} +1 -1
- package/dist/{tooltip-boMvd7Px.js → tooltip-CyHXFI4n.js} +2 -2
- package/dist/{tooltip-boMvd7Px.js.map → tooltip-CyHXFI4n.js.map} +1 -1
- package/dist/{tooltip-B9PrX-ud.cjs → tooltip-DXepH6lG.cjs} +2 -2
- package/dist/{tooltip-B9PrX-ud.cjs.map → tooltip-DXepH6lG.cjs.map} +1 -1
- package/dist/tooltip.cjs +1 -1
- package/dist/tooltip.js +1 -1
- package/dist/{tree-DuMRYuUP.js → tree-BDvR_Ooq.js} +2 -2
- package/dist/{tree-DuMRYuUP.js.map → tree-BDvR_Ooq.js.map} +1 -1
- package/dist/{tree-DLxiFxTm.cjs → tree-BkqvB6rh.cjs} +2 -2
- package/dist/{tree-DLxiFxTm.cjs.map → tree-BkqvB6rh.cjs.map} +1 -1
- package/dist/tree.cjs +1 -1
- package/dist/tree.js +1 -1
- package/dist/{typewriter-DFlhNtuC.js → typewriter-B1uzg12Z.js} +4 -4
- package/dist/{typewriter-DFlhNtuC.js.map → typewriter-B1uzg12Z.js.map} +1 -1
- package/dist/{typewriter-D2BteuUE.cjs → typewriter-CoOcshun.cjs} +2 -2
- package/dist/{typewriter-D2BteuUE.cjs.map → typewriter-CoOcshun.cjs.map} +1 -1
- package/dist/typewriter.cjs +1 -1
- package/dist/typewriter.js +1 -1
- package/dist/{typography-BMNXy5E7.js → typography-BoHmbEy7.js} +2 -2
- package/dist/{typography-BMNXy5E7.js.map → typography-BoHmbEy7.js.map} +1 -1
- package/dist/{typography-B08MvG9M.cjs → typography-CRa9BYOd.cjs} +2 -2
- package/dist/{typography-B08MvG9M.cjs.map → typography-CRa9BYOd.cjs.map} +1 -1
- package/dist/typography.cjs +1 -1
- package/dist/typography.js +1 -1
- package/package.json +1 -1
- package/types/src/code-highlight/code-highlight.d.ts +3 -2
- package/types/src/code-highlight/code-preview.d.ts +5 -0
- package/dist/code-preview-BsEGjZB8.cjs +0 -160
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";const u=require("rxjs"),E=require("lit/directives/class-map.js");require("lit/directives/style-map.js");const C=require("./litElement.mixin-
|
|
1
|
+
"use strict";const u=require("rxjs"),E=require("lit/directives/class-map.js");require("lit/directives/style-map.js");const C=require("./litElement.mixin-DcYItU_Y.cjs");require("./tailwind.mixin-DWvvleWP.cjs");const V=require("lit"),d=require("lit/decorators.js"),w=require("lit/directives/ref.js"),e=require("rxjs/operators");function k(t,i){if(!t||!i)return 0;if(t===i)return 1;const s=t.toLowerCase().trim(),n=i.toLowerCase().trim();if(s===n)return 1;if(n.startsWith(s))return .95+.05*(s.length/n.length);const l=n.split(/[\s\-_]+/);for(const p of l)if(p.startsWith(s))return .85*(1-l.indexOf(p)/l.length*.1);if(n.includes(s))return .7*(1-n.indexOf(s)/n.length*.2);if(function(p,m){let r=0,o=0;for(;r<p.length&&o<m.length;)p[r]===m[o]&&r++,o++;return r===p.length}(s,n))return .5;const a=function(p,m){if(p.length<2||m.length<2)return 0;const r=S(p),o=S(m);let v=0;const y=new Array(o.length).fill(!1);for(const x of r)for(let g=0;g<o.length;g++)if(!y[g]&&o[g]===x){v++,y[g]=!0;break}return 2*v/(r.length+o.length)}(s,n),h=Math.max(s.length,n.length),f=function(p,m){if(p.length===0)return m.length;if(m.length===0)return p.length;const r=[];for(let o=0;o<=m.length;o++)r[o]=[o];for(let o=0;o<=p.length;o++)r[0][o]=o;for(let o=1;o<=m.length;o++)for(let v=1;v<=p.length;v++){const y=p[v-1]===m[o-1]?0:1;r[o][v]=Math.min(r[o-1][v]+1,r[o][v-1]+1,r[o-1][v-1]+y)}return r[m.length][p.length]}(s,n),b=h?1-f/h:0,$=function(p,m){const r=y=>y.split("").reduce((x,g)=>(x[g]=(x[g]||0)+1,x),{}),o=r(p),v=r(m);return Object.keys(o).every(y=>(v[y]||0)>=o[y])}(s,n)?.3:0;return Math.max(.4*a,.4*b,$)}function S(t){const i=[];for(let s=0;s<t.length-1;s++)i.push(t.substring(s,s+2));return i}var R=Object.defineProperty,A=Object.getOwnPropertyDescriptor,_=(t,i,s,n)=>{for(var l,a=n>1?void 0:n?A(i,s):i,h=t.length-1;h>=0;h--)(l=t[h])&&(a=(n?l(i,s,a):l(a))||a);return n&&a&&R(i,s,a),a};let c=class extends C.$LitElement(":host{display:block;border:unset!important;line-height:unset!important;background:unset!important;padding:unset!important;font-size:unset!important;box-shadow:unset!important}:host:focus{box-shadow:unset!important}"){constructor(){super(...arguments),this.required=!1,this.placeholder="",this.label="",this.name="",this.maxHeight="300px",this.multi=!1,this.description="",this.size="md",this.autocomplete="on",this.debounceMs=200,this.similarityThreshold=.3,this._open=!1,this._inputValue="",this._visibleOptionsCount=0,this._hasResults=!0,this._inputElementRef=w.createRef(),this._selectedValue$=new u.BehaviorSubject(""),this._selectedValues$=new u.BehaviorSubject([]),this._inputValue$=new u.BehaviorSubject(""),this._open$=new u.BehaviorSubject(!1),this._options$=new u.BehaviorSubject([]),this._optionSelect$=new u.Subject,this._documentClick$=new u.Subject,this._checkAutofill$=new u.Subject}get values(){return[...this._selectedValues$.value]}set values(t){this._selectedValues$.next(Array.isArray(t)?[...t]:[])}get value(){return this.multi?this._selectedValues$.value.join(","):this._selectedValue$.value}set value(t){this.multi?this._selectedValues$.next(t?t.split(",").map(i=>i.trim()).filter(Boolean):[]):this._selectedValue$.next(t)}connectedCallback(){super.connectedCallback(),this.id||(this.id=`sch-autocomplete-${Math.random().toString(36).slice(2,9)}`),this._setupAutocompleteLogic(),this._setupDocumentClickHandler(),this._setupAutofillDetection()}_setupAutocompleteLogic(){this._options$.pipe(e.tap(t=>{t.forEach((i,s)=>{i.setAttribute("role","option"),i.tabIndex=-1,i.id||(i.id=`${this.id}-option-${s}`),i.hasAttribute("data-event-bound")||(u.fromEvent(i,"click").pipe(e.tap(n=>n.stopPropagation()),e.takeUntil(this.disconnecting)).subscribe(()=>this._optionSelect$.next(i)),i.setAttribute("data-event-bound","true"))})}),e.takeUntil(this.disconnecting)).subscribe(),u.combineLatest([this._selectedValue$,this._selectedValues$,this._options$]).pipe(e.tap(([t,i,s])=>{s.forEach(n=>{n.selected=this.multi?i.includes(n.value):n.value===t,n.setAttribute("aria-selected",String(n.selected))})}),e.takeUntil(this.disconnecting)).subscribe(),this._inputValue$.pipe(e.distinctUntilChanged(),e.debounceTime(this.debounceMs),e.withLatestFrom(this._options$,this._open$),e.tap(([t,i,s])=>{if(!s)return;const n=t.trim();if(n){const l=i.map(h=>{const f=h.label||h.textContent||"",b=h.value,$=k(n,f),p=k(n,b);return{option:h,score:Math.max(1.1*$,p)}});l.sort((h,f)=>f.score-h.score);let a=0;l.forEach((h,f)=>{const{option:b,score:$}=h;$<this.similarityThreshold?b.hidden=!0:(b.hidden=!1,a++,b.style.order=String(f))}),this._visibleOptionsCount=a,this._hasResults=a>0}else i.forEach(l=>{l.hidden=!1,l.style.order="0"}),this._visibleOptionsCount=i.length,this._hasResults=!0;this._announceToScreenReader(this._visibleOptionsCount>0?`${this._visibleOptionsCount} option${this._visibleOptionsCount===1?"":"s"} available.`:"No results found.")}),e.takeUntil(this.disconnecting)).subscribe(),this._optionSelect$.pipe(e.withLatestFrom(this._selectedValue$,this._selectedValues$),e.tap(([t,i,s])=>{if(this.multi){const n=s.indexOf(t.value),l=n>-1?[...s.slice(0,n),...s.slice(n+1)]:[...s,t.value];this._selectedValues$.next(l),this._inputValue$.next(""),this._inputValue="";const a=this._getSelectedLabels();this._announceToScreenReader(a.length>0?`Selected: ${a.join(", ")}`:"No options selected")}else this._selectedValue$.next(t.value),this._open$.next(!1),this._open=!1,this._inputValue=t.label||t.textContent||"",this._inputValue$.next(this._inputValue),u.timer(100).pipe(e.tap(()=>{var n;return(n=this._inputElementRef.value)==null?void 0:n.blur()}),e.take(1)).subscribe(),this._announceToScreenReader(`Selected: ${t.label||t.textContent}`)}),e.tap(()=>this._fireChangeEvent()),e.takeUntil(this.disconnecting)).subscribe(),u.combineLatest([this._open$,this._selectedValue$,this._selectedValues$,this._options$]).pipe(e.filter(()=>!this._open$.value),e.tap(([,t,i,s])=>{if(this.multi){const n=s.filter(l=>i.includes(l.value)).map(l=>l.label||l.textContent||"");this._inputValue=n.join(", ")}else{const n=s.find(l=>l.value===t);this._inputValue=n&&(n.label||n.textContent)||""}this._inputValue$.next(this._inputValue)}),e.takeUntil(this.disconnecting)).subscribe(),this._open$.pipe(e.tap(t=>this._open=t),e.takeUntil(this.disconnecting)).subscribe()}_setupDocumentClickHandler(){this._documentClick$.pipe(e.filter(t=>!t.composedPath().includes(this)),e.filter(t=>!this._options.some(i=>t.composedPath().includes(i))),e.filter(()=>this._open),e.tap(()=>{this._open$.next(!1),this._updateInputDisplay()}),e.takeUntil(this.disconnecting)).subscribe(),this._open$.pipe(e.distinctUntilChanged(),e.switchMap(t=>t?u.timer(10).pipe(e.tap(()=>document.addEventListener("click",i=>this._documentClick$.next(i))),e.switchMap(()=>u.EMPTY)):u.of(null).pipe(e.tap(()=>document.removeEventListener("click",i=>this._documentClick$.next(i))))),e.takeUntil(this.disconnecting)).subscribe()}_setupAutofillDetection(){u.merge(u.timer(100,500).pipe(e.take(10)),this._checkAutofill$,u.timer(100).pipe(e.switchMap(()=>u.fromEvent(window,"load").pipe(e.startWith(null))))).pipe(e.map(()=>{var i,s;const t=this._inputElementRef.value;return t?((i=t.shadowRoot)==null?void 0:i.querySelector("input"))||t.querySelector("input")||((s=t._inputRef)==null?void 0:s.value):null}),e.filter(t=>!!t),e.map(t=>t.value),e.filter(t=>!!t&&t.trim().length>0),e.distinctUntilChanged(),e.withLatestFrom(this._options$),e.tap(([t,i])=>{let s=null,n=0;if(i.forEach(l=>{const a=l.label||l.textContent||"",h=l.value,f=k(t,a),b=k(t,h),$=Math.max(f,b);$>n&&$>=this.similarityThreshold&&(n=$,s=l)}),s){this.multi?this._selectedValues$.next([s.value]):this._selectedValue$.next(s.value);const l=s.label||s.textContent||"";this._inputValue=l,this._inputValue$.next(l);const a=this._inputElementRef.value;a&&(a.value=l),this._open$.next(!1),this._fireChangeEvent(),this._announceToScreenReader(`Autofilled: ${l}`)}}),e.takeUntil(this.disconnecting)).subscribe(),u.timer(100).pipe(e.map(()=>{var i,s;const t=this._inputElementRef.value;return t?((i=t.shadowRoot)==null?void 0:i.querySelector("input"))||t.querySelector("input")||((s=t._inputRef)==null?void 0:s.value):null}),e.filter(t=>!!t),e.switchMap(t=>u.fromEvent(t,"animationstart").pipe(e.filter(i=>i.animationName==="onAutoFillStart"),e.tap(()=>{u.timer(100).pipe(e.tap(()=>this._checkAutofill$.next()),e.take(1)).subscribe()}))),e.takeUntil(this.disconnecting)).subscribe()}_updateInputDisplay(){u.of(null).pipe(e.withLatestFrom(this._selectedValue$,this._selectedValues$,this._options$,this._open$),e.tap(([,t,i,s,n])=>{if(this._inputElementRef.value&&(!n||!this.multi)){if(this.multi){const l=s.filter(a=>i.includes(a.value)).map(a=>a.label||a.textContent||"");this._inputValue=l.join(", ")}else{const l=s.find(a=>a.value===t);this._inputValue=l&&(l.label||l.textContent)||""}this._inputValue$.next(this._inputValue),this._inputElementRef.value.value=this._inputValue}}),e.take(1)).subscribe()}_getSelectedLabels(){return this._options.filter(t=>this.multi?this._selectedValues$.value.includes(t.value):t.value===this._selectedValue$.value).map(t=>t.label||t.textContent||"")}_announceToScreenReader(t){var s;const i=(s=this.shadowRoot)==null?void 0:s.querySelector("#live-status");i&&(i.textContent=t)}_fireChangeEvent(){const t={value:this.value};this.multi&&(t.values=[...this._selectedValues$.value]),this.dispatchEvent(new CustomEvent("change",{detail:t,bubbles:!0,composed:!0}))}checkValidity(){return!this.required||(this.multi?this._selectedValues$.value.length>0:!!this._selectedValue$.value)}reportValidity(){return this._inputElementRef.value?this._inputElementRef.value.reportValidity():this.checkValidity()}firstUpdated(){u.timer(200).pipe(e.tap(()=>this._checkAutofill$.next()),e.take(1)).subscribe(),this._options$.pipe(e.filter(t=>t.length>0),e.tap(()=>this._checkAutofill$.next()),e.takeUntil(this.disconnecting)).subscribe()}render(){var i;const t=`${this.id}-desc`;return V.html`
|
|
2
2
|
<div class="relative">
|
|
3
3
|
<!-- Screen reader live region -->
|
|
4
4
|
<div id="live-status" role="status" aria-live="polite" class="sr-only"></div>
|
|
@@ -70,4 +70,4 @@
|
|
|
70
70
|
}
|
|
71
71
|
</style>
|
|
72
72
|
`}_handleKeyDown(t){u.fromEvent(document,"keydown").pipe(e.take(1),e.withLatestFrom(this._open$,this._options$),e.tap(([i,s,n])=>{var f,b,$,p,m;if(!s&&(i.key==="ArrowDown"||i.key==="Enter"))return i.preventDefault(),this._open$.next(!0),void u.timer(10).pipe(e.tap(()=>{const r=n.find(o=>!o.hidden);r==null||r.focus()}),e.take(1)).subscribe();if(!s)return;const l=n.filter(r=>!r.hidden).sort((r,o)=>parseInt(r.style.order||"0")-parseInt(o.style.order||"0")),a=l.find(r=>r===document.activeElement),h=a?l.indexOf(a):-1;switch(i.key){case"Escape":i.preventDefault(),this._open$.next(!1),this._updateInputDisplay(),(f=this._inputElementRef.value)==null||f.focus();break;case"Tab":this._open$.next(!1),this._updateInputDisplay();break;case"ArrowDown":i.preventDefault();const r=h<l.length-1?h+1:0;(b=l[r])==null||b.focus();break;case"ArrowUp":i.preventDefault();const o=h>0?h-1:l.length-1;($=l[o])==null||$.focus();break;case"Home":i.preventDefault(),(p=l[0])==null||p.focus();break;case"End":i.preventDefault(),(m=l[l.length-1])==null||m.focus();break;case"Enter":case" ":a&&(i.preventDefault(),this._optionSelect$.next(a))}})).subscribe()}};_([d.property({type:Boolean})],c.prototype,"required",2),_([d.property({type:String})],c.prototype,"placeholder",2),_([d.property({type:String,reflect:!0})],c.prototype,"label",2),_([d.property({type:String})],c.prototype,"name",2),_([d.property({type:String})],c.prototype,"maxHeight",2),_([d.property({type:Boolean})],c.prototype,"multi",2),_([d.property({type:String})],c.prototype,"description",2),_([d.property({type:String,reflect:!0})],c.prototype,"size",2),_([d.property({type:String})],c.prototype,"autocomplete",2),_([d.property({type:Number})],c.prototype,"debounceMs",2),_([d.property({type:Number})],c.prototype,"similarityThreshold",2),_([d.property({type:Array})],c.prototype,"values",1),_([d.property({type:String,reflect:!0})],c.prototype,"value",1),_([d.state()],c.prototype,"_open",2),_([d.state()],c.prototype,"_inputValue",2),_([d.state()],c.prototype,"_visibleOptionsCount",2),_([d.state()],c.prototype,"_hasResults",2),_([d.query("#options")],c.prototype,"_listbox",2),_([d.query("sch-input")],c.prototype,"_input",2),_([d.queryAssignedElements({flatten:!0})],c.prototype,"_options",2),c=_([d.customElement("schmancy-autocomplete")],c);
|
|
73
|
-
//# sourceMappingURL=autocomplete-
|
|
73
|
+
//# sourceMappingURL=autocomplete-C2MgBZdi.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autocomplete-Lrf6Xs9H.cjs","sources":["../src/utils/search.ts","../src/autocomplete/autocomplete.ts"],"sourcesContent":["/**\n * Calculate similarity score between two strings.\n * Returns a value between 0 (no match) and 1 (exact match).\n * Optimized for autocomplete with prioritization of start matches and whole words.\n *\n * @param query The search query string\n * @param target The target string to compare against\n * @returns A similarity score from 0 to 1\n */\nexport function similarity(query: string, target: string): number {\n\t// Handle edge cases\n\tif (!query || !target) return 0\n\tif (query === target) return 1\n\n\t// Normalize strings for comparison\n\tconst normalizedQuery = query.toLowerCase().trim()\n\tconst normalizedTarget = target.toLowerCase().trim()\n\n\t// 1. Exact match (case-insensitive)\n\tif (normalizedQuery === normalizedTarget) return 1\n\n\t// 2. Target starts with query (highest priority for autocomplete)\n\tif (normalizedTarget.startsWith(normalizedQuery)) {\n\t\t// Give higher score to shorter targets (more precise matches)\n\t\tconst lengthRatio = normalizedQuery.length / normalizedTarget.length\n\t\treturn 0.95 + (lengthRatio * 0.05) // Score between 0.95 and 1.0\n\t}\n\n\t// 3. Word boundary match (query matches start of any word in target)\n\tconst words = normalizedTarget.split(/[\\s\\-_]+/)\n\tfor (const word of words) {\n\t\tif (word.startsWith(normalizedQuery)) {\n\t\t\t// Score based on which word matched (earlier words score higher)\n\t\t\tconst wordIndex = words.indexOf(word)\n\t\t\tconst wordPositionScore = 1 - (wordIndex / words.length) * 0.1\n\t\t\treturn 0.85 * wordPositionScore // Score between 0.765 and 0.85\n\t\t}\n\t}\n\n\t// 4. Direct substring match (query appears anywhere in target)\n\tif (normalizedTarget.includes(normalizedQuery)) {\n\t\t// Score based on position (earlier position scores higher)\n\t\tconst position = normalizedTarget.indexOf(normalizedQuery)\n\t\tconst positionScore = 1 - (position / normalizedTarget.length) * 0.2\n\t\treturn 0.7 * positionScore // Score between 0.56 and 0.7\n\t}\n\n\t// 5. Subsequence check (all query chars appear in order)\n\tif (isSubsequence(normalizedQuery, normalizedTarget)) {\n\t\treturn 0.5\n\t}\n\n\t// 6. Fuzzy matching for typos\n\t// 6a. Dice coefficient (good for similar words)\n\tconst diceScore = diceCoefficient(normalizedQuery, normalizedTarget)\n\t\n\t// 6b. Levenshtein distance (good for typos)\n\tconst maxLength = Math.max(normalizedQuery.length, normalizedTarget.length)\n\tconst levenshteinDistance = calculateLevenshtein(normalizedQuery, normalizedTarget)\n\tconst levenshteinScore = maxLength ? 1 - levenshteinDistance / maxLength : 0\n\n\t// 6c. Character frequency match (anagram-like)\n\tconst anagramScore = hasAllCharacters(normalizedQuery, normalizedTarget) ? 0.3 : 0\n\n\t// Combine fuzzy scores with weights\n\tconst fuzzyScore = Math.max(\n\t\tdiceScore * 0.4,\n\t\tlevenshteinScore * 0.4,\n\t\tanagramScore\n\t)\n\n\treturn fuzzyScore\n}\n\n// Keep the rest of the helper functions as they are...\n/**\n * Check if string 'sub' is a subsequence of string 'str'.\n * All characters in 'sub' must appear in order in 'str'.\n */\nfunction isSubsequence(sub: string, str: string): boolean {\n\tlet i = 0,\n\t\tj = 0\n\twhile (i < sub.length && j < str.length) {\n\t\tif (sub[i] === str[j]) i++\n\t\tj++\n\t}\n\treturn i === sub.length\n}\n\n/**\n * Check if all characters in 'query' are present in 'target'.\n * For example, \"aovc\" matches \"avocados\" (anagram subset matching).\n */\nfunction hasAllCharacters(query: string, target: string): boolean {\n\tconst countChars = (s: string): Record<string, number> => {\n\t\treturn s.split('').reduce(\n\t\t\t(acc, char) => {\n\t\t\t\tacc[char] = (acc[char] || 0) + 1\n\t\t\t\treturn acc\n\t\t\t},\n\t\t\t{} as Record<string, number>,\n\t\t)\n\t}\n\n\tconst queryCount = countChars(query)\n\tconst targetCount = countChars(target)\n\n\treturn Object.keys(queryCount).every(char => (targetCount[char] || 0) >= queryCount[char])\n}\n\n/**\n * Generate bigrams for a string.\n * A bigram is a sequence of two adjacent characters.\n */\nfunction getBigrams(s: string): string[] {\n\tconst bigrams = []\n\tfor (let i = 0; i < s.length - 1; i++) {\n\t\tbigrams.push(s.substring(i, i + 2))\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 */\nfunction diceCoefficient(s1: string, s2: string): number {\n\tif (s1.length < 2 || s2.length < 2) return 0\n\n\tconst bigrams1 = getBigrams(s1)\n\tconst bigrams2 = getBigrams(s2)\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 * Calculate Levenshtein distance between two strings.\n */\nfunction calculateLevenshtein(a: string, b: string): number {\n\tif (a.length === 0) return b.length\n\tif (b.length === 0) return a.length\n\n\tconst matrix: number[][] = []\n\n\t// Initialize the matrix\n\tfor (let i = 0; i <= b.length; i++) {\n\t\tmatrix[i] = [i]\n\t}\n\tfor (let j = 0; j <= a.length; j++) {\n\t\tmatrix[0][j] = j\n\t}\n\n\t// Calculate distances\n\tfor (let i = 1; i <= b.length; i++) {\n\t\tfor (let j = 1; j <= a.length; j++) {\n\t\t\tconst cost = a[j - 1] === b[i - 1] ? 0 : 1\n\t\t\tmatrix[i][j] = Math.min(\n\t\t\t\tmatrix[i - 1][j] + 1, // deletion\n\t\t\t\tmatrix[i][j - 1] + 1, // insertion\n\t\t\t\tmatrix[i - 1][j - 1] + cost, // substitution\n\t\t\t)\n\t\t}\n\t}\n\n\treturn matrix[b.length][a.length]\n}\n","import { $LitElement } from '@mixins/index'\nimport { InputSize } from '@schmancy/input'\nimport SchmancyInputV2 from '@schmancy/input/input-v2'\nimport SchmancyOption from '@schmancy/option/option'\nimport { html } from 'lit'\nimport { customElement, property, query, queryAssignedElements, state } from 'lit/decorators.js'\nimport { classMap } from 'lit/directives/class-map.js'\nimport { createRef, ref } from 'lit/directives/ref.js'\nimport {\n BehaviorSubject,\n combineLatest,\n EMPTY,\n fromEvent,\n merge,\n of,\n Subject,\n timer\n} from 'rxjs'\nimport {\n debounceTime,\n distinctUntilChanged,\n filter,\n map,\n startWith,\n switchMap,\n take,\n takeUntil,\n tap,\n withLatestFrom\n} from 'rxjs/operators'\nimport style from './autocomplete.scss?inline'\n\n// Import the similarity function (or include it inline)\nimport { similarity } from '../utils/search'\n\nexport type SchmancyAutocompleteChangeEvent = CustomEvent<{\n value: string | string[]\n values?: string[]\n}>\n\ninterface FilteredOption {\n option: SchmancyOption\n score: number\n}\n\n@customElement('schmancy-autocomplete')\nexport default class SchmancyAutocomplete extends $LitElement(style) {\n // Public API properties\n @property({ type: Boolean }) required = false\n @property({ type: String }) placeholder = ''\n @property({ type: String, reflect: true }) label = ''\n @property({ type: String }) name = ''\n @property({ type: String }) maxHeight = '300px'\n @property({ type: Boolean }) multi = false\n @property({ type: String }) description = ''\n @property({ type: String, reflect: true }) size: InputSize = 'md'\n @property({ type: String }) autocomplete = 'on'\n @property({ type: Number }) debounceMs = 200\n @property({ type: Number }) similarityThreshold = 0.3 // Minimum similarity score to show option\n\n // Values property for multi-select mode\n @property({ type: Array })\n get values() {\n return [...this._selectedValues$.value]\n }\n set values(vals: string[]) {\n this._selectedValues$.next(Array.isArray(vals) ? [...vals] : [])\n }\n\n // Value property\n @property({ type: String, reflect: true })\n get value() {\n return this.multi \n ? this._selectedValues$.value.join(',')\n : this._selectedValue$.value\n }\n set value(val: string) {\n if (this.multi) {\n this._selectedValues$.next(\n val ? val.split(',').map(v => v.trim()).filter(Boolean) : []\n )\n } else {\n this._selectedValue$.next(val)\n }\n }\n\n // State\n @state() private _open = false\n @state() private _inputValue = ''\n @state() private _visibleOptionsCount = 0\n @state() private _hasResults = true\n\n // DOM references\n @query('#options') _listbox!: HTMLUListElement\n @query('sch-input') _input!: SchmancyInputV2\n @queryAssignedElements({ flatten: true }) private _options!: SchmancyOption[]\n private _inputElementRef = createRef<HTMLInputElement>()\n\n // RxJS Subjects\n private _selectedValue$ = new BehaviorSubject<string>('')\n private _selectedValues$ = new BehaviorSubject<string[]>([])\n private _inputValue$ = new BehaviorSubject<string>('')\n private _open$ = new BehaviorSubject<boolean>(false)\n private _options$ = new BehaviorSubject<SchmancyOption[]>([])\n private _optionSelect$ = new Subject<SchmancyOption>()\n private _documentClick$ = new Subject<MouseEvent>()\n private _checkAutofill$ = new Subject<void>()\n\n connectedCallback() {\n super.connectedCallback()\n \n if (!this.id) {\n this.id = `sch-autocomplete-${Math.random().toString(36).slice(2, 9)}`\n }\n\n this._setupAutocompleteLogic()\n this._setupDocumentClickHandler()\n this._setupAutofillDetection()\n }\n\n private _setupAutocompleteLogic() {\n // Options management pipeline\n this._options$.pipe(\n tap(options => {\n options.forEach((option, index) => {\n option.setAttribute('role', 'option')\n option.tabIndex = -1\n if (!option.id) {\n option.id = `${this.id}-option-${index}`\n }\n if (!option.hasAttribute('data-event-bound')) {\n fromEvent(option, 'click').pipe(\n tap(e => e.stopPropagation()),\n takeUntil(this.disconnecting)\n ).subscribe(() => this._optionSelect$.next(option))\n option.setAttribute('data-event-bound', 'true')\n }\n })\n }),\n takeUntil(this.disconnecting)\n ).subscribe()\n\n // Selection sync pipeline\n combineLatest([\n this._selectedValue$,\n this._selectedValues$,\n this._options$\n ]).pipe(\n tap(([selectedValue, selectedValues, options]) => {\n options.forEach(option => {\n option.selected = this.multi \n ? selectedValues.includes(option.value)\n : option.value === selectedValue\n option.setAttribute('aria-selected', String(option.selected))\n })\n }),\n takeUntil(this.disconnecting)\n ).subscribe()\n\n // Enhanced fuzzy filtering pipeline\n this._inputValue$.pipe(\n distinctUntilChanged(),\n debounceTime(this.debounceMs),\n withLatestFrom(this._options$, this._open$),\n tap(([searchTerm, options, isOpen]) => {\n if (!isOpen) return\n\n const term = searchTerm.trim()\n \n if (!term) {\n // Show all options if no search term\n options.forEach(option => {\n option.hidden = false\n option.style.order = '0' // Reset order\n })\n this._visibleOptionsCount = options.length\n this._hasResults = true\n } else {\n // Calculate similarity scores for all options\n const scoredOptions: FilteredOption[] = options.map(option => {\n // Get text to search in (prioritize label, then textContent, then value)\n const optionLabel = option.label || option.textContent || ''\n const optionValue = option.value\n \n // Calculate similarity scores for both label and value\n const labelScore = similarity(term, optionLabel)\n const valueScore = similarity(term, optionValue)\n \n // Use the higher score (prioritizing label matches)\n const score = Math.max(labelScore * 1.1, valueScore) // Slight boost for label matches\n \n return { option, score }\n })\n \n // Sort by score (highest first)\n scoredOptions.sort((a, b) => b.score - a.score)\n \n // Apply visibility and ordering\n let visibleCount = 0\n scoredOptions.forEach((item, index) => {\n const { option, score } = item\n \n // Hide options below threshold\n if (score < this.similarityThreshold) {\n option.hidden = true\n } else {\n option.hidden = false\n visibleCount++\n // Use CSS order to sort visible options by relevance\n option.style.order = String(index)\n }\n })\n \n this._visibleOptionsCount = visibleCount\n this._hasResults = visibleCount > 0\n }\n \n this._announceToScreenReader(\n this._visibleOptionsCount > 0 \n ? `${this._visibleOptionsCount} option${this._visibleOptionsCount === 1 ? '' : 's'} available.`\n : 'No results found.'\n )\n }),\n takeUntil(this.disconnecting)\n ).subscribe()\n\n // Option selection pipeline\n this._optionSelect$.pipe(\n withLatestFrom(this._selectedValue$, this._selectedValues$),\n tap(([option, _, currentValues]) => {\n if (this.multi) {\n const index = currentValues.indexOf(option.value)\n const newValues = index > -1\n ? [...currentValues.slice(0, index), ...currentValues.slice(index + 1)]\n : [...currentValues, option.value]\n this._selectedValues$.next(newValues)\n \n this._inputValue$.next('')\n this._inputValue = ''\n \n const labels = this._getSelectedLabels()\n this._announceToScreenReader(\n labels.length > 0 \n ? `Selected: ${labels.join(', ')}`\n : 'No options selected'\n )\n } else {\n this._selectedValue$.next(option.value)\n this._open$.next(false)\n this._open = false\n \n this._inputValue = option.label || option.textContent || ''\n this._inputValue$.next(this._inputValue)\n \n timer(100).pipe(\n tap(() => this._inputElementRef.value?.blur()),\n take(1)\n ).subscribe()\n \n this._announceToScreenReader(`Selected: ${option.label || option.textContent}`)\n }\n }),\n tap(() => this._fireChangeEvent()),\n takeUntil(this.disconnecting)\n ).subscribe()\n\n // Display update pipeline\n combineLatest([\n this._open$,\n this._selectedValue$,\n this._selectedValues$,\n this._options$\n ]).pipe(\n filter(() => !this._open$.value),\n tap(([, selectedValue, selectedValues, options]) => {\n if (this.multi) {\n const labels = options\n .filter(opt => selectedValues.includes(opt.value))\n .map(opt => opt.label || opt.textContent || '')\n this._inputValue = labels.join(', ')\n } else {\n const option = options.find(opt => opt.value === selectedValue)\n this._inputValue = option ? option.label || option.textContent || '' : ''\n }\n this._inputValue$.next(this._inputValue)\n }),\n takeUntil(this.disconnecting)\n ).subscribe()\n\n // Open state sync\n this._open$.pipe(\n tap(open => this._open = open),\n takeUntil(this.disconnecting)\n ).subscribe()\n }\n\n private _setupDocumentClickHandler() {\n this._documentClick$.pipe(\n filter(e => !e.composedPath().includes(this)),\n filter(e => !this._options.some(opt => e.composedPath().includes(opt))),\n filter(() => this._open),\n tap(() => {\n this._open$.next(false)\n this._updateInputDisplay()\n }),\n takeUntil(this.disconnecting)\n ).subscribe()\n\n this._open$.pipe(\n distinctUntilChanged(),\n switchMap(open => \n open \n ? timer(10).pipe(\n tap(() => document.addEventListener('click', e => this._documentClick$.next(e))),\n switchMap(() => EMPTY)\n )\n : of(null).pipe(\n tap(() => document.removeEventListener('click', e => this._documentClick$.next(e)))\n )\n ),\n takeUntil(this.disconnecting)\n ).subscribe()\n }\n\n private _setupAutofillDetection() {\n // Enhanced autofill detection with fuzzy matching\n merge(\n timer(100, 500).pipe(take(10)),\n this._checkAutofill$,\n timer(100).pipe(\n switchMap(() => \n fromEvent(window, 'load').pipe(startWith(null))\n )\n )\n ).pipe(\n map(() => {\n const schInput = this._inputElementRef.value\n if (!schInput) return null\n return schInput.shadowRoot?.querySelector('input') || \n schInput.querySelector('input') ||\n (schInput as any)._inputRef?.value\n }),\n filter(input => !!input),\n map(input => (input as HTMLInputElement).value),\n filter(value => !!value && value.trim().length > 0),\n distinctUntilChanged(),\n withLatestFrom(this._options$),\n tap(([autofilledValue, options]) => {\n console.log('Autofill detected:', autofilledValue)\n \n // Use fuzzy matching to find best matching option\n let bestMatch: SchmancyOption | null = null\n let bestScore = 0\n \n options.forEach(option => {\n const optionLabel = option.label || option.textContent || ''\n const optionValue = option.value\n \n // Calculate similarity scores\n const labelScore = similarity(autofilledValue, optionLabel)\n const valueScore = similarity(autofilledValue, optionValue)\n \n // Use the higher score\n const score = Math.max(labelScore, valueScore)\n \n // Keep track of best match\n if (score > bestScore && score >= this.similarityThreshold) {\n bestScore = score\n bestMatch = option\n }\n })\n\n if (bestMatch) {\n console.log('Found matching option:', bestMatch.value, 'with score:', bestScore)\n \n // Select the option\n if (this.multi) {\n this._selectedValues$.next([bestMatch.value])\n } else {\n this._selectedValue$.next(bestMatch.value)\n }\n \n // Update input to show the label\n const displayValue = bestMatch.label || bestMatch.textContent || ''\n this._inputValue = displayValue\n this._inputValue$.next(displayValue)\n \n // Update the actual input element\n const input = this._inputElementRef.value\n if (input) {\n input.value = displayValue\n }\n \n // Close dropdown if open\n this._open$.next(false)\n \n // Fire change event\n this._fireChangeEvent()\n \n // Announce to screen reader\n this._announceToScreenReader(`Autofilled: ${displayValue}`)\n }\n }),\n takeUntil(this.disconnecting)\n ).subscribe()\n\n // Chrome autofill animation detection\n timer(100).pipe(\n map(() => {\n const schInput = this._inputElementRef.value\n if (!schInput) return null\n return schInput.shadowRoot?.querySelector('input') || \n schInput.querySelector('input') ||\n (schInput as any)._inputRef?.value\n }),\n filter(input => !!input),\n switchMap(input => {\n return fromEvent<AnimationEvent>(input!, 'animationstart').pipe(\n filter(e => e.animationName === 'onAutoFillStart'),\n tap(() => {\n console.log('Chrome autofill animation detected')\n timer(100).pipe(\n tap(() => this._checkAutofill$.next()),\n take(1)\n ).subscribe()\n })\n )\n }),\n takeUntil(this.disconnecting)\n ).subscribe()\n }\n\n private _updateInputDisplay() {\n of(null).pipe(\n withLatestFrom(\n this._selectedValue$,\n this._selectedValues$,\n this._options$,\n this._open$\n ),\n tap(([, selectedValue, selectedValues, options, isOpen]) => {\n if (!this._inputElementRef.value) return\n\n if (!isOpen || !this.multi) {\n if (this.multi) {\n const labels = options\n .filter(opt => selectedValues.includes(opt.value))\n .map(opt => opt.label || opt.textContent || '')\n this._inputValue = labels.join(', ')\n } else {\n const option = options.find(opt => opt.value === selectedValue)\n this._inputValue = option ? option.label || option.textContent || '' : ''\n }\n this._inputValue$.next(this._inputValue)\n this._inputElementRef.value.value = this._inputValue\n }\n }),\n take(1)\n ).subscribe()\n }\n\n private _getSelectedLabels(): string[] {\n return this._options\n .filter(option => \n this.multi \n ? this._selectedValues$.value.includes(option.value)\n : option.value === this._selectedValue$.value\n )\n .map(option => option.label || option.textContent || '')\n }\n\n private _announceToScreenReader(message: string) {\n const liveRegion = this.shadowRoot?.querySelector('#live-status')\n if (liveRegion) {\n liveRegion.textContent = message\n }\n }\n\n private _fireChangeEvent() {\n const detail: SchmancyAutocompleteChangeEvent['detail'] = {\n value: this.value,\n }\n\n if (this.multi) {\n detail.values = [...this._selectedValues$.value]\n }\n\n this.dispatchEvent(\n new CustomEvent<SchmancyAutocompleteChangeEvent['detail']>('change', {\n detail,\n bubbles: true,\n composed: true,\n })\n )\n }\n\n public checkValidity(): boolean {\n if (!this.required) return true\n return this.multi \n ? this._selectedValues$.value.length > 0 \n : Boolean(this._selectedValue$.value)\n }\n\n public reportValidity(): boolean {\n if (this._inputElementRef.value) {\n return this._inputElementRef.value.reportValidity()\n }\n return this.checkValidity()\n }\n\n firstUpdated() {\n timer(200).pipe(\n tap(() => this._checkAutofill$.next()),\n take(1)\n ).subscribe()\n \n this._options$.pipe(\n filter(options => options.length > 0),\n tap(() => this._checkAutofill$.next()),\n takeUntil(this.disconnecting)\n ).subscribe()\n }\n\n render() {\n const descriptionId = `${this.id}-desc`\n\n return html`\n <div class=\"relative\">\n <!-- Screen reader live region -->\n <div id=\"live-status\" role=\"status\" aria-live=\"polite\" class=\"sr-only\"></div>\n\n <!-- Description -->\n ${this.description ? html`<div id=\"${descriptionId}\" class=\"sr-only\">${this.description}</div>` : ''}\n\n <!-- Input -->\n <slot name=\"trigger\">\n <sch-input\n .size=${this.size}\n ${ref(this._inputElementRef)}\n id=\"autocomplete-input\"\n class=\"w-full\"\n .name=${this.name || this.label?.toLowerCase().replace(/\\s+/g, '-')}\n .label=${this.label}\n .placeholder=${this.placeholder}\n .required=${this.required}\n .value=${this._inputValue}\n type=\"text\"\n autocomplete=${this.autocomplete}\n clickable\n role=\"combobox\"\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n aria-controls=\"options\"\n aria-expanded=${this._open}\n aria-describedby=${this.description ? descriptionId : undefined}\n @input=${(e: Event) => {\n const value = (e.target as HTMLInputElement).value\n this._inputValue = value\n this._inputValue$.next(value)\n }}\n @focus=${(e: FocusEvent) => {\n e.stopPropagation()\n \n const hasSelection = this.multi \n ? this._selectedValues$.value.length > 0\n : !!this._selectedValue$.value\n \n if (this.multi && !hasSelection) {\n this._inputValue = ''\n this._inputValue$.next('')\n if (this._inputElementRef.value) {\n this._inputElementRef.value.value = ''\n }\n }\n \n this._open$.next(true)\n }}\n @click=${(e: MouseEvent) => {\n e.stopPropagation()\n this._open$.next(true)\n }}\n @keydown=${(e: KeyboardEvent) => {\n this._handleKeyDown(e)\n }}\n >\n </sch-input>\n </slot>\n\n <!-- Options dropdown -->\n <ul\n id=\"options\"\n class=${classMap({\n 'absolute': true,\n 'z-[1000]': true,\n 'mt-1': true,\n 'w-full': true,\n 'rounded-md': true,\n 'shadow-md': true,\n 'overflow-auto': true,\n 'min-w-full': true,\n 'bg-surface-low': true,\n 'flex': true,\n 'flex-col': true, // Enable flexbox for ordering\n })}\n role=\"listbox\"\n aria-multiselectable=${this.multi ? 'true' : 'false'}\n aria-label=${`${this.label || 'Options'} dropdown`}\n ?hidden=${!this._open}\n style=\"max-height: ${this.maxHeight}; display: ${this._open ? 'flex' : 'none'};\"\n @slotchange=${() => {\n this._options$.next(this._options)\n timer(100).pipe(\n tap(() => this._checkAutofill$.next()),\n take(1)\n ).subscribe()\n }}\n >\n <slot></slot>\n ${!this._hasResults ? html`\n <li class=\"px-3 py-2 text-sm text-muted\">No results found</li>\n ` : ''}\n </ul>\n </div>\n\n <style>\n :host {\n display: block;\n }\n\n @keyframes onAutoFillStart {\n from {/**/}\n to {/**/}\n }\n\n sch-input::part(input):-webkit-autofill,\n sch-input input:-webkit-autofill {\n animation-name: onAutoFillStart;\n animation-duration: 1ms;\n }\n </style>\n `\n }\n\n private _handleKeyDown(_e: KeyboardEvent) {\n fromEvent<KeyboardEvent>(document, 'keydown').pipe(\n take(1),\n withLatestFrom(this._open$, this._options$),\n tap(([event, isOpen, options]) => {\n if (!isOpen && (event.key === 'ArrowDown' || event.key === 'Enter')) {\n event.preventDefault()\n this._open$.next(true)\n \n timer(10).pipe(\n tap(() => {\n const firstVisible = options.find(opt => !opt.hidden)\n firstVisible?.focus()\n }),\n take(1)\n ).subscribe()\n return\n }\n\n if (!isOpen) return\n\n const visibleOptions = options.filter(opt => !opt.hidden)\n .sort((a, b) => parseInt(a.style.order || '0') - parseInt(b.style.order || '0'))\n \n const focusedOption = visibleOptions.find(opt => opt === document.activeElement)\n const currentIndex = focusedOption ? visibleOptions.indexOf(focusedOption) : -1\n\n switch (event.key) {\n case 'Escape':\n event.preventDefault()\n this._open$.next(false)\n this._updateInputDisplay()\n this._inputElementRef.value?.focus()\n break\n\n case 'Tab':\n this._open$.next(false)\n this._updateInputDisplay()\n break\n\n case 'ArrowDown':\n event.preventDefault()\n const nextIndex = currentIndex < visibleOptions.length - 1 ? currentIndex + 1 : 0\n visibleOptions[nextIndex]?.focus()\n break\n\n case 'ArrowUp':\n event.preventDefault()\n const prevIndex = currentIndex > 0 ? currentIndex - 1 : visibleOptions.length - 1\n visibleOptions[prevIndex]?.focus()\n break\n\n case 'Home':\n event.preventDefault()\n visibleOptions[0]?.focus()\n break\n\n case 'End':\n event.preventDefault()\n visibleOptions[visibleOptions.length - 1]?.focus()\n break\n\n case 'Enter':\n case ' ':\n if (focusedOption) {\n event.preventDefault()\n this._optionSelect$.next(focusedOption)\n }\n break\n }\n })\n ).subscribe()\n }\n}\n\n\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'schmancy-autocomplete': SchmancyAutocomplete\n }\n}"],"names":["similarity","query","target","normalizedQuery","toLowerCase","trim","normalizedTarget","startsWith","length","words","split","word","indexOf","includes","sub","str","i","j","diceScore","s1","s2","bigrams1","getBigrams","bigrams2","intersection","used","Array","fill","bigram","maxLength","Math","max","levenshteinDistance","a","b","matrix","cost","min","levenshteinScore","anagramScore","countChars","s","reduce","acc","char","queryCount","targetCount","Object","keys","every","bigrams","push","substring","SchmancyAutocomplete","$LitElement","constructor","super","arguments","this","required","placeholder","label","name","maxHeight","multi","description","size","autocomplete","debounceMs","similarityThreshold","_open","_inputValue","_visibleOptionsCount","_hasResults","_inputElementRef","createRef","_selectedValue$","BehaviorSubject","_selectedValues$","_inputValue$","_open$","_options$","_optionSelect$","Subject","_documentClick$","_checkAutofill$","values","value","vals","next","isArray","join","val","map","v","filter","Boolean","connectedCallback","id","random","toString","slice","_setupAutocompleteLogic","_setupDocumentClickHandler","_setupAutofillDetection","pipe","tap","options","forEach","option","index","setAttribute","tabIndex","hasAttribute","fromEvent","e","stopPropagation","takeUntil","disconnecting","subscribe","combineLatest","selectedValue","selectedValues","selected","String","distinctUntilChanged","debounceTime","withLatestFrom","searchTerm","isOpen","term","scoredOptions","optionLabel","textContent","optionValue","labelScore","valueScore","score","sort","visibleCount","item","hidden","style","order","_announceToScreenReader","_","currentValues","newValues","labels","_getSelectedLabels","timer","blur","take","_fireChangeEvent","opt","find","open","composedPath","_options","some","_updateInputDisplay","switchMap","document","addEventListener","EMPTY","of","removeEventListener","merge","window","startWith","schInput","shadowRoot","querySelector","_inputRef","input","autofilledValue","bestMatch","bestScore","displayValue","animationName","message","liveRegion","detail","dispatchEvent","CustomEvent","bubbles","composed","reportValidity","checkValidity","render","descriptionId","html","ref","replace","hasSelection","_handleKeyDown","classMap","absolute","flex","_e","event","key","preventDefault","firstVisible","focus","visibleOptions","parseInt","focusedOption","activeElement","currentIndex","nextIndex","prevIndex","__decorateClass","property","type","prototype","reflect","Number","state","queryAssignedElements","flatten","customElement"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"autocomplete-C2MgBZdi.cjs","sources":["../src/utils/search.ts","../src/autocomplete/autocomplete.ts"],"sourcesContent":["/**\n * Calculate similarity score between two strings.\n * Returns a value between 0 (no match) and 1 (exact match).\n * Optimized for autocomplete with prioritization of start matches and whole words.\n *\n * @param query The search query string\n * @param target The target string to compare against\n * @returns A similarity score from 0 to 1\n */\nexport function similarity(query: string, target: string): number {\n\t// Handle edge cases\n\tif (!query || !target) return 0\n\tif (query === target) return 1\n\n\t// Normalize strings for comparison\n\tconst normalizedQuery = query.toLowerCase().trim()\n\tconst normalizedTarget = target.toLowerCase().trim()\n\n\t// 1. Exact match (case-insensitive)\n\tif (normalizedQuery === normalizedTarget) return 1\n\n\t// 2. Target starts with query (highest priority for autocomplete)\n\tif (normalizedTarget.startsWith(normalizedQuery)) {\n\t\t// Give higher score to shorter targets (more precise matches)\n\t\tconst lengthRatio = normalizedQuery.length / normalizedTarget.length\n\t\treturn 0.95 + (lengthRatio * 0.05) // Score between 0.95 and 1.0\n\t}\n\n\t// 3. Word boundary match (query matches start of any word in target)\n\tconst words = normalizedTarget.split(/[\\s\\-_]+/)\n\tfor (const word of words) {\n\t\tif (word.startsWith(normalizedQuery)) {\n\t\t\t// Score based on which word matched (earlier words score higher)\n\t\t\tconst wordIndex = words.indexOf(word)\n\t\t\tconst wordPositionScore = 1 - (wordIndex / words.length) * 0.1\n\t\t\treturn 0.85 * wordPositionScore // Score between 0.765 and 0.85\n\t\t}\n\t}\n\n\t// 4. Direct substring match (query appears anywhere in target)\n\tif (normalizedTarget.includes(normalizedQuery)) {\n\t\t// Score based on position (earlier position scores higher)\n\t\tconst position = normalizedTarget.indexOf(normalizedQuery)\n\t\tconst positionScore = 1 - (position / normalizedTarget.length) * 0.2\n\t\treturn 0.7 * positionScore // Score between 0.56 and 0.7\n\t}\n\n\t// 5. Subsequence check (all query chars appear in order)\n\tif (isSubsequence(normalizedQuery, normalizedTarget)) {\n\t\treturn 0.5\n\t}\n\n\t// 6. Fuzzy matching for typos\n\t// 6a. Dice coefficient (good for similar words)\n\tconst diceScore = diceCoefficient(normalizedQuery, normalizedTarget)\n\t\n\t// 6b. Levenshtein distance (good for typos)\n\tconst maxLength = Math.max(normalizedQuery.length, normalizedTarget.length)\n\tconst levenshteinDistance = calculateLevenshtein(normalizedQuery, normalizedTarget)\n\tconst levenshteinScore = maxLength ? 1 - levenshteinDistance / maxLength : 0\n\n\t// 6c. Character frequency match (anagram-like)\n\tconst anagramScore = hasAllCharacters(normalizedQuery, normalizedTarget) ? 0.3 : 0\n\n\t// Combine fuzzy scores with weights\n\tconst fuzzyScore = Math.max(\n\t\tdiceScore * 0.4,\n\t\tlevenshteinScore * 0.4,\n\t\tanagramScore\n\t)\n\n\treturn fuzzyScore\n}\n\n// Keep the rest of the helper functions as they are...\n/**\n * Check if string 'sub' is a subsequence of string 'str'.\n * All characters in 'sub' must appear in order in 'str'.\n */\nfunction isSubsequence(sub: string, str: string): boolean {\n\tlet i = 0,\n\t\tj = 0\n\twhile (i < sub.length && j < str.length) {\n\t\tif (sub[i] === str[j]) i++\n\t\tj++\n\t}\n\treturn i === sub.length\n}\n\n/**\n * Check if all characters in 'query' are present in 'target'.\n * For example, \"aovc\" matches \"avocados\" (anagram subset matching).\n */\nfunction hasAllCharacters(query: string, target: string): boolean {\n\tconst countChars = (s: string): Record<string, number> => {\n\t\treturn s.split('').reduce(\n\t\t\t(acc, char) => {\n\t\t\t\tacc[char] = (acc[char] || 0) + 1\n\t\t\t\treturn acc\n\t\t\t},\n\t\t\t{} as Record<string, number>,\n\t\t)\n\t}\n\n\tconst queryCount = countChars(query)\n\tconst targetCount = countChars(target)\n\n\treturn Object.keys(queryCount).every(char => (targetCount[char] || 0) >= queryCount[char])\n}\n\n/**\n * Generate bigrams for a string.\n * A bigram is a sequence of two adjacent characters.\n */\nfunction getBigrams(s: string): string[] {\n\tconst bigrams = []\n\tfor (let i = 0; i < s.length - 1; i++) {\n\t\tbigrams.push(s.substring(i, i + 2))\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 */\nfunction diceCoefficient(s1: string, s2: string): number {\n\tif (s1.length < 2 || s2.length < 2) return 0\n\n\tconst bigrams1 = getBigrams(s1)\n\tconst bigrams2 = getBigrams(s2)\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 * Calculate Levenshtein distance between two strings.\n */\nfunction calculateLevenshtein(a: string, b: string): number {\n\tif (a.length === 0) return b.length\n\tif (b.length === 0) return a.length\n\n\tconst matrix: number[][] = []\n\n\t// Initialize the matrix\n\tfor (let i = 0; i <= b.length; i++) {\n\t\tmatrix[i] = [i]\n\t}\n\tfor (let j = 0; j <= a.length; j++) {\n\t\tmatrix[0][j] = j\n\t}\n\n\t// Calculate distances\n\tfor (let i = 1; i <= b.length; i++) {\n\t\tfor (let j = 1; j <= a.length; j++) {\n\t\t\tconst cost = a[j - 1] === b[i - 1] ? 0 : 1\n\t\t\tmatrix[i][j] = Math.min(\n\t\t\t\tmatrix[i - 1][j] + 1, // deletion\n\t\t\t\tmatrix[i][j - 1] + 1, // insertion\n\t\t\t\tmatrix[i - 1][j - 1] + cost, // substitution\n\t\t\t)\n\t\t}\n\t}\n\n\treturn matrix[b.length][a.length]\n}\n","import { $LitElement } from '@mixins/index'\nimport { InputSize } from '@schmancy/input'\nimport SchmancyInputV2 from '@schmancy/input/input-v2'\nimport SchmancyOption from '@schmancy/option/option'\nimport { html } from 'lit'\nimport { customElement, property, query, queryAssignedElements, state } from 'lit/decorators.js'\nimport { classMap } from 'lit/directives/class-map.js'\nimport { createRef, ref } from 'lit/directives/ref.js'\nimport {\n BehaviorSubject,\n combineLatest,\n EMPTY,\n fromEvent,\n merge,\n of,\n Subject,\n timer\n} from 'rxjs'\nimport {\n debounceTime,\n distinctUntilChanged,\n filter,\n map,\n startWith,\n switchMap,\n take,\n takeUntil,\n tap,\n withLatestFrom\n} from 'rxjs/operators'\nimport style from './autocomplete.scss?inline'\n\n// Import the similarity function (or include it inline)\nimport { similarity } from '../utils/search'\n\nexport type SchmancyAutocompleteChangeEvent = CustomEvent<{\n value: string | string[]\n values?: string[]\n}>\n\ninterface FilteredOption {\n option: SchmancyOption\n score: number\n}\n\n@customElement('schmancy-autocomplete')\nexport default class SchmancyAutocomplete extends $LitElement(style) {\n // Public API properties\n @property({ type: Boolean }) required = false\n @property({ type: String }) placeholder = ''\n @property({ type: String, reflect: true }) label = ''\n @property({ type: String }) name = ''\n @property({ type: String }) maxHeight = '300px'\n @property({ type: Boolean }) multi = false\n @property({ type: String }) description = ''\n @property({ type: String, reflect: true }) size: InputSize = 'md'\n @property({ type: String }) autocomplete = 'on'\n @property({ type: Number }) debounceMs = 200\n @property({ type: Number }) similarityThreshold = 0.3 // Minimum similarity score to show option\n\n // Values property for multi-select mode\n @property({ type: Array })\n get values() {\n return [...this._selectedValues$.value]\n }\n set values(vals: string[]) {\n this._selectedValues$.next(Array.isArray(vals) ? [...vals] : [])\n }\n\n // Value property\n @property({ type: String, reflect: true })\n get value() {\n return this.multi \n ? this._selectedValues$.value.join(',')\n : this._selectedValue$.value\n }\n set value(val: string) {\n if (this.multi) {\n this._selectedValues$.next(\n val ? val.split(',').map(v => v.trim()).filter(Boolean) : []\n )\n } else {\n this._selectedValue$.next(val)\n }\n }\n\n // State\n @state() private _open = false\n @state() private _inputValue = ''\n @state() private _visibleOptionsCount = 0\n @state() private _hasResults = true\n\n // DOM references\n @query('#options') _listbox!: HTMLUListElement\n @query('sch-input') _input!: SchmancyInputV2\n @queryAssignedElements({ flatten: true }) private _options!: SchmancyOption[]\n private _inputElementRef = createRef<HTMLInputElement>()\n\n // RxJS Subjects\n private _selectedValue$ = new BehaviorSubject<string>('')\n private _selectedValues$ = new BehaviorSubject<string[]>([])\n private _inputValue$ = new BehaviorSubject<string>('')\n private _open$ = new BehaviorSubject<boolean>(false)\n private _options$ = new BehaviorSubject<SchmancyOption[]>([])\n private _optionSelect$ = new Subject<SchmancyOption>()\n private _documentClick$ = new Subject<MouseEvent>()\n private _checkAutofill$ = new Subject<void>()\n\n connectedCallback() {\n super.connectedCallback()\n \n if (!this.id) {\n this.id = `sch-autocomplete-${Math.random().toString(36).slice(2, 9)}`\n }\n\n this._setupAutocompleteLogic()\n this._setupDocumentClickHandler()\n this._setupAutofillDetection()\n }\n\n private _setupAutocompleteLogic() {\n // Options management pipeline\n this._options$.pipe(\n tap(options => {\n options.forEach((option, index) => {\n option.setAttribute('role', 'option')\n option.tabIndex = -1\n if (!option.id) {\n option.id = `${this.id}-option-${index}`\n }\n if (!option.hasAttribute('data-event-bound')) {\n fromEvent(option, 'click').pipe(\n tap(e => e.stopPropagation()),\n takeUntil(this.disconnecting)\n ).subscribe(() => this._optionSelect$.next(option))\n option.setAttribute('data-event-bound', 'true')\n }\n })\n }),\n takeUntil(this.disconnecting)\n ).subscribe()\n\n // Selection sync pipeline\n combineLatest([\n this._selectedValue$,\n this._selectedValues$,\n this._options$\n ]).pipe(\n tap(([selectedValue, selectedValues, options]) => {\n options.forEach(option => {\n option.selected = this.multi \n ? selectedValues.includes(option.value)\n : option.value === selectedValue\n option.setAttribute('aria-selected', String(option.selected))\n })\n }),\n takeUntil(this.disconnecting)\n ).subscribe()\n\n // Enhanced fuzzy filtering pipeline\n this._inputValue$.pipe(\n distinctUntilChanged(),\n debounceTime(this.debounceMs),\n withLatestFrom(this._options$, this._open$),\n tap(([searchTerm, options, isOpen]) => {\n if (!isOpen) return\n\n const term = searchTerm.trim()\n \n if (!term) {\n // Show all options if no search term\n options.forEach(option => {\n option.hidden = false\n option.style.order = '0' // Reset order\n })\n this._visibleOptionsCount = options.length\n this._hasResults = true\n } else {\n // Calculate similarity scores for all options\n const scoredOptions: FilteredOption[] = options.map(option => {\n // Get text to search in (prioritize label, then textContent, then value)\n const optionLabel = option.label || option.textContent || ''\n const optionValue = option.value\n \n // Calculate similarity scores for both label and value\n const labelScore = similarity(term, optionLabel)\n const valueScore = similarity(term, optionValue)\n \n // Use the higher score (prioritizing label matches)\n const score = Math.max(labelScore * 1.1, valueScore) // Slight boost for label matches\n \n return { option, score }\n })\n \n // Sort by score (highest first)\n scoredOptions.sort((a, b) => b.score - a.score)\n \n // Apply visibility and ordering\n let visibleCount = 0\n scoredOptions.forEach((item, index) => {\n const { option, score } = item\n \n // Hide options below threshold\n if (score < this.similarityThreshold) {\n option.hidden = true\n } else {\n option.hidden = false\n visibleCount++\n // Use CSS order to sort visible options by relevance\n option.style.order = String(index)\n }\n })\n \n this._visibleOptionsCount = visibleCount\n this._hasResults = visibleCount > 0\n }\n \n this._announceToScreenReader(\n this._visibleOptionsCount > 0 \n ? `${this._visibleOptionsCount} option${this._visibleOptionsCount === 1 ? '' : 's'} available.`\n : 'No results found.'\n )\n }),\n takeUntil(this.disconnecting)\n ).subscribe()\n\n // Option selection pipeline\n this._optionSelect$.pipe(\n withLatestFrom(this._selectedValue$, this._selectedValues$),\n tap(([option, _, currentValues]) => {\n if (this.multi) {\n const index = currentValues.indexOf(option.value)\n const newValues = index > -1\n ? [...currentValues.slice(0, index), ...currentValues.slice(index + 1)]\n : [...currentValues, option.value]\n this._selectedValues$.next(newValues)\n \n this._inputValue$.next('')\n this._inputValue = ''\n \n const labels = this._getSelectedLabels()\n this._announceToScreenReader(\n labels.length > 0 \n ? `Selected: ${labels.join(', ')}`\n : 'No options selected'\n )\n } else {\n this._selectedValue$.next(option.value)\n this._open$.next(false)\n this._open = false\n \n this._inputValue = option.label || option.textContent || ''\n this._inputValue$.next(this._inputValue)\n \n timer(100).pipe(\n tap(() => this._inputElementRef.value?.blur()),\n take(1)\n ).subscribe()\n \n this._announceToScreenReader(`Selected: ${option.label || option.textContent}`)\n }\n }),\n tap(() => this._fireChangeEvent()),\n takeUntil(this.disconnecting)\n ).subscribe()\n\n // Display update pipeline\n combineLatest([\n this._open$,\n this._selectedValue$,\n this._selectedValues$,\n this._options$\n ]).pipe(\n filter(() => !this._open$.value),\n tap(([, selectedValue, selectedValues, options]) => {\n if (this.multi) {\n const labels = options\n .filter(opt => selectedValues.includes(opt.value))\n .map(opt => opt.label || opt.textContent || '')\n this._inputValue = labels.join(', ')\n } else {\n const option = options.find(opt => opt.value === selectedValue)\n this._inputValue = option ? option.label || option.textContent || '' : ''\n }\n this._inputValue$.next(this._inputValue)\n }),\n takeUntil(this.disconnecting)\n ).subscribe()\n\n // Open state sync\n this._open$.pipe(\n tap(open => this._open = open),\n takeUntil(this.disconnecting)\n ).subscribe()\n }\n\n private _setupDocumentClickHandler() {\n this._documentClick$.pipe(\n filter(e => !e.composedPath().includes(this)),\n filter(e => !this._options.some(opt => e.composedPath().includes(opt))),\n filter(() => this._open),\n tap(() => {\n this._open$.next(false)\n this._updateInputDisplay()\n }),\n takeUntil(this.disconnecting)\n ).subscribe()\n\n this._open$.pipe(\n distinctUntilChanged(),\n switchMap(open => \n open \n ? timer(10).pipe(\n tap(() => document.addEventListener('click', e => this._documentClick$.next(e))),\n switchMap(() => EMPTY)\n )\n : of(null).pipe(\n tap(() => document.removeEventListener('click', e => this._documentClick$.next(e)))\n )\n ),\n takeUntil(this.disconnecting)\n ).subscribe()\n }\n\n private _setupAutofillDetection() {\n // Enhanced autofill detection with fuzzy matching\n merge(\n timer(100, 500).pipe(take(10)),\n this._checkAutofill$,\n timer(100).pipe(\n switchMap(() => \n fromEvent(window, 'load').pipe(startWith(null))\n )\n )\n ).pipe(\n map(() => {\n const schInput = this._inputElementRef.value\n if (!schInput) return null\n return schInput.shadowRoot?.querySelector('input') || \n schInput.querySelector('input') ||\n (schInput as any)._inputRef?.value\n }),\n filter(input => !!input),\n map(input => (input as HTMLInputElement).value),\n filter(value => !!value && value.trim().length > 0),\n distinctUntilChanged(),\n withLatestFrom(this._options$),\n tap(([autofilledValue, options]) => {\n console.log('Autofill detected:', autofilledValue)\n \n // Use fuzzy matching to find best matching option\n let bestMatch: SchmancyOption | null = null\n let bestScore = 0\n \n options.forEach(option => {\n const optionLabel = option.label || option.textContent || ''\n const optionValue = option.value\n \n // Calculate similarity scores\n const labelScore = similarity(autofilledValue, optionLabel)\n const valueScore = similarity(autofilledValue, optionValue)\n \n // Use the higher score\n const score = Math.max(labelScore, valueScore)\n \n // Keep track of best match\n if (score > bestScore && score >= this.similarityThreshold) {\n bestScore = score\n bestMatch = option\n }\n })\n\n if (bestMatch) {\n console.log('Found matching option:', bestMatch.value, 'with score:', bestScore)\n \n // Select the option\n if (this.multi) {\n this._selectedValues$.next([bestMatch.value])\n } else {\n this._selectedValue$.next(bestMatch.value)\n }\n \n // Update input to show the label\n const displayValue = bestMatch.label || bestMatch.textContent || ''\n this._inputValue = displayValue\n this._inputValue$.next(displayValue)\n \n // Update the actual input element\n const input = this._inputElementRef.value\n if (input) {\n input.value = displayValue\n }\n \n // Close dropdown if open\n this._open$.next(false)\n \n // Fire change event\n this._fireChangeEvent()\n \n // Announce to screen reader\n this._announceToScreenReader(`Autofilled: ${displayValue}`)\n }\n }),\n takeUntil(this.disconnecting)\n ).subscribe()\n\n // Chrome autofill animation detection\n timer(100).pipe(\n map(() => {\n const schInput = this._inputElementRef.value\n if (!schInput) return null\n return schInput.shadowRoot?.querySelector('input') || \n schInput.querySelector('input') ||\n (schInput as any)._inputRef?.value\n }),\n filter(input => !!input),\n switchMap(input => {\n return fromEvent<AnimationEvent>(input!, 'animationstart').pipe(\n filter(e => e.animationName === 'onAutoFillStart'),\n tap(() => {\n console.log('Chrome autofill animation detected')\n timer(100).pipe(\n tap(() => this._checkAutofill$.next()),\n take(1)\n ).subscribe()\n })\n )\n }),\n takeUntil(this.disconnecting)\n ).subscribe()\n }\n\n private _updateInputDisplay() {\n of(null).pipe(\n withLatestFrom(\n this._selectedValue$,\n this._selectedValues$,\n this._options$,\n this._open$\n ),\n tap(([, selectedValue, selectedValues, options, isOpen]) => {\n if (!this._inputElementRef.value) return\n\n if (!isOpen || !this.multi) {\n if (this.multi) {\n const labels = options\n .filter(opt => selectedValues.includes(opt.value))\n .map(opt => opt.label || opt.textContent || '')\n this._inputValue = labels.join(', ')\n } else {\n const option = options.find(opt => opt.value === selectedValue)\n this._inputValue = option ? option.label || option.textContent || '' : ''\n }\n this._inputValue$.next(this._inputValue)\n this._inputElementRef.value.value = this._inputValue\n }\n }),\n take(1)\n ).subscribe()\n }\n\n private _getSelectedLabels(): string[] {\n return this._options\n .filter(option => \n this.multi \n ? this._selectedValues$.value.includes(option.value)\n : option.value === this._selectedValue$.value\n )\n .map(option => option.label || option.textContent || '')\n }\n\n private _announceToScreenReader(message: string) {\n const liveRegion = this.shadowRoot?.querySelector('#live-status')\n if (liveRegion) {\n liveRegion.textContent = message\n }\n }\n\n private _fireChangeEvent() {\n const detail: SchmancyAutocompleteChangeEvent['detail'] = {\n value: this.value,\n }\n\n if (this.multi) {\n detail.values = [...this._selectedValues$.value]\n }\n\n this.dispatchEvent(\n new CustomEvent<SchmancyAutocompleteChangeEvent['detail']>('change', {\n detail,\n bubbles: true,\n composed: true,\n })\n )\n }\n\n public checkValidity(): boolean {\n if (!this.required) return true\n return this.multi \n ? this._selectedValues$.value.length > 0 \n : Boolean(this._selectedValue$.value)\n }\n\n public reportValidity(): boolean {\n if (this._inputElementRef.value) {\n return this._inputElementRef.value.reportValidity()\n }\n return this.checkValidity()\n }\n\n firstUpdated() {\n timer(200).pipe(\n tap(() => this._checkAutofill$.next()),\n take(1)\n ).subscribe()\n \n this._options$.pipe(\n filter(options => options.length > 0),\n tap(() => this._checkAutofill$.next()),\n takeUntil(this.disconnecting)\n ).subscribe()\n }\n\n render() {\n const descriptionId = `${this.id}-desc`\n\n return html`\n <div class=\"relative\">\n <!-- Screen reader live region -->\n <div id=\"live-status\" role=\"status\" aria-live=\"polite\" class=\"sr-only\"></div>\n\n <!-- Description -->\n ${this.description ? html`<div id=\"${descriptionId}\" class=\"sr-only\">${this.description}</div>` : ''}\n\n <!-- Input -->\n <slot name=\"trigger\">\n <sch-input\n .size=${this.size}\n ${ref(this._inputElementRef)}\n id=\"autocomplete-input\"\n class=\"w-full\"\n .name=${this.name || this.label?.toLowerCase().replace(/\\s+/g, '-')}\n .label=${this.label}\n .placeholder=${this.placeholder}\n .required=${this.required}\n .value=${this._inputValue}\n type=\"text\"\n autocomplete=${this.autocomplete}\n clickable\n role=\"combobox\"\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n aria-controls=\"options\"\n aria-expanded=${this._open}\n aria-describedby=${this.description ? descriptionId : undefined}\n @input=${(e: Event) => {\n const value = (e.target as HTMLInputElement).value\n this._inputValue = value\n this._inputValue$.next(value)\n }}\n @focus=${(e: FocusEvent) => {\n e.stopPropagation()\n \n const hasSelection = this.multi \n ? this._selectedValues$.value.length > 0\n : !!this._selectedValue$.value\n \n if (this.multi && !hasSelection) {\n this._inputValue = ''\n this._inputValue$.next('')\n if (this._inputElementRef.value) {\n this._inputElementRef.value.value = ''\n }\n }\n \n this._open$.next(true)\n }}\n @click=${(e: MouseEvent) => {\n e.stopPropagation()\n this._open$.next(true)\n }}\n @keydown=${(e: KeyboardEvent) => {\n this._handleKeyDown(e)\n }}\n >\n </sch-input>\n </slot>\n\n <!-- Options dropdown -->\n <ul\n id=\"options\"\n class=${classMap({\n 'absolute': true,\n 'z-[1000]': true,\n 'mt-1': true,\n 'w-full': true,\n 'rounded-md': true,\n 'shadow-md': true,\n 'overflow-auto': true,\n 'min-w-full': true,\n 'bg-surface-low': true,\n 'flex': true,\n 'flex-col': true, // Enable flexbox for ordering\n })}\n role=\"listbox\"\n aria-multiselectable=${this.multi ? 'true' : 'false'}\n aria-label=${`${this.label || 'Options'} dropdown`}\n ?hidden=${!this._open}\n style=\"max-height: ${this.maxHeight}; display: ${this._open ? 'flex' : 'none'};\"\n @slotchange=${() => {\n this._options$.next(this._options)\n timer(100).pipe(\n tap(() => this._checkAutofill$.next()),\n take(1)\n ).subscribe()\n }}\n >\n <slot></slot>\n ${!this._hasResults ? html`\n <li class=\"px-3 py-2 text-sm text-muted\">No results found</li>\n ` : ''}\n </ul>\n </div>\n\n <style>\n :host {\n display: block;\n }\n\n @keyframes onAutoFillStart {\n from {/**/}\n to {/**/}\n }\n\n sch-input::part(input):-webkit-autofill,\n sch-input input:-webkit-autofill {\n animation-name: onAutoFillStart;\n animation-duration: 1ms;\n }\n </style>\n `\n }\n\n private _handleKeyDown(_e: KeyboardEvent) {\n fromEvent<KeyboardEvent>(document, 'keydown').pipe(\n take(1),\n withLatestFrom(this._open$, this._options$),\n tap(([event, isOpen, options]) => {\n if (!isOpen && (event.key === 'ArrowDown' || event.key === 'Enter')) {\n event.preventDefault()\n this._open$.next(true)\n \n timer(10).pipe(\n tap(() => {\n const firstVisible = options.find(opt => !opt.hidden)\n firstVisible?.focus()\n }),\n take(1)\n ).subscribe()\n return\n }\n\n if (!isOpen) return\n\n const visibleOptions = options.filter(opt => !opt.hidden)\n .sort((a, b) => parseInt(a.style.order || '0') - parseInt(b.style.order || '0'))\n \n const focusedOption = visibleOptions.find(opt => opt === document.activeElement)\n const currentIndex = focusedOption ? visibleOptions.indexOf(focusedOption) : -1\n\n switch (event.key) {\n case 'Escape':\n event.preventDefault()\n this._open$.next(false)\n this._updateInputDisplay()\n this._inputElementRef.value?.focus()\n break\n\n case 'Tab':\n this._open$.next(false)\n this._updateInputDisplay()\n break\n\n case 'ArrowDown':\n event.preventDefault()\n const nextIndex = currentIndex < visibleOptions.length - 1 ? currentIndex + 1 : 0\n visibleOptions[nextIndex]?.focus()\n break\n\n case 'ArrowUp':\n event.preventDefault()\n const prevIndex = currentIndex > 0 ? currentIndex - 1 : visibleOptions.length - 1\n visibleOptions[prevIndex]?.focus()\n break\n\n case 'Home':\n event.preventDefault()\n visibleOptions[0]?.focus()\n break\n\n case 'End':\n event.preventDefault()\n visibleOptions[visibleOptions.length - 1]?.focus()\n break\n\n case 'Enter':\n case ' ':\n if (focusedOption) {\n event.preventDefault()\n this._optionSelect$.next(focusedOption)\n }\n break\n }\n })\n ).subscribe()\n }\n}\n\n\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'schmancy-autocomplete': SchmancyAutocomplete\n }\n}"],"names":["similarity","query","target","normalizedQuery","toLowerCase","trim","normalizedTarget","startsWith","length","words","split","word","indexOf","includes","sub","str","i","j","diceScore","s1","s2","bigrams1","getBigrams","bigrams2","intersection","used","Array","fill","bigram","maxLength","Math","max","levenshteinDistance","a","b","matrix","cost","min","levenshteinScore","anagramScore","countChars","s","reduce","acc","char","queryCount","targetCount","Object","keys","every","bigrams","push","substring","SchmancyAutocomplete","$LitElement","constructor","super","arguments","this","required","placeholder","label","name","maxHeight","multi","description","size","autocomplete","debounceMs","similarityThreshold","_open","_inputValue","_visibleOptionsCount","_hasResults","_inputElementRef","createRef","_selectedValue$","BehaviorSubject","_selectedValues$","_inputValue$","_open$","_options$","_optionSelect$","Subject","_documentClick$","_checkAutofill$","values","value","vals","next","isArray","join","val","map","v","filter","Boolean","connectedCallback","id","random","toString","slice","_setupAutocompleteLogic","_setupDocumentClickHandler","_setupAutofillDetection","pipe","tap","options","forEach","option","index","setAttribute","tabIndex","hasAttribute","fromEvent","e","stopPropagation","takeUntil","disconnecting","subscribe","combineLatest","selectedValue","selectedValues","selected","String","distinctUntilChanged","debounceTime","withLatestFrom","searchTerm","isOpen","term","scoredOptions","optionLabel","textContent","optionValue","labelScore","valueScore","score","sort","visibleCount","item","hidden","style","order","_announceToScreenReader","_","currentValues","newValues","labels","_getSelectedLabels","timer","blur","take","_fireChangeEvent","opt","find","open","composedPath","_options","some","_updateInputDisplay","switchMap","document","addEventListener","EMPTY","of","removeEventListener","merge","window","startWith","schInput","shadowRoot","querySelector","_inputRef","input","autofilledValue","bestMatch","bestScore","displayValue","animationName","message","liveRegion","detail","dispatchEvent","CustomEvent","bubbles","composed","reportValidity","checkValidity","render","descriptionId","html","ref","replace","hasSelection","_handleKeyDown","classMap","absolute","flex","_e","event","key","preventDefault","firstVisible","focus","visibleOptions","parseInt","focusedOption","activeElement","currentIndex","nextIndex","prevIndex","__decorateClass","property","type","prototype","reflect","Number","state","queryAssignedElements","flatten","customElement"],"mappings":"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"}
|
package/dist/autocomplete.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";require("./autocomplete-
|
|
1
|
+
"use strict";require("./autocomplete-C2MgBZdi.cjs");
|
|
2
2
|
//# sourceMappingURL=autocomplete.cjs.map
|
package/dist/autocomplete.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import "./autocomplete-
|
|
1
|
+
import "./autocomplete-BXf34fA-.js";
|
|
2
2
|
//# sourceMappingURL=autocomplete.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";const l=require("lit"),a=require("lit/decorators.js"),n=require("rxjs");require("./animated-text-
|
|
1
|
+
"use strict";const l=require("lit"),a=require("lit/decorators.js"),n=require("rxjs");require("./animated-text-DuL0BVFF.cjs");const k=require("./area.component-DYh2KKnh.cjs");require("./autocomplete-C2MgBZdi.cjs"),require("lit/directives/class-map.js"),require("lit/directives/style-map.js");const x=require("./tailwind.mixin-DWvvleWP.cjs"),g=require("./ripple-C2BHbhcS.cjs");require("./boat-DeEs020x.cjs"),require("./spinner-I_J8koHo.cjs"),require("./icon-button-fT0E5fJN.cjs");const i=require("./theme.interface-Xg5Zi46a.cjs");require("./checkbox-BSndX5zU.cjs"),require("./chips-Do9LFtJA.cjs"),require("./circular-progress-DS6pw54i.cjs"),require("./code-preview-CXO3vsRi.cjs"),require("./payment-card-form-CLRmWodS.cjs");const y=require("./types.cjs"),d=require("./provide-BGGp1Iks.cjs"),b=require("./litElement.mixin-DcYItU_Y.cjs"),m=require("./consume-uKrSupzs.cjs");require("./date-range-B0CSi1D6.cjs"),require("./delay-BV4QWYDw.cjs"),require("./dialog-content-D5kti4-b.cjs"),require("./divider-CEyi1ooH.cjs"),require("./dropdown-content-BoKXumxT.cjs"),require("./timezone-MNEWy4jq.cjs"),require("./form-C-YpNF0Z.cjs"),require("./icon-D_0MYmHT.cjs"),require("./input-y7H2rS_c.cjs"),require("./flex-Dfk62-Dn.cjs"),require("./list-CQCRYpMc.cjs"),require("./menu-DTNNwC3X.cjs");const U=require("lit/directives/when.js");require("./notification-service-Dw1vWE8m.cjs"),require("./option-BkYybtqQ.cjs"),require("./radio-button-b-3WocDM.cjs"),require("./index-DyJ0oDpR.cjs"),require("./select-DsFHJyZw.cjs");const B=require("./sheet-xbPPu7eJ.cjs");require("./slider-DI42q9wf.cjs"),require("./schmancy-steps-container-zat0B8ZS.cjs"),require("./context-object-CP7HbDFQ.cjs");const P=require("rxjs/operators");require("./surface-CgjTa2At.cjs"),require("./table-tMVVNYqd.cjs"),require("./tabs-compatibility-K7hN1FMS.cjs"),require("./textarea-DlxS_YbV.cjs"),require("./theme.component-Bhodmw04.cjs"),require("./theme-button-MLe6lqim.cjs"),require("./tooltip-DXepH6lG.cjs"),require("./tree-BkqvB6rh.cjs"),require("./typewriter-CoOcshun.cjs"),require("./typography-CRa9BYOd.cjs");var F=Object.defineProperty,G=Object.getOwnPropertyDescriptor,v=(e,t,s,o)=>{for(var c,r=o>1?void 0:o?G(t,s):t,h=e.length-1;h>=0;h--)(c=e[h])&&(r=(o?c(t,s,r):c(r))||r);return o&&r&&F(t,s,r),r};exports.SchmancyBadgeV2=class extends x.TailwindElement(l.css`
|
|
2
2
|
:host {
|
|
3
3
|
display: inline-flex;
|
|
4
4
|
}
|
|
@@ -278,4 +278,4 @@
|
|
|
278
278
|
`}getColorAttributes(){const e={primary:{bgColor:i.SchmancyTheme.sys.color.primary.container,color:i.SchmancyTheme.sys.color.primary.onContainer},secondary:{bgColor:i.SchmancyTheme.sys.color.secondary.container,color:i.SchmancyTheme.sys.color.secondary.onContainer},tertiary:{bgColor:i.SchmancyTheme.sys.color.tertiary.container,color:i.SchmancyTheme.sys.color.tertiary.onContainer},success:{bgColor:i.SchmancyTheme.sys.color.success.container,color:i.SchmancyTheme.sys.color.success.onContainer},error:{bgColor:i.SchmancyTheme.sys.color.error.container,color:i.SchmancyTheme.sys.color.error.onContainer},neutral:{bgColor:i.SchmancyTheme.sys.color.surface.container,color:i.SchmancyTheme.sys.color.surface.on}};return g.color(e[this.color])}renderStatusIndicator(){const e={online:i.SchmancyTheme.sys.color.success.default,offline:i.SchmancyTheme.sys.color.surface.onVariant,busy:i.SchmancyTheme.sys.color.error.default,away:i.SchmancyTheme.sys.color.tertiary.default},t={"absolute bottom-0 right-0 rounded-full border-2 border-surface-default":!0,[{xs:"w-1.5 h-1.5",sm:"w-2 h-2",md:"w-2.5 h-2.5",lg:"w-3 h-3",xl:"w-4 h-4"}[this.size]]:!0};return l.html`
|
|
279
279
|
<div class="${this.classMap(t)}" style="background-color: ${e[this.status]};"></div>
|
|
280
280
|
`}},u([a.property({type:String})],exports.SchmancyAvatar.prototype,"initials",2),u([a.property({type:String})],exports.SchmancyAvatar.prototype,"src",2),u([a.property({type:String})],exports.SchmancyAvatar.prototype,"icon",2),u([a.property({type:String})],exports.SchmancyAvatar.prototype,"size",2),u([a.property({type:String})],exports.SchmancyAvatar.prototype,"color",2),u([a.property({type:String})],exports.SchmancyAvatar.prototype,"shape",2),u([a.property({type:Boolean})],exports.SchmancyAvatar.prototype,"bordered",2),u([a.property({type:String})],exports.SchmancyAvatar.prototype,"status",2),exports.SchmancyAvatar=u([a.customElement("schmancy-avatar")],exports.SchmancyAvatar),exports.$drawer=le,exports.HereMorty=H,exports.SchmancyContentDrawerID=R,exports.SchmancyContentDrawerMaxHeight=z,exports.SchmancyContentDrawerMinWidth=N,exports.SchmancyContentDrawerSheetMode=M,exports.SchmancyContentDrawerSheetState=_,exports.SchmancyDrawerNavbarMode=j,exports.SchmancyDrawerNavbarState=W,exports.WhereAreYouRicky=X,exports.schmancyContentDrawer=se,exports.schmancyNavDrawer=Y,exports.teleport=C;
|
|
281
|
-
//# sourceMappingURL=avatar-
|
|
281
|
+
//# sourceMappingURL=avatar-DVN44OzV.cjs.map
|