optikos 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +19 -0
- package/dist/build.js +2 -0
- package/dist/build.js.map +7 -0
- package/dist/chunk-2CVMT3IW.js +3 -0
- package/dist/chunk-2CVMT3IW.js.map +7 -0
- package/dist/{chunk-JSEI44A7.js → chunk-2I4Y7I7C.js} +2 -2
- package/dist/{chunk-U5L76VVB.js → chunk-2I7HDIOU.js} +2 -2
- package/dist/{chunk-FCJI2JF7.js → chunk-34KVSA2V.js} +2 -2
- package/dist/{chunk-NQV4THNE.js → chunk-37PYJAA2.js} +2 -2
- package/dist/{chunk-JJLOUMCJ.js → chunk-3OA3P37P.js} +2 -2
- package/dist/chunk-5G5PHOZJ.js +2 -0
- package/dist/chunk-5G5PHOZJ.js.map +7 -0
- package/dist/{chunk-S2CMWKVB.js → chunk-5GCTM37D.js} +2 -2
- package/dist/chunk-632LUU52.js +2 -0
- package/dist/chunk-632LUU52.js.map +7 -0
- package/dist/{chunk-RG6SHPHF.js → chunk-6NP4AEV4.js} +2 -2
- package/dist/{chunk-6LJK4QWF.js → chunk-6PPRYSLN.js} +2 -2
- package/dist/{chunk-NNR2FNHG.js → chunk-6TZJO2G2.js} +2 -2
- package/dist/{chunk-DWTDNKXX.js → chunk-A36JFIA3.js} +2 -2
- package/dist/{chunk-CFGCB37K.js → chunk-ADHKL2GM.js} +2 -2
- package/dist/{chunk-CMV3F6HR.js → chunk-AJN66F32.js} +2 -2
- package/dist/{chunk-DWA45BWR.js → chunk-BRGT4O6Q.js} +2 -2
- package/dist/{chunk-643FOYQB.js → chunk-BTGJ3MP4.js} +2 -2
- package/dist/{chunk-AT7VFZRB.js → chunk-CXZKCBQE.js} +2 -2
- package/dist/{chunk-PMOXLQ72.js → chunk-DLRGB5NY.js} +2 -2
- package/dist/chunk-DY3ZYMXD.js +2 -0
- package/dist/chunk-DY3ZYMXD.js.map +7 -0
- package/dist/{chunk-M7FNPRV4.js → chunk-EO777UIN.js} +2 -2
- package/dist/{chunk-HLS5FI55.js → chunk-ESRS5ZQV.js} +2 -2
- package/dist/{chunk-YDX2PCVL.js → chunk-FNZI6MFG.js} +2 -2
- package/dist/{chunk-6PZPBPAD.js → chunk-FSR6BDVO.js} +2 -2
- package/dist/{chunk-ZSPJZ3ZH.js → chunk-G26R2F3W.js} +2 -2
- package/dist/chunk-GLAY4RJF.js +2 -0
- package/dist/chunk-GLAY4RJF.js.map +7 -0
- package/dist/{chunk-SWCB2GMN.js → chunk-GNKVLJ5H.js} +2 -2
- package/dist/chunk-IODSL7KU.js +2 -0
- package/dist/chunk-IODSL7KU.js.map +7 -0
- package/dist/{chunk-EXIADWI7.js → chunk-J2TCHWYD.js} +2 -2
- package/dist/{chunk-IUOEPAWG.js → chunk-J5BZAKC6.js} +2 -2
- package/dist/{chunk-5BMG5ZBY.js → chunk-JBOKM5YA.js} +2 -2
- package/dist/{chunk-N2LS4JD6.js → chunk-L6DOWGBO.js} +2 -2
- package/dist/{chunk-2YRQULDC.js → chunk-LHWY6G6Q.js} +2 -2
- package/dist/chunk-LLHDEUIA.js +2 -0
- package/dist/chunk-LLHDEUIA.js.map +7 -0
- package/dist/chunk-LXWCTCZV.js +2 -0
- package/dist/chunk-LXWCTCZV.js.map +7 -0
- package/dist/{chunk-FPU53CCV.js → chunk-M7HLHGQV.js} +2 -2
- package/dist/{chunk-J5QPFJ7M.js → chunk-MGSCSS7X.js} +2 -2
- package/dist/{chunk-NJ5IFOPR.js → chunk-MM2OC66E.js} +2 -2
- package/dist/{chunk-MNSDGJKA.js → chunk-MQEALOU3.js} +2 -2
- package/dist/{chunk-TQPQ4UEA.js → chunk-NAUSRVB6.js} +2 -2
- package/dist/{chunk-JLKIHXZP.js → chunk-NEVDHDJ4.js} +2 -2
- package/dist/{chunk-F4HZUAKM.js → chunk-NWHH3CYH.js} +2 -2
- package/dist/{chunk-3FCIZKIN.js → chunk-OADWLPSF.js} +2 -2
- package/dist/{chunk-4AZ44KV4.js → chunk-OB3VIRQR.js} +2 -2
- package/dist/{chunk-4CWYF4O7.js → chunk-QOSTS5I3.js} +2 -2
- package/dist/{chunk-XR677UYD.js → chunk-QVBDBGS4.js} +2 -2
- package/dist/{chunk-GEBAYD6N.js → chunk-RMATRKXV.js} +2 -2
- package/dist/{chunk-Z6L55FTN.js → chunk-S3ILIWSW.js} +2 -2
- package/dist/{chunk-P4O57S6N.js → chunk-SEUIIPHS.js} +2 -2
- package/dist/{chunk-R32HPK7R.js → chunk-T5OGUCY2.js} +2 -2
- package/dist/chunk-TMBGEZSD.js +2 -0
- package/dist/chunk-TMBGEZSD.js.map +7 -0
- package/dist/{chunk-5PWPAN62.js → chunk-TVO3Z2BM.js} +2 -2
- package/dist/{chunk-UQRQH2JW.js → chunk-U25QSLAH.js} +2 -2
- package/dist/chunk-UCWICDYG.js +2 -0
- package/dist/{chunk-YXOKWCYS.js.map → chunk-UCWICDYG.js.map} +4 -4
- package/dist/{chunk-C3MWS7P2.js → chunk-UL364TLO.js} +2 -2
- package/dist/chunk-UUAGMZD2.js +2 -0
- package/dist/chunk-UUAGMZD2.js.map +7 -0
- package/dist/chunk-XFDNXSU5.js +2 -0
- package/dist/{chunk-XQHATUKN.js.map → chunk-XFDNXSU5.js.map} +3 -3
- package/dist/{chunk-XFIREDWO.js → chunk-XNRZJP4E.js} +2 -2
- package/dist/{chunk-JE56CJX2.js → chunk-Z6HZY2YG.js} +2 -2
- package/dist/{chunk-3QRA3XOA.js → chunk-ZEIE2OCQ.js} +2 -2
- package/dist/{chunk-4S3HRFQB.js → chunk-ZLYZFHEN.js} +2 -2
- package/dist/components/breadcrumb.js +1 -1
- package/dist/components/button.js +1 -1
- package/dist/components/chart.js +1 -1
- package/dist/components/chat.js +1 -1
- package/dist/components/checkbox.js +1 -1
- package/dist/components/checkboxgroup.js +1 -1
- package/dist/components/codeviewer.js +1 -1
- package/dist/components/columntotals.js +2 -0
- package/dist/components/columntotals.js.map +7 -0
- package/dist/components/combobox.js +1 -1
- package/dist/components/dataview.js +1 -1
- package/dist/components/datefield.js +1 -1
- package/dist/components/daterangefield.js +1 -1
- package/dist/components/datetimefield.js +1 -1
- package/dist/components/dial.js +1 -1
- package/dist/components/dropdown.js +1 -1
- package/dist/components/exportbar.js +2 -0
- package/dist/components/exportbar.js.map +7 -0
- package/dist/components/fieldgroup.js +1 -1
- package/dist/components/fieldlist.js +1 -1
- package/dist/components/filterbuilder.js +1 -1
- package/dist/components/form.js +1 -1
- package/dist/components/formactions.js +1 -1
- package/dist/components/grid.js +1 -1
- package/dist/components/gridexport.js +1 -1
- package/dist/components/grouping.js +1 -1
- package/dist/components/imagefield.js +1 -1
- package/dist/components/inputgroup.js +1 -1
- package/dist/components/lookupfield.js +1 -1
- package/dist/components/maskfield.js +1 -1
- package/dist/components/menu.js +1 -1
- package/dist/components/messagebox.js +1 -1
- package/dist/components/navmenu.js +1 -1
- package/dist/components/numberfield.js +1 -1
- package/dist/components/panel.js +1 -1
- package/dist/components/pickerfield.js +1 -1
- package/dist/components/radiogroup.js +1 -1
- package/dist/components/searchgrid.js +1 -1
- package/dist/components/secretfield.js +1 -1
- package/dist/components/select.js +1 -1
- package/dist/components/shortcuts.js +1 -1
- package/dist/components/slider.js +1 -1
- package/dist/components/stat.js +1 -1
- package/dist/components/stepform.js +1 -1
- package/dist/components/suggestfield.js +1 -1
- package/dist/components/table.js +1 -1
- package/dist/components/textarea.js +1 -1
- package/dist/components/textfield.js +1 -1
- package/dist/components/timeentry.js +2 -0
- package/dist/components/timeentry.js.map +7 -0
- package/dist/components/timefield.js +1 -1
- package/dist/components/timeline.js +1 -1
- package/dist/components/toast.js +1 -1
- package/dist/components/toggle.js +1 -1
- package/dist/components/viewmanager.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/columntotals.css +56 -0
- package/dist/css/exportbar.css +9 -0
- package/dist/css/grid.css +12 -0
- package/dist/css/grouping.css +7 -0
- package/dist/css/timeentry.css +116 -0
- package/dist/css/timeline.css +45 -0
- package/dist/data.js +1 -1
- package/dist/dev.js +1 -1
- package/dist/dev.js.map +2 -2
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/optikos.css +248 -0
- package/dist/types/build/build.d.ts +49 -0
- package/dist/types/build/index.d.ts +1 -0
- package/dist/types/components/columntotals.d.ts +1 -0
- package/dist/types/components/data/columntotals/columntotals.d.ts +24 -0
- package/dist/types/components/data/exportbar/exportbar.d.ts +24 -0
- package/dist/types/components/data/grid/footer.d.ts +6 -0
- package/dist/types/components/data/grouping/controls.d.ts +27 -0
- package/dist/types/components/data/grouping/grouping.d.ts +15 -3
- package/dist/types/components/data/timeentry/timeentry.d.ts +37 -0
- package/dist/types/components/data/timeline/timeline.d.ts +3 -0
- package/dist/types/components/exportbar.d.ts +1 -0
- package/dist/types/components/timeentry.d.ts +1 -0
- package/dist/types/data/column.d.ts +4 -2
- package/dist/types/index.d.ts +4 -0
- package/dist/ui.js +1 -1
- package/package.json +5 -1
- package/dist/chunk-2HNQ2XRY.js +0 -2
- package/dist/chunk-2HNQ2XRY.js.map +0 -7
- package/dist/chunk-BJWREA76.js +0 -2
- package/dist/chunk-BJWREA76.js.map +0 -7
- package/dist/chunk-GFFZTFQH.js +0 -2
- package/dist/chunk-GFFZTFQH.js.map +0 -7
- package/dist/chunk-SB4ICXBV.js +0 -2
- package/dist/chunk-SB4ICXBV.js.map +0 -7
- package/dist/chunk-XQHATUKN.js +0 -2
- package/dist/chunk-YXOKWCYS.js +0 -2
- /package/dist/{chunk-JSEI44A7.js.map → chunk-2I4Y7I7C.js.map} +0 -0
- /package/dist/{chunk-U5L76VVB.js.map → chunk-2I7HDIOU.js.map} +0 -0
- /package/dist/{chunk-FCJI2JF7.js.map → chunk-34KVSA2V.js.map} +0 -0
- /package/dist/{chunk-NQV4THNE.js.map → chunk-37PYJAA2.js.map} +0 -0
- /package/dist/{chunk-JJLOUMCJ.js.map → chunk-3OA3P37P.js.map} +0 -0
- /package/dist/{chunk-S2CMWKVB.js.map → chunk-5GCTM37D.js.map} +0 -0
- /package/dist/{chunk-RG6SHPHF.js.map → chunk-6NP4AEV4.js.map} +0 -0
- /package/dist/{chunk-6LJK4QWF.js.map → chunk-6PPRYSLN.js.map} +0 -0
- /package/dist/{chunk-NNR2FNHG.js.map → chunk-6TZJO2G2.js.map} +0 -0
- /package/dist/{chunk-DWTDNKXX.js.map → chunk-A36JFIA3.js.map} +0 -0
- /package/dist/{chunk-CFGCB37K.js.map → chunk-ADHKL2GM.js.map} +0 -0
- /package/dist/{chunk-CMV3F6HR.js.map → chunk-AJN66F32.js.map} +0 -0
- /package/dist/{chunk-DWA45BWR.js.map → chunk-BRGT4O6Q.js.map} +0 -0
- /package/dist/{chunk-643FOYQB.js.map → chunk-BTGJ3MP4.js.map} +0 -0
- /package/dist/{chunk-AT7VFZRB.js.map → chunk-CXZKCBQE.js.map} +0 -0
- /package/dist/{chunk-PMOXLQ72.js.map → chunk-DLRGB5NY.js.map} +0 -0
- /package/dist/{chunk-M7FNPRV4.js.map → chunk-EO777UIN.js.map} +0 -0
- /package/dist/{chunk-HLS5FI55.js.map → chunk-ESRS5ZQV.js.map} +0 -0
- /package/dist/{chunk-YDX2PCVL.js.map → chunk-FNZI6MFG.js.map} +0 -0
- /package/dist/{chunk-6PZPBPAD.js.map → chunk-FSR6BDVO.js.map} +0 -0
- /package/dist/{chunk-ZSPJZ3ZH.js.map → chunk-G26R2F3W.js.map} +0 -0
- /package/dist/{chunk-SWCB2GMN.js.map → chunk-GNKVLJ5H.js.map} +0 -0
- /package/dist/{chunk-EXIADWI7.js.map → chunk-J2TCHWYD.js.map} +0 -0
- /package/dist/{chunk-IUOEPAWG.js.map → chunk-J5BZAKC6.js.map} +0 -0
- /package/dist/{chunk-5BMG5ZBY.js.map → chunk-JBOKM5YA.js.map} +0 -0
- /package/dist/{chunk-N2LS4JD6.js.map → chunk-L6DOWGBO.js.map} +0 -0
- /package/dist/{chunk-2YRQULDC.js.map → chunk-LHWY6G6Q.js.map} +0 -0
- /package/dist/{chunk-FPU53CCV.js.map → chunk-M7HLHGQV.js.map} +0 -0
- /package/dist/{chunk-J5QPFJ7M.js.map → chunk-MGSCSS7X.js.map} +0 -0
- /package/dist/{chunk-NJ5IFOPR.js.map → chunk-MM2OC66E.js.map} +0 -0
- /package/dist/{chunk-MNSDGJKA.js.map → chunk-MQEALOU3.js.map} +0 -0
- /package/dist/{chunk-TQPQ4UEA.js.map → chunk-NAUSRVB6.js.map} +0 -0
- /package/dist/{chunk-JLKIHXZP.js.map → chunk-NEVDHDJ4.js.map} +0 -0
- /package/dist/{chunk-F4HZUAKM.js.map → chunk-NWHH3CYH.js.map} +0 -0
- /package/dist/{chunk-3FCIZKIN.js.map → chunk-OADWLPSF.js.map} +0 -0
- /package/dist/{chunk-4AZ44KV4.js.map → chunk-OB3VIRQR.js.map} +0 -0
- /package/dist/{chunk-4CWYF4O7.js.map → chunk-QOSTS5I3.js.map} +0 -0
- /package/dist/{chunk-XR677UYD.js.map → chunk-QVBDBGS4.js.map} +0 -0
- /package/dist/{chunk-GEBAYD6N.js.map → chunk-RMATRKXV.js.map} +0 -0
- /package/dist/{chunk-Z6L55FTN.js.map → chunk-S3ILIWSW.js.map} +0 -0
- /package/dist/{chunk-P4O57S6N.js.map → chunk-SEUIIPHS.js.map} +0 -0
- /package/dist/{chunk-R32HPK7R.js.map → chunk-T5OGUCY2.js.map} +0 -0
- /package/dist/{chunk-5PWPAN62.js.map → chunk-TVO3Z2BM.js.map} +0 -0
- /package/dist/{chunk-UQRQH2JW.js.map → chunk-U25QSLAH.js.map} +0 -0
- /package/dist/{chunk-C3MWS7P2.js.map → chunk-UL364TLO.js.map} +0 -0
- /package/dist/{chunk-XFIREDWO.js.map → chunk-XNRZJP4E.js.map} +0 -0
- /package/dist/{chunk-JE56CJX2.js.map → chunk-Z6HZY2YG.js.map} +0 -0
- /package/dist/{chunk-3QRA3XOA.js.map → chunk-ZEIE2OCQ.js.map} +0 -0
- /package/dist/{chunk-4S3HRFQB.js.map → chunk-ZLYZFHEN.js.map} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,25 @@ and the project uses [Semantic Versioning](https://semver.org/). Until 1.0, mino
|
|
|
5
5
|
|
|
6
6
|
## [Unreleased]
|
|
7
7
|
|
|
8
|
+
## [0.5.0] - 2026-11-11
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- `optikos/build`: one `FieldSpec[]` list gives the grid columns (`buildColumns`, `buildGrid`), the form (`buildFields`,
|
|
13
|
+
`buildForm`, groups become fieldsets) and the filter fields (`buildFilterFields`).
|
|
14
|
+
- `timeEntry()` (a Timeline plugin): create, move, resize and remove entries by pointer or keyboard, with snapping,
|
|
15
|
+
overlap control, locked entries, a total per lane against a `target`, and `before-*` / `create` / `change` / `remove` / `edit` events.
|
|
16
|
+
- `grouping({ controls, choices })`: expand all, collapse all and a "Group by" menu as icon buttons inside the grid, beside the
|
|
17
|
+
pager (and the `exportBar()` buttons, which share the row); each one switchable. Icons `expand`, `collapse`.
|
|
18
|
+
- `exportBar()` (a Grid plugin): CSV, Excel, this-page and Print buttons inside the grid, in one row with the pager, each
|
|
19
|
+
one switchable; `exportGrid` / `printGrid` still work from your own buttons. New icons `download`, `printer`, `table`.
|
|
20
|
+
- Column `format: 'duration'` (minutes as `7h 30m`) and `FieldSpec` type `duration`, so totals of time spent read "Sum 72h".
|
|
21
|
+
- Timeline `direction: 'vertical'` (range mode: time runs top to bottom, one column per lane); `timeEntry()` works on it too.
|
|
22
|
+
- `timeEntry({ form })`: your own dialog fills a new entry and edits one.
|
|
23
|
+
- `columnTotals()` (a Grid plugin): a button on each column header opens a menu of totals (sum, average, minimum, maximum,
|
|
24
|
+
count, your own); the choice shows in a bar under the grid, over every filtered row, or (`show: 'modal' | 'toast'`) as a one-off answer; `position: 'top'` puts the bar under the header. The grid fires `header-paint`.
|
|
25
|
+
- Column `summary` on dates: `min` (earliest), `max` (latest) and `count`.
|
|
26
|
+
|
|
8
27
|
## [0.4.0] - 2026-11-10
|
|
9
28
|
|
|
10
29
|
### Added
|
package/dist/build.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a,b,c,d,e}from"./chunk-632LUU52.js";import"./chunk-4OB2IM5L.js";import"./chunk-UCWICDYG.js";import"./chunk-OADWLPSF.js";import"./chunk-ADHKL2GM.js";import"./chunk-2I7HDIOU.js";import"./chunk-SEUIIPHS.js";import"./chunk-BRGT4O6Q.js";import"./chunk-3OA3P37P.js";import"./chunk-QOSTS5I3.js";import"./chunk-TVO3Z2BM.js";import"./chunk-G26R2F3W.js";import"./chunk-6TZJO2G2.js";import"./chunk-S3ILIWSW.js";import"./chunk-BTGJ3MP4.js";import"./chunk-AJN66F32.js";import"./chunk-L6DOWGBO.js";import"./chunk-H25XXQVH.js";import"./chunk-5GCTM37D.js";import"./chunk-NAUSRVB6.js";import"./chunk-EO777UIN.js";import"./chunk-FSR6BDVO.js";import"./chunk-J5BZAKC6.js";import"./chunk-T5OGUCY2.js";import"./chunk-OB3VIRQR.js";import"./chunk-GEJKFE4X.js";import"./chunk-LXWCTCZV.js";import"./chunk-JBOKM5YA.js";import"./chunk-Z6HZY2YG.js";import"./chunk-U25QSLAH.js";import"./chunk-HRW25TMU.js";import"./chunk-3F4MN2BU.js";import"./chunk-SEW5OCQF.js";import"./chunk-LHWY6G6Q.js";import"./chunk-MQEALOU3.js";import"./chunk-6NP4AEV4.js";import"./chunk-AQ3RTHG5.js";import"./chunk-BCVOUMJJ.js";import"./chunk-ESRS5ZQV.js";import"./chunk-DIOJGTUN.js";import"./chunk-2GKIF7A6.js";import"./chunk-OWEQT2HN.js";import"./chunk-BQEFLPDA.js";import"./chunk-QVBDBGS4.js";import"./chunk-E4VNLYO2.js";import"./chunk-676AKAGF.js";import"./chunk-VV7CFMPZ.js";import"./chunk-TIPK3SCJ.js";import"./chunk-UDXO3KM3.js";import"./chunk-PZSHOSOS.js";import"./chunk-IODSL7KU.js";import"./chunk-XFDNXSU5.js";import"./chunk-L5SQQFO7.js";import"./chunk-3VDLX7ET.js";import"./chunk-S4QD5NID.js";import"./chunk-6NCXO5ZP.js";import"./chunk-4AA4FQEM.js";import"./chunk-2UPUC4RK.js";import"./chunk-V5G5JECN.js";import"./chunk-4C666HHU.js";export{a as buildColumns,b as buildFields,c as buildFilterFields,e as buildForm,d as buildGrid};
|
|
2
|
+
//# sourceMappingURL=build.js.map
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{b as S}from"./chunk-MGSCSS7X.js";import{a as A}from"./chunk-JBOKM5YA.js";import{a as E}from"./chunk-MQEALOU3.js";import{c as T}from"./chunk-DIOJGTUN.js";import{b as d}from"./chunk-PZSHOSOS.js";import{b as _}from"./chunk-IODSL7KU.js";import{b as L}from"./chunk-XFDNXSU5.js";import{e as h,f as c}from"./chunk-S4QD5NID.js";h("en",{ctActions:"Column actions: {col}",ctNone:"No total",ctSum:"Sum",ctAvg:"Average",ctMin:"Minimum",ctMax:"Maximum",ctCount:"Count",ctEarliest:"Earliest",ctLatest:"Latest",ctTotals:"Totals",ctResult:"{op} of {col}: {value}",ctRows:"{n} rows"});h("pt-BR",{ctActions:"A\xE7\xF5es da coluna: {col}",ctNone:"Sem total",ctSum:"Soma",ctAvg:"M\xE9dia",ctMin:"M\xEDnimo",ctMax:"M\xE1ximo",ctCount:"Contagem",ctEarliest:"Mais antiga",ctLatest:"Mais recente",ctTotals:"Totais",ctResult:"{op} de {col}: {value}",ctRows:"{n} linhas"});var O=["sum","avg","min","max","count"],k={sum:"ctSum",avg:"ctAvg",min:"ctMin",max:"ctMax",count:"ctCount"},I={number:O,date:["min","max","count"],text:["count"]},q=(i,s)=>{let n=s.map(m=>m.data[i.field]).find(m=>m!=null&&m!=="");return n instanceof Date||typeof n=="string"&&/^\d{4}-\d{2}-\d{2}/.test(n)?"date":typeof n=="number"||typeof n=="string"&&n.trim()!==""&&!isNaN(Number(n))?"number":"text"};function D(i={}){return{init(s){let n=d("div","op-columntotals",{role:"group","aria-label":c("ctTotals")});n.hidden=!0;let m=new E({}),g=s.getStore(),f=()=>g.getFiltered(),v=i.operations??[],b=t=>typeof t.summary=="function"?v.find(l=>l.run===t.summary)?.text:t.summary&&c(k[t.summary]),x=(t,l)=>{let e=_(t,l);return t.summaryRenderer?t.summaryRenderer(e,t):e==null?"":t.format&&typeof t.summary!="function"&&t.summary!=="count"?L(t.format,e):String(e)};function R(t,l){let e=f(),o={...t,summary:l},a=x(o,e),u=c("ctResult",{op:b(o)??"",col:t.header??t.field,value:typeof a=="string"?a:a.textContent??""}),r=c("ctRows",{n:e.length});i.show==="toast"?S({type:"info",title:u,text:r}):A.alert(`${u}
|
|
2
|
+
${r}`,{title:c("ctTotals"),icon:"info"})}function p(){let t=s.getColumns();if(n.hidden=(i.show??"bar")!=="bar"||!t.some(o=>o.summary),n.hidden)return;let l=f(),e=o=>{let a=d("div","op-columntotals__cell"+(o?.align?` op-columntotals__cell--${o.align}`:""),C?{role:"gridcell"}:{});return o?.summary&&a.append(d("span","op-columntotals__op",{},b(o)??""),x(o,l)),a};n.replaceChildren(...s.config.checkboxSelection?[e()]:[],...t.map(e),...s.config.rowActions?.length?[e()]:[])}function N(t,l){let e=q(t,f()),o=i.show===void 0||i.show==="bar",a=r=>{if(!o)return R(t,r);t.summary=t.summary===r?void 0:r,p()},u=r=>o?t.summary===r:void 0;m.setItems([...I[e].map(r=>({text:e==="date"&&r!=="count"?c(r==="min"?"ctEarliest":"ctLatest"):c(k[r]),checked:u(r),handler:()=>a(r)})),...v.map(r=>({text:r.text,checked:u(r.run),handler:()=>a(r.run)})),...o?["-",{text:c("ctNone"),disabled:!t.summary,handler:()=>a(t.summary)}]:[]]),m.showBy(l)}function M(){let t=s.getColumns();for(let l of Array.from(s.el.querySelectorAll(".op-grid__hcell[data-field]"))){let e=t.find(a=>a.field===l.dataset.field);if(!e)continue;let o=d("button","op-columntotals__btn",{type:"button","aria-haspopup":"menu","aria-label":c("ctActions",{col:e.header??e.field})},T("more"));for(let a of["click","pointerdown","keydown"])o.addEventListener(a,u=>u.stopPropagation());o.addEventListener("click",()=>N(e,o)),l.append(o)}p()}let C=i.position==="top";C?(n.classList.add("op-columntotals--top"),n.setAttribute("role","row"),s.el.querySelector(".op-grid__header").after(n)):s.el.querySelector(".op-grid__table").after(n);let y=s.el.querySelector(".op-grid__viewport"),w=()=>n.scrollLeft=y.scrollLeft;y.addEventListener("scroll",w);let B=[s.on("header-paint",M),g.subscribe(p)];return M(),()=>{B.forEach(t=>t()),y.removeEventListener("scroll",w),m.destroy(),n.remove()}}}}export{D as a};
|
|
3
|
+
//# sourceMappingURL=chunk-2CVMT3IW.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/components/data/columntotals/columntotals.ts"],
|
|
4
|
+
"sourcesContent": ["import { h } from '../../../core/dom';\nimport { t, addMessages } from '../../../core/i18n';\nimport { format } from '../../../data/format';\nimport { summarize, type Column } from '../../../data/column';\nimport type { Model } from '../../../data/model';\nimport { Menu } from '../../overlays/menu/menu';\nimport { MessageBox } from '../../overlays/messagebox/messagebox';\nimport { toast } from '../../overlays/toast/toast';\nimport { iconEl } from '../../base/icon/icon';\nimport type { Grid, GridPlugin } from '../grid/grid';\n\naddMessages('en', { ctActions: 'Column actions: {col}', ctNone: 'No total', ctSum: 'Sum', ctAvg: 'Average', ctMin: 'Minimum', ctMax: 'Maximum', ctCount: 'Count', ctEarliest: 'Earliest', ctLatest: 'Latest', ctTotals: 'Totals', ctResult: '{op} of {col}: {value}', ctRows: '{n} rows' });\naddMessages('pt-BR', { ctActions: 'A\u00E7\u00F5es da coluna: {col}', ctNone: 'Sem total', ctSum: 'Soma', ctAvg: 'M\u00E9dia', ctMin: 'M\u00EDnimo', ctMax: 'M\u00E1ximo', ctCount: 'Contagem', ctEarliest: 'Mais antiga', ctLatest: 'Mais recente', ctTotals: 'Totais', ctResult: '{op} de {col}: {value}', ctRows: '{n} linhas' });\n\n/** An operation offered in the column menu besides the built-in ones. */\nexport interface TotalOperation {\n text: string;\n /** The column's values and the records of every filtered row. */\n run: (values: any[], recs: Model[]) => unknown;\n}\n\nexport interface ColumnTotalsOptions {\n /** Your own operations (a median, a weighted mean...). Offered on every column. */\n operations?: TotalOperation[];\n /**\n * Where the answer goes: `'bar'` (default) keeps it in a bar under the grid; `'modal'` answers in a dialog and `'toast'` in a\n * notice, once, and nothing stays on the grid.\n */\n show?: 'bar' | 'modal' | 'toast';\n /** `bar` only: under the grid (default) or `'top'`, right under the header, above the rows (a row of the grid itself). */\n position?: 'bottom' | 'top';\n}\n\ntype Kind = 'number' | 'date' | 'text';\nconst BUILT_IN = ['sum', 'avg', 'min', 'max', 'count'] as const;\nconst LABEL = { sum: 'ctSum', avg: 'ctAvg', min: 'ctMin', max: 'ctMax', count: 'ctCount' } as const;\nconst FOR: Record<Kind, readonly (typeof BUILT_IN)[number][]> = { number: BUILT_IN, date: ['min', 'max', 'count'], text: ['count'] };\n\nconst kindOf = (col: Column, recs: Model[]): Kind => {\n const v = recs.map((r) => r.data[col.field]).find((x) => x != null && x !== '');\n if (v instanceof Date || (typeof v === 'string' && /^\\d{4}-\\d{2}-\\d{2}/.test(v))) return 'date';\n return typeof v === 'number' || (typeof v === 'string' && v.trim() !== '' && !isNaN(Number(v))) ? 'number' : 'text';\n};\n\n/**\n * A button on every column header opens a menu of totals (sum, average, minimum, maximum, count, your own); the choice\n * shows in a bar under the grid, over every filtered row. A column's `summary` is where it starts and where it is kept.\n */\nexport function columnTotals(options: ColumnTotalsOptions = {}): GridPlugin {\n return {\n init(grid: Grid) {\n const bar = h('div', 'op-columntotals', { role: 'group', 'aria-label': t('ctTotals') });\n bar.hidden = true;\n const menu = new Menu({});\n const store = grid.getStore();\n const rows = () => store.getFiltered();\n const custom = options.operations ?? [];\n const active = (col: Column) => (typeof col.summary === 'function' ? custom.find((o) => o.run === col.summary)?.text : col.summary && t(LABEL[col.summary as keyof typeof LABEL]));\n\n const valueOf = (c: Column, recs: Model[]) => {\n const v = summarize(c, recs);\n return c.summaryRenderer ? c.summaryRenderer(v, c) : v == null ? '' : c.format && typeof c.summary !== 'function' && c.summary !== 'count' ? format(c.format, v) : String(v);\n };\n\n /** `modal` and `toast`: the answer for one choice, without touching the column. */\n function announce(col: Column, summary: Column['summary']) {\n const recs = rows();\n const once = { ...col, summary };\n const value = valueOf(once, recs);\n const text = t('ctResult', { op: active(once) ?? '', col: col.header ?? col.field, value: typeof value === 'string' ? value : value.textContent ?? '' });\n const detail = t('ctRows', { n: recs.length });\n if (options.show === 'toast') toast({ type: 'info', title: text, text: detail });\n else void MessageBox.alert(`${text}\\n${detail}`, { title: t('ctTotals'), icon: 'info' });\n }\n\n function paintBar() {\n const cols = grid.getColumns();\n bar.hidden = (options.show ?? 'bar') !== 'bar' || !cols.some((c) => c.summary);\n if (bar.hidden) return;\n const recs = rows();\n const cell = (c?: Column) => {\n const el = h('div', 'op-columntotals__cell' + (c?.align ? ` op-columntotals__cell--${c.align}` : ''), top ? { role: 'gridcell' } : {});\n if (c?.summary) el.append(h('span', 'op-columntotals__op', {}, active(c) ?? ''), valueOf(c, recs));\n return el;\n };\n bar.replaceChildren(...(grid.config.checkboxSelection ? [cell()] : []), ...cols.map(cell), ...(grid.config.rowActions?.length ? [cell()] : []));\n }\n\n function open(col: Column, btn: HTMLElement) {\n const kind = kindOf(col, rows());\n const bar_ = options.show === undefined || options.show === 'bar';\n const pick = (summary: Column['summary']) => {\n if (!bar_) return announce(col, summary);\n col.summary = col.summary === summary ? undefined : summary;\n paintBar();\n };\n const checked = (summary: Column['summary']) => (bar_ ? col.summary === summary : undefined);\n menu.setItems([\n ...FOR[kind].map((op) => ({ text: kind === 'date' && op !== 'count' ? t(op === 'min' ? 'ctEarliest' : 'ctLatest') : t(LABEL[op]), checked: checked(op), handler: () => pick(op) })),\n ...custom.map((o) => ({ text: o.text, checked: checked(o.run), handler: () => pick(o.run) })),\n ...(bar_ ? ['-', { text: t('ctNone'), disabled: !col.summary, handler: () => pick(col.summary) }] : []),\n ]);\n menu.showBy(btn);\n }\n\n function paintHeader() {\n const cols = grid.getColumns();\n for (const cell of Array.from(grid.el.querySelectorAll<HTMLElement>('.op-grid__hcell[data-field]'))) {\n const col = cols.find((c) => c.field === cell.dataset.field);\n if (!col) continue;\n const btn = h('button', 'op-columntotals__btn', { type: 'button', 'aria-haspopup': 'menu', 'aria-label': t('ctActions', { col: col.header ?? col.field }) }, iconEl('more'));\n // the header cell sorts and drags: the button must not start either\n for (const ev of ['click', 'pointerdown', 'keydown']) btn.addEventListener(ev, (e) => e.stopPropagation());\n btn.addEventListener('click', () => open(col, btn));\n cell.append(btn);\n }\n paintBar();\n }\n\n const top = options.position === 'top';\n if (top) {\n bar.classList.add('op-columntotals--top');\n bar.setAttribute('role', 'row');\n grid.el.querySelector('.op-grid__header')!.after(bar);\n } else grid.el.querySelector('.op-grid__table')!.after(bar);\n const viewport = grid.el.querySelector<HTMLElement>('.op-grid__viewport')!;\n const follow = () => (bar.scrollLeft = viewport.scrollLeft);\n viewport.addEventListener('scroll', follow);\n const offs = [grid.on('header-paint', paintHeader), store.subscribe(paintBar)];\n paintHeader();\n return () => {\n offs.forEach((off) => off());\n viewport.removeEventListener('scroll', follow);\n menu.destroy();\n bar.remove();\n };\n },\n };\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["addMessages", "BUILT_IN", "LABEL", "FOR", "kindOf", "col", "recs", "v", "r", "x", "columnTotals", "options", "grid", "bar", "h", "t", "menu", "Menu", "store", "rows", "custom", "active", "o", "valueOf", "c", "summarize", "format", "announce", "summary", "once", "value", "text", "detail", "toast", "MessageBox", "paintBar", "cols", "cell", "el", "top", "open", "btn", "kind", "bar_", "pick", "checked", "op", "paintHeader", "iconEl", "ev", "e", "viewport", "follow", "offs", "off"]
|
|
7
|
+
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as m}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{a as m}from"./chunk-U25QSLAH.js";import{b as f}from"./chunk-676AKAGF.js";import{a as u}from"./chunk-VV7CFMPZ.js";import{a as g}from"./chunk-TIPK3SCJ.js";import{b as p}from"./chunk-PZSHOSOS.js";import{e as d,f as l}from"./chunk-S4QD5NID.js";d("en",{wDockLeft:"Dock to the left",wDockRight:"Dock to the right",wDockTop:"Dock to the top",wDockBottom:"Dock to the bottom",wResize:"Resize"});d("pt-BR",{wDockLeft:"Fixar \xE0 esquerda",wDockRight:"Fixar \xE0 direita",wDockTop:"Fixar em cima",wDockBottom:"Fixar embaixo",wResize:"Redimensionar"});var v=160,w={left:"chevron-left",right:"chevron-right",top:"chevron-up",bottom:"chevron-down"},y={left:"wDockLeft",right:"wDockRight",top:"wDockTop",bottom:"wDockBottom"},b=["right","left","top","bottom"],a=class extends m{baseCls="op-panel op-widget";opened=!1;opener=null;cancelHide;userTools;pos;grip;constructor(e={}){let t=[...e.tools??[]],i=e.sides??["left","right","bottom"];if(e.sideSwitcher)for(let o of i)t.push({icon:w[o],label:l(y[o]),handler:s=>s.setSide(o)});super({closable:!0,closeAction:"hide",floating:!0,side:"right",layout:"fit",hidden:!0,...e,tools:t}),this.userTools=e.tools?.length??0}onRender(){super.onRender();let e=this.config;this.el.setAttribute("role","complementary"),this.el.classList.toggle("is-floating",e.floating!==!1),e.sideSwitcher&&(e.sides??["left","right","bottom"]).forEach((t,i)=>{let o=this.el.querySelectorAll(".op-panel__tool")[this.userTools+i];o&&(o.dataset.side=t)}),this.paintSide(),e.size!=null&&this.setSize(e.size),e.draggable&&e.floating!==!1&&this.initDrag(),this.setResizable(!!e.resizable),this.listen(this.el,"keydown",t=>{t.key==="Escape"&&e.closeOnEsc!==!1&&!t.defaultPrevented&&e.floating!==!1&&(t.stopPropagation(),this.close())})}getSide(){return this.config.side??"right"}setSide(e){e===this.getSide()||!b.includes(e)||(this.config.side=e,this.resetPosition(),this.paintSide(),this.emit("side-change",e))}paintSide(){if(!this.rendered)return;let e=this.getSide();for(let t of b)this.el.classList.toggle(`op-widget--${t}`,t===e);for(let t of Array.from(this.el.querySelectorAll("[data-side]")))t.setAttribute("aria-pressed",String(t.dataset.side===e));this.paintGrip()}getPosition(){return this.pos}resetPosition(){if(!this.pos)return;this.pos=void 0;let e=this.el.style;for(let t of["inset","inset-inline","inset-block","left","top","width","height"])e.removeProperty(t);this.el.classList.remove("is-moved"),this.paintGrip(),this.emit("move",void 0)}moveTo(e,t){let i=this.el;if(!this.pos){let n=i.getBoundingClientRect();n.width&&(i.style.width=`${n.width}px`,i.style.height=`${n.height}px`),i.classList.add("is-moved")}let o=i.offsetWidth||i.getBoundingClientRect().width,s=i.offsetHeight||i.getBoundingClientRect().height;this.pos={x:Math.max(0,Math.min(e,innerWidth-Math.min(o,innerWidth))),y:Math.max(0,Math.min(t,innerHeight-Math.min(s,innerHeight)))},i.style.inset="auto",i.style.left=`${this.pos.x}px`,i.style.top=`${this.pos.y}px`,this.paintGrip(),this.emit("move",this.pos)}initDrag(){let e=this.headerEl;e.classList.add("op-widget__handle"),e.tabIndex=0,e.setAttribute("aria-roledescription","draggable"),this.listen(e,"pointerdown",t=>{if(t.target.closest(".op-panel__tool")||t.button)return;let i=this.el.getBoundingClientRect(),o=t.clientX-i.left,s=t.clientY-i.top;this.el.classList.add("is-dragging");let n=h=>this.moveTo(h.clientX-o,h.clientY-s),r=()=>{this.el.classList.remove("is-dragging"),document.removeEventListener("pointermove",n),document.removeEventListener("pointerup",r)};document.addEventListener("pointermove",n),document.addEventListener("pointerup",r),this.own(r)}),this.listen(e,"keydown",t=>{if(!t.altKey)return;let i=t.shiftKey?64:16,o=this.el.getBoundingClientRect(),s={ArrowLeft:[o.left-i,o.top],ArrowRight:[o.left+i,o.top],ArrowUp:[o.left,o.top-i],ArrowDown:[o.left,o.top+i]};t.key==="Home"?(t.preventDefault(),this.resetPosition()):s[t.key]&&(t.preventDefault(),this.moveTo(...s[t.key]))})}setSize(e){this.config.size=e,this.rendered&&this.el.style.setProperty("--op-widget-size",typeof e=="number"?`${e}px`:e)}setResizable(e){if(this.config.resizable=e,!this.rendered||(this.grip?.remove(),this.grip=void 0,!e||this.config.floating===!1))return;let t=this.grip=p("div","op-widget__resize",{role:"separator",tabindex:0,"aria-label":l("wResize")});this.el.append(t),this.listen(t,"pointerdown",i=>{if(i.button)return;i.preventDefault();let o=this.el.getBoundingClientRect(),s=i.clientX,n=i.clientY;this.el.classList.add("is-resizing");let r=c=>this.resizeBy(o,c.clientX-s,c.clientY-n),h=()=>{this.el.classList.remove("is-resizing"),document.removeEventListener("pointermove",r),document.removeEventListener("pointerup",h)};document.addEventListener("pointermove",r),document.addEventListener("pointerup",h),this.own(h)}),this.listen(t,"keydown",i=>{let o=i.shiftKey?64:16,s={ArrowLeft:[-o,0],ArrowRight:[o,0],ArrowUp:[0,-o],ArrowDown:[0,o]};!s[i.key]||i.altKey||(i.preventDefault(),this.resizeBy(this.el.getBoundingClientRect(),...s[i.key]))}),this.paintGrip()}resizeBy(e,t,i){let o=(n,r)=>Math.round(Math.max(v,Math.min(n,r)));if(this.pos)t&&(this.el.style.width=`${o(e.width+t,innerWidth-this.pos.x)}px`),i&&(this.el.style.height=`${o(e.height+i,innerHeight-this.pos.y)}px`);else{let n=this.getSide(),r=n==="left"||n==="right",h=n==="right"?-t:n==="left"?t:n==="bottom"?-i:i;this.setSize(o((r?e.width:e.height)+h,(r?innerWidth:innerHeight)-32))}this.paintGrip();let s=this.el.getBoundingClientRect();this.emit("resize",{width:Math.round(s.width),height:Math.round(s.height)})}paintGrip(){let e=this.grip;if(!e)return;let t=this.getSide(),i=!!this.pos||t==="left"||t==="right",o=this.el.getBoundingClientRect();e.setAttribute("aria-orientation",i?"vertical":"horizontal"),e.setAttribute("aria-valuemin",String(v)),e.setAttribute("aria-valuenow",String(Math.round(i?o.width:o.height)))}isOpen(){return this.config.floating===!1?!this.isHidden():this.opened}open(){this.show()}setOpen(e=!this.isOpen()){e?this.show():this.hide()}show(){if(this.config.floating===!1)return super.show();if(this.opened||this.destroyed||this.emit("before-show")===!1)return;this.cancelHide?.(),this.opener=document.activeElement;let e=this.el;this.opened=!0,this.config.hidden=!1,f(e,this.opener),e.hidden=!1,this.notifyMount(),requestAnimationFrame(()=>this.opened&&e.classList.add("is-open")),e.tabIndex<0&&!e.hasAttribute("tabindex")&&(e.tabIndex=-1),(this.config.autoFocus&&u(this.getBody())[0]||e).focus(),this.emit("show")}hide(){if(this.config.floating===!1)return super.hide();if(!this.opened||this.emit("before-hide")===!1)return;this.opened=!1,this.config.hidden=!0,this.el.classList.remove("is-open"),this.cancelHide=this.later(()=>this.el.hidden=!0,250);let e=this.opener;e instanceof HTMLElement&&e.isConnected&&this.el.contains(document.activeElement)&&e.focus(),this.emit("hide")}onDestroy(){super.onDestroy(),this.el.remove()}};g("widget",a);export{a};
|
|
2
|
+
//# sourceMappingURL=chunk-2I4Y7I7C.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as m}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{a as m}from"./chunk-QVBDBGS4.js";import{a as u}from"./chunk-TIPK3SCJ.js";import{b as o}from"./chunk-PZSHOSOS.js";import{e as p}from"./chunk-6NCXO5ZP.js";var l=class extends m{baseCls="op-field op-slider";track;fill;knobs=[];bubbles=[];marksEl;get min(){return this.config.min??0}get max(){return this.config.max??100}get step(){return this.config.step??1}get isRange(){return!!this.config.range}emptyValue(){return this.isRange?[this.min,this.max]:this.min}isEmpty(){return!1}fmt(t){return this.config.format?this.config.format(t):String(t)}vals(){return Array.isArray(this.value)?[...this.value]:[this.value]}snap(t){let e=Math.round((t-this.min)/this.step)*this.step+this.min,i=(String(this.step).split(".")[1]??"").length;return Math.max(this.min,Math.min(this.max,Number(e.toFixed(i))))}createControl(){let t=this.config;this.track=o("div","op-slider__track"),this.fill=o("div","op-slider__fill"),this.marksEl=o("div","op-slider__marks",{"aria-hidden":"true"}),this.track.append(this.fill,this.marksEl),this.buildKnobs(),this.listen(this.track,"pointerdown",i=>this.onTrackDown(i));let e=o("div","op-slider__box",{},this.track);return t.showScale&&e.append(o("div","op-slider__scale",{},o("span","",{},this.fmt(this.min)),o("span","",{},this.fmt(this.max)))),this.inputEl=this.knobs[0],e}buildKnobs(){this.knobs.forEach(e=>e.remove()),this.knobs=[],this.bubbles=[];let t=this.isRange?2:1;for(let e=0;e<t;e++){let i=o("span","op-slider__bubble",{"aria-hidden":"true"}),s=o("div","op-slider__knob",{role:"slider",tabindex:0,"aria-orientation":"horizontal","data-i":e},i);this.listen(s,"pointerdown",n=>this.onKnobDown(n,e)),this.listen(s,"keydown",n=>this.onKey(n,e)),this.listen(s,"focus",()=>this.el.classList.add("is-focus-knob")),this.listen(s,"blur",()=>this.el.classList.remove("is-focus-knob")),this.knobs.push(s),this.bubbles.push(i),this.track.append(s)}}onRender(){super.onRender(),this.knobs.forEach(t=>t.setAttribute("aria-labelledby",`${this.id}-label`)),this.el.querySelector(".op-field__label").id=`${this.id}-label`,this.paintMarks(),this.el.classList.toggle("has-bubble-always",this.config.showValue==="always"),this.el.classList.toggle("has-bubble-never",this.config.showValue==="never")}pct(t){return this.max===this.min?0:(t-this.min)/(this.max-this.min)*100}applyValue(t){let e=Array.isArray(t)?t:[t];this.knobs.forEach((n,a)=>{let r=e[a]??e[0];n.style.left=`${this.pct(r)}%`,n.setAttribute("aria-valuemin",String(a===1?e[0]:this.min)),n.setAttribute("aria-valuemax",String(a===0&&this.isRange?e[1]:this.max)),n.setAttribute("aria-valuenow",String(r)),n.setAttribute("aria-valuetext",this.fmt(r)),this.bubbles[a].textContent=this.fmt(r)});let i=this.isRange?this.pct(e[0]):0,s=this.pct(this.isRange?e[1]:e[0]);this.fill.style.left=`${i}%`,this.fill.style.width=`${Math.max(0,s-i)}%`}paintMarks(){let t=this.config.marks;if(this.marksEl.replaceChildren(),!t)return;let e=Array.isArray(t)?t:(()=>{let i=Math.floor((this.max-this.min)/this.step),s=Math.ceil(i/20)||1;return Array.from({length:Math.floor(i/s)+1},(n,a)=>({value:this.min+a*s*this.step}))})();for(let i of e){let s=o("span","op-slider__mark",{},i.label?o("span","op-slider__mark-label",{},i.label):"");s.style.left=`${this.pct(i.value)}%`,this.marksEl.append(s)}}valueAt(t){let e=this.track.getBoundingClientRect();return this.snap(this.min+Math.max(0,Math.min(1,(t.clientX-e.left)/(e.width||1)))*(this.max-this.min))}nearest(t){if(!this.isRange)return 0;let[e,i]=this.vals();return Math.abs(t-e)<=Math.abs(t-i)?t>i?1:0:1}onTrackDown(t){if(t.target.closest(".op-slider__knob")||this.config.disabled||this.config.readonly||t.button)return;let e=this.nearest(this.valueAt(t));this.onKnobDown(t,e)}onKnobDown(t,e){if(this.config.disabled||this.config.readonly||t.button)return;t.preventDefault();let i=this.knobs[e];i.focus(),i.setPointerCapture?.(t.pointerId),this.el.classList.add("is-dragging"),this.emit("slide-start");let s=p(i,"x"),n=t.clientX;this.setAt(e,this.valueAt(t));let a=h=>{s.move(h.clientX-n),n=h.clientX,this.setAt(e,this.valueAt(h))},r=()=>{i.removeEventListener("pointermove",a),i.removeEventListener("pointerup",r),i.removeEventListener("pointercancel",r),this.el.classList.remove("is-dragging"),s.release(),this.flushSettled(),this.emit("slide-end",this.value)};i.addEventListener("pointermove",a),i.addEventListener("pointerup",r),i.addEventListener("pointercancel",r),this.own(r)}setAt(t,e){let i=this.vals();this.isRange?i[t]=t===0?Math.min(e,i[1]):Math.max(e,i[0]):i[0]=e;let s=this.isRange?[i[0],i[1]]:i[0];this.isEqual(s,this.value)||(this.commit(s),this.applyValue(s))}onKey(t,e){if(this.config.disabled||this.config.readonly)return;let i=this.vals(),s=i[e],n=this.step*10,a=this.isRange&&e===1?i[0]:this.min,r=this.isRange&&e===0?i[1]:this.max,h={ArrowRight:s+this.step,ArrowUp:s+this.step,ArrowLeft:s-this.step,ArrowDown:s-this.step,PageUp:s+n,PageDown:s-n,Home:a,End:r};t.key in h&&(t.preventDefault(),this.setAt(e,Math.max(a,Math.min(r,this.snap(h[t.key])))),this.flushSettled(),this.emit("slide-end",this.value))}getPercent(){return this.pct(this.vals()[0])}refresh(){this.rendered&&(this.applyValue(this.value),this.paintMarks())}setMin(t){this.config.min=t,this.value=this.clampAll(this.value),this.refresh()}setMax(t){this.config.max=t,this.value=this.clampAll(this.value),this.refresh()}setStep(t){this.config.step=t,this.value=this.clampAll(this.value),this.refresh()}clampAll(t){return Array.isArray(t)?[this.snap(t[0]),this.snap(t[1])]:this.snap(t)}setRange(t){if(t===this.isRange)return;let e=this.vals();this.config.range=t,this.value=t?[e[0],this.max]:e[0],this.rendered&&(this.buildKnobs(),this.inputEl=this.knobs[0],this.applyValue(this.value))}onDisabled(t){this.knobs.forEach(e=>(e.tabIndex=t?-1:0,e.setAttribute("aria-disabled",String(t))))}onReadonly(t){this.knobs.forEach(e=>e.setAttribute("aria-readonly",String(t)))}};u("slider",l);export{l as a};
|
|
2
|
+
//# sourceMappingURL=chunk-2I7HDIOU.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{a as b}from"./chunk-
|
|
1
|
+
import{a as b}from"./chunk-IODSL7KU.js";var U={csv:"text/csv;charset=utf-8",xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"},y=new TextEncoder,T=t=>typeof t=="string"?t:t.textContent??"",E=t=>/[",\n\r;]/.test(t)?`"${t.replace(/"/g,'""')}"`:t,A=t=>/^[=+@]/.test(t)||/^-[^\d.,]/.test(t)?`'${t}`:t;function k(t,r){let e=t.getColumns();return{head:e.map(n=>n.header??n.field),rows:r.map(n=>e.map(o=>{let c=n.data[o.field];return typeof c=="number"&&!o.format&&!o.renderer?c:A(T(b(o,n)))}))}}var w=(()=>{let t=Array.from({length:256},(r,e)=>{for(let n=0;n<8;n++)e=e&1?3988292384^e>>>1:e>>>1;return e>>>0});return r=>{let e=-1;for(let n of r)e=t[(e^n)&255]^e>>>8;return~e>>>0}})();function C(t){let r=[],e=[],n=0,o=(p,l,a)=>p.setUint32(l,a,!0);for(let[p,l]of Object.entries(t)){let a=y.encode(p),i=y.encode(l),u=new Uint8Array(30+a.length),f=new DataView(u.buffer);o(f,0,67324752),f.setUint16(4,20,!0),f.setUint16(6,2048,!0),o(f,14,w(i)),o(f,18,i.length),o(f,22,i.length),f.setUint16(26,a.length,!0),u.set(a,30);let g=new Uint8Array(46+a.length),h=new DataView(g.buffer);o(h,0,33639248),h.setUint16(4,20,!0),h.setUint16(6,20,!0),h.setUint16(8,2048,!0),o(h,16,w(i)),o(h,20,i.length),o(h,24,i.length),h.setUint16(28,a.length,!0),o(h,42,n),g.set(a,46),e.push(g),r.push(u,i),n+=u.length+i.length}let c=e.reduce((p,l)=>p+l.length,0),s=new Uint8Array(22),m=new DataView(s.buffer);o(m,0,101010256),m.setUint16(8,e.length,!0),m.setUint16(10,e.length,!0),o(m,12,c),o(m,16,n);let d=new Uint8Array(n+c+22),x=0;for(let p of[...r,...e,s])d.set(p,x),x+=p.length;return d}var S=t=>t.replace(/[&<>"]/g,r=>`&#${r.charCodeAt(0)};`).replace(/[\u0000-\u0008\u000b\u000c\u000e-\u001f]/g,""),v=(t,r)=>{let e="";for(let n=t+1;n>0;n=Math.floor((n-1)/26))e=String.fromCharCode(65+(n-1)%26)+e;return e+(r+1)};function R(t,r){let e=(c,s,m,d=!1)=>typeof c=="number"?`<c r="${v(s,m)}"><v>${c}</v></c>`:`<c r="${v(s,m)}" t="inlineStr"${d?' s="1"':""}><is><t xml:space="preserve">${S(c)}</t></is></c>`,o={"[Content_Types].xml":'<?xml version="1.0" encoding="UTF-8"?><Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"><Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/><Default Extension="xml" ContentType="application/xml"/><Override PartName="/xl/workbook.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"/><Override PartName="/xl/worksheets/sheet1.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/><Override PartName="/xl/styles.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml"/></Types>',"_rels/.rels":'<?xml version="1.0" encoding="UTF-8"?><Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/></Relationships>',"xl/workbook.xml":'<?xml version="1.0" encoding="UTF-8"?><workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"><sheets><sheet name="Sheet1" sheetId="1" r:id="rId1"/></sheets></workbook>',"xl/_rels/workbook.xml.rels":'<?xml version="1.0" encoding="UTF-8"?><Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="worksheets/sheet1.xml"/><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="styles.xml"/></Relationships>',"xl/styles.xml":'<?xml version="1.0" encoding="UTF-8"?><styleSheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"><fonts count="2"><font><sz val="11"/><name val="Calibri"/></font><font><b/><sz val="11"/><name val="Calibri"/></font></fonts><fills count="2"><fill><patternFill patternType="none"/></fill><fill><patternFill patternType="gray125"/></fill></fills><borders count="1"><border/></borders><cellStyleXfs count="1"><xf/></cellStyleXfs><cellXfs count="2"><xf/><xf fontId="1" applyFont="1"/></cellXfs></styleSheet>',"xl/worksheets/sheet1.xml":`<?xml version="1.0" encoding="UTF-8"?><worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"><sheetData>${[t,...r].map((c,s)=>`<row r="${s+1}">${c.map((m,d)=>e(m,d,s,s===0)).join("")}</row>`).join("")}</sheetData></worksheet>`};return new Blob([C(o)],{type:U.xlsx})}async function O(t,r={}){let{format:e="csv",filename:n="export",scope:o="all",download:c=!0}=r,s=t.getStore(),m=o==="page"?s.getRange():await s.fetchAll(r.pageSize),{head:d,rows:x}=k(t,m),p=e==="xlsx"?R(d,x):new Blob(["\uFEFF"+[d,...x].map(l=>l.map(a=>E(String(a))).join(",")).join(`\r
|
|
2
2
|
`)],{type:U.csv});if(c){let l=document.createElement("a");l.href=URL.createObjectURL(p),l.download=`${n}.${e}`,document.body.append(l),l.click(),l.remove(),setTimeout(()=>URL.revokeObjectURL(l.href),1e3)}return p}async function $(t,r={}){let e=t.getStore(),n=r.scope==="page"?e.getRange():await e.fetchAll(r.pageSize),{head:o,rows:c}=k(t,n),s=document.createElement("div");s.className="op-print-sheet";let m=(a,i)=>Object.assign(document.createElement(a),{textContent:String(i)}),d=(a,i)=>{let u=document.createElement("tr");return u.append(...i.map(f=>m(a,f))),u},x=document.createElement("table"),p=document.createElement("thead");p.append(d("th",o));let l=document.createElement("tbody");l.append(...c.map(a=>d("td",a))),x.append(p,l),r.title&&s.append(Object.assign(document.createElement("h1"),{textContent:r.title})),s.append(x),document.body.append(s),document.documentElement.classList.add("op-printing"),await new Promise(a=>{let i=()=>{window.removeEventListener("afterprint",i),s.remove(),document.documentElement.classList.remove("op-printing"),a()};window.addEventListener("afterprint",i),window.print(),typeof matchMedia!="function"&&setTimeout(i,0)})}export{O as a,$ as b};
|
|
3
|
-
//# sourceMappingURL=chunk-
|
|
3
|
+
//# sourceMappingURL=chunk-34KVSA2V.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as v}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{a as v}from"./chunk-JBOKM5YA.js";import{a as m}from"./chunk-MQEALOU3.js";import{a as w}from"./chunk-ESRS5ZQV.js";import{a as c}from"./chunk-TIPK3SCJ.js";import{f}from"./chunk-UDXO3KM3.js";import{b as u}from"./chunk-PZSHOSOS.js";import{e as d,f as n}from"./chunk-S4QD5NID.js";d("en",{views:"Views",viewsName:"Name for this view",viewsSave:"Save view",viewsSaveAs:"Save as new view\u2026",viewsDefault:"Open with this view",viewsDelete:"Delete view",viewsConfirmDelete:'Delete the view "{n}"?',viewsReset:"Reset to initial"});d("pt-BR",{views:"Vis\xF5es",viewsName:"Nome desta vis\xE3o",viewsSave:"Salvar vis\xE3o",viewsSaveAs:"Salvar como nova vis\xE3o\u2026",viewsDefault:"Abrir com esta vis\xE3o",viewsDelete:"Excluir vis\xE3o",viewsConfirmDelete:'Excluir a vis\xE3o "{n}"?',viewsReset:"Voltar ao inicial"});var g=()=>globalThis.crypto?.randomUUID?.()??`${Date.now()}-${Math.random().toString(36).slice(2)}`;function M(a,e=localStorage){let t=()=>{try{let s=JSON.parse(e.getItem(a)??"[]");return Array.isArray(s)?s:[]}catch{return[]}},i=s=>e.setItem(a,JSON.stringify(s));return{list:t,save(s){let r={...s,id:s.id??g()},o=t(),h=o.findIndex(p=>p.id===r.id);return h<0?o.push(r):o[h]=r,i(o),r},remove(s){i(t().filter(r=>r.id!==s.id))}}}function P(a){let e=async(t,i="",s)=>{let r=await(a.fetch??fetch)(a.url+i,{method:t,headers:{"Content-Type":"application/json",...a.headers},body:s===void 0?void 0:JSON.stringify(s)});if(!r.ok)throw new Error(`Optikos views: ${t} ${a.url+i} \u2192 ${r.status}`);return r.status===204?void 0:r.json().catch(()=>{})};return{list:()=>e("GET"),save:t=>t.id?e("PUT",`/${encodeURIComponent(t.id)}`,t):e("POST","",t),remove:t=>e("DELETE",`/${encodeURIComponent(t.id)}`).then(()=>{})}}var l=class extends f{baseCls="op-viewmanager";btn;menu;views=[];current;initial={};build(){return this.btn=new w({text:n("views"),icon:"menu",variant:"ghost",handler:()=>this.openMenu()}),this.btn.el.setAttribute("aria-haspopup","menu"),this.own(()=>(this.btn.destroy(),this.menu?.destroy())),u("span",this.baseCls,{},this.btn.el)}onRender(){this.config.grid.render(),this.config.filters?.render(),this.initial=this.getState(),this.config.autoLoad!==!1&&this.reload()}notifyMount(){super.notifyMount(),this.btn.notifyMount()}getState(){let{grid:e,filters:t,extra:i}=this.config,s={columns:e.getColumnState(),filter:t?.getFilter()??null,sorters:[...e.getStore().getSorters()]};return i&&(s.extra=Object.fromEntries(Object.entries(i).map(([r,o])=>[r,o.get()]))),s}setState(e){let{grid:t,filters:i,extra:s}=this.config;e.columns&&t.setColumnState(e.columns);let r=e.sorters?.[0];t.getStore().sort(r?.field??null,r?.dir),i&&(i.setFilter(e.filter??null),i.apply());for(let o in e.extra)s?.[o]?.set(e.extra[o])}getViews(){return this.views}getCurrent(){return this.current}async reload(){await this.run(async()=>{this.views=await this.config.storage.list()??[],this.current=this.current&&this.views.find(t=>t.id===this.current.id);let e=this.views.find(t=>t.default);!this.current&&e&&this.config.autoLoad!==!1&&this.apply(e),this.paint()}),this.emit("load",this.views)}apply(e){let t=typeof e=="string"?this.views.find(i=>i.id===e):e;!t||this.emit("before-apply",t)===!1||(this.current=t,this.setState(t.state),this.paint(),this.emit("apply",t))}async save(){if(!this.current)return this.saveAs();await this.store({...this.current,state:this.getState()})}async saveAs(e){if(e??=await v.prompt(n("viewsName"),{title:n("viewsSaveAs")})??"",e=e.trim(),!e)return;let t=this.views.find(i=>i.name.toLowerCase()===e.toLowerCase());await this.store({...t,name:e,state:this.getState()})}async setDefault(e=!0){if(this.current){for(let t of this.views)t!==this.current&&t.default&&await this.store({...t,default:!1},!1);await this.store({...this.current,default:e})}}async remove(e=this.current){!e||!await v.confirm(n("viewsConfirmDelete",{n:e.name}),{danger:!0,okText:n("viewsDelete")})||await this.run(async()=>{await this.config.storage.remove(e),this.views=this.views.filter(t=>t!==e&&t.id!==e.id),this.current?.id===e.id&&(this.current=void 0),this.paint(),this.emit("remove",e)})}reset(){this.current=void 0,this.setState(this.initial),this.paint(),this.emit("reset")}async store(e,t=!0){await this.run(async()=>{let i=await this.config.storage.save(e)||e,s=this.views.findIndex(r=>i.id&&r.id===i.id||r===e);s<0?this.views.push(i):this.views[s]=i,t&&(this.current=i),this.paint(),this.emit("save",i)})}async run(e){try{await e()}catch(t){this.emit("error",t)}}paint(){this.btn.setText(this.current?.name??n("views"))}openMenu(){let e=this.current,t=[...this.views.map(i=>({text:i.default?`${i.name} \u2605`:i.name,checked:i===e||!!e?.id&&i.id===e.id,handler:()=>this.apply(i)})),...this.views.length?["-"]:[],{text:n("viewsSave"),handler:()=>{this.save()}},{text:n("viewsSaveAs"),handler:()=>{this.saveAs()}},...e?[{text:n("viewsDefault"),checked:!!e.default,handler:()=>{this.setDefault(!e.default)}},{text:n("viewsDelete"),handler:()=>{this.remove()}}]:[],"-",{text:n("viewsReset"),handler:()=>this.reset()}];this.menu??=new m({}),this.menu.setItems(t),this.menu.showBy(this.btn.el)}};c("viewmanager",l);export{M as a,P as b,l as c};
|
|
2
|
+
//# sourceMappingURL=chunk-37PYJAA2.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as f}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{a as f}from"./chunk-QOSTS5I3.js";import{a as p,c as g,d as m,e as k}from"./chunk-J5BZAKC6.js";import{a as h}from"./chunk-Z6HZY2YG.js";import{c}from"./chunk-DIOJGTUN.js";import{a as u}from"./chunk-TIPK3SCJ.js";import{b as a}from"./chunk-PZSHOSOS.js";import{e as l,f as n}from"./chunk-S4QD5NID.js";l("en",{lookupOpen:"Open search",lookupSelect:"Select"});l("pt-BR",{lookupOpen:"Abrir pesquisa",lookupSelect:"Selecionar"});var d=class extends f{baseCls="op-field op-textfield op-picker op-suggest op-lookup";def;suggestStore;win;constructor(e){let t=g(e.lookup);super({...e,icon:!1,valueField:t.valueField??"id",displayField:t.displayField??"name",query:o=>this.suggest(o)}),this.def=t}async suggest(e){let t=this.suggestStore??=m(this.def),o=this.def.queryField??(this.def.filters?.[0]&&p(this.def.filters[0]).name)??this.config.displayField,i=this.def.filters?.map(p).find(s=>s.name===o)?.field??o;return await t.filter({field:i,op:"contains",value:e}),t.getData()}createControl(){let e=super.createControl(),t=a("button","op-picker__trigger op-lookup__btn",{type:"button",tabindex:-1,"aria-label":n("lookupOpen"),"aria-haspopup":"dialog"},c("search"));return this.listen(t,"mousedown",o=>o.preventDefault()),this.listen(t,"click",()=>this.openDialog()),e.append(t),this.own(()=>this.win?.destroy()),e}onKey(e){e.key==="F4"||e.altKey&&e.key==="ArrowDown"?(e.preventDefault(),this.openDialog()):super.onKey(e)}onDisabled(e){super.onDisabled(e),this.el.querySelector(".op-lookup__btn").disabled=e}openDialog(){if(this.win||this.config.disabled||this.config.readonly||!this.rendered)return;this.close();let e=this.def,t=new k({lookup:e,flex:1}),o=this.typed?this.input.value:"";t.on("confirm",r=>i(r));let i=r=>{r[0]&&this.pickRecord(r[0]),s.close()},s=this.win=new h({title:e.title??n("search"),width:e.width??720,height:e.height??520,layout:"fit",items:[t],buttons:[{text:n("cancel"),handler:()=>s.close()},{text:n("lookupSelect"),variant:"primary",handler:()=>i(t.getSelection())}]});s.on("destroy",()=>{this.win=void 0,this.rendered&&this.input.focus()}),s.show(),o&&t.search(o)}pickRecord(e){let{valueField:t,displayField:o}=this.config,i={value:e.get(t),label:String(e.get(o)??e.get(t)??""),raw:e.data};this.pick(i)}};u("lookupfield",d);export{d as a};
|
|
2
|
+
//# sourceMappingURL=chunk-3OA3P37P.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as I}from"./chunk-DY3ZYMXD.js";import{a as D}from"./chunk-MQEALOU3.js";import{a as S}from"./chunk-ESRS5ZQV.js";import{a as B,c as T}from"./chunk-DIOJGTUN.js";import{b as x}from"./chunk-PZSHOSOS.js";import{b as R}from"./chunk-IODSL7KU.js";import{b as L}from"./chunk-XFDNXSU5.js";import{e as v,f}from"./chunk-S4QD5NID.js";v("en",{gcExpand:"Expand all",gcCollapse:"Collapse all",gcBy:"Group by",gcNone:"No grouping",gcActions:"Groups"});v("pt-BR",{gcExpand:"Expandir tudo",gcCollapse:"Recolher tudo",gcBy:"Agrupar por",gcNone:"Sem agrupamento",gcActions:"Grupos"});B({expand:'<path d="m7 15 5 5 5-5M7 9l5-5 5 5"/>',collapse:'<path d="m7 20 5-5 5 5M7 4l5 5 5-5"/>'});function N(i,n,c){let a=new Map,E=x("div","op-groupcontrols op-footer-group",{role:"group","aria-label":f("gcActions")}),y=(d,u,g,w,_)=>{let k=new S({icon:u,variant:"ghost",ariaLabel:g,tooltip:g,hidden:!w,handler:()=>_(k)});k.mount(E),a.set(d,k)};y("expand","expand",f("gcExpand"),c.expand!==!1,()=>n.expandAll()),y("collapse","collapse",f("gcCollapse"),c.collapse!==!1,()=>n.collapseAll());let h=c.current?c.choices.findIndex(d=>d.field===c.current):-1,b=new D({});y("by","list",f("gcBy"),c.by!==!1&&c.choices.length>0,d=>{b.setItems([...c.choices.map((u,g)=>({text:u.text,checked:h===g,handler:()=>(h=g,n.setGroupBy(u.field??u.by))})),"-",{text:f("gcNone"),handler:()=>(h=-1,n.setGroupBy(null))}]),b.showBy(d.el)});let M=I(i,E);return{set:(d,u)=>a.get(d)?.[u?"show":"hide"](),disable:(d,u)=>a.get(d)?.setDisabled(u),destroy(){M(),b.destroy(),a.forEach(d=>d.destroy())}}}v("en",{groupTotal:"Total",groupCount:"{n}",groupToggle:"Toggle group"});v("pt-BR",{groupTotal:"Total",groupCount:"{n}",groupToggle:"Alternar grupo"});function X(i={}){let n,c=i.by??(i.field?o=>o.data[i.field]:void 0),a=new Set,E=!!i.collapsed,y=[],h=[],b,M=i.summary??"group",d=o=>o.filter(t=>!t.classList.contains("op-grid__selcell")&&!t.classList.contains("op-grid__actcell"));function u(o,t,s){return{cls:`op-grid__row--total ${s}`,paint(p,G){G.setAttribute("aria-label",o);let e=n.getColumns();d(p).forEach((r,m)=>{let l=e[m];if(!l)return;let A=l.summary?(C=>l.summaryRenderer?l.summaryRenderer(C,l):C==null?"":l.format?L(l.format,C):String(C))(R(l,t)):m===0?o:"";r.replaceChildren(A),r.classList.toggle("op-grid__cell--right",l.align==="right")})}}}function g(){let t=n.getStore().getRange();if(!c)return n.setRowLayout(void 0);let s=new Map;for(let e of t){let r=c(e);s.set(r,[...s.get(r)??[],e])}if(y=[...s.keys()],E){for(let e of y)a.add(String(e));E=!1}let p=[],G=n.getColumns().some(e=>e.summary);for(let[e,r]of s){let m=!a.has(String(e));if(p.push({level:1,expanded:m,cls:"op-grid__row--group",paint(l,A){let[C]=d(l);C.classList.add("is-group-label"),C.replaceChildren(x("span","op-grid__twist",{"aria-hidden":"true"},T("chevron-down")),x("span","op-grid__group-name",{},i.label?i.label(e,r):String(e??"\u2014")),x("span","op-grid__group-count",{},f("groupCount",{n:r.length}))),A.dataset.group=String(e)}}),!!m){for(let l of r)p.push({rec:l,level:2,cls:"is-grouped"});G&&M!=="grand"&&p.push(u(f("groupTotal"),r,"is-group-total"))}}G&&M!=="group"&&p.push(u(f("groupTotal"),t,"is-grand-total")),n.setRowLayout(p)}function w(o,t){let s=String(o),p=t??a.has(s);p!==!a.has(s)&&(p?a.delete(s):a.add(s),g(),n.emit("group-toggle",o,p))}let _=o=>{let t=o?.closest(".op-grid__row--group");return t?y.find(s=>String(s)===t.dataset.group):void 0},k={init(o){n=o;let t=o.el,s=t.querySelector("[role=grid]"),p=e=>{let r=_(e.target);(r!==void 0||e.target.closest(".op-grid__row--group"))&&w(r)},G=e=>{if(e.target!==s)return;let r=n.getRowEntry(n.getActive());if(!r||r.rec||r.level!==1)return;let m=_(document.getElementById(`${n.id}-r${n.getActive()}`)),l=r.expanded;if(e.key==="Enter"||e.key===" ")w(m);else if(e.key==="ArrowRight"&&!l)w(m,!0);else if(e.key==="ArrowLeft"&&l)w(m,!1);else return;e.preventDefault(),e.stopPropagation()};if(t.addEventListener("click",p),t.addEventListener("keydown",G,!0),h=[H(o),()=>t.removeEventListener("click",p),()=>t.removeEventListener("keydown",G,!0),()=>n.setRowLayout(void 0)],g(),i.controls){let e=i.controls===!0?{}:i.controls;b=N(o,k,{...e,choices:i.choices??[],current:i.field}),h.push(b.destroy)}return()=>h.forEach(e=>e())},expandAll(){a.clear(),g()},collapseAll(){for(let o of y)a.add(String(o));g()},toggle:w,setControlVisible:(o,t)=>b?.set(o,t),setControlDisabled:(o,t)=>b?.disable(o,t),setGroupBy(o){c=o===null?void 0:typeof o=="string"?t=>t.data[o]:o,a.clear(),g()}};return k;function H(o){return o.getStore().subscribe(t=>queueMicrotask(()=>!o.destroyed&&g()))}}export{X as a};
|
|
2
|
+
//# sourceMappingURL=chunk-5G5PHOZJ.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/components/data/grouping/controls.ts", "../src/components/data/grouping/grouping.ts"],
|
|
4
|
+
"sourcesContent": ["import { h } from '../../../core/dom';\nimport { t, addMessages } from '../../../core/i18n';\nimport type { Model } from '../../../data/model';\nimport { Button } from '../../base/button/button';\nimport { registerIcons } from '../../base/icon/icon';\nimport { Menu } from '../../overlays/menu/menu';\nimport { addFooterGroup } from '../grid/footer';\nimport type { Grid } from '../grid/grid';\n\naddMessages('en', { gcExpand: 'Expand all', gcCollapse: 'Collapse all', gcBy: 'Group by', gcNone: 'No grouping', gcActions: 'Groups' });\naddMessages('pt-BR', { gcExpand: 'Expandir tudo', gcCollapse: 'Recolher tudo', gcBy: 'Agrupar por', gcNone: 'Sem agrupamento', gcActions: 'Grupos' });\n\nregisterIcons({ expand: '<path d=\"m7 15 5 5 5-5M7 9l5-5 5 5\"/>', collapse: '<path d=\"m7 20 5-5 5 5M7 4l5 5 5-5\"/>' });\n\nexport type GroupingControl = 'expand' | 'collapse' | 'by';\n\n/** A way to group, offered in the \"Group by\" menu: a record field or any function of the record. */\nexport interface GroupChoice {\n text: string;\n field?: string;\n by?: (rec: Model) => unknown;\n}\n\ninterface Target {\n expandAll(): void;\n collapseAll(): void;\n setGroupBy(by: string | ((rec: Model) => unknown) | null): void;\n}\n\n/** Icon buttons in the grid's footer row (beside the pager): expand all, collapse all and a \"Group by\" menu. */\nexport function groupingControls(grid: Grid, target: Target, o: { expand?: boolean; collapse?: boolean; by?: boolean; choices: GroupChoice[]; current?: string }) {\n const buttons = new Map<GroupingControl, Button>();\n const group = h('div', 'op-groupcontrols op-footer-group', { role: 'group', 'aria-label': t('gcActions') });\n const add = (action: GroupingControl, icon: string, label: string, on: boolean, handler: (b: Button) => void) => {\n const b = new Button({ icon, variant: 'ghost', ariaLabel: label, tooltip: label, hidden: !on, handler: () => handler(b) });\n b.mount(group);\n buttons.set(action, b);\n };\n add('expand', 'expand', t('gcExpand'), o.expand !== false, () => target.expandAll());\n add('collapse', 'collapse', t('gcCollapse'), o.collapse !== false, () => target.collapseAll());\n let chosen = o.current ? o.choices.findIndex((c) => c.field === o.current) : -1;\n const menu = new Menu({});\n add('by', 'list', t('gcBy'), o.by !== false && o.choices.length > 0, (b) => {\n menu.setItems([\n ...o.choices.map((c, i) => ({ text: c.text, checked: chosen === i, handler: () => ((chosen = i), target.setGroupBy((c.field ?? c.by)!)) })),\n '-',\n { text: t('gcNone'), handler: () => ((chosen = -1), target.setGroupBy(null)) },\n ]);\n menu.showBy(b.el);\n });\n const leave = addFooterGroup(grid, group);\n return {\n set: (a: GroupingControl, visible: boolean) => buttons.get(a)?.[visible ? 'show' : 'hide'](),\n disable: (a: GroupingControl, disabled: boolean) => buttons.get(a)?.setDisabled(disabled),\n destroy() {\n leave();\n menu.destroy();\n buttons.forEach((b) => b.destroy());\n },\n };\n}\n", "// 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 { summarize } from '../../../data/column';\nimport { h } from '../../../core/dom';\nimport { t, addMessages } from '../../../core/i18n';\nimport { iconEl } from '../../base/icon/icon';\nimport { groupingControls, type GroupChoice, type GroupingControl } from './controls';\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 { summarize };\nexport type { GroupChoice, GroupingControl };\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 /** Icon buttons inside the grid, beside the pager: expand all, collapse all and, with `choices`, a \"Group by\" menu. `false` leaves one out. */\n controls?: boolean | { expand?: boolean; collapse?: boolean; by?: boolean };\n /** The ways to group offered by the controls' menu (a field or a function each). */\n choices?: GroupChoice[];\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 /** The in-grid controls: show or hide one. */\n setControlVisible(control: GroupingControl, visible: boolean): void;\n setControlDisabled(control: GroupingControl, disabled: boolean): void;\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 let controls: ReturnType<typeof groupingControls> | undefined;\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 const plugin: Grouping = {\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 if (options.controls) {\n const c = options.controls === true ? {} : options.controls;\n controls = groupingControls(g, plugin, { ...c, choices: options.choices ?? [], current: options.field });\n off.push(controls.destroy);\n }\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 setControlVisible: (c, visible) => controls?.set(c, visible),\n setControlDisabled: (c, disabled) => controls?.disable(c, disabled),\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 return plugin;\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", "registerIcons", "groupingControls", "grid", "target", "o", "buttons", "group", "h", "t", "add", "action", "icon", "label", "on", "handler", "b", "Button", "chosen", "c", "menu", "Menu", "i", "leave", "addFooterGroup", "a", "visible", "disabled", "addMessages", "grouping", "options", "grid", "by", "r", "closed", "all", "keys", "off", "controls", "where", "userCells", "cells", "c", "totals", "label", "recs", "cls", "row", "cols", "cell", "n", "col", "out", "v", "format", "summarize", "build", "groups", "k", "rows", "hasSummary", "key", "list", "open", "h", "iconEl", "t", "rec", "toggle", "id", "to", "keyOfRow", "el", "plugin", "g", "table", "onClick", "onKey", "active", "store", "groupingControls", "f", "visible", "disabled", "next"]
|
|
7
|
+
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as m}from"./chunk-GEJKFE4X.js";import{a as
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{a as m}from"./chunk-GEJKFE4X.js";import{a as g}from"./chunk-LHWY6G6Q.js";import{a as f}from"./chunk-6NP4AEV4.js";import{c as h}from"./chunk-DIOJGTUN.js";import{f as a,g as o}from"./chunk-2GKIF7A6.js";import{a as u}from"./chunk-TIPK3SCJ.js";import{b as c}from"./chunk-PZSHOSOS.js";import{f as n}from"./chunk-S4QD5NID.js";var b=/\s*(?:–|—|\s-\s|\sto\s|\sa\s)\s*/,d=p=>a(p,{day:"2-digit",month:"2-digit",year:"numeric"}),l=class extends g{baseCls="op-field op-textfield op-picker op-datefield op-daterange";cal;dd;garbage=!1;emptyValue(){return null}isEmpty(e){return!e?.start}parse(e){if(this.garbage=!1,!e.trim())return null;let[r,s]=e.trim().split(b),t=o(r),i=s?o(s):null;return!t||s&&!i?(this.garbage=!0,null):i&&i<t?{start:i,end:t}:{start:t,end:i??t}}display(e){return e?.start?e.end&&e.end!==e.start?`${d(e.start)} \u2013 ${d(e.end)}`:d(e.start):""}createControl(){let e=super.createControl(),r=this.input;r.setAttribute("role","combobox"),r.setAttribute("aria-haspopup","dialog"),r.setAttribute("aria-expanded","false");let s=c("button","op-picker__trigger",{type:"button",tabindex:-1,"aria-label":n("calOpen")},h("calendar"));this.listen(s,"mousedown",i=>i.preventDefault()),this.listen(s,"click",()=>{!this.config.disabled&&!this.config.readonly&&this.toggle()}),e.append(s);let t=this.config;return this.cal=new m({range:!0,value:t.value,min:t.min,max:t.max,firstDay:t.firstDay}),this.dd=new f({anchor:e,content:this.cal,role:"presentation"}),this.cal.on("select",i=>{this.dd.close(),this.setValue(i),r.focus()}),this.dd.on("open",()=>{r.setAttribute("aria-expanded","true"),this.el.classList.add("is-open"),this.cal.setValue(this.value),this.cal.focusDay(),this.emit("expand")}),this.dd.on("close",()=>{r.setAttribute("aria-expanded","false"),this.el.classList.remove("is-open"),this.emit("collapse")}),this.own(()=>this.dd.destroy()),this.on("blur",()=>this.later(()=>{let i=document.activeElement;!this.el.contains(i)&&!this.dd.el.contains(i)&&this.dd.close()},0)),e}onKey(e){e.key==="ArrowDown"&&!this.dd.isOpen()?(e.preventDefault(),this.open()):super.onKey(e)}onInput(){super.onInput(),this.garbage?this.setError(n("date")):this.error&&this.validate()}applyValue(e){super.applyValue(e),this.garbage=!1}onDisabled(e){super.onDisabled(e),this.el.querySelector(".op-picker__trigger").disabled=e}check(){if(this.garbage)return n("date");let e=super.check(),r=this.value;if(e||!r)return e;let{min:s,max:t}=this.config;return s&&r.start<s?n("dateMin",{n:a(s)}):t&&(r.end??r.start)>t?n("dateMax",{n:a(t)}):""}open(){this.config.disabled||this.config.readonly||!this.rendered||this.dd.open()}close(){this.dd?.close()}toggle(){this.dd.isOpen()?this.close():this.open()}setMin(e){this.config.min=e,this.cal?.setMin(e)}setMax(e){this.config.max=e,this.cal?.setMax(e)}};u("daterangefield",l);export{l as a};
|
|
2
|
+
//# sourceMappingURL=chunk-5GCTM37D.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as s}from"./chunk-4OB2IM5L.js";import{a as o}from"./chunk-UCWICDYG.js";import{a as c}from"./chunk-OADWLPSF.js";import{a as p}from"./chunk-LXWCTCZV.js";var C=r=>{let e=r.replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/[_-]+/g," ").toLowerCase();return e.charAt(0).toUpperCase()+e.slice(1)},d=r=>r.label??C(r.name),m=(r,e)=>r.filter(t=>!t.hide?.includes(e));function f(r){return m(r,"grid").map(e=>{let t={field:e.name,header:d(e),sortable:!0,width:e.width,group:e.group,summary:e.summary};return e.type==="number"?t.align="right":e.type==="duration"?Object.assign(t,{format:"duration",align:"right"}):e.type==="money"?Object.assign(t,{format:"money",align:"right"}):e.type==="date"||e.type==="datetime"?t.format="date":e.type==="bool"&&Object.assign(t,{format:"bool",align:"center"}),{...t,...e.column}})}function y(r){return m(r,"form").map(e=>{let t={required:e.required||void 0,readonly:e.readonly||void 0,...e.field},n=d(e);if(e.lookup)return o.lookup(e.name,n,e.lookup,t);switch(e.type){case"email":return o.email(e.name,n,t);case"area":return o.area(e.name,n,{colspan:"full",...t});case"number":return o.number(e.name,n,t);case"duration":return o.number(e.name,n,{min:0,...t});case"money":return o.number(e.name,n,{decimals:2,min:0,...t});case"date":return o.date(e.name,n,t);case"datetime":return o.datetime(e.name,n,t);case"select":return o.select(e.name,n,e.options??[],t);case"bool":return o.check(e.name,n,t);default:return o.text(e.name,n,t)}})}function h(r){return m(r,"filter").map(e=>{let t=e.type==="number"||e.type==="money"||e.type==="duration"?"number":e.type==="date"||e.type==="datetime"?"date":e.type==="select"||e.type==="bool"?"select":"text",n=e.type==="bool"?[{value:"true",label:"Yes"},{value:"false",label:"No"}]:e.type==="select"?e.options:void 0;return{name:e.name,label:d(e),type:t,group:e.group,options:n,...e.filter}})}var w=(r,e={})=>new p({columns:f(r),...e});function x(r,e={}){let t=e.columns??2,n=m(r,"form"),b=y(r),u=[],l=new Map;b.forEach((i,F)=>{let a=n[F].group;if(!a)return void u.push(i);l.has(a)||(l.set(a,[]),u.push(a)),l.get(a).push(i)});let g=u.map(i=>typeof i=="string"?new s({title:i,columns:t,items:l.get(i)}):i);return new c({...e,columns:l.size?void 0:t,items:g})}export{f as a,y as b,h as c,w as d,x as e};
|
|
2
|
+
//# sourceMappingURL=chunk-632LUU52.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/build/build.ts"],
|
|
4
|
+
"sourcesContent": ["// One list of field specs feeds the grid columns, the form fields and the filter fields, so a screen is described once.\nimport { ui } from '../ui/ui';\nimport { Grid, type GridConfig } from '../components/data/grid/grid';\nimport { Form, type FormConfig } from '../components/form/form/form';\nimport { FieldSet } from '../components/layout/fieldset/fieldset';\nimport type { FilterField } from '../components/data/filterbuilder/filterbuilder';\nimport type { Column } from '../data/column';\nimport type { Component } from '../core/component';\n\nexport type FieldKind = 'text' | 'email' | 'area' | 'number' | 'money' | 'duration' | 'date' | 'datetime' | 'select' | 'bool';\ntype Cfg = Record<string, any>;\n\nexport interface FieldSpec {\n /** The record's property. */\n name: string;\n /** Default: the name as words (`unitPrice` \u2192 \"Unit price\"). */\n label?: string;\n /** Default `text`. `duration` is a number of minutes, shown as `7h 30m`. */\n type?: FieldKind;\n /** For `select`. */\n options?: Array<string | number | { value: string | number; label: string }>;\n /** Picks the value in a lookup window: a LookupDef or the name given to `registerLookup`. */\n lookup?: Cfg | string;\n required?: boolean;\n readonly?: boolean;\n /** A band over the grid header and a section of the form. */\n group?: string;\n /** Total of the (filtered) rows in the grid: the starting total of the `columnTotals()` plugin. */\n summary?: Column['summary'];\n /** Grid column width in px. */\n width?: number;\n /** Leaves the field out of some of the builds. */\n hide?: Array<'grid' | 'form' | 'filter'>;\n /** Overrides for what each build makes. */\n column?: Partial<Column>;\n field?: Cfg;\n filter?: Partial<FilterField>;\n}\n\nconst words = (name: string) => {\n const s = name.replace(/([a-z0-9])([A-Z])/g, '$1 $2').replace(/[_-]+/g, ' ').toLowerCase();\n return s.charAt(0).toUpperCase() + s.slice(1);\n};\nconst label = (s: FieldSpec) => s.label ?? words(s.name);\nconst shown = (specs: FieldSpec[], where: 'grid' | 'form' | 'filter') => specs.filter((s) => !s.hide?.includes(where));\n\n/** Grid columns: right-aligned numbers and money, formatted dates and booleans. */\nexport function buildColumns(specs: FieldSpec[]): Column[] {\n return shown(specs, 'grid').map((s) => {\n const col: Column = { field: s.name, header: label(s), sortable: true, width: s.width, group: s.group, summary: s.summary };\n if (s.type === 'number') col.align = 'right';\n else if (s.type === 'duration') Object.assign(col, { format: 'duration', align: 'right' });\n else if (s.type === 'money') Object.assign(col, { format: 'money', align: 'right' });\n else if (s.type === 'date' || s.type === 'datetime') col.format = 'date';\n else if (s.type === 'bool') Object.assign(col, { format: 'bool', align: 'center' });\n return { ...col, ...s.column };\n });\n}\n\n/** Form fields (instances), in order. */\nexport function buildFields(specs: FieldSpec[]): Component[] {\n return shown(specs, 'form').map((s) => {\n const c: Cfg = { required: s.required || undefined, readonly: s.readonly || undefined, ...s.field };\n const l = label(s);\n if (s.lookup) return ui.lookup(s.name, l, s.lookup, c);\n switch (s.type) {\n case 'email': return ui.email(s.name, l, c);\n case 'area': return ui.area(s.name, l, { colspan: 'full', ...c });\n case 'number': return ui.number(s.name, l, c);\n case 'duration': return ui.number(s.name, l, { min: 0, ...c });\n case 'money': return ui.number(s.name, l, { decimals: 2, min: 0, ...c });\n case 'date': return ui.date(s.name, l, c);\n case 'datetime': return ui.datetime(s.name, l, c);\n case 'select': return ui.select(s.name, l, (s.options ?? []) as any, c);\n case 'bool': return ui.check(s.name, l, c);\n default: return ui.text(s.name, l, c);\n }\n });\n}\n\n/** Fields for a `FilterBuilder`; `bool` filters as a Yes/No choice. */\nexport function buildFilterFields(specs: FieldSpec[]): FilterField[] {\n return shown(specs, 'filter').map((s) => {\n const type = s.type === 'number' || s.type === 'money' || s.type === 'duration' ? 'number' : s.type === 'date' || s.type === 'datetime' ? 'date' : s.type === 'select' || s.type === 'bool' ? 'select' : 'text';\n const options = s.type === 'bool' ? [{ value: 'true', label: 'Yes' }, { value: 'false', label: 'No' }] : s.type === 'select' ? s.options : undefined;\n return { name: s.name, label: label(s), type, group: s.group, options, ...s.filter };\n });\n}\n\n/** A `Grid` whose columns come from the specs. `cfg` adds or overrides anything (`store`, `selection`, ...). */\nexport const buildGrid = (specs: FieldSpec[], cfg: Partial<GridConfig> = {}) => new Grid({ columns: buildColumns(specs), ...cfg });\n\n/** A `Form` with the fields in `columns` columns (default 2); specs with a `group` go in a `FieldSet` of that title. */\nexport function buildForm(specs: FieldSpec[], cfg: FormConfig & { columns?: number } = {}) {\n const columns = cfg.columns ?? 2;\n const visible = shown(specs, 'form');\n const fields = buildFields(specs);\n const items: Array<Component | string> = [];\n const sets = new Map<string, Component[]>();\n fields.forEach((f, i) => {\n const g = visible[i].group;\n if (!g) return void items.push(f);\n if (!sets.has(g)) {\n sets.set(g, []);\n items.push(g);\n }\n sets.get(g)!.push(f);\n });\n const done = items.map((i) => (typeof i === 'string' ? new FieldSet({ title: i, columns, items: sets.get(i) as any }) : i));\n return new Form({ ...cfg, columns: sets.size ? undefined : columns, items: done as any });\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["words", "name", "s", "label", "shown", "specs", "where", "buildColumns", "col", "buildFields", "c", "l", "ui", "buildFilterFields", "type", "options", "buildGrid", "cfg", "Grid", "buildForm", "columns", "visible", "fields", "items", "sets", "f", "i", "g", "done", "FieldSet", "Form"]
|
|
7
|
+
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as m,b as u}from"./chunk-E4VNLYO2.js";import{b as f}from"./chunk-676AKAGF.js";import{a as g}from"./chunk-VV7CFMPZ.js";import{a as d,c as p}from"./chunk-TIPK3SCJ.js";import{
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{a as m,b as u}from"./chunk-E4VNLYO2.js";import{b as f}from"./chunk-676AKAGF.js";import{a as g}from"./chunk-VV7CFMPZ.js";import{a as d,c as p}from"./chunk-TIPK3SCJ.js";import{f as n}from"./chunk-UDXO3KM3.js";import{b as h,c as l}from"./chunk-PZSHOSOS.js";import{b,c as v}from"./chunk-4AA4FQEM.js";var o=[],s=class extends n{baseCls="op-dropdown";content;open_=!1;release=[];leaving=0;build(){let e=h("div","op-dropdown",{role:this.config.role??"dialog"});e.hidden=!0;let t=this.config.content;return t&&(this.content=t instanceof HTMLElement||t instanceof n?t:p(t),e.append(this.content instanceof n?this.content.el:this.content)),e}getAnchor(){let e=this.config.anchor;return e instanceof n?e.el:e instanceof HTMLElement?e:void 0}isOpen(){return this.open_}open(){if(this.open_||this.destroyed||this.emit("before-open")===!1)return;let e=this.getAnchor();f(this.el,e),e&&this.el.getAttribute("role")==="dialog"&&!this.el.hasAttribute("aria-label")&&!this.el.hasAttribute("aria-labelledby")&&(e.id||=l(),this.el.setAttribute("aria-labelledby",e.id)),this.leaving++,this.el.getAnimations?.().forEach(i=>i.cancel()),this.el.hidden=!1,this.open_=!0,o.push(this),this.el.classList.add("is-open"),this.content instanceof n&&this.content.notifyMount(),this.reposition(),b(this.el,e??this.config.anchor,"dropdown"),e?.setAttribute("aria-expanded","true");let t=this.config,r=i=>{let a=i.target;t.closeOnOutside!==!1&&!this.el.contains(a)&&!e?.contains(a)&&this.close()},c=i=>{i.key==="Escape"&&t.closeOnEsc!==!1&&o[o.length-1]===this&&(i.stopPropagation(),this.close(),(e?.querySelector("input,button")??e)?.focus?.())};document.addEventListener("pointerdown",r,!0),document.addEventListener("keydown",c,!0),this.release=[()=>document.removeEventListener("pointerdown",r,!0),()=>document.removeEventListener("keydown",c,!0),u(()=>this.reposition())],t.autoFocus&&g(this.el)[0]?.focus(),this.emit("open")}close(){if(!this.open_||this.emit("before-close")===!1)return;this.open_=!1,o.splice(o.indexOf(this),1),this.el.classList.remove("is-open");let e=v(this.el,this.getAnchor()??this.config.anchor,"dropdown");if(e){let t=++this.leaving;e.then(()=>t===this.leaving&&!this.open_&&(this.el.hidden=!0))}else this.el.hidden=!0;this.getAnchor()?.setAttribute("aria-expanded","false"),this.release.splice(0).forEach(t=>t()),this.emit("close")}toggle(){this.open_?this.close():this.open()}reposition(){let e=this.getAnchor()??this.config.anchor;if(!this.open_||!e||e instanceof n)return;let t=this.config;m(this.el,e,{placement:t.placement??"bottom-start",offset:t.offset,flip:t.flip,matchWidth:t.matchWidth})}setAnchor(e){this.config.anchor=e,this.reposition()}setPlacement(e){this.config.placement=e,this.reposition()}setContent(e){this.content instanceof n&&this.content!==e&&this.content.destroy(),this.config.content=e,this.content=e,this.el.replaceChildren(e instanceof n?e.el:e),this.reposition()}onDestroy(){this.open_&&o.splice(o.indexOf(this),1),this.open_=!1,this.release.splice(0).forEach(e=>e()),this.getAnchor()?.setAttribute("aria-expanded","false"),this.content instanceof n&&this.content.destroy()}};d("dropdown",s);export{s as a};
|
|
2
|
+
//# sourceMappingURL=chunk-6NP4AEV4.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{c as h}from"./chunk-DIOJGTUN.js";import{a as f}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{c as h}from"./chunk-DIOJGTUN.js";import{a as f}from"./chunk-QVBDBGS4.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-6PPRYSLN.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as h}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{a as h}from"./chunk-JBOKM5YA.js";import{a as d}from"./chunk-LHWY6G6Q.js";import{c as n}from"./chunk-DIOJGTUN.js";import{a as l}from"./chunk-TIPK3SCJ.js";import{b as i}from"./chunk-PZSHOSOS.js";import{e as o,f as s}from"./chunk-S4QD5NID.js";o("en",{secretShow:"Show value",secretHide:"Hide value",secretStored:"A value is saved. It cannot be shown again.",secretReplace:"Replace",secretKeep:"Keep current",secretWarnTitle:"Replace the saved value?",secretWarn:"The saved value cannot be displayed and will be discarded as soon as you replace it. Type the new value next; it takes effect when you save."});o("pt-BR",{secretShow:"Mostrar valor",secretHide:"Ocultar valor",secretStored:"H\xE1 um valor salvo. Ele n\xE3o pode ser exibido novamente.",secretReplace:"Substituir",secretKeep:"Manter o atual",secretWarnTitle:"Substituir o valor salvo?",secretWarn:"O valor salvo n\xE3o pode ser exibido e ser\xE1 descartado assim que voc\xEA o substituir. Digite o novo valor em seguida; ele s\xF3 vale quando voc\xEA salvar."});var p="\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022",a=class extends d{baseCls="op-field op-textfield op-secret";stored=!1;initialStored=!1;replacing=!1;revealed=!1;eyeBtn;replaceBtn;keepBtn;hint;constructor(e={}){super({autocomplete:"new-password",...e,inputType:"password"}),this.stored=this.initialStored=!!e.stored}emptyValue(){return null}isEmpty(e){return!this.stored&&(e==null||e==="")}createControl(){let e=super.createControl(),t=this.input;return t.spellcheck=!1,this.eyeBtn=i("button","op-secret__eye",{type:"button","aria-pressed":"false"}),this.replaceBtn=i("button","op-secret__replace",{type:"button"},s("secretReplace")),this.keepBtn=i("button","op-secret__keep",{type:"button"},s("secretKeep")),this.hint=i("div","op-secret__hint",{id:`${this.id}-hint`},i("span","op-secret__note",{},s("secretStored")),this.keepBtn),this.listen(this.eyeBtn,"mousedown",r=>r.preventDefault()),this.listen(this.eyeBtn,"click",()=>this.setRevealed(!this.revealed)),this.listen(this.replaceBtn,"click",()=>{this.replace()}),this.listen(this.keepBtn,"click",()=>this.keep()),this.listen(t,"click",()=>this.stored&&void this.replace()),this.listen(t,"keydown",r=>{this.stored&&(r.key==="Enter"||r.key===" ")&&(r.preventDefault(),this.replace())}),this.on("blur",()=>this.config.autoHide!==!1&&this.setRevealed(!1)),e.append(this.eyeBtn,this.replaceBtn),i("div","op-secret__box",{},e,this.hint)}onRender(){super.onRender(),this.paint()}isStored(){return this.stored}isReplacing(){return this.replacing}isRevealed(){return this.revealed}setStored(e){this.stored=e,this.replacing=!1,this.revealed=!1,super.setValue(null,!0),this.paint(),this.emit("stored-change",e)}setValue(e,t=!1){if(e===!0)return this.setStored(!0);e===!1&&(e=null),this.stored&&e!=null&&(this.stored=!1,this.replacing=!0),super.setValue(e,t),this.paint()}markClean(){super.markClean(),this.initialStored=this.stored}reset(){this.setStored(this.initialStored),super.reset()}async replace(){return!this.stored||this.config.readonly||this.config.disabled||this.emit("before-replace")===!1||this.config.confirmReplace!==!1&&!await h.confirm(this.config.replaceText??s("secretWarn"),{danger:!0,title:this.config.replaceTitle??s("secretWarnTitle"),okText:s("secretReplace")})?!1:(this.stored=!1,this.replacing=!0,super.setValue("",!1),this.paint(),this.input.focus(),this.emit("replace"),!0)}keep(){this.replacing&&(this.stored=!0,this.replacing=!1,this.revealed=!1,super.setValue(null,!1),this.paint(),this.emit("keep"))}setRevealed(e){this.stored&&(e=!1),this.revealed=e,this.paint()}getDisplayText(){return this.stored||(this.value??"")!==""?p:""}paint(){if(!this.rendered)return;let e=this.input,t=this.revealed&&!this.stored;e.type=t?"text":"password",e.readOnly=this.stored||!!this.config.readonly,e.placeholder=this.stored?p:this.config.placeholder??"",this.stored&&(e.value=""),e.setAttribute("aria-describedby",this.stored||this.replacing?this.hint.id:""),!this.stored&&!this.replacing&&e.removeAttribute("aria-describedby"),this.eyeBtn.hidden=this.stored,this.eyeBtn.setAttribute("aria-pressed",String(t)),this.eyeBtn.setAttribute("aria-label",s(t?"secretHide":"secretShow")),this.eyeBtn.replaceChildren(n(t?"eye-off":"eye")),this.replaceBtn.hidden=!this.stored,this.hint.hidden=!this.stored&&!this.replacing,this.hint.querySelector(".op-secret__note").hidden=!this.stored,this.keepBtn.hidden=!this.replacing,this.el.classList.toggle("is-stored",this.stored),this.el.classList.toggle("is-replacing",this.replacing),this.el.classList.toggle("is-revealed",t),this.el.classList.toggle("has-value",this.stored||!!e.value)}};l("secretfield",a);export{a};
|
|
2
|
+
//# sourceMappingURL=chunk-6TZJO2G2.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{c as w}from"./chunk-DIOJGTUN.js";import{c as y}from"./chunk-BQEFLPDA.js";import{a as m}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{c as w}from"./chunk-DIOJGTUN.js";import{c as y}from"./chunk-BQEFLPDA.js";import{a as m}from"./chunk-QVBDBGS4.js";import{a as g}from"./chunk-TIPK3SCJ.js";import{f as p}from"./chunk-UDXO3KM3.js";import{b as n}from"./chunk-PZSHOSOS.js";import{e as c,f as l}from"./chunk-S4QD5NID.js";import{b as v}from"./chunk-V5G5JECN.js";c("en",{flAdd:"Add",flRemove:"Remove {row}",flUp:"Move {row} up",flDown:"Move {row} down",flEmpty:"Nothing added yet",flMin:"Add at least {n}",flMax:"At most {n}"});c("pt-BR",{flAdd:"Adicionar",flRemove:"Remover {row}",flUp:"Subir {row}",flDown:"Descer {row}",flEmpty:"Nada adicionado ainda",flMin:"Adicione pelo menos {n}",flMax:"No m\xE1ximo {n}"});var u=class extends m{baseCls="op-field op-fieldlist";rowsEl;addBtn;emptyEl;rows=[];syncing=!1;emptyValue(){return[]}isEmpty(t){return!t?.length}createControl(){return this.rowsEl=n("div","op-fieldlist__rows",{role:"group"}),this.emptyEl=n("div","op-fieldlist__empty",{},l("flEmpty")),this.addBtn=n("button","op-fieldlist__add",{type:"button"},w("plus"),n("span","",{},this.config.addText??l("flAdd"))),this.listen(this.addBtn,"click",()=>this.addRow()),this.inputEl=this.addBtn,n("div","op-fieldlist__box",{},this.rowsEl,this.emptyEl,this.addBtn)}onRender(){super.onRender(),this.rowsEl.setAttribute("aria-labelledby",this.el.querySelector(".op-field__label").id||=`${this.id}-label`)}label(t){return`${this.config.label??""} ${t+1}`.trim()}makeRow(t){let e=s=>{let i=s instanceof p?s.config:s,r={...i,...Array.isArray(i.items)?{items:i.items.map(e)}:{}};return s instanceof p?new s.constructor(r):r},o=new y({cls:"op-fieldlist__row",layout:this.config.rowLayout??{type:"hbox",align:"flex-start"},items:(this.config.items??[]).map(e)});for(let s of o.items)s.config.width!=null&&s.config.flex==null&&(s.config.flex="none");for(let s of this.rowFields(o))s.fillFrom(t),s.on("change",()=>this.syncing||this.commitRows());return o}rowFields(t){return t.query(e=>e instanceof m)}collect(){return this.rows.map(t=>{let e={};for(let o of this.rowFields(t))o.name&&v(e,o.name,o.getValue());return e})}commitRows(){this.commit(this.collect()),this.paintRows(),this.getError()&&this.validate()}paintRows(){if(!this.rendered)return;let{min:t=0,max:e=1/0,reorderable:o=!0}=this.config;this.rowsEl.replaceChildren(...this.rows.map((s,i)=>{let r=s.el;r.setAttribute("role","group"),r.setAttribute("aria-label",this.label(i)),r.classList.toggle("is-first",i===0),r.querySelector(":scope > .op-fieldlist__tools")?.remove();let a=(b,h,R,E)=>{let f=n("button","op-fieldlist__tool",{type:"button","data-act":h,"aria-label":l(h,{row:this.label(i)}),"data-op-tip":l(h,{row:this.label(i)})},w(b));return f.disabled=R||!!this.config.disabled||!!this.config.readonly,f.addEventListener("click",E),f},d=n("div","op-fieldlist__tools");return o&&d.append(a("chevron-up","flUp",i===0,()=>this.moveRow(i,i-1)),a("chevron-down","flDown",i===this.rows.length-1,()=>this.moveRow(i,i+1))),d.append(a("trash","flRemove",this.rows.length<=t,()=>this.removeRow(i))),r.append(d),r})),this.emptyEl.hidden=this.rows.length>0,this.el.classList.toggle("is-empty",!this.rows.length),this.addBtn.disabled=this.rows.length>=e||!!this.config.disabled||!!this.config.readonly}applyValue(t){this.syncing=!0,this.rows.forEach(o=>o.destroy()),this.rows=(t??[]).map(o=>this.makeRow(o)),this.syncing=!1;let e=this.isEqual(this.original,t);this.value=this.collect(),e&&(this.original=this.value),this.paintRows()}addRow(t){let e=this.config.max??1/0;if(this.rows.length>=e)return;let o=this.config.newRow;this.rows.push(this.makeRow(t??(typeof o=="function"?o():{...o}))),this.commitRows(),this.emit("add",this.rows.length-1),this.rowFields(this.rows[this.rows.length-1])[0]?.focus()}removeRow(t){if(!this.rows[t]||this.rows.length<=(this.config.min??0)||this.emit("before-remove",t)===!1)return;let[e]=this.rows.splice(t,1);e.destroy(),this.commitRows(),this.emit("remove",t);let o=this.rows[Math.min(t,this.rows.length-1)];o?this.rowFields(o)[0]?.focus():this.rendered&&this.addBtn.focus()}moveRow(t,e){if(!this.rows[t]||e<0||e>=this.rows.length||t===e)return;let[o]=this.rows.splice(t,1);this.rows.splice(e,0,o),this.commitRows(),this.emit("move",t,e);let s=["flUp","flDown"].map(i=>o.el.querySelector(`[data-act="${i}"]`));(e<t?s:s.reverse()).find(i=>i&&!i.disabled)?.focus()}getRows(){return this.rows}getRowFields(t){return this.rows[t]?this.rowFields(this.rows[t]):[]}fieldAt(t){let[e,...o]=t.split(".");return this.getRowFields(Number(e)).find(s=>s.name===o.join("."))}setAddText(t){this.config.addText=t,this.rendered&&(this.addBtn.lastElementChild.textContent=t)}setMin(t){this.config.min=t,this.paintRows()}setMax(t){this.config.max=t,this.paintRows()}check(){let t=this.value?.length??0,{min:e=0,max:o=1/0}=this.config;return t&&t<e?l("flMin",{n:e}):t>o?l("flMax",{n:o}):super.check()}validate(){let t=this.rows.flatMap(e=>this.rowFields(e)).map(e=>e.validate()).every(Boolean);return super.validate()&&t}isValid(){return super.isValid()&&this.rows.every(t=>this.rowFields(t).every(e=>e.isValid()))}focus(){let t=this.rows.flatMap(e=>this.rowFields(e)).find(e=>e.getError());t?t.focus():this.addBtn?.focus()}onDisabled(t){this.rows.forEach(e=>e.setDisabled(t)),this.paintRows()}onReadonly(t){this.rows.forEach(e=>this.rowFields(e).forEach(o=>o.setReadonly(t))),this.paintRows()}onDestroy(){this.rows.forEach(t=>t.destroy()),super.onDestroy()}};g("fieldlist",u);export{u as a};
|
|
2
|
+
//# sourceMappingURL=chunk-A36JFIA3.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as o}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{a as o}from"./chunk-L6DOWGBO.js";import{a as t}from"./chunk-TIPK3SCJ.js";var e=class extends o{baseCls="op-field op-textfield op-picker op-select";editable(){return!1}emptyValue(){return null}isEmpty(r){return r==null||r===""}};t("select",e);export{e as a};
|
|
2
|
+
//# sourceMappingURL=chunk-ADHKL2GM.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as n}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{a as n}from"./chunk-L6DOWGBO.js";import{a as o}from"./chunk-TIPK3SCJ.js";var s=class extends n{baseCls="op-field op-textfield op-picker op-combobox";term="";emptyValue(){return null}isEmpty(t){return t==null||t===""}visibleItems(){let t=this.typed?this.term.trim().toLowerCase():"";if(!t)return this.items;let i=this.config.filter??"contains",p=typeof i=="function"?i:i==="startsWith"?(e,r)=>e.label.toLowerCase().startsWith(r):(e,r)=>e.label.toLowerCase().includes(r);return this.items.filter(e=>p(e,t))}onType(t){this.term=t,this.refreshList(),this.list.setHighlight(t),this.open()}pick(t){this.term="",super.pick(t),this.list.setHighlight("")}settle(){super.settle(),this.term="",this.list.setHighlight("")}};o("combobox",s);export{s as a};
|
|
2
|
+
//# sourceMappingURL=chunk-AJN66F32.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as o}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{a as o}from"./chunk-S3ILIWSW.js";import{a as t}from"./chunk-TIPK3SCJ.js";var e=class extends o{baseCls="op-field op-checkbox op-toggle";onRender(){super.onRender(),this.inputEl.setAttribute("role","switch")}setIndeterminate(){super.setIndeterminate(!1)}};t("toggle",e);export{e as a};
|
|
2
|
+
//# sourceMappingURL=chunk-BRGT4O6Q.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{c as n}from"./chunk-DIOJGTUN.js";import{a as l}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{c as n}from"./chunk-DIOJGTUN.js";import{a as l}from"./chunk-QVBDBGS4.js";import{a as r}from"./chunk-TIPK3SCJ.js";import{b as o}from"./chunk-PZSHOSOS.js";var p=class extends l{baseCls="op-field op-checkboxgroup";group;inputs=[];emptyValue(){return[]}isEmpty(e){return!e?.length}isEqual(e,t){return(e??[]).length===(t??[]).length&&(e??[]).every((i,s)=>i===t[s])}createControl(){return this.group=o("div","op-checkboxgroup__options",{role:"group","aria-labelledby":`${this.id}-label`}),this.listen(this.group,"change",e=>{if(!this.inputs.includes(e.target))return;if(this.config.readonly)return this.applyValue(this.value);let t=this.opts();this.commit(this.inputs.flatMap((i,s)=>i.checked?[t[s].value]:[])),this.paint()}),this.buildOptions(),this.inputEl=this.inputs[0]??this.group,this.group}opts(){return(this.config.options??[]).map(e=>typeof e=="object"?e:{value:e,label:e,disabled:!1})}buildOptions(){this.inputs=[],this.group.replaceChildren(...this.opts().map(e=>{let t=o("input","op-checkbox__input",{type:"checkbox",value:String(e.value),disabled:!!e.disabled});return this.inputs.push(t),o("label","op-checkbox op-checkbox__label",{},t,o("span","op-checkbox__box",{},n("check")),o("span","op-checkbox__text",{},e.label))})),this.group.classList.toggle("op-checkboxgroup__options--horizontal",this.config.direction==="horizontal")}onRender(){super.onRender(),this.el.querySelector(".op-field__label").id=`${this.id}-label`}applyValue(e){let t=this.opts();this.inputs.forEach((i,s)=>i.checked=(e??[]).includes(t[s].value)),this.paint()}paint(){for(let e of this.inputs)e.closest("label").classList.toggle("is-checked",e.checked)}getDisplayText(){let e=this.getValue()??[];return this.opts().filter(t=>e.includes(t.value)).map(t=>t.label).join(", ")}onDisabled(e){this.inputs.forEach((t,i)=>t.disabled=e||!!this.opts()[i].disabled)}setOptions(e){this.config.options=e,this.rendered&&(this.buildOptions(),this.inputEl=this.inputs[0]??this.group,this.applyValue(this.value),this.onDisabled(!!this.config.disabled))}};r("checkboxgroup",p);export{p as a};
|
|
2
|
+
//# sourceMappingURL=chunk-BTGJ3MP4.js.map
|