optikos 0.1.0 → 0.2.0
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/CHANGELOG.md +118 -0
- package/README.md +13 -11
- package/dist/chunk-23XLG2EM.js +2 -0
- package/dist/{chunk-666O2GKD.js.map → chunk-23XLG2EM.js.map} +1 -1
- package/dist/chunk-27UZFEXD.js +2 -0
- package/dist/chunk-27UZFEXD.js.map +7 -0
- package/dist/chunk-2ZRNGG2N.js +2 -0
- package/dist/chunk-2ZRNGG2N.js.map +7 -0
- package/dist/chunk-2ZUZ5HDL.js +2 -0
- package/dist/chunk-2ZUZ5HDL.js.map +7 -0
- package/dist/chunk-3DBEZGOY.js +2 -0
- package/dist/chunk-3DBEZGOY.js.map +7 -0
- package/dist/chunk-3S24ZRPK.js +2 -0
- package/dist/chunk-3S24ZRPK.js.map +7 -0
- package/dist/chunk-3TAW4AKH.js +2 -0
- package/dist/chunk-3TAW4AKH.js.map +7 -0
- package/dist/chunk-4EZJ5FKJ.js +2 -0
- package/dist/{chunk-IHAYOSBR.js.map → chunk-4EZJ5FKJ.js.map} +1 -1
- package/dist/chunk-4LZZ244E.js +2 -0
- package/dist/chunk-4LZZ244E.js.map +7 -0
- package/dist/chunk-4SYIIX5A.js +2 -0
- package/dist/chunk-4SYIIX5A.js.map +7 -0
- package/dist/chunk-5BC72727.js +2 -0
- package/dist/chunk-5BC72727.js.map +7 -0
- package/dist/chunk-5DJTP53N.js +2 -0
- package/dist/{chunk-ODWPBBVL.js.map → chunk-5DJTP53N.js.map} +1 -1
- package/dist/{chunk-NWTTHDIM.js → chunk-5JEXM5S7.js} +2 -2
- package/dist/chunk-5Q76ACVI.js +2 -0
- package/dist/{chunk-O4DCHALR.js.map → chunk-5Q76ACVI.js.map} +1 -1
- package/dist/chunk-5QUY72FX.js +2 -0
- package/dist/chunk-5QUY72FX.js.map +7 -0
- package/dist/chunk-5YS7OD5E.js +2 -0
- package/dist/{chunk-GZNQPENR.js.map → chunk-5YS7OD5E.js.map} +1 -1
- package/dist/{chunk-NV5AIBQP.js → chunk-6VBK2I5B.js} +2 -2
- package/dist/{chunk-ZYUXCZX7.js → chunk-7KMIFXHZ.js} +2 -2
- package/dist/{chunk-IYPKPLCU.js → chunk-A2NKDOYN.js} +2 -2
- package/dist/chunk-A2NKDOYN.js.map +7 -0
- package/dist/chunk-ATFJ7PNA.js +2 -0
- package/dist/chunk-ATFJ7PNA.js.map +7 -0
- package/dist/chunk-BXYWVRKJ.js +2 -0
- package/dist/chunk-BXYWVRKJ.js.map +7 -0
- package/dist/chunk-CKXS375P.js +2 -0
- package/dist/chunk-CKXS375P.js.map +7 -0
- package/dist/chunk-CUN5QO4T.js +2 -0
- package/dist/{chunk-4DHQKECB.js.map → chunk-CUN5QO4T.js.map} +1 -1
- package/dist/chunk-DBMWS3O5.js +2 -0
- package/dist/chunk-DBMWS3O5.js.map +7 -0
- package/dist/chunk-E4VNLYO2.js +2 -0
- package/dist/chunk-E4VNLYO2.js.map +7 -0
- package/dist/chunk-EDUMAMK4.js +2 -0
- package/dist/chunk-EDUMAMK4.js.map +7 -0
- package/dist/chunk-ELYARUCN.js +2 -0
- package/dist/{chunk-Z25NC4CS.js → chunk-EV73ADN2.js} +2 -2
- package/dist/{chunk-LV6HXFHU.js → chunk-FEHGU6EP.js} +3 -3
- package/dist/chunk-FEHGU6EP.js.map +7 -0
- package/dist/chunk-FHM5NUS4.js +3 -0
- package/dist/chunk-FHM5NUS4.js.map +7 -0
- package/dist/chunk-G2DAD3MQ.js +2 -0
- package/dist/chunk-G2DAD3MQ.js.map +7 -0
- package/dist/chunk-G2KUK6AT.js +2 -0
- package/dist/chunk-GBPLNXMP.js +2 -0
- package/dist/chunk-GBPLNXMP.js.map +7 -0
- package/dist/{chunk-LBCWEWPN.js → chunk-GNU4VOOE.js} +2 -2
- package/dist/{chunk-IW7PK4VS.js → chunk-GZ7X34QP.js} +2 -2
- package/dist/chunk-HOF4JGMQ.js +2 -0
- package/dist/chunk-HOF4JGMQ.js.map +7 -0
- package/dist/chunk-HXDTGP2K.js +2 -0
- package/dist/chunk-HXDTGP2K.js.map +7 -0
- package/dist/{chunk-QEQIJAAB.js → chunk-I4SP6JTU.js} +2 -2
- package/dist/chunk-IHE2MQ3W.js +2 -0
- package/dist/{chunk-OW2ZSMGS.js.map → chunk-IHE2MQ3W.js.map} +1 -1
- package/dist/chunk-II6ITOA6.js +2 -0
- package/dist/chunk-II6ITOA6.js.map +7 -0
- package/dist/chunk-JBLRAM7Z.js +2 -0
- package/dist/{chunk-JZNEB7A7.js.map → chunk-JBLRAM7Z.js.map} +1 -1
- package/dist/{chunk-4SUKNSCY.js → chunk-JI265XFO.js} +2 -2
- package/dist/chunk-JK74QK3M.js +2 -0
- package/dist/chunk-JK74QK3M.js.map +7 -0
- package/dist/chunk-JOFQJGZK.js +2 -0
- package/dist/chunk-JOFQJGZK.js.map +7 -0
- package/dist/chunk-KCEUD232.js +2 -0
- package/dist/chunk-KCEUD232.js.map +7 -0
- package/dist/chunk-KLLAY2IM.js +2 -0
- package/dist/chunk-KLLAY2IM.js.map +7 -0
- package/dist/chunk-LBJSMXLV.js +2 -0
- package/dist/chunk-LBJSMXLV.js.map +7 -0
- package/dist/chunk-LQRFNQ2N.js +2 -0
- package/dist/chunk-LQRFNQ2N.js.map +7 -0
- package/dist/{chunk-NDBFYIL6.js → chunk-LW2WRUVL.js} +2 -2
- package/dist/{chunk-NDBFYIL6.js.map → chunk-LW2WRUVL.js.map} +2 -2
- package/dist/chunk-M242VYZA.js +2 -0
- package/dist/{chunk-XVIC24AW.js.map → chunk-M242VYZA.js.map} +1 -1
- package/dist/chunk-MB3MU6HR.js +2 -0
- package/dist/chunk-MB3MU6HR.js.map +7 -0
- package/dist/chunk-MW3RWBZ7.js +2 -0
- package/dist/chunk-MW3RWBZ7.js.map +7 -0
- package/dist/chunk-NXSTUFS7.js +2 -0
- package/dist/chunk-NXSTUFS7.js.map +7 -0
- package/dist/chunk-OEAXCCVM.js +2 -0
- package/dist/chunk-OEAXCCVM.js.map +7 -0
- package/dist/chunk-OGRFQTXA.js +2 -0
- package/dist/chunk-OGRFQTXA.js.map +7 -0
- package/dist/chunk-REW4LR46.js +2 -0
- package/dist/chunk-REW4LR46.js.map +7 -0
- package/dist/chunk-RNN55473.js +2 -0
- package/dist/chunk-RNN55473.js.map +7 -0
- package/dist/{chunk-6NJW7QFD.js → chunk-SA53QUBF.js} +2 -2
- package/dist/chunk-TIPK3SCJ.js +2 -0
- package/dist/chunk-TIPK3SCJ.js.map +7 -0
- package/dist/{chunk-TBLICXWW.js → chunk-TOLTUOZS.js} +2 -2
- package/dist/{chunk-DXO3UJKL.js → chunk-TZOQWCVH.js} +2 -2
- package/dist/chunk-VF7BGP6L.js +2 -0
- package/dist/chunk-VF7BGP6L.js.map +7 -0
- package/dist/chunk-VU3GIDZ3.js +2 -0
- package/dist/chunk-VU3GIDZ3.js.map +7 -0
- package/dist/{chunk-SNTHW4K2.js → chunk-W3H7GTJY.js} +2 -2
- package/dist/{chunk-ZHVSHDLH.js → chunk-XHOBNSBO.js} +2 -2
- package/dist/chunk-XX2MVWFS.js +4 -0
- package/dist/chunk-XX2MVWFS.js.map +7 -0
- package/dist/chunk-XYZ6VZ5T.js +2 -0
- package/dist/chunk-XYZ6VZ5T.js.map +7 -0
- package/dist/chunk-YBAYEU25.js +2 -0
- package/dist/chunk-YBAYEU25.js.map +7 -0
- package/dist/chunk-YHEMA56R.js +2 -0
- package/dist/{chunk-5GNEFX6F.js.map → chunk-YHEMA56R.js.map} +1 -1
- package/dist/chunk-Z2JBUHKA.js +2 -0
- package/dist/chunk-Z2JBUHKA.js.map +7 -0
- package/dist/{chunk-6O2BXCRN.js → chunk-Z2Z52GFT.js} +2 -2
- package/dist/chunk-ZPPELYNJ.js +2 -0
- package/dist/chunk-ZPPELYNJ.js.map +7 -0
- package/dist/chunk-ZVK4L5GK.js +2 -0
- package/dist/chunk-ZVK4L5GK.js.map +7 -0
- package/dist/chunk-ZWNQREWS.js +2 -0
- package/dist/chunk-ZWNQREWS.js.map +7 -0
- package/dist/components/badge.js +2 -0
- package/dist/components/badge.js.map +7 -0
- package/dist/components/breadcrumb.js +1 -1
- package/dist/components/button.js +1 -1
- package/dist/components/calendar.js +1 -1
- package/dist/components/cellediting.js +2 -0
- package/dist/components/cellediting.js.map +7 -0
- package/dist/components/chat.js +1 -1
- package/dist/components/checkbox.js +1 -1
- package/dist/components/checkboxgroup.js +2 -0
- package/dist/components/checkboxgroup.js.map +7 -0
- package/dist/components/chip.js +2 -0
- package/dist/components/chip.js.map +7 -0
- package/dist/components/codeviewer.js +2 -0
- package/dist/components/codeviewer.js.map +7 -0
- package/dist/components/combobox.js +1 -1
- package/dist/components/commandpalette.js +1 -1
- package/dist/components/container.js +1 -1
- package/dist/components/dataview.js +1 -1
- package/dist/components/datefield.js +1 -1
- package/dist/components/daterangefield.js +1 -1
- package/dist/components/dial.js +2 -0
- package/dist/components/dial.js.map +7 -0
- package/dist/components/dropdown.js +1 -1
- package/dist/components/fieldgroup.js +2 -0
- package/dist/components/fieldgroup.js.map +7 -0
- package/dist/components/fieldlist.js +2 -0
- package/dist/components/fieldlist.js.map +7 -0
- package/dist/components/fieldset.js +1 -1
- package/dist/components/filterbuilder.js +1 -1
- package/dist/components/form.js +1 -1
- package/dist/components/formactions.js +2 -0
- package/dist/components/formactions.js.map +7 -0
- package/dist/components/formerrors.js +2 -0
- package/dist/components/formerrors.js.map +7 -0
- package/dist/components/formsection.js +2 -0
- package/dist/components/formsection.js.map +7 -0
- package/dist/components/grid.js +1 -1
- package/dist/components/icon.js +1 -1
- package/dist/components/inputgroup.js +2 -0
- package/dist/components/inputgroup.js.map +7 -0
- package/dist/components/label.js +1 -1
- package/dist/components/listbox.js +1 -1
- package/dist/components/lookupfield.js +1 -1
- package/dist/components/menu.js +1 -1
- package/dist/components/messagebox.js +1 -1
- package/dist/components/navmenu.js +1 -1
- package/dist/components/numberfield.js +1 -1
- package/dist/components/pagination.js +1 -1
- package/dist/components/panel.js +1 -1
- package/dist/components/pickerfield.js +1 -1
- package/dist/components/radiogroup.js +1 -1
- package/dist/components/searchgrid.js +1 -1
- package/dist/components/secretfield.js +1 -1
- package/dist/components/select.js +1 -1
- package/dist/components/slider.js +1 -1
- package/dist/components/spacer.js +1 -1
- package/dist/components/spinner.js +1 -1
- package/dist/components/stepform.js +1 -1
- package/dist/components/stepper.js +1 -1
- package/dist/components/suggestfield.js +1 -1
- package/dist/components/table.js +1 -1
- package/dist/components/tabs.js +1 -1
- package/dist/components/textarea.js +1 -1
- package/dist/components/textfield.js +1 -1
- package/dist/components/toast.js +1 -1
- package/dist/components/toggle.js +2 -0
- package/dist/components/toggle.js.map +7 -0
- package/dist/components/toolbar.js +1 -1
- package/dist/components/tooltip.js +1 -1
- package/dist/components/tree.js +2 -0
- package/dist/components/tree.js.map +7 -0
- package/dist/components/viewmanager.js +1 -1
- package/dist/components/viewport.js +1 -1
- package/dist/components/widget.js +1 -1
- package/dist/components/window.js +1 -1
- package/dist/core.js +1 -1
- package/dist/css/badge.css +39 -0
- package/dist/css/base.css +71 -51
- package/dist/css/button.css +2 -0
- package/dist/css/cellediting.css +33 -0
- package/dist/css/chat.css +0 -1
- package/dist/css/checkboxgroup.css +12 -0
- package/dist/css/chip.css +64 -0
- package/dist/css/codeviewer.css +109 -0
- package/dist/css/dial.css +203 -0
- package/dist/css/fieldgroup.css +26 -0
- package/dist/css/fieldlist.css +84 -0
- package/dist/css/fieldset.css +36 -0
- package/dist/css/formactions.css +40 -0
- package/dist/css/formerrors.css +39 -0
- package/dist/css/formsection.css +45 -0
- package/dist/css/grid.css +14 -3
- package/dist/css/inputgroup.css +58 -0
- package/dist/css/menu.css +45 -0
- package/dist/css/panel.css +8 -1
- package/dist/css/stepper.css +7 -2
- package/dist/css/tabs.css +12 -3
- package/dist/css/toggle.css +39 -0
- package/dist/css/tree.css +94 -0
- package/dist/css/widget.css +58 -0
- package/dist/css/window.css +4 -0
- package/dist/data.js +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +3 -3
- package/dist/optikos.css +1194 -99
- package/dist/themes/dark.css +47 -32
- package/dist/types/components/badge.d.ts +1 -0
- package/dist/types/components/base/badge/badge.d.ts +18 -0
- package/dist/types/components/base/chip/chip.d.ts +27 -0
- package/dist/types/components/base/codeviewer/codeviewer.d.ts +48 -0
- package/dist/types/components/cellediting.d.ts +1 -0
- package/dist/types/components/checkboxgroup.d.ts +1 -0
- package/dist/types/components/chip.d.ts +1 -0
- package/dist/types/components/codeviewer.d.ts +1 -0
- package/dist/types/components/data/cellediting/cellediting.d.ts +10 -0
- package/dist/types/components/data/filterbuilder/filterbuilder.d.ts +3 -1
- package/dist/types/components/data/grid/grid.d.ts +42 -16
- package/dist/types/components/data/tree/tree.d.ts +71 -0
- package/dist/types/components/dial.d.ts +1 -0
- package/dist/types/components/fieldgroup.d.ts +1 -0
- package/dist/types/components/fieldlist.d.ts +1 -0
- package/dist/types/components/fields/checkboxgroup/checkboxgroup.d.ts +27 -0
- package/dist/types/components/fields/dial/dial.d.ts +84 -0
- package/dist/types/components/fields/toggle/toggle.d.ts +9 -0
- package/dist/types/components/form/fieldgroup/fieldgroup.d.ts +33 -0
- package/dist/types/components/form/fieldlist/fieldlist.d.ts +58 -0
- package/dist/types/components/form/form/form.d.ts +19 -2
- package/dist/types/components/form/formactions/formactions.d.ts +34 -0
- package/dist/types/components/form/formerrors/formerrors.d.ts +23 -0
- package/dist/types/components/form/formsection/formsection.d.ts +26 -0
- package/dist/types/components/form/inputgroup/inputgroup.d.ts +28 -0
- package/dist/types/components/form/stepform/stepform.d.ts +2 -0
- package/dist/types/components/formactions.d.ts +1 -0
- package/dist/types/components/formerrors.d.ts +1 -0
- package/dist/types/components/formsection.d.ts +1 -0
- package/dist/types/components/inputgroup.d.ts +1 -0
- package/dist/types/components/layout/fieldset/fieldset.d.ts +9 -0
- package/dist/types/components/layout/panel/panel.d.ts +6 -0
- package/dist/types/components/layout/panel/reload.d.ts +1 -0
- package/dist/types/components/navigation/tabs/tabs.d.ts +8 -0
- package/dist/types/components/overlays/menu/menu.d.ts +15 -0
- package/dist/types/components/overlays/messagebox/messagebox.d.ts +8 -0
- package/dist/types/components/overlays/widget/widget.d.ts +13 -0
- package/dist/types/components/overlays/window/window.d.ts +8 -1
- package/dist/types/components/toggle.d.ts +1 -0
- package/dist/types/components/tree.d.ts +1 -0
- package/dist/types/core/component.d.ts +6 -2
- package/dist/types/core/i18n.d.ts +5 -0
- package/dist/types/core/index.d.ts +1 -1
- package/dist/types/core/position.d.ts +4 -1
- package/dist/types/data/column.d.ts +9 -4
- package/dist/types/index.d.ts +14 -0
- package/dist/types/themes/define.d.ts +4 -3
- package/dist/types/ui/enums.d.ts +0 -6
- package/dist/types/ui/ui.d.ts +12 -3
- package/dist/ui.js +1 -1
- package/package.json +6 -1
- package/dist/chunk-4COBH4QJ.js +0 -2
- package/dist/chunk-4COBH4QJ.js.map +0 -7
- package/dist/chunk-4DHQKECB.js +0 -2
- package/dist/chunk-4Q67QI7J.js +0 -2
- package/dist/chunk-4Q67QI7J.js.map +0 -7
- package/dist/chunk-5AXLYDKU.js +0 -2
- package/dist/chunk-5AXLYDKU.js.map +0 -7
- package/dist/chunk-5GNEFX6F.js +0 -2
- package/dist/chunk-5Q6Y6CM4.js +0 -2
- package/dist/chunk-5Q6Y6CM4.js.map +0 -7
- package/dist/chunk-666O2GKD.js +0 -2
- package/dist/chunk-A66MDXHL.js +0 -2
- package/dist/chunk-A66MDXHL.js.map +0 -7
- package/dist/chunk-ARCW54L2.js +0 -2
- package/dist/chunk-ARCW54L2.js.map +0 -7
- package/dist/chunk-BIYNHKSA.js +0 -2
- package/dist/chunk-BIYNHKSA.js.map +0 -7
- package/dist/chunk-BNPVRIFT.js +0 -2
- package/dist/chunk-BNPVRIFT.js.map +0 -7
- package/dist/chunk-C3N7QTQB.js +0 -2
- package/dist/chunk-C3N7QTQB.js.map +0 -7
- package/dist/chunk-CEXY5A4T.js +0 -2
- package/dist/chunk-CN7USUJR.js +0 -2
- package/dist/chunk-CN7USUJR.js.map +0 -7
- package/dist/chunk-CQRHNTEX.js +0 -2
- package/dist/chunk-CUPAPOKC.js +0 -2
- package/dist/chunk-CUPAPOKC.js.map +0 -7
- package/dist/chunk-GZNQPENR.js +0 -2
- package/dist/chunk-HFFK6K4K.js +0 -2
- package/dist/chunk-HFFK6K4K.js.map +0 -7
- package/dist/chunk-IHAYOSBR.js +0 -2
- package/dist/chunk-IO66A6G5.js +0 -2
- package/dist/chunk-IO66A6G5.js.map +0 -7
- package/dist/chunk-IYPKPLCU.js.map +0 -7
- package/dist/chunk-JTYWZMSZ.js +0 -2
- package/dist/chunk-JTYWZMSZ.js.map +0 -7
- package/dist/chunk-JVEPKW5X.js +0 -2
- package/dist/chunk-JVEPKW5X.js.map +0 -7
- package/dist/chunk-JZNEB7A7.js +0 -2
- package/dist/chunk-K2DGY6MP.js +0 -2
- package/dist/chunk-K2DGY6MP.js.map +0 -7
- package/dist/chunk-LEE2FEEL.js +0 -2
- package/dist/chunk-LEE2FEEL.js.map +0 -7
- package/dist/chunk-LMGCV35W.js +0 -2
- package/dist/chunk-LMGCV35W.js.map +0 -7
- package/dist/chunk-LV6HXFHU.js.map +0 -7
- package/dist/chunk-MA5BJL3S.js +0 -2
- package/dist/chunk-MA5BJL3S.js.map +0 -7
- package/dist/chunk-NHVEP72K.js +0 -2
- package/dist/chunk-NHVEP72K.js.map +0 -7
- package/dist/chunk-O4DCHALR.js +0 -2
- package/dist/chunk-ODWPBBVL.js +0 -2
- package/dist/chunk-OW2ZSMGS.js +0 -2
- package/dist/chunk-PSPQH35P.js +0 -2
- package/dist/chunk-PSPQH35P.js.map +0 -7
- package/dist/chunk-T4OYVG2X.js +0 -2
- package/dist/chunk-T4OYVG2X.js.map +0 -7
- package/dist/chunk-TK2RC3T5.js +0 -2
- package/dist/chunk-TK2RC3T5.js.map +0 -7
- package/dist/chunk-U3X2FW6U.js +0 -2
- package/dist/chunk-U3X2FW6U.js.map +0 -7
- package/dist/chunk-UPOBGNJ5.js +0 -2
- package/dist/chunk-UPOBGNJ5.js.map +0 -7
- package/dist/chunk-XVIC24AW.js +0 -2
- package/dist/chunk-XZ5CUZZP.js +0 -2
- package/dist/chunk-XZ5CUZZP.js.map +0 -7
- package/dist/chunk-XZEOSW3Q.js +0 -2
- package/dist/chunk-XZEOSW3Q.js.map +0 -7
- package/dist/chunk-YET5PM6F.js +0 -2
- package/dist/chunk-YET5PM6F.js.map +0 -7
- package/dist/chunk-ZCAAM4NH.js +0 -2
- package/dist/chunk-ZCAAM4NH.js.map +0 -7
- package/dist/themes/brand.css +0 -240
- package/dist/themes/brutal.css +0 -100
- package/dist/themes/corporate.css +0 -112
- package/dist/themes/editorial.css +0 -110
- package/dist/themes/soft.css +0 -101
- package/dist/themes/terminal.css +0 -91
- /package/dist/{chunk-NWTTHDIM.js.map → chunk-5JEXM5S7.js.map} +0 -0
- /package/dist/{chunk-NV5AIBQP.js.map → chunk-6VBK2I5B.js.map} +0 -0
- /package/dist/{chunk-ZYUXCZX7.js.map → chunk-7KMIFXHZ.js.map} +0 -0
- /package/dist/{chunk-CEXY5A4T.js.map → chunk-ELYARUCN.js.map} +0 -0
- /package/dist/{chunk-Z25NC4CS.js.map → chunk-EV73ADN2.js.map} +0 -0
- /package/dist/{chunk-CQRHNTEX.js.map → chunk-G2KUK6AT.js.map} +0 -0
- /package/dist/{chunk-LBCWEWPN.js.map → chunk-GNU4VOOE.js.map} +0 -0
- /package/dist/{chunk-IW7PK4VS.js.map → chunk-GZ7X34QP.js.map} +0 -0
- /package/dist/{chunk-QEQIJAAB.js.map → chunk-I4SP6JTU.js.map} +0 -0
- /package/dist/{chunk-4SUKNSCY.js.map → chunk-JI265XFO.js.map} +0 -0
- /package/dist/{chunk-6NJW7QFD.js.map → chunk-SA53QUBF.js.map} +0 -0
- /package/dist/{chunk-TBLICXWW.js.map → chunk-TOLTUOZS.js.map} +0 -0
- /package/dist/{chunk-DXO3UJKL.js.map → chunk-TZOQWCVH.js.map} +0 -0
- /package/dist/{chunk-SNTHW4K2.js.map → chunk-W3H7GTJY.js.map} +0 -0
- /package/dist/{chunk-ZHVSHDLH.js.map → chunk-XHOBNSBO.js.map} +0 -0
- /package/dist/{chunk-6O2BXCRN.js.map → chunk-Z2Z52GFT.js.map} +0 -0
package/dist/ui.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a,b,c,d,e,f,g,h,i,j,k}from"./chunk-
|
|
1
|
+
import{a,b,c,d,e,f,g,h,i,j,k}from"./chunk-ATFJ7PNA.js";import"./chunk-HXDTGP2K.js";import"./chunk-VU3GIDZ3.js";import"./chunk-6VBK2I5B.js";import"./chunk-NXSTUFS7.js";import"./chunk-G2KUK6AT.js";import"./chunk-Z2Z52GFT.js";import"./chunk-XHOBNSBO.js";import"./chunk-I4SP6JTU.js";import"./chunk-OGRFQTXA.js";import"./chunk-JI265XFO.js";import"./chunk-EDUMAMK4.js";import"./chunk-JK74QK3M.js";import"./chunk-GBPLNXMP.js";import"./chunk-TZOQWCVH.js";import"./chunk-EV73ADN2.js";import"./chunk-5Q76ACVI.js";import"./chunk-CUN5QO4T.js";import"./chunk-VF7BGP6L.js";import"./chunk-KLLAY2IM.js";import"./chunk-4LZZ244E.js";import"./chunk-LQRFNQ2N.js";import"./chunk-XYZ6VZ5T.js";import"./chunk-GNU4VOOE.js";import"./chunk-23XLG2EM.js";import"./chunk-YHEMA56R.js";import"./chunk-ZVK4L5GK.js";import"./chunk-7KMIFXHZ.js";import"./chunk-3TAW4AKH.js";import"./chunk-FHM5NUS4.js";import"./chunk-Z2JBUHKA.js";import"./chunk-W3H7GTJY.js";import"./chunk-G2DAD3MQ.js";import"./chunk-OWEQT2HN.js";import"./chunk-ZWNQREWS.js";import"./chunk-E4VNLYO2.js";import"./chunk-676AKAGF.js";import"./chunk-VV7CFMPZ.js";import"./chunk-2ZRNGG2N.js";import"./chunk-5JEXM5S7.js";import"./chunk-LW2WRUVL.js";import"./chunk-OEAXCCVM.js";import"./chunk-6NCXO5ZP.js";import"./chunk-2ZUZ5HDL.js";import"./chunk-4AA4FQEM.js";import"./chunk-2UPUC4RK.js";import"./chunk-4EZJ5FKJ.js";import"./chunk-A2NKDOYN.js";import"./chunk-PZSHOSOS.js";import"./chunk-TIPK3SCJ.js";import"./chunk-MW3RWBZ7.js";import"./chunk-4C666HHU.js";export{d as Direction,c as LabelPos,g as LayoutKind,j as Op,e as Region,h as Selection,f as Side,k as ThemeName,i as ToastType,b as Variant,a as ui};
|
|
2
2
|
//# sourceMappingURL=ui.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "optikos",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Declarative UI components in plain TypeScript: forms, grids, windows and themes. No runtime dependencies.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ui",
|
|
@@ -82,6 +82,8 @@
|
|
|
82
82
|
"build": "node scripts/build.mjs",
|
|
83
83
|
"typecheck": "tsc --noEmit",
|
|
84
84
|
"test": "vitest run",
|
|
85
|
+
"test:browser": "vitest run --config vitest.browser.config.ts",
|
|
86
|
+
"bench": "node scripts/bench.mjs",
|
|
85
87
|
"check": "npm run gen && npm run typecheck && npm test && npm run build",
|
|
86
88
|
"new:component": "node scripts/new-component.mjs",
|
|
87
89
|
"release": "node scripts/release.mjs",
|
|
@@ -93,8 +95,11 @@
|
|
|
93
95
|
},
|
|
94
96
|
"devDependencies": {
|
|
95
97
|
"@types/node": "^26.6.6",
|
|
98
|
+
"@vitest/browser-playwright": "5.1.0",
|
|
99
|
+
"axe-core": "4.14.0",
|
|
96
100
|
"esbuild": "^0.28.2",
|
|
97
101
|
"happy-dom": "^21.0.4",
|
|
102
|
+
"playwright": "1.65.0",
|
|
98
103
|
"typescript": "^7.0.2",
|
|
99
104
|
"vitest": "^5.1.0"
|
|
100
105
|
}
|
package/dist/chunk-4COBH4QJ.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as E,b as o,c as D,d as c,e as g,h as C}from"./chunk-NWTTHDIM.js";import{c as M}from"./chunk-IHAYOSBR.js";import{a as k,b as x}from"./chunk-IYPKPLCU.js";import{b as n}from"./chunk-PZSHOSOS.js";import{d as L,e as v}from"./chunk-MA5BJL3S.js";var f=(_,t)=>new Intl.DateTimeFormat(L()._lang,_).format(t),w=class extends k{baseCls="op-calendar";cursor=D();mode="days";titleEl;bodyEl;prevEl;nextEl;build(){let t=n("div","op-calendar",{role:"dialog","aria-label":v("calMonth")});return this.prevEl=n("button","op-calendar__nav",{type:"button","aria-label":v("calPrev")},M("chevron-left")),this.nextEl=n("button","op-calendar__nav",{type:"button","aria-label":v("calNext")},M("chevron-right")),this.titleEl=n("button","op-calendar__title",{type:"button","aria-live":"polite"}),this.bodyEl=n("div","op-calendar__body"),t.append(n("div","op-calendar__header",{},this.prevEl,this.titleEl,this.nextEl),this.bodyEl),t}onRender(){let t=this.first();t&&o(t)&&(this.cursor=t),this.listen(this.prevEl,"click",()=>this.step(-1)),this.listen(this.nextEl,"click",()=>this.step(1)),this.listen(this.titleEl,"click",()=>{this.mode=this.mode==="days"?"months":"days",this.paint()}),this.listen(this.bodyEl,"click",e=>{let s=e.target.closest("[data-iso],[data-month]");if(s)if(s.dataset.month){let[i,r]=s.dataset.month.split("-").map(Number),p=o(this.cursor);this.cursor=g(this.cursor,(i-p.getFullYear())*12+(r-1-p.getMonth())),this.mode="days",this.paint(),this.emit("navigate",i,r-1),this.focusDay()}else this.choose(s.dataset.iso)}),this.listen(this.bodyEl,"keydown",e=>this.onKey(e)),this.paint()}blocked(t){let{min:e,max:s,isDisabled:i}=this.config;return!!e&&t<e||!!s&&t>s||!!i?.(t)}span(){let t=this.config.value;return t?typeof t=="string"?{start:t,end:t}:t:{start:null,end:null}}first(){return this.span().start}choose(t){if(this.blocked(t))return;if(!this.config.range)return this.setValue(t),void this.emit("select",t);let{start:e,end:s}=this.span();if(e&&!s){let i=t<e?{start:t,end:e}:{start:e,end:t};this.setValue(i),this.emit("select",i)}else this.setValue({start:t,end:null}),this.emit("start",t)}step(t){this.cursor=this.mode==="days"?g(this.cursor,t):g(this.cursor,t*12),this.paint();let e=o(this.cursor);this.emit("navigate",e.getFullYear(),e.getMonth())}move(t){let e=o(this.cursor);this.cursor=t;let s=o(t);this.paint(),(s.getMonth()!==e.getMonth()||s.getFullYear()!==e.getFullYear())&&this.emit("navigate",s.getFullYear(),s.getMonth()),this.focusDay()}onKey(t){if(this.mode!=="days")return;let e=this.cursor,s=(o(e).getDay()-this.weekStart()+7)%7,i={ArrowLeft:c(e,-1),ArrowRight:c(e,1),ArrowUp:c(e,-7),ArrowDown:c(e,7),Home:c(e,-s),End:c(e,6-s),PageUp:g(e,t.shiftKey?-12:-1),PageDown:g(e,t.shiftKey?12:1)};i[t.key]?(t.preventDefault(),this.move(i[t.key])):(t.key==="Enter"||t.key===" ")&&(t.preventDefault(),this.choose(e))}weekStart(){return this.config.firstDay??C()}paint(){let t=o(this.cursor);this.el.classList.toggle("is-months",this.mode==="months"),this.titleEl.textContent=this.mode==="days"?f({month:"long",year:"numeric"},t):String(t.getFullYear()),this.mode==="days"?this.paintDays(t):this.paintMonths(t)}paintDays(t){let e=this.weekStart(),s=n("tr");for(let d=0;d<7;d++){let m=new Date(2023,0,1+(e+d)%7);s.append(n("th","op-calendar__dow",{scope:"col",abbr:f({weekday:"long"},m)},f({weekday:"short"},m)))}let i=[],r=new Date(t.getFullYear(),t.getMonth(),1);r.setDate(1-(r.getDay()-e+7)%7);let p=D(),{start:h,end:u}=this.config.range?this.span():{start:this.first(),end:this.first()};for(let d=0;d<6;d++){let m=n("tr");for(let b=0;b<7;b++){let y=new Date(r.getFullYear(),r.getMonth(),r.getDate()+d*7+b),a=E(y),l=n("td","op-calendar__day",{role:"gridcell","data-iso":a,tabindex:a===this.cursor?0:-1,"aria-selected":String(!!h&&a>=h&&a<=(u??h)),"aria-label":f({dateStyle:"full"},y),"aria-disabled":this.blocked(a)?"true":null,"aria-current":a===p?"date":null},String(y.getDate()));l.classList.toggle("is-outside",y.getMonth()!==t.getMonth()),l.classList.toggle("is-today",a===p),l.classList.toggle("is-selected",a===h||a===u),l.classList.toggle("is-in-range",!!h&&!!u&&a>h&&a<u),l.classList.toggle("is-range-start",!!this.config.range&&a===h),l.classList.toggle("is-range-end",!!this.config.range&&a===u),l.classList.toggle("is-disabled",this.blocked(a)),m.append(l)}i.push(m)}this.bodyEl.replaceChildren(n("table","op-calendar__grid",{role:"grid"},n("thead","",{},s),n("tbody","",{},...i)))}paintMonths(t){let e=Array.from({length:12},(s,i)=>{let r=n("button","op-calendar__month",{type:"button","data-month":`${t.getFullYear()}-${String(i+1).padStart(2,"0")}`},f({month:"short"},new Date(2e3,i,1)));return r.classList.toggle("is-selected",i===t.getMonth()),r});this.bodyEl.replaceChildren(n("div","op-calendar__months",{},...e))}setValue(t){this.config.value=t;let e=this.first();e&&o(e)&&(this.cursor=e),this.rendered&&(this.mode="days",this.paint())}setRange(t){this.config.range=t,this.config.value=null,this.rendered&&this.paint()}setMin(t){this.config.min=t,this.rendered&&this.paint()}setMax(t){this.config.max=t,this.rendered&&this.paint()}showMonth(t,e){this.cursor=E(new Date(t,e,1)),this.rendered&&this.paint()}focusDay(){this.render(),this.bodyEl.querySelector('[tabindex="0"]')?.focus()}};x("calendar",w);export{w as a};
|
|
2
|
-
//# sourceMappingURL=chunk-4COBH4QJ.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/components/dates/calendar/calendar.ts"],
|
|
4
|
-
"sourcesContent": ["import { Component, type ComponentConfig } from '../../../core/component';\nimport { register } from '../../../core/registry';\nimport { h } from '../../../core/dom';\nimport { t, getLocale } from '../../../core/i18n';\nimport { toISO, fromISO, today, addDays, addMonths, firstDay } from '../../../core/date';\nimport { iconEl } from '../../base/icon/icon';\n\n/** Both ends are `YYYY-MM-DD`; `end` is null while the user has only picked the first day. */\nexport interface DateRange {\n start: string | null;\n end: string | null;\n}\n\nexport interface CalendarConfig extends ComponentConfig {\n /** Selected day, `YYYY-MM-DD`; with `range: true`, a `DateRange`. */\n value?: string | DateRange | null;\n /** Pick a start and an end day (two clicks). */\n range?: boolean;\n min?: string;\n max?: string;\n /** 0 = Sunday. Default: the locale's. */\n firstDay?: number;\n isDisabled?: (iso: string) => boolean;\n}\n\nconst fmt = (opts: Intl.DateTimeFormatOptions, d: Date) => new Intl.DateTimeFormat(getLocale()._lang, opts).format(d);\n\n/** Month calendar. Click the title to pick a month; arrow keys, Page keys and Home/End move the focused day. */\nexport class Calendar extends Component<CalendarConfig> {\n protected override baseCls = 'op-calendar';\n private cursor = today(); // the focused day; its month is the visible month\n private mode: 'days' | 'months' = 'days';\n private titleEl!: HTMLElement;\n private bodyEl!: HTMLElement;\n private prevEl!: HTMLButtonElement;\n private nextEl!: HTMLButtonElement;\n\n protected override build() {\n const el = h('div', 'op-calendar', { role: 'dialog', 'aria-label': t('calMonth') });\n this.prevEl = h('button', 'op-calendar__nav', { type: 'button', 'aria-label': t('calPrev') }, iconEl('chevron-left'));\n this.nextEl = h('button', 'op-calendar__nav', { type: 'button', 'aria-label': t('calNext') }, iconEl('chevron-right'));\n this.titleEl = h('button', 'op-calendar__title', { type: 'button', 'aria-live': 'polite' });\n this.bodyEl = h('div', 'op-calendar__body');\n el.append(h('div', 'op-calendar__header', {}, this.prevEl, this.titleEl, this.nextEl), this.bodyEl);\n return el;\n }\n\n protected override onRender() {\n const v = this.first();\n if (v && fromISO(v)) this.cursor = v;\n this.listen(this.prevEl, 'click', () => this.step(-1));\n this.listen(this.nextEl, 'click', () => this.step(1));\n this.listen(this.titleEl, 'click', () => {\n this.mode = this.mode === 'days' ? 'months' : 'days';\n this.paint();\n });\n this.listen(this.bodyEl, 'click', (e: Event) => {\n const cell = (e.target as HTMLElement).closest<HTMLElement>('[data-iso],[data-month]');\n if (!cell) return;\n if (cell.dataset.month) {\n const [y, m] = cell.dataset.month.split('-').map(Number);\n const cur = fromISO(this.cursor)!;\n this.cursor = addMonths(this.cursor, (y - cur.getFullYear()) * 12 + (m - 1 - cur.getMonth()));\n this.mode = 'days';\n this.paint();\n this.emit('navigate', y, m - 1);\n this.focusDay();\n } else this.choose(cell.dataset.iso!);\n });\n this.listen(this.bodyEl, 'keydown', (e: KeyboardEvent) => this.onKey(e));\n this.paint();\n }\n\n private blocked(iso: string) {\n const { min, max, isDisabled } = this.config;\n return (!!min && iso < min) || (!!max && iso > max) || !!isDisabled?.(iso);\n }\n\n /** The value as a range (a single day is a one-day range). */\n private span(): DateRange {\n const v = this.config.value;\n return !v ? { start: null, end: null } : typeof v === 'string' ? { start: v, end: v } : v;\n }\n private first(): string | null {\n return this.span().start;\n }\n\n private choose(iso: string) {\n if (this.blocked(iso)) return;\n if (!this.config.range) {\n this.setValue(iso);\n return void this.emit('select', iso);\n }\n const { start, end } = this.span();\n if (start && !end) {\n const r = iso < start ? { start: iso, end: start } : { start, end: iso };\n this.setValue(r);\n this.emit('select', r);\n } else {\n this.setValue({ start: iso, end: null });\n this.emit('start', iso);\n }\n }\n\n private step(dir: number) {\n this.cursor = this.mode === 'days' ? addMonths(this.cursor, dir) : addMonths(this.cursor, dir * 12);\n this.paint();\n const d = fromISO(this.cursor)!;\n this.emit('navigate', d.getFullYear(), d.getMonth());\n }\n\n private move(next: string) {\n const before = fromISO(this.cursor)!;\n this.cursor = next;\n const d = fromISO(next)!;\n this.paint();\n if (d.getMonth() !== before.getMonth() || d.getFullYear() !== before.getFullYear()) this.emit('navigate', d.getFullYear(), d.getMonth());\n this.focusDay();\n }\n\n private onKey(e: KeyboardEvent) {\n if (this.mode !== 'days') return;\n const c = this.cursor;\n const dow = (fromISO(c)!.getDay() - this.weekStart() + 7) % 7;\n const moves: Record<string, string> = {\n ArrowLeft: addDays(c, -1),\n ArrowRight: addDays(c, 1),\n ArrowUp: addDays(c, -7),\n ArrowDown: addDays(c, 7),\n Home: addDays(c, -dow),\n End: addDays(c, 6 - dow),\n PageUp: addMonths(c, e.shiftKey ? -12 : -1),\n PageDown: addMonths(c, e.shiftKey ? 12 : 1),\n };\n if (moves[e.key]) {\n e.preventDefault();\n this.move(moves[e.key]);\n } else if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n this.choose(c);\n }\n }\n\n private weekStart() {\n return this.config.firstDay ?? firstDay();\n }\n\n private paint() {\n const cur = fromISO(this.cursor)!;\n this.el.classList.toggle('is-months', this.mode === 'months');\n this.titleEl.textContent = this.mode === 'days' ? fmt({ month: 'long', year: 'numeric' }, cur) : String(cur.getFullYear());\n this.mode === 'days' ? this.paintDays(cur) : this.paintMonths(cur);\n }\n\n private paintDays(cur: Date) {\n const first = this.weekStart();\n const head = h('tr');\n for (let i = 0; i < 7; i++) {\n const d = new Date(2023, 0, 1 + ((first + i) % 7)); // 2023-01-01 is a Sunday\n head.append(h('th', 'op-calendar__dow', { scope: 'col', abbr: fmt({ weekday: 'long' }, d) }, fmt({ weekday: 'short' }, d)));\n }\n const rows: HTMLElement[] = [];\n const start = new Date(cur.getFullYear(), cur.getMonth(), 1);\n start.setDate(1 - ((start.getDay() - first + 7) % 7));\n const todayIso = today();\n const { start: from, end: to } = this.config.range ? this.span() : { start: this.first(), end: this.first() };\n for (let w = 0; w < 6; w++) {\n const tr = h('tr');\n for (let d = 0; d < 7; d++) {\n const day = new Date(start.getFullYear(), start.getMonth(), start.getDate() + w * 7 + d);\n const iso = toISO(day);\n const td = h('td', 'op-calendar__day', {\n role: 'gridcell',\n 'data-iso': iso,\n tabindex: iso === this.cursor ? 0 : -1,\n 'aria-selected': String(!!from && iso >= from && iso <= (to ?? from)),\n 'aria-label': fmt({ dateStyle: 'full' }, day),\n 'aria-disabled': this.blocked(iso) ? 'true' : null,\n 'aria-current': iso === todayIso ? 'date' : null,\n }, String(day.getDate()));\n td.classList.toggle('is-outside', day.getMonth() !== cur.getMonth());\n td.classList.toggle('is-today', iso === todayIso);\n td.classList.toggle('is-selected', iso === from || iso === to);\n td.classList.toggle('is-in-range', !!from && !!to && iso > from && iso < to);\n td.classList.toggle('is-range-start', !!this.config.range && iso === from);\n td.classList.toggle('is-range-end', !!this.config.range && iso === to);\n td.classList.toggle('is-disabled', this.blocked(iso));\n tr.append(td);\n }\n rows.push(tr);\n }\n this.bodyEl.replaceChildren(h('table', 'op-calendar__grid', { role: 'grid' }, h('thead', '', {}, head), h('tbody', '', {}, ...rows)));\n }\n\n private paintMonths(cur: Date) {\n const cells = Array.from({ length: 12 }, (_, m) => {\n const b = h('button', 'op-calendar__month', { type: 'button', 'data-month': `${cur.getFullYear()}-${String(m + 1).padStart(2, '0')}` }, fmt({ month: 'short' }, new Date(2000, m, 1)));\n b.classList.toggle('is-selected', m === cur.getMonth());\n return b;\n });\n this.bodyEl.replaceChildren(h('div', 'op-calendar__months', {}, ...cells));\n }\n\n // ---- API -----------------------------------------------------------------------------------\n\n setValue(value: string | DateRange | null) {\n this.config.value = value;\n const iso = this.first();\n if (iso && fromISO(iso)) this.cursor = iso;\n if (this.rendered) {\n this.mode = 'days';\n this.paint();\n }\n }\n /** Switches between single-day and range picking. */\n setRange(range: boolean) {\n this.config.range = range;\n this.config.value = null;\n if (this.rendered) this.paint();\n }\n setMin(min: string | undefined) {\n this.config.min = min;\n if (this.rendered) this.paint();\n }\n setMax(max: string | undefined) {\n this.config.max = max;\n if (this.rendered) this.paint();\n }\n showMonth(year: number, month: number) {\n this.cursor = toISO(new Date(year, month, 1));\n if (this.rendered) this.paint();\n }\n focusDay() {\n this.render();\n this.bodyEl.querySelector<HTMLElement>('[tabindex=\"0\"]')?.focus();\n }\n}\nregister('calendar', Calendar);\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["fmt", "opts", "d", "getLocale", "Calendar", "Component", "today", "el", "h", "t", "iconEl", "v", "fromISO", "cell", "y", "m", "cur", "addMonths", "iso", "min", "max", "isDisabled", "start", "end", "r", "dir", "next", "before", "e", "c", "dow", "moves", "addDays", "firstDay", "first", "head", "i", "rows", "todayIso", "from", "to", "w", "tr", "day", "toISO", "td", "cells", "_", "b", "value", "range", "year", "month", "register"]
|
|
7
|
-
}
|
package/dist/chunk-4DHQKECB.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as h}from"./chunk-NHVEP72K.js";import{a}from"./chunk-XZEOSW3Q.js";import{a as f,b as p,d as c}from"./chunk-IYPKPLCU.js";import{b as o}from"./chunk-PZSHOSOS.js";import{e as n}from"./chunk-MA5BJL3S.js";var m=new Map;function M(r,e){m.set(r,e)}function g(r){let e=typeof r=="string"?m.get(r):r;if(!e)throw new Error(`Optikos: unknown lookup "${r}". Did you call registerLookup?`);return e}var y=r=>typeof r.store=="function"?r.store():r.store,v=r=>!r||r==="textfield"||r==="textarea",k=r=>r==null||r===""||Array.isArray(r)&&!r.length,l=class extends f{baseCls="op-searchgrid";def;store;fields=[];grid;form;build(){this.def=g(this.config.lookup),this.store=y(this.def);let e=this.def;this.form=o("div","op-searchgrid__filters",{role:"search"});let i=[new a({text:n("search"),icon:"search",variant:"primary",handler:()=>{this.search()}}),new a({text:n("clear"),handler:()=>this.clear()})];return this.fields=(e.filters??[]).map(t=>{let{op:s,field:x,...u}=t,d=c({...u,renderTo:void 0});return d.on("enter",()=>{this.search()}),{cfg:t,cmp:d}}),this.form.append(...this.fields.map(t=>t.cmp.el),o("div","op-searchgrid__buttons",{},...i.map(t=>t.el))),this.grid=new h({store:this.store,columns:e.columns,selection:e.selection??"single",paging:e.paging!==!1,flex:1}),this.grid.on("select",t=>this.emit("select",t)),this.grid.on("row-activate",()=>this.confirm()),this.grid.on("row-dblclick",()=>this.confirm()),this.own(()=>[...i,this.grid,...this.fields.map(t=>t.cmp)].forEach(t=>t.destroy())),o("div",this.baseCls,{},this.form,this.grid.el)}onRender(){this.def.autoSearch!==!1&&this.search()}notifyMount(){super.notifyMount(),this.fields.forEach(e=>e.cmp.notifyMount()),this.grid.notifyMount()}confirm(){let e=this.grid.getSelection();e.length&&this.emit("confirm",e)}getFilters(){return this.fields.flatMap(({cfg:e,cmp:i})=>{let t=i.getValue?.();if(k(t))return[];let s=e.field??e.name;return typeof t=="object"&&!Array.isArray(t)&&"start"in t?t.start?[{field:s,op:"between",value:[t.start,t.end??t.start]}]:[]:[{field:s,op:e.op??(v(e.type)?"contains":"eq"),value:t}]})}async search(e){e!=null&&this.setQuery(e);let i=this.getFilters();this.emit("before-search",i)!==!1&&(await(i.length?this.store.filter(i):this.store.clearFilter()),this.emit("search",i))}clear(){this.fields.forEach(e=>e.cmp.clear?.()),this.search()}setQuery(e){let i=this.def.queryField??this.def.filters?.[0]?.name;this.fields.find(t=>t.cfg.name===i)?.cmp?.setValue?.(e)}getSelection(){return this.grid.getSelection()}getGrid(){return this.grid}getStore(){return this.store}focus(){(this.fields[0]?.cmp??this.grid).focus()}};p("searchgrid",l);export{M as a,g as b,y as c,l as d};
|
|
2
|
-
//# sourceMappingURL=chunk-4DHQKECB.js.map
|
package/dist/chunk-4Q67QI7J.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as M}from"./chunk-ZYUXCZX7.js";import{a as S}from"./chunk-U3X2FW6U.js";import{a as L}from"./chunk-ZCAAM4NH.js";import{a as y}from"./chunk-SNTHW4K2.js";import{a as A}from"./chunk-XZEOSW3Q.js";import{c as _}from"./chunk-IHAYOSBR.js";import{a as k,b as x}from"./chunk-IYPKPLCU.js";import{b as a}from"./chunk-PZSHOSOS.js";import{e as r}from"./chunk-MA5BJL3S.js";var F={text:["contains","notContains","eq","ne","startsWith","endsWith","in","nin","empty","notEmpty"],number:["eq","ne","gt","ge","lt","le","between","notBetween","empty","notEmpty"],date:["eq","ne","gt","ge","lt","le","between","notBetween","empty","notEmpty"],select:["eq","ne","in","nin","empty","notEmpty"]},G={eq:"fbEq",ne:"fbNe",contains:"fbContains",notContains:"fbNotContains",startsWith:"fbStarts",endsWith:"fbEnds",gt:"fbGt",ge:"fbGe",lt:"fbLt",le:"fbLe",between:"fbBetween",notBetween:"fbNotBetween",in:"fbIn",nin:"fbNin",empty:"fbEmpty",notEmpty:"fbNotEmpty"},v=m=>m==="empty"||m==="notEmpty"?0:m==="between"||m==="notBetween"?2:1,b=m=>m==="in"||m==="nin",w=class extends k{baseCls="op-filterbuilder";root={kind:"group",op:"and",items:[]};parts=[];nextId=1;cancelApply;pickMenu;onRender(){this.el.setAttribute("role","group"),this.el.setAttribute("aria-label",r("fbLabel")),this.config.value&&(this.root=this.fromNode(this.config.value)),this.own(()=>(this.parts.forEach(e=>e.destroy()),this.pickMenu?.destroy())),this.paint(),this.config.value&&this.config.store&&this.apply()}fromNode(e){if("filters"in e)return{kind:"group",op:e.op,items:e.filters.map(n=>this.fromNode(n))};let[i,t]=Array.isArray(e.value)&&!b(e.op??"eq")?e.value:[e.value,void 0];return{kind:"rule",id:this.nextId++,field:e.field,op:e.op??"eq",value:b(e.op??"eq")?e.value:i,value2:t}}field(e){return this.config.fields.find(i=>i.name===e)??this.config.fields[0]}complete(e){let i=v(e.op),t=n=>n!=null&&n!==""&&!(Array.isArray(n)&&!n.length);return i===0||(i===1?t(e.value):t(e.value)&&t(e.value2))}toNode(e){let i=e.items.flatMap(t=>{if(t.kind==="group")return this.toNode(t)?[this.toNode(t)]:[];if(!this.complete(t))return[];let n=v(t.op);return[{field:t.field,op:t.op,...n===1?{value:t.value}:n===2?{value:[t.value,t.value2]}:{}}]});return i.length?{op:e.op,filters:i}:null}getFilter(){return this.toNode(this.root)}setFilter(e){this.root=e?this.fromNode(e):{kind:"group",op:"and",items:[]},this.rendered&&this.paint(),this.changed()}clear(){this.setFilter(null),this.apply()}apply(){this.cancelApply?.();let e=this.getFilter();if(this.emit("before-apply",e)===!1)return;let i=this.config.store;i&&(e?i.filter(e):i.clearFilter()),this.emit("apply",e)}addRule(e){this.root.items.push(this.newRule(e)),this.rendered&&this.paint()}setFields(e){this.config.fields=e,this.rendered&&this.paint()}setStore(e){this.config.store=e}newRule(e){let i=this.field(e??"");return{kind:"rule",id:this.nextId++,field:i.name,op:F[i.type??"text"][0]}}changed(){this.emit("change",this.getFilter()),this.config.live!==!1&&(this.cancelApply?.(),this.cancelApply=this.later(()=>this.apply(),250))}paint(){let e=document.activeElement?.closest("[data-fb]")?.dataset.fb;this.parts.splice(0).forEach(n=>n.destroy());let i=[this.group(this.root,0,null)];this.config.live===!1&&i.push(a("div","op-filterbuilder__foot",{},this.button(r("fbApply"),"primary",()=>this.apply()))),this.el.replaceChildren(...i),this.mounted&&this.parts.forEach(n=>n.notifyMount());let t=e&&this.el.querySelector(`[data-fb="${e}"]`);t&&(t.matches("select,button,input")?t:t.querySelector("input"))?.focus()}button(e,i,t,n){let p=new A({text:e,variant:i,icon:n,handler:t});return this.parts.push(p),p.el}select(e,i,t,n,p){let s=a("select","op-filterbuilder__select",{"aria-label":t,"data-fb":n});for(let[h,d]of e)s.append(a("option","",{value:h},d));return s.value=i,this.listen(s,"change",()=>p(s.value)),s}group(e,i,t){let n=a("div",`op-filterbuilder__group${i?" is-nested":""}`,{role:"group","aria-label":r("fbLabel")}),p=this.select([["and",r("fbAnd")],["or",r("fbOr")]],e.op,r("fbLabel"),`g${i}:logic`,o=>{e.op=o,this.changed()}),s=a("div","op-filterbuilder__head",{},p),h=o=>{let l=this.newRule(o);e.items.push(l),this.paint(),this.el.querySelector(`[data-fb="r${l.id}:v1"] input, select[data-fb="r${l.id}:v1"]`)?.focus()},d=this.button(r("fbAddFilter"),"ghost",()=>this.config.addMode==="pick"?this.pick(d,h):h(),"plus");s.append(d),i<(this.config.maxDepth??3)&&s.append(this.button(r("fbAddGroup"),"ghost",()=>{e.items.push({kind:"group",op:"or",items:[this.newRule()]}),this.paint()},"plus")),t?s.append(this.removeBtn(()=>(t.items.splice(t.items.indexOf(e),1),this.paint(),this.changed()))):e.items.length&&s.append(this.button(r("fbClear"),"ghost",()=>this.clear())),n.append(s),!e.items.length&&!t&&n.append(a("div","op-filterbuilder__none",{},r("fbNone")));for(let o of e.items)n.append(o.kind==="group"?this.group(o,i+1,e):this.rule(o,e));return n}pick(e,i){this.pickMenu??=new L({}),this.pickMenu.setItems(this.config.fields.map(t=>({text:t.label??t.name,handler:()=>i(t.name)}))),this.pickMenu.showBy(e)}removeBtn(e){let i=a("button","op-filterbuilder__remove",{type:"button","aria-label":r("fbRemove"),title:r("fbRemove")},_("x"));return this.listen(i,"click",e),i}rule(e,i){let t=this.field(e.field),n=t.type??"text",p=`r${e.id}`,s=this.select(this.config.fields.map(l=>[l.name,l.label??l.name]),e.field,r("fbField"),`${p}:field`,l=>{e.field=l;let u=F[this.field(l).type??"text"];(!u.includes(e.op)||(this.field(l).type??"text")!==n)&&(e.op=u[0]),e.value=e.value2=void 0,this.paint(),this.changed()}),h=this.select(F[n].map(l=>[l,r(G[l])]),e.op,r("fbOperator"),`${p}:op`,l=>{let u=e.op;e.op=l,(v(u)!==v(e.op)||b(u)!==b(e.op))&&(e.value=e.value2=void 0),this.paint(),this.changed()}),d=a("div","op-filterbuilder__row",{},s,h),o=v(e.op);return o>=1&&d.append(this.editor(e,t,"value",`${p}:v1`)),o===2&&d.append(a("span","op-filterbuilder__to",{},r("fbTo")),this.editor(e,t,"value2",`${p}:v2`)),d.append(this.removeBtn(()=>(i.items.splice(i.items.indexOf(e),1),this.paint(),this.changed()))),d}editor(e,i,t,n){let p=i.type??"text",s=r("fbValue"),h=o=>{e[t]=o,this.changed()};if(p==="select"){let o=(i.options??[]).map(f=>typeof f=="object"?[String(f.value),f.label]:[String(f),String(f)]),l=f=>(i.options??[]).map(c=>typeof c=="object"?c.value:c).find(c=>String(c)===f)??f;if(b(e.op)){let f=new Set((Array.isArray(e.value)?e.value:[]).map(String)),c=a("div","op-filterbuilder__chips",{role:"group","aria-label":s,"data-fb":n});for(let[g,N]of o){let E=a("input","op-filterbuilder__chipbox",{type:"checkbox",value:g});E.checked=f.has(g),c.append(a("label","op-filterbuilder__chip",{},E,a("span","",{},N)))}return this.listen(c,"change",()=>h(Array.from(c.querySelectorAll("input:checked")).map(g=>l(g.value)))),c}let u=a("select","op-filterbuilder__select",{"aria-label":s,"data-fb":n});u.append(a("option","",{value:""},""));for(let[f,c]of o)u.append(a("option","",{value:f},c));return u.value=e.value!=null?String(e.value):"",this.listen(u,"change",()=>h(u.value===""?void 0:l(u.value))),u}if(b(e.op)){let o=new y({stableSize:!1,placeholder:r("fbList"),value:(e.value??[]).join(", ")});return o.on("change",l=>h(l.split(",").map(u=>u.trim()).filter(Boolean))),this.own1(o,s,n)}let d=p==="number"?new M({value:e[t]??null,stableSize:!1}):p==="date"?new S({value:e[t]??null,stableSize:!1}):new y({value:e[t]??"",stableSize:!1});return d.on("change",o=>h(o===""?void 0:o)),this.own1(d,s,n)}own1(e,i,t){this.parts.push(e),e.on("enter",()=>this.apply());let n=e.el;return n.classList.add("op-filterbuilder__value"),n.dataset.fb=t,e.getInput().setAttribute("aria-label",i),n}};x("filterbuilder",w);export{w as a};
|
|
2
|
-
//# sourceMappingURL=chunk-4Q67QI7J.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/components/data/filterbuilder/filterbuilder.ts"],
|
|
4
|
-
"sourcesContent": ["import { Component, type ComponentConfig } from '../../../core/component';\nimport { register } from '../../../core/registry';\nimport { h } from '../../../core/dom';\nimport { t } from '../../../core/i18n';\nimport type { FilterGroup, FilterNode, FilterOp } from '../../../data/proxy';\nimport type { Store } from '../../../data/store';\nimport { iconEl } from '../../base/icon/icon';\nimport { Menu } from '../../overlays/menu/menu';\nimport { Button } from '../../base/button/button';\nimport { TextField } from '../../fields/textfield/textfield';\nimport { NumberField } from '../../fields/numberfield/numberfield';\nimport { DateField } from '../../fields/datefield/datefield';\n\nexport interface FilterField {\n name: string;\n label?: string;\n type?: 'text' | 'number' | 'date' | 'select';\n /** For `select`: the choices. */\n options?: Array<string | number | { value: string | number; label: string }>;\n}\n\nexport interface FilterBuilderConfig extends ComponentConfig {\n fields: FilterField[];\n /** Starting filters. */\n value?: FilterGroup | null;\n /** Filtered as the user edits (`live`) or when Apply is pressed. */\n store?: Store<any>;\n /** Apply on every edit (debounced). Default true. With `false` an Apply button appears. */\n live?: boolean;\n /**\n * What \"Add filter\" does: `'row'` (default) adds an empty row for the first field; `'pick'` first asks\n * which field to filter by (a menu of the fields) and adds the row for it.\n */\n addMode?: 'row' | 'pick';\n /** Deepest group nesting allowed. Default 3. */\n maxDepth?: number;\n}\n\ntype Rule = { kind: 'rule'; id: number; field: string; op: FilterOp; value?: any; value2?: any };\ntype Group = { kind: 'group'; op: 'and' | 'or'; items: Array<Rule | Group> };\n\nconst OPS: Record<NonNullable<FilterField['type']>, FilterOp[]> = {\n text: ['contains', 'notContains', 'eq', 'ne', 'startsWith', 'endsWith', 'in', 'nin', 'empty', 'notEmpty'],\n number: ['eq', 'ne', 'gt', 'ge', 'lt', 'le', 'between', 'notBetween', 'empty', 'notEmpty'],\n date: ['eq', 'ne', 'gt', 'ge', 'lt', 'le', 'between', 'notBetween', 'empty', 'notEmpty'],\n select: ['eq', 'ne', 'in', 'nin', 'empty', 'notEmpty'],\n};\nconst KEY: Record<FilterOp, string> = {\n eq: 'fbEq', ne: 'fbNe', contains: 'fbContains', notContains: 'fbNotContains', startsWith: 'fbStarts', endsWith: 'fbEnds',\n gt: 'fbGt', ge: 'fbGe', lt: 'fbLt', le: 'fbLe', between: 'fbBetween', notBetween: 'fbNotBetween', in: 'fbIn', nin: 'fbNin',\n empty: 'fbEmpty', notEmpty: 'fbNotEmpty',\n};\nconst arity = (op: FilterOp) => (op === 'empty' || op === 'notEmpty' ? 0 : op === 'between' || op === 'notBetween' ? 2 : 1);\nconst isList = (op: FilterOp) => op === 'in' || op === 'nin';\n\n/**\n * A dynamic filter editor: rows of `field \u00B7 operator \u00B7 value` that accumulate below each other, joined by AND or OR,\n * with nestable groups. The result is a `FilterGroup` for `Store.filter`.\n */\nexport class FilterBuilder extends Component<FilterBuilderConfig> {\n protected override baseCls = 'op-filterbuilder';\n private root: Group = { kind: 'group', op: 'and', items: [] };\n private parts: Component[] = [];\n private nextId = 1;\n private cancelApply?: () => void;\n private pickMenu?: Menu;\n\n protected override onRender() {\n this.el.setAttribute('role', 'group');\n this.el.setAttribute('aria-label', t('fbLabel'));\n if (this.config.value) this.root = this.fromNode(this.config.value) as Group;\n this.own(() => (this.parts.forEach((p) => p.destroy()), this.pickMenu?.destroy()));\n this.paint();\n if (this.config.value && this.config.store) this.apply(); // the starting filter takes effect right away\n }\n\n // ---- model <-> filter ----------------------------------------------------------------------\n\n private fromNode(n: FilterNode): Rule | Group {\n if ('filters' in n) return { kind: 'group', op: n.op, items: n.filters.map((f) => this.fromNode(f)) };\n const [a, b] = Array.isArray(n.value) && !isList(n.op ?? 'eq') ? n.value : [n.value, undefined];\n return { kind: 'rule', id: this.nextId++, field: n.field, op: n.op ?? 'eq', value: isList(n.op ?? 'eq') ? n.value : a, value2: b };\n }\n\n private field(name: string): FilterField {\n return this.config.fields.find((f) => f.name === name) ?? this.config.fields[0];\n }\n\n private complete(r: Rule): boolean {\n const n = arity(r.op);\n const has = (v: unknown) => v != null && v !== '' && !(Array.isArray(v) && !v.length);\n return n === 0 || (n === 1 ? has(r.value) : has(r.value) && has(r.value2));\n }\n\n private toNode(g: Group): FilterGroup | null {\n const filters = g.items.flatMap((it): FilterNode[] => {\n if (it.kind === 'group') return this.toNode(it) ? [this.toNode(it)!] : [];\n if (!this.complete(it)) return [];\n const n = arity(it.op);\n return [{ field: it.field, op: it.op, ...(n === 1 ? { value: it.value } : n === 2 ? { value: [it.value, it.value2] } : {}) }];\n });\n return filters.length ? { op: g.op, filters } : null;\n }\n\n /** The complete rules as a filter tree (incomplete rows are left out); null when there is nothing to filter by. */\n getFilter(): FilterGroup | null {\n return this.toNode(this.root);\n }\n\n setFilter(filter: FilterGroup | null): void {\n this.root = filter ? (this.fromNode(filter) as Group) : { kind: 'group', op: 'and', items: [] };\n if (this.rendered) this.paint();\n this.changed();\n }\n\n /** Removes every row and applies the empty filter. */\n clear(): void {\n this.setFilter(null);\n this.apply();\n }\n\n /** Pushes the current filter to the store and fires `apply`. */\n apply(): void {\n this.cancelApply?.();\n const f = this.getFilter();\n if (this.emit('before-apply', f) === false) return;\n const store = this.config.store;\n if (store) void (f ? store.filter(f) : store.clearFilter());\n this.emit('apply', f);\n }\n\n /** Adds a row (optionally for a given field) to the root group. */\n addRule(field?: string): void {\n this.root.items.push(this.newRule(field));\n if (this.rendered) this.paint();\n }\n\n setFields(fields: FilterField[]): void {\n this.config.fields = fields;\n if (this.rendered) this.paint();\n }\n\n setStore(store: Store<any> | undefined): void {\n this.config.store = store;\n }\n\n private newRule(field?: string): Rule {\n const f = this.field(field ?? '');\n return { kind: 'rule', id: this.nextId++, field: f.name, op: OPS[f.type ?? 'text'][0] };\n }\n\n private changed(): void {\n this.emit('change', this.getFilter());\n if (this.config.live === false) return;\n this.cancelApply?.();\n this.cancelApply = this.later(() => this.apply(), 250);\n }\n\n // ---- rendering -----------------------------------------------------------------------------\n\n /** Rebuilds the rows, keeping keyboard focus on the same control. */\n private paint(): void {\n const keep = (document.activeElement as HTMLElement | null)?.closest<HTMLElement>('[data-fb]')?.dataset.fb;\n this.parts.splice(0).forEach((p) => p.destroy());\n const kids: HTMLElement[] = [this.group(this.root, 0, null)];\n if (this.config.live === false) kids.push(h('div', 'op-filterbuilder__foot', {}, this.button(t('fbApply'), 'primary', () => this.apply())));\n this.el.replaceChildren(...kids);\n if (this.mounted) this.parts.forEach((p) => p.notifyMount());\n const back = keep && this.el.querySelector<HTMLElement>(`[data-fb=\"${keep}\"]`);\n if (back) (back.matches('select,button,input') ? back : back.querySelector('input'))?.focus();\n }\n\n private button(text: string, variant: 'default' | 'primary' | 'ghost', handler: () => void, icon?: string): HTMLElement {\n const b = new Button({ text, variant, icon, handler });\n this.parts.push(b);\n return b.el;\n }\n\n private select(options: Array<[string, string]>, value: string, label: string, key: string, onChange: (v: string) => void): HTMLSelectElement {\n const s = h('select', 'op-filterbuilder__select', { 'aria-label': label, 'data-fb': key });\n for (const [v, text] of options) s.append(h('option', '', { value: v }, text));\n s.value = value;\n this.listen(s, 'change', () => onChange(s.value));\n return s;\n }\n\n private group(g: Group, depth: number, parent: Group | null): HTMLElement {\n const el = h('div', `op-filterbuilder__group${depth ? ' is-nested' : ''}`, { role: 'group', 'aria-label': t('fbLabel') });\n const logic = this.select([['and', t('fbAnd')], ['or', t('fbOr')]], g.op, t('fbLabel'), `g${depth}:logic`, (v) => {\n g.op = v as 'and' | 'or';\n this.changed();\n });\n const head = h('div', 'op-filterbuilder__head', {}, logic);\n const add = (field?: string) => {\n const r = this.newRule(field);\n g.items.push(r);\n this.paint();\n this.el.querySelector<HTMLElement>(`[data-fb=\"r${r.id}:v1\"] input, select[data-fb=\"r${r.id}:v1\"]`)?.focus();\n };\n const addBtn = this.button(t('fbAddFilter'), 'ghost', () => (this.config.addMode === 'pick' ? this.pick(addBtn, add) : add()), 'plus');\n head.append(addBtn);\n if (depth < (this.config.maxDepth ?? 3)) {\n head.append(\n this.button(t('fbAddGroup'), 'ghost', () => {\n g.items.push({ kind: 'group', op: 'or', items: [this.newRule()] });\n this.paint();\n }, 'plus'),\n );\n }\n if (parent) head.append(this.removeBtn(() => (parent.items.splice(parent.items.indexOf(g), 1), this.paint(), this.changed())));\n else if (g.items.length) head.append(this.button(t('fbClear'), 'ghost', () => this.clear()));\n el.append(head);\n if (!g.items.length && !parent) el.append(h('div', 'op-filterbuilder__none', {}, t('fbNone')));\n for (const it of g.items) el.append(it.kind === 'group' ? this.group(it, depth + 1, g) : this.rule(it, g));\n return el;\n }\n\n /** \"Add filter\" in `pick` mode: a menu of the fields; the chosen one gets the new row. */\n private pick(anchor: HTMLElement, add: (field: string) => void): void {\n this.pickMenu ??= new Menu({});\n this.pickMenu.setItems(this.config.fields.map((f) => ({ text: f.label ?? f.name, handler: () => add(f.name) })));\n this.pickMenu.showBy(anchor);\n }\n\n private removeBtn(onClick: () => void): HTMLElement {\n const b = h('button', 'op-filterbuilder__remove', { type: 'button', 'aria-label': t('fbRemove'), title: t('fbRemove') }, iconEl('x'));\n this.listen(b, 'click', onClick);\n return b;\n }\n\n private rule(r: Rule, parent: Group): HTMLElement {\n const f = this.field(r.field);\n const type = f.type ?? 'text';\n const k = `r${r.id}`;\n const fieldSel = this.select(this.config.fields.map((x) => [x.name, x.label ?? x.name]), r.field, t('fbField'), `${k}:field`, (v) => {\n r.field = v;\n const ops = OPS[this.field(v).type ?? 'text'];\n if (!ops.includes(r.op) || (this.field(v).type ?? 'text') !== type) r.op = ops[0];\n r.value = r.value2 = undefined;\n this.paint();\n this.changed();\n });\n const opSel = this.select(OPS[type].map((o) => [o, t(KEY[o])]), r.op, t('fbOperator'), `${k}:op`, (v) => {\n const prev = r.op;\n r.op = v as FilterOp;\n if (arity(prev) !== arity(r.op) || isList(prev) !== isList(r.op)) r.value = r.value2 = undefined;\n this.paint();\n this.changed();\n });\n const row = h('div', 'op-filterbuilder__row', {}, fieldSel, opSel);\n const n = arity(r.op);\n if (n >= 1) row.append(this.editor(r, f, 'value', `${k}:v1`));\n if (n === 2) row.append(h('span', 'op-filterbuilder__to', {}, t('fbTo')), this.editor(r, f, 'value2', `${k}:v2`));\n row.append(this.removeBtn(() => (parent.items.splice(parent.items.indexOf(r), 1), this.paint(), this.changed())));\n return row;\n }\n\n private editor(r: Rule, f: FilterField, slot: 'value' | 'value2', key: string): HTMLElement {\n const type = f.type ?? 'text';\n const label = t('fbValue');\n const set = (v: unknown) => {\n r[slot] = v;\n this.changed();\n };\n if (type === 'select') {\n const opts = (f.options ?? []).map((o): [string, string] => (typeof o === 'object' ? [String(o.value), o.label] : [String(o), String(o)]));\n const raw = (v: string) => (f.options ?? []).map((o) => (typeof o === 'object' ? o.value : o)).find((o) => String(o) === v) ?? v;\n if (isList(r.op)) {\n // \"is any of\": one toggle chip per option (a native multi-select is tall, scrolls and is easy to mis-click)\n const on = new Set((Array.isArray(r.value) ? r.value : []).map(String));\n const group = h('div', 'op-filterbuilder__chips', { role: 'group', 'aria-label': label, 'data-fb': key });\n for (const [v, text] of opts) {\n const box = h('input', 'op-filterbuilder__chipbox', { type: 'checkbox', value: v });\n box.checked = on.has(v);\n group.append(h('label', 'op-filterbuilder__chip', {}, box, h('span', '', {}, text)));\n }\n this.listen(group, 'change', () => set(Array.from(group.querySelectorAll<HTMLInputElement>('input:checked')).map((i) => raw(i.value))));\n return group;\n }\n const s = h('select', 'op-filterbuilder__select', { 'aria-label': label, 'data-fb': key });\n s.append(h('option', '', { value: '' }, ''));\n for (const [v, text] of opts) s.append(h('option', '', { value: v }, text));\n s.value = r.value != null ? String(r.value) : '';\n this.listen(s, 'change', () => set(s.value === '' ? undefined : raw(s.value)));\n return s;\n }\n if (isList(r.op)) {\n const c = new TextField({ stableSize: false, placeholder: t('fbList'), value: ((r.value as unknown[]) ?? []).join(', ') });\n c.on('change', (v: string) => set(v.split(',').map((x) => x.trim()).filter(Boolean)));\n return this.own1(c, label, key);\n }\n const c = type === 'number' ? new NumberField({ value: r[slot] ?? null, stableSize: false }) : type === 'date' ? new DateField({ value: r[slot] ?? null, stableSize: false }) : new TextField({ value: r[slot] ?? '', stableSize: false });\n c.on('change', (v: unknown) => set(v === '' ? undefined : v));\n return this.own1(c, label, key);\n }\n\n /** Registers an editor, labels its input, and makes Enter apply. */\n private own1(c: TextField<any, any>, label: string, key: string): HTMLElement {\n this.parts.push(c);\n c.on('enter', () => this.apply());\n const el = c.el;\n el.classList.add('op-filterbuilder__value');\n el.dataset.fb = key;\n c.getInput().setAttribute('aria-label', label);\n return el;\n }\n}\nregister('filterbuilder', FilterBuilder);\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["OPS", "KEY", "arity", "op", "isList", "FilterBuilder", "Component", "t", "p", "n", "f", "a", "b", "name", "r", "has", "v", "g", "filters", "it", "filter", "store", "field", "fields", "keep", "kids", "h", "back", "text", "variant", "handler", "icon", "Button", "options", "value", "label", "key", "onChange", "depth", "parent", "el", "logic", "head", "add", "addBtn", "anchor", "Menu", "onClick", "iconEl", "type", "k", "fieldSel", "x", "ops", "opSel", "o", "prev", "row", "slot", "set", "opts", "raw", "on", "group", "box", "i", "s", "c", "TextField", "NumberField", "DateField", "register"]
|
|
7
|
-
}
|
package/dist/chunk-5AXLYDKU.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as S}from"./chunk-IO66A6G5.js";import{a as w}from"./chunk-JVEPKW5X.js";import{a as y}from"./chunk-LBCWEWPN.js";import{c}from"./chunk-UPOBGNJ5.js";import{a as x}from"./chunk-K2DGY6MP.js";import{a as l}from"./chunk-XZEOSW3Q.js";import{a as g,b as v}from"./chunk-IYPKPLCU.js";import{b as p}from"./chunk-PZSHOSOS.js";import{e as a}from"./chunk-MA5BJL3S.js";var f=class extends g{baseCls="op-stepform__review";setContent(e){this.el.replaceChildren(...e)}},d=class extends w{baseCls="op-form op-stepform";stepper;body;pane;backBtn;nextBtn;finishBtn;index=0;constructor(e){let t,i=e.steps??[],r=e.review?new f:void 0,s=new S({steps:[...i.map(({title:o,description:B,icon:_,optional:k})=>({title:o,description:B,icon:_,optional:k})),...r?[{title:e.reviewTitle??a("stepReview")}]:[]]}),n=[...i.map(o=>({type:"container",title:o.title,cls:"op-stepform__step",layout:o.layout??{type:"grid",columns:2,gap:12},items:o.items})),...r?[{type:"container",title:e.reviewTitle??a("stepReview"),cls:"op-stepform__step",items:[r]}]:[]],h=new c({cls:"op-stepform__body",flex:1,layout:{type:"card"},items:n}),m=new l({text:e.backText??a("stepBack"),handler:()=>t.back()}),u=new l({text:e.nextText??a("stepNext"),variant:"primary",handler:()=>t.next()}),b=new l({text:e.finishText??a("stepFinish"),variant:"primary",htmlType:"submit"}),C=e.cancelText?[new l({text:e.cancelText,variant:"ghost",handler:()=>t.emit("cancel")})]:[],T=new y({cls:"op-stepform__footer",items:[...C,"->",m,u,b]});super({...e,layout:{type:"vbox"},items:[s,h,T]}),t=this,Object.assign(this,{stepper:s,body:h,pane:r,backBtn:m,nextBtn:u,finishBtn:b}),s.on("before-select",o=>(t.goTo(o),!1)),h.on("activate",()=>t.onActivate())}cfg(){return this.config}count(){return this.body.items.length}real(){return this.count()-(this.pane?1:0)}getStep(){return this.index}getStepCount(){return this.count()}getStepper(){return this.stepper}stepFields(e){let t=this.body.items[e];return t instanceof c?t.query(i=>i instanceof x):[]}validateStep(e){if(e>=this.real())return!0;let t=this.stepFields(e).filter(i=>!i.validate());return this.stepper.setStepState(e,t.length?"error":"done"),!t.length}goTo(e){if(e<0||e>=this.count()||e===this.index||this.emit("before-step-change",this.index,e)===!1)return!1;let t=e;if(this.cfg().linear!==!1&&e>this.index){for(let i=this.index;i<e;i++)if(!this.validateStep(i)){t=i;break}}return t!==this.index&&this.body.setActiveItem(t),t!==e&&this.stepFields(t).find(i=>i.getError())?.focus(),t===e}next(){return this.goTo(this.index+1)}back(){return this.goTo(this.index-1)}onActivate(){let e=this.body.items.indexOf(this.body.getActiveItem());if(e<0)return;let t=this.index;this.index=e,this.stepper.setActive(e);let i=this.count()-1;this.backBtn.config.hidden=e===0,this.nextBtn.config.hidden=e===i,this.finishBtn.config.hidden=e!==i;for(let[r,s]of[[this.backBtn,e===0],[this.nextBtn,e===i],[this.finishBtn,e!==i]])r.rendered&&(r.el.hidden=s);this.pane&&e===i&&this.refreshReview(),e!==t&&(this.emit("step-change",e,t),this.rendered&&this.el.isConnected&&!this.stepFields(e).some(r=>r.getError())&&this.stepFields(e)[0]?.focus())}refreshReview(){let e=this.getValues(),t=this.cfg().review;if(typeof t=="function")return this.pane.setContent([t(e,this)]);let i=[];for(let r=0;r<this.real();r++){let s=this.stepFields(r).filter(n=>n.name);s.length&&(i.push(p("h3","op-stepform__review-title",{},String(this.body.items[r].config.title??""))),i.push(p("dl","op-stepform__review-list",{},...s.flatMap(n=>[p("dt","",{},n.config.label??n.config.boxLabel??n.name),p("dd","",{},this.show_(n))]))))}this.pane.setContent(i)}show_(e){let t=e.getValue();if(typeof t=="boolean")return t?"\u2713":"\u2014";if(e.config.inputType==="password")return t?"\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022":"\u2014";let i=e.getDisplayText();return i||(t&&typeof t=="object"&&!Array.isArray(t)?Object.values(t).filter(Boolean).join(" \u2013 ")||"\u2014":Array.isArray(t)&&t.join(", ")||"\u2014")}submit(){if(this.index<this.count()-1)return this.next(),!1;let e=super.submit();for(let t=0;t<this.real();t++)this.stepper.setStepState(t,this.stepFields(t).some(i=>i.getError())?"error":"done");return e&&this.emit("finish",this.getValues()),e}reset(){super.reset(),this.clearErrors();for(let e=0;e<this.count();e++)this.stepper.setStepState(e,"pending");this.index!==0&&this.body.setActiveItem(0)}};v("stepform",d);export{d as a};
|
|
2
|
-
//# sourceMappingURL=chunk-5AXLYDKU.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/components/form/stepform/stepform.ts"],
|
|
4
|
-
"sourcesContent": ["import { Form, type FormConfig } from '../form/form';\nimport { Container, type ContainerConfig } from '../../../core/container';\nimport { Component } from '../../../core/component';\nimport { Field } from '../../../core/field';\nimport { register } from '../../../core/registry';\nimport { h } from '../../../core/dom';\nimport { t } from '../../../core/i18n';\nimport type { LayoutSpec } from '../../../layout/layout';\nimport { Stepper } from '../../navigation/stepper/stepper';\nimport { Button } from '../../base/button/button';\nimport { Toolbar } from '../../layout/toolbar/toolbar';\nimport '../../layout/container/container';\n\nexport interface FormStep {\n title: string;\n description?: string;\n icon?: string;\n /** May be left alone: the stepper says \"optional\" (its fields are still validated if filled wrongly). */\n optional?: boolean;\n items: ContainerConfig['items'];\n /** Default: two columns (one on a phone). */\n layout?: LayoutSpec;\n}\n\nexport interface StepFormConfig extends FormConfig {\n steps: FormStep[];\n /** Moving forward validates the steps on the way. `false` lets the user click any step. Default true. */\n linear?: boolean;\n /** Adds a last \"Review\" step with a summary of the values; a function renders the summary yourself. */\n review?: boolean | ((values: Record<string, any>, form: StepForm) => string | Node);\n reviewTitle?: string;\n backText?: string;\n nextText?: string;\n finishText?: string;\n /** Shows a Cancel button (fires `cancel`). */\n cancelText?: string;\n}\n\n/** The summary pane of the review step. */\nclass ReviewPane extends Component {\n protected override baseCls = 'op-stepform__review';\n setContent(nodes: Array<Node | string>) {\n this.el.replaceChildren(...nodes);\n }\n}\n\n/** One form, several steps: a Stepper on top, one step at a time, Back / Next / Finish, validation per step and an optional review. */\nexport class StepForm extends Form {\n protected override baseCls = 'op-form op-stepform';\n private stepper!: Stepper;\n private body!: Container;\n private pane?: ReviewPane;\n private backBtn!: Button;\n private nextBtn!: Button;\n private finishBtn!: Button;\n private index = 0;\n\n constructor(config: StepFormConfig) {\n let me!: StepForm;\n const steps = config.steps ?? [];\n const review = config.review ? new ReviewPane() : undefined;\n const stepper = new Stepper({ steps: [...steps.map(({ title, description, icon, optional }) => ({ title, description, icon, optional })), ...(review ? [{ title: config.reviewTitle ?? t('stepReview') }] : [])] });\n const panels = [\n ...steps.map((s) => ({ type: 'container', title: s.title, cls: 'op-stepform__step', layout: s.layout ?? { type: 'grid', columns: 2, gap: 12 }, items: s.items })),\n ...(review ? [{ type: 'container', title: config.reviewTitle ?? t('stepReview'), cls: 'op-stepform__step', items: [review] }] : []),\n ];\n const body = new Container({ cls: 'op-stepform__body', flex: 1, layout: { type: 'card' }, items: panels as never });\n const backBtn = new Button({ text: config.backText ?? t('stepBack'), handler: () => me.back() });\n const nextBtn = new Button({ text: config.nextText ?? t('stepNext'), variant: 'primary', handler: () => me.next() });\n const finishBtn = new Button({ text: config.finishText ?? t('stepFinish'), variant: 'primary', htmlType: 'submit' });\n const cancel = config.cancelText ? [new Button({ text: config.cancelText, variant: 'ghost', handler: () => me.emit('cancel') })] : [];\n const footer = new Toolbar({ cls: 'op-stepform__footer', items: [...cancel, '->', backBtn, nextBtn, finishBtn] });\n super({ ...config, layout: { type: 'vbox' }, items: [stepper, body, footer] });\n me = this;\n Object.assign(this, { stepper, body, pane: review, backBtn, nextBtn, finishBtn });\n stepper.on('before-select', (i: number) => (me.goTo(i), false));\n body.on('activate', () => me.onActivate());\n }\n\n private cfg(): StepFormConfig {\n return this.config as unknown as StepFormConfig;\n }\n\n private count(): number {\n return this.body.items.length;\n }\n private real(): number {\n return this.count() - (this.pane ? 1 : 0);\n }\n\n getStep(): number {\n return this.index;\n }\n getStepCount(): number {\n return this.count();\n }\n getStepper(): Stepper {\n return this.stepper;\n }\n\n private stepFields(i: number): Field<any>[] {\n const step = this.body.items[i];\n return step instanceof Container ? (step.query((c) => c instanceof Field) as Field<any>[]) : [];\n }\n\n /** Validates one step's fields (marks the errors, sets its state on the stepper). */\n validateStep(i: number): boolean {\n if (i >= this.real()) return true;\n const bad = this.stepFields(i).filter((f) => !f.validate());\n this.stepper.setStepState(i, bad.length ? 'error' : 'done');\n return !bad.length;\n }\n\n /** Moves to a step. Forward with `linear` validates the steps on the way and stops at the first invalid one. Returns whether it got there. */\n goTo(j: number): boolean {\n if (j < 0 || j >= this.count() || j === this.index) return false;\n if (this.emit('before-step-change', this.index, j) === false) return false;\n let target = j;\n if (this.cfg().linear !== false && j > this.index) {\n for (let k = this.index; k < j; k++) {\n if (!this.validateStep(k)) {\n target = k;\n break;\n }\n }\n }\n if (target !== this.index) this.body.setActiveItem(target);\n if (target !== j) this.stepFields(target).find((f) => f.getError())?.focus();\n return target === j;\n }\n next(): boolean {\n return this.goTo(this.index + 1);\n }\n back(): boolean {\n return this.goTo(this.index - 1);\n }\n\n /** The card layout changed the visible step (by `goTo`, or because `validate` brought an invalid field into view). */\n private onActivate(): void {\n const i = this.body.items.indexOf(this.body.getActiveItem()!);\n if (i < 0) return;\n const from = this.index;\n this.index = i;\n this.stepper.setActive(i);\n const last = this.count() - 1;\n this.backBtn.config.hidden = i === 0;\n this.nextBtn.config.hidden = i === last;\n this.finishBtn.config.hidden = i !== last;\n for (const [b, hide] of [[this.backBtn, i === 0], [this.nextBtn, i === last], [this.finishBtn, i !== last]] as const) if (b.rendered) b.el.hidden = hide;\n if (this.pane && i === last) this.refreshReview();\n if (i !== from) {\n this.emit('step-change', i, from);\n if (this.rendered && this.el.isConnected && !this.stepFields(i).some((f) => f.getError())) this.stepFields(i)[0]?.focus();\n }\n }\n\n private refreshReview(): void {\n const values = this.getValues();\n const fn = this.cfg().review;\n if (typeof fn === 'function') return this.pane!.setContent([fn(values, this)]);\n const out: Array<Node | string> = [];\n for (let i = 0; i < this.real(); i++) {\n const rows = this.stepFields(i).filter((f) => f.name);\n if (!rows.length) continue;\n out.push(h('h3', 'op-stepform__review-title', {}, String((this.body.items[i].config as { title?: string }).title ?? '')));\n out.push(h('dl', 'op-stepform__review-list', {}, ...rows.flatMap((f) => [h('dt', '', {}, f.config.label ?? (f.config as { boxLabel?: string }).boxLabel ?? f.name!), h('dd', '', {}, this.show_(f))])));\n }\n this.pane!.setContent(out);\n }\n\n /** What the user sees for a field (its display text; ticks for booleans, dots for passwords). */\n private show_(f: Field<any>): string {\n const v = f.getValue();\n if (typeof v === 'boolean') return v ? '\u2713' : '\u2014';\n if ((f.config as { inputType?: string }).inputType === 'password') return v ? '\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022' : '\u2014';\n const text = f.getDisplayText();\n if (text) return text;\n return v && typeof v === 'object' && !Array.isArray(v) ? Object.values(v).filter(Boolean).join(' \u2013 ') || '\u2014' : Array.isArray(v) ? v.join(', ') || '\u2014' : '\u2014';\n }\n\n /** Enter and the Finish button: Next on every step but the last; on the last, validate everything and `finish`. */\n override submit(): boolean {\n if (this.index < this.count() - 1) {\n this.next();\n return false;\n }\n const ok = super.submit();\n for (let i = 0; i < this.real(); i++) this.stepper.setStepState(i, this.stepFields(i).some((f) => f.getError()) ? 'error' : 'done');\n if (ok) this.emit('finish', this.getValues());\n return ok;\n }\n\n /** Clears the values and goes back to the first step. */\n override reset(): void {\n super.reset();\n this.clearErrors();\n for (let i = 0; i < this.count(); i++) this.stepper.setStepState(i, 'pending');\n if (this.index !== 0) this.body.setActiveItem(0);\n }\n}\nregister('stepform', StepForm);\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["ReviewPane", "Component", "nodes", "StepForm", "Form", "config", "me", "steps", "review", "stepper", "Stepper", "title", "description", "icon", "optional", "t", "panels", "s", "body", "Container", "backBtn", "Button", "nextBtn", "finishBtn", "cancel", "footer", "Toolbar", "i", "step", "c", "Field", "bad", "f", "j", "target", "k", "from", "last", "b", "hide", "values", "fn", "out", "rows", "h", "v", "text", "ok", "register"]
|
|
7
|
-
}
|
package/dist/chunk-5GNEFX6F.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as o,b as n}from"./chunk-IYPKPLCU.js";var t=class extends o{baseCls="op-label";build(){let e=document.createElement(this.config.for?"label":"span");return e.className="op-label",this.config.for&&(e.htmlFor=this.config.for),e}onRender(){this.setText(this.config.text??""),this.setVariant(this.config.variant??"default")}setText(e){this.config.text=e,this.rendered&&(this.el.textContent=e)}setVariant(e){if(this.config.variant=e,!!this.rendered)for(let i of["default","muted","title"])this.el.classList.toggle(`op-label--${i}`,i===e)}};n("label",t);export{t as a};
|
|
2
|
-
//# sourceMappingURL=chunk-5GNEFX6F.js.map
|
package/dist/chunk-5Q6Y6CM4.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as x}from"./chunk-PSPQH35P.js";import{a as m}from"./chunk-5GNEFX6F.js";import{a as u}from"./chunk-SNTHW4K2.js";import{c}from"./chunk-UPOBGNJ5.js";import{d as p}from"./chunk-IHAYOSBR.js";import{e as a}from"./chunk-MA5BJL3S.js";function l(t){return new Promise(e=>{let r=!1,s=i=>{r||(r=!0,e(i))},o=t.input?new u({value:t.input.value??"",placeholder:t.input.placeholder,validators:t.input.validators,ariaLabel:t.text}):void 0,d=new m({text:t.text,flex:1}),n=new x({title:t.title,cls:"op-messagebox",closeAction:"destroy",items:[new c({layout:{type:"hbox",gap:12,align:"flex-start"},items:[...t.icon?[new p({name:t.icon,cls:"op-messagebox__icon"})]:[],new c({layout:{type:"vbox"},flex:1,items:[d,...o?[o]:[]]})]})],buttons:t.buttons.map(i=>({text:i.text,variant:i.variant??"default",handler:()=>{t.beforeClose?.(i.id,n,o)!==!1&&(s(i.id),n.close())}}))});n.el.setAttribute("role",t.input?"dialog":"alertdialog"),n.el.setAttribute("aria-describedby",d.id),n.on("close",()=>s(t.cancelId??t.buttons[t.buttons.length-1].id));let g=t.buttons.find(i=>i.variant==="primary"||i.variant==="danger");o?.on("enter",()=>n.el.querySelectorAll(".op-panel__footer button")[t.buttons.indexOf(g??t.buttons[0])].click()),n.show(),o||n.el.querySelector(".op-panel__footer .op-button--primary, .op-panel__footer .op-button--danger")?.focus()})}var T={show:l,async alert(t,e={}){await l({text:t,title:e.title,icon:e.icon??"info",buttons:[{id:"ok",text:e.okText??a("ok"),variant:"primary"}],cancelId:"ok"})},async confirm(t,e={}){return await l({text:t,title:e.title,icon:e.icon??(e.danger?"alert":"info"),buttons:[{id:"cancel",text:e.cancelText??a("cancel")},{id:"ok",text:e.okText??a("ok"),variant:e.danger?"danger":"primary"}],cancelId:"cancel"})==="ok"},async prompt(t,e={}){let r=null;return await l({text:t,title:e.title,input:{value:e.value,placeholder:e.placeholder,validators:e.validators},buttons:[{id:"cancel",text:e.cancelText??a("cancel")},{id:"ok",text:e.okText??a("ok"),variant:"primary"}],cancelId:"cancel",beforeClose:(o,d,n)=>{if(o==="ok"){if(!n.validate())return!1;r=n.getValue()}}})==="ok"?r:null}};export{T as a};
|
|
2
|
-
//# sourceMappingURL=chunk-5Q6Y6CM4.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/components/overlays/messagebox/messagebox.ts"],
|
|
4
|
-
"sourcesContent": ["import { Window } from '../window/window';\nimport { Label } from '../../base/label/label';\nimport { TextField } from '../../fields/textfield/textfield';\nimport { Container } from '../../../core/container';\nimport { Icon } from '../../base/icon/icon';\nimport { t } from '../../../core/i18n';\nimport type { Validator } from '../../../core/validators';\n\nexport interface MessageBoxButton {\n id: string;\n text: string;\n variant?: 'default' | 'primary' | 'danger';\n}\n\nexport interface MessageBoxConfig {\n text: string;\n title?: string;\n icon?: string;\n buttons: MessageBoxButton[];\n /** Resolved when closed with Esc or the close button. */\n cancelId?: string;\n /** Adds a text input; `show` then resolves with the button id and the input is read by `prompt`. */\n input?: { value?: string; placeholder?: string; validators?: Validator<string>[] };\n /** Called with the pressed button id before closing; return `false` to keep the dialog open. */\n beforeClose?: (id: string, win: Window, input?: TextField) => boolean | void;\n}\n\nfunction open(cfg: MessageBoxConfig): Promise<string> {\n return new Promise((resolve) => {\n let done = false;\n const finish = (id: string) => {\n if (done) return;\n done = true;\n resolve(id);\n };\n const field = cfg.input ? new TextField({ value: cfg.input.value ?? '', placeholder: cfg.input.placeholder, validators: cfg.input.validators, ariaLabel: cfg.text }) : undefined;\n const message = new Label({ text: cfg.text, flex: 1 });\n const win: Window = new Window({\n title: cfg.title,\n cls: 'op-messagebox',\n closeAction: 'destroy',\n items: [\n new Container({\n layout: { type: 'hbox', gap: 12, align: 'flex-start' },\n items: [...(cfg.icon ? [new Icon({ name: cfg.icon, cls: 'op-messagebox__icon' })] : []), new Container({ layout: { type: 'vbox' }, flex: 1, items: [message, ...(field ? [field] : [])] })],\n }),\n ],\n buttons: cfg.buttons.map((b) => ({\n text: b.text,\n variant: b.variant ?? 'default',\n handler: () => {\n if (cfg.beforeClose?.(b.id, win, field) === false) return;\n finish(b.id);\n win.close();\n },\n })),\n });\n win.el.setAttribute('role', cfg.input ? 'dialog' : 'alertdialog');\n win.el.setAttribute('aria-describedby', message.id);\n win.on('close', () => finish(cfg.cancelId ?? cfg.buttons[cfg.buttons.length - 1].id));\n const primary = cfg.buttons.find((b) => b.variant === 'primary' || b.variant === 'danger');\n field?.on('enter', () => (win.el.querySelectorAll('.op-panel__footer button')[cfg.buttons.indexOf(primary ?? cfg.buttons[0])] as HTMLElement).click());\n win.show();\n // the primary action takes the initial focus unless there is an input\n if (!field) win.el.querySelector<HTMLElement>('.op-panel__footer .op-button--primary, .op-panel__footer .op-button--danger')?.focus();\n });\n}\n\nexport interface AlertOptions {\n title?: string;\n okText?: string;\n icon?: string;\n}\nexport interface ConfirmOptions {\n title?: string;\n okText?: string;\n cancelText?: string;\n danger?: boolean;\n icon?: string;\n}\nexport interface PromptOptions {\n title?: string;\n value?: string;\n placeholder?: string;\n okText?: string;\n cancelText?: string;\n validators?: Validator<string>[];\n}\n\nexport const MessageBox = {\n show: open,\n\n async alert(text: string, o: AlertOptions = {}): Promise<void> {\n await open({ text, title: o.title, icon: o.icon ?? 'info', buttons: [{ id: 'ok', text: o.okText ?? t('ok'), variant: 'primary' }], cancelId: 'ok' });\n },\n\n async confirm(text: string, o: ConfirmOptions = {}): Promise<boolean> {\n const id = await open({\n text,\n title: o.title,\n icon: o.icon ?? (o.danger ? 'alert' : 'info'),\n buttons: [\n { id: 'cancel', text: o.cancelText ?? t('cancel') },\n { id: 'ok', text: o.okText ?? t('ok'), variant: o.danger ? 'danger' : 'primary' },\n ],\n cancelId: 'cancel',\n });\n return id === 'ok';\n },\n\n /** Resolves with the text, or `null` when cancelled. The dialog stays open while the validators fail. */\n async prompt(text: string, o: PromptOptions = {}): Promise<string | null> {\n let value: string | null = null;\n const id = await open({\n text,\n title: o.title,\n input: { value: o.value, placeholder: o.placeholder, validators: o.validators },\n buttons: [\n { id: 'cancel', text: o.cancelText ?? t('cancel') },\n { id: 'ok', text: o.okText ?? t('ok'), variant: 'primary' },\n ],\n cancelId: 'cancel',\n beforeClose: (btn, _win, field) => {\n if (btn !== 'ok') return;\n if (!field!.validate()) return false;\n value = field!.getValue();\n },\n });\n return id === 'ok' ? value : null;\n },\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["open", "cfg", "resolve", "done", "finish", "id", "field", "TextField", "message", "Label", "win", "Window", "Container", "Icon", "b", "primary", "MessageBox", "text", "o", "t", "value", "btn", "_win"]
|
|
7
|
-
}
|
package/dist/chunk-666O2GKD.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as i,b as o}from"./chunk-IYPKPLCU.js";var t=class extends i{baseCls="op-spacer";tag="span";onRender(){let e=this.config;e.width==null&&e.flex==null&&!e.line&&(this.el.style.flex="1"),this.setLine(!!e.line)}setLine(e){this.config.line=e,this.rendered&&(this.el.classList.toggle("op-spacer--line",e),e?this.el.setAttribute("role","separator"):this.el.setAttribute("aria-hidden","true"),e&&this.el.removeAttribute("aria-hidden"))}};o("spacer",t);export{t as a};
|
|
2
|
-
//# sourceMappingURL=chunk-666O2GKD.js.map
|
package/dist/chunk-A66MDXHL.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as d}from"./chunk-ZCAAM4NH.js";import{c as p}from"./chunk-IHAYOSBR.js";import{a as c,b as l}from"./chunk-IYPKPLCU.js";import{b as i}from"./chunk-PZSHOSOS.js";import{e as m}from"./chunk-MA5BJL3S.js";var h=class extends c{baseCls="op-breadcrumb";tag="nav";list;menu;onRender(){this.list=i("ol","op-breadcrumb__list"),this.el.append(this.list),this.config.ariaLabel||this.el.setAttribute("aria-label",m("breadcrumb")),this.config.separator!=null&&this.setSeparator(this.config.separator),this.listen(this.list,"click",e=>{let r=e.target;if(r.closest(".op-breadcrumb__more"))return this.showHidden(r.closest("button"));let t=r.closest("[data-i]");t&&this.go(Number(t.dataset.i),e)}),this.own(()=>this.menu?.destroy()),this.paint()}items(){return this.config.items??[]}collapsed(){let e=this.items().length,r=Math.max(3,this.config.maxItems??4);return e<=r?[]:Array.from({length:e-(r-1)},(t,s)=>s+1)}paint(){let e=this.items(),r=this.collapsed(),t=e.length-1,s=[];e.forEach((n,a)=>{if(r.includes(a)){a===r[0]&&s.push(i("li","",{},i("button","op-breadcrumb__more",{type:"button","aria-label":m("breadcrumbMore"),"aria-haspopup":"menu","aria-expanded":"false"},"\u2026")));return}let o=[n.icon?p(n.icon):null,n.text],u=a===t?i("span","op-breadcrumb__current",{"aria-current":"page"},...o):n.href?i("a","op-breadcrumb__item",{href:n.href,"data-i":a},...o):i("button","op-breadcrumb__item",{type:"button","data-i":a},...o);s.push(i("li","",{},u))}),this.list.replaceChildren(...s)}go(e,r){let t=this.items()[e];return!t||e===this.items().length-1?!1:this.emit("before-navigate",t,e)===!1?(r?.preventDefault(),!1):(t.handler?.(t),this.emit("navigate",t,e),!0)}showHidden(e){let r=this.items();this.menu??=new d({}),this.menu.setItems(this.collapsed().map(t=>({text:r[t].text,icon:r[t].icon,handler:()=>{this.go(t)&&r[t].href&&(location.href=r[t].href)}}))),this.menu.on("show",()=>e.setAttribute("aria-expanded","true")),this.menu.on("hide",()=>e.setAttribute("aria-expanded","false")),this.menu.showBy(e)}setItems(e){this.config.items=e,this.rendered&&this.paint()}setMaxItems(e){this.config.maxItems=e,this.rendered&&this.paint()}setSeparator(e){this.config.separator=e,this.rendered&&this.el.style.setProperty("--op-breadcrumb-separator",JSON.stringify(e))}};l("breadcrumb",h);export{h as a};
|
|
2
|
-
//# sourceMappingURL=chunk-A66MDXHL.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/components/navigation/breadcrumb/breadcrumb.ts"],
|
|
4
|
-
"sourcesContent": ["import { Component, type ComponentConfig } from '../../../core/component';\nimport { register } from '../../../core/registry';\nimport { h } from '../../../core/dom';\nimport { t } from '../../../core/i18n';\nimport { iconEl } from '../../base/icon/icon';\nimport { Menu } from '../../overlays/menu/menu';\n\nexport interface BreadcrumbItem {\n text: string;\n icon?: string;\n /** Renders a real link (native navigation, middle-click, copy link). */\n href?: string;\n handler?: (item: BreadcrumbItem) => void;\n}\n\nexport interface BreadcrumbConfig extends ComponentConfig {\n items?: BreadcrumbItem[];\n /** More items than this collapse the middle into a \"\u2026\" menu. Minimum 3, default 4. */\n maxItems?: number;\n separator?: string;\n}\n\nexport class Breadcrumb extends Component<BreadcrumbConfig> {\n protected override baseCls = 'op-breadcrumb';\n protected override tag = 'nav' as const;\n private list!: HTMLElement;\n private menu?: Menu;\n\n protected override onRender() {\n this.list = h('ol', 'op-breadcrumb__list');\n this.el.append(this.list);\n if (!this.config.ariaLabel) this.el.setAttribute('aria-label', t('breadcrumb'));\n if (this.config.separator != null) this.setSeparator(this.config.separator);\n this.listen(this.list, 'click', (e: MouseEvent) => {\n const target = e.target as HTMLElement;\n if (target.closest('.op-breadcrumb__more')) return this.showHidden(target.closest('button')!);\n const el = target.closest<HTMLElement>('[data-i]');\n if (el) this.go(Number(el.dataset.i), e);\n });\n this.own(() => this.menu?.destroy());\n this.paint();\n }\n\n private items(): BreadcrumbItem[] {\n return this.config.items ?? [];\n }\n\n /** Indexes hidden behind the \"\u2026\" button (empty when everything fits). */\n private collapsed(): number[] {\n const n = this.items().length;\n const max = Math.max(3, this.config.maxItems ?? 4);\n if (n <= max) return [];\n return Array.from({ length: n - (max - 1) }, (_, i) => i + 1);\n }\n\n private paint() {\n const items = this.items();\n const hidden = this.collapsed();\n const last = items.length - 1;\n const lis: HTMLElement[] = [];\n items.forEach((item, i) => {\n if (hidden.includes(i)) {\n if (i === hidden[0]) lis.push(h('li', '', {}, h('button', 'op-breadcrumb__more', { type: 'button', 'aria-label': t('breadcrumbMore'), 'aria-haspopup': 'menu', 'aria-expanded': 'false' }, '\u2026')));\n return;\n }\n const content = [item.icon ? iconEl(item.icon) : null, item.text];\n const node =\n i === last\n ? h('span', 'op-breadcrumb__current', { 'aria-current': 'page' }, ...content)\n : item.href\n ? h('a', 'op-breadcrumb__item', { href: item.href, 'data-i': i }, ...content)\n : h('button', 'op-breadcrumb__item', { type: 'button', 'data-i': i }, ...content);\n lis.push(h('li', '', {}, node));\n });\n this.list.replaceChildren(...lis);\n }\n\n /** Runs `before-navigate` / handler / `navigate`. Returns false when cancelled. */\n private go(i: number, e?: Event): boolean {\n const item = this.items()[i];\n if (!item || i === this.items().length - 1) return false;\n if (this.emit('before-navigate', item, i) === false) {\n e?.preventDefault();\n return false;\n }\n item.handler?.(item);\n this.emit('navigate', item, i);\n return true;\n }\n\n private showHidden(button: HTMLElement) {\n const items = this.items();\n this.menu ??= new Menu({});\n this.menu.setItems(\n this.collapsed().map((i) => ({\n text: items[i].text,\n icon: items[i].icon,\n handler: () => {\n if (this.go(i) && items[i].href) location.href = items[i].href!;\n },\n })),\n );\n this.menu.on('show', () => button.setAttribute('aria-expanded', 'true'));\n this.menu.on('hide', () => button.setAttribute('aria-expanded', 'false'));\n this.menu.showBy(button);\n }\n\n setItems(items: BreadcrumbItem[]) {\n this.config.items = items;\n if (this.rendered) this.paint();\n }\n\n setMaxItems(max: number) {\n this.config.maxItems = max;\n if (this.rendered) this.paint();\n }\n\n /** Any text, e.g. `'/'` or `'\u203A'`. */\n setSeparator(separator: string) {\n this.config.separator = separator;\n if (this.rendered) this.el.style.setProperty('--op-breadcrumb-separator', JSON.stringify(separator));\n }\n}\nregister('breadcrumb', Breadcrumb);\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["Breadcrumb", "Component", "h", "t", "target", "el", "n", "max", "_", "i", "items", "hidden", "last", "lis", "item", "content", "iconEl", "node", "e", "button", "Menu", "separator", "register"]
|
|
7
|
-
}
|
package/dist/chunk-ARCW54L2.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as f,b as m}from"./chunk-CUPAPOKC.js";import{b as d}from"./chunk-676AKAGF.js";import{a as u}from"./chunk-VV7CFMPZ.js";import{b as g,c as v}from"./chunk-4AA4FQEM.js";import{a as n,b as l,d as p}from"./chunk-IYPKPLCU.js";import{b as a}from"./chunk-PZSHOSOS.js";var o=[],s=class extends n{baseCls="op-dropdown";content;open_=!1;release=[];leaving=0;build(){let e=a("div","op-dropdown",{role:this.config.role??"dialog"});e.hidden=!0;let t=this.config.content;return t&&(this.content=t instanceof HTMLElement||t instanceof n?t:p(t),e.append(this.content instanceof n?this.content.el:this.content)),e}getAnchor(){let e=this.config.anchor;return e instanceof n?e.el:e instanceof HTMLElement?e:void 0}isOpen(){return this.open_}open(){if(this.open_||this.destroyed||this.emit("before-open")===!1)return;let e=this.getAnchor();d(this.el,e),this.leaving++,this.el.getAnimations?.().forEach(i=>i.cancel()),this.el.hidden=!1,this.open_=!0,o.push(this),this.el.classList.add("is-open"),this.content instanceof n&&this.content.notifyMount(),this.reposition(),g(this.el,e??this.config.anchor,"dropdown"),e?.setAttribute("aria-expanded","true");let t=this.config,r=i=>{let h=i.target;t.closeOnOutside!==!1&&!this.el.contains(h)&&!e?.contains(h)&&this.close()},c=i=>{i.key==="Escape"&&t.closeOnEsc!==!1&&o[o.length-1]===this&&(i.stopPropagation(),this.close(),(e?.querySelector("input,button")??e)?.focus?.())};document.addEventListener("pointerdown",r,!0),document.addEventListener("keydown",c,!0),this.release=[()=>document.removeEventListener("pointerdown",r,!0),()=>document.removeEventListener("keydown",c,!0),m(()=>this.reposition())],t.autoFocus&&u(this.el)[0]?.focus(),this.emit("open")}close(){if(!this.open_||this.emit("before-close")===!1)return;this.open_=!1,o.splice(o.indexOf(this),1),this.el.classList.remove("is-open");let e=v(this.el,this.getAnchor()??this.config.anchor,"dropdown");if(e){let t=++this.leaving;e.then(()=>t===this.leaving&&!this.open_&&(this.el.hidden=!0))}else this.el.hidden=!0;this.getAnchor()?.setAttribute("aria-expanded","false"),this.release.splice(0).forEach(t=>t()),this.emit("close")}toggle(){this.open_?this.close():this.open()}reposition(){let e=this.getAnchor()??this.config.anchor;if(!this.open_||!e||e instanceof n)return;let t=this.config;f(this.el,e,{placement:t.placement??"bottom-start",offset:t.offset,flip:t.flip,matchWidth:t.matchWidth})}setAnchor(e){this.config.anchor=e,this.reposition()}setPlacement(e){this.config.placement=e,this.reposition()}setContent(e){this.content instanceof n&&this.content!==e&&this.content.destroy(),this.config.content=e,this.content=e,this.el.replaceChildren(e instanceof n?e.el:e),this.reposition()}onDestroy(){this.open_&&o.splice(o.indexOf(this),1),this.open_=!1,this.release.splice(0).forEach(e=>e()),this.getAnchor()?.setAttribute("aria-expanded","false"),this.content instanceof n&&this.content.destroy()}};l("dropdown",s);export{s as a};
|
|
2
|
-
//# sourceMappingURL=chunk-ARCW54L2.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/components/overlays/dropdown/dropdown.ts"],
|
|
4
|
-
"sourcesContent": ["import { Component, type ComponentConfig } from '../../../core/component';\nimport { register, create, type AnyConfig } from '../../../core/registry';\nimport { h } from '../../../core/dom';\nimport { toLayer } from '../../../core/layer';\nimport { place, track, type Placement } from '../../../core/position';\nimport { focusables } from '../../../core/focus';\nimport { popIn, popOut } from '../../../motion/core';\n\nexport interface DropdownConfig extends ComponentConfig {\n anchor?: HTMLElement | Component | { x: number; y: number };\n content?: HTMLElement | Component | AnyConfig;\n placement?: Placement;\n offset?: number;\n flip?: boolean;\n matchWidth?: boolean;\n closeOnOutside?: boolean;\n closeOnEsc?: boolean;\n role?: string;\n /** Move focus to the first focusable element of the content on open. */\n autoFocus?: boolean;\n}\n\nconst openStack: Dropdown[] = [];\n\n/** Floating panel anchored to an element. Lives in the global layer; closes on outside click and Esc. */\nexport class Dropdown extends Component<DropdownConfig> {\n protected override baseCls = 'op-dropdown';\n private content?: HTMLElement | Component;\n private open_ = false;\n private release: Array<() => void> = [];\n private leaving = 0;\n\n protected override build() {\n const el = h('div', 'op-dropdown', { role: this.config.role ?? 'dialog' });\n el.hidden = true;\n const c = this.config.content;\n if (c) {\n this.content = c instanceof HTMLElement || c instanceof Component ? c : create(c);\n el.append(this.content instanceof Component ? this.content.el : this.content);\n }\n return el;\n }\n\n getAnchor(): HTMLElement | undefined {\n const a = this.config.anchor;\n return a instanceof Component ? a.el : a instanceof HTMLElement ? a : undefined;\n }\n\n isOpen(): boolean {\n return this.open_;\n }\n\n open(): void {\n if (this.open_ || this.destroyed || this.emit('before-open') === false) return;\n const anchor = this.getAnchor();\n toLayer(this.el, anchor);\n this.leaving++; // a pending hide from a close animation must not hide us again\n this.el.getAnimations?.().forEach((a) => a.cancel());\n this.el.hidden = false;\n this.open_ = true;\n openStack.push(this);\n this.el.classList.add('is-open');\n if (this.content instanceof Component) this.content.notifyMount();\n this.reposition();\n void popIn(this.el, anchor ?? (this.config.anchor as { x: number; y: number } | undefined), 'dropdown');\n anchor?.setAttribute('aria-expanded', 'true');\n const c = this.config;\n const outside = (e: Event) => {\n const t = e.target as Node;\n if (c.closeOnOutside !== false && !this.el.contains(t) && !anchor?.contains(t)) this.close();\n };\n const key = (e: KeyboardEvent) => {\n // only the most recently opened dropdown reacts, so Esc closes one level at a time\n if (e.key === 'Escape' && c.closeOnEsc !== false && openStack[openStack.length - 1] === this) {\n e.stopPropagation();\n this.close();\n (anchor?.querySelector<HTMLElement>('input,button') ?? anchor)?.focus?.();\n }\n };\n document.addEventListener('pointerdown', outside, true);\n document.addEventListener('keydown', key, true);\n this.release = [() => document.removeEventListener('pointerdown', outside, true), () => document.removeEventListener('keydown', key, true), track(() => this.reposition())];\n if (c.autoFocus) focusables(this.el)[0]?.focus();\n this.emit('open');\n }\n\n close(): void {\n if (!this.open_ || this.emit('before-close') === false) return;\n this.open_ = false;\n openStack.splice(openStack.indexOf(this), 1);\n this.el.classList.remove('is-open');\n // shrinks back toward the trigger, then hides (at once when there is no animation)\n const out = popOut(this.el, this.getAnchor() ?? (this.config.anchor as { x: number; y: number } | undefined), 'dropdown');\n if (out) {\n const id = ++this.leaving;\n void out.then(() => id === this.leaving && !this.open_ && (this.el.hidden = true));\n } else this.el.hidden = true;\n this.getAnchor()?.setAttribute('aria-expanded', 'false');\n this.release.splice(0).forEach((r) => r());\n this.emit('close');\n }\n\n toggle(): void {\n if (this.open_) this.close();\n else this.open();\n }\n\n reposition(): void {\n const anchor = this.getAnchor() ?? (this.config.anchor as { x: number; y: number } | undefined);\n if (!this.open_ || !anchor || anchor instanceof Component) return;\n const c = this.config;\n place(this.el, anchor, { placement: c.placement ?? 'bottom-start', offset: c.offset, flip: c.flip, matchWidth: c.matchWidth });\n }\n\n setAnchor(anchor: HTMLElement | Component | { x: number; y: number }): void {\n this.config.anchor = anchor;\n this.reposition();\n }\n setPlacement(placement: Placement): void {\n this.config.placement = placement;\n this.reposition();\n }\n setContent(content: HTMLElement | Component): void {\n if (this.content instanceof Component && this.content !== content) this.content.destroy();\n this.config.content = content;\n this.content = content;\n this.el.replaceChildren(content instanceof Component ? content.el : content);\n this.reposition();\n }\n\n protected override onDestroy() {\n if (this.open_) openStack.splice(openStack.indexOf(this), 1);\n this.open_ = false;\n this.release.splice(0).forEach((r) => r());\n this.getAnchor()?.setAttribute('aria-expanded', 'false');\n if (this.content instanceof Component) this.content.destroy();\n }\n}\nregister('dropdown', Dropdown);\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["openStack", "Dropdown", "Component", "el", "h", "c", "create", "a", "anchor", "toLayer", "popIn", "outside", "e", "t", "key", "track", "focusables", "out", "popOut", "id", "r", "place", "placement", "content", "register"]
|
|
7
|
-
}
|
package/dist/chunk-BIYNHKSA.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{b as v,c as f}from"./chunk-676AKAGF.js";import{b as g}from"./chunk-VV7CFMPZ.js";import{c}from"./chunk-IHAYOSBR.js";import{a as m,b as u}from"./chunk-IYPKPLCU.js";import{b as o}from"./chunk-PZSHOSOS.js";import{e as h}from"./chunk-MA5BJL3S.js";var y=()=>/mac|iphone|ipad/i.test(navigator.platform||navigator.userAgent);function b(a,t){let e=t.toLowerCase().split("+"),i=e.pop(),n=r=>e.includes(r),s=y();return a.key.toLowerCase()===i&&a.ctrlKey===(n("ctrl")||n("mod")&&!s)&&a.metaKey===(n("meta")||n("mod")&&s)&&a.shiftKey===n("shift")&&a.altKey===n("alt")}var E=(a,t)=>{let e=0;for(let i of a)if(i===t[e]&&++e===t.length)return!0;return!t.length};function C(a,t){let e=a.title.toLowerCase(),i=[a.category,a.description,...a.keywords??[]].join(" ").toLowerCase(),n=0;for(let s of t.toLowerCase().split(/\s+/).filter(Boolean)){let r=e.indexOf(s),l=r===0?100:r>0?/[\s\-_/]/.test(e[r-1])?80:60:s.length>2&&E(e,s)?30:i.includes(s)?20:0;if(!l)return 0;n+=l}return n}function _(a,t){let e=t.toLowerCase().split(/\s+/).filter(Boolean),i=a.toLowerCase(),n=[];for(let l of e){let p=i.indexOf(l);p>=0&&n.push([p,p+l.length])}n.sort((l,p)=>l[0]-p[0]);let s=[],r=0;for(let[l,p]of n)l<r||(s.push(a.slice(r,l),o("mark","op-palette__mark",{},a.slice(l,p))),r=p);return s.push(a.slice(r)),s.filter(l=>l!=="")}var d=class extends m{baseCls="op-palette-backdrop";commands;levels=[];query="";cat=null;shown=[];active=0;opened=!1;opener=null;release=[];panel;input;filtersEl;listEl;live;crumb;constructor(t={}){super(t),this.commands=[...t.commands??[]];let e=t.hotkey===void 0?"mod+k":t.hotkey;e&&this.listen(document,"keydown",i=>{!b(i,e)||this.destroyed||(i.preventDefault(),this.toggle())},!0)}build(){let t=this.config;this.input=o("input","op-palette__input",{type:"text",role:"combobox","aria-expanded":"true","aria-autocomplete":"list",autocomplete:"off",spellcheck:"false",placeholder:t.placeholder??h("cpPlaceholder")}),this.crumb=o("span","op-palette__crumb"),this.crumb.hidden=!0,this.filtersEl=o("div","op-palette__filters",{role:"group","aria-label":h("cpFilters")}),this.listEl=o("div","op-palette__list",{role:"listbox",id:`${this.id}-list`}),this.input.setAttribute("aria-controls",this.listEl.id),this.live=o("div","op-sr-only",{"aria-live":"polite"}),this.panel=o("div","op-palette",{role:"dialog","aria-modal":"true","aria-label":h("cpLabel")},o("div","op-palette__search",{},c("search"),this.crumb,this.input),this.filtersEl,this.listEl,this.live,o("div","op-palette__hint",{},h("cpHint")));let e=o("div","op-palette-backdrop",{},this.panel);return this.listen(this.input,"input",()=>{this.query=this.input.value,this.active=0,this.paint()}),this.listen(this.panel,"keydown",i=>this.onKey(i)),this.listen(e,"pointerdown",i=>i.target===e&&this.close()),this.listen(this.listEl,"pointermove",i=>{let n=this.indexOf(i);n>=0&&n!==this.active&&this.setActive(n)}),this.listen(this.listEl,"click",i=>{let n=this.indexOf(i);n>=0&&this.choose(this.shown[n])}),this.listen(this.filtersEl,"click",i=>{let n=i.target.closest("[data-cat]");n&&(this.cat=n.dataset.cat||null,this.active=0,this.paint(),this.input.focus())}),e}getCommands(){return this.commands}setCommands(t){this.commands=[...t],this.levels[0]&&(this.levels[0].commands=this.commands),this.opened&&this.paint()}register(t){let e=Array.isArray(t)?t:[t];return this.commands.push(...e),this.opened&&this.paint(),()=>this.setCommands(this.commands.filter(i=>!e.includes(i)))}run(t){let e=this.commands.find(i=>i.id===t);return e?this.exec(e):Promise.resolve()}isOpen(){return this.opened}toggle(){this.opened?this.close():this.open()}open(){if(this.opened||this.destroyed||this.emit("before-open")===!1)return;this.opener=document.activeElement;let t=this.el;this.levels=[{title:"",commands:this.commands}],this.query=this.input.value="",this.cat=null,this.active=0,v(t,this.opener),this.release.push(f(t),g(this.panel)),this.opened=!0,t.classList.add("is-open"),this.notifyMount(),this.paint(),this.input.focus(),this.emit("open")}close(){this.opened&&(this.opened=!1,this.release.splice(0).reverse().forEach(t=>t()),this.el.classList.remove("is-open"),this.el.remove(),this.opener instanceof HTMLElement&&this.opener.isConnected&&this.opener.focus(),this.emit("close"))}onDestroy(){this.opened=!1,this.release.splice(0).forEach(t=>t()),this.panel&&this.el.remove()}level(){return this.levels[this.levels.length-1]}results(){let t=this.level().commands.filter(s=>!s.hidden?.()&&(!this.cat||s.category===this.cat)),e=this.query.trim();if(e)return t.map(s=>({c:s,s:C(s,e)})).filter(s=>s.s>0).sort((s,r)=>r.s-s.s).map(s=>s.c).slice(0,this.config.maxResults??50);let i=this.config.categories??[],n=s=>s.category===void 0?1e6:i.includes(s.category)?i.indexOf(s.category):i.length;return t.map((s,r)=>({c:s,i:r})).sort((s,r)=>n(s.c)-n(r.c)||s.i-r.i).map(s=>s.c).slice(0,this.config.maxResults??50)}paint(){let t=this.level();this.crumb.hidden=this.levels.length<2,this.crumb.textContent=t.title,this.paintFilters(),this.shown=this.results(),this.active=Math.min(this.active,Math.max(0,this.shown.length-1));let e=!!this.query.trim(),i=[],n;this.shown.forEach((s,r)=>{!e&&s.category!==n&&(n=s.category,n&&i.push(o("div","op-palette__group",{role:"presentation"},n)));let l=o("div",`op-palette__item${s.disabled?" is-disabled":""}`,{role:"option",id:`${this.id}-o${r}`,"aria-disabled":s.disabled?"true":null,"data-i":r},s.icon?o("span","op-palette__icon",{},c(s.icon)):o("span","op-palette__icon"),o("span","op-palette__text",{},o("span","op-palette__title",{},..._(s.title,this.query)),s.description?o("span","op-palette__desc",{},s.description):""),e&&s.category?o("span","op-palette__cat",{},s.category):"",s.children?o("span","op-palette__more",{"aria-hidden":"true"},c("chevron-right")):"",s.shortcut?o("kbd","op-palette__kbd",{},s.shortcut):"");i.push(l)}),this.shown.length||i.push(o("div","op-palette__empty",{},this.config.emptyText??h("cpEmpty"))),this.listEl.replaceChildren(...i),this.live.textContent=this.shown.length?h("results",{n:this.shown.length}):h("noResults"),this.setActive(this.active,!1)}paintFilters(){let t=[...new Set(this.level().commands.filter(i=>!i.hidden?.()&&i.category).map(i=>i.category))];this.filtersEl.hidden=this.config.filters===!1||t.length<2,this.cat&&!t.includes(this.cat)&&(this.cat=null);let e=(i,n)=>o("button",`op-palette__chip${(this.cat??"")===n?" is-on":""}`,{type:"button","data-cat":n,"aria-pressed":String((this.cat??"")===n)},i);this.filtersEl.replaceChildren(e(h("cpAll"),""),...t.map(i=>e(i,i)))}indexOf(t){let e=t.target.closest(".op-palette__item");return e?Number(e.dataset.i):-1}setActive(t,e=!0){this.active=t;for(let i of Array.from(this.listEl.querySelectorAll(".op-palette__item"))){let n=Number(i.dataset.i)===t;i.classList.toggle("is-active",n),i.setAttribute("aria-selected",String(n)),n&&(this.input.setAttribute("aria-activedescendant",i.id),e&&i.scrollIntoView?.({block:"nearest"}))}this.shown.length||this.input.removeAttribute("aria-activedescendant")}onKey(t){let e=this.shown.length;switch(t.key){case"ArrowDown":case"ArrowUp":t.preventDefault(),e&&this.setActive((this.active+(t.key==="ArrowDown"?1:e-1))%e);break;case"Home":case"End":t.target===this.input&&!this.input.value&&(t.preventDefault(),e&&this.setActive(t.key==="Home"?0:e-1));break;case"Enter":if(t.target.closest(".op-palette__chip"))return;t.preventDefault(),this.shown[this.active]&&this.choose(this.shown[this.active]);break;case"Escape":t.preventDefault(),t.stopPropagation(),this.levels.length>1?this.back():this.close();break;case"Backspace":!this.input.value&&this.levels.length>1&&(t.preventDefault(),this.back());break}}back(){this.levels.pop(),this.query=this.input.value="",this.cat=null,this.active=0,this.paint(),this.input.focus()}async choose(t){if(!(!t||t.disabled)){if(t.children){try{let e=typeof t.children=="function"?await t.children():t.children;this.levels.push({title:t.title,commands:e}),this.query=this.input.value="",this.cat=null,this.active=0,this.paint(),this.input.focus()}catch(e){this.emit("error",e)}return}this.close(),await this.exec(t)}}async exec(t){try{this.emit("run",t),await t.handler?.({palette:this,command:t})}catch(e){this.emit("error",e)}}};u("commandpalette",d);export{d as a};
|
|
2
|
-
//# sourceMappingURL=chunk-BIYNHKSA.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/components/overlays/commandpalette/commandpalette.ts"],
|
|
4
|
-
"sourcesContent": ["import { Component, type ComponentConfig } from '../../../core/component';\nimport { register } from '../../../core/registry';\nimport { h } from '../../../core/dom';\nimport { t } from '../../../core/i18n';\nimport { toLayer, lockModal } from '../../../core/layer';\nimport { trapFocus } from '../../../core/focus';\nimport { iconEl } from '../../base/icon/icon';\n\nexport interface Command {\n id: string;\n title: string;\n /** Groups the command and gives it a filter chip. */\n category?: string;\n icon?: string;\n description?: string;\n /** Extra words that find the command. */\n keywords?: string[];\n /** Only displayed (the app binds the key itself). */\n shortcut?: string;\n disabled?: boolean;\n hidden?: () => boolean;\n /** Runs after the palette closed. Errors become the palette's `error` event. */\n handler?: (ctx: { palette: CommandPalette; command: Command }) => unknown;\n /** A second level: choosing this command shows these (Backspace on an empty field goes back). */\n children?: Command[] | (() => Command[] | Promise<Command[]>);\n}\n\nexport interface CommandPaletteConfig extends ComponentConfig {\n commands?: Command[];\n /** `mod` is Ctrl on Windows/Linux and \u2318 on macOS. `false` turns the global key off. Default `'mod+k'`. */\n hotkey?: string | false;\n placeholder?: string;\n emptyText?: string;\n maxResults?: number;\n /** Order of the category groups; the others follow. */\n categories?: string[];\n /** Category chips under the field. Default true. */\n filters?: boolean;\n}\n\ntype Level = { title: string; commands: Command[] };\n\nconst isMac = () => /mac|iphone|ipad/i.test(navigator.platform || navigator.userAgent);\n\nfunction matchesKey(e: KeyboardEvent, spec: string): boolean {\n const parts = spec.toLowerCase().split('+');\n const key = parts.pop()!;\n const has = (m: string) => parts.includes(m);\n const mac = isMac();\n return (\n e.key.toLowerCase() === key &&\n e.ctrlKey === (has('ctrl') || (has('mod') && !mac)) &&\n e.metaKey === (has('meta') || (has('mod') && mac)) &&\n e.shiftKey === has('shift') &&\n e.altKey === has('alt')\n );\n}\n\nconst subsequence = (text: string, q: string) => {\n let i = 0;\n for (const ch of text) if (ch === q[i] && ++i === q.length) return true;\n return !q.length;\n};\n\n/** How well a command answers the query (0 = not at all). Every word of the query must match somewhere. */\nfunction score(c: Command, query: string): number {\n const title = c.title.toLowerCase();\n const rest = [c.category, c.description, ...(c.keywords ?? [])].join(' ').toLowerCase();\n let total = 0;\n for (const w of query.toLowerCase().split(/\\s+/).filter(Boolean)) {\n const at = title.indexOf(w);\n const s = at === 0 ? 100 : at > 0 ? (/[\\s\\-_/]/.test(title[at - 1]) ? 80 : 60) : w.length > 2 && subsequence(title, w) ? 30 : rest.includes(w) ? 20 : 0;\n if (!s) return 0;\n total += s;\n }\n return total;\n}\n\n/** Title with the matched words marked. */\nfunction marked(title: string, query: string): Array<string | Node> {\n const words = query.toLowerCase().split(/\\s+/).filter(Boolean);\n const lower = title.toLowerCase();\n const spans: Array<[number, number]> = [];\n for (const w of words) {\n const at = lower.indexOf(w);\n if (at >= 0) spans.push([at, at + w.length]);\n }\n spans.sort((a, b) => a[0] - b[0]);\n const out: Array<string | Node> = [];\n let pos = 0;\n for (const [a, b] of spans) {\n if (a < pos) continue;\n out.push(title.slice(pos, a), h('mark', 'op-palette__mark', {}, title.slice(a, b)));\n pos = b;\n }\n out.push(title.slice(pos));\n return out.filter((x) => x !== '');\n}\n\n/**\n * Command palette: Ctrl/\u2318+K opens a searchable, categorized list of the actions the app registered. Choosing one closes\n * the palette and runs it; a command with `children` opens a second level instead.\n */\nexport class CommandPalette extends Component<CommandPaletteConfig> {\n protected override baseCls = 'op-palette-backdrop';\n private commands: Command[];\n private levels: Level[] = [];\n private query = '';\n private cat: string | null = null;\n private shown: Command[] = [];\n private active = 0;\n private opened = false;\n private opener: Element | null = null;\n private release: Array<() => void> = [];\n private panel!: HTMLElement;\n private input!: HTMLInputElement;\n private filtersEl!: HTMLElement;\n private listEl!: HTMLElement;\n private live!: HTMLElement;\n private crumb!: HTMLElement;\n\n constructor(config: CommandPaletteConfig = {}) {\n super(config);\n this.commands = [...(config.commands ?? [])];\n const key = config.hotkey === undefined ? 'mod+k' : config.hotkey;\n if (key) {\n this.listen(document, 'keydown', (e: KeyboardEvent) => {\n if (!matchesKey(e, key) || this.destroyed) return;\n e.preventDefault();\n this.toggle();\n }, true);\n }\n }\n\n protected override build() {\n const c = this.config;\n this.input = h('input', 'op-palette__input', { type: 'text', role: 'combobox', 'aria-expanded': 'true', 'aria-autocomplete': 'list', autocomplete: 'off', spellcheck: 'false', placeholder: c.placeholder ?? t('cpPlaceholder') });\n this.crumb = h('span', 'op-palette__crumb');\n this.crumb.hidden = true;\n this.filtersEl = h('div', 'op-palette__filters', { role: 'group', 'aria-label': t('cpFilters') });\n this.listEl = h('div', 'op-palette__list', { role: 'listbox', id: `${this.id}-list` });\n this.input.setAttribute('aria-controls', this.listEl.id);\n this.live = h('div', 'op-sr-only', { 'aria-live': 'polite' });\n this.panel = h('div', 'op-palette', { role: 'dialog', 'aria-modal': 'true', 'aria-label': t('cpLabel') },\n h('div', 'op-palette__search', {}, iconEl('search'), this.crumb, this.input),\n this.filtersEl, this.listEl, this.live,\n h('div', 'op-palette__hint', {}, t('cpHint')));\n const el = h('div', 'op-palette-backdrop', {}, this.panel);\n this.listen(this.input, 'input', () => {\n this.query = this.input.value;\n this.active = 0;\n this.paint();\n });\n this.listen(this.panel, 'keydown', (e: KeyboardEvent) => this.onKey(e));\n this.listen(el, 'pointerdown', (e: Event) => e.target === el && this.close());\n this.listen(this.listEl, 'pointermove', (e: Event) => {\n const i = this.indexOf(e);\n if (i >= 0 && i !== this.active) this.setActive(i);\n });\n this.listen(this.listEl, 'click', (e: Event) => {\n const i = this.indexOf(e);\n if (i >= 0) void this.choose(this.shown[i]);\n });\n this.listen(this.filtersEl, 'click', (e: Event) => {\n const b = (e.target as HTMLElement).closest<HTMLElement>('[data-cat]');\n if (!b) return;\n this.cat = b.dataset.cat || null;\n this.active = 0;\n this.paint();\n this.input.focus();\n });\n return el;\n }\n\n // ---- commands ------------------------------------------------------------------------------\n\n getCommands(): Command[] {\n return this.commands;\n }\n setCommands(list: Command[]): void {\n this.commands = [...list];\n if (this.levels[0]) this.levels[0].commands = this.commands;\n if (this.opened) this.paint();\n }\n /** Adds commands; returns the function that removes them again. */\n register(cmd: Command | Command[]): () => void {\n const list = Array.isArray(cmd) ? cmd : [cmd];\n this.commands.push(...list);\n if (this.opened) this.paint();\n return () => this.setCommands(this.commands.filter((c) => !list.includes(c)));\n }\n /** Runs a command by id (searching every level that is not a submenu), without opening the palette. */\n run(id: string): Promise<void> {\n const c = this.commands.find((x) => x.id === id);\n return c ? this.exec(c) : Promise.resolve();\n }\n\n // ---- open / close --------------------------------------------------------------------------\n\n isOpen(): boolean {\n return this.opened;\n }\n toggle(): void {\n if (this.opened) this.close();\n else this.open();\n }\n\n open(): void {\n if (this.opened || this.destroyed || this.emit('before-open') === false) return;\n this.opener = document.activeElement;\n const el = this.el;\n this.levels = [{ title: '', commands: this.commands }];\n this.query = this.input.value = '';\n this.cat = null;\n this.active = 0;\n toLayer(el, this.opener);\n this.release.push(lockModal(el), trapFocus(this.panel));\n this.opened = true;\n el.classList.add('is-open');\n this.notifyMount();\n this.paint();\n this.input.focus();\n this.emit('open');\n }\n\n close(): void {\n if (!this.opened) return;\n this.opened = false;\n this.release.splice(0).reverse().forEach((f) => f());\n this.el.classList.remove('is-open');\n this.el.remove();\n if (this.opener instanceof HTMLElement && this.opener.isConnected) this.opener.focus();\n this.emit('close');\n }\n\n protected override onDestroy(): void {\n this.opened = false;\n this.release.splice(0).forEach((f) => f());\n if (this.panel) this.el.remove();\n }\n\n // ---- rendering -----------------------------------------------------------------------------\n\n private level(): Level {\n return this.levels[this.levels.length - 1];\n }\n\n /** Commands for the current query/filter, in display order. */\n private results(): Command[] {\n const pool = this.level().commands.filter((c) => !c.hidden?.() && (!this.cat || c.category === this.cat));\n const q = this.query.trim();\n if (q) {\n return pool\n .map((c) => ({ c, s: score(c, q) }))\n .filter((x) => x.s > 0)\n .sort((a, b) => b.s - a.s)\n .map((x) => x.c)\n .slice(0, this.config.maxResults ?? 50);\n }\n const order = this.config.categories ?? [];\n const rank = (c: Command) => (c.category === undefined ? 1e6 : order.includes(c.category) ? order.indexOf(c.category) : order.length);\n return pool.map((c, i) => ({ c, i })).sort((a, b) => rank(a.c) - rank(b.c) || a.i - b.i).map((x) => x.c).slice(0, this.config.maxResults ?? 50);\n }\n\n private paint(): void {\n const lvl = this.level();\n this.crumb.hidden = this.levels.length < 2;\n this.crumb.textContent = lvl.title;\n this.paintFilters();\n this.shown = this.results();\n this.active = Math.min(this.active, Math.max(0, this.shown.length - 1));\n const searching = !!this.query.trim();\n const rows: HTMLElement[] = [];\n let group: string | undefined;\n this.shown.forEach((c, i) => {\n if (!searching && c.category !== group) {\n group = c.category;\n if (group) rows.push(h('div', 'op-palette__group', { role: 'presentation' }, group));\n }\n const item = h('div', `op-palette__item${c.disabled ? ' is-disabled' : ''}`, { role: 'option', id: `${this.id}-o${i}`, 'aria-disabled': c.disabled ? 'true' : null, 'data-i': i },\n c.icon ? h('span', 'op-palette__icon', {}, iconEl(c.icon)) : h('span', 'op-palette__icon'),\n h('span', 'op-palette__text', {}, h('span', 'op-palette__title', {}, ...marked(c.title, this.query)), c.description ? h('span', 'op-palette__desc', {}, c.description) : ''),\n searching && c.category ? h('span', 'op-palette__cat', {}, c.category) : '',\n c.children ? h('span', 'op-palette__more', { 'aria-hidden': 'true' }, iconEl('chevron-right')) : '',\n c.shortcut ? h('kbd', 'op-palette__kbd', {}, c.shortcut) : '');\n rows.push(item);\n });\n if (!this.shown.length) rows.push(h('div', 'op-palette__empty', {}, this.config.emptyText ?? t('cpEmpty')));\n this.listEl.replaceChildren(...rows);\n this.live.textContent = this.shown.length ? t('results', { n: this.shown.length }) : t('noResults');\n this.setActive(this.active, false);\n }\n\n private paintFilters(): void {\n const cats = [...new Set(this.level().commands.filter((c) => !c.hidden?.() && c.category).map((c) => c.category!))];\n this.filtersEl.hidden = this.config.filters === false || cats.length < 2;\n if (this.cat && !cats.includes(this.cat)) this.cat = null;\n const chip = (label: string, cat: string) => h('button', `op-palette__chip${(this.cat ?? '') === cat ? ' is-on' : ''}`, { type: 'button', 'data-cat': cat, 'aria-pressed': String((this.cat ?? '') === cat) }, label);\n this.filtersEl.replaceChildren(chip(t('cpAll'), ''), ...cats.map((c) => chip(c, c)));\n }\n\n private indexOf(e: Event): number {\n const row = (e.target as HTMLElement).closest<HTMLElement>('.op-palette__item');\n return row ? Number(row.dataset.i) : -1;\n }\n\n private setActive(i: number, scroll = true): void {\n this.active = i;\n for (const row of Array.from(this.listEl.querySelectorAll<HTMLElement>('.op-palette__item'))) {\n const on = Number(row.dataset.i) === i;\n row.classList.toggle('is-active', on);\n row.setAttribute('aria-selected', String(on));\n if (on) {\n this.input.setAttribute('aria-activedescendant', row.id);\n if (scroll) row.scrollIntoView?.({ block: 'nearest' });\n }\n }\n if (!this.shown.length) this.input.removeAttribute('aria-activedescendant');\n }\n\n // ---- behavior ------------------------------------------------------------------------------\n\n private onKey(e: KeyboardEvent): void {\n const n = this.shown.length;\n switch (e.key) {\n case 'ArrowDown':\n case 'ArrowUp':\n e.preventDefault();\n if (n) this.setActive((this.active + (e.key === 'ArrowDown' ? 1 : n - 1)) % n);\n break;\n case 'Home':\n case 'End':\n if (e.target === this.input && !this.input.value) {\n e.preventDefault();\n if (n) this.setActive(e.key === 'Home' ? 0 : n - 1);\n }\n break;\n case 'Enter':\n if ((e.target as HTMLElement).closest('.op-palette__chip')) return;\n e.preventDefault();\n if (this.shown[this.active]) void this.choose(this.shown[this.active]);\n break;\n case 'Escape':\n e.preventDefault();\n e.stopPropagation();\n if (this.levels.length > 1) this.back();\n else this.close();\n break;\n case 'Backspace':\n if (!this.input.value && this.levels.length > 1) {\n e.preventDefault();\n this.back();\n }\n break;\n }\n }\n\n private back(): void {\n this.levels.pop();\n this.query = this.input.value = '';\n this.cat = null;\n this.active = 0;\n this.paint();\n this.input.focus();\n }\n\n private async choose(c: Command | undefined): Promise<void> {\n if (!c || c.disabled) return;\n if (c.children) {\n try {\n const kids = typeof c.children === 'function' ? await c.children() : c.children;\n this.levels.push({ title: c.title, commands: kids });\n this.query = this.input.value = '';\n this.cat = null;\n this.active = 0;\n this.paint();\n this.input.focus();\n } catch (err) {\n this.emit('error', err);\n }\n return;\n }\n this.close();\n await this.exec(c);\n }\n\n private async exec(c: Command): Promise<void> {\n try {\n this.emit('run', c);\n await c.handler?.({ palette: this, command: c });\n } catch (err) {\n this.emit('error', err);\n }\n }\n}\nregister('commandpalette', CommandPalette);\n"],
|
|
5
|
-
"mappings": "yPA0CA,IAAMA,EAAQ,IAAM,mBAAmB,KAAK,UAAU,UAAY,UAAU,SAAS,EAErF,SAASC,EAAWC,EAAkBC,EAAuB,CAC3D,IAAMC,EAAQD,EAAK,YAAY,EAAE,MAAM,GAAG,EACpCE,EAAMD,EAAM,IAAI,EAChBE,EAAOC,GAAcH,EAAM,SAASG,CAAC,EACrCC,EAAMR,EAAM,EAClB,OACEE,EAAE,IAAI,YAAY,IAAMG,GACxBH,EAAE,WAAaI,EAAI,MAAM,GAAMA,EAAI,KAAK,GAAK,CAACE,IAC9CN,EAAE,WAAaI,EAAI,MAAM,GAAMA,EAAI,KAAK,GAAKE,IAC7CN,EAAE,WAAaI,EAAI,OAAO,GAC1BJ,EAAE,SAAWI,EAAI,KAAK,CAE1B,CAEA,IAAMG,EAAc,CAACC,EAAcC,IAAc,CAC/C,IAAIC,EAAI,EACR,QAAWC,KAAMH,EAAM,GAAIG,IAAOF,EAAEC,CAAC,GAAK,EAAEA,IAAMD,EAAE,OAAQ,MAAO,GACnE,MAAO,CAACA,EAAE,MACZ,EAGA,SAASG,EAAMC,EAAYC,EAAuB,CAChD,IAAMC,EAAQF,EAAE,MAAM,YAAY,EAC5BG,EAAO,CAACH,EAAE,SAAUA,EAAE,YAAa,GAAIA,EAAE,UAAY,CAAC,CAAE,EAAE,KAAK,GAAG,EAAE,YAAY,EAClFI,EAAQ,EACZ,QAAWC,KAAKJ,EAAM,YAAY,EAAE,MAAM,KAAK,EAAE,OAAO,OAAO,EAAG,CAChE,IAAMK,EAAKJ,EAAM,QAAQG,CAAC,EACpBE,EAAID,IAAO,EAAI,IAAMA,EAAK,EAAK,WAAW,KAAKJ,EAAMI,EAAK,CAAC,CAAC,EAAI,GAAK,GAAMD,EAAE,OAAS,GAAKX,EAAYQ,EAAOG,CAAC,EAAI,GAAKF,EAAK,SAASE,CAAC,EAAI,GAAK,EACtJ,GAAI,CAACE,EAAG,MAAO,GACfH,GAASG,CACX,CACA,OAAOH,CACT,CAGA,SAASI,EAAON,EAAeD,EAAqC,CAClE,IAAMQ,EAAQR,EAAM,YAAY,EAAE,MAAM,KAAK,EAAE,OAAO,OAAO,EACvDS,EAAQR,EAAM,YAAY,EAC1BS,EAAiC,CAAC,EACxC,QAAWN,KAAKI,EAAO,CACrB,IAAMH,EAAKI,EAAM,QAAQL,CAAC,EACtBC,GAAM,GAAGK,EAAM,KAAK,CAACL,EAAIA,EAAKD,EAAE,MAAM,CAAC,CAC7C,CACAM,EAAM,KAAK,CAACC,EAAGC,IAAMD,EAAE,CAAC,EAAIC,EAAE,CAAC,CAAC,EAChC,IAAMC,EAA4B,CAAC,EAC/BC,EAAM,EACV,OAAW,CAACH,EAAGC,CAAC,IAAKF,EACfC,EAAIG,IACRD,EAAI,KAAKZ,EAAM,MAAMa,EAAKH,CAAC,EAAGI,EAAE,OAAQ,mBAAoB,CAAC,EAAGd,EAAM,MAAMU,EAAGC,CAAC,CAAC,CAAC,EAClFE,EAAMF,GAER,OAAAC,EAAI,KAAKZ,EAAM,MAAMa,CAAG,CAAC,EAClBD,EAAI,OAAQG,GAAMA,IAAM,EAAE,CACnC,CAMO,IAAMC,EAAN,cAA6BC,CAAgC,CAC/C,QAAU,sBACrB,SACA,OAAkB,CAAC,EACnB,MAAQ,GACR,IAAqB,KACrB,MAAmB,CAAC,EACpB,OAAS,EACT,OAAS,GACT,OAAyB,KACzB,QAA6B,CAAC,EAC9B,MACA,MACA,UACA,OACA,KACA,MAER,YAAYC,EAA+B,CAAC,EAAG,CAC7C,MAAMA,CAAM,EACZ,KAAK,SAAW,CAAC,GAAIA,EAAO,UAAY,CAAC,CAAE,EAC3C,IAAM9B,EAAM8B,EAAO,SAAW,OAAY,QAAUA,EAAO,OACvD9B,GACF,KAAK,OAAO,SAAU,UAAYH,GAAqB,CACjD,CAACD,EAAWC,EAAGG,CAAG,GAAK,KAAK,YAChCH,EAAE,eAAe,EACjB,KAAK,OAAO,EACd,EAAG,EAAI,CAEX,CAEmB,OAAQ,CACzB,IAAMa,EAAI,KAAK,OACf,KAAK,MAAQgB,EAAE,QAAS,oBAAqB,CAAE,KAAM,OAAQ,KAAM,WAAY,gBAAiB,OAAQ,oBAAqB,OAAQ,aAAc,MAAO,WAAY,QAAS,YAAahB,EAAE,aAAeqB,EAAE,eAAe,CAAE,CAAC,EACjO,KAAK,MAAQL,EAAE,OAAQ,mBAAmB,EAC1C,KAAK,MAAM,OAAS,GACpB,KAAK,UAAYA,EAAE,MAAO,sBAAuB,CAAE,KAAM,QAAS,aAAcK,EAAE,WAAW,CAAE,CAAC,EAChG,KAAK,OAASL,EAAE,MAAO,mBAAoB,CAAE,KAAM,UAAW,GAAI,GAAG,KAAK,EAAE,OAAQ,CAAC,EACrF,KAAK,MAAM,aAAa,gBAAiB,KAAK,OAAO,EAAE,EACvD,KAAK,KAAOA,EAAE,MAAO,aAAc,CAAE,YAAa,QAAS,CAAC,EAC5D,KAAK,MAAQA,EAAE,MAAO,aAAc,CAAE,KAAM,SAAU,aAAc,OAAQ,aAAcK,EAAE,SAAS,CAAE,EACrGL,EAAE,MAAO,qBAAsB,CAAC,EAAGM,EAAO,QAAQ,EAAG,KAAK,MAAO,KAAK,KAAK,EAC3E,KAAK,UAAW,KAAK,OAAQ,KAAK,KAClCN,EAAE,MAAO,mBAAoB,CAAC,EAAGK,EAAE,QAAQ,CAAC,CAAC,EAC/C,IAAME,EAAKP,EAAE,MAAO,sBAAuB,CAAC,EAAG,KAAK,KAAK,EACzD,YAAK,OAAO,KAAK,MAAO,QAAS,IAAM,CACrC,KAAK,MAAQ,KAAK,MAAM,MACxB,KAAK,OAAS,EACd,KAAK,MAAM,CACb,CAAC,EACD,KAAK,OAAO,KAAK,MAAO,UAAY7B,GAAqB,KAAK,MAAMA,CAAC,CAAC,EACtE,KAAK,OAAOoC,EAAI,cAAgBpC,GAAaA,EAAE,SAAWoC,GAAM,KAAK,MAAM,CAAC,EAC5E,KAAK,OAAO,KAAK,OAAQ,cAAgBpC,GAAa,CACpD,IAAMU,EAAI,KAAK,QAAQV,CAAC,EACpBU,GAAK,GAAKA,IAAM,KAAK,QAAQ,KAAK,UAAUA,CAAC,CACnD,CAAC,EACD,KAAK,OAAO,KAAK,OAAQ,QAAUV,GAAa,CAC9C,IAAMU,EAAI,KAAK,QAAQV,CAAC,EACpBU,GAAK,GAAQ,KAAK,OAAO,KAAK,MAAMA,CAAC,CAAC,CAC5C,CAAC,EACD,KAAK,OAAO,KAAK,UAAW,QAAUV,GAAa,CACjD,IAAM0B,EAAK1B,EAAE,OAAuB,QAAqB,YAAY,EAChE0B,IACL,KAAK,IAAMA,EAAE,QAAQ,KAAO,KAC5B,KAAK,OAAS,EACd,KAAK,MAAM,EACX,KAAK,MAAM,MAAM,EACnB,CAAC,EACMU,CACT,CAIA,aAAyB,CACvB,OAAO,KAAK,QACd,CACA,YAAYC,EAAuB,CACjC,KAAK,SAAW,CAAC,GAAGA,CAAI,EACpB,KAAK,OAAO,CAAC,IAAG,KAAK,OAAO,CAAC,EAAE,SAAW,KAAK,UAC/C,KAAK,QAAQ,KAAK,MAAM,CAC9B,CAEA,SAASC,EAAsC,CAC7C,IAAMD,EAAO,MAAM,QAAQC,CAAG,EAAIA,EAAM,CAACA,CAAG,EAC5C,YAAK,SAAS,KAAK,GAAGD,CAAI,EACtB,KAAK,QAAQ,KAAK,MAAM,EACrB,IAAM,KAAK,YAAY,KAAK,SAAS,OAAQxB,GAAM,CAACwB,EAAK,SAASxB,CAAC,CAAC,CAAC,CAC9E,CAEA,IAAI0B,EAA2B,CAC7B,IAAM1B,EAAI,KAAK,SAAS,KAAMiB,GAAMA,EAAE,KAAOS,CAAE,EAC/C,OAAO1B,EAAI,KAAK,KAAKA,CAAC,EAAI,QAAQ,QAAQ,CAC5C,CAIA,QAAkB,CAChB,OAAO,KAAK,MACd,CACA,QAAe,CACT,KAAK,OAAQ,KAAK,MAAM,EACvB,KAAK,KAAK,CACjB,CAEA,MAAa,CACX,GAAI,KAAK,QAAU,KAAK,WAAa,KAAK,KAAK,aAAa,IAAM,GAAO,OACzE,KAAK,OAAS,SAAS,cACvB,IAAMuB,EAAK,KAAK,GAChB,KAAK,OAAS,CAAC,CAAE,MAAO,GAAI,SAAU,KAAK,QAAS,CAAC,EACrD,KAAK,MAAQ,KAAK,MAAM,MAAQ,GAChC,KAAK,IAAM,KACX,KAAK,OAAS,EACdI,EAAQJ,EAAI,KAAK,MAAM,EACvB,KAAK,QAAQ,KAAKK,EAAUL,CAAE,EAAGM,EAAU,KAAK,KAAK,CAAC,EACtD,KAAK,OAAS,GACdN,EAAG,UAAU,IAAI,SAAS,EAC1B,KAAK,YAAY,EACjB,KAAK,MAAM,EACX,KAAK,MAAM,MAAM,EACjB,KAAK,KAAK,MAAM,CAClB,CAEA,OAAc,CACP,KAAK,SACV,KAAK,OAAS,GACd,KAAK,QAAQ,OAAO,CAAC,EAAE,QAAQ,EAAE,QAASO,GAAMA,EAAE,CAAC,EACnD,KAAK,GAAG,UAAU,OAAO,SAAS,EAClC,KAAK,GAAG,OAAO,EACX,KAAK,kBAAkB,aAAe,KAAK,OAAO,aAAa,KAAK,OAAO,MAAM,EACrF,KAAK,KAAK,OAAO,EACnB,CAEmB,WAAkB,CACnC,KAAK,OAAS,GACd,KAAK,QAAQ,OAAO,CAAC,EAAE,QAASA,GAAMA,EAAE,CAAC,EACrC,KAAK,OAAO,KAAK,GAAG,OAAO,CACjC,CAIQ,OAAe,CACrB,OAAO,KAAK,OAAO,KAAK,OAAO,OAAS,CAAC,CAC3C,CAGQ,SAAqB,CAC3B,IAAMC,EAAO,KAAK,MAAM,EAAE,SAAS,OAAQ/B,GAAM,CAACA,EAAE,SAAS,IAAM,CAAC,KAAK,KAAOA,EAAE,WAAa,KAAK,IAAI,EAClGJ,EAAI,KAAK,MAAM,KAAK,EAC1B,GAAIA,EACF,OAAOmC,EACJ,IAAK/B,IAAO,CAAE,EAAAA,EAAG,EAAGD,EAAMC,EAAGJ,CAAC,CAAE,EAAE,EAClC,OAAQqB,GAAMA,EAAE,EAAI,CAAC,EACrB,KAAK,CAACL,EAAGC,IAAMA,EAAE,EAAID,EAAE,CAAC,EACxB,IAAKK,GAAMA,EAAE,CAAC,EACd,MAAM,EAAG,KAAK,OAAO,YAAc,EAAE,EAE1C,IAAMe,EAAQ,KAAK,OAAO,YAAc,CAAC,EACnCC,EAAQjC,GAAgBA,EAAE,WAAa,OAAY,IAAMgC,EAAM,SAAShC,EAAE,QAAQ,EAAIgC,EAAM,QAAQhC,EAAE,QAAQ,EAAIgC,EAAM,OAC9H,OAAOD,EAAK,IAAI,CAAC/B,EAAGH,KAAO,CAAE,EAAAG,EAAG,EAAAH,CAAE,EAAE,EAAE,KAAK,CAACe,EAAGC,IAAMoB,EAAKrB,EAAE,CAAC,EAAIqB,EAAKpB,EAAE,CAAC,GAAKD,EAAE,EAAIC,EAAE,CAAC,EAAE,IAAKI,GAAMA,EAAE,CAAC,EAAE,MAAM,EAAG,KAAK,OAAO,YAAc,EAAE,CAChJ,CAEQ,OAAc,CACpB,IAAMiB,EAAM,KAAK,MAAM,EACvB,KAAK,MAAM,OAAS,KAAK,OAAO,OAAS,EACzC,KAAK,MAAM,YAAcA,EAAI,MAC7B,KAAK,aAAa,EAClB,KAAK,MAAQ,KAAK,QAAQ,EAC1B,KAAK,OAAS,KAAK,IAAI,KAAK,OAAQ,KAAK,IAAI,EAAG,KAAK,MAAM,OAAS,CAAC,CAAC,EACtE,IAAMC,EAAY,CAAC,CAAC,KAAK,MAAM,KAAK,EAC9BC,EAAsB,CAAC,EACzBC,EACJ,KAAK,MAAM,QAAQ,CAACrC,EAAGH,IAAM,CACvB,CAACsC,GAAanC,EAAE,WAAaqC,IAC/BA,EAAQrC,EAAE,SACNqC,GAAOD,EAAK,KAAKpB,EAAE,MAAO,oBAAqB,CAAE,KAAM,cAAe,EAAGqB,CAAK,CAAC,GAErF,IAAMC,EAAOtB,EAAE,MAAO,mBAAmBhB,EAAE,SAAW,eAAiB,EAAE,GAAI,CAAE,KAAM,SAAU,GAAI,GAAG,KAAK,EAAE,KAAKH,CAAC,GAAI,gBAAiBG,EAAE,SAAW,OAAS,KAAM,SAAUH,CAAE,EAC9KG,EAAE,KAAOgB,EAAE,OAAQ,mBAAoB,CAAC,EAAGM,EAAOtB,EAAE,IAAI,CAAC,EAAIgB,EAAE,OAAQ,kBAAkB,EACzFA,EAAE,OAAQ,mBAAoB,CAAC,EAAGA,EAAE,OAAQ,oBAAqB,CAAC,EAAG,GAAGR,EAAOR,EAAE,MAAO,KAAK,KAAK,CAAC,EAAGA,EAAE,YAAcgB,EAAE,OAAQ,mBAAoB,CAAC,EAAGhB,EAAE,WAAW,EAAI,EAAE,EAC3KmC,GAAanC,EAAE,SAAWgB,EAAE,OAAQ,kBAAmB,CAAC,EAAGhB,EAAE,QAAQ,EAAI,GACzEA,EAAE,SAAWgB,EAAE,OAAQ,mBAAoB,CAAE,cAAe,MAAO,EAAGM,EAAO,eAAe,CAAC,EAAI,GACjGtB,EAAE,SAAWgB,EAAE,MAAO,kBAAmB,CAAC,EAAGhB,EAAE,QAAQ,EAAI,EAAE,EAC/DoC,EAAK,KAAKE,CAAI,CAChB,CAAC,EACI,KAAK,MAAM,QAAQF,EAAK,KAAKpB,EAAE,MAAO,oBAAqB,CAAC,EAAG,KAAK,OAAO,WAAaK,EAAE,SAAS,CAAC,CAAC,EAC1G,KAAK,OAAO,gBAAgB,GAAGe,CAAI,EACnC,KAAK,KAAK,YAAc,KAAK,MAAM,OAASf,EAAE,UAAW,CAAE,EAAG,KAAK,MAAM,MAAO,CAAC,EAAIA,EAAE,WAAW,EAClG,KAAK,UAAU,KAAK,OAAQ,EAAK,CACnC,CAEQ,cAAqB,CAC3B,IAAMkB,EAAO,CAAC,GAAG,IAAI,IAAI,KAAK,MAAM,EAAE,SAAS,OAAQvC,GAAM,CAACA,EAAE,SAAS,GAAKA,EAAE,QAAQ,EAAE,IAAKA,GAAMA,EAAE,QAAS,CAAC,CAAC,EAClH,KAAK,UAAU,OAAS,KAAK,OAAO,UAAY,IAASuC,EAAK,OAAS,EACnE,KAAK,KAAO,CAACA,EAAK,SAAS,KAAK,GAAG,IAAG,KAAK,IAAM,MACrD,IAAMC,EAAO,CAACC,EAAeC,IAAgB1B,EAAE,SAAU,oBAAoB,KAAK,KAAO,MAAQ0B,EAAM,SAAW,EAAE,GAAI,CAAE,KAAM,SAAU,WAAYA,EAAK,eAAgB,QAAQ,KAAK,KAAO,MAAQA,CAAG,CAAE,EAAGD,CAAK,EACpN,KAAK,UAAU,gBAAgBD,EAAKnB,EAAE,OAAO,EAAG,EAAE,EAAG,GAAGkB,EAAK,IAAKvC,GAAMwC,EAAKxC,EAAGA,CAAC,CAAC,CAAC,CACrF,CAEQ,QAAQb,EAAkB,CAChC,IAAMwD,EAAOxD,EAAE,OAAuB,QAAqB,mBAAmB,EAC9E,OAAOwD,EAAM,OAAOA,EAAI,QAAQ,CAAC,EAAI,EACvC,CAEQ,UAAU9C,EAAW+C,EAAS,GAAY,CAChD,KAAK,OAAS/C,EACd,QAAW8C,KAAO,MAAM,KAAK,KAAK,OAAO,iBAA8B,mBAAmB,CAAC,EAAG,CAC5F,IAAME,EAAK,OAAOF,EAAI,QAAQ,CAAC,IAAM9C,EACrC8C,EAAI,UAAU,OAAO,YAAaE,CAAE,EACpCF,EAAI,aAAa,gBAAiB,OAAOE,CAAE,CAAC,EACxCA,IACF,KAAK,MAAM,aAAa,wBAAyBF,EAAI,EAAE,EACnDC,GAAQD,EAAI,iBAAiB,CAAE,MAAO,SAAU,CAAC,EAEzD,CACK,KAAK,MAAM,QAAQ,KAAK,MAAM,gBAAgB,uBAAuB,CAC5E,CAIQ,MAAMxD,EAAwB,CACpC,IAAM2D,EAAI,KAAK,MAAM,OACrB,OAAQ3D,EAAE,IAAK,CACb,IAAK,YACL,IAAK,UACHA,EAAE,eAAe,EACb2D,GAAG,KAAK,WAAW,KAAK,QAAU3D,EAAE,MAAQ,YAAc,EAAI2D,EAAI,IAAMA,CAAC,EAC7E,MACF,IAAK,OACL,IAAK,MACC3D,EAAE,SAAW,KAAK,OAAS,CAAC,KAAK,MAAM,QACzCA,EAAE,eAAe,EACb2D,GAAG,KAAK,UAAU3D,EAAE,MAAQ,OAAS,EAAI2D,EAAI,CAAC,GAEpD,MACF,IAAK,QACH,GAAK3D,EAAE,OAAuB,QAAQ,mBAAmB,EAAG,OAC5DA,EAAE,eAAe,EACb,KAAK,MAAM,KAAK,MAAM,GAAQ,KAAK,OAAO,KAAK,MAAM,KAAK,MAAM,CAAC,EACrE,MACF,IAAK,SACHA,EAAE,eAAe,EACjBA,EAAE,gBAAgB,EACd,KAAK,OAAO,OAAS,EAAG,KAAK,KAAK,EACjC,KAAK,MAAM,EAChB,MACF,IAAK,YACC,CAAC,KAAK,MAAM,OAAS,KAAK,OAAO,OAAS,IAC5CA,EAAE,eAAe,EACjB,KAAK,KAAK,GAEZ,KACJ,CACF,CAEQ,MAAa,CACnB,KAAK,OAAO,IAAI,EAChB,KAAK,MAAQ,KAAK,MAAM,MAAQ,GAChC,KAAK,IAAM,KACX,KAAK,OAAS,EACd,KAAK,MAAM,EACX,KAAK,MAAM,MAAM,CACnB,CAEA,MAAc,OAAOa,EAAuC,CAC1D,GAAI,GAACA,GAAKA,EAAE,UACZ,IAAIA,EAAE,SAAU,CACd,GAAI,CACF,IAAM+C,EAAO,OAAO/C,EAAE,UAAa,WAAa,MAAMA,EAAE,SAAS,EAAIA,EAAE,SACvE,KAAK,OAAO,KAAK,CAAE,MAAOA,EAAE,MAAO,SAAU+C,CAAK,CAAC,EACnD,KAAK,MAAQ,KAAK,MAAM,MAAQ,GAChC,KAAK,IAAM,KACX,KAAK,OAAS,EACd,KAAK,MAAM,EACX,KAAK,MAAM,MAAM,CACnB,OAASC,EAAK,CACZ,KAAK,KAAK,QAASA,CAAG,CACxB,CACA,MACF,CACA,KAAK,MAAM,EACX,MAAM,KAAK,KAAKhD,CAAC,EACnB,CAEA,MAAc,KAAKA,EAA2B,CAC5C,GAAI,CACF,KAAK,KAAK,MAAOA,CAAC,EAClB,MAAMA,EAAE,UAAU,CAAE,QAAS,KAAM,QAASA,CAAE,CAAC,CACjD,OAASgD,EAAK,CACZ,KAAK,KAAK,QAASA,CAAG,CACxB,CACF,CACF,EACAC,EAAS,iBAAkB/B,CAAc",
|
|
6
|
-
"names": ["isMac", "matchesKey", "e", "spec", "parts", "key", "has", "m", "mac", "subsequence", "text", "q", "i", "ch", "score", "c", "query", "title", "rest", "total", "w", "at", "s", "marked", "words", "lower", "spans", "a", "b", "out", "pos", "h", "x", "CommandPalette", "Component", "config", "t", "iconEl", "el", "list", "cmd", "id", "toLayer", "lockModal", "trapFocus", "f", "pool", "order", "rank", "lvl", "searching", "rows", "group", "item", "cats", "chip", "label", "cat", "row", "scroll", "on", "n", "kids", "err", "register"]
|
|
7
|
-
}
|
package/dist/chunk-BNPVRIFT.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as m}from"./chunk-4COBH4QJ.js";import{a as f}from"./chunk-ARCW54L2.js";import{a as g}from"./chunk-SNTHW4K2.js";import{f as a,g as o}from"./chunk-NWTTHDIM.js";import{c as h}from"./chunk-IHAYOSBR.js";import{b as u}from"./chunk-IYPKPLCU.js";import{b as c}from"./chunk-PZSHOSOS.js";import{e as n}from"./chunk-MA5BJL3S.js";var b=/\s*(?:–|—|\s-\s|\sto\s|\sa\s)\s*/,d=p=>a(p,{day:"2-digit",month:"2-digit",year:"numeric"}),l=class extends g{baseCls="op-field op-textfield op-picker op-datefield op-daterange";cal;dd;garbage=!1;emptyValue(){return null}isEmpty(e){return!e?.start}parse(e){if(this.garbage=!1,!e.trim())return null;let[r,s]=e.trim().split(b),t=o(r),i=s?o(s):null;return!t||s&&!i?(this.garbage=!0,null):i&&i<t?{start:i,end:t}:{start:t,end:i??t}}display(e){return e?.start?e.end&&e.end!==e.start?`${d(e.start)} \u2013 ${d(e.end)}`:d(e.start):""}createControl(){let e=super.createControl(),r=this.input;r.setAttribute("aria-haspopup","dialog"),r.setAttribute("aria-expanded","false");let s=c("button","op-picker__trigger",{type:"button",tabindex:-1,"aria-label":n("calOpen")},h("calendar"));this.listen(s,"mousedown",i=>i.preventDefault()),this.listen(s,"click",()=>{!this.config.disabled&&!this.config.readonly&&this.toggle()}),e.append(s);let t=this.config;return this.cal=new m({range:!0,value:t.value,min:t.min,max:t.max,firstDay:t.firstDay}),this.dd=new f({anchor:e,content:this.cal,role:"presentation"}),this.cal.on("select",i=>{this.dd.close(),this.setValue(i),r.focus()}),this.dd.on("open",()=>{r.setAttribute("aria-expanded","true"),this.el.classList.add("is-open"),this.cal.setValue(this.value),this.cal.focusDay(),this.emit("expand")}),this.dd.on("close",()=>{r.setAttribute("aria-expanded","false"),this.el.classList.remove("is-open"),this.emit("collapse")}),this.own(()=>this.dd.destroy()),this.on("blur",()=>this.later(()=>{let i=document.activeElement;!this.el.contains(i)&&!this.dd.el.contains(i)&&this.dd.close()},0)),e}onKey(e){e.key==="ArrowDown"&&!this.dd.isOpen()?(e.preventDefault(),this.open()):super.onKey(e)}onInput(){super.onInput(),this.garbage?this.setError(n("date")):this.error&&this.validate()}applyValue(e){super.applyValue(e),this.garbage=!1}onDisabled(e){super.onDisabled(e),this.el.querySelector(".op-picker__trigger").disabled=e}check(){if(this.garbage)return n("date");let e=super.check(),r=this.value;if(e||!r)return e;let{min:s,max:t}=this.config;return s&&r.start<s?n("dateMin",{n:a(s)}):t&&(r.end??r.start)>t?n("dateMax",{n:a(t)}):""}open(){this.config.disabled||this.config.readonly||!this.rendered||this.dd.open()}close(){this.dd?.close()}toggle(){this.dd.isOpen()?this.close():this.open()}setMin(e){this.config.min=e,this.cal?.setMin(e)}setMax(e){this.config.max=e,this.cal?.setMax(e)}};u("daterangefield",l);export{l as a};
|
|
2
|
-
//# sourceMappingURL=chunk-BNPVRIFT.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/components/fields/daterangefield/daterangefield.ts"],
|
|
4
|
-
"sourcesContent": ["import { TextField, type TextFieldConfig } from '../textfield/textfield';\nimport { register } from '../../../core/registry';\nimport { h } from '../../../core/dom';\nimport { t } from '../../../core/i18n';\nimport { parseDate, formatDate } from '../../../core/date';\nimport { iconEl } from '../../base/icon/icon';\nimport { Dropdown } from '../../overlays/dropdown/dropdown';\nimport { Calendar, type DateRange } from '../../dates/calendar/calendar';\n\nexport interface DateRangeFieldConfig extends TextFieldConfig<DateRange | null> {\n min?: string;\n max?: string;\n firstDay?: number;\n}\n\nconst SEP = /\\s*(?:\u2013|\u2014|\\s-\\s|\\sto\\s|\\sa\\s)\\s*/;\nconst short = (iso: string) => formatDate(iso, { day: '2-digit', month: '2-digit', year: 'numeric' });\n\n/**\n * Value is `{ start, end }` (ISO dates) or null. The text reads `01/03/2025 \u2013 15/03/2025` (typed or picked); the calendar\n * takes two clicks, and the popup closes on the second.\n */\nexport class DateRangeField extends TextField<DateRange | null, DateRangeFieldConfig> {\n protected override baseCls = 'op-field op-textfield op-picker op-datefield op-daterange';\n private cal!: Calendar;\n private dd!: Dropdown;\n private garbage = false;\n\n protected override emptyValue() {\n return null;\n }\n protected override isEmpty(v: DateRange | null) {\n return !v?.start;\n }\n\n protected override parse(text: string): DateRange | null {\n this.garbage = false;\n if (!text.trim()) return null;\n const [a, b] = text.trim().split(SEP);\n const start = parseDate(a);\n const end = b ? parseDate(b) : null;\n if (!start || (b && !end)) {\n this.garbage = true;\n return null;\n }\n return end && end < start ? { start: end, end: start } : { start, end: end ?? start };\n }\n protected override display(v: DateRange | null) {\n return v?.start ? (v.end && v.end !== v.start ? `${short(v.start)} \u2013 ${short(v.end)}` : short(v.start)) : '';\n }\n\n protected override createControl() {\n const wrap = super.createControl();\n const input = this.input;\n input.setAttribute('aria-haspopup', 'dialog');\n input.setAttribute('aria-expanded', 'false');\n const trigger = h('button', 'op-picker__trigger', { type: 'button', tabindex: -1, 'aria-label': t('calOpen') }, iconEl('calendar'));\n this.listen(trigger, 'mousedown', (e: Event) => e.preventDefault());\n this.listen(trigger, 'click', () => {\n if (!this.config.disabled && !this.config.readonly) this.toggle();\n });\n wrap.append(trigger);\n const c = this.config;\n this.cal = new Calendar({ range: true, value: c.value, min: c.min, max: c.max, firstDay: c.firstDay });\n this.dd = new Dropdown({ anchor: wrap, content: this.cal, role: 'presentation' });\n this.cal.on('select', (r: DateRange) => {\n this.dd.close();\n this.setValue(r);\n input.focus();\n });\n this.dd.on('open', () => {\n input.setAttribute('aria-expanded', 'true');\n this.el.classList.add('is-open');\n this.cal.setValue(this.value);\n this.cal.focusDay();\n this.emit('expand');\n });\n this.dd.on('close', () => {\n input.setAttribute('aria-expanded', 'false');\n this.el.classList.remove('is-open');\n this.emit('collapse');\n });\n this.own(() => this.dd.destroy());\n this.on('blur', () =>\n this.later(() => {\n const a = document.activeElement;\n if (!this.el.contains(a) && !this.dd.el.contains(a)) this.dd.close();\n }, 0),\n );\n return wrap;\n }\n\n protected override onKey(e: KeyboardEvent) {\n if (e.key === 'ArrowDown' && !this.dd.isOpen()) {\n e.preventDefault();\n this.open();\n } else super.onKey(e);\n }\n protected override onInput() {\n super.onInput();\n if (this.garbage) this.setError(t('date'));\n else if (this.error) this.validate();\n }\n protected override applyValue(v: DateRange | null) {\n super.applyValue(v);\n this.garbage = false;\n }\n protected override onDisabled(disabled: boolean) {\n super.onDisabled(disabled);\n (this.el.querySelector('.op-picker__trigger') as HTMLButtonElement).disabled = disabled;\n }\n\n protected override check(): string {\n if (this.garbage) return t('date');\n const base = super.check();\n const v = this.value;\n if (base || !v) return base;\n const { min, max } = this.config;\n if (min && v.start! < min) return t('dateMin', { n: formatDate(min) });\n if (max && (v.end ?? v.start!) > max) return t('dateMax', { n: formatDate(max) });\n return '';\n }\n\n open() {\n if (this.config.disabled || this.config.readonly || !this.rendered) return;\n this.dd.open();\n }\n close() {\n this.dd?.close();\n }\n toggle() {\n if (this.dd.isOpen()) this.close();\n else this.open();\n }\n setMin(min: string | undefined) {\n this.config.min = min;\n this.cal?.setMin(min);\n }\n setMax(max: string | undefined) {\n this.config.max = max;\n this.cal?.setMax(max);\n }\n}\nregister('daterangefield', DateRangeField);\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["SEP", "short", "iso", "formatDate", "DateRangeField", "TextField", "v", "text", "a", "b", "start", "parseDate", "end", "wrap", "input", "trigger", "h", "t", "iconEl", "e", "c", "Calendar", "Dropdown", "r", "disabled", "base", "min", "max", "register"]
|
|
7
|
-
}
|
package/dist/chunk-C3N7QTQB.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as g}from"./chunk-ZHVSHDLH.js";import{a as k}from"./chunk-JVEPKW5X.js";import{a as T}from"./chunk-LEE2FEEL.js";import{a as d}from"./chunk-NV5AIBQP.js";import{a as w}from"./chunk-T4OYVG2X.js";import{a as c}from"./chunk-CQRHNTEX.js";import{a as h}from"./chunk-6O2BXCRN.js";import{a as C}from"./chunk-DXO3UJKL.js";import{a as b}from"./chunk-XZ5CUZZP.js";import{a as x}from"./chunk-LBCWEWPN.js";import{a as l}from"./chunk-QEQIJAAB.js";import{a as u}from"./chunk-4SUKNSCY.js";import{a as y}from"./chunk-BNPVRIFT.js";import{a as f}from"./chunk-ZYUXCZX7.js";import{a as m}from"./chunk-U3X2FW6U.js";import{a}from"./chunk-SNTHW4K2.js";import{c as s}from"./chunk-UPOBGNJ5.js";import{a as p}from"./chunk-XZEOSW3Q.js";var n=(t,e,o,r={})=>new t({name:e,label:o,...r}),S={text:(t,e,o)=>n(a,t,e,o),email:(t,e,o)=>n(a,t,e,{inputType:"email",...o}),password:(t,e,o)=>n(a,t,e,{inputType:"password",...o}),area:(t,e,o)=>n(g,t,e,o),number:(t,e,o)=>n(f,t,e,o),date:(t,e,o)=>n(m,t,e,o),dateRange:(t,e,o)=>n(y,t,e,o),secret:(t,e,o)=>n(w,t,e,o),slider:(t,e,o)=>n(h,t,e,o),check:(t,e,o)=>n(l,t,void 0,{boxLabel:e,...o}),radio:(t,e,o,r)=>n(d,t,e,{options:o,...r}),select:(t,e,o,r)=>n(c,t,e,{options:o,...r}),combo:(t,e,o,r)=>n(u,t,e,{options:o,...r}),suggest:(t,e,o,r)=>n(C,t,e,{query:o,...r}),lookup:(t,e,o,r)=>n(T,t,e,{lookup:o,...r}),button:(t,e,o)=>new p({text:t,handler:e,...o}),primary:(t,e,o)=>new p({text:t,handler:e,variant:"primary",...o}),danger:(t,e,o)=>new p({text:t,handler:e,variant:"danger",...o}),row:(...t)=>new s({layout:"hbox",items:t}),col:(...t)=>new s({layout:"vbox",items:t}),grid:(t,...e)=>new s({layout:{type:"grid",columns:typeof t=="number"?`repeat(${t}, 1fr)`:t},items:e}),panel:(t,e,o)=>new b({title:t,items:e,...o}),toolbar:(...t)=>new x({items:t}),form:(t,e)=>new k({items:t,...e})};var i=t=>t,H=i({Default:"default",Primary:"primary",Danger:"danger",Ghost:"ghost"}),$=i({Top:"top",Left:"left"}),j=i({Vertical:"vertical",Horizontal:"horizontal"}),J=i({North:"north",South:"south",West:"west",East:"east",Center:"center"}),Q=i({Right:"right",Left:"left",Top:"top",Bottom:"bottom"}),U=i({Fit:"fit",HBox:"hbox",VBox:"vbox",Border:"border",Grid:"grid",Card:"card"}),X=i({None:"none",Single:"single",Multi:"multi"}),Y=i({Info:"info",Success:"success",Warning:"warning",Error:"error"}),Z=i({Eq:"eq",Ne:"ne",Contains:"contains",NotContains:"notContains",StartsWith:"startsWith",EndsWith:"endsWith",Gt:"gt",Ge:"ge",Lt:"lt",Le:"le",Between:"between",NotBetween:"notBetween",In:"in",Nin:"nin",Empty:"empty",NotEmpty:"notEmpty"}),_=i({Light:"light",Dark:"dark",Corporate:"corporate",Brutal:"brutal",Soft:"soft",Terminal:"terminal",Editorial:"editorial",Brand:"brand"});export{S as a,H as b,$ as c,j as d,J as e,Q as f,U as g,X as h,Y as i,Z as j,_ as k};
|
|
2
|
-
//# sourceMappingURL=chunk-C3N7QTQB.js.map
|