optikos 0.2.0 → 0.4.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 +56 -1
- package/dist/bind.js +1 -1
- package/dist/bind.js.map +4 -4
- package/dist/{chunk-5JEXM5S7.js → chunk-2GKIF7A6.js} +2 -2
- package/dist/chunk-2HNQ2XRY.js +2 -0
- package/dist/chunk-2HNQ2XRY.js.map +7 -0
- package/dist/chunk-2QMI2RRB.js +2 -0
- package/dist/chunk-2QMI2RRB.js.map +7 -0
- package/dist/{chunk-W3H7GTJY.js → chunk-2YRQULDC.js} +2 -2
- package/dist/{chunk-ZPPELYNJ.js → chunk-3BG75P7T.js} +2 -2
- package/dist/{chunk-GNU4VOOE.js → chunk-3F4MN2BU.js} +2 -2
- package/dist/chunk-3FCIZKIN.js +2 -0
- package/dist/chunk-3FCIZKIN.js.map +7 -0
- package/dist/{chunk-5DJTP53N.js → chunk-3FK52VQX.js} +2 -2
- package/dist/chunk-3QRA3XOA.js +2 -0
- package/dist/chunk-3QRA3XOA.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-3TAW4AKH.js → chunk-4AZ44KV4.js} +2 -2
- package/dist/{chunk-TZOQWCVH.js → chunk-4CWYF4O7.js} +2 -2
- package/dist/{chunk-REW4LR46.js → chunk-4OB2IM5L.js} +2 -2
- package/dist/{chunk-3DBEZGOY.js → chunk-4S3HRFQB.js} +2 -2
- package/dist/chunk-5BMG5ZBY.js +2 -0
- package/dist/{chunk-KLLAY2IM.js.map → chunk-5BMG5ZBY.js.map} +2 -2
- package/dist/chunk-5PWPAN62.js +2 -0
- package/dist/chunk-5PWPAN62.js.map +7 -0
- package/dist/chunk-5PYJ6FJK.js +2 -0
- package/dist/chunk-5PYJ6FJK.js.map +7 -0
- package/dist/{chunk-OGRFQTXA.js → chunk-643FOYQB.js} +2 -2
- package/dist/{chunk-JOFQJGZK.js → chunk-6BOM5KZR.js} +2 -2
- package/dist/chunk-6LJK4QWF.js +2 -0
- package/dist/chunk-6LJK4QWF.js.map +7 -0
- package/dist/{chunk-JK74QK3M.js → chunk-6PZPBPAD.js} +2 -2
- package/dist/chunk-7Y2GHQRB.js +2 -0
- package/dist/{chunk-YHEMA56R.js → chunk-AQ3RTHG5.js} +2 -2
- package/dist/{chunk-M242VYZA.js → chunk-AT7VFZRB.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-BJWREA76.js +2 -0
- package/dist/chunk-BJWREA76.js.map +7 -0
- 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-FEHGU6EP.js → chunk-C3MWS7P2.js} +2 -2
- package/dist/{chunk-G2KUK6AT.js → chunk-CFGCB37K.js} +2 -2
- package/dist/{chunk-JI265XFO.js → chunk-CMV3F6HR.js} +2 -2
- package/dist/{chunk-TOLTUOZS.js → chunk-CWIE74NX.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-HXDTGP2K.js → chunk-DWA45BWR.js} +2 -2
- package/dist/chunk-DWTDNKXX.js +2 -0
- package/dist/chunk-DWTDNKXX.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-EXIADWI7.js +2 -0
- package/dist/chunk-EXIADWI7.js.map +7 -0
- package/dist/{chunk-5QUY72FX.js → chunk-F4HZUAKM.js} +2 -2
- package/dist/chunk-FCJI2JF7.js +3 -0
- package/dist/chunk-FCJI2JF7.js.map +7 -0
- package/dist/{chunk-II6ITOA6.js → chunk-FPU53CCV.js} +2 -2
- package/dist/{chunk-3S24ZRPK.js → chunk-GEBAYD6N.js} +2 -2
- package/dist/{chunk-G2DAD3MQ.js → chunk-GEJKFE4X.js} +2 -2
- package/dist/chunk-GFFZTFQH.js +2 -0
- package/dist/chunk-GFFZTFQH.js.map +7 -0
- package/dist/chunk-GFJRGBQR.js +2 -0
- package/dist/chunk-GFJRGBQR.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-2ZUZ5HDL.js → chunk-HLS5FI55.js} +2 -2
- 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-IUOEPAWG.js +2 -0
- package/dist/chunk-IUOEPAWG.js.map +7 -0
- package/dist/{chunk-IHE2MQ3W.js → chunk-J5QPFJ7M.js} +2 -2
- package/dist/chunk-JE56CJX2.js +2 -0
- package/dist/chunk-JE56CJX2.js.map +7 -0
- package/dist/chunk-JJLOUMCJ.js +2 -0
- package/dist/chunk-JJLOUMCJ.js.map +7 -0
- package/dist/chunk-JLKIHXZP.js +3 -0
- package/dist/chunk-JLKIHXZP.js.map +7 -0
- package/dist/{chunk-5BC72727.js → chunk-JSEI44A7.js} +2 -2
- package/dist/chunk-L5SQQFO7.js +2 -0
- package/dist/chunk-L5SQQFO7.js.map +7 -0
- package/dist/chunk-M2ZRKHE4.js +2 -0
- package/dist/chunk-M2ZRKHE4.js.map +7 -0
- package/dist/chunk-M7FNPRV4.js +2 -0
- package/dist/chunk-M7FNPRV4.js.map +7 -0
- package/dist/chunk-MNSDGJKA.js +3 -0
- package/dist/chunk-MNSDGJKA.js.map +7 -0
- package/dist/{chunk-DBMWS3O5.js → chunk-MQ5BYGFY.js} +2 -2
- package/dist/chunk-N2LS4JD6.js +2 -0
- package/dist/chunk-N2LS4JD6.js.map +7 -0
- package/dist/chunk-NJ5IFOPR.js +4 -0
- package/dist/{chunk-XX2MVWFS.js.map → chunk-NJ5IFOPR.js.map} +1 -1
- package/dist/{chunk-NXSTUFS7.js → chunk-NNR2FNHG.js} +2 -2
- package/dist/chunk-NQV4THNE.js +2 -0
- package/dist/{chunk-BXYWVRKJ.js.map → chunk-NQV4THNE.js.map} +1 -1
- package/dist/{chunk-XHOBNSBO.js → chunk-P4O57S6N.js} +2 -2
- package/dist/{chunk-MB3MU6HR.js → chunk-PGVLRMTQ.js} +2 -2
- package/dist/chunk-PMOXLQ72.js +2 -0
- package/dist/chunk-PMOXLQ72.js.map +7 -0
- package/dist/chunk-Q6FY4L2F.js +2 -0
- package/dist/chunk-Q6FY4L2F.js.map +7 -0
- package/dist/chunk-R32HPK7R.js +2 -0
- package/dist/chunk-R32HPK7R.js.map +7 -0
- package/dist/{chunk-Z2JBUHKA.js → chunk-RG6SHPHF.js} +2 -2
- package/dist/{chunk-EDUMAMK4.js → chunk-S2CMWKVB.js} +2 -2
- package/dist/chunk-S4QD5NID.js +2 -0
- package/dist/chunk-S4QD5NID.js.map +7 -0
- package/dist/chunk-SB4ICXBV.js +2 -0
- package/dist/chunk-SB4ICXBV.js.map +7 -0
- package/dist/{chunk-23XLG2EM.js → chunk-SEW5OCQF.js} +2 -2
- package/dist/chunk-SWCB2GMN.js +2 -0
- package/dist/chunk-SWCB2GMN.js.map +7 -0
- package/dist/chunk-TQPQ4UEA.js +2 -0
- package/dist/chunk-TQPQ4UEA.js.map +7 -0
- package/dist/{chunk-Z2Z52GFT.js → chunk-U5L76VVB.js} +2 -2
- package/dist/chunk-UDXO3KM3.js +2 -0
- package/dist/chunk-UDXO3KM3.js.map +7 -0
- package/dist/{chunk-LQRFNQ2N.js → chunk-UQRQH2JW.js} +2 -2
- package/dist/chunk-V5G5JECN.js +2 -0
- package/dist/chunk-V5G5JECN.js.map +7 -0
- package/dist/{chunk-JBLRAM7Z.js → chunk-XFIREDWO.js} +2 -2
- package/dist/chunk-XQHATUKN.js +2 -0
- package/dist/{chunk-LW2WRUVL.js.map → chunk-XQHATUKN.js.map} +4 -4
- package/dist/chunk-XR677UYD.js +2 -0
- package/dist/chunk-XR677UYD.js.map +7 -0
- package/dist/{chunk-RNN55473.js → chunk-YDX2PCVL.js} +2 -2
- package/dist/{chunk-RNN55473.js.map → chunk-YDX2PCVL.js.map} +1 -1
- 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-YXOKWCYS.js +2 -0
- package/dist/chunk-YXOKWCYS.js.map +7 -0
- package/dist/{chunk-I4SP6JTU.js → chunk-Z6L55FTN.js} +2 -2
- package/dist/{chunk-6VBK2I5B.js → chunk-ZSPJZ3ZH.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/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/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/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/core.css +36 -0
- package/dist/css/datetimefield.css +15 -0
- package/dist/css/grid.css +40 -0
- package/dist/css/gridexport.css +35 -0
- package/dist/css/grouping.css +49 -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/menu.css +9 -0
- package/dist/css/navmenu.css +9 -7
- 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 +10 -0
- package/dist/css/timeline.css +140 -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 +1131 -21
- 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/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/data/cellediting/cellediting.d.ts +3 -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/grouping.d.ts +31 -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/timeline/timeline.d.ts +60 -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/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 +29 -5
- 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 +8 -0
- package/dist/types/components/overlays/commandpalette/commandpalette.d.ts +2 -0
- package/dist/types/components/overlays/menu/menu.d.ts +6 -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/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 +8 -0
- 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 +17 -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 +9 -1
- package/dist/chunk-27UZFEXD.js +0 -2
- package/dist/chunk-27UZFEXD.js.map +0 -7
- package/dist/chunk-2ZRNGG2N.js +0 -2
- package/dist/chunk-2ZRNGG2N.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-5YS7OD5E.js +0 -2
- package/dist/chunk-5YS7OD5E.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-ATFJ7PNA.js +0 -2
- package/dist/chunk-ATFJ7PNA.js.map +0 -7
- package/dist/chunk-BXYWVRKJ.js +0 -2
- package/dist/chunk-CKXS375P.js +0 -2
- package/dist/chunk-CKXS375P.js.map +0 -7
- package/dist/chunk-CUN5QO4T.js +0 -2
- package/dist/chunk-CUN5QO4T.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-FHM5NUS4.js +0 -3
- package/dist/chunk-FHM5NUS4.js.map +0 -7
- package/dist/chunk-GBPLNXMP.js +0 -2
- package/dist/chunk-GBPLNXMP.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-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-VF7BGP6L.js +0 -2
- package/dist/chunk-VF7BGP6L.js.map +0 -7
- package/dist/chunk-VU3GIDZ3.js +0 -2
- package/dist/chunk-VU3GIDZ3.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-5JEXM5S7.js.map → chunk-2GKIF7A6.js.map} +0 -0
- /package/dist/{chunk-W3H7GTJY.js.map → chunk-2YRQULDC.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-3TAW4AKH.js.map → chunk-4AZ44KV4.js.map} +0 -0
- /package/dist/{chunk-TZOQWCVH.js.map → chunk-4CWYF4O7.js.map} +0 -0
- /package/dist/{chunk-REW4LR46.js.map → chunk-4OB2IM5L.js.map} +0 -0
- /package/dist/{chunk-3DBEZGOY.js.map → chunk-4S3HRFQB.js.map} +0 -0
- /package/dist/{chunk-OGRFQTXA.js.map → chunk-643FOYQB.js.map} +0 -0
- /package/dist/{chunk-JOFQJGZK.js.map → chunk-6BOM5KZR.js.map} +0 -0
- /package/dist/{chunk-JK74QK3M.js.map → chunk-6PZPBPAD.js.map} +0 -0
- /package/dist/{chunk-GZ7X34QP.js.map → chunk-7Y2GHQRB.js.map} +0 -0
- /package/dist/{chunk-YHEMA56R.js.map → chunk-AQ3RTHG5.js.map} +0 -0
- /package/dist/{chunk-M242VYZA.js.map → chunk-AT7VFZRB.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-FEHGU6EP.js.map → chunk-C3MWS7P2.js.map} +0 -0
- /package/dist/{chunk-G2KUK6AT.js.map → chunk-CFGCB37K.js.map} +0 -0
- /package/dist/{chunk-JI265XFO.js.map → chunk-CMV3F6HR.js.map} +0 -0
- /package/dist/{chunk-TOLTUOZS.js.map → chunk-CWIE74NX.js.map} +0 -0
- /package/dist/{chunk-4EZJ5FKJ.js.map → chunk-DIOJGTUN.js.map} +0 -0
- /package/dist/{chunk-HXDTGP2K.js.map → chunk-DWA45BWR.js.map} +0 -0
- /package/dist/{chunk-5QUY72FX.js.map → chunk-F4HZUAKM.js.map} +0 -0
- /package/dist/{chunk-II6ITOA6.js.map → chunk-FPU53CCV.js.map} +0 -0
- /package/dist/{chunk-3S24ZRPK.js.map → chunk-GEBAYD6N.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-2ZUZ5HDL.js.map → chunk-HLS5FI55.js.map} +0 -0
- /package/dist/{chunk-XYZ6VZ5T.js.map → chunk-HRW25TMU.js.map} +0 -0
- /package/dist/{chunk-IHE2MQ3W.js.map → chunk-J5QPFJ7M.js.map} +0 -0
- /package/dist/{chunk-5BC72727.js.map → chunk-JSEI44A7.js.map} +0 -0
- /package/dist/{chunk-DBMWS3O5.js.map → chunk-MQ5BYGFY.js.map} +0 -0
- /package/dist/{chunk-NXSTUFS7.js.map → chunk-NNR2FNHG.js.map} +0 -0
- /package/dist/{chunk-XHOBNSBO.js.map → chunk-P4O57S6N.js.map} +0 -0
- /package/dist/{chunk-MB3MU6HR.js.map → chunk-PGVLRMTQ.js.map} +0 -0
- /package/dist/{chunk-Z2JBUHKA.js.map → chunk-RG6SHPHF.js.map} +0 -0
- /package/dist/{chunk-EDUMAMK4.js.map → chunk-S2CMWKVB.js.map} +0 -0
- /package/dist/{chunk-23XLG2EM.js.map → chunk-SEW5OCQF.js.map} +0 -0
- /package/dist/{chunk-Z2Z52GFT.js.map → chunk-U5L76VVB.js.map} +0 -0
- /package/dist/{chunk-LQRFNQ2N.js.map → chunk-UQRQH2JW.js.map} +0 -0
- /package/dist/{chunk-JBLRAM7Z.js.map → chunk-XFIREDWO.js.map} +0 -0
- /package/dist/{chunk-ELYARUCN.js.map → chunk-YJTUFK4P.js.map} +0 -0
- /package/dist/{chunk-I4SP6JTU.js.map → chunk-Z6L55FTN.js.map} +0 -0
- /package/dist/{chunk-6VBK2I5B.js.map → chunk-ZSPJZ3ZH.js.map} +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as k}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{a as k}from"./chunk-R32HPK7R.js";import{a as S}from"./chunk-4AZ44KV4.js";import{a as _}from"./chunk-MNSDGJKA.js";import{a as F}from"./chunk-2YRQULDC.js";import{a as x}from"./chunk-HLS5FI55.js";import{c as M}from"./chunk-DIOJGTUN.js";import{a as L}from"./chunk-TIPK3SCJ.js";import{f as N}from"./chunk-UDXO3KM3.js";import{b as p}from"./chunk-PZSHOSOS.js";import{e as y,f as s}from"./chunk-S4QD5NID.js";y("en",{fbEq:"equals",fbNe:"does not equal",fbContains:"contains",fbNotContains:"does not contain",fbStarts:"starts with",fbEnds:"ends with",fbGt:"greater than",fbGe:"greater than or equal",fbLt:"less than",fbLe:"less than or equal",fbBetween:"is between",fbNotBetween:"is not between",fbIn:"is any of",fbNin:"is none of",fbEmpty:"is empty",fbNotEmpty:"is not empty",fbAnd:"Match all (AND)",fbOr:"Match any (OR)",fbAddFilter:"Add filter",fbAddGroup:"Add group",fbRemove:"Remove",fbClear:"Clear all",fbApply:"Apply",fbField:"Field",fbOperator:"Operator",fbValue:"Value",fbTo:"and",fbList:"a, b, c",fbNone:"No filters",fbLabel:"Filters"});y("pt-BR",{fbEq:"igual a",fbNe:"diferente de",fbContains:"cont\xE9m",fbNotContains:"n\xE3o cont\xE9m",fbStarts:"come\xE7a com",fbEnds:"termina com",fbGt:"maior que",fbGe:"maior ou igual a",fbLt:"menor que",fbLe:"menor ou igual a",fbBetween:"entre",fbNotBetween:"fora do intervalo",fbIn:"\xE9 um de",fbNin:"n\xE3o \xE9 nenhum de",fbEmpty:"est\xE1 vazio",fbNotEmpty:"n\xE3o est\xE1 vazio",fbAnd:"Todas (E)",fbOr:"Qualquer uma (OU)",fbAddFilter:"Adicionar filtro",fbAddGroup:"Adicionar grupo",fbRemove:"Remover",fbClear:"Limpar tudo",fbApply:"Aplicar",fbField:"Campo",fbOperator:"Operador",fbValue:"Valor",fbTo:"e",fbList:"a, b, c",fbNone:"Sem filtros",fbLabel:"Filtros"});var w={text:["contains","notContains","eq","ne","startsWith","endsWith","in","nin","empty","notEmpty"],number:["eq","ne","gt","ge","lt","le","between","notBetween","empty","notEmpty"],date:["eq","ne","gt","ge","lt","le","between","notBetween","empty","notEmpty"],select:["eq","ne","in","nin","empty","notEmpty"]},C={eq:"fbEq",ne:"fbNe",contains:"fbContains",notContains:"fbNotContains",startsWith:"fbStarts",endsWith:"fbEnds",gt:"fbGt",ge:"fbGe",lt:"fbLt",le:"fbLe",between:"fbBetween",notBetween:"fbNotBetween",in:"fbIn",nin:"fbNin",empty:"fbEmpty",notEmpty:"fbNotEmpty"},v=h=>h==="empty"||h==="notEmpty"?0:h==="between"||h==="notBetween"?2:1,m=h=>h==="in"||h==="nin",E=class extends N{baseCls="op-filterbuilder";root={kind:"group",op:"and",items:[]};parts=[];nextId=1;cancelApply;pickMenu;onRender(){this.el.setAttribute("role","group"),this.el.setAttribute("aria-label",s("fbLabel")),this.config.value&&(this.root=this.fromNode(this.config.value)),this.own(()=>(this.parts.forEach(e=>e.destroy()),this.pickMenu?.destroy())),this.paint(),this.config.value&&this.config.store&&this.apply()}fromNode(e){if("filters"in e)return{kind:"group",op:e.op,items:e.filters.map(n=>this.fromNode(n))};let[i,t]=Array.isArray(e.value)&&!m(e.op??"eq")?e.value:[e.value,void 0];return{kind:"rule",id:this.nextId++,field:e.field,op:e.op??"eq",value:m(e.op??"eq")?e.value:i,value2:t}}field(e){return this.config.fields.find(i=>i.name===e)??this.config.fields[0]}complete(e){let i=v(e.op),t=n=>n!=null&&n!==""&&!(Array.isArray(n)&&!n.length);return i===0||(i===1?t(e.value):t(e.value)&&t(e.value2))}toNode(e){let i=e.items.flatMap(t=>{if(t.kind==="group")return this.toNode(t)?[this.toNode(t)]:[];if(!this.complete(t))return[];let n=v(t.op);return[{field:t.field,op:t.op,...n===1?{value:t.value}:n===2?{value:[t.value,t.value2]}:{}}]});return i.length?{op:e.op,filters:i}:null}getFilter(){return this.toNode(this.root)}setFilter(e){this.root=e?this.fromNode(e):{kind:"group",op:"and",items:[]},this.rendered&&this.paint(),this.changed()}clear(){this.setFilter(null),this.apply()}apply(){this.cancelApply?.();let e=this.getFilter();if(this.emit("before-apply",e)===!1)return;let i=this.config.store;i&&(e?i.filter(e):i.clearFilter()),this.emit("apply",e)}addRule(e){this.root.items.push(this.newRule(e)),this.rendered&&this.paint()}setFields(e){this.config.fields=e,this.rendered&&this.paint()}setStore(e){this.config.store=e}newRule(e){let i=this.field(e??"");return{kind:"rule",id:this.nextId++,field:i.name,op:w[i.type??"text"][0]}}changed(){this.emit("change",this.getFilter()),this.config.live!==!1&&(this.cancelApply?.(),this.cancelApply=this.later(()=>this.apply(),250))}paint(){let e=document.activeElement?.closest("[data-fb]")?.dataset.fb;this.parts.splice(0).forEach(n=>n.destroy());let i=[this.group(this.root,0,null)];this.config.live===!1&&i.push(p("div","op-filterbuilder__foot",{},this.button(s("fbApply"),"primary",()=>this.apply()))),this.el.replaceChildren(...i),this.mounted&&this.parts.forEach(n=>n.notifyMount());let t=e&&this.el.querySelector(`[data-fb="${e}"]`);t&&(t.matches("select,button,input")?t:t.querySelector("input"))?.focus()}button(e,i,t,n){let f=new x({text:e,variant:i,icon:n,handler:t});return this.parts.push(f),f.el}select(e,i,t,n,f){let r=p("select","op-filterbuilder__select",{"aria-label":t,"data-fb":n}),d=new Map;for(let[u,l,o]of e){let a=p("option","",{value:u},l);o?(d.has(o)||d.set(o,p("optgroup","",{label:o})),d.get(o).append(a)):r.append(a)}return r.append(...d.values()),r.value=i,this.listen(r,"change",()=>f(r.value)),r}group(e,i,t){let n=p("div",`op-filterbuilder__group${i?" is-nested":""}`,{role:"group","aria-label":s("fbLabel")}),f=this.select([["and",s("fbAnd")],["or",s("fbOr")]],e.op,s("fbLabel"),`g${i}:logic`,l=>{e.op=l,this.changed()}),r=p("div","op-filterbuilder__head",{},f),d=l=>{let o=this.newRule(l);e.items.push(o),this.paint(),this.el.querySelector(`[data-fb="r${o.id}:v1"] input, select[data-fb="r${o.id}:v1"]`)?.focus()},u=this.button(s("fbAddFilter"),"ghost",()=>this.config.addMode==="pick"?this.pick(u,d):d(),"plus");r.append(u),i<(this.config.maxDepth??3)&&r.append(this.button(s("fbAddGroup"),"ghost",()=>{e.items.push({kind:"group",op:"or",items:[this.newRule()]}),this.paint()},"plus")),t?r.append(this.removeBtn(()=>(t.items.splice(t.items.indexOf(e),1),this.paint(),this.changed()))):e.items.length&&r.append(this.button(s("fbClear"),"ghost",()=>this.clear())),n.append(r),!e.items.length&&!t&&n.append(p("div","op-filterbuilder__none",{},s("fbNone")));for(let l of e.items)n.append(l.kind==="group"?this.group(l,i+1,e):this.rule(l,e));return n}pick(e,i){let t=this.config.fields;this.pickMenu??=new _({}),this.pickMenu.setSearch(t.length>6),this.pickMenu.setItems(t.map(n=>({text:n.label??n.name,group:n.group,handler:()=>i(n.name)}))),this.pickMenu.showBy(e)}removeBtn(e){let i=p("button","op-filterbuilder__remove",{type:"button","aria-label":s("fbRemove"),title:s("fbRemove")},M("x"));return this.listen(i,"click",e),i}rule(e,i){let t=this.field(e.field),n=t.type??"text",f=`r${e.id}`,r=this.select(this.config.fields.map(o=>[o.name,o.label??o.name,o.group]),e.field,s("fbField"),`${f}:field`,o=>{e.field=o;let a=w[this.field(o).type??"text"];(!a.includes(e.op)||(this.field(o).type??"text")!==n)&&(e.op=a[0]),e.value=e.value2=void 0,this.paint(),this.changed()}),d=this.select(w[n].map(o=>[o,s(C[o])]),e.op,s("fbOperator"),`${f}:op`,o=>{let a=e.op;e.op=o,(v(a)!==v(e.op)||m(a)!==m(e.op))&&(e.value=e.value2=void 0),this.paint(),this.changed()}),u=p("div","op-filterbuilder__row",{},r,d),l=v(e.op);return l>=1&&u.append(this.editor(e,t,"value",`${f}:v1`)),l===2&&u.append(p("span","op-filterbuilder__to",{},s("fbTo")),this.editor(e,t,"value2",`${f}:v2`)),u.append(this.removeBtn(()=>(i.items.splice(i.items.indexOf(e),1),this.paint(),this.changed()))),u}editor(e,i,t,n){let f=i.type??"text",r=s("fbValue"),d=l=>{e[t]=l,this.changed()};if(f==="select"){let l=(i.options??[]).map(b=>typeof b=="object"?[String(b.value),b.label]:[String(b),String(b)]),o=b=>(i.options??[]).map(c=>typeof c=="object"?c.value:c).find(c=>String(c)===b)??b;if(m(e.op)){let b=new Set((Array.isArray(e.value)?e.value:[]).map(String)),c=p("div","op-filterbuilder__chips",{role:"group","aria-label":r,"data-fb":n});for(let[g,G]of l){let A=p("input","op-filterbuilder__chipbox",{type:"checkbox",value:g});A.checked=b.has(g),c.append(p("label","op-filterbuilder__chip",{},A,p("span","",{},G)))}return this.listen(c,"change",()=>d(Array.from(c.querySelectorAll("input:checked")).map(g=>o(g.value)))),c}let a=p("select","op-filterbuilder__select",{"aria-label":r,"data-fb":n});a.append(p("option","",{value:""},""));for(let[b,c]of l)a.append(p("option","",{value:b},c));return a.value=e.value!=null?String(e.value):"",this.listen(a,"change",()=>d(a.value===""?void 0:o(a.value))),a}if(m(e.op)){let l=new F({stableSize:!1,placeholder:s("fbList"),value:(e.value??[]).join(", ")});return l.on("change",o=>d(o.split(",").map(a=>a.trim()).filter(Boolean))),this.own1(l,r,n)}let u=f==="number"?new k({value:e[t]??null,stableSize:!1}):f==="date"?new S({value:e[t]??null,stableSize:!1}):new F({value:e[t]??"",stableSize:!1});return u.on("change",l=>d(l===""?void 0:l)),this.own1(u,r,n)}own1(e,i,t){this.parts.push(e),e.on("enter",()=>this.apply());let n=e.el;return n.classList.add("op-filterbuilder__value"),n.dataset.fb=t,e.getInput().setAttribute("aria-label",i),n}};L("filterbuilder",E);export{E as a};
|
|
2
|
+
//# sourceMappingURL=chunk-4S3HRFQB.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as d}from"./chunk-JE56CJX2.js";import{a as x}from"./chunk-AQ3RTHG5.js";import{a as m}from"./chunk-2YRQULDC.js";import{d as p}from"./chunk-DIOJGTUN.js";import{c}from"./chunk-BQEFLPDA.js";import{f as r}from"./chunk-S4QD5NID.js";function s(t){return new Promise(e=>{let a=!1,l=o=>{a||(a=!0,e(o))},i=t.input?new m({value:t.input.value??"",placeholder:t.input.placeholder,validators:t.input.validators,ariaLabel:t.text}):void 0,u=new x({text:t.text,flex:1}),n=new d({title:t.title,cls:"op-messagebox",closeAction:"destroy",mask:t.mask??!1,autoFocus:!!t.input?.autoFocus,items:[new c({layout:{type:"hbox",gap:12,align:"flex-start"},items:[...t.icon?[new p({name:t.icon,cls:"op-messagebox__icon"})]:[],new c({layout:{type:"vbox"},flex:1,items:[u,...i?[i]:[]]})]})],buttons:t.buttons.map(o=>({text:o.text,variant:o.variant??"default",handler:()=>{t.beforeClose?.(o.id,n,i)!==!1&&(l(o.id),n.close())}}))});n.el.setAttribute("role",t.input?"dialog":"alertdialog"),n.el.setAttribute("aria-describedby",u.id),n.on("close",()=>l(t.cancelId??t.buttons[t.buttons.length-1].id));let g=t.buttons.find(o=>o.variant==="primary"||o.variant==="danger");i?.on("enter",()=>n.el.querySelectorAll(".op-panel__footer button")[t.buttons.indexOf(g??t.buttons[0])].click()),n.show(),i||n.el.querySelector(".op-panel__footer .op-button--primary, .op-panel__footer .op-button--danger")?.focus()})}var b={show:s,async alert(t,e={}){await s({text:t,title:e.title,mask:e.mask,icon:e.icon??"info",buttons:[{id:"ok",text:e.okText??r("ok"),variant:"primary"}],cancelId:"ok"})},async confirm(t,e={}){return await s({text:t,title:e.title,mask:e.mask,icon:e.icon??(e.danger?"alert":"info"),buttons:[{id:"cancel",text:e.cancelText??r("cancel")},{id:"ok",text:e.okText??r("ok"),variant:e.danger?"danger":"primary"}],cancelId:"cancel"})==="ok"},async prompt(t,e={}){let a=null;return await s({text:t,title:e.title,mask:e.mask,input:{value:e.value,placeholder:e.placeholder,validators:e.validators,autoFocus:e.autoFocus},buttons:[{id:"cancel",text:e.cancelText??r("cancel")},{id:"ok",text:e.okText??r("ok"),variant:"primary"}],cancelId:"cancel",beforeClose:(i,u,n)=>{if(i==="ok"){if(!n.validate())return!1;a=n.getValue()}}})==="ok"?a:null}};d.ask=(t,e)=>b.confirm(t,{danger:!0,...e});export{b as a};
|
|
2
|
+
//# sourceMappingURL=chunk-5BMG5ZBY.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/components/overlays/messagebox/messagebox.ts"],
|
|
4
|
-
"sourcesContent": ["import { Window } from '../window/window';\nimport { Label } from '../../base/label/label';\nimport { TextField } from '../../fields/textfield/textfield';\nimport { Container } from '../../../core/container';\nimport { Icon } from '../../base/icon/icon';\nimport { t } from '../../../core/i18n';\nimport type { Validator } from '../../../core/validators';\n\nexport interface MessageBoxButton {\n id: string;\n text: string;\n variant?: 'default' | 'primary' | 'danger';\n}\n\nexport interface MessageBoxConfig {\n text: string;\n title?: string;\n icon?: string;\n buttons: MessageBoxButton[];\n /** Resolved when closed with Esc or the close button. */\n cancelId?: string;\n /** Adds a text input; `show` then resolves with the button id and the input is read by `prompt`. */\n input?: { value?: string; placeholder?: string; validators?: Validator<string>[]; autoFocus?: boolean };\n /** Called with the pressed button id before closing; return `false` to keep the dialog open. */\n beforeClose?: (id: string, win: Window, input?: TextField) => boolean | void;\n /** Dim the page behind. Default false: a message is still modal, but it does not darken the screen. */\n mask?: boolean;\n}\n\nfunction open(cfg: MessageBoxConfig): Promise<string> {\n return new Promise((resolve) => {\n let done = false;\n const finish = (id: string) => {\n if (done) return;\n done = true;\n resolve(id);\n };\n const field = cfg.input ? new TextField({ value: cfg.input.value ?? '', placeholder: cfg.input.placeholder, validators: cfg.input.validators, ariaLabel: cfg.text }) : undefined;\n const message = new Label({ text: cfg.text, flex: 1 });\n const win: Window = new Window({\n title: cfg.title,\n cls: 'op-messagebox',\n closeAction: 'destroy',\n mask: cfg.mask ?? false,\n autoFocus: !!cfg.input?.autoFocus,\n items: [\n new Container({\n layout: { type: 'hbox', gap: 12, align: 'flex-start' },\n items: [...(cfg.icon ? [new Icon({ name: cfg.icon, cls: 'op-messagebox__icon' })] : []), new Container({ layout: { type: 'vbox' }, flex: 1, items: [message, ...(field ? [field] : [])] })],\n }),\n ],\n buttons: cfg.buttons.map((b) => ({\n text: b.text,\n variant: b.variant ?? 'default',\n handler: () => {\n if (cfg.beforeClose?.(b.id, win, field) === false) return;\n finish(b.id);\n win.close();\n },\n })),\n });\n win.el.setAttribute('role', cfg.input ? 'dialog' : 'alertdialog');\n win.el.setAttribute('aria-describedby', message.id);\n win.on('close', () => finish(cfg.cancelId ?? cfg.buttons[cfg.buttons.length - 1].id));\n const primary = cfg.buttons.find((b) => b.variant === 'primary' || b.variant === 'danger');\n field?.on('enter', () => (win.el.querySelectorAll('.op-panel__footer button')[cfg.buttons.indexOf(primary ?? cfg.buttons[0])] as HTMLElement).click());\n win.show();\n // the primary action takes the initial focus unless there is an input\n if (!field) win.el.querySelector<HTMLElement>('.op-panel__footer .op-button--primary, .op-panel__footer .op-button--danger')?.focus();\n });\n}\n\nexport interface AlertOptions {\n title?: string;\n mask?: boolean;\n okText?: string;\n icon?: string;\n}\nexport interface ConfirmOptions {\n title?: string;\n mask?: boolean;\n okText?: string;\n cancelText?: string;\n danger?: boolean;\n icon?: string;\n}\nexport interface PromptOptions {\n title?: string;\n mask?: boolean;\n value?: string;\n placeholder?: string;\n okText?: string;\n cancelText?: string;\n validators?: Validator<string>[];\n /** Focus the text field on open (a phone keyboard pops up). Default false: the dialog gets the focus. */\n autoFocus?: boolean;\n}\n\nexport const MessageBox = {\n show: open,\n\n async alert(text: string, o: AlertOptions = {}): Promise<void> {\n await open({ text, title: o.title, mask: o.mask, icon: o.icon ?? 'info', buttons: [{ id: 'ok', text: o.okText ?? t('ok'), variant: 'primary' }], cancelId: 'ok' });\n },\n\n async confirm(text: string, o: ConfirmOptions = {}): Promise<boolean> {\n const id = await open({\n text,\n title: o.title,\n mask: o.mask,\n icon: o.icon ?? (o.danger ? 'alert' : 'info'),\n buttons: [\n { id: 'cancel', text: o.cancelText ?? t('cancel') },\n { id: 'ok', text: o.okText ?? t('ok'), variant: o.danger ? 'danger' : 'primary' },\n ],\n cancelId: 'cancel',\n });\n return id === 'ok';\n },\n\n /** Resolves with the text, or `null` when cancelled. The dialog stays open while the validators fail. */\n async prompt(text: string, o: PromptOptions = {}): Promise<string | null> {\n let value: string | null = null;\n const id = await open({\n text,\n title: o.title,\n mask: o.mask,\n input: { value: o.value, placeholder: o.placeholder, validators: o.validators, autoFocus: o.autoFocus },\n buttons: [\n { id: 'cancel', text: o.cancelText ?? t('cancel') },\n { id: 'ok', text: o.okText ?? t('ok'), variant: 'primary' },\n ],\n cancelId: 'cancel',\n beforeClose: (btn, _win, field) => {\n if (btn !== 'ok') return;\n if (!field!.validate()) return false;\n value = field!.getValue();\n },\n });\n return id === 'ok' ? value : null;\n },\n};\n"],
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["import { Window } from '../window/window';\nimport { Label } from '../../base/label/label';\nimport { TextField } from '../../fields/textfield/textfield';\nimport { Container } from '../../../core/container';\nimport { Icon } from '../../base/icon/icon';\nimport { t } from '../../../core/i18n';\nimport type { Validator } from '../../../core/validators';\n\nexport interface MessageBoxButton {\n id: string;\n text: string;\n variant?: 'default' | 'primary' | 'danger';\n}\n\nexport interface MessageBoxConfig {\n text: string;\n title?: string;\n icon?: string;\n buttons: MessageBoxButton[];\n /** Resolved when closed with Esc or the close button. */\n cancelId?: string;\n /** Adds a text input; `show` then resolves with the button id and the input is read by `prompt`. */\n input?: { value?: string; placeholder?: string; validators?: Validator<string>[]; autoFocus?: boolean };\n /** Called with the pressed button id before closing; return `false` to keep the dialog open. */\n beforeClose?: (id: string, win: Window, input?: TextField) => boolean | void;\n /** Dim the page behind. Default false: a message is still modal, but it does not darken the screen. */\n mask?: boolean;\n}\n\nfunction open(cfg: MessageBoxConfig): Promise<string> {\n return new Promise((resolve) => {\n let done = false;\n const finish = (id: string) => {\n if (done) return;\n done = true;\n resolve(id);\n };\n const field = cfg.input ? new TextField({ value: cfg.input.value ?? '', placeholder: cfg.input.placeholder, validators: cfg.input.validators, ariaLabel: cfg.text }) : undefined;\n const message = new Label({ text: cfg.text, flex: 1 });\n const win: Window = new Window({\n title: cfg.title,\n cls: 'op-messagebox',\n closeAction: 'destroy',\n mask: cfg.mask ?? false,\n autoFocus: !!cfg.input?.autoFocus,\n items: [\n new Container({\n layout: { type: 'hbox', gap: 12, align: 'flex-start' },\n items: [...(cfg.icon ? [new Icon({ name: cfg.icon, cls: 'op-messagebox__icon' })] : []), new Container({ layout: { type: 'vbox' }, flex: 1, items: [message, ...(field ? [field] : [])] })],\n }),\n ],\n buttons: cfg.buttons.map((b) => ({\n text: b.text,\n variant: b.variant ?? 'default',\n handler: () => {\n if (cfg.beforeClose?.(b.id, win, field) === false) return;\n finish(b.id);\n win.close();\n },\n })),\n });\n win.el.setAttribute('role', cfg.input ? 'dialog' : 'alertdialog');\n win.el.setAttribute('aria-describedby', message.id);\n win.on('close', () => finish(cfg.cancelId ?? cfg.buttons[cfg.buttons.length - 1].id));\n const primary = cfg.buttons.find((b) => b.variant === 'primary' || b.variant === 'danger');\n field?.on('enter', () => (win.el.querySelectorAll('.op-panel__footer button')[cfg.buttons.indexOf(primary ?? cfg.buttons[0])] as HTMLElement).click());\n win.show();\n // the primary action takes the initial focus unless there is an input\n if (!field) win.el.querySelector<HTMLElement>('.op-panel__footer .op-button--primary, .op-panel__footer .op-button--danger')?.focus();\n });\n}\n\nexport interface AlertOptions {\n title?: string;\n mask?: boolean;\n okText?: string;\n icon?: string;\n}\nexport interface ConfirmOptions {\n title?: string;\n mask?: boolean;\n okText?: string;\n cancelText?: string;\n danger?: boolean;\n icon?: string;\n}\nexport interface PromptOptions {\n title?: string;\n mask?: boolean;\n value?: string;\n placeholder?: string;\n okText?: string;\n cancelText?: string;\n validators?: Validator<string>[];\n /** Focus the text field on open (a phone keyboard pops up). Default false: the dialog gets the focus. */\n autoFocus?: boolean;\n}\n\nexport const MessageBox = {\n show: open,\n\n async alert(text: string, o: AlertOptions = {}): Promise<void> {\n await open({ text, title: o.title, mask: o.mask, icon: o.icon ?? 'info', buttons: [{ id: 'ok', text: o.okText ?? t('ok'), variant: 'primary' }], cancelId: 'ok' });\n },\n\n async confirm(text: string, o: ConfirmOptions = {}): Promise<boolean> {\n const id = await open({\n text,\n title: o.title,\n mask: o.mask,\n icon: o.icon ?? (o.danger ? 'alert' : 'info'),\n buttons: [\n { id: 'cancel', text: o.cancelText ?? t('cancel') },\n { id: 'ok', text: o.okText ?? t('ok'), variant: o.danger ? 'danger' : 'primary' },\n ],\n cancelId: 'cancel',\n });\n return id === 'ok';\n },\n\n /** Resolves with the text, or `null` when cancelled. The dialog stays open while the validators fail. */\n async prompt(text: string, o: PromptOptions = {}): Promise<string | null> {\n let value: string | null = null;\n const id = await open({\n text,\n title: o.title,\n mask: o.mask,\n input: { value: o.value, placeholder: o.placeholder, validators: o.validators, autoFocus: o.autoFocus },\n buttons: [\n { id: 'cancel', text: o.cancelText ?? t('cancel') },\n { id: 'ok', text: o.okText ?? t('ok'), variant: 'primary' },\n ],\n cancelId: 'cancel',\n beforeClose: (btn, _win, field) => {\n if (btn !== 'ok') return;\n if (!field!.validate()) return false;\n value = field!.getValue();\n },\n });\n return id === 'ok' ? value : null;\n },\n};\n\nWindow.ask = (text, o) => MessageBox.confirm(text, { danger: true, ...o });\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["open", "cfg", "resolve", "done", "finish", "id", "field", "TextField", "message", "Label", "win", "Window", "Container", "Icon", "b", "primary", "MessageBox", "text", "o", "t", "value", "btn", "_win"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as g}from"./chunk-2YRQULDC.js";import{a as d}from"./chunk-TIPK3SCJ.js";import{e as h,f as m}from"./chunk-S4QD5NID.js";h("en",{maskIncomplete:"Complete the format {mask}"});h("pt-BR",{maskIncomplete:"Complete o formato {mask}"});var f={0:/\d/,A:/\p{L}/u,"*":/./su};function u(l){let t=[];for(let e=0;e<l.length;e++){let i=l[e];i==="\\"&&e+1<l.length?t.push({lit:l[++e]}):t.push(i in f?{kind:i}:{lit:i})}return t}var c=l=>l.filter(t=>"kind"in t).length,p=class extends g{baseCls="op-field op-textfield op-maskfield";masks=[];compiled(){let t=this.config.mask;return this.masks=(Array.isArray(t)?t:[t]).map(u).sort((e,i)=>c(e)-c(i))}extract(t){let e=this.masks.length?this.masks:this.compiled(),i=new Set(e.flatMap(r=>r.flatMap(o=>"lit"in o?[o.lit]:[]))),s=e.some(r=>r.some(o=>"kind"in o&&o.kind==="*")),n="";for(let r of t)i.has(r)&&(!s||!/[\p{L}\d]/u.test(r))||(n+=r);return n}pick(t){let e=this.masks.length?this.masks:this.compiled();return e.find(i=>c(i)>=t.length)??e[e.length-1]}format(t,e=this.pick(t)){let i="",s=0;for(let n of e){if(s>=t.length)break;if("lit"in n){i+=n.lit;continue}for(;s<t.length&&!f[n.kind].test(t[s]);)s++;s<t.length&&(i+=t[s++])}return i}norm(t){let e=this.format(this.extract(t??""));return this.config.raw?this.extract(e):e}display(t){return this.format(this.extract(t??""))}setValue(t,e=!1){super.setValue(this.norm(t),e)}createControl(){let t=super.createControl(),e=this.compiled()[0];return this.config.placeholder||(this.input.placeholder=e.map(i=>"lit"in i?i.lit:"_").join("")),this.masks.every(i=>i.every(s=>"lit"in s||s.kind==="0"))&&this.input.setAttribute("inputmode","numeric"),t}onInput(){let t=this.input,e=t.selectionStart??t.value.length,i=this.extract(t.value.slice(0,e)).length,s=this.extract(t.value),n=this.format(s),r=e>=t.value.length;if(t.value=n,!r&&document.activeElement===t){let o=0,a=0;for(;a<n.length&&o<i;)this.extract(n[a++]).length&&o++;t.setSelectionRange(a,a)}this.el.classList.toggle("has-value",!!n),this.commit(this.config.raw?this.extract(n):n),this.error&&this.validate()}check(){let t=super.check(),e=this.extract(this.value??"");if(t||!e)return t;let i=this.pick(e);return e.length<c(i)?m("maskIncomplete",{mask:i.map(s=>"lit"in s?s.lit:"_").join("")}):""}setMask(t){this.config.mask=t,this.compiled(),this.rendered&&this.setValue(this.value,!0)}};d("maskfield",p);export{p as a};
|
|
2
|
+
//# sourceMappingURL=chunk-5PWPAN62.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/components/fields/maskfield/maskfield.ts"],
|
|
4
|
+
"sourcesContent": ["import { TextField, type TextFieldConfig } from '../textfield/textfield';\nimport { register } from '../../../core/registry';\nimport { t, addMessages } from '../../../core/i18n';\n\naddMessages('en', { maskIncomplete: 'Complete the format {mask}' });\naddMessages('pt-BR', { maskIncomplete: 'Complete o formato {mask}' });\n\nexport interface MaskFieldConfig extends TextFieldConfig {\n /**\n * The pattern: `0` a digit, `A` a letter, `*` any character, `\\` makes the next character a literal. A list picks the\n * pattern by length: `['000.000.000-00', '00.000.000/0000-00']` is a CPF until the 12th digit, then a CNPJ.\n * The core knows no country: formats like these belong to the app.\n */\n mask: string | string[];\n /** The value is only what was typed into the slots (`12345678900`), not the formatted text (`123.456.789-00`). Default false. */\n raw?: boolean;\n}\n\ntype Slot = { kind: '0' | 'A' | '*' } | { lit: string };\nconst KINDS: Record<string, RegExp> = { 0: /\\d/, A: /\\p{L}/u, '*': /./su };\n\nfunction compile(mask: string): Slot[] {\n const out: Slot[] = [];\n for (let i = 0; i < mask.length; i++) {\n const ch = mask[i];\n if (ch === '\\\\' && i + 1 < mask.length) out.push({ lit: mask[++i] });\n else out.push(ch in KINDS ? { kind: ch as '0' | 'A' | '*' } : { lit: ch });\n }\n return out;\n}\nconst slots = (m: Slot[]) => m.filter((s) => 'kind' in s).length;\n\n/** A text field that formats what is typed into a pattern (phone, tax id, postal code, plate...). */\nexport class MaskField extends TextField<string, MaskFieldConfig> {\n protected override baseCls = 'op-field op-textfield op-maskfield';\n private masks: Slot[][] = [];\n\n private compiled(): Slot[][] {\n const m = this.config.mask;\n return (this.masks = (Array.isArray(m) ? m : [m]).map(compile).sort((a, b) => slots(a) - slots(b)));\n }\n\n /** What was typed into the slots: the literals of the patterns are dropped (with a `*` slot, only where the text repeats one). */\n private extract(text: string): string {\n const masks = this.masks.length ? this.masks : this.compiled();\n const lits = new Set(masks.flatMap((m) => m.flatMap((s) => ('lit' in s ? [s.lit] : []))));\n const wild = masks.some((m) => m.some((s) => 'kind' in s && s.kind === '*'));\n let out = '';\n for (const ch of text) if (!(lits.has(ch) && (!wild || !/[\\p{L}\\d]/u.test(ch)))) out += ch;\n return out;\n }\n\n private pick(raw: string): Slot[] {\n const masks = this.masks.length ? this.masks : this.compiled();\n return masks.find((m) => slots(m) >= raw.length) ?? masks[masks.length - 1];\n }\n\n private format(raw: string, mask = this.pick(raw)): string {\n let out = '';\n let i = 0;\n for (const s of mask) {\n if (i >= raw.length) break;\n if ('lit' in s) {\n out += s.lit;\n continue;\n }\n while (i < raw.length && !KINDS[s.kind].test(raw[i])) i++;\n if (i < raw.length) out += raw[i++];\n }\n return out;\n }\n\n private norm(v: string | null): string {\n const text = this.format(this.extract(v ?? ''));\n return this.config.raw ? this.extract(text) : text;\n }\n\n protected override display(v: string): string {\n return this.format(this.extract(v ?? ''));\n }\n\n override setValue(v: string, silent = false): void {\n super.setValue(this.norm(v), silent);\n }\n\n protected override createControl() {\n const wrap = super.createControl();\n const sample = this.compiled()[0];\n if (!this.config.placeholder) this.input.placeholder = sample.map((s) => ('lit' in s ? s.lit : '_')).join('');\n if (this.masks.every((m) => m.every((s) => 'lit' in s || s.kind === '0'))) this.input.setAttribute('inputmode', 'numeric');\n return wrap;\n }\n\n protected override onInput() {\n const input = this.input;\n const caret = input.selectionStart ?? input.value.length;\n const before = this.extract(input.value.slice(0, caret)).length;\n const raw = this.extract(input.value);\n const text = this.format(raw);\n const atEnd = caret >= input.value.length;\n input.value = text;\n if (!atEnd && document.activeElement === input) {\n // the caret stays after the same number of typed characters\n let n = 0;\n let pos = 0;\n while (pos < text.length && n < before) if (this.extract(text[pos++]).length) n++;\n input.setSelectionRange(pos, pos);\n }\n this.el.classList.toggle('has-value', !!text);\n this.commit(this.config.raw ? this.extract(text) : text);\n if (this.error) this.validate();\n }\n\n protected override check(): string {\n const base = super.check();\n const raw = this.extract(this.value ?? '');\n if (base || !raw) return base;\n const mask = this.pick(raw);\n if (raw.length < slots(mask)) return t('maskIncomplete', { mask: mask.map((s) => ('lit' in s ? s.lit : '_')).join('') });\n return '';\n }\n\n setMask(mask: string | string[]) {\n this.config.mask = mask;\n this.compiled();\n if (this.rendered) this.setValue(this.value, true);\n }\n}\nregister('maskfield', MaskField);\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["addMessages", "KINDS", "compile", "mask", "out", "i", "ch", "slots", "m", "s", "MaskField", "TextField", "a", "b", "text", "masks", "lits", "wild", "raw", "v", "silent", "wrap", "sample", "input", "caret", "before", "atEnd", "n", "pos", "base", "t", "register"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as f,c as v}from"./chunk-DIOJGTUN.js";import{a as u}from"./chunk-TIPK3SCJ.js";import{f as d}from"./chunk-UDXO3KM3.js";import{b as a,f as m}from"./chunk-PZSHOSOS.js";import{e as g,f as l}from"./chunk-S4QD5NID.js";f({maximize:'<path d="M8 3H5a2 2 0 0 0-2 2v3M21 8V5a2 2 0 0 0-2-2h-3M16 21h3a2 2 0 0 0 2-2v-3M3 16v3a2 2 0 0 0 2 2h3"/>'});g("en",{imgZoomIn:"Zoom in",imgZoomOut:"Zoom out",imgReset:"Reset zoom",imgError:"The image could not be loaded"});g("pt-BR",{imgZoomIn:"Aumentar",imgZoomOut:"Diminuir",imgReset:"Restaurar zoom",imgError:"N\xE3o foi poss\xEDvel carregar a imagem"});var p=class extends d{baseCls="op-imagecanvas";stage;img;status;zoom=1;x=0;y=0;pointers=new Map;onRender(){let i=this.config;if(this.img=a("img","op-imagecanvas__img",{draggable:!1}),this.status=a("div","op-imagecanvas__status",{role:"status"}),this.stage=a("div","op-imagecanvas__stage",{tabindex:0,role:"img"},this.img),this.el.append(this.stage,this.status),i.zoomable!==!1&&i.showTools!==!1){let e=(t,s,o)=>{let r=a("button","op-imagecanvas__tool",{type:"button","aria-label":l(s),title:l(s)},v(t));return this.listen(r,"click",o),r};this.el.append(a("div","op-imagecanvas__tools",{},e("minus","imgZoomOut",()=>this.zoomBy(.8)),e("plus","imgZoomIn",()=>this.zoomBy(1.25)),e("maximize","imgReset",()=>this.reset())))}i.ratio&&(this.el.style.aspectRatio=i.ratio),this.listen(this.img,"load",()=>{this.setLoading(!1),this.el.classList.remove("is-error"),this.status.textContent="",this.emit("load")}),this.listen(this.img,"error",()=>{this.setLoading(!1),this.el.classList.add("is-error"),this.status.textContent=l("imgError"),this.emit("error")}),i.zoomable!==!1&&this.bindZoom(),this.setFit(i.fit??"contain"),this.setAlt(i.alt??""),this.setSrc(i.src??"")}bindZoom(){let i=this.stage;this.listen(i,"wheel",t=>{!t.ctrlKey&&!t.metaKey||(t.preventDefault(),this.zoomBy(Math.exp(-t.deltaY*.01),t.clientX,t.clientY))},{passive:!1}),this.listen(i,"dblclick",t=>this.zoom>1?this.reset():this.zoomBy(2,t.clientX,t.clientY)),this.listen(i,"pointerdown",t=>{this.pointers.set(t.pointerId,{x:t.clientX,y:t.clientY}),i.setPointerCapture?.(t.pointerId),this.el.classList.toggle("is-dragging",this.zoom>1)}),this.listen(i,"pointermove",t=>{let s=this.pointers.get(t.pointerId);if(!s)return;let o=[...this.pointers].filter(([n])=>n!==t.pointerId),r=t.clientX-s.x,h=t.clientY-s.y;if(o.length){let n=o[0][1],c=Math.hypot(s.x-n.x,s.y-n.y),y=Math.hypot(t.clientX-n.x,t.clientY-n.y);c&&this.zoomBy(y/c,(t.clientX+n.x)/2,(t.clientY+n.y)/2)}else this.zoom>1&&this.pan(r,h);s.x=t.clientX,s.y=t.clientY});let e=t=>{this.pointers.delete(t.pointerId),this.el.classList.remove("is-dragging")};this.listen(i,"pointerup",e),this.listen(i,"pointercancel",e),this.listen(i,"keydown",t=>{let o={ArrowLeft:[40,0],ArrowRight:[-40,0],ArrowUp:[0,40],ArrowDown:[0,-40]};if(t.key==="+"||t.key==="=")this.zoomBy(1.25);else if(t.key==="-")this.zoomBy(.8);else if(t.key==="0")this.reset();else if(o[t.key]&&this.zoom>1)this.pan(...o[t.key]);else return;t.preventDefault()})}pan(i,e){this.x+=i,this.y+=e,this.paint()}paint(){let i=this.stage.clientWidth,e=this.stage.clientHeight;this.x=m(this.x,-((this.zoom-1)*i)/2,(this.zoom-1)*i/2),this.y=m(this.y,-((this.zoom-1)*e)/2,(this.zoom-1)*e/2),this.img.style.transform=this.zoom===1?"":`translate(${this.x}px, ${this.y}px) scale(${this.zoom})`,this.el.classList.toggle("is-zoomed",this.zoom>1)}zoomTo(i,e,t){let s=m(i,1,this.config.maxZoom??8);if(s===this.zoom||!this.rendered)return;let o=this.stage.getBoundingClientRect(),r=e==null?0:e-(o.left+o.width/2),h=t==null?0:t-(o.top+o.height/2),n=s/this.zoom;this.x=r-(r-this.x)*n,this.y=h-(h-this.y)*n,this.zoom=s,this.paint(),this.emit("zoom",s)}zoomBy(i,e,t){this.zoomTo(this.zoom*i,e,t)}reset(){this.x=this.y=0,this.zoomTo(1),this.paint()}getZoom(){return this.zoom}setSrc(i){this.config.src=i,this.rendered&&(this.zoom=1,this.x=this.y=0,this.paint(),this.el.classList.remove("is-error"),this.status.textContent="",this.setLoading(!!i),i?this.img.src=i:this.img.removeAttribute("src"))}setAlt(i){this.config.alt=i,this.rendered&&(this.img.alt="",this.stage.setAttribute("aria-label",i))}setFit(i){this.config.fit=i,this.rendered&&(this.img.style.objectFit=i)}};u("imagecanvas",p);export{p as a};
|
|
2
|
+
//# sourceMappingURL=chunk-5PYJ6FJK.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/components/base/imagecanvas/imagecanvas.ts"],
|
|
4
|
+
"sourcesContent": ["import { Component, type ComponentConfig } from '../../../core/component';\nimport { register } from '../../../core/registry';\nimport { h, clamp } from '../../../core/dom';\nimport { t, addMessages } from '../../../core/i18n';\nimport { iconEl, registerIcons } from '../icon/icon';\n\nregisterIcons({ maximize: '<path d=\"M8 3H5a2 2 0 0 0-2 2v3M21 8V5a2 2 0 0 0-2-2h-3M16 21h3a2 2 0 0 0 2-2v-3M3 16v3a2 2 0 0 0 2 2h3\"/>' });\n\naddMessages('en', { imgZoomIn: 'Zoom in', imgZoomOut: 'Zoom out', imgReset: 'Reset zoom', imgError: 'The image could not be loaded' });\naddMessages('pt-BR', { imgZoomIn: 'Aumentar', imgZoomOut: 'Diminuir', imgReset: 'Restaurar zoom', imgError: 'N\u00E3o foi poss\u00EDvel carregar a imagem' });\n\nexport interface ImageCanvasConfig extends ComponentConfig {\n src?: string;\n alt?: string;\n /** How the image fills the box at zoom 1. Default `contain`. */\n fit?: 'contain' | 'cover';\n /** Default `true`. */\n zoomable?: boolean;\n /** Default 8. */\n maxZoom?: number;\n /** The zoom buttons. Default `true`. */\n showTools?: boolean;\n /** CSS `aspect-ratio` of the box (e.g. `'16 / 9'`). */\n ratio?: string;\n}\n\n/** An image that fills its box, with zoom and pan. A plain `<img>` moved by a CSS transform. */\nexport class ImageCanvas extends Component<ImageCanvasConfig> {\n protected override baseCls = 'op-imagecanvas';\n private stage!: HTMLElement;\n private img!: HTMLImageElement;\n private status!: HTMLElement;\n private zoom = 1;\n private x = 0;\n private y = 0;\n private pointers = new Map<number, { x: number; y: number }>();\n\n protected override onRender() {\n const c = this.config;\n this.img = h('img', 'op-imagecanvas__img', { draggable: false });\n this.status = h('div', 'op-imagecanvas__status', { role: 'status' });\n this.stage = h('div', 'op-imagecanvas__stage', { tabindex: 0, role: 'img' }, this.img);\n this.el.append(this.stage, this.status);\n if (c.zoomable !== false && c.showTools !== false) {\n const btn = (icon: string, key: string, fn: () => void) => {\n const b = h('button', 'op-imagecanvas__tool', { type: 'button', 'aria-label': t(key), title: t(key) }, iconEl(icon));\n this.listen(b, 'click', fn);\n return b;\n };\n this.el.append(h('div', 'op-imagecanvas__tools', {},\n btn('minus', 'imgZoomOut', () => this.zoomBy(0.8)),\n btn('plus', 'imgZoomIn', () => this.zoomBy(1.25)),\n btn('maximize', 'imgReset', () => this.reset())));\n }\n if (c.ratio) this.el.style.aspectRatio = c.ratio;\n this.listen(this.img, 'load', () => {\n this.setLoading(false);\n this.el.classList.remove('is-error');\n this.status.textContent = '';\n this.emit('load');\n });\n this.listen(this.img, 'error', () => {\n this.setLoading(false);\n this.el.classList.add('is-error');\n this.status.textContent = t('imgError');\n this.emit('error');\n });\n if (c.zoomable !== false) this.bindZoom();\n this.setFit(c.fit ?? 'contain');\n this.setAlt(c.alt ?? '');\n this.setSrc(c.src ?? '');\n }\n\n private bindZoom() {\n const s = this.stage;\n this.listen(s, 'wheel', (e: WheelEvent) => {\n if (!e.ctrlKey && !e.metaKey) return;\n e.preventDefault();\n this.zoomBy(Math.exp(-e.deltaY * 0.01), e.clientX, e.clientY);\n }, { passive: false });\n this.listen(s, 'dblclick', (e: MouseEvent) => (this.zoom > 1 ? this.reset() : this.zoomBy(2, e.clientX, e.clientY)));\n this.listen(s, 'pointerdown', (e: PointerEvent) => {\n this.pointers.set(e.pointerId, { x: e.clientX, y: e.clientY });\n s.setPointerCapture?.(e.pointerId);\n this.el.classList.toggle('is-dragging', this.zoom > 1);\n });\n this.listen(s, 'pointermove', (e: PointerEvent) => {\n const p = this.pointers.get(e.pointerId);\n if (!p) return;\n const others = [...this.pointers].filter(([id]) => id !== e.pointerId);\n const dx = e.clientX - p.x;\n const dy = e.clientY - p.y;\n if (others.length) {\n const q = others[0][1];\n const before = Math.hypot(p.x - q.x, p.y - q.y);\n const after = Math.hypot(e.clientX - q.x, e.clientY - q.y);\n if (before) this.zoomBy(after / before, (e.clientX + q.x) / 2, (e.clientY + q.y) / 2);\n } else if (this.zoom > 1) this.pan(dx, dy);\n p.x = e.clientX;\n p.y = e.clientY;\n });\n const up = (e: PointerEvent) => {\n this.pointers.delete(e.pointerId);\n this.el.classList.remove('is-dragging');\n };\n this.listen(s, 'pointerup', up);\n this.listen(s, 'pointercancel', up);\n this.listen(s, 'keydown', (e: KeyboardEvent) => {\n const step = 40;\n const pan: Record<string, [number, number]> = { ArrowLeft: [step, 0], ArrowRight: [-step, 0], ArrowUp: [0, step], ArrowDown: [0, -step] };\n if (e.key === '+' || e.key === '=') this.zoomBy(1.25);\n else if (e.key === '-') this.zoomBy(0.8);\n else if (e.key === '0') this.reset();\n else if (pan[e.key] && this.zoom > 1) this.pan(...pan[e.key]);\n else return;\n e.preventDefault();\n });\n }\n\n private pan(dx: number, dy: number) {\n this.x += dx;\n this.y += dy;\n this.paint();\n }\n\n /** Keeps the image covering the box, then moves it. */\n private paint() {\n const w = this.stage.clientWidth;\n const hh = this.stage.clientHeight;\n this.x = clamp(this.x, -((this.zoom - 1) * w) / 2, ((this.zoom - 1) * w) / 2);\n this.y = clamp(this.y, -((this.zoom - 1) * hh) / 2, ((this.zoom - 1) * hh) / 2);\n this.img.style.transform = this.zoom === 1 ? '' : `translate(${this.x}px, ${this.y}px) scale(${this.zoom})`;\n this.el.classList.toggle('is-zoomed', this.zoom > 1);\n }\n\n /** Zooms to `level` (1 to `maxZoom`), keeping the point under the pointer (client coordinates) still; the centre by default. */\n zoomTo(level: number, clientX?: number, clientY?: number): void {\n const next = clamp(level, 1, this.config.maxZoom ?? 8);\n if (next === this.zoom || !this.rendered) return;\n const r = this.stage.getBoundingClientRect();\n const px = clientX == null ? 0 : clientX - (r.left + r.width / 2);\n const py = clientY == null ? 0 : clientY - (r.top + r.height / 2);\n const k = next / this.zoom;\n this.x = px - (px - this.x) * k;\n this.y = py - (py - this.y) * k;\n this.zoom = next;\n this.paint();\n this.emit('zoom', next);\n }\n zoomBy(factor: number, clientX?: number, clientY?: number): void {\n this.zoomTo(this.zoom * factor, clientX, clientY);\n }\n reset(): void {\n this.x = this.y = 0;\n this.zoomTo(1);\n this.paint();\n }\n getZoom(): number {\n return this.zoom;\n }\n\n setSrc(src: string): void {\n this.config.src = src;\n if (!this.rendered) return;\n this.zoom = 1;\n this.x = this.y = 0;\n this.paint();\n this.el.classList.remove('is-error');\n this.status.textContent = '';\n this.setLoading(!!src);\n if (src) this.img.src = src;\n else this.img.removeAttribute('src');\n }\n setAlt(alt: string): void {\n this.config.alt = alt;\n if (!this.rendered) return;\n this.img.alt = '';\n this.stage.setAttribute('aria-label', alt);\n }\n setFit(fit: 'contain' | 'cover'): void {\n this.config.fit = fit;\n if (this.rendered) this.img.style.objectFit = fit;\n }\n}\nregister('imagecanvas', ImageCanvas);\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["registerIcons", "addMessages", "ImageCanvas", "Component", "c", "h", "btn", "icon", "key", "fn", "b", "t", "iconEl", "s", "e", "p", "others", "id", "dx", "dy", "q", "before", "after", "up", "pan", "w", "hh", "clamp", "level", "clientX", "clientY", "next", "r", "px", "py", "k", "factor", "src", "alt", "fit", "register"]
|
|
7
|
+
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{c as n}from"./chunk-DIOJGTUN.js";import{a as l}from"./chunk-XR677UYD.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-643FOYQB.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{c as o}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{c as o}from"./chunk-DIOJGTUN.js";import{a as h}from"./chunk-TIPK3SCJ.js";import{f as d}from"./chunk-UDXO3KM3.js";import{b as e}from"./chunk-PZSHOSOS.js";import{e as n,f as r}from"./chunk-S4QD5NID.js";n("en",{stepOptional:"optional",stepDone:"completed",stepError:"has errors",stepSteps:"Steps"});n("pt-BR",{stepOptional:"opcional",stepDone:"conclu\xEDda",stepError:"com erros",stepSteps:"Etapas"});var a=class extends d{baseCls="op-stepper";tag="nav";list;active=0;states=[];onRender(){let t=this.config;this.active=t.active??0,this.el.setAttribute("aria-label",t.ariaLabel??r("stepSteps")),this.list=e("ol","op-stepper__list"),this.el.append(this.list),this.listen(this.list,"click",i=>{let s=i.target.closest(".op-stepper__btn");if(!s||s.disabled)return;let p=Number(s.dataset.i);this.emit("before-select",p)!==!1&&(this.setActive(p),this.emit("select",p))}),this.paint()}steps(){return this.config.steps??[]}paint(){this.list.replaceChildren(...this.steps().map((t,i)=>{let s=this.states[i]??"pending",p=i===this.active,m=e("span","op-stepper__marker",{"aria-hidden":"true"},s==="done"&&!p?o("check"):s==="error"?"!":t.icon?o(t.icon):String(i+1)),c=s==="done"&&!p?r("stepDone"):s==="error"?r("stepError"):"",l=e("button","op-stepper__btn",{type:"button","data-i":i,"aria-current":p?"step":null},m,e("span","op-stepper__text",{},e("span","op-stepper__title",{},t.title),t.description?e("span","op-stepper__desc",{},t.description):"",t.optional?e("span","op-stepper__opt",{},r("stepOptional")):"",c?e("span","op-sr-only",{},c):""));l.disabled=this.config.clickable===!1;let g=i===this.steps().length-1;return e("li",`op-stepper__step${p?" is-current":""}${s==="done"?" is-done":""}${s==="error"?" is-error":""}${t.optional?" is-optional":""}`,{},l,g?"":e("span","op-stepper__line",{"aria-hidden":"true"}))}))}setActive(t){this.active=Math.max(0,Math.min(t,this.steps().length-1)),this.config.active=this.active,this.rendered&&this.paint()}getActive(){return this.active}setStepState(t,i){this.states[t]=i,this.rendered&&this.paint()}getStepState(t){return this.states[t]??"pending"}setSteps(t){this.config.steps=t,this.states=[],this.rendered&&this.paint()}};h("stepper",a);export{a};
|
|
2
|
+
//# sourceMappingURL=chunk-6BOM5KZR.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{c as h}from"./chunk-DIOJGTUN.js";import{a as f}from"./chunk-XR677UYD.js";import{a as u}from"./chunk-TIPK3SCJ.js";import{b as o}from"./chunk-PZSHOSOS.js";import{e as c,f as m}from"./chunk-S4QD5NID.js";c("en",{imgDrop:"Drop an image here or click to choose",imgType:"{name} is not an accepted image type",imgSize:"{name} is larger than {max}",imgCount:"At most {n} images",imgRemove:"Remove {name}"});c("pt-BR",{imgDrop:"Solte uma imagem aqui ou clique para escolher",imgType:"{name} n\xE3o \xE9 um tipo de imagem aceito",imgSize:"{name} \xE9 maior que {max}",imgCount:"No m\xE1ximo {n} imagens",imgRemove:"Remover {name}"});var d=l=>typeof l=="string"?l.split(/[?#]/)[0].split("/").pop()??l:l.name,g=class extends f{baseCls="op-field op-imagefield";zone;picker;list;urls=[];emptyValue(){return this.config.multiple?[]:null}isEmpty(e){return!this.itemsOf(e).length}isEqual(e,i){let s=this.itemsOf(e),t=this.itemsOf(i);return s.length===t.length&&s.every((r,p)=>r===t[p])}itemsOf(e){return e==null?[]:Array.isArray(e)?e:[e]}items(){return this.itemsOf(this.value)}createControl(){return this.zone=o("button","op-imagefield__zone",{type:"button"},h("image"),o("span","op-imagefield__hint")),this.inputEl=this.zone,this.picker=o("input","op-imagefield__picker",{type:"file",tabindex:-1,"aria-hidden":"true"}),this.list=o("div","op-imagefield__list",{role:"list"}),this.listen(this.zone,"click",()=>this.open()),this.listen(this.picker,"change",()=>{this.add(Array.from(this.picker.files??[])),this.picker.value=""}),this.listen(this.zone,"dragover",e=>{e.preventDefault(),this.el.classList.add("is-dragover")}),this.listen(this.zone,"dragleave",()=>this.el.classList.remove("is-dragover")),this.listen(this.zone,"drop",e=>{e.preventDefault(),this.el.classList.remove("is-dragover"),this.add(Array.from(e.dataTransfer?.files??[]))}),this.listen(this.list,"click",e=>{let i=e.target.closest(".op-imagefield__remove");i&&this.remove(Number(i.dataset.i))}),this.own(()=>this.revoke()),o("div","op-imagefield__box",{},this.zone,this.picker,this.list)}onRender(){this.picker.accept=this.config.accept??"image/*",this.picker.multiple=!!this.config.multiple,this.zone.querySelector(".op-imagefield__hint").textContent=this.config.placeholder??m("imgDrop"),super.onRender()}applyValue(e){this.revoke(),this.list.replaceChildren(...this.itemsOf(e).map((i,s)=>{let t=typeof i=="string"?i:this.url(i);return o("div","op-imagefield__item",{role:"listitem"},o("img","op-imagefield__img",{src:t,alt:""}),o("span","op-imagefield__name",{},d(i)),o("button","op-imagefield__remove",{type:"button","data-i":s,"aria-label":m("imgRemove",{name:d(i)})},h("x")))})),this.sync()}url(e){let i=URL.createObjectURL(e);return this.urls.push(i),i}revoke(){for(let e of this.urls.splice(0))URL.revokeObjectURL(e)}sync(){let e=this.config,i=this.items().length,s=e.multiple?!!e.maxFiles&&i>=e.maxFiles:i>0;this.zone.hidden=s||!!e.readonly,this.zone.disabled=this.picker.disabled=!!e.disabled;for(let t of this.list.querySelectorAll(".op-imagefield__remove"))t.hidden=!!e.readonly,t.disabled=!!e.disabled}onDisabled(){this.sync()}onReadonly(){this.sync()}open(){!this.config.disabled&&!this.config.readonly&&this.picker.click()}accepts(e){let i=(this.config.accept??"image/*").split(",").map(t=>t.trim().toLowerCase()).filter(Boolean),s=e.name.toLowerCase();return i.some(t=>t.startsWith(".")?s.endsWith(t):t.endsWith("/*")?e.type.startsWith(t.slice(0,-1)):e.type===t)}add(e){let i=this.config;if(i.disabled||i.readonly)return;let s=this.holdsFocus(),t=[],r="",p=i.multiple?(i.maxFiles??1/0)-this.items().length:1;for(let n of e){let a="";if(this.accepts(n)?i.maxSize!=null&&n.size>i.maxSize?a="size":(t.length>=p||!i.multiple&&t.length)&&(a="count"):a="type",!a){t.push(n);continue}let v=i.maxSize!=null?i.maxSize>=1048576?`${+(i.maxSize/1048576).toFixed(1)} MB`:`${+(i.maxSize/1024).toFixed(1)} KB`:"";r=m(`img${a[0].toUpperCase()}${a.slice(1)}`,{name:n.name,max:v,n:i.maxFiles??1}),this.emit("reject",n,a)}t.length&&this.commit(i.multiple?[...this.items(),...t]:t[0]),r?this.setError(r):t.length&&this.clearError(),s&&this.refocus()}remove(e){if(this.config.disabled||this.config.readonly)return;let i=this.holdsFocus(),s=this.items().filter((t,r)=>r!==e);this.commit(this.config.multiple?s:null),i&&this.refocus()}commit(e){super.commit(e),this.applyValue(e)}holdsFocus(){return this.el.contains(document.activeElement)}refocus(){(this.zone.hidden?this.list.querySelector(".op-imagefield__remove"):this.zone)?.focus()}getDisplayText(){return this.items().map(d).join(", ")}};u("imagefield",g);export{g as a};
|
|
2
|
+
//# sourceMappingURL=chunk-6LJK4QWF.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/components/fields/imagefield/imagefield.ts"],
|
|
4
|
+
"sourcesContent": ["import { Field, type FieldConfig } from '../../../core/field';\nimport { register } from '../../../core/registry';\nimport { h } from '../../../core/dom';\nimport { t, addMessages } from '../../../core/i18n';\nimport { iconEl } from '../../base/icon/icon';\n\naddMessages('en', {\n imgDrop: 'Drop an image here or click to choose',\n imgType: '{name} is not an accepted image type',\n imgSize: '{name} is larger than {max}',\n imgCount: 'At most {n} images',\n imgRemove: 'Remove {name}',\n});\naddMessages('pt-BR', {\n imgDrop: 'Solte uma imagem aqui ou clique para escolher',\n imgType: '{name} n\u00E3o \u00E9 um tipo de imagem aceito',\n imgSize: '{name} \u00E9 maior que {max}',\n imgCount: 'No m\u00E1ximo {n} imagens',\n imgRemove: 'Remover {name}',\n});\n\n/** A new `File`, or the URL (string) of an image already saved. */\nexport type ImageItem = File | string;\nexport type ImageValue = ImageItem | ImageItem[] | null;\n\nexport interface ImageFieldConfig extends FieldConfig<ImageValue> {\n /** The input's `accept` (also checked on dropped files). Default `image/*`. */\n accept?: string;\n /** Bytes. */\n maxSize?: number;\n multiple?: boolean;\n /** With `multiple`. */\n maxFiles?: number;\n placeholder?: string;\n}\n\nconst nameOf = (i: ImageItem) => (typeof i === 'string' ? (i.split(/[?#]/)[0].split('/').pop() ?? i) : i.name);\n\n/** Picks images by click or drop, with a preview. Holds the files; sending them is up to the app. */\nexport class ImageField extends Field<ImageValue, ImageFieldConfig> {\n protected override baseCls = 'op-field op-imagefield';\n private zone!: HTMLButtonElement;\n private picker!: HTMLInputElement;\n private list!: HTMLElement;\n private urls: string[] = [];\n\n protected override emptyValue(): ImageValue {\n return this.config.multiple ? [] : null;\n }\n protected override isEmpty(v: ImageValue): boolean {\n return !this.itemsOf(v).length;\n }\n protected override isEqual(a: ImageValue, b: ImageValue): boolean {\n const x = this.itemsOf(a);\n const y = this.itemsOf(b);\n return x.length === y.length && x.every((i, k) => i === y[k]);\n }\n\n private itemsOf(v: ImageValue): ImageItem[] {\n return v == null ? [] : Array.isArray(v) ? v : [v];\n }\n private items(): ImageItem[] {\n return this.itemsOf(this.value);\n }\n\n protected createControl() {\n this.zone = h('button', 'op-imagefield__zone', { type: 'button' }, iconEl('image'), h('span', 'op-imagefield__hint'));\n this.inputEl = this.zone;\n this.picker = h('input', 'op-imagefield__picker', { type: 'file', tabindex: -1, 'aria-hidden': 'true' });\n this.list = h('div', 'op-imagefield__list', { role: 'list' });\n this.listen(this.zone, 'click', () => this.open());\n this.listen(this.picker, 'change', () => {\n this.add(Array.from(this.picker.files ?? []));\n this.picker.value = '';\n });\n this.listen(this.zone, 'dragover', (e: DragEvent) => {\n e.preventDefault();\n this.el.classList.add('is-dragover');\n });\n this.listen(this.zone, 'dragleave', () => this.el.classList.remove('is-dragover'));\n this.listen(this.zone, 'drop', (e: DragEvent) => {\n e.preventDefault();\n this.el.classList.remove('is-dragover');\n this.add(Array.from(e.dataTransfer?.files ?? []));\n });\n this.listen(this.list, 'click', (e: Event) => {\n const b = (e.target as HTMLElement).closest<HTMLElement>('.op-imagefield__remove');\n if (b) this.remove(Number(b.dataset.i));\n });\n this.own(() => this.revoke());\n return h('div', 'op-imagefield__box', {}, this.zone, this.picker, this.list);\n }\n\n protected override onRender() {\n this.picker.accept = this.config.accept ?? 'image/*';\n this.picker.multiple = !!this.config.multiple;\n (this.zone.querySelector('.op-imagefield__hint') as HTMLElement).textContent = this.config.placeholder ?? t('imgDrop');\n super.onRender();\n }\n\n protected applyValue(v: ImageValue) {\n this.revoke();\n this.list.replaceChildren(\n ...this.itemsOf(v).map((it, i) => {\n const src = typeof it === 'string' ? it : this.url(it);\n return h('div', 'op-imagefield__item', { role: 'listitem' },\n h('img', 'op-imagefield__img', { src, alt: '' }),\n h('span', 'op-imagefield__name', {}, nameOf(it)),\n h('button', 'op-imagefield__remove', { type: 'button', 'data-i': i, 'aria-label': t('imgRemove', { name: nameOf(it) }) }, iconEl('x')));\n }),\n );\n this.sync();\n }\n\n private url(f: File): string {\n const u = URL.createObjectURL(f);\n this.urls.push(u);\n return u;\n }\n private revoke() {\n for (const u of this.urls.splice(0)) URL.revokeObjectURL(u);\n }\n\n /** The zone is there only while there is room for another image and the user may edit. */\n private sync() {\n const c = this.config;\n const n = this.items().length;\n const full = c.multiple ? !!c.maxFiles && n >= c.maxFiles : n > 0;\n this.zone.hidden = full || !!c.readonly;\n this.zone.disabled = this.picker.disabled = !!c.disabled;\n for (const b of this.list.querySelectorAll<HTMLButtonElement>('.op-imagefield__remove')) {\n b.hidden = !!c.readonly;\n b.disabled = !!c.disabled;\n }\n }\n protected override onDisabled() {\n this.sync();\n }\n protected override onReadonly() {\n this.sync();\n }\n\n /** Opens the browser's file picker. */\n open(): void {\n if (!this.config.disabled && !this.config.readonly) this.picker.click();\n }\n\n private accepts(f: File): boolean {\n const rules = (this.config.accept ?? 'image/*').split(',').map((s) => s.trim().toLowerCase()).filter(Boolean);\n const name = f.name.toLowerCase();\n return rules.some((r) => (r.startsWith('.') ? name.endsWith(r) : r.endsWith('/*') ? f.type.startsWith(r.slice(0, -1)) : f.type === r));\n }\n\n /** Adds files with the same checks as a drop. Without `multiple` the first valid file replaces the image. */\n add(files: File[]): void {\n const c = this.config;\n if (c.disabled || c.readonly) return;\n const had = this.holdsFocus();\n const ok: File[] = [];\n let message = '';\n const room = c.multiple ? (c.maxFiles ?? Infinity) - this.items().length : 1;\n for (const f of files) {\n let reason: 'type' | 'size' | 'count' | '' = '';\n if (!this.accepts(f)) reason = 'type';\n else if (c.maxSize != null && f.size > c.maxSize) reason = 'size';\n else if (ok.length >= room || (!c.multiple && ok.length)) reason = 'count';\n if (!reason) {\n ok.push(f);\n continue;\n }\n const max = c.maxSize != null ? (c.maxSize >= 1048576 ? `${+(c.maxSize / 1048576).toFixed(1)} MB` : `${+(c.maxSize / 1024).toFixed(1)} KB`) : '';\n message = t(`img${reason[0].toUpperCase()}${reason.slice(1)}`, { name: f.name, max, n: c.maxFiles ?? 1 });\n this.emit('reject', f, reason);\n }\n if (ok.length) this.commit(c.multiple ? [...this.items(), ...ok] : ok[0]);\n if (message) this.setError(message);\n else if (ok.length) this.clearError();\n if (had) this.refocus();\n }\n\n /** Removes the image at `index`. */\n remove(index: number): void {\n if (this.config.disabled || this.config.readonly) return;\n const had = this.holdsFocus();\n const left = this.items().filter((_, i) => i !== index);\n this.commit(this.config.multiple ? left : null);\n if (had) this.refocus();\n }\n\n protected override commit(v: ImageValue) {\n super.commit(v);\n this.applyValue(v);\n }\n\n private holdsFocus(): boolean {\n return this.el.contains(document.activeElement);\n }\n\n /** The button the keyboard user was on may be gone: move to the one that is left. */\n private refocus() {\n (this.zone.hidden ? this.list.querySelector<HTMLElement>('.op-imagefield__remove') : this.zone)?.focus();\n }\n\n override getDisplayText(): string {\n return this.items().map(nameOf).join(', ');\n }\n}\nregister('imagefield', ImageField);\n"],
|
|
5
|
+
"mappings": "+MAMAA,EAAY,KAAM,CAChB,QAAS,wCACT,QAAS,uCACT,QAAS,8BACT,SAAU,qBACV,UAAW,eACb,CAAC,EACDA,EAAY,QAAS,CACnB,QAAS,gDACT,QAAS,8CACT,QAAS,8BACT,SAAU,2BACV,UAAW,gBACb,CAAC,EAiBD,IAAMC,EAAUC,GAAkB,OAAOA,GAAM,SAAYA,EAAE,MAAM,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,EAAE,IAAI,GAAKA,EAAKA,EAAE,KAG5FC,EAAN,cAAyBC,CAAoC,CAC/C,QAAU,yBACrB,KACA,OACA,KACA,KAAiB,CAAC,EAEP,YAAyB,CAC1C,OAAO,KAAK,OAAO,SAAW,CAAC,EAAI,IACrC,CACmB,QAAQC,EAAwB,CACjD,MAAO,CAAC,KAAK,QAAQA,CAAC,EAAE,MAC1B,CACmB,QAAQC,EAAeC,EAAwB,CAChE,IAAMC,EAAI,KAAK,QAAQF,CAAC,EAClBG,EAAI,KAAK,QAAQF,CAAC,EACxB,OAAOC,EAAE,SAAWC,EAAE,QAAUD,EAAE,MAAM,CAACN,EAAGQ,IAAMR,IAAMO,EAAEC,CAAC,CAAC,CAC9D,CAEQ,QAAQL,EAA4B,CAC1C,OAAOA,GAAK,KAAO,CAAC,EAAI,MAAM,QAAQA,CAAC,EAAIA,EAAI,CAACA,CAAC,CACnD,CACQ,OAAqB,CAC3B,OAAO,KAAK,QAAQ,KAAK,KAAK,CAChC,CAEU,eAAgB,CACxB,YAAK,KAAOM,EAAE,SAAU,sBAAuB,CAAE,KAAM,QAAS,EAAGC,EAAO,OAAO,EAAGD,EAAE,OAAQ,qBAAqB,CAAC,EACpH,KAAK,QAAU,KAAK,KACpB,KAAK,OAASA,EAAE,QAAS,wBAAyB,CAAE,KAAM,OAAQ,SAAU,GAAI,cAAe,MAAO,CAAC,EACvG,KAAK,KAAOA,EAAE,MAAO,sBAAuB,CAAE,KAAM,MAAO,CAAC,EAC5D,KAAK,OAAO,KAAK,KAAM,QAAS,IAAM,KAAK,KAAK,CAAC,EACjD,KAAK,OAAO,KAAK,OAAQ,SAAU,IAAM,CACvC,KAAK,IAAI,MAAM,KAAK,KAAK,OAAO,OAAS,CAAC,CAAC,CAAC,EAC5C,KAAK,OAAO,MAAQ,EACtB,CAAC,EACD,KAAK,OAAO,KAAK,KAAM,WAAa,GAAiB,CACnD,EAAE,eAAe,EACjB,KAAK,GAAG,UAAU,IAAI,aAAa,CACrC,CAAC,EACD,KAAK,OAAO,KAAK,KAAM,YAAa,IAAM,KAAK,GAAG,UAAU,OAAO,aAAa,CAAC,EACjF,KAAK,OAAO,KAAK,KAAM,OAAS,GAAiB,CAC/C,EAAE,eAAe,EACjB,KAAK,GAAG,UAAU,OAAO,aAAa,EACtC,KAAK,IAAI,MAAM,KAAK,EAAE,cAAc,OAAS,CAAC,CAAC,CAAC,CAClD,CAAC,EACD,KAAK,OAAO,KAAK,KAAM,QAAU,GAAa,CAC5C,IAAMJ,EAAK,EAAE,OAAuB,QAAqB,wBAAwB,EAC7EA,GAAG,KAAK,OAAO,OAAOA,EAAE,QAAQ,CAAC,CAAC,CACxC,CAAC,EACD,KAAK,IAAI,IAAM,KAAK,OAAO,CAAC,EACrBI,EAAE,MAAO,qBAAsB,CAAC,EAAG,KAAK,KAAM,KAAK,OAAQ,KAAK,IAAI,CAC7E,CAEmB,UAAW,CAC5B,KAAK,OAAO,OAAS,KAAK,OAAO,QAAU,UAC3C,KAAK,OAAO,SAAW,CAAC,CAAC,KAAK,OAAO,SACpC,KAAK,KAAK,cAAc,sBAAsB,EAAkB,YAAc,KAAK,OAAO,aAAeE,EAAE,SAAS,EACrH,MAAM,SAAS,CACjB,CAEU,WAAWR,EAAe,CAClC,KAAK,OAAO,EACZ,KAAK,KAAK,gBACR,GAAG,KAAK,QAAQA,CAAC,EAAE,IAAI,CAACS,EAAIZ,IAAM,CAChC,IAAMa,EAAM,OAAOD,GAAO,SAAWA,EAAK,KAAK,IAAIA,CAAE,EACrD,OAAOH,EAAE,MAAO,sBAAuB,CAAE,KAAM,UAAW,EACxDA,EAAE,MAAO,qBAAsB,CAAE,IAAAI,EAAK,IAAK,EAAG,CAAC,EAC/CJ,EAAE,OAAQ,sBAAuB,CAAC,EAAGV,EAAOa,CAAE,CAAC,EAC/CH,EAAE,SAAU,wBAAyB,CAAE,KAAM,SAAU,SAAUT,EAAG,aAAcW,EAAE,YAAa,CAAE,KAAMZ,EAAOa,CAAE,CAAE,CAAC,CAAE,EAAGF,EAAO,GAAG,CAAC,CAAC,CAC1I,CAAC,CACH,EACA,KAAK,KAAK,CACZ,CAEQ,IAAII,EAAiB,CAC3B,IAAMC,EAAI,IAAI,gBAAgBD,CAAC,EAC/B,YAAK,KAAK,KAAKC,CAAC,EACTA,CACT,CACQ,QAAS,CACf,QAAWA,KAAK,KAAK,KAAK,OAAO,CAAC,EAAG,IAAI,gBAAgBA,CAAC,CAC5D,CAGQ,MAAO,CACb,IAAMC,EAAI,KAAK,OACTC,EAAI,KAAK,MAAM,EAAE,OACjBC,EAAOF,EAAE,SAAW,CAAC,CAACA,EAAE,UAAYC,GAAKD,EAAE,SAAWC,EAAI,EAChE,KAAK,KAAK,OAASC,GAAQ,CAAC,CAACF,EAAE,SAC/B,KAAK,KAAK,SAAW,KAAK,OAAO,SAAW,CAAC,CAACA,EAAE,SAChD,QAAWX,KAAK,KAAK,KAAK,iBAAoC,wBAAwB,EACpFA,EAAE,OAAS,CAAC,CAACW,EAAE,SACfX,EAAE,SAAW,CAAC,CAACW,EAAE,QAErB,CACmB,YAAa,CAC9B,KAAK,KAAK,CACZ,CACmB,YAAa,CAC9B,KAAK,KAAK,CACZ,CAGA,MAAa,CACP,CAAC,KAAK,OAAO,UAAY,CAAC,KAAK,OAAO,UAAU,KAAK,OAAO,MAAM,CACxE,CAEQ,QAAQF,EAAkB,CAChC,IAAMK,GAAS,KAAK,OAAO,QAAU,WAAW,MAAM,GAAG,EAAE,IAAKC,GAAMA,EAAE,KAAK,EAAE,YAAY,CAAC,EAAE,OAAO,OAAO,EACtGC,EAAOP,EAAE,KAAK,YAAY,EAChC,OAAOK,EAAM,KAAMG,GAAOA,EAAE,WAAW,GAAG,EAAID,EAAK,SAASC,CAAC,EAAIA,EAAE,SAAS,IAAI,EAAIR,EAAE,KAAK,WAAWQ,EAAE,MAAM,EAAG,EAAE,CAAC,EAAIR,EAAE,OAASQ,CAAE,CACvI,CAGA,IAAIC,EAAqB,CACvB,IAAMP,EAAI,KAAK,OACf,GAAIA,EAAE,UAAYA,EAAE,SAAU,OAC9B,IAAMQ,EAAM,KAAK,WAAW,EACtBC,EAAa,CAAC,EAChBC,EAAU,GACRC,EAAOX,EAAE,UAAYA,EAAE,UAAY,KAAY,KAAK,MAAM,EAAE,OAAS,EAC3E,QAAWF,KAAKS,EAAO,CACrB,IAAIK,EAAyC,GAI7C,GAHK,KAAK,QAAQd,CAAC,EACVE,EAAE,SAAW,MAAQF,EAAE,KAAOE,EAAE,QAASY,EAAS,QAClDH,EAAG,QAAUE,GAAS,CAACX,EAAE,UAAYS,EAAG,UAASG,EAAS,SAF7CA,EAAS,OAG3B,CAACA,EAAQ,CACXH,EAAG,KAAKX,CAAC,EACT,QACF,CACA,IAAMe,EAAMb,EAAE,SAAW,KAAQA,EAAE,SAAW,QAAU,GAAG,EAAEA,EAAE,QAAU,SAAS,QAAQ,CAAC,CAAC,MAAQ,GAAG,EAAEA,EAAE,QAAU,MAAM,QAAQ,CAAC,CAAC,MAAS,GAC9IU,EAAUf,EAAE,MAAMiB,EAAO,CAAC,EAAE,YAAY,CAAC,GAAGA,EAAO,MAAM,CAAC,CAAC,GAAI,CAAE,KAAMd,EAAE,KAAM,IAAAe,EAAK,EAAGb,EAAE,UAAY,CAAE,CAAC,EACxG,KAAK,KAAK,SAAUF,EAAGc,CAAM,CAC/B,CACIH,EAAG,QAAQ,KAAK,OAAOT,EAAE,SAAW,CAAC,GAAG,KAAK,MAAM,EAAG,GAAGS,CAAE,EAAIA,EAAG,CAAC,CAAC,EACpEC,EAAS,KAAK,SAASA,CAAO,EACzBD,EAAG,QAAQ,KAAK,WAAW,EAChCD,GAAK,KAAK,QAAQ,CACxB,CAGA,OAAOM,EAAqB,CAC1B,GAAI,KAAK,OAAO,UAAY,KAAK,OAAO,SAAU,OAClD,IAAMN,EAAM,KAAK,WAAW,EACtBO,EAAO,KAAK,MAAM,EAAE,OAAO,CAACC,EAAGhC,IAAMA,IAAM8B,CAAK,EACtD,KAAK,OAAO,KAAK,OAAO,SAAWC,EAAO,IAAI,EAC1CP,GAAK,KAAK,QAAQ,CACxB,CAEmB,OAAOrB,EAAe,CACvC,MAAM,OAAOA,CAAC,EACd,KAAK,WAAWA,CAAC,CACnB,CAEQ,YAAsB,CAC5B,OAAO,KAAK,GAAG,SAAS,SAAS,aAAa,CAChD,CAGQ,SAAU,EACf,KAAK,KAAK,OAAS,KAAK,KAAK,cAA2B,wBAAwB,EAAI,KAAK,OAAO,MAAM,CACzG,CAES,gBAAyB,CAChC,OAAO,KAAK,MAAM,EAAE,IAAIJ,CAAM,EAAE,KAAK,IAAI,CAC3C,CACF,EACAkC,EAAS,aAAchC,CAAU",
|
|
6
|
+
"names": ["addMessages", "nameOf", "i", "ImageField", "Field", "v", "a", "b", "x", "y", "k", "h", "iconEl", "t", "it", "src", "f", "u", "c", "n", "full", "rules", "s", "name", "r", "files", "had", "ok", "message", "room", "reason", "max", "index", "left", "_", "register"]
|
|
7
|
+
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as C}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{a as C}from"./chunk-XR677UYD.js";import{a as E}from"./chunk-TIPK3SCJ.js";import{c as S}from"./chunk-6NCXO5ZP.js";import{c as m}from"./chunk-2UPUC4RK.js";import{b as l}from"./chunk-PZSHOSOS.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-6PZPBPAD.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{f as o}from"./chunk-S4QD5NID.js";import{a as i}from"./chunk-4C666HHU.js";var p={};i(p,{email:()=>y,max:()=>x,maxLength:()=>m,min:()=>g,minLength:()=>s,pattern:()=>l,range:()=>u});var n=t=>typeof t=="string"||Array.isArray(t)?t.length:0,s=(t,e)=>r=>n(r)<t?e??o("minLength",{n:t}):!0,m=(t,e)=>r=>n(r)>t?e??o("maxLength",{n:t}):!0,l=(t,e)=>r=>t.test(String(r))?!0:e??o("pattern"),y=t=>e=>/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(String(e))?!0:t??o("email"),g=(t,e)=>r=>Number(r)<t?e??o("min",{n:t}):!0,x=(t,e)=>r=>Number(r)>t?e??o("max",{n:t}):!0,u=(t,e,r)=>a=>Number(a)<t||Number(a)>e?r??o("range",{min:t,max:e}):!0;export{p as a};
|
|
2
|
+
//# sourceMappingURL=chunk-7Y2GHQRB.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{a as n}from"./chunk-TIPK3SCJ.js";import{f as o}from"./chunk-UDXO3KM3.js";var t=class extends o{baseCls="op-label";build(){let e=document.createElement(this.config.for?"label":"span");return e.className="op-label",this.config.for&&(e.htmlFor=this.config.for),e}onRender(){this.setText(this.config.text??""),this.setVariant(this.config.variant??"default")}setText(e){this.config.text=e,this.rendered&&(this.el.textContent=e)}setVariant(e){if(this.config.variant=e,!!this.rendered)for(let i of["default","muted","title"])this.el.classList.toggle(`op-label--${i}`,i===e)}};n("label",t);export{t as a};
|
|
2
|
+
//# sourceMappingURL=chunk-AQ3RTHG5.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{c as m}from"./chunk-L5SQQFO7.js";import{e as p}from"./chunk-4AA4FQEM.js";import{f as c}from"./chunk-UDXO3KM3.js";import{b as a}from"./chunk-PZSHOSOS.js";import{f as l}from"./chunk-S4QD5NID.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-AT7VFZRB.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{c as g}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{c as g}from"./chunk-DIOJGTUN.js";import{a as d}from"./chunk-TIPK3SCJ.js";import{f as b}from"./chunk-UDXO3KM3.js";import{b as h,f as m}from"./chunk-PZSHOSOS.js";import{e as c,f as o}from"./chunk-S4QD5NID.js";c("en",{pageFirst:"First page",pagePrev:"Previous page",pageNext:"Next page",pageLast:"Last page",pageLabel:"Pagination",pageGoto:"Page {n}",pageInfo:"{from}\u2013{to} of {total}"});c("pt-BR",{pageFirst:"Primeira p\xE1gina",pagePrev:"P\xE1gina anterior",pageNext:"Pr\xF3xima p\xE1gina",pageLast:"\xDAltima p\xE1gina",pageLabel:"Pagina\xE7\xE3o",pageGoto:"P\xE1gina {n}",pageInfo:"{from}\u2013{to} de {total}"});var f=class extends b{baseCls="op-pagination";tag="nav";unsub;onRender(){this.el.setAttribute("aria-label",o("pageLabel")),this.listen(this.el,"click",t=>{let a=t.target.closest("button[data-page]");a&&!a.disabled&&this.setPage(Number(a.dataset.page))}),this.bindStore(this.config.store),this.own(()=>this.unsub?.()),this.paint()}bindStore(t){this.unsub?.(),this.unsub=t?.subscribe(()=>this.paint())}getPage(){return this.config.store?.page??this.config.page??1}size(){return this.config.store?.pageSize||this.config.pageSize||20}total(){return this.config.store?.totalCount??this.config.total??0}pages(){return Math.max(1,Math.ceil(this.total()/this.size()))}setPage(t){t=m(t,1,this.pages()),!(t===this.getPage()||this.emit("before-page-change",t)===!1)&&(this.config.store?this.config.store.setPage(t):(this.config.page=t,this.paint()),this.emit("page-change",t))}setTotal(t){this.config.total=t,this.paint()}setPageSize(t){this.config.pageSize=t,this.paint()}setStore(t){this.config.store=t,this.bindStore(t),this.paint()}window(){let t=this.pages(),a=this.getPage(),n=this.config.siblings??1;if(t<=n*2+5)return Array.from({length:t},(i,s)=>s+1);let p=new Set([1,t,...Array.from({length:n*2+1},(i,s)=>a-n+s)].filter(i=>i>=1&&i<=t)),r=[],e=0;for(let i of[...p].sort((s,l)=>s-l))i-e>1&&r.push(i-e===2?i-1:null),r.push(i),e=i;return r}paint(){if(!this.rendered)return;let t=this.getPage(),a=this.pages(),n=(e,i,s,l=!1,u=!1)=>h("button",`op-button op-button--ghost op-pagination__btn${u?" is-current":""}`,{type:"button","data-page":e,"aria-label":s,"aria-current":u?"page":null,disabled:l},i),p=[n(1,g("chevrons-left"),o("pageFirst"),t===1),n(t-1,g("chevron-left"),o("pagePrev"),t===1),...this.window().map(e=>e==null?h("span","op-pagination__gap",{"aria-hidden":"true"},"\u2026"):n(e,String(e),o("pageGoto",{n:e}),!1,e===t)),n(t+1,g("chevron-right"),o("pageNext"),t===a),n(a,g("chevrons-right"),o("pageLast"),t===a)];if(this.config.showInfo!==!1){let e=this.total(),i=this.size();p.push(h("span","op-pagination__info",{},e?o("pageInfo",{from:(t-1)*i+1,to:Math.min(t*i,e),total:e}):""))}let r=this.el.contains(document.activeElement)?document.activeElement.dataset.page:void 0;this.el.replaceChildren(...p),r&&this.el.querySelector(`[data-page="${r}"]:not(:disabled)`)?.focus()}};d("pagination",f);export{f as a};
|
|
2
|
+
//# sourceMappingURL=chunk-BCVOUMJJ.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{c as r}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{c as r}from"./chunk-BQEFLPDA.js";import{a as o}from"./chunk-TIPK3SCJ.js";import{b as t,c as i}from"./chunk-PZSHOSOS.js";var s=class extends r{baseCls="op-formsection";tag="section";titleEl;descEl;bodyEl;getBody(){return this.bodyEl}build(){let e=super.build();return this.titleEl=t("h3","op-formsection__title",{id:i("op-fsec")}),this.descEl=t("p","op-formsection__desc",{id:i("op-fsec-desc")}),this.bodyEl=t("div","op-formsection__body"),e.append(t("div","op-formsection__aside",{},this.titleEl,this.descEl),this.bodyEl),e.setAttribute("aria-labelledby",this.titleEl.id),e}onRender(){let e=this.config;e.layout??=e.columns?{type:"grid",columns:e.columns}:{type:"vbox"},super.onRender(),this.el.classList.toggle("op-formsection--divided",e.divider!==!1),this.setTitle(e.title??""),this.setDescription(e.description??""),this.setAside(e.aside!==!1)}setTitle(e){this.config.title=e,this.rendered&&(this.titleEl.textContent=e,this.titleEl.hidden=!e)}setDescription(e){this.config.description=e,this.rendered&&(this.descEl.textContent=e,this.descEl.hidden=!e,e?this.el.setAttribute("aria-describedby",this.descEl.id):this.el.removeAttribute("aria-describedby"))}setAside(e){this.config.aside=e,this.rendered&&this.el.classList.toggle("op-formsection--stacked",!e)}};o("formsection",s);export{s as a};
|
|
2
|
+
//# sourceMappingURL=chunk-BIGL3ZVD.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{c as T}from"./chunk-DIOJGTUN.js";import{b as S}from"./chunk-XQHATUKN.js";import{b as h}from"./chunk-PZSHOSOS.js";import{e as _,f as b}from"./chunk-S4QD5NID.js";_("en",{groupTotal:"Total",groupCount:"{n}",groupToggle:"Toggle group"});_("pt-BR",{groupTotal:"Total",groupCount:"{n}",groupToggle:"Alternar grupo"});var A=a=>typeof a=="number"?a:Number(a);function G(a,s){let p=s.map(r=>r.data[a.field]),l=p.filter(r=>r!=null&&r!==""&&!isNaN(A(r))).map(A),g=a.summary;return typeof g=="function"?g(p,s):g==="count"?p.filter(r=>r!=null&&r!=="").length:l.length?g==="sum"?l.reduce((r,y)=>r+y,0):g==="avg"?l.reduce((r,y)=>r+y,0)/l.length:g==="min"?Math.min(...l):Math.max(...l):null}function O(a={}){let s,p=a.by??(a.field?e=>e.data[a.field]:void 0),l=new Set,g=!!a.collapsed,r=[],y=[],M=a.summary??"group",v=e=>e.filter(o=>!o.classList.contains("op-grid__selcell")&&!o.classList.contains("op-grid__actcell"));function L(e,o,u){return{cls:`op-grid__row--total ${u}`,paint(d,f){f.setAttribute("aria-label",e);let t=s.getColumns();v(d).forEach((n,c)=>{let i=t[c];if(!i)return;let E=i.summary?(m=>i.summaryRenderer?i.summaryRenderer(m,i):m==null?"":i.format?S(i.format,m):String(m))(G(i,o)):c===0?e:"";n.replaceChildren(E),n.classList.toggle("op-grid__cell--right",i.align==="right")})}}}function w(){let o=s.getStore().getRange();if(!p)return s.setRowLayout(void 0);let u=new Map;for(let t of o){let n=p(t);u.set(n,[...u.get(n)??[],t])}if(r=[...u.keys()],g){for(let t of r)l.add(String(t));g=!1}let d=[],f=s.getColumns().some(t=>t.summary);for(let[t,n]of u){let c=!l.has(String(t));if(d.push({level:1,expanded:c,cls:"op-grid__row--group",paint(i,E){let[m]=v(i);m.classList.add("is-group-label"),m.replaceChildren(h("span","op-grid__twist",{"aria-hidden":"true"},T("chevron-down")),h("span","op-grid__group-name",{},a.label?a.label(t,n):String(t??"\u2014")),h("span","op-grid__group-count",{},b("groupCount",{n:n.length}))),E.dataset.group=String(t)}}),!!c){for(let i of n)d.push({rec:i,level:2,cls:"is-grouped"});f&&M!=="grand"&&d.push(L(b("groupTotal"),n,"is-group-total"))}}f&&M!=="group"&&d.push(L(b("groupTotal"),o,"is-grand-total")),s.setRowLayout(d)}function k(e,o){let u=String(e),d=o??l.has(u);d!==!l.has(u)&&(d?l.delete(u):l.add(u),w(),s.emit("group-toggle",e,d))}let R=e=>{let o=e?.closest(".op-grid__row--group");return o?r.find(u=>String(u)===o.dataset.group):void 0};return{init(e){s=e;let o=e.el,u=o.querySelector("[role=grid]"),d=t=>{let n=R(t.target);(n!==void 0||t.target.closest(".op-grid__row--group"))&&k(n)},f=t=>{if(t.target!==u)return;let n=s.getRowEntry(s.getActive());if(!n||n.rec||n.level!==1)return;let c=R(document.getElementById(`${s.id}-r${s.getActive()}`)),i=n.expanded;if(t.key==="Enter"||t.key===" ")k(c);else if(t.key==="ArrowRight"&&!i)k(c,!0);else if(t.key==="ArrowLeft"&&i)k(c,!1);else return;t.preventDefault(),t.stopPropagation()};return o.addEventListener("click",d),o.addEventListener("keydown",f,!0),y=[C(e),()=>o.removeEventListener("click",d),()=>o.removeEventListener("keydown",f,!0),()=>s.setRowLayout(void 0)],w(),()=>y.forEach(t=>t())},expandAll(){l.clear(),w()},collapseAll(){for(let e of r)l.add(String(e));w()},toggle:k,setGroupBy(e){p=e===null?void 0:typeof e=="string"?o=>o.data[e]:e,l.clear(),w()}};function C(e){return e.getStore().subscribe(o=>queueMicrotask(()=>!e.destroyed&&w()))}}export{G as a,O as b};
|
|
2
|
+
//# sourceMappingURL=chunk-BJWREA76.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/components/data/grouping/grouping.ts"],
|
|
4
|
+
"sourcesContent": ["// Row grouping with totals for the Grid, as a plugin: `plugins: [grouping({ field: 'event' })]`.\nimport { format } from '../../../data/format';\nimport type { Model } from '../../../data/model';\nimport type { Column } from '../../../data/column';\nimport { h } from '../../../core/dom';\nimport { t, addMessages } from '../../../core/i18n';\nimport { iconEl } from '../../base/icon/icon';\nimport type { Grid, GridPlugin, RowEntry } from '../grid/grid';\n\naddMessages('en', { groupTotal: 'Total', groupCount: '{n}', groupToggle: 'Toggle group' });\naddMessages('pt-BR', { groupTotal: 'Total', groupCount: '{n}', groupToggle: 'Alternar grupo' });\n\nexport interface GroupingOptions {\n /** Record field to group by. */\n field?: string;\n /** Or any function of the record (a year, a range): its result is the group. */\n by?: (rec: Model) => unknown;\n /** Text of a group header (before the count). Default: the key. */\n label?: (key: unknown, recs: Model[]) => string;\n /** Total rows of the columns that have a `summary`: `group` (under each group), `grand` (at the end) or `both`. Default `group`. */\n summary?: 'group' | 'grand' | 'both';\n /** Start with every group closed. */\n collapsed?: boolean;\n}\n\nexport interface Grouping extends GridPlugin {\n expandAll(): void;\n collapseAll(): void;\n /** Changes what to group by; `null` shows the plain list. */\n setGroupBy(by: string | ((rec: Model) => unknown) | null): void;\n /** Opens or closes one group by its key. */\n toggle(key: unknown, open?: boolean): void;\n}\n\nconst num = (v: unknown) => (typeof v === 'number' ? v : Number(v));\n\n/** The value of a column's `summary` over some records. */\nexport function summarize(col: Column, recs: Model[]): unknown {\n const values = recs.map((r) => r.data[col.field]);\n const nums = values.filter((v) => v != null && v !== '' && !isNaN(num(v))).map(num);\n const s = col.summary;\n if (typeof s === 'function') return s(values, recs);\n if (s === 'count') return values.filter((v) => v != null && v !== '').length;\n if (!nums.length) return null;\n if (s === 'sum') return nums.reduce((a, b) => a + b, 0);\n if (s === 'avg') return nums.reduce((a, b) => a + b, 0) / nums.length;\n return s === 'min' ? Math.min(...nums) : Math.max(...nums);\n}\n\n/**\n * Groups the rows of the current page (a remote store groups what it loaded, not the whole set) under a header with\n * its count; the header toggles by click, Enter/Space, \u2192 and \u2190. Sorting works inside each group. Group headers and total\n * rows are virtual rows like any other. Fires `group-toggle(key, open)` on the grid.\n */\nexport function grouping(options: GroupingOptions = {}): Grouping {\n let grid!: Grid;\n let by = options.by ?? (options.field ? (r: Model) => r.data[options.field!] : undefined);\n const closed = new Set<string>();\n let all = !!options.collapsed;\n let keys: unknown[] = [];\n let off: Array<() => void> = [];\n\n const where = options.summary ?? 'group';\n\n /** The cells of the user columns in a row (the checkbox and action cells are not). */\n const userCells = (cells: HTMLElement[]) => cells.filter((c) => !c.classList.contains('op-grid__selcell') && !c.classList.contains('op-grid__actcell'));\n\n function totals(label: string, recs: Model[], cls: string): RowEntry {\n return {\n cls: `op-grid__row--total ${cls}`,\n paint(cells, row) {\n row.setAttribute('aria-label', label);\n const cols = grid.getColumns();\n userCells(cells).forEach((cell, n) => {\n const col = cols[n];\n if (!col) return;\n const out = col.summary ? ((v) => (col.summaryRenderer ? col.summaryRenderer(v, col) : v == null ? '' : col.format ? format(col.format, v) : String(v)))(summarize(col, recs)) : n === 0 ? label : '';\n cell.replaceChildren(out);\n cell.classList.toggle('op-grid__cell--right', col.align === 'right');\n });\n },\n };\n }\n\n function build() {\n const store = grid.getStore();\n const recs = store.getRange();\n if (!by) return grid.setRowLayout(undefined);\n const groups = new Map<unknown, Model[]>();\n for (const r of recs) {\n const k = by(r);\n groups.set(k, [...(groups.get(k) ?? []), r]);\n }\n keys = [...groups.keys()];\n if (all) {\n for (const k of keys) closed.add(String(k));\n all = false;\n }\n const rows: RowEntry[] = [];\n const hasSummary = grid.getColumns().some((c) => c.summary);\n for (const [key, list] of groups) {\n const open = !closed.has(String(key));\n rows.push({\n level: 1,\n expanded: open,\n cls: 'op-grid__row--group',\n paint(cells, row) {\n const [label] = userCells(cells);\n label.classList.add('is-group-label');\n label.replaceChildren(\n h('span', 'op-grid__twist', { 'aria-hidden': 'true' }, iconEl('chevron-down')),\n h('span', 'op-grid__group-name', {}, options.label ? options.label(key, list) : String(key ?? '\u2014')),\n h('span', 'op-grid__group-count', {}, t('groupCount', { n: list.length })),\n );\n row.dataset.group = String(key);\n },\n });\n if (!open) continue;\n for (const rec of list) rows.push({ rec, level: 2, cls: 'is-grouped' });\n if (hasSummary && where !== 'grand') rows.push(totals(t('groupTotal'), list, 'is-group-total'));\n }\n if (hasSummary && where !== 'group') rows.push(totals(t('groupTotal'), recs, 'is-grand-total'));\n grid.setRowLayout(rows);\n }\n\n function toggle(key: unknown, open?: boolean) {\n const id = String(key);\n const to = open ?? closed.has(id);\n if (to === !closed.has(id)) return;\n if (to) closed.delete(id);\n else closed.add(id);\n build();\n grid.emit('group-toggle', key, to);\n }\n\n const keyOfRow = (el: Element | null) => {\n const row = el?.closest<HTMLElement>('.op-grid__row--group');\n return row ? keys.find((k) => String(k) === row.dataset.group) : undefined;\n };\n\n return {\n init(g) {\n grid = g;\n const el = g.el;\n const table = el.querySelector<HTMLElement>('[role=grid]')!;\n const onClick = (e: Event) => {\n const k = keyOfRow(e.target as Element);\n if (k !== undefined || (e.target as Element).closest('.op-grid__row--group')) toggle(k);\n };\n const onKey = (e: KeyboardEvent) => {\n if (e.target !== table) return;\n const active = grid.getRowEntry(grid.getActive());\n if (!active || active.rec || active.level !== 1) return;\n const k = keyOfRow(document.getElementById(`${grid.id}-r${grid.getActive()}`));\n const open = active.expanded;\n if (e.key === 'Enter' || e.key === ' ') toggle(k);\n else if (e.key === 'ArrowRight' && !open) toggle(k, true);\n else if (e.key === 'ArrowLeft' && open) toggle(k, false);\n else return;\n e.preventDefault();\n e.stopPropagation();\n };\n el.addEventListener('click', onClick);\n el.addEventListener('keydown', onKey, true);\n off = [store(g), () => el.removeEventListener('click', onClick), () => el.removeEventListener('keydown', onKey, true), () => grid.setRowLayout(undefined)];\n build();\n return () => off.forEach((f) => f());\n },\n expandAll() {\n closed.clear();\n build();\n },\n collapseAll() {\n for (const k of keys) closed.add(String(k));\n build();\n },\n toggle,\n setGroupBy(next) {\n by = next === null ? undefined : typeof next === 'string' ? (r: Model) => r.data[next] : next;\n closed.clear();\n build();\n },\n };\n\n function store(g: Grid) {\n return g.getStore().subscribe((c) => queueMicrotask(() => !g.destroyed && build()));\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["addMessages", "num", "v", "summarize", "col", "recs", "values", "nums", "s", "a", "b", "grouping", "options", "grid", "by", "r", "closed", "all", "keys", "off", "where", "userCells", "cells", "c", "totals", "label", "cls", "row", "cols", "cell", "n", "out", "format", "build", "groups", "k", "rows", "hasSummary", "key", "list", "open", "iconEl", "t", "rec", "toggle", "id", "to", "keyOfRow", "el", "g", "table", "onClick", "e", "onKey", "active", "store", "f", "next"]
|
|
7
|
+
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{c as m}from"./chunk-TIPK3SCJ.js";import{f as y}from"./chunk-UDXO3KM3.js";import{e as u}from"./chunk-PZSHOSOS.js";var g=new Map;function p(i,t){g.set(i,t)}function h(i){if(typeof i=="object"&&"init"in i)return i;let t=typeof i=="string"?{type:i}:i,o=g.get(t.type);if(!o)throw new Error(`Optikos: unknown layout "${t.type}"`);return o(t)}function c(i,t,o){let e=i.getBody(),n=!1,r=d=>{d!==n&&(n=d,e.classList.toggle("is-narrow",d),o?.(d),i.emit("narrow-change",d))};if(typeof ResizeObserver<"u"){let d=new ResizeObserver(()=>e.clientWidth>0&&r(e.clientWidth<t));d.observe(e),i.own(()=>d.disconnect())}return{isNarrow:()=>n,setNarrow:r}}var f=(i,t=[])=>o=>({init(e){let n=e.getBody();n.classList.add("op-layout",`op-layout-${i}`);for(let r of t)o[r]!=null&&n.style.setProperty(`--op-layout-${r}`,u(o[r]))}});p("fit",f("fit"));var w=f("hbox",["gap","align","justify","wrap"]);p("hbox",i=>{let t=w(i),o;return{...t,init(e){t.init(e),i.stackBelow&&(e.getBody().classList.add("op-layout-stack"),o=c(e,Number(i.stackBelow)))},isNarrow:()=>!!o?.isNarrow(),setNarrow:e=>o?.setNarrow(e)}});p("vbox",f("vbox",["gap","align","justify","wrap"]));p("grid",i=>{let t;return{init(o){let e=o.getBody();e.classList.add("op-layout","op-layout-grid"),i.gap!=null&&e.style.setProperty("--op-layout-gap",u(i.gap));let n=i.columns??1;if(typeof n=="number"){e.style.setProperty("--op-layout-columns",String(n));let r=i.narrowBelow==null?480:Number(i.narrowBelow);r>0&&n>1&&(t=c(o,r))}else e.style.gridTemplateColumns=n},add(o,e){let n=e.config.colspan;n&&(e.el.style.gridColumn=n==="full"?"1 / -1":`span ${n}`)},isNarrow:()=>!!t?.isNarrow(),setNarrow:o=>t?.setNarrow(o)}});p("border",i=>{let t,o,e=()=>Array.from(o.getBody().children).filter(s=>s instanceof HTMLElement&&(s.dataset.region==="west"||s.dataset.region==="east")),n=s=>e().find(a=>a.dataset.region===s),r=()=>o.getBody().classList.toggle("has-open-region",e().some(s=>s.classList.contains("is-open"))),d=s=>{for(let a of e())(!s||a.dataset.region===s)&&a.classList.remove("is-open");r()};return{init(s){o=s;let a=s.getBody();a.classList.add("op-layout","op-layout-border"),i.gap!=null&&a.style.setProperty("--op-layout-gap",u(i.gap)),t=c(s,i.narrowBelow==null?768:Number(i.narrowBelow),l=>{l?i.open&&(n(String(i.open))?.classList.add("is-open"),r()):d()}),s.listen(a,"click",l=>l.target===a&&d()),s.listen(a,"keydown",l=>{l.key==="Escape"&&a.classList.contains("has-open-region")&&a.classList.contains("is-narrow")&&(l.stopPropagation(),d())})},add(s,a){let l=a.config.region??"center";a.el.style.gridArea=l,a.el.dataset.region=l},openRegion(s){let a=n(s);!a||!t?.isNarrow()||(d(),a.classList.add("is-open"),r(),(a.querySelector("input,button,[tabindex]")??a).focus?.())},closeRegion:d,toggleRegion(s){n(s)?.classList.contains("is-open")?d(s):this.openRegion(s)},isRegionOpen:s=>!!n(s)?.classList.contains("is-open"),isNarrow:()=>!!t?.isNarrow(),setNarrow:s=>t?.setNarrow(s)}});p("card",i=>{let t,o=(e,n)=>{t=n;for(let r of e.items)r.rendered?r.el.hidden=r!==n:r.config.hidden=r!==n;e.emit("activate",n)};return{init(e){e.getBody().classList.add("op-layout","op-layout-fit");let n=i.activeItem??e.config.activeItem??0;o(e,typeof n=="number"?e.items[n]:e.items.find(r=>r.id===n))},add(e,n){n.el.hidden=n!==t&&!!t,t||o(e,n)},remove(e,n,r){n===t&&o(e,e.items[Math.min(r,e.items.length-1)])},activate:o,getActive:()=>t}});var C=class i extends y{baseCls="op-container";defaultLayout;items=[];layout;constructor(t={}){super(t),this.items=(t.items??[]).map(o=>this.make(o))}getBody(){return this.el}shorthand(t){throw new Error(`Optikos: no shorthand for item "${t}" in ${this.baseCls}`)}make(t){typeof t=="string"&&(t=this.shorthand(t));let o=t instanceof y?t:m({type:this.config.defaultType,...this.config.defaults,...t});return o.parent=this,o}onRender(){let t=this.config.layout??this.defaultLayout;t&&(this.layout=h(t)).init(this),this.items.forEach((o,e)=>this.attach(o,e))}attach(t,o){let e=this.getBody(),n=this.items.slice(o+1).find(r=>r.rendered&&r.el.parentNode===e);e.insertBefore(t.el,n?.el??null),this.layout?.add?.(this,t,o),this.mounted&&t.notifyMount()}add(t){return this.insert(this.items.length,t)}insert(t,o){let e=this.make(o);return this.items.splice(t,0,e),this.rendered&&this.attach(e,t),this.emit("add",e),e}remove(t,o=!0){let e=typeof t=="number"?t:this.items.findIndex(r=>r===t||r.id===t),n=this.items[e];if(n)return this.items.splice(e,1),n.parent=void 0,this.layout?.remove?.(this,n,e),o?n.destroy():n.rendered&&n.el.remove(),this.emit("remove",n),n}removeAll(t=!0){for(let o of[...this.items])this.remove(o,t)}getItems(){return this.items}get(t){return this.items.find(o=>o.id===t)}query(t){let o=[];for(let e of this.items)t(e)&&o.push(e),e instanceof i&&o.push(...e.query(t));return o}getActiveItem(){return this.layout?.getActive?.(this)}setActiveItem(t){let o=typeof t=="number"?this.items[t]:this.items.find(e=>e===t||e.id===t);o&&this.layout?.activate?.(this,o)}notifyMount(){super.notifyMount();for(let t of this.items)t.notifyMount()}onDestroy(){for(let t of[...this.items])t.destroy()}setDisabled(t){super.setDisabled(t);for(let o of this.items)o.setDisabled(t)}};export{p as a,h as b,C as c};
|
|
2
|
+
//# sourceMappingURL=chunk-BQEFLPDA.js.map
|