optikos 0.3.0 → 0.5.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 +58 -1
- package/dist/bind.js +1 -1
- package/dist/bind.js.map +4 -4
- package/dist/build.js +2 -0
- package/dist/build.js.map +7 -0
- package/dist/chunk-2CVMT3IW.js +3 -0
- package/dist/chunk-2CVMT3IW.js.map +7 -0
- package/dist/{chunk-5JEXM5S7.js → chunk-2GKIF7A6.js} +2 -2
- package/dist/{chunk-5BC72727.js → chunk-2I4Y7I7C.js} +2 -2
- package/dist/{chunk-Z2Z52GFT.js → chunk-2I7HDIOU.js} +2 -2
- package/dist/chunk-2QMI2RRB.js +2 -0
- package/dist/chunk-2QMI2RRB.js.map +7 -0
- package/dist/chunk-34KVSA2V.js +3 -0
- package/dist/chunk-34KVSA2V.js.map +7 -0
- package/dist/chunk-37PYJAA2.js +2 -0
- package/dist/{chunk-UXXJOU5J.js.map → chunk-37PYJAA2.js.map} +1 -1
- package/dist/{chunk-ZPPELYNJ.js → chunk-3BG75P7T.js} +2 -2
- package/dist/{chunk-GNU4VOOE.js → chunk-3F4MN2BU.js} +2 -2
- package/dist/{chunk-5DJTP53N.js → chunk-3FK52VQX.js} +2 -2
- package/dist/chunk-3OA3P37P.js +2 -0
- package/dist/chunk-3OA3P37P.js.map +7 -0
- package/dist/chunk-3TCITFUU.js +2 -0
- package/dist/chunk-3TCITFUU.js.map +7 -0
- package/dist/chunk-3VDLX7ET.js +2 -0
- package/dist/chunk-3VDLX7ET.js.map +7 -0
- package/dist/{chunk-REW4LR46.js → chunk-4OB2IM5L.js} +2 -2
- package/dist/chunk-5G5PHOZJ.js +2 -0
- package/dist/chunk-5G5PHOZJ.js.map +7 -0
- package/dist/{chunk-EDUMAMK4.js → chunk-5GCTM37D.js} +2 -2
- package/dist/chunk-5PYJ6FJK.js +2 -0
- package/dist/chunk-5PYJ6FJK.js.map +7 -0
- package/dist/chunk-632LUU52.js +2 -0
- package/dist/chunk-632LUU52.js.map +7 -0
- package/dist/{chunk-JOFQJGZK.js → chunk-6BOM5KZR.js} +2 -2
- package/dist/{chunk-Z2JBUHKA.js → chunk-6NP4AEV4.js} +2 -2
- package/dist/chunk-6PPRYSLN.js +2 -0
- package/dist/chunk-6PPRYSLN.js.map +7 -0
- package/dist/{chunk-NXSTUFS7.js → chunk-6TZJO2G2.js} +2 -2
- package/dist/chunk-7Y2GHQRB.js +2 -0
- package/dist/chunk-A36JFIA3.js +2 -0
- package/dist/chunk-A36JFIA3.js.map +7 -0
- package/dist/{chunk-G2KUK6AT.js → chunk-ADHKL2GM.js} +2 -2
- package/dist/{chunk-JI265XFO.js → chunk-AJN66F32.js} +2 -2
- package/dist/{chunk-YHEMA56R.js → chunk-AQ3RTHG5.js} +2 -2
- package/dist/{chunk-ZVK4L5GK.js → chunk-BCVOUMJJ.js} +2 -2
- package/dist/{chunk-HOF4JGMQ.js → chunk-BIGL3ZVD.js} +2 -2
- package/dist/{chunk-ZWNQREWS.js → chunk-BQEFLPDA.js} +2 -2
- package/dist/{chunk-ZWNQREWS.js.map → chunk-BQEFLPDA.js.map} +2 -2
- package/dist/{chunk-HXDTGP2K.js → chunk-BRGT4O6Q.js} +2 -2
- package/dist/{chunk-OGRFQTXA.js → chunk-BTGJ3MP4.js} +2 -2
- package/dist/{chunk-TOLTUOZS.js → chunk-CWIE74NX.js} +2 -2
- package/dist/{chunk-M242VYZA.js → chunk-CXZKCBQE.js} +2 -2
- package/dist/{chunk-4EZJ5FKJ.js → chunk-DIOJGTUN.js} +2 -2
- package/dist/chunk-DJUSVBD5.js +2 -0
- package/dist/chunk-DJUSVBD5.js.map +7 -0
- package/dist/chunk-DLRGB5NY.js +2 -0
- package/dist/chunk-DLRGB5NY.js.map +7 -0
- package/dist/chunk-DY3ZYMXD.js +2 -0
- package/dist/chunk-DY3ZYMXD.js.map +7 -0
- package/dist/chunk-EO777UIN.js +2 -0
- package/dist/chunk-EO777UIN.js.map +7 -0
- package/dist/chunk-ESCLDVFS.js +2 -0
- package/dist/{chunk-YBAYEU25.js.map → chunk-ESCLDVFS.js.map} +1 -1
- package/dist/{chunk-2ZUZ5HDL.js → chunk-ESRS5ZQV.js} +2 -2
- package/dist/{chunk-RNN55473.js → chunk-FNZI6MFG.js} +2 -2
- package/dist/{chunk-RNN55473.js.map → chunk-FNZI6MFG.js.map} +1 -1
- package/dist/{chunk-JK74QK3M.js → chunk-FSR6BDVO.js} +2 -2
- package/dist/{chunk-6VBK2I5B.js → chunk-G26R2F3W.js} +2 -2
- package/dist/{chunk-G2DAD3MQ.js → chunk-GEJKFE4X.js} +2 -2
- package/dist/chunk-GFJRGBQR.js +2 -0
- package/dist/chunk-GFJRGBQR.js.map +7 -0
- package/dist/chunk-GLAY4RJF.js +2 -0
- package/dist/chunk-GLAY4RJF.js.map +7 -0
- package/dist/chunk-GNKVLJ5H.js +2 -0
- package/dist/chunk-GNKVLJ5H.js.map +7 -0
- package/dist/chunk-GZIDE5K2.js +2 -0
- package/dist/chunk-GZIDE5K2.js.map +7 -0
- package/dist/{chunk-5Q76ACVI.js → chunk-H25XXQVH.js} +2 -2
- package/dist/chunk-HG7OOHGD.js +2 -0
- package/dist/chunk-HG7OOHGD.js.map +7 -0
- package/dist/chunk-HRW25TMU.js +2 -0
- package/dist/chunk-HX6TWXTX.js +2 -0
- package/dist/chunk-HX6TWXTX.js.map +7 -0
- package/dist/chunk-I5A74NMJ.js +2 -0
- package/dist/chunk-I5A74NMJ.js.map +7 -0
- package/dist/chunk-IODSL7KU.js +2 -0
- package/dist/chunk-IODSL7KU.js.map +7 -0
- package/dist/chunk-J2TCHWYD.js +2 -0
- package/dist/chunk-J2TCHWYD.js.map +7 -0
- package/dist/chunk-J5BZAKC6.js +2 -0
- package/dist/chunk-J5BZAKC6.js.map +7 -0
- package/dist/chunk-JBOKM5YA.js +2 -0
- package/dist/{chunk-KLLAY2IM.js.map → chunk-JBOKM5YA.js.map} +2 -2
- package/dist/chunk-L5SQQFO7.js +2 -0
- package/dist/chunk-L5SQQFO7.js.map +7 -0
- package/dist/chunk-L6DOWGBO.js +2 -0
- package/dist/chunk-L6DOWGBO.js.map +7 -0
- package/dist/{chunk-W3H7GTJY.js → chunk-LHWY6G6Q.js} +2 -2
- package/dist/chunk-LLHDEUIA.js +2 -0
- package/dist/chunk-LLHDEUIA.js.map +7 -0
- package/dist/chunk-LXWCTCZV.js +2 -0
- package/dist/chunk-LXWCTCZV.js.map +7 -0
- package/dist/chunk-M2ZRKHE4.js +2 -0
- package/dist/chunk-M2ZRKHE4.js.map +7 -0
- package/dist/{chunk-Q26YZYTD.js → chunk-M7HLHGQV.js} +2 -2
- package/dist/{chunk-IHE2MQ3W.js → chunk-MGSCSS7X.js} +2 -2
- package/dist/chunk-MM2OC66E.js +4 -0
- package/dist/{chunk-XX2MVWFS.js.map → chunk-MM2OC66E.js.map} +1 -1
- package/dist/{chunk-DBMWS3O5.js → chunk-MQ5BYGFY.js} +2 -2
- package/dist/chunk-MQEALOU3.js +3 -0
- package/dist/chunk-MQEALOU3.js.map +7 -0
- package/dist/chunk-NAUSRVB6.js +2 -0
- package/dist/chunk-NAUSRVB6.js.map +7 -0
- package/dist/chunk-NEVDHDJ4.js +3 -0
- package/dist/chunk-NEVDHDJ4.js.map +7 -0
- package/dist/{chunk-5QUY72FX.js → chunk-NWHH3CYH.js} +2 -2
- package/dist/chunk-OADWLPSF.js +2 -0
- package/dist/chunk-OADWLPSF.js.map +7 -0
- package/dist/{chunk-3TAW4AKH.js → chunk-OB3VIRQR.js} +2 -2
- package/dist/{chunk-MB3MU6HR.js → chunk-PGVLRMTQ.js} +2 -2
- package/dist/chunk-Q6FY4L2F.js +2 -0
- package/dist/chunk-Q6FY4L2F.js.map +7 -0
- package/dist/{chunk-TZOQWCVH.js → chunk-QOSTS5I3.js} +2 -2
- package/dist/chunk-QVBDBGS4.js +2 -0
- package/dist/chunk-QVBDBGS4.js.map +7 -0
- package/dist/{chunk-3S24ZRPK.js → chunk-RMATRKXV.js} +2 -2
- package/dist/{chunk-I4SP6JTU.js → chunk-S3ILIWSW.js} +2 -2
- package/dist/chunk-S4QD5NID.js +2 -0
- package/dist/chunk-S4QD5NID.js.map +7 -0
- package/dist/{chunk-XHOBNSBO.js → chunk-SEUIIPHS.js} +2 -2
- package/dist/{chunk-23XLG2EM.js → chunk-SEW5OCQF.js} +2 -2
- package/dist/chunk-T5OGUCY2.js +2 -0
- package/dist/chunk-T5OGUCY2.js.map +7 -0
- package/dist/chunk-TMBGEZSD.js +2 -0
- package/dist/chunk-TMBGEZSD.js.map +7 -0
- package/dist/chunk-TVO3Z2BM.js +2 -0
- package/dist/chunk-TVO3Z2BM.js.map +7 -0
- package/dist/{chunk-LQRFNQ2N.js → chunk-U25QSLAH.js} +2 -2
- package/dist/chunk-UCWICDYG.js +2 -0
- package/dist/chunk-UCWICDYG.js.map +7 -0
- package/dist/chunk-UDXO3KM3.js +2 -0
- package/dist/chunk-UDXO3KM3.js.map +7 -0
- package/dist/{chunk-FEHGU6EP.js → chunk-UL364TLO.js} +2 -2
- package/dist/chunk-UUAGMZD2.js +2 -0
- package/dist/chunk-UUAGMZD2.js.map +7 -0
- package/dist/chunk-V5G5JECN.js +2 -0
- package/dist/chunk-V5G5JECN.js.map +7 -0
- package/dist/chunk-XFDNXSU5.js +2 -0
- package/dist/chunk-XFDNXSU5.js.map +7 -0
- package/dist/{chunk-JBLRAM7Z.js → chunk-XNRZJP4E.js} +2 -2
- package/dist/chunk-YJTUFK4P.js +2 -0
- package/dist/chunk-YLFSCQL3.js +2 -0
- package/dist/chunk-YLFSCQL3.js.map +7 -0
- package/dist/chunk-Z6HZY2YG.js +2 -0
- package/dist/chunk-Z6HZY2YG.js.map +7 -0
- package/dist/chunk-ZEIE2OCQ.js +2 -0
- package/dist/chunk-ZEIE2OCQ.js.map +7 -0
- package/dist/{chunk-2YZB6XQR.js → chunk-ZLYZFHEN.js} +2 -2
- package/dist/components/avatar.js +2 -0
- package/dist/components/avatar.js.map +7 -0
- package/dist/components/badge.js +1 -1
- package/dist/components/breadcrumb.js +1 -1
- package/dist/components/button.js +1 -1
- package/dist/components/calendar.js +1 -1
- package/dist/components/carousel.js +2 -0
- package/dist/components/carousel.js.map +7 -0
- package/dist/components/cellediting.js +1 -1
- package/dist/components/chart.js +2 -0
- package/dist/components/chart.js.map +7 -0
- package/dist/components/chat.js +1 -1
- package/dist/components/checkbox.js +1 -1
- package/dist/components/checkboxgroup.js +1 -1
- package/dist/components/chip.js +1 -1
- package/dist/components/codeviewer.js +1 -1
- package/dist/components/columntotals.js +2 -0
- package/dist/components/columntotals.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/datetimefield.js +2 -0
- package/dist/components/datetimefield.js.map +7 -0
- package/dist/components/dial.js +1 -1
- package/dist/components/dropdown.js +1 -1
- package/dist/components/exportbar.js +2 -0
- package/dist/components/exportbar.js.map +7 -0
- package/dist/components/fieldgroup.js +1 -1
- package/dist/components/fieldlist.js +1 -1
- 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 +1 -1
- package/dist/components/formerrors.js +1 -1
- package/dist/components/formsection.js +1 -1
- package/dist/components/grid.js +1 -1
- package/dist/components/gridexport.js +2 -0
- package/dist/components/gridexport.js.map +7 -0
- package/dist/components/gridstate.js +2 -0
- package/dist/components/gridstate.js.map +7 -0
- package/dist/components/grouping.js +2 -0
- package/dist/components/grouping.js.map +7 -0
- package/dist/components/icon.js +1 -1
- package/dist/components/image.js +2 -0
- package/dist/components/image.js.map +7 -0
- package/dist/components/imagecanvas.js +2 -0
- package/dist/components/imagecanvas.js.map +7 -0
- package/dist/components/imagefield.js +2 -0
- package/dist/components/imagefield.js.map +7 -0
- package/dist/components/inputgroup.js +1 -1
- package/dist/components/label.js +1 -1
- package/dist/components/listbox.js +1 -1
- package/dist/components/lookupfield.js +1 -1
- package/dist/components/maskfield.js +2 -0
- package/dist/components/maskfield.js.map +7 -0
- 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/rowediting.js +2 -0
- package/dist/components/rowediting.js.map +7 -0
- package/dist/components/searchgrid.js +1 -1
- package/dist/components/secretfield.js +1 -1
- package/dist/components/select.js +1 -1
- package/dist/components/shortcuts.js +2 -0
- package/dist/components/shortcuts.js.map +7 -0
- package/dist/components/slider.js +1 -1
- package/dist/components/spacer.js +1 -1
- package/dist/components/spinner.js +1 -1
- package/dist/components/stat.js +2 -0
- package/dist/components/stat.js.map +7 -0
- 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/timeentry.js +2 -0
- package/dist/components/timeentry.js.map +7 -0
- package/dist/components/timefield.js +2 -0
- package/dist/components/timefield.js.map +7 -0
- package/dist/components/timeline.js +2 -0
- package/dist/components/timeline.js.map +7 -0
- package/dist/components/toast.js +1 -1
- package/dist/components/toggle.js +1 -1
- package/dist/components/toolbar.js +1 -1
- package/dist/components/tree.js +1 -1
- package/dist/components/treegrid.js +2 -0
- package/dist/components/treegrid.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/avatar.css +68 -0
- package/dist/css/base.css +9 -0
- package/dist/css/carousel.css +119 -0
- package/dist/css/chart.css +168 -0
- package/dist/css/columntotals.css +56 -0
- package/dist/css/core.css +36 -0
- package/dist/css/datetimefield.css +15 -0
- package/dist/css/exportbar.css +9 -0
- package/dist/css/grid.css +52 -0
- package/dist/css/gridexport.css +35 -0
- package/dist/css/grouping.css +56 -0
- package/dist/css/image.css +46 -0
- package/dist/css/imagecanvas.css +75 -0
- package/dist/css/imagefield.css +103 -0
- package/dist/css/rowediting.css +39 -0
- package/dist/css/shortcuts.css +34 -0
- package/dist/css/stat.css +64 -0
- package/dist/css/stepform.css +1 -0
- package/dist/css/timeentry.css +116 -0
- package/dist/css/timeline.css +185 -0
- package/dist/css/treegrid.css +35 -0
- package/dist/css/window.css +2 -2
- package/dist/data.js +1 -1
- package/dist/dev.js +2 -0
- package/dist/dev.js.map +7 -0
- package/dist/index.js +16 -5
- package/dist/index.js.map +4 -4
- package/dist/optikos.css +1480 -142
- package/dist/testing.js +2 -0
- package/dist/testing.js.map +7 -0
- package/dist/themes/dark.css +7 -0
- package/dist/types/bind/index.d.ts +1 -1
- package/dist/types/bind/viewmodel.d.ts +33 -0
- package/dist/types/build/build.d.ts +49 -0
- package/dist/types/build/index.d.ts +1 -0
- package/dist/types/components/avatar.d.ts +1 -0
- package/dist/types/components/base/avatar/avatar.d.ts +22 -0
- package/dist/types/components/base/image/image.d.ts +25 -0
- package/dist/types/components/base/imagecanvas/imagecanvas.d.ts +39 -0
- package/dist/types/components/carousel.d.ts +1 -0
- package/dist/types/components/chart.d.ts +1 -0
- package/dist/types/components/charts/chart/chart.d.ts +64 -0
- package/dist/types/components/charts/stat/stat.d.ts +34 -0
- package/dist/types/components/columntotals.d.ts +1 -0
- package/dist/types/components/data/cellediting/cellediting.d.ts +3 -0
- package/dist/types/components/data/columntotals/columntotals.d.ts +24 -0
- package/dist/types/components/data/exportbar/exportbar.d.ts +24 -0
- package/dist/types/components/data/grid/footer.d.ts +6 -0
- package/dist/types/components/data/grid/grid.d.ts +37 -0
- package/dist/types/components/data/gridexport/gridexport.d.ts +29 -0
- package/dist/types/components/data/gridstate/gridstate.d.ts +23 -0
- package/dist/types/components/data/grouping/controls.d.ts +27 -0
- package/dist/types/components/data/grouping/grouping.d.ts +43 -0
- package/dist/types/components/data/rowediting/rowediting.d.ts +13 -0
- package/dist/types/components/data/searchgrid/searchgrid.d.ts +9 -2
- package/dist/types/components/data/timeentry/timeentry.d.ts +37 -0
- package/dist/types/components/data/timeline/timeline.d.ts +63 -0
- package/dist/types/components/data/treegrid/treegrid.d.ts +32 -0
- package/dist/types/components/datetimefield.d.ts +1 -0
- package/dist/types/components/exportbar.d.ts +1 -0
- package/dist/types/components/fields/datetimefield/datetimefield.d.ts +28 -0
- package/dist/types/components/fields/imagefield/imagefield.d.ts +48 -0
- package/dist/types/components/fields/maskfield/maskfield.d.ts +28 -0
- package/dist/types/components/fields/numberfield/numberfield.d.ts +9 -0
- package/dist/types/components/fields/pickerfield/pickerfield.d.ts +3 -0
- package/dist/types/components/fields/timefield/timefield.d.ts +24 -0
- package/dist/types/components/form/fieldlist/fieldlist.d.ts +2 -0
- package/dist/types/components/form/form/form.d.ts +5 -0
- package/dist/types/components/form/stepform/stepform.d.ts +1 -1
- package/dist/types/components/gridexport.d.ts +1 -0
- package/dist/types/components/gridstate.d.ts +1 -0
- package/dist/types/components/grouping.d.ts +1 -0
- package/dist/types/components/image.d.ts +1 -0
- package/dist/types/components/imagecanvas.d.ts +1 -0
- package/dist/types/components/imagefield.d.ts +1 -0
- package/dist/types/components/layout/carousel/carousel.d.ts +58 -0
- package/dist/types/components/maskfield.d.ts +1 -0
- package/dist/types/components/navigation/navmenu/navmenu.d.ts +2 -0
- package/dist/types/components/overlays/commandpalette/commandpalette.d.ts +2 -0
- package/dist/types/components/overlays/menu/menu.d.ts +4 -1
- package/dist/types/components/overlays/shortcuts/shortcuts.d.ts +27 -0
- package/dist/types/components/overlays/window/window.d.ts +14 -1
- package/dist/types/components/rowediting.d.ts +1 -0
- package/dist/types/components/shortcuts.d.ts +1 -0
- package/dist/types/components/stat.d.ts +1 -0
- package/dist/types/components/timeentry.d.ts +1 -0
- package/dist/types/components/timefield.d.ts +1 -0
- package/dist/types/components/timeline.d.ts +1 -0
- package/dist/types/components/treegrid.d.ts +1 -0
- package/dist/types/core/component.d.ts +7 -0
- package/dist/types/core/container.d.ts +10 -1
- package/dist/types/core/dev.d.ts +2 -0
- package/dist/types/core/field.d.ts +4 -0
- package/dist/types/core/i18n.d.ts +2 -0
- package/dist/types/core/index.d.ts +4 -1
- package/dist/types/core/path.d.ts +2 -0
- package/dist/types/core/permission.d.ts +11 -0
- package/dist/types/core/state.d.ts +9 -0
- package/dist/types/data/column.d.ts +11 -1
- package/dist/types/data/index.d.ts +1 -1
- package/dist/types/data/model.d.ts +2 -0
- package/dist/types/data/store.d.ts +21 -0
- package/dist/types/dev/index.d.ts +2 -0
- package/dist/types/dev/keys.d.ts +1 -0
- package/dist/types/index.d.ts +21 -0
- package/dist/types/testing/index.d.ts +25 -0
- package/dist/types/themes/color.d.ts +14 -0
- package/dist/types/themes/contrast.d.ts +15 -0
- package/dist/types/themes/define.d.ts +25 -3
- package/dist/types/themes/index.d.ts +3 -1
- package/dist/types/themes/seeds.d.ts +11 -0
- package/dist/types/ui/ui.d.ts +6 -0
- package/dist/ui.js +1 -1
- package/package.json +13 -1
- package/dist/chunk-2ZRNGG2N.js +0 -2
- package/dist/chunk-2ZRNGG2N.js.map +0 -7
- package/dist/chunk-4EQEHJB3.js +0 -2
- package/dist/chunk-4EQEHJB3.js.map +0 -7
- package/dist/chunk-4LZZ244E.js +0 -2
- package/dist/chunk-4LZZ244E.js.map +0 -7
- package/dist/chunk-4SYIIX5A.js +0 -2
- package/dist/chunk-4SYIIX5A.js.map +0 -7
- package/dist/chunk-7KMIFXHZ.js +0 -2
- package/dist/chunk-7KMIFXHZ.js.map +0 -7
- package/dist/chunk-A2NKDOYN.js +0 -2
- package/dist/chunk-A2NKDOYN.js.map +0 -7
- package/dist/chunk-CKXS375P.js +0 -2
- package/dist/chunk-CKXS375P.js.map +0 -7
- package/dist/chunk-EJGWCKE4.js +0 -2
- package/dist/chunk-EJGWCKE4.js.map +0 -7
- package/dist/chunk-ELYARUCN.js +0 -2
- package/dist/chunk-EV73ADN2.js +0 -2
- package/dist/chunk-EV73ADN2.js.map +0 -7
- package/dist/chunk-GD5JGKM7.js +0 -2
- package/dist/chunk-GD5JGKM7.js.map +0 -7
- package/dist/chunk-GZ7X34QP.js +0 -2
- package/dist/chunk-KCEUD232.js +0 -2
- package/dist/chunk-KCEUD232.js.map +0 -7
- package/dist/chunk-KLLAY2IM.js +0 -2
- package/dist/chunk-LBJSMXLV.js +0 -2
- package/dist/chunk-LBJSMXLV.js.map +0 -7
- package/dist/chunk-LW2WRUVL.js +0 -2
- package/dist/chunk-LW2WRUVL.js.map +0 -7
- package/dist/chunk-MW3RWBZ7.js +0 -2
- package/dist/chunk-MW3RWBZ7.js.map +0 -7
- package/dist/chunk-OEAXCCVM.js +0 -2
- package/dist/chunk-OEAXCCVM.js.map +0 -7
- package/dist/chunk-UB5RYS7T.js +0 -2
- package/dist/chunk-UB5RYS7T.js.map +0 -7
- package/dist/chunk-UXXJOU5J.js +0 -2
- package/dist/chunk-VU3GIDZ3.js +0 -2
- package/dist/chunk-VU3GIDZ3.js.map +0 -7
- package/dist/chunk-W2BAFOCN.js +0 -3
- package/dist/chunk-W2BAFOCN.js.map +0 -7
- package/dist/chunk-WFGTQZIQ.js +0 -2
- package/dist/chunk-WFGTQZIQ.js.map +0 -7
- package/dist/chunk-XX2MVWFS.js +0 -4
- package/dist/chunk-XYZ6VZ5T.js +0 -2
- package/dist/chunk-YBAYEU25.js +0 -2
- package/dist/chunk-YF75HKL6.js +0 -2
- package/dist/chunk-YF75HKL6.js.map +0 -7
- /package/dist/{chunk-5JEXM5S7.js.map → chunk-2GKIF7A6.js.map} +0 -0
- /package/dist/{chunk-5BC72727.js.map → chunk-2I4Y7I7C.js.map} +0 -0
- /package/dist/{chunk-Z2Z52GFT.js.map → chunk-2I7HDIOU.js.map} +0 -0
- /package/dist/{chunk-ZPPELYNJ.js.map → chunk-3BG75P7T.js.map} +0 -0
- /package/dist/{chunk-GNU4VOOE.js.map → chunk-3F4MN2BU.js.map} +0 -0
- /package/dist/{chunk-5DJTP53N.js.map → chunk-3FK52VQX.js.map} +0 -0
- /package/dist/{chunk-REW4LR46.js.map → chunk-4OB2IM5L.js.map} +0 -0
- /package/dist/{chunk-EDUMAMK4.js.map → chunk-5GCTM37D.js.map} +0 -0
- /package/dist/{chunk-JOFQJGZK.js.map → chunk-6BOM5KZR.js.map} +0 -0
- /package/dist/{chunk-Z2JBUHKA.js.map → chunk-6NP4AEV4.js.map} +0 -0
- /package/dist/{chunk-NXSTUFS7.js.map → chunk-6TZJO2G2.js.map} +0 -0
- /package/dist/{chunk-GZ7X34QP.js.map → chunk-7Y2GHQRB.js.map} +0 -0
- /package/dist/{chunk-G2KUK6AT.js.map → chunk-ADHKL2GM.js.map} +0 -0
- /package/dist/{chunk-JI265XFO.js.map → chunk-AJN66F32.js.map} +0 -0
- /package/dist/{chunk-YHEMA56R.js.map → chunk-AQ3RTHG5.js.map} +0 -0
- /package/dist/{chunk-ZVK4L5GK.js.map → chunk-BCVOUMJJ.js.map} +0 -0
- /package/dist/{chunk-HOF4JGMQ.js.map → chunk-BIGL3ZVD.js.map} +0 -0
- /package/dist/{chunk-HXDTGP2K.js.map → chunk-BRGT4O6Q.js.map} +0 -0
- /package/dist/{chunk-OGRFQTXA.js.map → chunk-BTGJ3MP4.js.map} +0 -0
- /package/dist/{chunk-TOLTUOZS.js.map → chunk-CWIE74NX.js.map} +0 -0
- /package/dist/{chunk-M242VYZA.js.map → chunk-CXZKCBQE.js.map} +0 -0
- /package/dist/{chunk-4EZJ5FKJ.js.map → chunk-DIOJGTUN.js.map} +0 -0
- /package/dist/{chunk-2ZUZ5HDL.js.map → chunk-ESRS5ZQV.js.map} +0 -0
- /package/dist/{chunk-JK74QK3M.js.map → chunk-FSR6BDVO.js.map} +0 -0
- /package/dist/{chunk-6VBK2I5B.js.map → chunk-G26R2F3W.js.map} +0 -0
- /package/dist/{chunk-G2DAD3MQ.js.map → chunk-GEJKFE4X.js.map} +0 -0
- /package/dist/{chunk-5Q76ACVI.js.map → chunk-H25XXQVH.js.map} +0 -0
- /package/dist/{chunk-XYZ6VZ5T.js.map → chunk-HRW25TMU.js.map} +0 -0
- /package/dist/{chunk-W3H7GTJY.js.map → chunk-LHWY6G6Q.js.map} +0 -0
- /package/dist/{chunk-Q26YZYTD.js.map → chunk-M7HLHGQV.js.map} +0 -0
- /package/dist/{chunk-IHE2MQ3W.js.map → chunk-MGSCSS7X.js.map} +0 -0
- /package/dist/{chunk-DBMWS3O5.js.map → chunk-MQ5BYGFY.js.map} +0 -0
- /package/dist/{chunk-5QUY72FX.js.map → chunk-NWHH3CYH.js.map} +0 -0
- /package/dist/{chunk-3TAW4AKH.js.map → chunk-OB3VIRQR.js.map} +0 -0
- /package/dist/{chunk-MB3MU6HR.js.map → chunk-PGVLRMTQ.js.map} +0 -0
- /package/dist/{chunk-TZOQWCVH.js.map → chunk-QOSTS5I3.js.map} +0 -0
- /package/dist/{chunk-3S24ZRPK.js.map → chunk-RMATRKXV.js.map} +0 -0
- /package/dist/{chunk-I4SP6JTU.js.map → chunk-S3ILIWSW.js.map} +0 -0
- /package/dist/{chunk-XHOBNSBO.js.map → chunk-SEUIIPHS.js.map} +0 -0
- /package/dist/{chunk-23XLG2EM.js.map → chunk-SEW5OCQF.js.map} +0 -0
- /package/dist/{chunk-LQRFNQ2N.js.map → chunk-U25QSLAH.js.map} +0 -0
- /package/dist/{chunk-FEHGU6EP.js.map → chunk-UL364TLO.js.map} +0 -0
- /package/dist/{chunk-JBLRAM7Z.js.map → chunk-XNRZJP4E.js.map} +0 -0
- /package/dist/{chunk-ELYARUCN.js.map → chunk-YJTUFK4P.js.map} +0 -0
- /package/dist/{chunk-2YZB6XQR.js.map → chunk-ZLYZFHEN.js.map} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/layout/layout.ts", "../src/core/container.ts"],
|
|
4
|
-
"sourcesContent": ["import type { Component } from '../core/component';\nimport type { Container } from '../core/container';\nimport { px } from '../core/dom';\n\nexport interface Layout {\n init(c: Container): void;\n add?(c: Container, cmp: Component, index: number): void;\n remove?(c: Container, cmp: Component, index: number): void;\n /** Card only. */\n activate?(c: Container, cmp: Component): void;\n getActive?(c: Container): Component | undefined;\n /** Border only: below `narrowBelow` the west/east regions become drawers; these open and close them. */\n openRegion?(name: string): void;\n closeRegion?(name?: string): void;\n toggleRegion?(name: string): void;\n isRegionOpen?(name: string): boolean;\n /** Layouts that adapt to the width: whether the container is currently narrow, and a way to force it (tests, previews). */\n isNarrow?(): boolean;\n setNarrow?(narrow: boolean): void;\n}\n\nexport type LayoutConfig = { type: string; [option: string]: unknown };\nexport type LayoutSpec = string | LayoutConfig | Layout;\nexport type LayoutFactory = (config: Record<string, any>) => Layout;\n\nconst factories = new Map<string, LayoutFactory>();\n\n/** Registers a layout strategy under a name; users add their own the same way. */\nexport function registerLayout(name: string, factory: LayoutFactory): void {\n factories.set(name, factory);\n}\n\nexport function createLayout(spec: LayoutSpec): Layout {\n if (typeof spec === 'object' && 'init' in spec) return spec as Layout;\n const cfg = (typeof spec === 'string' ? { type: spec } : spec) as LayoutConfig;\n const f = factories.get(cfg.type);\n if (!f) throw new Error(`Optikos: unknown layout \"${cfg.type}\"`);\n return f(cfg);\n}\n\n/**\n * Keeps the class `is-narrow` on the container body while it is narrower than `below` px (a ResizeObserver on the\n * container itself, not the window, so a layout inside a small panel adapts too). Emits `narrow-change` on the container.\n */\nfunction watchNarrow(c: Container, below: number, on?: (narrow: boolean) => void) {\n const body = c.getBody();\n let narrow = false;\n const set = (n: boolean) => {\n if (n === narrow) return;\n narrow = n;\n body.classList.toggle('is-narrow', n);\n on?.(n);\n c.emit('narrow-change', n);\n };\n if (typeof ResizeObserver !== 'undefined') {\n const ro = new ResizeObserver(() => body.clientWidth > 0 && set(body.clientWidth < below));\n ro.observe(body);\n c.own(() => ro.disconnect());\n }\n return { isNarrow: () => narrow, setNarrow: set };\n}\n\n/** Layouts that are only a class plus custom properties; the CSS does the work. */\nconst cssLayout =\n (name: string, vars: string[] = []): LayoutFactory =>\n (cfg) => ({\n init(c) {\n const body = c.getBody();\n body.classList.add('op-layout', `op-layout-${name}`);\n for (const v of vars) if (cfg[v] != null) body.style.setProperty(`--op-layout-${v}`, px(cfg[v]));\n },\n });\n\nregisterLayout('fit', cssLayout('fit'));\nconst hbox = cssLayout('hbox', ['gap', 'align', 'justify', 'wrap']);\n/** `stackBelow: 600`: under that width the row becomes a column. */\nregisterLayout('hbox', (cfg) => {\n const base = hbox(cfg);\n let w: ReturnType<typeof watchNarrow> | undefined;\n return {\n ...base,\n init(c) {\n base.init(c);\n if (cfg.stackBelow) {\n c.getBody().classList.add('op-layout-stack');\n w = watchNarrow(c, Number(cfg.stackBelow));\n }\n },\n isNarrow: () => !!w?.isNarrow(),\n setNarrow: (n) => w?.setNarrow(n),\n };\n});\nregisterLayout('vbox', cssLayout('vbox', ['gap', 'align', 'justify', 'wrap']));\n\n/** Numeric `columns` collapse to one column under `narrowBelow` px (default 480; `0` turns it off). */\nregisterLayout('grid', (cfg) => {\n let w: ReturnType<typeof watchNarrow> | undefined;\n return {\n init(c) {\n const body = c.getBody();\n body.classList.add('op-layout', 'op-layout-grid');\n if (cfg.gap != null) body.style.setProperty('--op-layout-gap', px(cfg.gap));\n const cols = cfg.columns ?? 1;\n if (typeof cols === 'number') {\n body.style.setProperty('--op-layout-columns', String(cols));\n const below = cfg.narrowBelow == null ? 480 : Number(cfg.narrowBelow);\n if (below > 0 && cols > 1) w = watchNarrow(c, below);\n } else body.style.gridTemplateColumns = cols;\n },\n add(_c, cmp) {\n const span = cmp.config.colspan;\n if (span) cmp.el.style.gridColumn = span === 'full' ? '1 / -1' : `span ${span}`;\n },\n isNarrow: () => !!w?.isNarrow(),\n setNarrow: (n) => w?.setNarrow(n),\n };\n});\n\n/**\n * Regions around a center. Under `narrowBelow` px (default 768) the west and east regions leave the grid and become\n * drawers over the center, closed until `openRegion('west')` (or `open: 'west'` in the layout config, to start open).\n * A scrim behind an open drawer closes it on click; Esc closes it too.\n */\nregisterLayout('border', (cfg) => {\n let w: ReturnType<typeof watchNarrow> | undefined;\n let cont!: Container;\n const regions = () => Array.from(cont.getBody().children).filter((e): e is HTMLElement => e instanceof HTMLElement && (e.dataset.region === 'west' || e.dataset.region === 'east'));\n const find = (name: string) => regions().find((e) => e.dataset.region === name);\n const sync = () => cont.getBody().classList.toggle('has-open-region', regions().some((e) => e.classList.contains('is-open')));\n const close = (name?: string) => {\n for (const e of regions()) if (!name || e.dataset.region === name) e.classList.remove('is-open');\n sync();\n };\n return {\n init(c) {\n cont = c;\n const body = c.getBody();\n body.classList.add('op-layout', 'op-layout-border');\n if (cfg.gap != null) body.style.setProperty('--op-layout-gap', px(cfg.gap));\n w = watchNarrow(c, cfg.narrowBelow == null ? 768 : Number(cfg.narrowBelow), (narrow) => {\n if (!narrow) close();\n else if (cfg.open) find(String(cfg.open))?.classList.add('is-open'), sync();\n });\n // the scrim is the body's own ::after: a click that lands on the body itself (not a child) closes the drawer\n c.listen(body, 'click', (e: Event) => e.target === body && close());\n c.listen(body, 'keydown', (e: KeyboardEvent) => {\n if (e.key === 'Escape' && body.classList.contains('has-open-region') && body.classList.contains('is-narrow')) {\n e.stopPropagation();\n close();\n }\n });\n },\n add(_c, cmp) {\n const region = cmp.config.region ?? 'center';\n cmp.el.style.gridArea = region;\n cmp.el.dataset.region = region;\n },\n openRegion(name) {\n const e = find(name);\n if (!e || !w?.isNarrow()) return;\n close();\n e.classList.add('is-open');\n sync();\n (e.querySelector<HTMLElement>('input,button,[tabindex]') ?? e).focus?.();\n },\n closeRegion: close,\n toggleRegion(name) {\n if (find(name)?.classList.contains('is-open')) close(name);\n else this.openRegion!(name);\n },\n isRegionOpen: (name) => !!find(name)?.classList.contains('is-open'),\n isNarrow: () => !!w?.isNarrow(),\n setNarrow: (n) => w?.setNarrow(n),\n };\n});\n\nregisterLayout('card', (cfg) => {\n let active: Component | undefined;\n // children that were never rendered (lazy tabs) only get the flag; their DOM is not built just to hide it\n const show = (c: Container, cmp: Component | undefined) => {\n active = cmp;\n for (const i of c.items) {\n if (i.rendered) i.el.hidden = i !== cmp;\n else i.config.hidden = i !== cmp;\n }\n c.emit('activate', cmp);\n };\n return {\n init(c) {\n c.getBody().classList.add('op-layout', 'op-layout-fit');\n const a = cfg.activeItem ?? c.config.activeItem ?? 0;\n show(c, typeof a === 'number' ? c.items[a] : c.items.find((i) => i.id === a));\n },\n add(c, cmp) {\n cmp.el.hidden = cmp !== active && !!active;\n if (!active) show(c, cmp);\n },\n remove(c, cmp, index) {\n if (cmp === active) show(c, c.items[Math.min(index, c.items.length - 1)]);\n },\n activate: show,\n getActive: () => active,\n };\n});\n", "import { Component, type ComponentConfig, type Parent } from './component';\nimport { create, type AnyConfig } from './registry';\nimport { createLayout, type Layout, type LayoutSpec } from '../layout/layout';\n\nexport interface ContainerConfig extends ComponentConfig {\n items?: Array<AnyConfig | Component | string>;\n layout?: LayoutSpec;\n /** Config merged into every item that does not set the key itself. */\n defaults?: Record<string, unknown>;\n /** `type` used by items that do not declare one. */\n defaultType?: string;\n /** Layout `card`: initial visible child (index or id). */\n activeItem?: number | string;\n}\n\nexport class Container<C extends ContainerConfig = ContainerConfig> extends Component<C> implements Parent {\n protected override baseCls = 'op-container';\n protected defaultLayout: LayoutSpec | undefined;\n items: Component[] = [];\n layout?: Layout;\n\n constructor(config: C = {} as C) {\n super(config);\n this.items = (config.items ?? []).map((i) => this.make(i));\n }\n\n /** Element that holds the children. Panels override it. */\n getBody(): HTMLElement {\n return this.el;\n }\n\n /** Turns shorthand strings (`'->'`) into configs. Subclasses override; the base has none. */\n protected shorthand(s: string): AnyConfig {\n throw new Error(`Optikos: no shorthand for item \"${s}\" in ${this.baseCls}`);\n }\n\n private make(item: AnyConfig | Component | string): Component {\n if (typeof item === 'string') item = this.shorthand(item);\n const c = item instanceof Component ? item : create({ type: this.config.defaultType, ...this.config.defaults, ...item });\n c.parent = this;\n return c;\n }\n\n protected override onRender(): void {\n const spec = this.config.layout ?? this.defaultLayout;\n if (spec) (this.layout = createLayout(spec)).init(this);\n this.items.forEach((c, i) => this.attach(c, i));\n }\n\n protected attach(c: Component, index: number): void {\n const body = this.getBody();\n const next = this.items.slice(index + 1).find((x) => x.rendered && x.el.parentNode === body);\n body.insertBefore(c.el, next?.el ?? null);\n this.layout?.add?.(this, c, index);\n if (this.mounted) c.notifyMount();\n }\n\n add(item: AnyConfig | Component | string): Component {\n return this.insert(this.items.length, item);\n }\n\n insert(index: number, item: AnyConfig | Component | string): Component {\n const c = this.make(item);\n this.items.splice(index, 0, c);\n if (this.rendered) this.attach(c, index);\n this.emit('add', c);\n return c;\n }\n\n /** Removes a child (by instance, id or index). Destroys it unless `destroy` is `false`. */\n remove(child: Component | string | number, destroy = true): Component | undefined {\n const i = typeof child === 'number' ? child : this.items.findIndex((c) => c === child || c.id === child);\n const c = this.items[i];\n if (!c) return;\n this.items.splice(i, 1);\n c.parent = undefined;\n this.layout?.remove?.(this, c, i);\n if (destroy) c.destroy();\n else if (c.rendered) c.el.remove();\n this.emit('remove', c);\n return c;\n }\n\n removeAll(destroy = true): void {\n for (const c of [...this.items]) this.remove(c, destroy);\n }\n\n getItems(): Component[] {\n return this.items;\n }\n\n /** Direct child by id. */\n get(id: string): Component | undefined {\n return this.items.find((c) => c.id === id);\n }\n\n /** All descendants (depth-first) matching `fn`. */\n query(fn: (c: Component) => boolean): Component[] {\n const out: Component[] = [];\n for (const c of this.items) {\n if (fn(c)) out.push(c);\n if (c instanceof Container) out.push(...c.query(fn));\n }\n return out;\n }\n\n /** Layout `card`: which child is visible. */\n getActiveItem(): Component | undefined {\n return this.layout?.getActive?.(this);\n }\n setActiveItem(item: Component | string | number): void {\n const c = typeof item === 'number' ? this.items[item] : this.items.find((x) => x === item || x.id === item);\n if (c) this.layout?.activate?.(this, c);\n }\n\n override notifyMount(): void {\n super.notifyMount();\n for (const c of this.items) c.notifyMount();\n }\n\n protected override onDestroy(): void {\n for (const c of [...this.items]) c.destroy();\n }\n\n override setDisabled(disabled: boolean): void {\n super.setDisabled(disabled);\n for (const c of this.items) c.setDisabled(disabled);\n }\n}\n"],
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["import type { Component } from '../core/component';\nimport type { Container } from '../core/container';\nimport { px } from '../core/dom';\n\nexport interface Layout {\n init(c: Container): void;\n add?(c: Container, cmp: Component, index: number): void;\n remove?(c: Container, cmp: Component, index: number): void;\n /** Card only. */\n activate?(c: Container, cmp: Component): void;\n getActive?(c: Container): Component | undefined;\n /** Border only: below `narrowBelow` the west/east regions become drawers; these open and close them. */\n openRegion?(name: string): void;\n closeRegion?(name?: string): void;\n toggleRegion?(name: string): void;\n isRegionOpen?(name: string): boolean;\n /** Layouts that adapt to the width: whether the container is currently narrow, and a way to force it (tests, previews). */\n isNarrow?(): boolean;\n setNarrow?(narrow: boolean): void;\n}\n\nexport type LayoutConfig = { type: string; [option: string]: unknown };\nexport type LayoutSpec = string | LayoutConfig | Layout;\nexport type LayoutFactory = (config: Record<string, any>) => Layout;\n\nconst factories = new Map<string, LayoutFactory>();\n\n/** Registers a layout strategy under a name; users add their own the same way. */\nexport function registerLayout(name: string, factory: LayoutFactory): void {\n factories.set(name, factory);\n}\n\nexport function createLayout(spec: LayoutSpec): Layout {\n if (typeof spec === 'object' && 'init' in spec) return spec as Layout;\n const cfg = (typeof spec === 'string' ? { type: spec } : spec) as LayoutConfig;\n const f = factories.get(cfg.type);\n if (!f) throw new Error(`Optikos: unknown layout \"${cfg.type}\"`);\n return f(cfg);\n}\n\n/**\n * Keeps the class `is-narrow` on the container body while it is narrower than `below` px (a ResizeObserver on the\n * container itself, not the window, so a layout inside a small panel adapts too). Emits `narrow-change` on the container.\n */\nfunction watchNarrow(c: Container, below: number, on?: (narrow: boolean) => void) {\n const body = c.getBody();\n let narrow = false;\n const set = (n: boolean) => {\n if (n === narrow) return;\n narrow = n;\n body.classList.toggle('is-narrow', n);\n on?.(n);\n c.emit('narrow-change', n);\n };\n if (typeof ResizeObserver !== 'undefined') {\n const ro = new ResizeObserver(() => body.clientWidth > 0 && set(body.clientWidth < below));\n ro.observe(body);\n c.own(() => ro.disconnect());\n }\n return { isNarrow: () => narrow, setNarrow: set };\n}\n\n/** Layouts that are only a class plus custom properties; the CSS does the work. */\nconst cssLayout =\n (name: string, vars: string[] = []): LayoutFactory =>\n (cfg) => ({\n init(c) {\n const body = c.getBody();\n body.classList.add('op-layout', `op-layout-${name}`);\n for (const v of vars) if (cfg[v] != null) body.style.setProperty(`--op-layout-${v}`, px(cfg[v]));\n },\n });\n\nregisterLayout('fit', cssLayout('fit'));\nconst hbox = cssLayout('hbox', ['gap', 'align', 'justify', 'wrap']);\n/** `stackBelow: 600`: under that width the row becomes a column. */\nregisterLayout('hbox', (cfg) => {\n const base = hbox(cfg);\n let w: ReturnType<typeof watchNarrow> | undefined;\n return {\n ...base,\n init(c) {\n base.init(c);\n if (cfg.stackBelow) {\n c.getBody().classList.add('op-layout-stack');\n w = watchNarrow(c, Number(cfg.stackBelow));\n }\n },\n isNarrow: () => !!w?.isNarrow(),\n setNarrow: (n) => w?.setNarrow(n),\n };\n});\nregisterLayout('vbox', cssLayout('vbox', ['gap', 'align', 'justify', 'wrap']));\n\n/** Numeric `columns` collapse to one column under `narrowBelow` px (default 480; `0` turns it off). */\nregisterLayout('grid', (cfg) => {\n let w: ReturnType<typeof watchNarrow> | undefined;\n return {\n init(c) {\n const body = c.getBody();\n body.classList.add('op-layout', 'op-layout-grid');\n if (cfg.gap != null) body.style.setProperty('--op-layout-gap', px(cfg.gap));\n const cols = cfg.columns ?? 1;\n if (typeof cols === 'number') {\n body.style.setProperty('--op-layout-columns', String(cols));\n const below = cfg.narrowBelow == null ? 480 : Number(cfg.narrowBelow);\n if (below > 0 && cols > 1) w = watchNarrow(c, below);\n } else body.style.gridTemplateColumns = cols;\n },\n add(_c, cmp) {\n const span = cmp.config.colspan;\n if (span) cmp.el.style.gridColumn = span === 'full' ? '1 / -1' : `span ${span}`;\n },\n isNarrow: () => !!w?.isNarrow(),\n setNarrow: (n) => w?.setNarrow(n),\n };\n});\n\n/**\n * Regions around a center. Under `narrowBelow` px (default 768) the west and east regions leave the grid and become\n * drawers over the center, closed until `openRegion('west')` (or `open: 'west'` in the layout config, to start open).\n * A scrim behind an open drawer closes it on click; Esc closes it too.\n */\nregisterLayout('border', (cfg) => {\n let w: ReturnType<typeof watchNarrow> | undefined;\n let cont!: Container;\n const regions = () => Array.from(cont.getBody().children).filter((e): e is HTMLElement => e instanceof HTMLElement && (e.dataset.region === 'west' || e.dataset.region === 'east'));\n const find = (name: string) => regions().find((e) => e.dataset.region === name);\n const sync = () => cont.getBody().classList.toggle('has-open-region', regions().some((e) => e.classList.contains('is-open')));\n const close = (name?: string) => {\n for (const e of regions()) if (!name || e.dataset.region === name) e.classList.remove('is-open');\n sync();\n };\n return {\n init(c) {\n cont = c;\n const body = c.getBody();\n body.classList.add('op-layout', 'op-layout-border');\n if (cfg.gap != null) body.style.setProperty('--op-layout-gap', px(cfg.gap));\n w = watchNarrow(c, cfg.narrowBelow == null ? 768 : Number(cfg.narrowBelow), (narrow) => {\n if (!narrow) close();\n else if (cfg.open) find(String(cfg.open))?.classList.add('is-open'), sync();\n });\n // the scrim is the body's own ::after: a click that lands on the body itself (not a child) closes the drawer\n c.listen(body, 'click', (e: Event) => e.target === body && close());\n c.listen(body, 'keydown', (e: KeyboardEvent) => {\n if (e.key === 'Escape' && body.classList.contains('has-open-region') && body.classList.contains('is-narrow')) {\n e.stopPropagation();\n close();\n }\n });\n },\n add(_c, cmp) {\n const region = cmp.config.region ?? 'center';\n cmp.el.style.gridArea = region;\n cmp.el.dataset.region = region;\n },\n openRegion(name) {\n const e = find(name);\n if (!e || !w?.isNarrow()) return;\n close();\n e.classList.add('is-open');\n sync();\n (e.querySelector<HTMLElement>('input,button,[tabindex]') ?? e).focus?.();\n },\n closeRegion: close,\n toggleRegion(name) {\n if (find(name)?.classList.contains('is-open')) close(name);\n else this.openRegion!(name);\n },\n isRegionOpen: (name) => !!find(name)?.classList.contains('is-open'),\n isNarrow: () => !!w?.isNarrow(),\n setNarrow: (n) => w?.setNarrow(n),\n };\n});\n\nregisterLayout('card', (cfg) => {\n let active: Component | undefined;\n // children that were never rendered (lazy tabs) only get the flag; their DOM is not built just to hide it\n const show = (c: Container, cmp: Component | undefined) => {\n active = cmp;\n for (const i of c.items) {\n if (i.rendered) i.el.hidden = i !== cmp;\n else i.config.hidden = i !== cmp;\n }\n c.emit('activate', cmp);\n };\n return {\n init(c) {\n c.getBody().classList.add('op-layout', 'op-layout-fit');\n const a = cfg.activeItem ?? c.config.activeItem ?? 0;\n show(c, typeof a === 'number' ? c.items[a] : c.items.find((i) => i.id === a));\n },\n add(c, cmp) {\n cmp.el.hidden = cmp !== active && !!active;\n if (!active) show(c, cmp);\n },\n remove(c, cmp, index) {\n if (cmp === active) show(c, c.items[Math.min(index, c.items.length - 1)]);\n },\n activate: show,\n getActive: () => active,\n };\n});\n", "import { Component, type ComponentConfig, type Parent } from './component';\nimport { create, type AnyConfig } from './registry';\nimport { createLayout, type Layout, type LayoutSpec } from '../layout/layout';\n\n/** What a Tabs header reads from its panel (any Container, not just Panel). */\nexport interface TabPanelConfig {\n title?: string;\n icon?: string;\n closable?: boolean;\n reloadable?: boolean;\n /** Called by the tab's \u21BB; a returned Promise keeps the tab busy until it settles. */\n onReload?: (panel: any) => void | Promise<unknown>;\n}\n\nexport interface ContainerConfig extends ComponentConfig, TabPanelConfig {\n items?: Array<AnyConfig | Component | string>;\n layout?: LayoutSpec;\n /** Config merged into every item that does not set the key itself. */\n defaults?: Record<string, unknown>;\n /** `type` used by items that do not declare one. */\n defaultType?: string;\n /** Layout `card`: initial visible child (index or id). */\n activeItem?: number | string;\n}\n\nexport class Container<C extends ContainerConfig = ContainerConfig> extends Component<C> implements Parent {\n protected override baseCls = 'op-container';\n protected defaultLayout: LayoutSpec | undefined;\n items: Component[] = [];\n layout?: Layout;\n\n constructor(config: C = {} as C) {\n super(config);\n this.items = (config.items ?? []).map((i) => this.make(i));\n }\n\n /** Element that holds the children. Panels override it. */\n getBody(): HTMLElement {\n return this.el;\n }\n\n /** Turns shorthand strings (`'->'`) into configs. Subclasses override; the base has none. */\n protected shorthand(s: string): AnyConfig {\n throw new Error(`Optikos: no shorthand for item \"${s}\" in ${this.baseCls}`);\n }\n\n private make(item: AnyConfig | Component | string): Component {\n if (typeof item === 'string') item = this.shorthand(item);\n const c = item instanceof Component ? item : create({ type: this.config.defaultType, ...this.config.defaults, ...item });\n c.parent = this;\n return c;\n }\n\n protected override onRender(): void {\n const spec = this.config.layout ?? this.defaultLayout;\n if (spec) (this.layout = createLayout(spec)).init(this);\n this.items.forEach((c, i) => this.attach(c, i));\n }\n\n protected attach(c: Component, index: number): void {\n const body = this.getBody();\n const next = this.items.slice(index + 1).find((x) => x.rendered && x.el.parentNode === body);\n body.insertBefore(c.el, next?.el ?? null);\n this.layout?.add?.(this, c, index);\n if (this.mounted) c.notifyMount();\n }\n\n add(item: AnyConfig | Component | string): Component {\n return this.insert(this.items.length, item);\n }\n\n insert(index: number, item: AnyConfig | Component | string): Component {\n const c = this.make(item);\n this.items.splice(index, 0, c);\n if (this.rendered) this.attach(c, index);\n this.emit('add', c);\n return c;\n }\n\n /** Removes a child (by instance, id or index). Destroys it unless `destroy` is `false`. */\n remove(child: Component | string | number, destroy = true): Component | undefined {\n const i = typeof child === 'number' ? child : this.items.findIndex((c) => c === child || c.id === child);\n const c = this.items[i];\n if (!c) return;\n this.items.splice(i, 1);\n c.parent = undefined;\n this.layout?.remove?.(this, c, i);\n if (destroy) c.destroy();\n else if (c.rendered) c.el.remove();\n this.emit('remove', c);\n return c;\n }\n\n removeAll(destroy = true): void {\n for (const c of [...this.items]) this.remove(c, destroy);\n }\n\n getItems(): Component[] {\n return this.items;\n }\n\n /** Direct child by id. */\n get(id: string): Component | undefined {\n return this.items.find((c) => c.id === id);\n }\n\n /** All descendants (depth-first) matching `fn`. */\n query(fn: (c: Component) => boolean): Component[] {\n const out: Component[] = [];\n for (const c of this.items) {\n if (fn(c)) out.push(c);\n if (c instanceof Container) out.push(...c.query(fn));\n }\n return out;\n }\n\n /** Layout `card`: which child is visible. */\n getActiveItem(): Component | undefined {\n return this.layout?.getActive?.(this);\n }\n setActiveItem(item: Component | string | number): void {\n const c = typeof item === 'number' ? this.items[item] : this.items.find((x) => x === item || x.id === item);\n if (c) this.layout?.activate?.(this, c);\n }\n\n override notifyMount(): void {\n super.notifyMount();\n for (const c of this.items) c.notifyMount();\n }\n\n protected override onDestroy(): void {\n for (const c of [...this.items]) c.destroy();\n }\n\n override setDisabled(disabled: boolean): void {\n super.setDisabled(disabled);\n for (const c of this.items) c.setDisabled(disabled);\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["factories", "registerLayout", "name", "factory", "createLayout", "spec", "cfg", "f", "watchNarrow", "c", "below", "on", "body", "narrow", "set", "n", "ro", "cssLayout", "vars", "v", "px", "hbox", "base", "w", "cols", "_c", "cmp", "span", "cont", "regions", "e", "find", "sync", "close", "region", "active", "show", "i", "a", "index", "Container", "_Container", "Component", "config", "i", "s", "item", "c", "create", "spec", "createLayout", "index", "body", "next", "x", "child", "destroy", "id", "fn", "out", "disabled"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as o}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{a as o}from"./chunk-S3ILIWSW.js";import{a as t}from"./chunk-TIPK3SCJ.js";var e=class extends o{baseCls="op-field op-checkbox op-toggle";onRender(){super.onRender(),this.inputEl.setAttribute("role","switch")}setIndeterminate(){super.setIndeterminate(!1)}};t("toggle",e);export{e as a};
|
|
2
|
+
//# sourceMappingURL=chunk-BRGT4O6Q.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{c as n}from"./chunk-DIOJGTUN.js";import{a as l}from"./chunk-QVBDBGS4.js";import{a as r}from"./chunk-TIPK3SCJ.js";import{b as o}from"./chunk-PZSHOSOS.js";var p=class extends l{baseCls="op-field op-checkboxgroup";group;inputs=[];emptyValue(){return[]}isEmpty(e){return!e?.length}isEqual(e,t){return(e??[]).length===(t??[]).length&&(e??[]).every((i,s)=>i===t[s])}createControl(){return this.group=o("div","op-checkboxgroup__options",{role:"group","aria-labelledby":`${this.id}-label`}),this.listen(this.group,"change",e=>{if(!this.inputs.includes(e.target))return;if(this.config.readonly)return this.applyValue(this.value);let t=this.opts();this.commit(this.inputs.flatMap((i,s)=>i.checked?[t[s].value]:[])),this.paint()}),this.buildOptions(),this.inputEl=this.inputs[0]??this.group,this.group}opts(){return(this.config.options??[]).map(e=>typeof e=="object"?e:{value:e,label:e,disabled:!1})}buildOptions(){this.inputs=[],this.group.replaceChildren(...this.opts().map(e=>{let t=o("input","op-checkbox__input",{type:"checkbox",value:String(e.value),disabled:!!e.disabled});return this.inputs.push(t),o("label","op-checkbox op-checkbox__label",{},t,o("span","op-checkbox__box",{},n("check")),o("span","op-checkbox__text",{},e.label))})),this.group.classList.toggle("op-checkboxgroup__options--horizontal",this.config.direction==="horizontal")}onRender(){super.onRender(),this.el.querySelector(".op-field__label").id=`${this.id}-label`}applyValue(e){let t=this.opts();this.inputs.forEach((i,s)=>i.checked=(e??[]).includes(t[s].value)),this.paint()}paint(){for(let e of this.inputs)e.closest("label").classList.toggle("is-checked",e.checked)}getDisplayText(){let e=this.getValue()??[];return this.opts().filter(t=>e.includes(t.value)).map(t=>t.label).join(", ")}onDisabled(e){this.inputs.forEach((t,i)=>t.disabled=e||!!this.opts()[i].disabled)}setOptions(e){this.config.options=e,this.rendered&&(this.buildOptions(),this.inputEl=this.inputs[0]??this.group,this.applyValue(this.value),this.onDisabled(!!this.config.disabled))}};r("checkboxgroup",p);export{p as a};
|
|
2
|
+
//# sourceMappingURL=chunk-BTGJ3MP4.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{c as t}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{c as t}from"./chunk-BQEFLPDA.js";import{a as o}from"./chunk-TIPK3SCJ.js";var e,r=class extends t{baseCls="op-viewport";constructor(n={}){if(super(n),e&&!e.destroyed)throw new Error("Optikos: only one Viewport can exist at a time");e=this}onRender(){this.config.layout??="fit",super.onRender()}};o("viewport",r);export{r as a};
|
|
2
|
+
//# sourceMappingURL=chunk-CWIE74NX.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as f}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{a as f}from"./chunk-BCVOUMJJ.js";import{a as d}from"./chunk-TIPK3SCJ.js";import{f as c}from"./chunk-UDXO3KM3.js";import{b as a}from"./chunk-PZSHOSOS.js";import{c as m}from"./chunk-L5SQQFO7.js";import{f as l}from"./chunk-S4QD5NID.js";import{e as p}from"./chunk-4AA4FQEM.js";var h=class extends c{baseCls="op-dataview";store;itemsEl;emptyEl;pager;selected=new Set;active=0;anchor=-1;offStore;build(){let t=this.config,e=a("div",this.baseCls,{role:"listbox","aria-multiselectable":t.selection==="multi"?"true":null});return this.itemsEl=a("div","op-dataview__items"),this.emptyEl=a("div","op-dataview__empty"),e.append(this.itemsEl,this.emptyEl),t.itemWidth&&e.style.setProperty("--op-dataview-item-width",t.itemWidth),t.gap&&e.style.setProperty("--op-dataview-gap",t.gap),t.paging&&(this.pager=new f({cls:"op-dataview__pager"}),e.append(this.pager.el)),e}onRender(){let t=this.config;this.bindStore(t.store??new m({data:t.data??[]})),this.listen(this.itemsEl,"click",e=>this.onClick(e,"item-click")),this.listen(this.itemsEl,"dblclick",e=>this.onClick(e,"item-dblclick")),this.listen(this.itemsEl,"keydown",e=>this.onKey(e)),this.listen(this.itemsEl,"focusin",e=>{let i=this.indexOf(e);i>=0&&this.setActive(i,!1)}),this.pager&&(this.pager.setStore(this.store),this.store.pageSize||this.store.setPageSize(t.pageSize??24)),this.own(()=>this.pager?.destroy()),this.paint(!0)}notifyMount(){super.notifyMount(),this.pager?.notifyMount()}bindStore(t){this.offStore?.(),this.store=t;let e=t.subscribe(s=>this.rendered&&this.paint(["load","page","filter","sort"].includes(s.type))),i=t.on("loading",s=>this.setLoading(s));this.offStore=()=>(e(),i()),this.own(()=>this.offStore?.())}setStore(t){this.config.store=t,this.selected.clear(),this.active=0,this.rendered&&(this.bindStore(t),this.pager?.setStore(t),this.paint())}getStore(){return this.render(),this.store}paint(t=!1){let e=this.config;for(let s of this.selected)this.store.indexOf(s)<0&&this.selected.delete(s);this.active=Math.min(this.active,Math.max(0,this.store.count-1));let i=e.selection??"single";this.itemsEl.replaceChildren(...this.store.getRange().map((s,o)=>{let n=a("div",`op-dataview__item${this.selected.has(s)?" is-selected":""}${o===this.active?" is-active":""}${e.itemCls?` ${e.itemCls(s)}`:""}`,{role:"option",id:`${this.id}-i${o}`,"data-i":o,tabindex:o===this.active?0:-1,"aria-selected":i==="none"?null:String(this.selected.has(s))});return n.append(e.renderer(s,o)),n})),t&&e.stagger!==!1&&p(this.items(),{dy:8}),this.emptyEl.textContent=e.emptyText??l("empty"),this.emptyEl.hidden=this.store.count>0,this.el.classList.toggle("is-empty",this.store.count===0)}refresh(){this.rendered&&this.paint()}items(){return Array.from(this.itemsEl.children)}indexOf(t){let e=t.target.closest(".op-dataview__item");return e?Number(e.dataset.i):-1}columns(){let t=this.items();return t.length?Math.max(1,t.filter(e=>e.offsetTop===t[0].offsetTop).length):1}getSelection(){return[...this.selected]}select(t,e={}){let i=typeof t=="number"?this.store.getAt(t):t,s=this.config.selection??"single";!i||s==="none"||((s==="single"||!e.add)&&this.selected.clear(),this.selected.add(i),this.changed())}selectAll(){this.config.selection==="multi"&&(this.store.each(t=>this.selected.add(t)),this.changed())}deselectAll(){this.selected.size&&(this.selected.clear(),this.changed())}changed(){this.paintSelection(),this.emit("select",this.getSelection())}paintSelection(){this.items().forEach((t,e)=>{let i=this.selected.has(this.store.getAt(e));t.classList.toggle("is-selected",i),(this.config.selection??"single")!=="none"&&t.setAttribute("aria-selected",String(i))})}pick(t,e){let i=this.config.selection??"single",s=this.store.getAt(t);if(!(!s||i==="none")){if(i==="multi"&&e.shiftKey&&this.anchor>=0){this.selected.clear();for(let o of this.store.getRange(Math.min(this.anchor,t),Math.max(this.anchor,t)+1))this.selected.add(o)}else i==="multi"&&(e.ctrlKey||e.metaKey)?(this.selected.delete(s)||this.selected.add(s),this.anchor=t):(this.selected.clear(),this.selected.add(s),this.anchor=t);this.changed()}}onClick(t,e){let i=this.indexOf(t),s=this.store.getAt(i);if(!s)return;let o=t.target.closest("[data-op-action]");if(o){e==="item-click"&&this.emit("item-action",o.dataset.opAction,s,t);return}e==="item-click"&&(this.setActive(i,!1),this.pick(i,t)),this.emit(e,s,i,t)}setActive(t,e=!0){this.active=t,this.items().forEach((i,s)=>{i.tabIndex=s===t?0:-1,i.classList.toggle("is-active",s===t)}),e&&this.items()[t]?.focus(),this.emit("active-change",t)}focusItem(t){this.render(),this.setActive(Math.max(0,Math.min(t,this.store.count-1)))}onKey(t){let e=this.store.count;if(!e)return;let i=this.columns(),s=Math.max(1,Math.floor(this.el.clientHeight/Math.max(1,this.items()[0]?.offsetHeight??1))||3),o=this.active,n={ArrowRight:Math.min(e-1,o+1),ArrowLeft:Math.max(0,o-1),ArrowDown:Math.min(e-1,o+i),ArrowUp:Math.max(0,o-i),Home:0,End:e-1,PageDown:Math.min(e-1,o+i*s),PageUp:Math.max(0,o-i*s)},r=this.config.selection??"single";t.key in n?(t.preventDefault(),this.setActive(n[t.key]),r==="multi"&&t.shiftKey?this.pick(n[t.key],{shiftKey:!0}):r==="single"&&!t.ctrlKey&&this.pick(n[t.key],{}),r==="multi"&&t.shiftKey&&this.anchor<0&&(this.anchor=o)):t.key===" "?(t.preventDefault(),this.pick(o,r==="multi"?{ctrlKey:!0}:{})):t.key==="Enter"?this.emit("item-activate",this.store.getAt(o),o):(t.key==="a"||t.key==="A")&&(t.ctrlKey||t.metaKey)&&r==="multi"&&(t.preventDefault(),this.selectAll())}onDestroy(){this.pager?.destroy()}};d("dataview",h);export{h as a};
|
|
2
|
+
//# sourceMappingURL=chunk-CXZKCBQE.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{a as h}from"./chunk-TIPK3SCJ.js";import{f as l}from"./chunk-UDXO3KM3.js";import{b as M}from"./chunk-PZSHOSOS.js";var e=r=>`<path d="${r}"/>`,n={"chevron-down":e("m6 9 6 6 6-6"),"chevron-up":e("m18 15-6-6-6 6"),"chevron-left":e("m15 18-6-6 6-6"),"chevron-right":e("m9 18 6-6-6-6"),"chevrons-left":e("m11 17-5-5 5-5M18 17l-5-5 5-5"),"chevrons-right":e("m6 17 5-5-5-5M13 17l5-5-5-5"),x:e("M18 6 6 18M6 6l12 12"),check:e("M20 6 9 17l-5-5"),plus:e("M5 12h14M12 5v14"),minus:e("M5 12h14"),search:'<circle cx="11" cy="11" r="8"/>'+e("m21 21-4.3-4.3"),calendar:'<rect x="3" y="4" width="18" height="18" rx="2"/>'+e("M16 2v4M8 2v4M3 10h18"),info:'<circle cx="12" cy="12" r="10"/>'+e("M12 16v-4M12 8h.01"),alert:e("m21.7 18-8-14a2 2 0 0 0-3.5 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.7-3ZM12 9v4M12 17h.01"),error:'<circle cx="12" cy="12" r="10"/>'+e("m15 9-6 6M9 9l6 6"),success:'<circle cx="12" cy="12" r="10"/>'+e("m9 12 2 2 4-4"),menu:e("M4 6h16M4 12h16M4 18h16"),"arrow-up":e("m5 12 7-7 7 7M12 19V5"),"arrow-down":e("M12 5v14M19 12l-7 7-7-7"),columns:'<rect x="3" y="3" width="18" height="18" rx="2"/>'+e("M9 3v18M15 3v18"),filter:e("M22 3H2l8 9.5V19l4 2v-8.5z"),send:e("m22 2-7 20-4-9-9-4zM22 2 11 13"),sparkles:e("M12 3l1.9 5.6L19.5 10.5l-5.6 1.9L12 18l-1.9-5.6L4.5 10.5l5.6-1.9zM19 3v4M21 5h-4M5 17v4M7 19H3"),file:e("M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8zM14 2v6h6M8 13h8M8 17h8"),box:e("M21 8 12 3 3 8v8l9 5 9-5zM3 8l9 5 9-5M12 13v8"),truck:e("M1 3h15v13H1zM16 8h4l3 3v5h-7")+'<circle cx="5.5" cy="18.5" r="2.5"/><circle cx="18.5" cy="18.5" r="2.5"/>',clock:'<circle cx="12" cy="12" r="10"/>'+e("M12 6v6l4 2"),shield:e("M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"),list:e("M8 6h13M8 12h13M8 18h13M3 6h.01M3 12h.01M3 18h.01"),eye:e("M2 12s3.6-7 10-7 10 7 10 7-3.6 7-10 7S2 12 2 12z")+'<circle cx="12" cy="12" r="3"/>',"eye-off":e("M17.9 17.9A10.1 10.1 0 0 1 12 19c-6.4 0-10-7-10-7a18.5 18.5 0 0 1 5.1-5.9M9.9 5.2A9.7 9.7 0 0 1 12 5c6.4 0 10 7 10 7a18.5 18.5 0 0 1-2.2 3.2M14.1 14.1a3 3 0 1 1-4.2-4.2M2 2l20 20"),heart:e("M20.8 4.6a5.5 5.5 0 0 0-7.8 0L12 5.7l-1-1.1a5.5 5.5 0 0 0-7.8 7.8l1 1.1L12 21l7.8-7.5 1-1.1a5.5 5.5 0 0 0 0-7.8z"),image:'<rect x="3" y="3" width="18" height="18" rx="2"/><circle cx="9" cy="9" r="2"/>'+e("m21 15-5-5L5 21"),cloud:e("M18 10h-1.3A8 8 0 1 0 9 20h9a5 5 0 0 0 0-10z"),folder:e("M4 4h5l2 3h9a1 1 0 0 1 1 1v11a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1z"),share:e("M4 12v7a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1v-7M16 6l-4-4-4 4M12 2v14"),message:e("M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"),more:'<circle cx="12" cy="12" r="1"/><circle cx="19" cy="12" r="1"/><circle cx="5" cy="12" r="1"/>',user:e("M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2")+'<circle cx="12" cy="7" r="4"/>',home:e("m3 9 9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2zM9 22V12h6v10"),trash:e("M3 6h18M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6M10 11v6M14 11v6M9 6V4a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v2"),edit:e("M12 20h9M16.5 3.5a2.1 2.1 0 0 1 3 3L7 19l-4 1 1-4z"),sun:'<circle cx="12" cy="12" r="4"/>'+e("M12 2v2M12 20v2M4.9 4.9l1.4 1.4M17.7 17.7l1.4 1.4M2 12h2M20 12h2M4.9 19.1l1.4-1.4M17.7 6.3l1.4-1.4"),moon:e("M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z"),bell:e("M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9M10.3 21a1.9 1.9 0 0 0 3.4 0"),chart:e("M3 3v18h18M19 9l-5 5-4-4-3 3"),settings:'<circle cx="12" cy="12" r="3"/>'+e("M12 2v3M12 19v3M2 12h3M19 12h3M4.9 4.9 7 7M17 17l2.1 2.1M4.9 19.1 7 17M17 7l2.1-2.1"),users:e("M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2M23 21v-2a4 4 0 0 0-3-3.9M16 3.1a4 4 0 0 1 0 7.8")+'<circle cx="9" cy="7" r="4"/>'};function m(r){Object.assign(n,r)}var d=r=>r in n;function x(r,c){let t=M("span","op-icon");return i(t,r,c),t}function i(r,c,t){c&&!(c in n)&&console.warn(`Optikos: unknown icon "${c}" (register it with registerIcons)`);let o=n[c]??"";r.innerHTML=o.startsWith("<svg")?o:`<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">${o}</svg>`,t?(r.setAttribute("role","img"),r.setAttribute("aria-label",t),r.removeAttribute("aria-hidden")):(r.setAttribute("aria-hidden","true"),r.removeAttribute("role"),r.removeAttribute("aria-label"))}var s=class extends l{baseCls="op-icon";tag="span";onRender(){i(this.el,this.config.name??"",this.config.label)}setName(c){this.config.name=c,this.rendered&&i(this.el,c,this.config.label)}setLabel(c){this.config.label=c,this.rendered&&i(this.el,this.config.name??"",c)}};h("icon",s);export{m as a,d as b,x as c,s as d};
|
|
2
|
+
//# sourceMappingURL=chunk-DIOJGTUN.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as b,c as d}from"./chunk-DIOJGTUN.js";import{c as m}from"./chunk-BQEFLPDA.js";import{a as f}from"./chunk-TIPK3SCJ.js";import{b as r,e as v,f as h}from"./chunk-PZSHOSOS.js";import{e as p,f as l}from"./chunk-S4QD5NID.js";b({play:'<path d="m6 3 14 9-14 9z"/>',pause:'<rect x="14" y="4" width="4" height="16" rx="1"/><rect x="6" y="4" width="4" height="16" rx="1"/>'});p("en",{carousel:"Carousel",carouselSlide:"{n} of {total}",carouselGo:"Go to {n}",carouselPrev:"Previous",carouselNext:"Next",carouselPause:"Pause",carouselPlay:"Play"});p("pt-BR",{carousel:"Carrossel",carouselSlide:"{n} de {total}",carouselGo:"Ir para {n}",carouselPrev:"Anterior",carouselNext:"Pr\xF3ximo",carouselPlay:"Tocar",carouselPause:"Pausar"});var u=class extends m{baseCls="op-carousel";track;prevBtn;nextBtn;dotsEl;toggleBtn;index=0;stopped=!1;scrollTimer;playTimer;get perView(){return Math.max(1,this.config.perView??1)}get last(){return Math.max(0,this.items.length-this.perView)}build(){let t=(e,o,n,c)=>{let a=r("button",`op-carousel__${e}`,{type:"button","aria-label":l(n)},d(o));return this.listen(a,"click",()=>{this.interact(),c()}),a};return this.prevBtn=t("prev","chevron-left","carouselPrev",()=>this.prev()),this.nextBtn=t("next","chevron-right","carouselNext",()=>this.next()),this.toggleBtn=t("toggle","pause","carouselPause",()=>this.isPlaying()?this.pause():this.play()),this.track=r("div","op-carousel__track",{tabindex:0}),this.dotsEl=r("div","op-carousel__dots"),r("div",this.baseCls,{role:"region","aria-roledescription":"carousel"},r("div","op-carousel__viewport",{},this.track,this.prevBtn,this.nextBtn),r("div","op-carousel__bar",{},this.dotsEl,this.toggleBtn))}getBody(){return this.track}onRender(){let t=this.config;this.el.setAttribute("aria-label",t.ariaLabel??l("carousel")),this.track.setAttribute("aria-label",t.ariaLabel??l("carousel")),this.el.style.setProperty("--op-carousel-per-view",String(this.perView)),t.gap!=null&&this.el.style.setProperty("--op-carousel-gap",v(t.gap)),super.onRender(),this.index=h(t.active??0,0,this.last),this.on("add",()=>this.refresh()),this.on("remove",()=>this.refresh()),this.listen(this.track,"scroll",()=>{clearTimeout(this.scrollTimer),this.scrollTimer=setTimeout(()=>this.settle(),90)}),this.listen(this.el,"keydown",e=>{let o=e.target;if(o!==this.track&&!o.closest(".op-carousel__prev, .op-carousel__next, .op-carousel__dots, .op-carousel__toggle"))return;let n={ArrowLeft:()=>this.step(-1),ArrowRight:()=>this.step(1),Home:()=>this.goTo(0),End:()=>this.goTo(this.last)};n[e.key]&&(e.preventDefault(),this.interact(),n[e.key]())}),this.listen(this.track,"pointerdown",()=>this.interact());for(let e of["pointerenter","pointerleave","focusin","focusout"])this.listen(this.el,e,()=>this.tick());this.own(()=>{clearTimeout(this.scrollTimer),clearInterval(this.playTimer)}),this.refresh(),this.tick()}onMount(){this.align(!1)}settle(){let t=this.stride();if(!t||this.destroyed)return;let e=h(Math.round(Math.abs(this.track.scrollLeft)/t),0,this.last);e!==this.index&&this.set(e)}stride(){let[t,e]=this.items;return e?Math.abs(e.el.offsetLeft-t.el.offsetLeft):0}align(t){let e=getComputedStyle(this.track).direction==="rtl"?-1:1;this.track.style.scrollBehavior=t?"":"auto",this.track.scrollLeft=e*this.index*this.stride()}set(t){let e=this.index;this.index=t,this.config.active=t,this.refresh(),this.emit("change",t,e)}refresh(){if(this.destroyed)return;let t=this.items.length;this.index=h(this.index,0,this.last),this.items.forEach((i,s)=>{i.el.setAttribute("role","group"),i.el.setAttribute("aria-roledescription","slide"),i.el.setAttribute("aria-label",l("carouselSlide",{n:s+1,total:t})),i.el.toggleAttribute("inert",s<this.index||s>=this.index+this.perView)});let e=t>this.perView,o=this.config.dots!==!1&&e;this.dotsEl.hidden=!o,o&&this.dotsEl.children.length!==this.last+1&&this.dotsEl.replaceChildren(...Array.from({length:this.last+1},(i,s)=>{let g=r("button","op-carousel__dot",{type:"button","aria-label":l("carouselGo",{n:s+1})});return this.listen(g,"click",()=>{this.interact(),this.goTo(s)}),g})),[...this.dotsEl.children].forEach((i,s)=>s===this.index?i.setAttribute("aria-current","true"):i.removeAttribute("aria-current"));let n=this.config.arrows!==!1&&e;this.prevBtn.hidden=this.nextBtn.hidden=!n;let c=!!this.config.loop;this.prevBtn.disabled=!c&&this.index===0,this.nextBtn.disabled=!c&&this.index===this.last,this.el.classList.toggle("is-first",this.index===0),this.el.classList.toggle("is-last",this.index===this.last),this.toggleBtn.hidden=!this.config.autoplay||!e;let a=this.isPlaying();this.el.classList.toggle("is-playing",a),this.toggleBtn.replaceChildren(d(a?"pause":"play")),this.toggleBtn.setAttribute("aria-label",l(a?"carouselPause":"carouselPlay")),this.track.setAttribute("aria-live",a?"off":"polite")}getActive(){return this.index}goTo(t){t=h(t,0,this.last),!(t===this.index||this.emit("before-change",t)===!1)&&(this.set(t),this.rendered&&this.align(!0))}setActive(t){this.goTo(t)}step(t){let e=this.index+t;this.goTo(this.config.loop?e<0?this.last:e>this.last?0:e:e)}next(){this.step(1)}prev(){this.step(-1)}isPlaying(){return!!this.config.autoplay&&!this.stopped&&!this.reduced()}reduced(){return!!window.matchMedia?.("(prefers-reduced-motion: reduce)").matches}play(){this.stopped=!1,this.refresh(),this.tick()}pause(){this.stopped=!0,this.refresh(),this.tick()}interact(){this.stopped||this.pause()}tick(){clearInterval(this.playTimer),this.playTimer=void 0,!(!this.isPlaying()||this.el.matches(":hover, :focus-within")||this.items.length<=this.perView)&&(this.playTimer=setInterval(()=>this.goTo(this.index>=this.last?0:this.index+1),this.config.autoplay))}};f("carousel",u);export{u as a};
|
|
2
|
+
//# sourceMappingURL=chunk-DJUSVBD5.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/components/layout/carousel/carousel.ts"],
|
|
4
|
+
"sourcesContent": ["import { Container, type ContainerConfig } from '../../../core/container';\nimport { register } from '../../../core/registry';\nimport { h, clamp, px } from '../../../core/dom';\nimport { t, addMessages } from '../../../core/i18n';\nimport { iconEl, registerIcons } from '../../base/icon/icon';\n\nregisterIcons({ play: '<path d=\"m6 3 14 9-14 9z\"/>', pause: '<rect x=\"14\" y=\"4\" width=\"4\" height=\"16\" rx=\"1\"/><rect x=\"6\" y=\"4\" width=\"4\" height=\"16\" rx=\"1\"/>' });\n\naddMessages('en', { carousel: 'Carousel', carouselSlide: '{n} of {total}', carouselGo: 'Go to {n}', carouselPrev: 'Previous', carouselNext: 'Next', carouselPause: 'Pause', carouselPlay: 'Play' });\naddMessages('pt-BR', { carousel: 'Carrossel', carouselSlide: '{n} de {total}', carouselGo: 'Ir para {n}', carouselPrev: 'Anterior', carouselNext: 'Pr\u00F3ximo', carouselPlay: 'Tocar', carouselPause: 'Pausar' });\n\nexport interface CarouselConfig extends ContainerConfig {\n /** Items shown together. Default 1. */\n perView?: number;\n /** Space between items (px or CSS length). */\n gap?: number | string;\n /** Past the last item goes to the first (and the other way). */\n loop?: boolean;\n /** ms between items; 0 (default) is off. */\n autoplay?: number;\n /** Default `true`. */\n dots?: boolean;\n /** Default `true`. */\n arrows?: boolean;\n active?: number;\n}\n\n/** Pages through its items on a scroll-snap row: images, cards or any component. */\nexport class Carousel extends Container<CarouselConfig> {\n protected override baseCls = 'op-carousel';\n private track!: HTMLElement;\n private prevBtn!: HTMLButtonElement;\n private nextBtn!: HTMLButtonElement;\n private dotsEl!: HTMLElement;\n private toggleBtn!: HTMLButtonElement;\n private index = 0;\n private stopped = false;\n private scrollTimer?: ReturnType<typeof setTimeout>;\n private playTimer?: ReturnType<typeof setInterval>;\n\n private get perView() {\n return Math.max(1, this.config.perView ?? 1);\n }\n /** Positions the row can rest on: it moves one item at a time. */\n private get last() {\n return Math.max(0, this.items.length - this.perView);\n }\n\n protected override build(): HTMLElement {\n const btn = (cls: string, icon: string, key: string, fn: () => void) => {\n const b = h('button', `op-carousel__${cls}`, { type: 'button', 'aria-label': t(key) }, iconEl(icon));\n this.listen(b, 'click', () => {\n this.interact();\n fn();\n });\n return b;\n };\n this.prevBtn = btn('prev', 'chevron-left', 'carouselPrev', () => this.prev());\n this.nextBtn = btn('next', 'chevron-right', 'carouselNext', () => this.next());\n this.toggleBtn = btn('toggle', 'pause', 'carouselPause', () => (this.isPlaying() ? this.pause() : this.play()));\n this.track = h('div', 'op-carousel__track', { tabindex: 0 });\n this.dotsEl = h('div', 'op-carousel__dots');\n return h('div', this.baseCls, { role: 'region', 'aria-roledescription': 'carousel' },\n h('div', 'op-carousel__viewport', {}, this.track, this.prevBtn, this.nextBtn),\n h('div', 'op-carousel__bar', {}, this.dotsEl, this.toggleBtn));\n }\n\n override getBody(): HTMLElement {\n return this.track;\n }\n\n protected override onRender() {\n const c = this.config;\n this.el.setAttribute('aria-label', c.ariaLabel ?? t('carousel'));\n this.track.setAttribute('aria-label', c.ariaLabel ?? t('carousel'));\n this.el.style.setProperty('--op-carousel-per-view', String(this.perView));\n if (c.gap != null) this.el.style.setProperty('--op-carousel-gap', px(c.gap));\n super.onRender();\n this.index = clamp(c.active ?? 0, 0, this.last);\n this.on('add', () => this.refresh());\n this.on('remove', () => this.refresh());\n this.listen(this.track, 'scroll', () => {\n clearTimeout(this.scrollTimer);\n this.scrollTimer = setTimeout(() => this.settle(), 90);\n });\n this.listen(this.el, 'keydown', (e: KeyboardEvent) => {\n const el = e.target as HTMLElement;\n if (el !== this.track && !el.closest('.op-carousel__prev, .op-carousel__next, .op-carousel__dots, .op-carousel__toggle')) return;\n const keys: Record<string, () => void> = { ArrowLeft: () => this.step(-1), ArrowRight: () => this.step(1), Home: () => this.goTo(0), End: () => this.goTo(this.last) };\n if (!keys[e.key]) return;\n e.preventDefault();\n this.interact();\n keys[e.key]();\n });\n this.listen(this.track, 'pointerdown', () => this.interact());\n for (const ev of ['pointerenter', 'pointerleave', 'focusin', 'focusout']) this.listen(this.el, ev, () => this.tick());\n this.own(() => {\n clearTimeout(this.scrollTimer);\n clearInterval(this.playTimer);\n });\n this.refresh();\n this.tick();\n }\n\n protected override onMount() {\n this.align(false);\n }\n\n /** Reads the item at the left edge from the scroll position (after a swipe or a trackpad scroll). */\n private settle() {\n const stride = this.stride();\n if (!stride || this.destroyed) return;\n const i = clamp(Math.round(Math.abs(this.track.scrollLeft) / stride), 0, this.last);\n if (i !== this.index) this.set(i);\n }\n\n private stride(): number {\n const [a, b] = this.items;\n return b ? Math.abs(b.el.offsetLeft - a.el.offsetLeft) : 0;\n }\n\n private align(smooth: boolean) {\n const sign = getComputedStyle(this.track).direction === 'rtl' ? -1 : 1;\n this.track.style.scrollBehavior = smooth ? '' : 'auto';\n this.track.scrollLeft = sign * this.index * this.stride();\n }\n\n private set(i: number) {\n const old = this.index;\n this.index = i;\n this.config.active = i;\n this.refresh();\n this.emit('change', i, old);\n }\n\n /** Slides, dots, arrows: everything that follows the item count or the active one. */\n private refresh() {\n if (this.destroyed) return;\n const n = this.items.length;\n this.index = clamp(this.index, 0, this.last);\n this.items.forEach((c, i) => {\n c.el.setAttribute('role', 'group');\n c.el.setAttribute('aria-roledescription', 'slide');\n c.el.setAttribute('aria-label', t('carouselSlide', { n: i + 1, total: n }));\n c.el.toggleAttribute('inert', i < this.index || i >= this.index + this.perView);\n });\n const paged = n > this.perView;\n const dots = this.config.dots !== false && paged;\n this.dotsEl.hidden = !dots;\n if (dots && this.dotsEl.children.length !== this.last + 1) {\n this.dotsEl.replaceChildren(...Array.from({ length: this.last + 1 }, (_, i) => {\n const d = h('button', 'op-carousel__dot', { type: 'button', 'aria-label': t('carouselGo', { n: i + 1 }) });\n this.listen(d, 'click', () => {\n this.interact();\n this.goTo(i);\n });\n return d;\n }));\n }\n [...this.dotsEl.children].forEach((d, i) => (i === this.index ? d.setAttribute('aria-current', 'true') : d.removeAttribute('aria-current')));\n const arrows = this.config.arrows !== false && paged;\n this.prevBtn.hidden = this.nextBtn.hidden = !arrows;\n const loop = !!this.config.loop;\n this.prevBtn.disabled = !loop && this.index === 0;\n this.nextBtn.disabled = !loop && this.index === this.last;\n this.el.classList.toggle('is-first', this.index === 0);\n this.el.classList.toggle('is-last', this.index === this.last);\n this.toggleBtn.hidden = !this.config.autoplay || !paged;\n const playing = this.isPlaying();\n this.el.classList.toggle('is-playing', playing);\n this.toggleBtn.replaceChildren(iconEl(playing ? 'pause' : 'play'));\n this.toggleBtn.setAttribute('aria-label', t(playing ? 'carouselPause' : 'carouselPlay'));\n this.track.setAttribute('aria-live', playing ? 'off' : 'polite');\n }\n\n getActive(): number {\n return this.index;\n }\n\n /** Goes to item `i` (kept between 0 and the last position). `before-change` can cancel. */\n goTo(i: number): void {\n i = clamp(i, 0, this.last);\n if (i === this.index || this.emit('before-change', i) === false) return;\n this.set(i);\n if (this.rendered) this.align(true);\n }\n setActive(i: number): void {\n this.goTo(i);\n }\n private step(d: 1 | -1) {\n const to = this.index + d;\n this.goTo(this.config.loop ? (to < 0 ? this.last : to > this.last ? 0 : to) : to);\n }\n next(): void {\n this.step(1);\n }\n prev(): void {\n this.step(-1);\n }\n\n // ---- autoplay -----------------------------------------------------------------------------\n\n isPlaying(): boolean {\n return !!this.config.autoplay && !this.stopped && !this.reduced();\n }\n private reduced(): boolean {\n return !!window.matchMedia?.('(prefers-reduced-motion: reduce)').matches;\n }\n play(): void {\n this.stopped = false;\n this.refresh();\n this.tick();\n }\n pause(): void {\n this.stopped = true;\n this.refresh();\n this.tick();\n }\n /** Any use of the controls ends autoplay for good (WCAG 2.2.2). */\n private interact() {\n if (!this.stopped) this.pause();\n }\n /** Runs the timer only while playing and nothing holds the pointer or the focus. */\n private tick() {\n clearInterval(this.playTimer);\n this.playTimer = undefined;\n if (!this.isPlaying() || this.el.matches(':hover, :focus-within') || this.items.length <= this.perView) return;\n this.playTimer = setInterval(() => this.goTo(this.index >= this.last ? 0 : this.index + 1), this.config.autoplay);\n }\n}\nregister('carousel', Carousel);\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["registerIcons", "addMessages", "Carousel", "Container", "btn", "cls", "icon", "key", "fn", "b", "h", "t", "iconEl", "c", "px", "clamp", "el", "keys", "ev", "stride", "i", "a", "smooth", "sign", "old", "n", "paged", "dots", "_", "d", "arrows", "loop", "playing", "to", "register"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as u}from"./chunk-ZEIE2OCQ.js";import{c as o}from"./chunk-DIOJGTUN.js";import{a as d}from"./chunk-TIPK3SCJ.js";import{f as h}from"./chunk-UDXO3KM3.js";import{b as e}from"./chunk-PZSHOSOS.js";import{b as c}from"./chunk-XFDNXSU5.js";import{d as p,e as s,f as a}from"./chunk-S4QD5NID.js";s("en",{statUp:"up {n}",statDown:"down {n}",statFlat:"unchanged"});s("pt-BR",{statUp:"subiu {n}",statDown:"caiu {n}",statFlat:"sem varia\xE7\xE3o"});var l=class extends h{baseCls="op-stat";labelEl;valueEl;deltaEl;captionEl;chart;build(){return this.labelEl=e("div","op-stat__label"),this.valueEl=e("div","op-stat__value"),this.deltaEl=e("span","op-stat__delta"),this.captionEl=e("span","op-stat__caption"),e("div",this.baseCls,{},this.labelEl,e("div","op-stat__row",{},this.valueEl,this.deltaEl),this.captionEl)}onRender(){let t=this.config;this.setLabel(t.label),this.setValue(t.value??null),this.setDelta(t.delta),this.setCaption(t.caption??""),this.setTrend(t.trend)}setLabel(t){this.config.label=t,this.rendered&&this.labelEl.replaceChildren(...this.config.icon?[o(this.config.icon)]:[],t)}setValue(t){this.config.value=t,this.rendered&&(this.valueEl.textContent=t==null?"\u2014":typeof t=="number"?c(this.config.format??"number",t):t)}setDelta(t){if(this.config.delta=t,!this.rendered)return;let i=(t??0)>0,r=(this.config.good??"up")==="up"?i:!i;if(this.deltaEl.hidden=t==null,this.deltaEl.className=`op-stat__delta ${t?r?"is-good":"is-bad":"is-flat"}`,t==null)return;let n=new Intl.NumberFormat(p()._lang,{style:"percent",maximumFractionDigits:1,signDisplay:"exceptZero"}).format(t);this.deltaEl.replaceChildren(o(t?i?"arrow-up":"arrow-down":"minus"),e("span","",{"aria-hidden":"true"},n),e("span","op-sr-only",{},t?a(i?"statUp":"statDown",{n:n.replace(/^[+-]/,"")}):a("statFlat")))}setCaption(t){this.config.caption=t,this.rendered&&(this.captionEl.textContent=t,this.captionEl.hidden=!t)}setTrend(t){if(this.config.trend=t,!this.rendered)return;if(!t?.length)return this.chart?.destroy(),void(this.chart=void 0);let i=t.map((r,n)=>({i:n,v:r}));if(this.chart)return this.chart.setData(i);this.chart=new u({kind:"sparkline",x:"i",series:["v"],data:i,cls:"op-stat__spark",ariaLabel:this.config.label}),this.el.append(this.chart.el),this.chart.notifyMount()}onDestroy(){this.chart?.destroy()}};d("stat",l);export{l as a};
|
|
2
|
+
//# sourceMappingURL=chunk-DLRGB5NY.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/components/charts/stat/stat.ts"],
|
|
4
|
+
"sourcesContent": ["import { Component, type ComponentConfig } from '../../../core/component';\nimport { register } from '../../../core/registry';\nimport { h } from '../../../core/dom';\nimport { t, getLocale, addMessages } from '../../../core/i18n';\nimport { format, type Formatter } from '../../../data/format';\nimport { iconEl } from '../../base/icon/icon';\nimport { Chart } from '../chart/chart';\n\naddMessages('en', { statUp: 'up {n}', statDown: 'down {n}', statFlat: 'unchanged' });\naddMessages('pt-BR', { statUp: 'subiu {n}', statDown: 'caiu {n}', statFlat: 'sem varia\u00E7\u00E3o' });\n\nexport interface StatConfig extends ComponentConfig {\n label: string;\n value?: number | string | null;\n /** Name of a registered format (`money`, `percent`...) or a function, for a numeric `value`. */\n format?: string | Formatter;\n /** The change since the last period, as a fraction (`0.125` shows `+12.5%`). */\n delta?: number;\n /** Which way is good news. `down` for costs, errors or waiting times. Default `up`. */\n good?: 'up' | 'down';\n /** Small text under the value (\"vs last week\"). */\n caption?: string;\n icon?: string;\n /** Numbers for a sparkline beside the value. */\n trend?: number[];\n}\n\n/** A KPI tile: a label, a big value, the change since last time and an optional sparkline. */\nexport class Stat extends Component<StatConfig> {\n protected override baseCls = 'op-stat';\n private labelEl!: HTMLElement;\n private valueEl!: HTMLElement;\n private deltaEl!: HTMLElement;\n private captionEl!: HTMLElement;\n private chart?: Chart;\n\n protected override build() {\n this.labelEl = h('div', 'op-stat__label');\n this.valueEl = h('div', 'op-stat__value');\n this.deltaEl = h('span', 'op-stat__delta');\n this.captionEl = h('span', 'op-stat__caption');\n return h('div', this.baseCls, {}, this.labelEl, h('div', 'op-stat__row', {}, this.valueEl, this.deltaEl), this.captionEl);\n }\n\n protected override onRender() {\n const c = this.config;\n this.setLabel(c.label);\n this.setValue(c.value ?? null);\n this.setDelta(c.delta);\n this.setCaption(c.caption ?? '');\n this.setTrend(c.trend);\n }\n\n setLabel(label: string) {\n this.config.label = label;\n if (!this.rendered) return;\n this.labelEl.replaceChildren(...(this.config.icon ? [iconEl(this.config.icon)] : []), label);\n }\n\n setValue(value: number | string | null) {\n this.config.value = value;\n if (this.rendered) this.valueEl.textContent = value == null ? '\u2014' : typeof value === 'number' ? format(this.config.format ?? 'number', value) : value;\n }\n\n setDelta(delta: number | undefined) {\n this.config.delta = delta;\n if (!this.rendered) return;\n const up = (delta ?? 0) > 0;\n const good = (this.config.good ?? 'up') === 'up' ? up : !up;\n this.deltaEl.hidden = delta == null;\n this.deltaEl.className = `op-stat__delta ${!delta ? 'is-flat' : good ? 'is-good' : 'is-bad'}`;\n if (delta == null) return;\n const text = new Intl.NumberFormat(getLocale()._lang, { style: 'percent', maximumFractionDigits: 1, signDisplay: 'exceptZero' }).format(delta);\n this.deltaEl.replaceChildren(iconEl(!delta ? 'minus' : up ? 'arrow-up' : 'arrow-down'), h('span', '', { 'aria-hidden': 'true' }, text), h('span', 'op-sr-only', {}, !delta ? t('statFlat') : t(up ? 'statUp' : 'statDown', { n: text.replace(/^[+-]/, '') })));\n }\n\n setCaption(caption: string) {\n this.config.caption = caption;\n if (this.rendered) {\n this.captionEl.textContent = caption;\n this.captionEl.hidden = !caption;\n }\n }\n\n setTrend(trend: number[] | undefined) {\n this.config.trend = trend;\n if (!this.rendered) return;\n if (!trend?.length) return void (this.chart?.destroy(), (this.chart = undefined));\n const data = trend.map((v, i) => ({ i, v }));\n if (this.chart) return this.chart.setData(data);\n this.chart = new Chart({ kind: 'sparkline', x: 'i', series: ['v'], data, cls: 'op-stat__spark', ariaLabel: this.config.label });\n this.el.append(this.chart.el);\n this.chart.notifyMount();\n }\n\n protected override onDestroy() {\n this.chart?.destroy();\n }\n}\nregister('stat', Stat);\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["addMessages", "Stat", "Component", "h", "c", "label", "iconEl", "value", "format", "delta", "up", "good", "text", "getLocale", "t", "caption", "trend", "data", "v", "i", "Chart", "register"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function l(t,p){let e=t.el.querySelector(".op-grid__footer");if(!e){e=Object.assign(document.createElement("div"),{className:"op-grid__footer"});let r=t.el.querySelector(".op-grid__pager");r?(r.before(e),e.append(r)):t.el.querySelector(".op-grid__table").after(e)}e.append(p);let o=e;return()=>{if(p.remove(),o.querySelector(".op-footer-group"))return;let r=o.querySelector(".op-grid__pager");r&&o.before(r),o.remove()}}export{l as a};
|
|
2
|
+
//# sourceMappingURL=chunk-DY3ZYMXD.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/components/data/grid/footer.ts"],
|
|
4
|
+
"sourcesContent": ["import type { Grid } from './grid';\n\n/**\n * The row under a grid where the pager and the plugins' icon buttons sit side by side. Each plugin adds its own group;\n * the last one out gives the pager back.\n */\nexport function addFooterGroup(grid: Grid, group: HTMLElement): () => void {\n let row = grid.el.querySelector<HTMLElement>('.op-grid__footer');\n if (!row) {\n row = Object.assign(document.createElement('div'), { className: 'op-grid__footer' });\n const pager = grid.el.querySelector<HTMLElement>('.op-grid__pager');\n if (pager) {\n pager.before(row);\n row.append(pager);\n } else grid.el.querySelector('.op-grid__table')!.after(row);\n }\n row.append(group);\n const mine = row;\n return () => {\n group.remove();\n if (mine.querySelector('.op-footer-group')) return;\n const pager = mine.querySelector<HTMLElement>('.op-grid__pager');\n if (pager) mine.before(pager);\n mine.remove();\n };\n}\n"],
|
|
5
|
+
"mappings": "AAMO,SAASA,EAAeC,EAAYC,EAAgC,CACzE,IAAIC,EAAMF,EAAK,GAAG,cAA2B,kBAAkB,EAC/D,GAAI,CAACE,EAAK,CACRA,EAAM,OAAO,OAAO,SAAS,cAAc,KAAK,EAAG,CAAE,UAAW,iBAAkB,CAAC,EACnF,IAAMC,EAAQH,EAAK,GAAG,cAA2B,iBAAiB,EAC9DG,GACFA,EAAM,OAAOD,CAAG,EAChBA,EAAI,OAAOC,CAAK,GACXH,EAAK,GAAG,cAAc,iBAAiB,EAAG,MAAME,CAAG,CAC5D,CACAA,EAAI,OAAOD,CAAK,EAChB,IAAMG,EAAOF,EACb,MAAO,IAAM,CAEX,GADAD,EAAM,OAAO,EACTG,EAAK,cAAc,kBAAkB,EAAG,OAC5C,IAAMD,EAAQC,EAAK,cAA2B,iBAAiB,EAC3DD,GAAOC,EAAK,OAAOD,CAAK,EAC5BC,EAAK,OAAO,CACd,CACF",
|
|
6
|
+
"names": ["addFooterGroup", "grid", "group", "row", "pager", "mine"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as d}from"./chunk-LHWY6G6Q.js";import{a as c}from"./chunk-TIPK3SCJ.js";import{e as l,f as s}from"./chunk-S4QD5NID.js";l("en",{time:"Enter a time like 09:30"});l("pt-BR",{time:"Informe uma hora, como 09:30"});var p=1440,u=n=>String(n).padStart(2,"0"),a=n=>Number(n.slice(0,2))*60+Number(n.slice(3)),f=n=>`${u(Math.floor(n/60))}:${u(n%60)}`,m=class extends d{baseCls="op-field op-textfield op-timefield";garbage=!1;emptyValue(){return null}isEmpty(e){return e==null}parse(e){this.garbage=!1;let t=e.trim();if(!t)return null;let r=/^(\d{1,2})(?::?(\d{2}))?$/.exec(t)??/^(\d)(\d{2})$/.exec(t),i=r&&Number(r[1]),o=r&&Number(r[2]??0);return!r||i>23||o>59?(this.garbage=!0,null):`${u(i)}:${u(o)}`}createControl(){let e=super.createControl();return this.input.setAttribute("inputmode","numeric"),this.listen(this.input,"blur",()=>{this.garbage||(this.input.value=this.display(this.value))}),e}onInput(){super.onInput(),this.garbage?this.setError(s("time")):this.error&&this.validate()}applyValue(e){super.applyValue(e),this.garbage=!1}check(){if(this.garbage)return s("time");let e=super.check(),t=this.value,{min:r,max:i}=this.config;return e||t==null?e:r&&i&&(t<r||t>i)?s("range",{min:r,max:i}):r&&t<r?s("min",{n:r}):i&&t>i?s("max",{n:i}):""}onKey(e){let t=e.key==="PageUp"||e.key==="PageDown";e.key==="ArrowUp"||e.key==="ArrowDown"||t?(e.preventDefault(),this.bump((e.key.endsWith("Up")?1:-1)*(t?60:this.config.step??1))):super.onKey(e)}bump(e){let{min:t,max:r}=this.config,i=(this.value?a(this.value):t?a(t):0)+e,o=t?a(t):0,g=r?a(r):p-1;this.setValue(f(t||r?Math.min(g,Math.max(o,i)):(i+p)%p))}setMin(e){this.config.min=e}setMax(e){this.config.max=e}};c("timefield",m);export{m as a};
|
|
2
|
+
//# sourceMappingURL=chunk-EO777UIN.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/components/fields/timefield/timefield.ts"],
|
|
4
|
+
"sourcesContent": ["import { TextField, type TextFieldConfig } from '../textfield/textfield';\nimport { register } from '../../../core/registry';\nimport { t, addMessages } from '../../../core/i18n';\n\naddMessages('en', { time: 'Enter a time like 09:30' });\naddMessages('pt-BR', { time: 'Informe uma hora, como 09:30' });\n\nexport interface TimeFieldConfig extends TextFieldConfig<string | null> {\n /** Earliest and latest time, `'HH:mm'`. */\n min?: string;\n max?: string;\n /** Minutes moved by \u2191/\u2193 (PageUp/PageDown move an hour). Default 1. */\n step?: number;\n}\n\nconst DAY = 1440;\nconst pad = (n: number) => String(n).padStart(2, '0');\nconst toMin = (v: string) => Number(v.slice(0, 2)) * 60 + Number(v.slice(3));\nconst fromMin = (n: number) => `${pad(Math.floor(n / 60))}:${pad(n % 60)}`;\n\n/** A time of day. The value is `'HH:mm'` (24 h) or `null`. Type `930`, `9:30` or `09:30`; \u2191/\u2193 step it. */\nexport class TimeField extends TextField<string | null, TimeFieldConfig> {\n protected override baseCls = 'op-field op-textfield op-timefield';\n private garbage = false;\n\n protected override emptyValue() {\n return null;\n }\n protected override isEmpty(v: string | null) {\n return v == null;\n }\n\n protected override parse(text: string): string | null {\n this.garbage = false;\n const s = text.trim();\n if (!s) return null;\n const m = /^(\\d{1,2})(?::?(\\d{2}))?$/.exec(s) ?? /^(\\d)(\\d{2})$/.exec(s);\n const h = m && Number(m[1]);\n const min = m && Number(m[2] ?? 0);\n if (!m || h! > 23 || min! > 59) return ((this.garbage = true), null);\n return `${pad(h!)}:${pad(min!)}`;\n }\n\n protected override createControl() {\n const wrap = super.createControl();\n this.input.setAttribute('inputmode', 'numeric');\n this.listen(this.input, 'blur', () => {\n if (!this.garbage) this.input.value = this.display(this.value);\n });\n return wrap;\n }\n\n protected override onInput() {\n super.onInput();\n if (this.garbage) this.setError(t('time'));\n else if (this.error) this.validate();\n }\n protected override applyValue(v: string | null) {\n super.applyValue(v);\n this.garbage = false;\n }\n\n protected override check(): string {\n if (this.garbage) return t('time');\n const base = super.check();\n const v = this.value;\n const { min, max } = this.config;\n if (base || v == null) return base;\n if (min && max && (v < min || v > max)) return t('range', { min, max });\n if (min && v < min) return t('min', { n: min });\n if (max && v > max) return t('max', { n: max });\n return '';\n }\n\n protected override onKey(e: KeyboardEvent) {\n const big = e.key === 'PageUp' || e.key === 'PageDown';\n if (e.key === 'ArrowUp' || e.key === 'ArrowDown' || big) {\n e.preventDefault();\n this.bump((e.key.endsWith('Up') ? 1 : -1) * (big ? 60 : this.config.step ?? 1));\n } else super.onKey(e);\n }\n\n private bump(minutes: number) {\n const { min, max } = this.config;\n const n = (this.value ? toMin(this.value) : min ? toMin(min) : 0) + minutes;\n const lo = min ? toMin(min) : 0;\n const hi = max ? toMin(max) : DAY - 1;\n // with no limits the clock wraps around midnight\n this.setValue(fromMin(min || max ? Math.min(hi, Math.max(lo, n)) : (n + DAY) % DAY));\n }\n\n setMin(min: string | undefined) {\n this.config.min = min;\n }\n setMax(max: string | undefined) {\n this.config.max = max;\n }\n}\nregister('timefield', TimeField);\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["addMessages", "DAY", "pad", "toMin", "v", "fromMin", "TimeField", "TextField", "text", "s", "m", "h", "min", "wrap", "t", "base", "max", "big", "minutes", "n", "lo", "hi", "register"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as m}from"./chunk-TIPK3SCJ.js";import{f as a}from"./chunk-UDXO3KM3.js";import{b as o}from"./chunk-PZSHOSOS.js";import{e as n,f}from"./chunk-S4QD5NID.js";n("en",{feOne:"Fix 1 problem before saving",feMany:"Fix {n} problems before saving"});n("pt-BR",{feOne:"Corrija 1 problema antes de salvar",feMany:"Corrija {n} problemas antes de salvar"});var l=class extends a{baseCls="op-formerrors";titleEl;listEl;form;active=!1;build(){return this.titleEl=o("div","op-formerrors__title"),this.listEl=o("ul","op-formerrors__list"),o("div","op-formerrors",{role:"alert",tabindex:-1},this.titleEl,this.listEl)}onRender(){this.el.hidden=!0;let e=this.parent;for(;e&&!("focusField"in e&&"getFields"in e);)e=e.parent;let t=this.form=e;if(t){t.on("invalid",()=>{this.active=!0,this.refresh(),this.config.focus&&this.el.focus()});for(let r of t.getFields())for(let i of["invalid","valid"])r.on(i,()=>this.active&&this.refresh());this.listen(this.listEl,"click",r=>{let i=Number(r.target.closest("[data-i]")?.dataset.i),s=this.getErrors()[i];s&&(t.focusField(s),this.emit("go",s))})}}getErrors(){return this.form?.getFields().filter(e=>e.getError())??[]}refresh(){let e=this.getErrors(),t=e.length,r=this.config.title;this.titleEl.textContent=typeof r=="function"?r(t):r??f(t===1?"feOne":"feMany",{n:t}),this.listEl.replaceChildren(...e.map((i,s)=>o("li","",{},o("button","op-formerrors__link",{type:"button","data-i":s},`${i.config.label??i.name??""}: ${i.getError()}`)))),this.el.hidden=!t}};m("formerrors",l);export{l as a};
|
|
2
|
+
//# sourceMappingURL=chunk-ESCLDVFS.js.map
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/components/form/formerrors/formerrors.ts"],
|
|
4
4
|
"sourcesContent": ["import { Component, type ComponentConfig } from '../../../core/component';\nimport { register } from '../../../core/registry';\nimport { h } from '../../../core/dom';\nimport { addMessages, t } from '../../../core/i18n';\nimport { Field } from '../../../core/field';\nimport type { Form } from '../form/form';\n\naddMessages('en', { feOne: 'Fix 1 problem before saving', feMany: 'Fix {n} problems before saving' });\naddMessages('pt-BR', { feOne: 'Corrija 1 problema antes de salvar', feMany: 'Corrija {n} problemas antes de salvar' });\n\nexport interface FormErrorsConfig extends ComponentConfig {\n /** The heading: a function of the number of problems, or a fixed text. */\n title?: string | ((n: number) => string);\n /** Take the focus after a failed submit (instead of the first invalid field). */\n focus?: boolean;\n}\n\n/** An error summary: after a failed validation, every problem as a button that takes you to its field. */\nexport class FormErrors extends Component<FormErrorsConfig> {\n protected override baseCls = 'op-formerrors';\n private titleEl!: HTMLElement;\n private listEl!: HTMLElement;\n private form?: Form;\n /** Shown only once the form was validated with errors (not while the user is still filling it in). */\n private active = false;\n\n protected override build() {\n this.titleEl = h('div', 'op-formerrors__title');\n this.listEl = h('ul', 'op-formerrors__list');\n return h('div', 'op-formerrors', { role: 'alert', tabindex: -1 }, this.titleEl, this.listEl);\n }\n\n protected override onRender() {\n this.el.hidden = true;\n let p = this.parent as Component | undefined;\n while (p && !('focusField' in p && 'getFields' in p)) p = p.parent as Component | undefined; // the Form, by its methods (no import)\n const form = (this.form = p as Form | undefined);\n if (!form) return;\n form.on('invalid', () => {\n this.active = true;\n this.refresh();\n if (this.config.focus) this.el.focus();\n });\n for (const f of form.getFields()) for (const ev of ['invalid', 'valid']) f.on(ev, () => this.active && this.refresh());\n this.listen(this.listEl, 'click', (e: Event) => {\n const i = Number((e.target as HTMLElement).closest<HTMLElement>('[data-i]')?.dataset.i);\n const field = this.getErrors()[i];\n if (!field) return;\n form.focusField(field);\n this.emit('go', field);\n });\n }\n\n /** The form fields that have an error, in order. */\n getErrors(): Field<any>[] {\n return this.form?.getFields().filter((f) => f.getError()) ?? [];\n }\n\n /** Redraws the list from the current errors (hides when there are none). */\n refresh(): void {\n const errs = this.getErrors();\n const n = errs.length;\n const title = this.config.title;\n this.titleEl.textContent = typeof title === 'function' ? title(n) : (title ?? t(n === 1 ? 'feOne' : 'feMany', { n }));\n this.listEl.replaceChildren(...errs.map((f, i) => h('li', '', {}, h('button', 'op-formerrors__link', { type: 'button', 'data-i': i }, `${f.config.label ?? f.name ?? ''}: ${f.getError()}`))));\n this.el.hidden = !n;\n }\n}\nregister('formerrors', FormErrors);\n"],
|
|
5
|
-
"mappings": "
|
|
5
|
+
"mappings": "kKAOAA,EAAY,KAAM,CAAE,MAAO,8BAA+B,OAAQ,gCAAiC,CAAC,EACpGA,EAAY,QAAS,CAAE,MAAO,qCAAsC,OAAQ,uCAAwC,CAAC,EAU9G,IAAMC,EAAN,cAAyBC,CAA4B,CACvC,QAAU,gBACrB,QACA,OACA,KAEA,OAAS,GAEE,OAAQ,CACzB,YAAK,QAAUC,EAAE,MAAO,sBAAsB,EAC9C,KAAK,OAASA,EAAE,KAAM,qBAAqB,EACpCA,EAAE,MAAO,gBAAiB,CAAE,KAAM,QAAS,SAAU,EAAG,EAAG,KAAK,QAAS,KAAK,MAAM,CAC7F,CAEmB,UAAW,CAC5B,KAAK,GAAG,OAAS,GACjB,IAAIC,EAAI,KAAK,OACb,KAAOA,GAAK,EAAE,eAAgBA,GAAK,cAAeA,IAAIA,EAAIA,EAAE,OAC5D,IAAMC,EAAQ,KAAK,KAAOD,EAC1B,GAAKC,EACL,CAAAA,EAAK,GAAG,UAAW,IAAM,CACvB,KAAK,OAAS,GACd,KAAK,QAAQ,EACT,KAAK,OAAO,OAAO,KAAK,GAAG,MAAM,CACvC,CAAC,EACD,QAAWC,KAAKD,EAAK,UAAU,EAAG,QAAWE,IAAM,CAAC,UAAW,OAAO,EAAGD,EAAE,GAAGC,EAAI,IAAM,KAAK,QAAU,KAAK,QAAQ,CAAC,EACrH,KAAK,OAAO,KAAK,OAAQ,QAAUC,GAAa,CAC9C,IAAM,EAAI,OAAQA,EAAE,OAAuB,QAAqB,UAAU,GAAG,QAAQ,CAAC,EAChFC,EAAQ,KAAK,UAAU,EAAE,CAAC,EAC3BA,IACLJ,EAAK,WAAWI,CAAK,EACrB,KAAK,KAAK,KAAMA,CAAK,EACvB,CAAC,EACH,CAGA,WAA0B,CACxB,OAAO,KAAK,MAAM,UAAU,EAAE,OAAQH,GAAMA,EAAE,SAAS,CAAC,GAAK,CAAC,CAChE,CAGA,SAAgB,CACd,IAAMI,EAAO,KAAK,UAAU,EACtBC,EAAID,EAAK,OACTE,EAAQ,KAAK,OAAO,MAC1B,KAAK,QAAQ,YAAc,OAAOA,GAAU,WAAaA,EAAMD,CAAC,EAAKC,GAASC,EAAEF,IAAM,EAAI,QAAU,SAAU,CAAE,EAAAA,CAAE,CAAC,EACnH,KAAK,OAAO,gBAAgB,GAAGD,EAAK,IAAI,CAACJ,EAAGQ,IAAMX,EAAE,KAAM,GAAI,CAAC,EAAGA,EAAE,SAAU,sBAAuB,CAAE,KAAM,SAAU,SAAUW,CAAE,EAAG,GAAGR,EAAE,OAAO,OAASA,EAAE,MAAQ,EAAE,KAAKA,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,EAC7L,KAAK,GAAG,OAAS,CAACK,CACpB,CACF,EACAI,EAAS,aAAcd,CAAU",
|
|
6
6
|
"names": ["addMessages", "FormErrors", "Component", "h", "p", "form", "f", "ev", "e", "field", "errs", "n", "title", "t", "i", "register"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{c as l}from"./chunk-DIOJGTUN.js";import{a as n}from"./chunk-TIPK3SCJ.js";import{f as o}from"./chunk-UDXO3KM3.js";import{b as i}from"./chunk-PZSHOSOS.js";import{g as r}from"./chunk-4AA4FQEM.js";var s=class extends o{baseCls="op-button";tag="button";textEl;busyTextEl;iconHost;build(){let t=this.config,e=i("button","op-button",{type:t.htmlType??"button"});return this.iconHost=i("span","op-button__icon"),this.textEl=i("span","op-button__text"),this.busyTextEl=i("span","op-button__busy-text"),e.append(i("span","op-button__face",{},this.iconHost,this.textEl),i("span","op-button__busy",{},i("span","op-spinner op-button__spinner",{"aria-hidden":"true"}),this.busyTextEl)),e}onRender(){let t=this.config;this.setText(t.text??""),this.setIcon(t.icon??""),this.setVariant(t.variant??"default"),this.setPressed(!!t.pressed),!t.text&&!t.ariaLabel&&!t.tooltip&&console.warn("Optikos: icon-only Button needs ariaLabel"),this.listen(this.el,"click",e=>{if(t.disabled||t.loading||(t.toggle&&(this.setPressed(!t.pressed),this.emit("toggle",t.pressed)),this.emit("click",e)===!1))return e.preventDefault();t.handler?.(this,e)})}onDisabled(t){this.el.disabled=t}setText(t){this.config.text=t,this.rendered&&(this.textEl.textContent=t,this.textEl.hidden=!t,this.busyTextEl.textContent=this.config.loadingText??t)}setIcon(t){this.config.icon=t,this.rendered&&(this.iconHost.replaceChildren(...t?[l(t)]:[]),this.iconHost.hidden=!t,this.el.classList.toggle("op-button--icon-right",this.config.iconPos==="right"))}setVariant(t){if(this.config.variant=t,!!this.rendered)for(let e of["default","primary","danger","ghost"])this.el.classList.toggle(`op-button--${e}`,e===t)}setPressed(t){this.config.pressed=t,this.rendered&&(this.el.classList.toggle("is-pressed",t),this.config.toggle&&this.el.setAttribute("aria-pressed",String(t)))}setLoading(t){if(this.config.loading=t,typeof t=="string"&&this.setLoadingText(t),!!this.rendered){this.el.classList.toggle("is-loading",!!t);for(let e of["aria-busy","aria-disabled"])t?this.el.setAttribute(e,"true"):this.el.removeAttribute(e)}}setLoadingText(t){this.config.loadingText=t,this.rendered&&(this.busyTextEl.textContent=t)}pulse(){r(this.el)}click(){this.el.click()}};n("button",s);export{s as a};
|
|
2
|
+
//# sourceMappingURL=chunk-ESRS5ZQV.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{c as n}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{c as n}from"./chunk-BQEFLPDA.js";import{a as d}from"./chunk-QVBDBGS4.js";import{a as s}from"./chunk-TIPK3SCJ.js";import{b as r,c as o}from"./chunk-PZSHOSOS.js";var l=class extends n{baseCls="op-field op-fieldgroup";labelEl;bodyEl;helpEl;errorEl;error="";constructor(e={}){super(e);for(let t of this.items)t.config.width!=null&&t.config.flex==null&&(t.config.flex="none");for(let t of this.getFields()){t.config.labelPos="top";for(let i of["invalid","valid"])t.on(i,()=>this.paintError())}}getBody(){return this.bodyEl}getFields(){return this.query(e=>e instanceof d)}getError(){return this.error}build(){let e=super.build();return this.labelEl=r("div","op-field__label",{id:o("op-fg")}),this.bodyEl=r("div","op-fieldgroup__body"),this.helpEl=r("div","op-field__help",{id:o("op-fg-help")}),this.errorEl=r("div","op-field__error",{id:o("op-fg-err"),role:"alert"}),e.append(this.labelEl,r("div","op-field__control",{},this.bodyEl),this.helpEl,this.errorEl),e.setAttribute("role","group"),e.setAttribute("aria-labelledby",this.labelEl.id),e}onRender(){let e=this.config;e.layout??={type:"hbox",stackBelow:e.stackBelow},super.onRender();let t=e.labelPos;for(let i=this.parent;!t&&i;i=i.parent)t=i.config.labelPos;this.el.classList.toggle("op-field--label-left",t==="left"),this.setLabel(e.label??""),this.setHelp(e.help??""),this.el.classList.toggle("is-required",!!e.required||this.getFields().some(i=>i.config.required)),this.listen(this.labelEl,"click",()=>this.getFields()[0]?.focus()),this.error="",this.paintError()}paintError(){let e=this.getFields().map(t=>t.getError()).find(Boolean)??"";e!==this.error&&(this.error=e,this.rendered&&(this.errorEl.textContent=e,this.el.classList.toggle("is-invalid",!!e),this.describe(),this.emit(e?"invalid":"valid",e)))}describe(){let e=[this.error&&this.errorEl.id,this.config.help&&this.helpEl.id].filter(Boolean);e.length?this.el.setAttribute("aria-describedby",e.join(" ")):this.el.removeAttribute("aria-describedby")}setLabel(e){this.config.label=e,this.rendered&&(this.labelEl.textContent=e,this.labelEl.hidden=!e)}setHelp(e){this.config.help=e,this.rendered&&(this.helpEl.textContent=e,this.helpEl.hidden=!e,this.describe())}};s("fieldgroup",l);export{l as a};
|
|
2
|
+
//# sourceMappingURL=chunk-FNZI6MFG.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/components/form/fieldgroup/fieldgroup.ts"],
|
|
4
|
-
"sourcesContent": ["import { Container, type ContainerConfig } from '../../../core/container';\nimport { Field } from '../../../core/field';\nimport { register } from '../../../core/registry';\nimport { h, uid } from '../../../core/dom';\nimport type { Component } from '../../../core/component';\n\nexport interface FieldGroupConfig extends ContainerConfig {\n label?: string;\n help?: string;\n /** The `*` marker (also shown when any field inside is required). */\n required?: boolean;\n /** Default: the form's `labelPos`. */\n labelPos?: 'top' | 'left';\n /** Under this width (px) the row becomes a column. */\n stackBelow?: number;\n}\n\n/** Several inputs read as one field: one label, one help line and one error line over a row of fields. */\nexport class FieldGroup extends Container<FieldGroupConfig> {\n protected override baseCls = 'op-field op-fieldgroup';\n private labelEl!: HTMLElement;\n private bodyEl!: HTMLElement;\n private helpEl!: HTMLElement;\n private errorEl!: HTMLElement;\n private error = '';\n\n constructor(config: FieldGroupConfig = {}) {\n super(config);\n // the fields keep their labels for screen readers only: their own label position must not shape the row\n // a field that sets a width keeps it; the others share what is left\n for (const c of this.items) if (c.config.width != null && c.config.flex == null) c.config.flex = 'none'
|
|
4
|
+
"sourcesContent": ["import { Container, type ContainerConfig } from '../../../core/container';\nimport { Field } from '../../../core/field';\nimport { register } from '../../../core/registry';\nimport { h, uid } from '../../../core/dom';\nimport type { Component } from '../../../core/component';\n\nexport interface FieldGroupConfig extends ContainerConfig {\n label?: string;\n help?: string;\n /** The `*` marker (also shown when any field inside is required). */\n required?: boolean;\n /** Default: the form's `labelPos`. */\n labelPos?: 'top' | 'left';\n /** Under this width (px) the row becomes a column. */\n stackBelow?: number;\n}\n\n/** Several inputs read as one field: one label, one help line and one error line over a row of fields. */\nexport class FieldGroup extends Container<FieldGroupConfig> {\n protected override baseCls = 'op-field op-fieldgroup';\n private labelEl!: HTMLElement;\n private bodyEl!: HTMLElement;\n private helpEl!: HTMLElement;\n private errorEl!: HTMLElement;\n private error = '';\n\n constructor(config: FieldGroupConfig = {}) {\n super(config);\n // the fields keep their labels for screen readers only: their own label position must not shape the row\n // a field that sets a width keeps it; the others share what is left\n for (const c of this.items) if (c.config.width != null && c.config.flex == null) c.config.flex = 'none';\n for (const f of this.getFields()) {\n f.config.labelPos = 'top';\n for (const ev of ['invalid', 'valid']) f.on(ev, () => this.paintError()); // also before the group is rendered\n }\n }\n\n override getBody() {\n return this.bodyEl;\n }\n\n /** The fields inside (also inside nested containers). */\n getFields(): Field<any>[] {\n return this.query((c) => c instanceof Field) as Field<any>[];\n }\n\n getError(): string {\n return this.error;\n }\n\n protected override build() {\n const el = super.build();\n this.labelEl = h('div', 'op-field__label', { id: uid('op-fg') });\n this.bodyEl = h('div', 'op-fieldgroup__body');\n this.helpEl = h('div', 'op-field__help', { id: uid('op-fg-help') });\n this.errorEl = h('div', 'op-field__error', { id: uid('op-fg-err'), role: 'alert' });\n el.append(this.labelEl, h('div', 'op-field__control', {}, this.bodyEl), this.helpEl, this.errorEl);\n el.setAttribute('role', 'group');\n el.setAttribute('aria-labelledby', this.labelEl.id);\n return el;\n }\n\n protected override onRender() {\n const c = this.config;\n c.layout ??= { type: 'hbox', stackBelow: c.stackBelow };\n super.onRender();\n let pos = c.labelPos;\n for (let p: Component | undefined = this.parent as Component | undefined; !pos && p; p = p.parent as Component | undefined) pos = (p.config as FieldGroupConfig).labelPos;\n this.el.classList.toggle('op-field--label-left', pos === 'left');\n this.setLabel(c.label ?? '');\n this.setHelp(c.help ?? '');\n this.el.classList.toggle('is-required', !!c.required || this.getFields().some((f) => f.config.required));\n this.listen(this.labelEl, 'click', () => this.getFields()[0]?.focus());\n this.error = '';\n this.paintError();\n }\n\n /** The group shows the first error of its fields, in one line. */\n private paintError() {\n const msg = this.getFields().map((f) => f.getError()).find(Boolean) ?? '';\n if (msg === this.error) return;\n this.error = msg;\n if (!this.rendered) return;\n this.errorEl.textContent = msg;\n this.el.classList.toggle('is-invalid', !!msg);\n this.describe();\n this.emit(msg ? 'invalid' : 'valid', msg);\n }\n\n private describe() {\n const ids = [this.error && this.errorEl.id, this.config.help && this.helpEl.id].filter(Boolean);\n if (ids.length) this.el.setAttribute('aria-describedby', ids.join(' '));\n else this.el.removeAttribute('aria-describedby');\n }\n\n setLabel(label: string) {\n this.config.label = label;\n if (!this.rendered) return;\n this.labelEl.textContent = label;\n this.labelEl.hidden = !label;\n }\n\n setHelp(help: string) {\n this.config.help = help;\n if (!this.rendered) return;\n this.helpEl.textContent = help;\n this.helpEl.hidden = !help;\n this.describe();\n }\n}\nregister('fieldgroup', FieldGroup);\n"],
|
|
5
5
|
"mappings": "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",
|
|
6
6
|
"names": ["FieldGroup", "Container", "config", "c", "f", "ev", "Field", "el", "h", "uid", "pos", "p", "msg", "ids", "label", "help", "register"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as C}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{a as C}from"./chunk-QVBDBGS4.js";import{a as E}from"./chunk-TIPK3SCJ.js";import{b as l}from"./chunk-PZSHOSOS.js";import{c as S}from"./chunk-6NCXO5ZP.js";import{c as m}from"./chunk-2UPUC4RK.js";var _=.35,w=y=>(String(y).split(".")[1]??"").length,x=class extends C{baseCls="op-field op-dial";face;tape;needle;readout;cache;pos=0;angle=0;shown="";stopGlide;constructor(t={}){super(t),this.value=this.original=this.normalize(this.value)}get isCircle(){return this.config.shape==="circle"}get items(){return this.cache??=this.buildItems()}fmt(t){return this.config.format?this.config.format(t):String(t)}buildItems(){let t=this.config,e;if(t.options)e=t.options.map(a=>typeof a=="object"?a:{value:a});else{let a=t.min??0,h=t.step||1,p=Math.max(1,Math.floor(((t.max??100)-a)/h+1e-9)+1),c=Math.max(w(h),w(a));e=Array.from({length:p},(D,f)=>({value:Number((a+f*h).toFixed(c))}))}let s=t.snap??(t.options?1:10),i=(a,h)=>s===!1?!1:Array.isArray(s)?s.includes(a):t.options?h%s===0:Math.abs(a/s-Math.round(a/s))<1e-9;return e.map((a,h)=>({value:a.value,label:a.label??this.fmt(a.value),major:i(a.value,h)}))}emptyValue(){let t=this.config.options?.[0];return t===void 0?this.config.min??0:typeof t=="object"?t.value:t}isEmpty(){return!1}indexOf(t){let e=this.items;if(this.config.options)return Math.max(0,e.findIndex(i=>i.value===t));let s=Math.round((t-(this.config.min??0))/(this.config.step||1));return Math.max(0,Math.min(e.length-1,Number.isFinite(s)?s:0))}normalize(t){return this.items[this.indexOf(t)].value}get index(){return this.indexOf(this.value)}createControl(){return this.readout=l("div","op-dial__readout",{"aria-hidden":"true"}),this.tape=l("div","op-dial__tape"),this.needle=l("div","op-dial__needle"),this.face=l("div","op-dial__face",{role:"slider",tabindex:0,"aria-orientation":"horizontal"},l("div","op-dial__window",{},this.tape),this.needle),this.listen(this.face,"pointerdown",t=>this.onDown(t)),this.listen(this.face,"keydown",t=>this.onKey(t)),this.paintTicks(),this.inputEl=this.face,l("div","op-dial__box",{},this.readout,this.face)}onRender(){super.onRender();let t=this.el.querySelector(".op-field__label");t.id=`${this.id}-label`,this.config.ariaLabel||this.face.setAttribute("aria-labelledby",t.id)}paintTicks(){let t=this.items,e=this.config.labels??"snap";this.rendered&&(this.el.classList.toggle("op-dial--circle",this.isCircle),this.el.classList.toggle("op-dial--list",!!this.config.options)),this.tape.replaceChildren(...t.map((s,i)=>{let a=l("span",`op-dial__tick${s.major?" is-major":""}`,{"data-i":i});return a.style.setProperty("--i",String(i)),a.style.setProperty("--a",`${i*360/t.length}deg`),(e==="all"||e==="snap"&&s.major)&&a.append(l("span","op-dial__tick-label",{},s.label)),a}))}build(){let t=super.build();return t.classList.toggle("op-dial--circle",this.isCircle),t.classList.toggle("op-dial--list",!!this.config.options),t}spacing(){let[t,e]=this.tape.children;return e&&t&&e.offsetLeft-t.offsetLeft||12}place(){this.needle.style.transform=this.isCircle?`translateX(-50%) rotate(${this.angle}deg)`:"",this.tape.style.setProperty("--pos",String(this.isCircle?0:this.pos))}aim(t){let e=t*360/this.items.length;this.angle+=((e-this.angle)%360+540)%360-180}applyValue(t){let e=this.indexOf(t);this.pos=e,this.aim(e),this.place(),this.paintState(e)}paintState(t){let e=this.items,s=e[t],i=this.face,a=!!this.config.options;i.setAttribute("aria-valuemin",String(a?0:e[0].value)),i.setAttribute("aria-valuemax",String(a?e.length-1:e[e.length-1].value)),i.setAttribute("aria-valuenow",String(a?t:s.value)),i.setAttribute("aria-valuetext",s.label),this.tape.querySelector(".is-current")?.classList.remove("is-current"),this.tape.children[t]?.classList.add("is-current"),this.paintReadout(s.label)}paintReadout(t){let e=this.shown;if(t===e)return;this.shown=t;let s=i=>i.replace(/\d/g,"0");if(e&&s(e)===s(t)){[...t].forEach((i,a)=>/\d/.test(i)&&this.readout.children[a].firstElementChild.setAttribute("style",`--d:${i}`));return}if(this.readout.replaceChildren(...[...t].map(i=>/\d/.test(i)?l("span","op-dial__digit",{},l("span","op-dial__reel",{style:`--d:${i}`},..."0123456789".split("").map(a=>l("span","",{},a)))):l("span","",{},i))),e&&m.isOn()&&typeof this.readout.animate=="function"){let i=this.items.findIndex(a=>a.label===t)>=this.items.findIndex(a=>a.label===e);this.readout.animate([{translate:`0 ${i?35:-35}%`,opacity:0},{translate:"0 0",opacity:1}],{duration:m.ms("swap"),easing:m.easing("enter")})}}choose(t){let e=this.items;t=Math.max(0,Math.min(e.length-1,t)),this.pos=t,this.aim(t),this.place(),this.paintState(t),this.commit(e[t].value)}get locked(){return!!(this.config.disabled||this.config.readonly)}onKey(t){if(this.locked)return;let e=this.index,s=this.items.length,i={ArrowRight:e+1,ArrowUp:e+1,ArrowLeft:e-1,ArrowDown:e-1,PageUp:this.snapFrom(e,1),PageDown:this.snapFrom(e,-1),Home:0,End:s-1};t.key in i&&(t.preventDefault(),this.choose(i[t.key]),this.flushSettled(),this.emit("slide-end",this.value))}snapFrom(t,e){let s=this.items;for(let i=t+e;i>=0&&i<s.length;i+=e)if(s[i].major)return i;return e>0?s.length-1:0}angleAt(t){let e=this.face.getBoundingClientRect();return(Math.atan2(t.clientX-(e.left+e.width/2),e.top+e.height/2-t.clientY)*180/Math.PI+360)%360}onDown(t){if(this.locked||t.button)return;t.preventDefault(),this.stopGlide?.();let e=this.face;e.focus(),e.setPointerCapture?.(t.pointerId);let s=this.items.length,i=this.spacing(),a=t.clientX,h=this.pos,p=!1,c=[{x:t.clientX,t:t.timeStamp}];this.el.classList.add("is-dragging"),this.emit("slide-start");let D=n=>{if(this.isCircle){let d=this.angleAt(n);return this.angle+=((d-this.angle)%360+540)%360-180,this.place(),Math.round(d/360*s)%s}let r=h-(n.clientX-a)/i,o=r<0?r:r>s-1?r-(s-1):0;return this.pos=o?r-o+Math.sign(o)*S(Math.abs(o)*i,i*2)/i:r,this.place(),Math.round(Math.max(0,Math.min(s-1,r)))},f=n=>{(Math.abs(n.clientX-a)>3||this.isCircle)&&(p=!0),c=[...c.filter(o=>n.timeStamp-o.t<100),{x:n.clientX,t:n.timeStamp}];let r=D(n);r!==this.index&&(this.paintState(r),this.commit(this.items[r].value))},L=()=>{e.removeEventListener("pointermove",f),e.removeEventListener("pointerup",g),e.removeEventListener("pointercancel",g)},g=n=>{if(L(),this.el.classList.remove("is-dragging"),n.type==="pointercancel")return this.rest(this.index);if(this.isCircle)return this.rest(p?this.index:Math.round(this.angleAt(n)/360*s)%s);if(!p){let v=e.getBoundingClientRect();return this.rest(Math.round(this.pos+(n.clientX-(v.left+v.width/2))/i))}let r=c[0],o=(n.clientX-r.x)/Math.max(1,n.timeStamp-r.t);if(Math.abs(o)<_)return this.rest(Math.round(Math.max(0,Math.min(s-1,this.pos))));let d=o<0?1:-1,M=this.pos+d*Math.abs(o)*260/i,u=-1;this.items.forEach((v,b)=>v.major&&(d>0?b>this.pos:b<this.pos)&&(u<0||Math.abs(b-M)<Math.abs(u-M))&&(u=b)),this.rest(u>=0?u:Math.round(Math.max(0,Math.min(s-1,M))),!0)};e.addEventListener("pointermove",f),e.addEventListener("pointerup",g),e.addEventListener("pointercancel",g),this.own(L)}rest(t,e=!1){let s=this.pos;this.choose(t);let i=()=>{this.stopGlide=void 0,this.el.classList.remove("is-gliding"),this.tape.style.transitionDuration="",this.flushSettled(),this.emit("slide-end",this.value)};if(!e||!m.isOn())return i();let a=Math.min(900,280+Math.abs(this.pos-s)*this.spacing()*.9);this.el.classList.add("is-gliding"),this.tape.style.transitionDuration=`${a}ms`,this.stopGlide=this.later(i,a)}next(t=1){this.setValue(this.items[Math.max(0,Math.min(this.items.length-1,this.index+t))].value)}prev(t=1){this.next(-t)}nextSnap(){this.setValue(this.items[this.snapFrom(this.index,1)].value)}prevSnap(){this.setValue(this.items[this.snapFrom(this.index,-1)].value)}getDisplayText(){return this.items[this.index].label}rebuild(t){Object.assign(this.config,t),this.cache=void 0,this.value=this.normalize(this.value),this.rendered&&(this.paintTicks(),this.shown="",this.readout.replaceChildren(),this.applyValue(this.value))}setMin(t){this.rebuild({min:t})}setMax(t){this.rebuild({max:t})}setStep(t){this.rebuild({step:t})}setOptions(t){this.rebuild({options:t})}setSnap(t){this.rebuild({snap:t})}setShape(t){this.rebuild({shape:t})}setFormat(t){this.rebuild({format:t})}onDisabled(t){this.face.tabIndex=t?-1:0,this.face.setAttribute("aria-disabled",String(t))}onReadonly(t){this.face.setAttribute("aria-readonly",String(t))}};E("dial",x);export{x as a};
|
|
2
|
+
//# sourceMappingURL=chunk-FSR6BDVO.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as n}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{a as n}from"./chunk-QVBDBGS4.js";import{a as r}from"./chunk-TIPK3SCJ.js";import{b as e}from"./chunk-PZSHOSOS.js";var s=class extends n{baseCls="op-field op-radiogroup";group;inputs=[];emptyValue(){return null}createControl(){return this.group=e("div","op-radiogroup__options",{role:"radiogroup","aria-labelledby":`${this.id}-label`}),this.listen(this.group,"change",t=>{let i=this.inputs.indexOf(t.target);if(!(i<0)){if(this.config.readonly)return this.applyValue(this.value);this.commit(this.opts()[i].value),this.paintChecked()}}),this.buildOptions(),this.inputEl=this.inputs[0]??this.group,this.group}opts(){return(this.config.options??[]).map(t=>typeof t=="object"?t:{value:t,label:t,disabled:!1})}buildOptions(){this.inputs=[],this.group.replaceChildren(...this.opts().map(t=>{let i=e("input","op-radio__input",{type:"radio",name:this.id,value:String(t.value),disabled:!!t.disabled});return this.inputs.push(i),e("label","op-radio",{},i,e("span","op-radio__dot"),e("span","op-radio__text",{},t.label))})),this.group.classList.toggle("op-radiogroup__options--horizontal",this.config.direction==="horizontal")}onRender(){super.onRender(),this.el.querySelector(".op-field__label").id=`${this.id}-label`}applyValue(t){let i=this.opts();this.inputs.forEach((o,p)=>o.checked=t!=null&&i[p].value===t),this.paintChecked()}paintChecked(){for(let t of this.inputs)t.closest("label").classList.toggle("is-checked",t.checked)}getDisplayText(){let t=this.getValue();return this.opts().find(i=>i.value===t)?.label??""}onDisabled(t){this.inputs.forEach((i,o)=>i.disabled=t||!!this.opts()[o].disabled)}setOptions(t){this.config.options=t,this.rendered&&(this.buildOptions(),this.inputEl=this.inputs[0]??this.group,this.applyValue(this.value),this.onDisabled(!!this.config.disabled))}};r("radiogroup",s);export{s as a};
|
|
2
|
+
//# sourceMappingURL=chunk-G26R2F3W.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as E,b as o,c as M,d as c,e as g,h as S}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{c as w}from"./chunk-DIOJGTUN.js";import{a as E,b as o,c as M,d as c,e as g,h as S}from"./chunk-2GKIF7A6.js";import{a as C}from"./chunk-TIPK3SCJ.js";import{f as k}from"./chunk-UDXO3KM3.js";import{b as n}from"./chunk-PZSHOSOS.js";import{d as L,e as D,f as v}from"./chunk-S4QD5NID.js";D("en",{dateMin:"Date must be on or after {n}",dateMax:"Date must be on or before {n}",calPrev:"Previous",calNext:"Next",calOpen:"Open calendar",calMonth:"Choose month"});D("pt-BR",{dateMin:"A data deve ser {n} ou posterior",dateMax:"A data deve ser {n} ou anterior",calPrev:"Anterior",calNext:"Pr\xF3ximo",calOpen:"Abrir calend\xE1rio",calMonth:"Escolher m\xEAs"});var f=(_,t)=>new Intl.DateTimeFormat(L()._lang,_).format(t),x=class extends k{baseCls="op-calendar";cursor=M();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")},w("chevron-left")),this.nextEl=n("button","op-calendar__nav",{type:"button","aria-label":v("calNext")},w("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??S()}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=M(),{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()}};C("calendar",x);export{x as a};
|
|
2
|
+
//# sourceMappingURL=chunk-GEJKFE4X.js.map
|