@expressivecss/expressive 0.15.0 → 0.16.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 +1502 -1
- package/README.md +9 -8
- package/dist/css/expressive.css +19247 -11923
- package/dist/css/expressive.css.map +1 -1
- package/dist/css/expressive.min.css +1 -1
- package/dist/css/expressive.min.css.map +1 -1
- package/dist/fonts/LICENSE-noto-sans-arabic +93 -0
- package/dist/fonts/LICENSE-noto-sans-hebrew +93 -0
- package/dist/fonts/LICENSE-noto-sans-thai +93 -0
- package/dist/fonts/material-symbols-outlined.woff2 +0 -0
- package/dist/fonts/material-symbols-rounded.woff2 +0 -0
- package/dist/fonts/material-symbols-sharp.woff2 +0 -0
- package/dist/fonts/noto-sans-arabic-arabic-400.woff2 +0 -0
- package/dist/fonts/noto-sans-arabic-arabic-500.woff2 +0 -0
- package/dist/fonts/noto-sans-arabic-arabic-700.woff2 +0 -0
- package/dist/fonts/noto-sans-cyrillic-400.woff2 +0 -0
- package/dist/fonts/noto-sans-cyrillic-500.woff2 +0 -0
- package/dist/fonts/noto-sans-cyrillic-700.woff2 +0 -0
- package/dist/fonts/noto-sans-cyrillic-ext-400.woff2 +0 -0
- package/dist/fonts/noto-sans-cyrillic-ext-500.woff2 +0 -0
- package/dist/fonts/noto-sans-cyrillic-ext-700.woff2 +0 -0
- package/dist/fonts/noto-sans-devanagari-400.woff2 +0 -0
- package/dist/fonts/noto-sans-devanagari-500.woff2 +0 -0
- package/dist/fonts/noto-sans-devanagari-700.woff2 +0 -0
- package/dist/fonts/noto-sans-greek-400.woff2 +0 -0
- package/dist/fonts/noto-sans-greek-500.woff2 +0 -0
- package/dist/fonts/noto-sans-greek-700.woff2 +0 -0
- package/dist/fonts/noto-sans-greek-ext-400.woff2 +0 -0
- package/dist/fonts/noto-sans-greek-ext-500.woff2 +0 -0
- package/dist/fonts/noto-sans-greek-ext-700.woff2 +0 -0
- package/dist/fonts/noto-sans-hebrew-hebrew-400.woff2 +0 -0
- package/dist/fonts/noto-sans-hebrew-hebrew-500.woff2 +0 -0
- package/dist/fonts/noto-sans-hebrew-hebrew-700.woff2 +0 -0
- package/dist/fonts/noto-sans-latin-700.woff2 +0 -0
- package/dist/fonts/noto-sans-latin-ext-400.woff2 +0 -0
- package/dist/fonts/noto-sans-latin-ext-500.woff2 +0 -0
- package/dist/fonts/noto-sans-latin-ext-700.woff2 +0 -0
- package/dist/fonts/noto-sans-thai-thai-400.woff2 +0 -0
- package/dist/fonts/noto-sans-thai-thai-500.woff2 +0 -0
- package/dist/fonts/noto-sans-thai-thai-700.woff2 +0 -0
- package/dist/fonts/noto-sans-vietnamese-400.woff2 +0 -0
- package/dist/fonts/noto-sans-vietnamese-500.woff2 +0 -0
- package/dist/fonts/noto-sans-vietnamese-700.woff2 +0 -0
- package/dist/fonts/roboto-cyrillic-400.woff2 +0 -0
- package/dist/fonts/roboto-cyrillic-500.woff2 +0 -0
- package/dist/fonts/roboto-cyrillic-700.woff2 +0 -0
- package/dist/fonts/roboto-cyrillic-ext-400.woff2 +0 -0
- package/dist/fonts/roboto-cyrillic-ext-500.woff2 +0 -0
- package/dist/fonts/roboto-cyrillic-ext-700.woff2 +0 -0
- package/dist/fonts/roboto-greek-400.woff2 +0 -0
- package/dist/fonts/roboto-greek-500.woff2 +0 -0
- package/dist/fonts/roboto-greek-700.woff2 +0 -0
- package/dist/fonts/roboto-greek-ext-400.woff2 +0 -0
- package/dist/fonts/roboto-greek-ext-500.woff2 +0 -0
- package/dist/fonts/roboto-greek-ext-700.woff2 +0 -0
- package/dist/fonts/roboto-latin-700.woff2 +0 -0
- package/dist/fonts/roboto-latin-ext-400.woff2 +0 -0
- package/dist/fonts/roboto-latin-ext-500.woff2 +0 -0
- package/dist/fonts/roboto-latin-ext-700.woff2 +0 -0
- package/dist/fonts/roboto-vietnamese-400.woff2 +0 -0
- package/dist/fonts/roboto-vietnamese-500.woff2 +0 -0
- package/dist/fonts/roboto-vietnamese-700.woff2 +0 -0
- package/dist/js/chunks/chunk-2CS6TITK.mjs +219 -0
- package/dist/js/chunks/chunk-2CS6TITK.mjs.map +7 -0
- package/dist/js/chunks/chunk-2RLBDFH4.mjs +108 -0
- package/dist/js/chunks/chunk-2RLBDFH4.mjs.map +7 -0
- package/dist/js/chunks/chunk-3L3QIYLC.mjs +85 -0
- package/dist/js/chunks/chunk-3L3QIYLC.mjs.map +7 -0
- package/dist/js/chunks/chunk-4EWGD4V2.mjs +75 -0
- package/dist/js/chunks/chunk-4EWGD4V2.mjs.map +7 -0
- package/dist/js/chunks/chunk-4IKVPCSU.mjs +7 -0
- package/dist/js/chunks/chunk-4IKVPCSU.mjs.map +7 -0
- package/dist/js/chunks/chunk-4PIXLDNJ.mjs +127 -0
- package/dist/js/chunks/chunk-4PIXLDNJ.mjs.map +7 -0
- package/dist/js/chunks/{chunk-KVJAVDBC.mjs → chunk-4QUCNFSD.mjs} +64 -113
- package/dist/js/chunks/chunk-4QUCNFSD.mjs.map +7 -0
- package/dist/js/chunks/{chunk-UETTGDLI.mjs → chunk-4TRZ2AER.mjs} +35 -41
- package/dist/js/chunks/chunk-4TRZ2AER.mjs.map +7 -0
- package/dist/js/chunks/{chunk-C6CHEWYP.mjs → chunk-5KIHWJI2.mjs} +40 -26
- package/dist/js/chunks/chunk-5KIHWJI2.mjs.map +7 -0
- package/dist/js/chunks/{chunk-L27Q6ZMI.mjs → chunk-67ZPPKXS.mjs} +20 -33
- package/dist/js/chunks/chunk-67ZPPKXS.mjs.map +7 -0
- package/dist/js/chunks/{chunk-XAEAEHIX.mjs → chunk-6FSEUFVW.mjs} +39 -26
- package/dist/js/chunks/chunk-6FSEUFVW.mjs.map +7 -0
- package/dist/js/chunks/chunk-752ADW4M.mjs +225 -0
- package/dist/js/chunks/chunk-752ADW4M.mjs.map +7 -0
- package/dist/js/chunks/{chunk-CK2XCICY.mjs → chunk-75E5EDJF.mjs} +3 -11
- package/dist/js/chunks/chunk-75E5EDJF.mjs.map +7 -0
- package/dist/js/chunks/{chunk-KHXZ2A4K.mjs → chunk-7NLUI3RR.mjs} +139 -66
- package/dist/js/chunks/chunk-7NLUI3RR.mjs.map +7 -0
- package/dist/js/chunks/chunk-7W7TV6NY.mjs +108 -0
- package/dist/js/chunks/chunk-7W7TV6NY.mjs.map +7 -0
- package/dist/js/chunks/chunk-7YQBHTK3.mjs +225 -0
- package/dist/js/chunks/chunk-7YQBHTK3.mjs.map +7 -0
- package/dist/js/chunks/chunk-7YZ5CN3V.mjs +33 -0
- package/dist/js/chunks/chunk-7YZ5CN3V.mjs.map +7 -0
- package/dist/js/chunks/chunk-AI73GJKG.mjs +28 -0
- package/dist/js/chunks/chunk-AI73GJKG.mjs.map +7 -0
- package/dist/js/chunks/{chunk-LQWUDNHZ.mjs → chunk-ANKFWNWT.mjs} +21 -45
- package/dist/js/chunks/chunk-ANKFWNWT.mjs.map +7 -0
- package/dist/js/chunks/{chunk-5CEAOLUA.mjs → chunk-B7DQFHA5.mjs} +30 -47
- package/dist/js/chunks/chunk-B7DQFHA5.mjs.map +7 -0
- package/dist/js/chunks/chunk-BIGU5RCJ.mjs +153 -0
- package/dist/js/chunks/chunk-BIGU5RCJ.mjs.map +7 -0
- package/dist/js/chunks/{chunk-VGNYF6FB.mjs → chunk-BPF3I2MN.mjs} +109 -24
- package/dist/js/chunks/chunk-BPF3I2MN.mjs.map +7 -0
- package/dist/js/chunks/chunk-CMGXGYUC.mjs +74 -0
- package/dist/js/chunks/chunk-CMGXGYUC.mjs.map +7 -0
- package/dist/js/chunks/{chunk-NUHMOAOY.mjs → chunk-CSYWKEK3.mjs} +310 -196
- package/dist/js/chunks/chunk-CSYWKEK3.mjs.map +7 -0
- package/dist/js/chunks/chunk-CZSQHXEV.mjs +227 -0
- package/dist/js/chunks/chunk-CZSQHXEV.mjs.map +7 -0
- package/dist/js/chunks/chunk-DZYVU75J.mjs +121 -0
- package/dist/js/chunks/chunk-DZYVU75J.mjs.map +7 -0
- package/dist/js/chunks/{chunk-74MXKKLN.mjs → chunk-EC26RU2D.mjs} +11 -29
- package/dist/js/chunks/chunk-EC26RU2D.mjs.map +7 -0
- package/dist/js/chunks/{chunk-WDK4T63U.mjs → chunk-EVCVFEV3.mjs} +235 -146
- package/dist/js/chunks/chunk-EVCVFEV3.mjs.map +7 -0
- package/dist/js/chunks/chunk-FCNF4GRJ.mjs +445 -0
- package/dist/js/chunks/chunk-FCNF4GRJ.mjs.map +7 -0
- package/dist/js/chunks/chunk-GCWWEZKO.mjs +342 -0
- package/dist/js/chunks/chunk-GCWWEZKO.mjs.map +7 -0
- package/dist/js/chunks/chunk-GNRSYMVH.mjs +1 -0
- package/dist/js/chunks/chunk-GVZQH2H5.mjs +54 -0
- package/dist/js/chunks/chunk-GVZQH2H5.mjs.map +7 -0
- package/dist/js/chunks/chunk-GWZ76SR4.mjs +435 -0
- package/dist/js/chunks/chunk-GWZ76SR4.mjs.map +7 -0
- package/dist/js/chunks/{chunk-PDG64UHF.mjs → chunk-ILDRRG7T.mjs} +21 -23
- package/dist/js/chunks/chunk-ILDRRG7T.mjs.map +7 -0
- package/dist/js/chunks/chunk-INLZWHLY.mjs +80 -0
- package/dist/js/chunks/chunk-INLZWHLY.mjs.map +7 -0
- package/dist/js/chunks/chunk-JUKBBN6P.mjs +175 -0
- package/dist/js/chunks/chunk-JUKBBN6P.mjs.map +7 -0
- package/dist/js/chunks/chunk-KYIEG4U3.mjs +730 -0
- package/dist/js/chunks/chunk-KYIEG4U3.mjs.map +7 -0
- package/dist/js/chunks/{chunk-BGZLF6JZ.mjs → chunk-KZPSAXIU.mjs} +142 -32
- package/dist/js/chunks/chunk-KZPSAXIU.mjs.map +7 -0
- package/dist/js/chunks/chunk-LDXCC2L3.mjs +438 -0
- package/dist/js/chunks/chunk-LDXCC2L3.mjs.map +7 -0
- package/dist/js/chunks/chunk-NAC72P7R.mjs +137 -0
- package/dist/js/chunks/chunk-NAC72P7R.mjs.map +7 -0
- package/dist/js/chunks/chunk-NBJAUGPP.mjs +244 -0
- package/dist/js/chunks/chunk-NBJAUGPP.mjs.map +7 -0
- package/dist/js/chunks/chunk-NNHVANQA.mjs +113 -0
- package/dist/js/chunks/chunk-NNHVANQA.mjs.map +7 -0
- package/dist/js/chunks/chunk-NVQ5EHCU.mjs +376 -0
- package/dist/js/chunks/chunk-NVQ5EHCU.mjs.map +7 -0
- package/dist/js/chunks/{chunk-DXGRXYYL.mjs → chunk-OP43LLIC.mjs} +28 -45
- package/dist/js/chunks/chunk-OP43LLIC.mjs.map +7 -0
- package/dist/js/chunks/chunk-OUCHKSAW.mjs +63 -0
- package/dist/js/chunks/chunk-OUCHKSAW.mjs.map +7 -0
- package/dist/js/chunks/{chunk-TSZYSW7F.mjs → chunk-OYNUDOHR.mjs} +19 -47
- package/dist/js/chunks/chunk-OYNUDOHR.mjs.map +7 -0
- package/dist/js/chunks/{chunk-UAZSDUVP.mjs → chunk-P6DRQ6KS.mjs} +36 -30
- package/dist/js/chunks/chunk-P6DRQ6KS.mjs.map +7 -0
- package/dist/js/chunks/chunk-PA7NU5AK.mjs +99 -0
- package/dist/js/chunks/chunk-PA7NU5AK.mjs.map +7 -0
- package/dist/js/chunks/chunk-QACZ6TUP.mjs +224 -0
- package/dist/js/chunks/chunk-QACZ6TUP.mjs.map +7 -0
- package/dist/js/chunks/{chunk-GJL6GCIU.mjs → chunk-QXKWVHBD.mjs} +265 -161
- package/dist/js/chunks/chunk-QXKWVHBD.mjs.map +7 -0
- package/dist/js/chunks/{chunk-X4ISMKE2.mjs → chunk-ROH2HDB4.mjs} +7 -6
- package/dist/js/chunks/chunk-ROH2HDB4.mjs.map +7 -0
- package/dist/js/chunks/chunk-S23RJ3XY.mjs +86 -0
- package/dist/js/chunks/chunk-S23RJ3XY.mjs.map +7 -0
- package/dist/js/chunks/{chunk-SMY7GJSS.mjs → chunk-SPPHF7YZ.mjs} +36 -29
- package/dist/js/chunks/chunk-SPPHF7YZ.mjs.map +7 -0
- package/dist/js/chunks/chunk-T3BNSRP3.mjs +152 -0
- package/dist/js/chunks/chunk-T3BNSRP3.mjs.map +7 -0
- package/dist/js/chunks/chunk-TFABTUAZ.mjs +108 -0
- package/dist/js/chunks/chunk-TFABTUAZ.mjs.map +7 -0
- package/dist/js/chunks/chunk-U4B3VHFS.mjs +507 -0
- package/dist/js/chunks/chunk-U4B3VHFS.mjs.map +7 -0
- package/dist/js/chunks/chunk-UGJHCHXG.mjs +341 -0
- package/dist/js/chunks/chunk-UGJHCHXG.mjs.map +7 -0
- package/dist/js/chunks/chunk-VFV75DHF.mjs +70 -0
- package/dist/js/chunks/chunk-VFV75DHF.mjs.map +7 -0
- package/dist/js/chunks/{chunk-ZX6M7SWO.mjs → chunk-VGY4M57S.mjs} +266 -120
- package/dist/js/chunks/chunk-VGY4M57S.mjs.map +7 -0
- package/dist/js/chunks/chunk-VH4BMAZS.mjs +167 -0
- package/dist/js/chunks/chunk-VH4BMAZS.mjs.map +7 -0
- package/dist/js/chunks/chunk-VJVQIXHC.mjs +123 -0
- package/dist/js/chunks/chunk-VJVQIXHC.mjs.map +7 -0
- package/dist/js/chunks/{chunk-SFI2U4YW.mjs → chunk-VMY55K2X.mjs} +76 -109
- package/dist/js/chunks/chunk-VMY55K2X.mjs.map +7 -0
- package/dist/js/chunks/{chunk-KUFHW3DS.mjs → chunk-VR3L2WN5.mjs} +11 -17
- package/dist/js/chunks/chunk-VR3L2WN5.mjs.map +7 -0
- package/dist/js/chunks/chunk-W6FAL3TI.mjs +38 -0
- package/dist/js/chunks/chunk-W6FAL3TI.mjs.map +7 -0
- package/dist/js/chunks/chunk-WU7XJ4RR.mjs +450 -0
- package/dist/js/chunks/chunk-WU7XJ4RR.mjs.map +7 -0
- package/dist/js/chunks/chunk-X7SDA2J5.mjs +116 -0
- package/dist/js/chunks/chunk-X7SDA2J5.mjs.map +7 -0
- package/dist/js/chunks/chunk-Y6H2X7ZC.mjs +209 -0
- package/dist/js/chunks/chunk-Y6H2X7ZC.mjs.map +7 -0
- package/dist/js/chunks/chunk-Y6TLRA3U.mjs +129 -0
- package/dist/js/chunks/chunk-Y6TLRA3U.mjs.map +7 -0
- package/dist/js/chunks/chunk-Z4GICXR2.mjs +190 -0
- package/dist/js/chunks/chunk-Z4GICXR2.mjs.map +7 -0
- package/dist/js/chunks/chunk-Z4OARDZ7.mjs +442 -0
- package/dist/js/chunks/chunk-Z4OARDZ7.mjs.map +7 -0
- package/dist/js/chunks/{chunk-FM5CZOUB.mjs → chunk-ZJNLAGY5.mjs} +19 -30
- package/dist/js/chunks/chunk-ZJNLAGY5.mjs.map +7 -0
- package/dist/js/chunks/chunk-ZKWUWBUB.mjs +81 -0
- package/dist/js/chunks/chunk-ZKWUWBUB.mjs.map +7 -0
- package/dist/js/chunks/chunk-ZM3XBHWV.mjs +746 -0
- package/dist/js/chunks/chunk-ZM3XBHWV.mjs.map +7 -0
- package/dist/js/chunks/chunk-ZO6ZLHFF.mjs +48 -0
- package/dist/js/chunks/chunk-ZO6ZLHFF.mjs.map +7 -0
- package/dist/js/chunks/chunk-ZVLOUDIJ.mjs +251 -0
- package/dist/js/chunks/chunk-ZVLOUDIJ.mjs.map +7 -0
- package/dist/js/expressive.cjs +10613 -4327
- package/dist/js/expressive.cjs.map +4 -4
- package/dist/js/expressive.js +10613 -4327
- package/dist/js/expressive.js.map +4 -4
- package/dist/js/expressive.min.js +23 -22
- package/dist/js/expressive.min.js.map +4 -4
- package/dist/js/expressive.mjs +182 -71
- package/dist/js/expressive.mjs.map +2 -2
- package/dist/js/internal/behaviors/bottomSheets.mjs +4 -3
- package/dist/js/internal/behaviors/copy.mjs +9 -0
- package/dist/js/internal/behaviors/copy.mjs.map +7 -0
- package/dist/js/internal/behaviors/dataTables.mjs +10 -0
- package/dist/js/internal/behaviors/dataTables.mjs.map +7 -0
- package/dist/js/internal/behaviors/dialogs.mjs +2 -2
- package/dist/js/internal/behaviors/forms.mjs +2 -2
- package/dist/js/internal/behaviors/imageCompare.mjs +8 -0
- package/dist/js/internal/behaviors/imageCompare.mjs.map +7 -0
- package/dist/js/internal/behaviors/lists.mjs +8 -0
- package/dist/js/internal/behaviors/lists.mjs.map +7 -0
- package/dist/js/internal/behaviors/paneResize.mjs +8 -0
- package/dist/js/internal/behaviors/paneResize.mjs.map +7 -0
- package/dist/js/internal/behaviors/sheetDrag.mjs +7 -2
- package/dist/js/internal/behaviors/sideSheets.mjs +4 -3
- package/dist/js/internal/behaviors/sortable.mjs +8 -0
- package/dist/js/internal/behaviors/sortable.mjs.map +7 -0
- package/dist/js/internal/behaviors/theme.mjs +8 -0
- package/dist/js/internal/behaviors/theme.mjs.map +7 -0
- package/dist/js/internal/behaviors/tour.mjs +8 -0
- package/dist/js/internal/behaviors/tour.mjs.map +7 -0
- package/dist/js/internal/behaviors/transferList.mjs +8 -0
- package/dist/js/internal/behaviors/transferList.mjs.map +7 -0
- package/dist/js/internal/components/appBar.mjs +3 -2
- package/dist/js/internal/components/autocomplete.mjs +4 -4
- package/dist/js/internal/components/backToTop.mjs +9 -0
- package/dist/js/internal/components/backToTop.mjs.map +7 -0
- package/dist/js/internal/components/barChart.mjs +5 -4
- package/dist/js/internal/components/buttonGroup.mjs +3 -2
- package/dist/js/internal/components/buttons.mjs +3 -3
- package/dist/js/internal/components/cards.mjs +3 -3
- package/dist/js/internal/components/carousel.mjs +3 -3
- package/dist/js/internal/components/cascader.mjs +10 -0
- package/dist/js/internal/components/cascader.mjs.map +7 -0
- package/dist/js/internal/components/characterCounter.mjs +3 -2
- package/dist/js/internal/components/chips.mjs +6 -5
- package/dist/js/internal/components/colorPicker.mjs +9 -0
- package/dist/js/internal/components/colorPicker.mjs.map +7 -0
- package/dist/js/internal/components/columnChart.mjs +4 -3
- package/dist/js/internal/components/commandPalette.mjs +3 -3
- package/dist/js/internal/components/confetti.mjs +3 -2
- package/dist/js/internal/components/currencyInput.mjs +9 -0
- package/dist/js/internal/components/currencyInput.mjs.map +7 -0
- package/dist/js/internal/components/datepicker.mjs +11 -8
- package/dist/js/internal/components/expandingCard.mjs +3 -3
- package/dist/js/internal/components/funnelChart.mjs +10 -0
- package/dist/js/internal/components/funnelChart.mjs.map +7 -0
- package/dist/js/internal/components/heatmapChart.mjs +4 -3
- package/dist/js/internal/components/hoverCard.mjs +9 -0
- package/dist/js/internal/components/hoverCard.mjs.map +7 -0
- package/dist/js/internal/components/index.mjs +131 -66
- package/dist/js/internal/components/inputMask.mjs +9 -0
- package/dist/js/internal/components/inputMask.mjs.map +7 -0
- package/dist/js/internal/components/keypad.mjs +3 -3
- package/dist/js/internal/components/lightbox.mjs +3 -3
- package/dist/js/internal/components/lineChart.mjs +25 -4
- package/dist/js/internal/components/loadingOverlay.mjs +9 -0
- package/dist/js/internal/components/loadingOverlay.mjs.map +7 -0
- package/dist/js/internal/components/mapView.mjs +3 -3
- package/dist/js/internal/components/menu.mjs +3 -3
- package/dist/js/internal/components/menubar.mjs +10 -0
- package/dist/js/internal/components/menubar.mjs.map +7 -0
- package/dist/js/internal/components/messageScroller.mjs +3 -3
- package/dist/js/internal/components/mixedChart.mjs +5 -4
- package/dist/js/internal/components/navigationRail.mjs +3 -2
- package/dist/js/internal/components/particles.mjs +3 -2
- package/dist/js/internal/components/pieChart.mjs +4 -3
- package/dist/js/internal/components/pullToRefresh.mjs +9 -0
- package/dist/js/internal/components/pullToRefresh.mjs.map +7 -0
- package/dist/js/internal/components/questionnaire.mjs +3 -3
- package/dist/js/internal/components/radarChart.mjs +4 -3
- package/dist/js/internal/components/radialChart.mjs +4 -3
- package/dist/js/internal/components/registry.mjs +59 -41
- package/dist/js/internal/components/richTextEditor.mjs +3 -3
- package/dist/js/internal/components/sankeyChart.mjs +10 -0
- package/dist/js/internal/components/sankeyChart.mjs.map +7 -0
- package/dist/js/internal/components/scatterChart.mjs +10 -0
- package/dist/js/internal/components/scatterChart.mjs.map +7 -0
- package/dist/js/internal/components/scrollspy.mjs +3 -2
- package/dist/js/internal/components/select.mjs +4 -4
- package/dist/js/internal/components/showMore.mjs +9 -0
- package/dist/js/internal/components/showMore.mjs.map +7 -0
- package/dist/js/internal/components/slider.mjs +3 -3
- package/dist/js/internal/components/snackbar.mjs +2 -2
- package/dist/js/internal/components/swipeActions.mjs +9 -0
- package/dist/js/internal/components/swipeActions.mjs.map +7 -0
- package/dist/js/internal/components/tabs.mjs +3 -4
- package/dist/js/internal/components/timepicker.mjs +5 -4
- package/dist/js/internal/components/tooltip.mjs +3 -3
- package/dist/js/internal/components/treeSelect.mjs +13 -0
- package/dist/js/internal/components/treeSelect.mjs.map +7 -0
- package/dist/js/internal/components/treemapChart.mjs +10 -0
- package/dist/js/internal/components/treemapChart.mjs.map +7 -0
- package/dist/js/internal/core/component.mjs +2 -1
- package/dist/js/internal/core/formControl.mjs +12 -0
- package/dist/js/internal/core/formControl.mjs.map +7 -0
- package/dist/js/internal/core/spring.mjs +11 -0
- package/dist/js/internal/core/spring.mjs.map +7 -0
- package/dist/js/internal/core/utils.mjs +11 -3
- package/dist/js/internal/plugins/dockedDisplayPlugin.mjs +2 -2
- package/dist/js/internal/plugins/modalDisplayPlugin.mjs +13 -0
- package/dist/js/internal/plugins/modalDisplayPlugin.mjs.map +7 -0
- package/dist/js/modular.mjs +173 -71
- package/dist/types/behaviors/bottomSheets.d.ts +19 -3
- package/dist/types/behaviors/copy.d.ts +18 -0
- package/dist/types/behaviors/dataTables.d.ts +129 -0
- package/dist/types/behaviors/dialogs.d.ts +27 -1
- package/dist/types/behaviors/forms.d.ts +68 -2
- package/dist/types/behaviors/imageCompare.d.ts +12 -0
- package/dist/types/behaviors/lists.d.ts +12 -0
- package/dist/types/behaviors/paneResize.d.ts +29 -0
- package/dist/types/behaviors/sheetDrag.d.ts +18 -0
- package/dist/types/behaviors/sideSheets.d.ts +1 -1
- package/dist/types/behaviors/sortable.d.ts +28 -0
- package/dist/types/behaviors/theme.d.ts +22 -0
- package/dist/types/behaviors/tour.d.ts +36 -0
- package/dist/types/behaviors/transferList.d.ts +51 -0
- package/dist/types/components/appBar.d.ts +5 -6
- package/dist/types/components/autocomplete.d.ts +91 -17
- package/dist/types/components/backToTop.d.ts +36 -0
- package/dist/types/components/barChart.d.ts +3 -6
- package/dist/types/components/buttonGroup.d.ts +2 -4
- package/dist/types/components/buttons.d.ts +5 -5
- package/dist/types/components/cards.d.ts +3 -16
- package/dist/types/components/carousel.d.ts +9 -15
- package/dist/types/components/cascader.d.ts +130 -0
- package/dist/types/components/characterCounter.d.ts +2 -15
- package/dist/types/components/chips.d.ts +65 -19
- package/dist/types/components/colorPicker.d.ts +42 -0
- package/dist/types/components/columnChart.d.ts +23 -10
- package/dist/types/components/commandPalette.d.ts +11 -16
- package/dist/types/components/confetti.d.ts +2 -4
- package/dist/types/components/currencyInput.d.ts +59 -0
- package/dist/types/components/datepicker.d.ts +56 -32
- package/dist/types/components/expandingCard.d.ts +4 -6
- package/dist/types/components/funnelChart.d.ts +38 -0
- package/dist/types/components/heatmapChart.d.ts +39 -8
- package/dist/types/components/hoverCard.d.ts +58 -0
- package/dist/types/components/index.d.ts +16 -1
- package/dist/types/components/inputMask.d.ts +30 -0
- package/dist/types/components/keypad.d.ts +38 -6
- package/dist/types/components/lightbox.d.ts +14 -20
- package/dist/types/components/lineChart.d.ts +172 -10
- package/dist/types/components/loadingOverlay.d.ts +42 -0
- package/dist/types/components/mapView.d.ts +26 -17
- package/dist/types/components/menu.d.ts +60 -22
- package/dist/types/components/menubar.d.ts +37 -0
- package/dist/types/components/messageScroller.d.ts +2 -14
- package/dist/types/components/mixedChart.d.ts +15 -6
- package/dist/types/components/navigationRail.d.ts +16 -5
- package/dist/types/components/particles.d.ts +8 -4
- package/dist/types/components/pieChart.d.ts +32 -7
- package/dist/types/components/pullToRefresh.d.ts +80 -0
- package/dist/types/components/questionnaire.d.ts +58 -16
- package/dist/types/components/radarChart.d.ts +10 -6
- package/dist/types/components/radialChart.d.ts +58 -7
- package/dist/types/components/registry.d.ts +73 -3
- package/dist/types/components/richTextEditor.d.ts +6 -14
- package/dist/types/components/sankeyChart.d.ts +72 -0
- package/dist/types/components/scatterChart.d.ts +102 -0
- package/dist/types/components/scrollspy.d.ts +3 -5
- package/dist/types/components/select.d.ts +43 -30
- package/dist/types/components/showMore.d.ts +51 -0
- package/dist/types/components/slider.d.ts +3 -15
- package/dist/types/components/snackbar.d.ts +61 -0
- package/dist/types/components/swipeActions.d.ts +81 -0
- package/dist/types/components/tabs.d.ts +89 -27
- package/dist/types/components/timepicker.d.ts +113 -21
- package/dist/types/components/tooltip.d.ts +56 -20
- package/dist/types/components/treeSelect.d.ts +106 -0
- package/dist/types/components/treemapChart.d.ts +56 -0
- package/dist/types/core/component.d.ts +43 -25
- package/dist/types/core/formControl.d.ts +21 -0
- package/dist/types/core/spring.d.ts +20 -0
- package/dist/types/core/utils.d.ts +85 -72
- package/dist/types/modular.d.ts +33 -1
- package/dist/types/plugins/dockedDisplayPlugin.d.ts +10 -8
- package/dist/types/plugins/modalDisplayPlugin.d.ts +32 -0
- package/package.json +10 -8
- package/src/sass/README.md +27 -18
- package/src/sass/abstracts/_elevation.scss +13 -7
- package/src/sass/abstracts/_index.scss +1 -0
- package/src/sass/abstracts/_mixins.scss +422 -36
- package/src/sass/abstracts/_spring.scss +63 -0
- package/src/sass/abstracts/_variables.scss +39 -21
- package/src/sass/base/_fonts.scss +61 -48
- package/src/sass/base/_global.scss +104 -24
- package/src/sass/base/_index.scss +2 -0
- package/src/sass/base/_normalize.scss +59 -114
- package/src/sass/base/_print.scss +21 -0
- package/src/sass/base/_prose.scss +68 -0
- package/src/sass/base/_typography.scss +9 -5
- package/src/sass/components/_accordion.scss +9 -16
- package/src/sass/components/_alert.scss +102 -0
- package/src/sass/components/_aura.scss +8 -3
- package/src/sass/components/_avatar.scss +3 -3
- package/src/sass/components/_back-to-top.scss +38 -0
- package/src/sass/components/_badges.scss +6 -5
- package/src/sass/components/_bar-chart.scss +41 -19
- package/src/sass/components/_bottom-sheet.scss +44 -16
- package/src/sass/components/_breadcrumb.scss +8 -1
- package/src/sass/components/_button-groups.scss +15 -25
- package/src/sass/components/_buttons.scss +156 -63
- package/src/sass/components/_calendar.scss +246 -0
- package/src/sass/components/_cards.scss +36 -44
- package/src/sass/components/_carousel.scss +27 -103
- package/src/sass/components/_cascader.scss +142 -0
- package/src/sass/components/_chips.scss +36 -46
- package/src/sass/components/_column-chart.scss +19 -12
- package/src/sass/components/_command-palette.scss +4 -7
- package/src/sass/components/_confetti.scss +0 -2
- package/src/sass/components/_countdown.scss +1 -1
- package/src/sass/components/_data-table.scss +162 -25
- package/src/sass/components/_datepicker.scss +54 -40
- package/src/sass/components/_description-list.scss +85 -0
- package/src/sass/components/_dialog.scss +42 -41
- package/src/sass/components/_docked-display.scss +1 -3
- package/src/sass/components/_drag-handle.scss +16 -20
- package/src/sass/components/_expanding-card.scss +20 -9
- package/src/sass/components/_fab-menu.scss +44 -32
- package/src/sass/components/_funnel-chart.scss +124 -0
- package/src/sass/components/_heatmap-chart.scss +111 -22
- package/src/sass/components/_icon-buttons.scss +7 -7
- package/src/sass/components/_icons-material-design.scss +2 -2
- package/src/sass/components/_image-compare.scss +108 -0
- package/src/sass/components/_index.scss +20 -0
- package/src/sass/components/_keypad.scss +39 -19
- package/src/sass/components/_kpi.scss +6 -11
- package/src/sass/components/_lightbox.scss +24 -13
- package/src/sass/components/_line-chart.scss +16 -2
- package/src/sass/components/_list.scss +59 -14
- package/src/sass/components/_loading-indicator.scss +1 -0
- package/src/sass/components/_loading-overlay.scss +105 -0
- package/src/sass/components/_map.scss +33 -11
- package/src/sass/components/_marquee.scss +3 -2
- package/src/sass/components/_mega-menu.scss +137 -0
- package/src/sass/components/_menu.scss +143 -123
- package/src/sass/components/_menubar.scss +59 -0
- package/src/sass/components/_message-scroller.scss +2 -2
- package/src/sass/components/_message.scss +3 -3
- package/src/sass/components/_mixed-chart.scss +37 -9
- package/src/sass/components/_modal-display.scss +21 -0
- package/src/sass/components/_navbar.scss +34 -20
- package/src/sass/components/_navigation-bar.scss +15 -77
- package/src/sass/components/_navigation-rail.scss +151 -92
- package/src/sass/components/_org-chart.scss +192 -0
- package/src/sass/components/_page-footer.scss +1 -1
- package/src/sass/components/_pagination.scss +6 -13
- package/src/sass/components/_panes.scss +32 -26
- package/src/sass/components/_particles.scss +0 -2
- package/src/sass/components/_pie-chart.scss +91 -11
- package/src/sass/components/_popover.scss +18 -5
- package/src/sass/components/_progress.scss +152 -31
- package/src/sass/components/_pull-to-refresh.scss +90 -0
- package/src/sass/components/_questionnaire.scss +74 -3
- package/src/sass/components/_radar-chart.scss +38 -10
- package/src/sass/components/_radial-chart.scss +113 -5
- package/src/sass/components/_rich-text-editor.scss +2 -2
- package/src/sass/components/_sankey-chart.scss +114 -0
- package/src/sass/components/_scatter-chart.scss +153 -0
- package/src/sass/components/_scrim.scss +0 -2
- package/src/sass/components/_scrollspy.scss +0 -2
- package/src/sass/components/_search.scss +26 -22
- package/src/sass/components/_show-more.scss +8 -0
- package/src/sass/components/_side-sheet.scss +23 -37
- package/src/sass/components/_skeleton.scss +2 -4
- package/src/sass/components/_snackbar.scss +27 -21
- package/src/sass/components/_split-button.scss +5 -5
- package/src/sass/components/_stat.scss +3 -8
- package/src/sass/components/_stepper.scss +1 -1
- package/src/sass/components/_swipe-actions.scss +71 -0
- package/src/sass/components/_tabs.scss +51 -32
- package/src/sass/components/_timeline.scss +12 -12
- package/src/sass/components/_timepicker.scss +109 -78
- package/src/sass/components/_toolbar.scss +35 -43
- package/src/sass/components/_tooltip.scss +21 -12
- package/src/sass/components/_tour.scss +89 -0
- package/src/sass/components/_transfer-list.scss +73 -0
- package/src/sass/components/_transitions.scss +4 -4
- package/src/sass/components/_tree.scss +3 -16
- package/src/sass/components/_treemap-chart.scss +122 -0
- package/src/sass/components/forms/_checkboxes.scss +106 -24
- package/src/sass/components/forms/_color-picker.scss +135 -0
- package/src/sass/components/forms/_color-swatches.scss +85 -0
- package/src/sass/components/forms/_drop-zone.scss +15 -9
- package/src/sass/components/forms/_fieldset.scss +7 -7
- package/src/sass/components/forms/_file-input.scss +6 -8
- package/src/sass/components/forms/_index.scss +3 -1
- package/src/sass/components/forms/_input-fields.scss +254 -90
- package/src/sass/components/forms/_radio-buttons.scss +33 -94
- package/src/sass/components/forms/_rating.scss +2 -32
- package/src/sass/components/forms/_select.scss +199 -20
- package/src/sass/components/forms/_slider.scss +91 -94
- package/src/sass/components/forms/_switches.scss +53 -164
- package/src/sass/custom.scss +10 -1
- package/src/sass/expressive.scss +3 -63
- package/src/sass/tokens/_contrast.scss +94 -0
- package/src/sass/tokens/_elevation.scss +16 -0
- package/src/sass/tokens/_index.scss +5 -0
- package/src/sass/tokens/_motion.scss +109 -0
- package/src/sass/tokens/_reference.scss +72 -141
- package/src/sass/tokens/_shape.scss +38 -0
- package/src/sass/tokens/_stacking.scss +27 -0
- package/src/sass/tokens/_state.scss +0 -2
- package/src/sass/tokens/_theme.scss +10 -1
- package/src/sass/tokens/_vibrant.scss +2 -5
- package/src/sass/utilities/_defer-render.scss +17 -0
- package/src/sass/utilities/_helpers.scss +183 -26
- package/src/sass/utilities/_index.scss +1 -0
- package/src/sass/utilities/_scroll-area.scss +0 -2
- package/src/sass/utilities/_spacing.scss +52 -34
- package/src/sass/utilities/_typescale.scss +8 -1
- package/src/sass/utilities/_visibility.scss +47 -76
- package/src/sass/utilities/_z-depth.scss +7 -4
- package/dist/js/chunks/chunk-33QVDDGR.mjs +0 -270
- package/dist/js/chunks/chunk-33QVDDGR.mjs.map +0 -7
- package/dist/js/chunks/chunk-45FER6RI.mjs +0 -59
- package/dist/js/chunks/chunk-45FER6RI.mjs.map +0 -7
- package/dist/js/chunks/chunk-5CEAOLUA.mjs.map +0 -7
- package/dist/js/chunks/chunk-6VATUZC6.mjs +0 -295
- package/dist/js/chunks/chunk-6VATUZC6.mjs.map +0 -7
- package/dist/js/chunks/chunk-74MXKKLN.mjs.map +0 -7
- package/dist/js/chunks/chunk-AIURVCG6.mjs +0 -55
- package/dist/js/chunks/chunk-AIURVCG6.mjs.map +0 -7
- package/dist/js/chunks/chunk-BGZLF6JZ.mjs.map +0 -7
- package/dist/js/chunks/chunk-C6CHEWYP.mjs.map +0 -7
- package/dist/js/chunks/chunk-CK2XCICY.mjs.map +0 -7
- package/dist/js/chunks/chunk-CXXM2L4F.mjs +0 -344
- package/dist/js/chunks/chunk-CXXM2L4F.mjs.map +0 -7
- package/dist/js/chunks/chunk-DXGRXYYL.mjs.map +0 -7
- package/dist/js/chunks/chunk-FM5CZOUB.mjs.map +0 -7
- package/dist/js/chunks/chunk-GJL6GCIU.mjs.map +0 -7
- package/dist/js/chunks/chunk-K3HZMFMD.mjs +0 -135
- package/dist/js/chunks/chunk-K3HZMFMD.mjs.map +0 -7
- package/dist/js/chunks/chunk-KHXZ2A4K.mjs.map +0 -7
- package/dist/js/chunks/chunk-KQACNQ22.mjs +0 -7
- package/dist/js/chunks/chunk-KQACNQ22.mjs.map +0 -7
- package/dist/js/chunks/chunk-KUFHW3DS.mjs.map +0 -7
- package/dist/js/chunks/chunk-KVJAVDBC.mjs.map +0 -7
- package/dist/js/chunks/chunk-L27Q6ZMI.mjs.map +0 -7
- package/dist/js/chunks/chunk-LQWUDNHZ.mjs.map +0 -7
- package/dist/js/chunks/chunk-M372EDXD.mjs +0 -322
- package/dist/js/chunks/chunk-M372EDXD.mjs.map +0 -7
- package/dist/js/chunks/chunk-M3MURWMB.mjs +0 -82
- package/dist/js/chunks/chunk-M3MURWMB.mjs.map +0 -7
- package/dist/js/chunks/chunk-NUHMOAOY.mjs.map +0 -7
- package/dist/js/chunks/chunk-OWG3LMUL.mjs +0 -169
- package/dist/js/chunks/chunk-OWG3LMUL.mjs.map +0 -7
- package/dist/js/chunks/chunk-PD6HYHAE.mjs +0 -48
- package/dist/js/chunks/chunk-PD6HYHAE.mjs.map +0 -7
- package/dist/js/chunks/chunk-PDG64UHF.mjs.map +0 -7
- package/dist/js/chunks/chunk-PO3AXVR3.mjs +0 -546
- package/dist/js/chunks/chunk-PO3AXVR3.mjs.map +0 -7
- package/dist/js/chunks/chunk-QYGK36OG.mjs +0 -181
- package/dist/js/chunks/chunk-QYGK36OG.mjs.map +0 -7
- package/dist/js/chunks/chunk-SFI2U4YW.mjs.map +0 -7
- package/dist/js/chunks/chunk-SMY7GJSS.mjs.map +0 -7
- package/dist/js/chunks/chunk-TCCA2HDG.mjs +0 -414
- package/dist/js/chunks/chunk-TCCA2HDG.mjs.map +0 -7
- package/dist/js/chunks/chunk-TSZYSW7F.mjs.map +0 -7
- package/dist/js/chunks/chunk-UAZSDUVP.mjs.map +0 -7
- package/dist/js/chunks/chunk-UBRZZWRA.mjs +0 -127
- package/dist/js/chunks/chunk-UBRZZWRA.mjs.map +0 -7
- package/dist/js/chunks/chunk-UCOE7ZDL.mjs +0 -287
- package/dist/js/chunks/chunk-UCOE7ZDL.mjs.map +0 -7
- package/dist/js/chunks/chunk-UETTGDLI.mjs.map +0 -7
- package/dist/js/chunks/chunk-UNCRDLP6.mjs +0 -136
- package/dist/js/chunks/chunk-UNCRDLP6.mjs.map +0 -7
- package/dist/js/chunks/chunk-VGNYF6FB.mjs.map +0 -7
- package/dist/js/chunks/chunk-VGPGBNGL.mjs +0 -68
- package/dist/js/chunks/chunk-VGPGBNGL.mjs.map +0 -7
- package/dist/js/chunks/chunk-VKAUVTQY.mjs +0 -1
- package/dist/js/chunks/chunk-VM4FTS7L.mjs +0 -48
- package/dist/js/chunks/chunk-VM4FTS7L.mjs.map +0 -7
- package/dist/js/chunks/chunk-WDK4T63U.mjs.map +0 -7
- package/dist/js/chunks/chunk-WOCCTVUF.mjs +0 -185
- package/dist/js/chunks/chunk-WOCCTVUF.mjs.map +0 -7
- package/dist/js/chunks/chunk-WQYN5L4E.mjs +0 -107
- package/dist/js/chunks/chunk-WQYN5L4E.mjs.map +0 -7
- package/dist/js/chunks/chunk-X4ISMKE2.mjs.map +0 -7
- package/dist/js/chunks/chunk-XAEAEHIX.mjs.map +0 -7
- package/dist/js/chunks/chunk-ZX6M7SWO.mjs.map +0 -7
- /package/dist/js/chunks/{chunk-VKAUVTQY.mjs.map → chunk-GNRSYMVH.mjs.map} +0 -0
|
@@ -0,0 +1,507 @@
|
|
|
1
|
+
import {
|
|
2
|
+
numberValue
|
|
3
|
+
} from "./chunk-ZM3XBHWV.mjs";
|
|
4
|
+
import {
|
|
5
|
+
Utils,
|
|
6
|
+
controllerFor
|
|
7
|
+
} from "./chunk-ZVLOUDIJ.mjs";
|
|
8
|
+
|
|
9
|
+
// src/ts/behaviors/dataTables.ts
|
|
10
|
+
var ROWS = ":scope > tbody > tr:not(.data-table-detail)";
|
|
11
|
+
var BOX = ':scope > :first-child input[type="checkbox"]';
|
|
12
|
+
var HANDLE = ".data-table > table > thead > tr:first-child > th > button.drag-handle:last-child";
|
|
13
|
+
var STEP = 16;
|
|
14
|
+
var ORDER = { ascending: 1, descending: -1 };
|
|
15
|
+
var TOGGLE = '[role="menuitemcheckbox"][data-column]';
|
|
16
|
+
var HIDDEN = "data-column-hidden";
|
|
17
|
+
var FILTER = 'input[type="search"][data-table-filter]';
|
|
18
|
+
var FILTERED = "data-table-filter-hidden";
|
|
19
|
+
var PAGED = "data-table-page-hidden";
|
|
20
|
+
var PAGE_BUTTON = 'button[type="button"]:is([data-table-page="previous"], [data-table-page="next"])';
|
|
21
|
+
var PAGE_STEP = { previous: -1, next: 1 };
|
|
22
|
+
var PAGE_SIZE = "select[data-table-page-size]:not([multiple], :disabled):not(:has(option:checked:disabled))";
|
|
23
|
+
function validPageState(state) {
|
|
24
|
+
if (!state) return false;
|
|
25
|
+
return [[state.page, 1], [state.pageSize, 1], [state.total, 0]].every(
|
|
26
|
+
([value, minimum]) => Number.isSafeInteger(value) && value >= minimum
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
function pageIndex(page, total, size) {
|
|
30
|
+
return Math.min(Math.max(page, 1), Math.ceil(total / size));
|
|
31
|
+
}
|
|
32
|
+
function positivePageSize(value) {
|
|
33
|
+
const size = Number(value);
|
|
34
|
+
return Number.isSafeInteger(size) && size > 0 ? size : 0;
|
|
35
|
+
}
|
|
36
|
+
function pageSize(wrapper) {
|
|
37
|
+
return positivePageSize(wrapper.getAttribute("data-page-size"));
|
|
38
|
+
}
|
|
39
|
+
function tableControl(wrapper, selector) {
|
|
40
|
+
return Array.from(wrapper.querySelectorAll(selector)).find((el) => el.closest(".data-table") === wrapper);
|
|
41
|
+
}
|
|
42
|
+
function visibleRecord(row) {
|
|
43
|
+
if (row.closest(`[hidden], [${FILTERED}], [${PAGED}]`)) return false;
|
|
44
|
+
if (row.checkVisibility) return row.checkVisibility({ visibilityProperty: true });
|
|
45
|
+
const style = getComputedStyle(row);
|
|
46
|
+
return style.display !== "none" && !["hidden", "collapse"].includes(style.visibility);
|
|
47
|
+
}
|
|
48
|
+
function cellAt(row, column) {
|
|
49
|
+
let end = 0;
|
|
50
|
+
for (const cell of Array.from(row.cells)) {
|
|
51
|
+
end += cell.colSpan;
|
|
52
|
+
if (column < end) return cell;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
function cellText(row, column) {
|
|
56
|
+
const cell = cellAt(row, column);
|
|
57
|
+
return (cell?.dataset.value ?? cell?.textContent ?? "").trim();
|
|
58
|
+
}
|
|
59
|
+
function cover(taken, row, column, cell) {
|
|
60
|
+
for (let r = row; r < row + Math.max(1, cell.rowSpan); r++) {
|
|
61
|
+
for (let c = column; c < column + cell.colSpan; c++) (taken[r] ?? (taken[r] = /* @__PURE__ */ new Set())).add(c);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
function headerColumns(head) {
|
|
65
|
+
const [taken, columns] = [[], /* @__PURE__ */ new Map()];
|
|
66
|
+
Array.from(head.rows).forEach((row, r) => {
|
|
67
|
+
let column = 0;
|
|
68
|
+
for (const cell of Array.from(row.cells)) {
|
|
69
|
+
while (taken[r]?.has(column)) column++;
|
|
70
|
+
columns.set(cell, column);
|
|
71
|
+
cover(taken, r, column, cell);
|
|
72
|
+
column += cell.colSpan;
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
return columns;
|
|
76
|
+
}
|
|
77
|
+
function toggledHeader(item) {
|
|
78
|
+
const root = item.getRootNode();
|
|
79
|
+
const header = root.getElementById?.(item.getAttribute("data-column"));
|
|
80
|
+
return header?.matches(".data-table > table > thead > tr:first-child > th") && header.colSpan === 1 ? header : null;
|
|
81
|
+
}
|
|
82
|
+
function columnCells(table, column) {
|
|
83
|
+
const head = [...headerColumns(table.tHead)].filter(([, each]) => each === column).map(([cell]) => cell);
|
|
84
|
+
const rows = table.querySelectorAll(":scope > tbody > tr, :scope > tfoot > tr");
|
|
85
|
+
return [...head, ...Array.from(rows, (row) => cellAt(row, column))].filter((cell) => cell?.colSpan === 1);
|
|
86
|
+
}
|
|
87
|
+
function conceal(cell) {
|
|
88
|
+
if (cell.hidden) return;
|
|
89
|
+
cell.hidden = true;
|
|
90
|
+
cell.setAttribute(HIDDEN, "");
|
|
91
|
+
}
|
|
92
|
+
function reveal(cell) {
|
|
93
|
+
if (!cell.hasAttribute(HIDDEN)) return;
|
|
94
|
+
cell.hidden = false;
|
|
95
|
+
cell.removeAttribute(HIDDEN);
|
|
96
|
+
}
|
|
97
|
+
function applyToggle(item) {
|
|
98
|
+
const header = toggledHeader(item);
|
|
99
|
+
if (!header) return;
|
|
100
|
+
const table = header.closest("table");
|
|
101
|
+
const show = item.getAttribute("aria-checked") === "true";
|
|
102
|
+
columnCells(table, headerColumns(table.tHead).get(header)).forEach(show ? reveal : conceal);
|
|
103
|
+
refit(table, header);
|
|
104
|
+
}
|
|
105
|
+
function refit(table, header) {
|
|
106
|
+
if (table.style.tableLayout !== "fixed") return;
|
|
107
|
+
if (!header.hidden && !header.style.width) header.style.width = `${Math.max(bounds(header)[0], header.scrollWidth)}px`;
|
|
108
|
+
fit(table);
|
|
109
|
+
}
|
|
110
|
+
function firstCells(table) {
|
|
111
|
+
return Array.from(table.rows[0]?.cells ?? []).filter((cell) => !cell.hidden);
|
|
112
|
+
}
|
|
113
|
+
function fit(table) {
|
|
114
|
+
table.style.width = `${firstCells(table).reduce((sum, cell) => sum + parseFloat(cell.style.width), 0)}px`;
|
|
115
|
+
}
|
|
116
|
+
function freeze(table) {
|
|
117
|
+
if (table.style.tableLayout === "fixed") return;
|
|
118
|
+
const cells = firstCells(table);
|
|
119
|
+
const sizes = cells.map((cell) => cell.getBoundingClientRect().width);
|
|
120
|
+
cells.forEach((cell, i) => cell.style.width = `${sizes[i]}px`);
|
|
121
|
+
table.style.tableLayout = "fixed";
|
|
122
|
+
fit(table);
|
|
123
|
+
}
|
|
124
|
+
function bounds(header) {
|
|
125
|
+
const min = parseFloat(getComputedStyle(header).minWidth) || 0;
|
|
126
|
+
return [min, Math.max(min, header.closest(".data-table").clientWidth)];
|
|
127
|
+
}
|
|
128
|
+
function nextStep(header) {
|
|
129
|
+
const [min, max] = bounds(header);
|
|
130
|
+
const current = header.getBoundingClientRect().width;
|
|
131
|
+
return [min, (min + max) / 2, max].find((width) => width > current + 1) ?? min;
|
|
132
|
+
}
|
|
133
|
+
function keyWidth(header, e) {
|
|
134
|
+
const [min, max] = bounds(header);
|
|
135
|
+
const amount = (e.shiftKey ? 4 : 1) * STEP * (getComputedStyle(header).direction === "rtl" ? -1 : 1);
|
|
136
|
+
const current = header.getBoundingClientRect().width;
|
|
137
|
+
const widths = { ArrowRight: current + amount, ArrowLeft: current - amount, Home: min, End: max };
|
|
138
|
+
return widths[e.key];
|
|
139
|
+
}
|
|
140
|
+
var _DataTables = class _DataTables {
|
|
141
|
+
static Init() {
|
|
142
|
+
if (_DataTables._initialized || typeof document === "undefined") return;
|
|
143
|
+
_DataTables._initialized = true;
|
|
144
|
+
document.addEventListener("input", _DataTables._onChange);
|
|
145
|
+
document.addEventListener("input", _DataTables._onFilter);
|
|
146
|
+
document.addEventListener("input", _DataTables._onPageSize);
|
|
147
|
+
document.addEventListener("change", _DataTables._onPageSize);
|
|
148
|
+
document.addEventListener("click", _DataTables._onClick);
|
|
149
|
+
document.addEventListener("click", _DataTables._onPage);
|
|
150
|
+
document.addEventListener("pointerdown", _DataTables._onPointerDown);
|
|
151
|
+
document.addEventListener("click", _DataTables._onHandleClick);
|
|
152
|
+
document.addEventListener("keydown", _DataTables._onKeyDown);
|
|
153
|
+
document.addEventListener("expressive:change", _DataTables._onToggle);
|
|
154
|
+
Utils.onDocumentReady(() => document.querySelectorAll(".data-table").forEach(_DataTables.sync));
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Shows on a table's select-all box whether all, some or none of its rows
|
|
158
|
+
* are selected. This runs for the tables in the page when it loads; call
|
|
159
|
+
* it for a `.data-table` rendered later with rows already checked, or
|
|
160
|
+
* after checking rows from script, which fires no change. It also shows
|
|
161
|
+
* and hides the columns that column toggles name, as their
|
|
162
|
+
* `aria-checked` says.
|
|
163
|
+
* It reapplies a local query, or preserves application records and counts
|
|
164
|
+
* after a canceled filter request. It fires no events.
|
|
165
|
+
* Local paging preserves the current page where possible and clamps it
|
|
166
|
+
* after record changes, before synchronizing the page's select-all state.
|
|
167
|
+
* Accepted server pages retain all supplied visible records and use their
|
|
168
|
+
* application total for status and bounds, without local filtering.
|
|
169
|
+
*/
|
|
170
|
+
static sync(wrapper) {
|
|
171
|
+
const table = wrapper.querySelector(":scope > table");
|
|
172
|
+
if (table) {
|
|
173
|
+
table.querySelectorAll(`:scope > tbody > tr[${PAGED}]`).forEach((row) => row.removeAttribute(PAGED));
|
|
174
|
+
if (_DataTables._pages.get(wrapper)?.server) {
|
|
175
|
+
table.querySelectorAll(`:scope > tbody > tr[${FILTERED}]`).forEach((row) => row.removeAttribute(FILTERED));
|
|
176
|
+
}
|
|
177
|
+
_DataTables._filter(wrapper, table);
|
|
178
|
+
_DataTables._page(wrapper, table);
|
|
179
|
+
_DataTables._select(_DataTables._all(table), _DataTables._enabled(table), false);
|
|
180
|
+
}
|
|
181
|
+
wrapper.getRootNode().querySelectorAll(TOGGLE).forEach((item) => {
|
|
182
|
+
if (wrapper.contains(toggledHeader(item))) applyToggle(item);
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
/** Accepts application page state without slicing its records; null restores local paging. */
|
|
186
|
+
static setPage(wrapper, state) {
|
|
187
|
+
if (!wrapper?.matches?.(".data-table:has(> table)")) return false;
|
|
188
|
+
if (!_DataTables._storePage(wrapper, state)) return false;
|
|
189
|
+
_DataTables._pageRequests.delete(wrapper);
|
|
190
|
+
_DataTables.sync(wrapper);
|
|
191
|
+
return true;
|
|
192
|
+
}
|
|
193
|
+
static _storePage(wrapper, state) {
|
|
194
|
+
if (state === null) {
|
|
195
|
+
_DataTables._pages.delete(wrapper);
|
|
196
|
+
return true;
|
|
197
|
+
}
|
|
198
|
+
if (!state) return false;
|
|
199
|
+
const accepted = { page: state.page, pageSize: state.pageSize, total: state.total };
|
|
200
|
+
if (!validPageState(accepted)) return false;
|
|
201
|
+
wrapper.setAttribute("data-page-size", String(accepted.pageSize));
|
|
202
|
+
_DataTables._pages.set(wrapper, { ...accepted, server: true });
|
|
203
|
+
return true;
|
|
204
|
+
}
|
|
205
|
+
/** A column's width in pixels, read from its header cell. */
|
|
206
|
+
static width(header) {
|
|
207
|
+
return header.getBoundingClientRect().width;
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Sets a column's width from its header cell, between the
|
|
211
|
+
* `--md-comp-data-table-column-min-width` token and the wrapper's inner
|
|
212
|
+
* width. It fires no event, so a page can restore saved widths with it.
|
|
213
|
+
*/
|
|
214
|
+
static setWidth(header, width) {
|
|
215
|
+
const table = header.closest("table");
|
|
216
|
+
const [min, max] = bounds(header);
|
|
217
|
+
freeze(table);
|
|
218
|
+
header.style.width = `${Math.round(Math.min(Math.max(width, min), max))}px`;
|
|
219
|
+
fit(table);
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* A table's select-all box: a checkbox in a header cell of the first
|
|
223
|
+
* column. In a grouped header the first cell of a later row can belong to
|
|
224
|
+
* another column, so the column is counted, not the cell's place.
|
|
225
|
+
*/
|
|
226
|
+
static _all(table) {
|
|
227
|
+
const head = table.tHead;
|
|
228
|
+
const box = 'input[type="checkbox"]';
|
|
229
|
+
const cell = head && [...headerColumns(head)].find(([each, column]) => column === 0 && each.querySelector(box))?.[0];
|
|
230
|
+
return cell?.querySelector(box);
|
|
231
|
+
}
|
|
232
|
+
/** The enabled record boxes visible in the current view. */
|
|
233
|
+
static _enabled(table) {
|
|
234
|
+
return _DataTables._boxes(table).filter((each) => !each.matches(":disabled") && visibleRecord(each.closest("tr")));
|
|
235
|
+
}
|
|
236
|
+
/** The selection checkboxes of a table's record rows. */
|
|
237
|
+
static _boxes(table) {
|
|
238
|
+
return Array.from(table.querySelectorAll(ROWS), (row) => row.querySelector(BOX)).filter(Boolean);
|
|
239
|
+
}
|
|
240
|
+
/** Filters record groups without changing author hiding or expansion state. */
|
|
241
|
+
static _filter(wrapper, table) {
|
|
242
|
+
const input = tableControl(wrapper, FILTER);
|
|
243
|
+
if (!input) return;
|
|
244
|
+
const locale = Utils.locale(table);
|
|
245
|
+
const query = _DataTables._serverRecords(wrapper) ? "" : input.value.trim().toLocaleLowerCase(locale);
|
|
246
|
+
const headers = table.tHead ? [...headerColumns(table.tHead)] : [];
|
|
247
|
+
const columns = headers.filter(([cell]) => cell.hasAttribute("data-filter") && cell.colSpan === 1).map(([, column]) => column);
|
|
248
|
+
const groups = _DataTables._records(table);
|
|
249
|
+
groups.forEach(([row]) => row.removeAttribute(FILTERED));
|
|
250
|
+
const matches = groups.map(([row]) => visibleRecord(row) && _DataTables._matches(row, columns, query, locale));
|
|
251
|
+
groups.forEach((group, index) => group.forEach((row) => row.toggleAttribute(FILTERED, !matches[index])));
|
|
252
|
+
_DataTables._filterCount(wrapper, locale, matches.filter(Boolean).length);
|
|
253
|
+
}
|
|
254
|
+
/** A server-filtered table's count belongs to the application. */
|
|
255
|
+
static _filterCount(wrapper, locale, matches) {
|
|
256
|
+
if (_DataTables._serverRecords(wrapper)) return;
|
|
257
|
+
const count = tableControl(wrapper, "[data-table-filter-count]");
|
|
258
|
+
if (count) count.textContent = new Intl.NumberFormat(locale).format(matches);
|
|
259
|
+
}
|
|
260
|
+
static _serverRecords(wrapper) {
|
|
261
|
+
return _DataTables._pages.get(wrapper)?.server || _DataTables._serverFilters.has(wrapper);
|
|
262
|
+
}
|
|
263
|
+
static _matches(row, columns, query, locale) {
|
|
264
|
+
return !query || columns.some((column) => cellText(row, column).toLocaleLowerCase(locale).includes(query));
|
|
265
|
+
}
|
|
266
|
+
static _advancePage(wrapper, step, event) {
|
|
267
|
+
const view = _DataTables._pageState(wrapper);
|
|
268
|
+
const page = pageIndex(view.page + step, view.total, pageSize(wrapper));
|
|
269
|
+
if (page < 1 || page === view.page) return;
|
|
270
|
+
_DataTables._requestPage(wrapper, { page, pageSize: pageSize(wrapper) }, event);
|
|
271
|
+
}
|
|
272
|
+
static _setPageSize(wrapper, value, event) {
|
|
273
|
+
const size = positivePageSize(value);
|
|
274
|
+
if (!size || !pageSize(wrapper) || size === pageSize(wrapper)) return;
|
|
275
|
+
const view = _DataTables._pageState(wrapper);
|
|
276
|
+
const page = Math.max(1, pageIndex(view.page, view.total, size));
|
|
277
|
+
_DataTables._requestPage(wrapper, { page, pageSize: size }, event);
|
|
278
|
+
}
|
|
279
|
+
static _requestPage(wrapper, request, event) {
|
|
280
|
+
const view = _DataTables._pageState(wrapper);
|
|
281
|
+
_DataTables._pageRequests.set(wrapper, event);
|
|
282
|
+
if (!Utils.emit(wrapper, "page", request, true)) return;
|
|
283
|
+
if (_DataTables._pageRequests.get(wrapper) !== event) return;
|
|
284
|
+
if (view.server) return;
|
|
285
|
+
wrapper.setAttribute("data-page-size", String(request.pageSize));
|
|
286
|
+
_DataTables._pages.set(wrapper, { ...view, ...request });
|
|
287
|
+
_DataTables.sync(wrapper);
|
|
288
|
+
}
|
|
289
|
+
static _pageState(wrapper) {
|
|
290
|
+
const previous = _DataTables._pages.get(wrapper);
|
|
291
|
+
if (previous) return previous;
|
|
292
|
+
const table = wrapper.querySelector(":scope > table");
|
|
293
|
+
const total = table ? _DataTables._records(table).filter(([row]) => visibleRecord(row)).length : 0;
|
|
294
|
+
return { page: 1, pageSize: pageSize(wrapper), total };
|
|
295
|
+
}
|
|
296
|
+
/** Filter visibility is settled before paging; details consume no slots. */
|
|
297
|
+
static _page(wrapper, table) {
|
|
298
|
+
const size = pageSize(wrapper);
|
|
299
|
+
if (!size) return;
|
|
300
|
+
const groups = _DataTables._records(table);
|
|
301
|
+
const eligible = groups.filter(([row]) => visibleRecord(row));
|
|
302
|
+
const view = _DataTables._pageView(wrapper, eligible.length, size);
|
|
303
|
+
_DataTables._pages.set(wrapper, view);
|
|
304
|
+
const displayed = view.server ? eligible : eligible.slice((view.page - 1) * size, view.page * size);
|
|
305
|
+
const shown = new Set(displayed.map(([row]) => row));
|
|
306
|
+
groups.forEach((group) => group.forEach((row) => row.toggleAttribute(PAGED, !shown.has(group[0]))));
|
|
307
|
+
_DataTables._pageControls(wrapper, view.page, Math.ceil(view.total / size));
|
|
308
|
+
}
|
|
309
|
+
static _pageView(wrapper, total, size) {
|
|
310
|
+
const previous = _DataTables._pages.get(wrapper) ?? { page: 1, pageSize: size, total };
|
|
311
|
+
const records = previous.server ? previous.total : total;
|
|
312
|
+
return { ...previous, page: pageIndex(previous.page, records, size), pageSize: size, total: records };
|
|
313
|
+
}
|
|
314
|
+
static _pageControls(wrapper, page, pages) {
|
|
315
|
+
wrapper.querySelectorAll(PAGE_BUTTON).forEach((button) => {
|
|
316
|
+
if (button.closest(".data-table") !== wrapper) return;
|
|
317
|
+
const unavailable = button.dataset.tablePage === "previous" ? page <= 1 : page >= pages;
|
|
318
|
+
button.setAttribute("aria-disabled", String(unavailable));
|
|
319
|
+
});
|
|
320
|
+
const status = tableControl(wrapper, "[data-table-page-status]");
|
|
321
|
+
if (status) {
|
|
322
|
+
const number = new Intl.NumberFormat(Utils.locale(wrapper));
|
|
323
|
+
status.textContent = `${number.format(page)} / ${number.format(pages)}`;
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
/** Sorting resets only opted-in tables; ordinary table behavior stays unchanged. */
|
|
327
|
+
static _firstPage(wrapper) {
|
|
328
|
+
if (!pageSize(wrapper)) return;
|
|
329
|
+
_DataTables._resetPage(wrapper);
|
|
330
|
+
}
|
|
331
|
+
static _resetPage(wrapper) {
|
|
332
|
+
if (_DataTables._pages.get(wrapper)?.server) return;
|
|
333
|
+
_DataTables._pages.delete(wrapper);
|
|
334
|
+
_DataTables.sync(wrapper);
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* Checks every enabled row when the select-all box changed, then shows on
|
|
338
|
+
* it whether all, some or none of them are checked.
|
|
339
|
+
*/
|
|
340
|
+
static _select(all, boxes, fromAll) {
|
|
341
|
+
if (!all) return;
|
|
342
|
+
if (fromAll) boxes.forEach((each) => each.checked = all.checked);
|
|
343
|
+
const checked = boxes.filter((each) => each.checked).length;
|
|
344
|
+
all.indeterminate = checked % boxes.length > 0;
|
|
345
|
+
all.checked = checked > 0 && !all.indeterminate;
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* Moves a column's inline-end edge with the pointer. A few pixels of
|
|
349
|
+
* travel is still a click.
|
|
350
|
+
*/
|
|
351
|
+
static _drag(handle, start) {
|
|
352
|
+
const header = handle.parentElement;
|
|
353
|
+
const from = _DataTables.width(header);
|
|
354
|
+
const sign = getComputedStyle(header).direction === "rtl" ? -1 : 1;
|
|
355
|
+
_DataTables._dragged = false;
|
|
356
|
+
handle.setPointerCapture(start.pointerId);
|
|
357
|
+
const drag = controllerFor(handle);
|
|
358
|
+
const { signal } = drag;
|
|
359
|
+
handle.addEventListener("pointermove", (e) => {
|
|
360
|
+
const delta = e.clientX - start.clientX;
|
|
361
|
+
if (Math.abs(delta) < 4 && !_DataTables._dragged) return;
|
|
362
|
+
_DataTables._dragged = true;
|
|
363
|
+
_DataTables.setWidth(header, from + sign * delta);
|
|
364
|
+
}, { signal });
|
|
365
|
+
const end = () => {
|
|
366
|
+
drag.abort();
|
|
367
|
+
if (_DataTables._dragged) _DataTables._resized(header, from);
|
|
368
|
+
};
|
|
369
|
+
handle.addEventListener("pointerup", end, { signal });
|
|
370
|
+
handle.addEventListener("pointercancel", end, { signal });
|
|
371
|
+
}
|
|
372
|
+
/** Sets a column's width and fires `expressive:resize` if it changed. */
|
|
373
|
+
static _resizeTo(header, width) {
|
|
374
|
+
const from = _DataTables.width(header);
|
|
375
|
+
_DataTables.setWidth(header, width);
|
|
376
|
+
_DataTables._resized(header, from);
|
|
377
|
+
}
|
|
378
|
+
/** Fires `expressive:resize` from the wrapper when a column's width moved off `from`. */
|
|
379
|
+
static _resized(header, from) {
|
|
380
|
+
const width = _DataTables.width(header);
|
|
381
|
+
if (Math.abs(width - from) < 0.5) return;
|
|
382
|
+
const column = headerColumns(header.closest("thead")).get(header);
|
|
383
|
+
Utils.emit(header.closest(".data-table"), "resize", { header, column, width });
|
|
384
|
+
}
|
|
385
|
+
/**
|
|
386
|
+
* Reorders each body's rows by one column. A detail row moves with the
|
|
387
|
+
* row before it.
|
|
388
|
+
*/
|
|
389
|
+
static _sort(table, header, column, order) {
|
|
390
|
+
if (_DataTables._pages.get(table.closest(".data-table"))?.server) return;
|
|
391
|
+
const compare = _DataTables._compare(table, header);
|
|
392
|
+
for (const body of Array.from(table.tBodies)) {
|
|
393
|
+
const groups = _DataTables._groups(body);
|
|
394
|
+
groups.sort(([a], [b]) => order * compare(cellText(a, column), cellText(b, column)));
|
|
395
|
+
body.append(...groups.flat());
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
/**
|
|
399
|
+
* How a column compares: a `.numeric` header's as numbers, as a chart
|
|
400
|
+
* reads them, with text that is not a number first; any other as text in
|
|
401
|
+
* the page's language, with digit runs as numbers.
|
|
402
|
+
*/
|
|
403
|
+
static _compare(table, header) {
|
|
404
|
+
if (!header.classList.contains("numeric")) return new Intl.Collator(Utils.locale(table), { numeric: true, sensitivity: "base" }).compare;
|
|
405
|
+
const number = (text) => numberValue(text) ?? -Infinity;
|
|
406
|
+
return (a, b) => number(a) - number(b);
|
|
407
|
+
}
|
|
408
|
+
static _records(table) {
|
|
409
|
+
return Array.from(table.tBodies).flatMap(_DataTables._groups).filter(([row]) => !row.classList.contains("data-table-detail"));
|
|
410
|
+
}
|
|
411
|
+
/** A body's rows in groups: each record row with the detail rows after it. */
|
|
412
|
+
static _groups(body) {
|
|
413
|
+
const groups = [];
|
|
414
|
+
for (const row of Array.from(body.rows)) {
|
|
415
|
+
if (groups.length && row.classList.contains("data-table-detail")) groups[groups.length - 1].push(row);
|
|
416
|
+
else groups.push([row]);
|
|
417
|
+
}
|
|
418
|
+
return groups;
|
|
419
|
+
}
|
|
420
|
+
};
|
|
421
|
+
_DataTables._initialized = false;
|
|
422
|
+
_DataTables._dragged = false;
|
|
423
|
+
_DataTables._serverFilters = /* @__PURE__ */ new WeakMap();
|
|
424
|
+
_DataTables._pages = /* @__PURE__ */ new WeakMap();
|
|
425
|
+
_DataTables._pageRequests = /* @__PURE__ */ new WeakMap();
|
|
426
|
+
_DataTables._onChange = (e) => {
|
|
427
|
+
const box = Utils.eventTarget(e);
|
|
428
|
+
const wrapper = box?.closest(".data-table");
|
|
429
|
+
const table = wrapper?.querySelector(":scope > table");
|
|
430
|
+
if (!table) return;
|
|
431
|
+
const [all, boxes] = [_DataTables._all(table), _DataTables._boxes(table)];
|
|
432
|
+
if (box !== all && !boxes.includes(box)) return;
|
|
433
|
+
_DataTables._select(all, _DataTables._enabled(table), box === all);
|
|
434
|
+
Utils.emit(wrapper, "change", { selected: boxes.filter((each) => each.checked).map((each) => each.closest("tr")) });
|
|
435
|
+
};
|
|
436
|
+
_DataTables._onFilter = (e) => {
|
|
437
|
+
const input = Utils.closestInPath(e, `.data-table ${FILTER}`);
|
|
438
|
+
if (!input) return;
|
|
439
|
+
const wrapper = input.closest(".data-table");
|
|
440
|
+
_DataTables._serverFilters.set(wrapper, e);
|
|
441
|
+
if (Utils.emit(wrapper, "filter", { query: input.value.trim() }, true) && _DataTables._serverFilters.get(wrapper) === e) {
|
|
442
|
+
_DataTables._serverFilters.delete(wrapper);
|
|
443
|
+
_DataTables._resetPage(wrapper);
|
|
444
|
+
}
|
|
445
|
+
};
|
|
446
|
+
_DataTables._onPage = (e) => {
|
|
447
|
+
const button = Utils.closestInPath(e, `.data-table[data-page-size] ${PAGE_BUTTON}:not(:disabled, [aria-disabled="true"])`);
|
|
448
|
+
if (!button) return;
|
|
449
|
+
const wrapper = button.closest(".data-table");
|
|
450
|
+
if (!pageSize(wrapper)) return;
|
|
451
|
+
_DataTables._advancePage(wrapper, PAGE_STEP[button.dataset.tablePage], e);
|
|
452
|
+
};
|
|
453
|
+
_DataTables._onPageSize = (e) => {
|
|
454
|
+
if (!e.composed) return;
|
|
455
|
+
const control = Utils.closestInPath(e, `.data-table[data-page-size] ${PAGE_SIZE}`);
|
|
456
|
+
if (!control) return;
|
|
457
|
+
_DataTables._setPageSize(control.closest(".data-table"), control.value, e);
|
|
458
|
+
};
|
|
459
|
+
_DataTables._onClick = (e) => {
|
|
460
|
+
const button = Utils.closestInPath(e, '.data-table[data-sort] > table > thead > tr > th > button:not([aria-haspopup], :disabled, [aria-disabled="true"], .drag-handle)');
|
|
461
|
+
if (!button) return;
|
|
462
|
+
const header = button.parentElement;
|
|
463
|
+
const wrapper = header.closest(".data-table");
|
|
464
|
+
const direction = header.getAttribute("aria-sort") === "ascending" ? "descending" : "ascending";
|
|
465
|
+
header.closest("thead").querySelectorAll("th[aria-sort]").forEach((cell) => cell.removeAttribute("aria-sort"));
|
|
466
|
+
header.setAttribute("aria-sort", direction);
|
|
467
|
+
const column = headerColumns(header.closest("thead")).get(header);
|
|
468
|
+
if (Utils.emit(wrapper, "sort", { header, column, direction }, true)) {
|
|
469
|
+
_DataTables._sort(header.closest("table"), header, column, ORDER[direction]);
|
|
470
|
+
_DataTables._firstPage(wrapper);
|
|
471
|
+
}
|
|
472
|
+
};
|
|
473
|
+
/** Menu's change from a column toggle; a data table's own change has no item. */
|
|
474
|
+
_DataTables._onToggle = (e) => {
|
|
475
|
+
const item = e.detail?.item;
|
|
476
|
+
if (item?.matches?.(TOGGLE)) applyToggle(item);
|
|
477
|
+
};
|
|
478
|
+
_DataTables._onPointerDown = (e) => {
|
|
479
|
+
const handle = Utils.closestInPath(e, HANDLE);
|
|
480
|
+
if (handle && e.button === 0) _DataTables._drag(handle, e);
|
|
481
|
+
};
|
|
482
|
+
/**
|
|
483
|
+
* Steps a column through narrow, middle and wide: the single-pointer
|
|
484
|
+
* alternative to dragging. The click that ends a mouse drag is not a
|
|
485
|
+
* request to step; a keyboard click (detail 0) always is.
|
|
486
|
+
*/
|
|
487
|
+
_DataTables._onHandleClick = (e) => {
|
|
488
|
+
const handle = Utils.closestInPath(e, HANDLE);
|
|
489
|
+
if (!handle || e.detail !== 0 && _DataTables._dragged) return;
|
|
490
|
+
const header = handle.parentElement;
|
|
491
|
+
_DataTables._resizeTo(header, nextStep(header));
|
|
492
|
+
};
|
|
493
|
+
_DataTables._onKeyDown = (e) => {
|
|
494
|
+
const handle = Utils.closestInPath(e, HANDLE);
|
|
495
|
+
if (!handle || !Utils.plainKey(e)) return;
|
|
496
|
+
const header = handle.parentElement;
|
|
497
|
+
const width = keyWidth(header, e);
|
|
498
|
+
if (width === void 0) return;
|
|
499
|
+
e.preventDefault();
|
|
500
|
+
_DataTables._resizeTo(header, width);
|
|
501
|
+
};
|
|
502
|
+
var DataTables = _DataTables;
|
|
503
|
+
|
|
504
|
+
export {
|
|
505
|
+
DataTables
|
|
506
|
+
};
|
|
507
|
+
//# sourceMappingURL=chunk-U4B3VHFS.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/ts/behaviors/dataTables.ts"],
|
|
4
|
+
"sourcesContent": ["import { numberValue } from '../components/lineChart';\nimport { Utils, controllerFor } from '../core/utils';\n\n/** The rows of a table's bodies that hold records, not a row's detail. */\nconst ROWS = ':scope > tbody > tr:not(.data-table-detail)';\n/** A checkbox in a row's first cell, which selects the row. */\nconst BOX = ':scope > :first-child input[type=\"checkbox\"]';\n/**\n * A column's resize handle: a drag-handle button ending a cell of the first\n * header row, the row whose cells set the widths of a fixed table layout.\n */\nconst HANDLE = '.data-table > table > thead > tr:first-child > th > button.drag-handle:last-child';\n/** How far an arrow key resizes a column; Shift moves four times as far. */\nconst STEP = 16;\n/** How each sort direction orders the rows. */\nconst ORDER = { ascending: 1, descending: -1 };\n/** A menu checkbox item that shows and hides the column of the header cell it names. */\nconst TOGGLE = '[role=\"menuitemcheckbox\"][data-column]';\n/** Marks a cell hidden with its column, so showing the column never shows a cell the author hid. */\nconst HIDDEN = 'data-column-hidden';\nconst FILTER = 'input[type=\"search\"][data-table-filter]';\nconst FILTERED = 'data-table-filter-hidden';\nconst PAGED = 'data-table-page-hidden';\nconst PAGE_BUTTON = 'button[type=\"button\"]:is([data-table-page=\"previous\"], [data-table-page=\"next\"])';\nconst PAGE_STEP: Record<string, number> = { previous: -1, next: 1 };\nconst PAGE_SIZE = 'select[data-table-page-size]:not([multiple], :disabled):not(:has(option:checked:disabled))';\n\ninterface TablePageState { page: number; pageSize: number; total: number; }\ntype PageView = TablePageState & { server?: boolean };\n\nfunction validPageState(state: TablePageState) {\n if (!state) return false;\n return [[state.page, 1], [state.pageSize, 1], [state.total, 0]].every(\n ([value, minimum]) => Number.isSafeInteger(value) && value >= minimum\n );\n}\n\nfunction pageIndex(page: number, total: number, size: number) {\n return Math.min(Math.max(page, 1), Math.ceil(total / size));\n}\n\nfunction positivePageSize(value: string | null) {\n const size = Number(value);\n return Number.isSafeInteger(size) && size > 0 ? size : 0;\n}\n\nfunction pageSize(wrapper: Element) {\n return positivePageSize(wrapper.getAttribute('data-page-size'));\n}\n\n/** Controls belong to their nearest wrapper, never an enclosing table. */\nfunction tableControl(wrapper: Element, selector: string) {\n return Array.from(wrapper.querySelectorAll<HTMLElement>(selector)).find((el) => el.closest('.data-table') === wrapper);\n}\n\n/** Enabled selection and result counts use the same visible record set. */\nfunction visibleRecord(row: HTMLTableRowElement) {\n if (row.closest(`[hidden], [${FILTERED}], [${PAGED}]`)) return false;\n if (row.checkVisibility) return row.checkVisibility({ visibilityProperty: true });\n const style = getComputedStyle(row);\n return style.display !== 'none' && !['hidden', 'collapse'].includes(style.visibility);\n}\n\n/** The cell of a body row that covers a column, counting colspan. */\nfunction cellAt(row: HTMLTableRowElement, column: number) {\n let end = 0;\n for (const cell of Array.from(row.cells)) {\n end += cell.colSpan;\n if (column < end) return cell;\n }\n}\n\n/** A cell's sort text: its `data-value`, or else its text. */\nfunction cellText(row: HTMLTableRowElement, column: number) {\n const cell = cellAt(row, column);\n return (cell?.dataset.value ?? cell?.textContent ?? '').trim();\n}\n\n/** Marks the columns a cell covers, in its row and the rows its rowspan reaches. */\nfunction cover(taken: Set<number>[], row: number, column: number, cell: HTMLTableCellElement) {\n for (let r = row; r < row + Math.max(1, cell.rowSpan); r++) {\n for (let c = column; c < column + cell.colSpan; c++) (taken[r] ??= new Set()).add(c);\n }\n}\n\n/**\n * The column each header cell starts at. A grouped header's cells sit\n * after the ones a colspan or rowspan carries over, so a cell's place in its\n * row is not its column.\n */\nfunction headerColumns(head: HTMLTableSectionElement) {\n const [taken, columns] = [[] as Set<number>[], new Map<Element, number>()];\n Array.from(head.rows).forEach((row, r) => {\n let column = 0;\n for (const cell of Array.from(row.cells)) {\n while (taken[r]?.has(column)) column++;\n columns.set(cell, column);\n cover(taken, r, column, cell);\n column += cell.colSpan;\n }\n });\n return columns;\n}\n\n/**\n * The header cell a column toggle names: a cell of a data table's first\n * header row that spans one column. The id is looked up in the item's own\n * document or shadow root.\n */\nfunction toggledHeader(item: Element) {\n const root = item.getRootNode() as Document | ShadowRoot;\n const header = root.getElementById?.(item.getAttribute('data-column')) as HTMLTableCellElement;\n return header?.matches('.data-table > table > thead > tr:first-child > th') && header.colSpan === 1 ? header : null;\n}\n\n/** A column's cells, one per row, leaving out cells that span several columns. */\nfunction columnCells(table: HTMLTableElement, column: number) {\n const head = [...headerColumns(table.tHead)].filter(([, each]) => each === column).map(([cell]) => cell as HTMLTableCellElement);\n const rows = table.querySelectorAll<HTMLTableRowElement>(':scope > tbody > tr, :scope > tfoot > tr');\n return [...head, ...Array.from(rows, (row) => cellAt(row, column))].filter((cell) => cell?.colSpan === 1);\n}\n\nfunction conceal(cell: HTMLTableCellElement) {\n if (cell.hidden) return;\n cell.hidden = true;\n cell.setAttribute(HIDDEN, '');\n}\n\nfunction reveal(cell: HTMLTableCellElement) {\n if (!cell.hasAttribute(HIDDEN)) return;\n cell.hidden = false;\n cell.removeAttribute(HIDDEN);\n}\n\n/** Shows or hides the column a toggle names, as its `aria-checked` says. */\nfunction applyToggle(item: Element) {\n const header = toggledHeader(item);\n if (!header) return;\n const table = header.closest('table');\n const show = item.getAttribute('aria-checked') === 'true';\n columnCells(table, headerColumns(table.tHead).get(header)).forEach(show ? reveal : conceal);\n refit(table, header);\n}\n\n/**\n * Keeps a resized table as wide as its visible columns. A column shown for\n * the first time since the widths were held takes its content's width, no\n * narrower than the minimum token.\n */\nfunction refit(table: HTMLTableElement, header: HTMLTableCellElement) {\n if (table.style.tableLayout !== 'fixed') return;\n if (!header.hidden && !header.style.width) header.style.width = `${Math.max(bounds(header)[0], header.scrollWidth)}px`;\n fit(table);\n}\n\n/** The visible cells of a table's first row, which set its column widths under the fixed layout. */\nfunction firstCells(table: HTMLTableElement) {\n return Array.from(table.rows[0]?.cells ?? []).filter((cell) => !cell.hidden);\n}\n\n/** Sizes a table to the sum of its columns, so it scrolls once they outgrow the wrapper. */\nfunction fit(table: HTMLTableElement) {\n table.style.width = `${firstCells(table).reduce((sum, cell) => sum + parseFloat(cell.style.width), 0)}px`;\n}\n\n/**\n * Holds every column at its current width under the fixed table layout, so\n * resizing one column leaves the others alone. The automatic layout shares a\n * change among all of them.\n */\nfunction freeze(table: HTMLTableElement) {\n if (table.style.tableLayout === 'fixed') return;\n const cells = firstCells(table);\n // Measure every cell before writing any, so no write reflows a later read.\n const sizes = cells.map((cell) => cell.getBoundingClientRect().width);\n cells.forEach((cell, i) => (cell.style.width = `${sizes[i]}px`));\n table.style.tableLayout = 'fixed';\n fit(table);\n}\n\n/** The narrowest and widest a column may get: its minimum token, and the wrapper's inner width. */\nfunction bounds(header: HTMLTableCellElement): [number, number] {\n const min = parseFloat(getComputedStyle(header).minWidth) || 0;\n return [min, Math.max(min, header.closest('.data-table').clientWidth)];\n}\n\n/** The next of a column's narrow, middle and wide widths, wrapping to narrow. */\nfunction nextStep(header: HTMLTableCellElement) {\n const [min, max] = bounds(header);\n const current = header.getBoundingClientRect().width;\n return [min, (min + max) / 2, max].find((width) => width > current + 1) ?? min;\n}\n\n/**\n * The width a key asks for, or undefined for another key. The arrow toward\n * the column's inline-end edge widens it; Home and End jump to the bounds.\n */\nfunction keyWidth(header: HTMLTableCellElement, e: KeyboardEvent) {\n const [min, max] = bounds(header);\n const amount = (e.shiftKey ? 4 : 1) * STEP * (getComputedStyle(header).direction === 'rtl' ? -1 : 1);\n const current = header.getBoundingClientRect().width;\n const widths: Record<string, number> = { ArrowRight: current + amount, ArrowLeft: current - amount, Home: min, End: max };\n return widths[e.key];\n}\n\n/**\n * Data tables. In a `.data-table`, a checkbox in the first header cell\n * selects every row, and shows mixed while only some are selected. With\n * `data-sort` on the wrapper, a button in a header cell sorts the rows by\n * that column and moves `aria-sort`. Both fire events from the wrapper:\n * `expressive:change` with the selected rows, and a cancelable\n * `expressive:sort`, which a server-sorted table cancels to sort the rows\n * itself. A `.drag-handle` button ending a header cell resizes its column\n * and fires `expressive:resize` with `{ header, column, width }`. A menu\n * checkbox item with `data-column` naming a first-row header cell's id\n * hides that column while it is unchecked.\n * Marked search inputs request `expressive:filter` with `{ query }`.\n * Cancel to keep records and counts server-owned across silent sync calls.\n * A positive `data-page-size` opts into local record-group paging through\n * authored Previous/Next buttons; selections on other pages stay checked.\n * A marked single select changes the size while preserving a valid page.\n * Page/size controls request cancelable `expressive:page` before a local\n * default. setPage accepts server state whose records stay application-owned.\n */\nexport class DataTables {\n private static _initialized = false;\n private static _dragged = false;\n private static _serverFilters = new WeakMap<Element, Event>();\n private static _pages = new WeakMap<Element, PageView>();\n private static _pageRequests = new WeakMap<Element, Event>();\n\n static Init() {\n if (DataTables._initialized || typeof document === 'undefined') return;\n DataTables._initialized = true;\n // A checkbox's input event crosses shadow roots; its change event does not.\n document.addEventListener('input', DataTables._onChange);\n document.addEventListener('input', DataTables._onFilter);\n document.addEventListener('input', DataTables._onPageSize);\n document.addEventListener('change', DataTables._onPageSize);\n document.addEventListener('click', DataTables._onClick);\n document.addEventListener('click', DataTables._onPage);\n document.addEventListener('pointerdown', DataTables._onPointerDown);\n document.addEventListener('click', DataTables._onHandleClick);\n document.addEventListener('keydown', DataTables._onKeyDown);\n document.addEventListener('expressive:change', DataTables._onToggle);\n Utils.onDocumentReady(() => document.querySelectorAll('.data-table').forEach(DataTables.sync));\n }\n\n /**\n * Shows on a table's select-all box whether all, some or none of its rows\n * are selected. This runs for the tables in the page when it loads; call\n * it for a `.data-table` rendered later with rows already checked, or\n * after checking rows from script, which fires no change. It also shows\n * and hides the columns that column toggles name, as their\n * `aria-checked` says.\n * It reapplies a local query, or preserves application records and counts\n * after a canceled filter request. It fires no events.\n * Local paging preserves the current page where possible and clamps it\n * after record changes, before synchronizing the page's select-all state.\n * Accepted server pages retain all supplied visible records and use their\n * application total for status and bounds, without local filtering.\n */\n static sync(wrapper: Element) {\n const table = wrapper.querySelector<HTMLTableElement>(':scope > table');\n if (table) {\n table.querySelectorAll(`:scope > tbody > tr[${PAGED}]`).forEach((row) => row.removeAttribute(PAGED));\n if (DataTables._pages.get(wrapper)?.server) {\n table.querySelectorAll(`:scope > tbody > tr[${FILTERED}]`).forEach((row) => row.removeAttribute(FILTERED));\n }\n DataTables._filter(wrapper, table);\n DataTables._page(wrapper, table);\n DataTables._select(DataTables._all(table), DataTables._enabled(table), false);\n }\n (wrapper.getRootNode() as ParentNode).querySelectorAll(TOGGLE).forEach((item) => {\n if (wrapper.contains(toggledHeader(item))) applyToggle(item);\n });\n }\n\n /** Accepts application page state without slicing its records; null restores local paging. */\n static setPage(wrapper: Element, state: TablePageState | null): boolean {\n if (!wrapper?.matches?.('.data-table:has(> table)')) return false;\n if (!DataTables._storePage(wrapper, state)) return false;\n DataTables._pageRequests.delete(wrapper);\n DataTables.sync(wrapper);\n return true;\n }\n\n private static _storePage(wrapper: Element, state: TablePageState | null) {\n if (state === null) {\n DataTables._pages.delete(wrapper);\n return true;\n }\n if (!state) return false;\n const accepted = { page: state.page, pageSize: state.pageSize, total: state.total };\n if (!validPageState(accepted)) return false;\n wrapper.setAttribute('data-page-size', String(accepted.pageSize));\n DataTables._pages.set(wrapper, { ...accepted, server: true });\n return true;\n }\n\n /** A column's width in pixels, read from its header cell. */\n static width(header: Element) {\n return header.getBoundingClientRect().width;\n }\n\n /**\n * Sets a column's width from its header cell, between the\n * `--md-comp-data-table-column-min-width` token and the wrapper's inner\n * width. It fires no event, so a page can restore saved widths with it.\n */\n static setWidth(header: HTMLTableCellElement, width: number) {\n const table = header.closest('table');\n const [min, max] = bounds(header);\n freeze(table);\n header.style.width = `${Math.round(Math.min(Math.max(width, min), max))}px`;\n fit(table);\n }\n\n /**\n * A table's select-all box: a checkbox in a header cell of the first\n * column. In a grouped header the first cell of a later row can belong to\n * another column, so the column is counted, not the cell's place.\n */\n private static _all(table: HTMLTableElement) {\n const head = table.tHead;\n const box = 'input[type=\"checkbox\"]';\n const cell = head && [...headerColumns(head)].find(([each, column]) => column === 0 && each.querySelector(box))?.[0];\n return cell?.querySelector<HTMLInputElement>(box);\n }\n\n /** The enabled record boxes visible in the current view. */\n private static _enabled(table: HTMLTableElement) {\n // :disabled also covers a box inside a disabled fieldset.\n return DataTables._boxes(table).filter((each) => !each.matches(':disabled') && visibleRecord(each.closest('tr')));\n }\n\n /** The selection checkboxes of a table's record rows. */\n private static _boxes(table: HTMLTableElement) {\n return Array.from(table.querySelectorAll<HTMLTableRowElement>(ROWS), (row) =>\n row.querySelector<HTMLInputElement>(BOX)).filter(Boolean);\n }\n\n private static _onChange = (e: Event) => {\n const box = Utils.eventTarget(e);\n const wrapper = box?.closest('.data-table');\n const table = wrapper?.querySelector<HTMLTableElement>(':scope > table');\n if (!table) return;\n const [all, boxes] = [DataTables._all(table), DataTables._boxes(table)];\n if (box !== all && !boxes.includes(box as HTMLInputElement)) return;\n DataTables._select(all, DataTables._enabled(table), box === all);\n Utils.emit(wrapper, 'change', { selected: boxes.filter((each) => each.checked).map((each) => each.closest('tr')) });\n };\n\n private static _onFilter = (e: Event) => {\n const input = Utils.closestInPath(e, `.data-table ${FILTER}`) as HTMLInputElement;\n if (!input) return;\n const wrapper = input.closest('.data-table');\n // A listener may replace rows, sync or dispatch a newer request before returning.\n DataTables._serverFilters.set(wrapper, e);\n if (Utils.emit(wrapper, 'filter', { query: input.value.trim() }, true) && DataTables._serverFilters.get(wrapper) === e) {\n DataTables._serverFilters.delete(wrapper);\n DataTables._resetPage(wrapper);\n }\n };\n\n /** Filters record groups without changing author hiding or expansion state. */\n private static _filter(wrapper: Element, table: HTMLTableElement) {\n const input = tableControl(wrapper, FILTER) as HTMLInputElement;\n if (!input) return;\n const locale = Utils.locale(table);\n const query = DataTables._serverRecords(wrapper) ? '' : input.value.trim().toLocaleLowerCase(locale);\n const headers = table.tHead ? [...headerColumns(table.tHead)] : [];\n const columns = headers.filter(([cell]) => cell.hasAttribute('data-filter') && (cell as HTMLTableCellElement).colSpan === 1).map(([, column]) => column);\n const groups = DataTables._records(table);\n // Read visibility between write batches, so filtering causes one layout, not one per record.\n groups.forEach(([row]) => row.removeAttribute(FILTERED));\n const matches = groups.map(([row]) => visibleRecord(row) && DataTables._matches(row, columns, query, locale));\n groups.forEach((group, index) => group.forEach((row) => row.toggleAttribute(FILTERED, !matches[index])));\n DataTables._filterCount(wrapper, locale, matches.filter(Boolean).length);\n }\n\n /** A server-filtered table's count belongs to the application. */\n private static _filterCount(wrapper: Element, locale: string, matches: number) {\n if (DataTables._serverRecords(wrapper)) return;\n const count = tableControl(wrapper, '[data-table-filter-count]');\n if (count) count.textContent = new Intl.NumberFormat(locale).format(matches);\n }\n\n private static _serverRecords(wrapper: Element) {\n return DataTables._pages.get(wrapper)?.server || DataTables._serverFilters.has(wrapper);\n }\n\n private static _matches(row: HTMLTableRowElement, columns: number[], query: string, locale: string) {\n return !query || columns.some((column) => cellText(row, column).toLocaleLowerCase(locale).includes(query));\n }\n\n private static _onPage = (e: MouseEvent) => {\n const button = Utils.closestInPath(e, `.data-table[data-page-size] ${PAGE_BUTTON}:not(:disabled, [aria-disabled=\"true\"])`) as HTMLButtonElement;\n if (!button) return;\n const wrapper = button.closest('.data-table');\n if (!pageSize(wrapper)) return;\n DataTables._advancePage(wrapper, PAGE_STEP[button.dataset.tablePage], e);\n };\n\n private static _advancePage(wrapper: Element, step: number, event: Event) {\n const view = DataTables._pageState(wrapper);\n const page = pageIndex(view.page + step, view.total, pageSize(wrapper));\n if (page < 1 || page === view.page) return;\n DataTables._requestPage(wrapper, { page, pageSize: pageSize(wrapper) }, event);\n }\n\n private static _onPageSize = (e: Event) => {\n if (!e.composed) return;\n const control = Utils.closestInPath(e, `.data-table[data-page-size] ${PAGE_SIZE}`) as HTMLSelectElement;\n if (!control) return;\n DataTables._setPageSize(control.closest('.data-table'), control.value, e);\n };\n\n private static _setPageSize(wrapper: Element, value: string, event: Event) {\n const size = positivePageSize(value);\n if (!size || !pageSize(wrapper) || size === pageSize(wrapper)) return;\n const view = DataTables._pageState(wrapper);\n const page = Math.max(1, pageIndex(view.page, view.total, size));\n DataTables._requestPage(wrapper, { page, pageSize: size }, event);\n }\n\n private static _requestPage(wrapper: Element, request: Pick<TablePageState, 'page' | 'pageSize'>, event: Event) {\n const view = DataTables._pageState(wrapper);\n DataTables._pageRequests.set(wrapper, event);\n if (!Utils.emit(wrapper, 'page', request, true)) return;\n if (DataTables._pageRequests.get(wrapper) !== event) return;\n if (view.server) return;\n wrapper.setAttribute('data-page-size', String(request.pageSize));\n DataTables._pages.set(wrapper, { ...view, ...request });\n DataTables.sync(wrapper);\n }\n\n private static _pageState(wrapper: Element): PageView {\n const previous = DataTables._pages.get(wrapper);\n if (previous) return previous;\n const table = wrapper.querySelector<HTMLTableElement>(':scope > table');\n const total = table ? DataTables._records(table).filter(([row]) => visibleRecord(row)).length : 0;\n return { page: 1, pageSize: pageSize(wrapper), total };\n }\n\n /** Filter visibility is settled before paging; details consume no slots. */\n private static _page(wrapper: Element, table: HTMLTableElement) {\n const size = pageSize(wrapper);\n if (!size) return;\n const groups = DataTables._records(table);\n const eligible = groups.filter(([row]) => visibleRecord(row));\n const view = DataTables._pageView(wrapper, eligible.length, size);\n DataTables._pages.set(wrapper, view);\n const displayed = view.server ? eligible : eligible.slice((view.page - 1) * size, view.page * size);\n const shown = new Set(displayed.map(([row]) => row));\n groups.forEach((group) => group.forEach((row) => row.toggleAttribute(PAGED, !shown.has(group[0]))));\n DataTables._pageControls(wrapper, view.page, Math.ceil(view.total / size));\n }\n\n private static _pageView(wrapper: Element, total: number, size: number): PageView {\n const previous = DataTables._pages.get(wrapper) ?? { page: 1, pageSize: size, total };\n const records = previous.server ? previous.total : total;\n return { ...previous, page: pageIndex(previous.page, records, size), pageSize: size, total: records };\n }\n\n private static _pageControls(wrapper: Element, page: number, pages: number) {\n wrapper.querySelectorAll<HTMLButtonElement>(PAGE_BUTTON).forEach((button) => {\n if (button.closest('.data-table') !== wrapper) return;\n const unavailable = button.dataset.tablePage === 'previous' ? page <= 1 : page >= pages;\n button.setAttribute('aria-disabled', String(unavailable));\n });\n const status = tableControl(wrapper, '[data-table-page-status]');\n if (status) {\n const number = new Intl.NumberFormat(Utils.locale(wrapper));\n status.textContent = `${number.format(page)} / ${number.format(pages)}`;\n }\n }\n\n /** Sorting resets only opted-in tables; ordinary table behavior stays unchanged. */\n private static _firstPage(wrapper: Element) {\n if (!pageSize(wrapper)) return;\n DataTables._resetPage(wrapper);\n }\n\n private static _resetPage(wrapper: Element) {\n if (DataTables._pages.get(wrapper)?.server) return;\n DataTables._pages.delete(wrapper);\n DataTables.sync(wrapper);\n }\n\n /**\n * Checks every enabled row when the select-all box changed, then shows on\n * it whether all, some or none of them are checked.\n */\n private static _select(all: HTMLInputElement | null | undefined, boxes: HTMLInputElement[], fromAll: boolean) {\n if (!all) return;\n if (fromAll) boxes.forEach((each) => (each.checked = all.checked));\n const checked = boxes.filter((each) => each.checked).length;\n // Mixed is some but not all: a remainder only when 0 < checked < length.\n all.indeterminate = checked % boxes.length > 0;\n all.checked = checked > 0 && !all.indeterminate;\n }\n\n private static _onClick = (e: MouseEvent) => {\n const button = Utils.closestInPath(e, '.data-table[data-sort] > table > thead > tr > th > button:not([aria-haspopup], :disabled, [aria-disabled=\"true\"], .drag-handle)');\n if (!button) return;\n const header = button.parentElement as HTMLTableCellElement;\n const wrapper = header.closest('.data-table');\n const direction = header.getAttribute('aria-sort') === 'ascending' ? 'descending' : 'ascending';\n header.closest('thead').querySelectorAll('th[aria-sort]').forEach((cell) => cell.removeAttribute('aria-sort'));\n header.setAttribute('aria-sort', direction);\n const column = headerColumns(header.closest('thead')).get(header);\n if (Utils.emit(wrapper, 'sort', { header, column, direction }, true)) {\n DataTables._sort(header.closest('table'), header, column, ORDER[direction]);\n DataTables._firstPage(wrapper);\n }\n };\n\n /** Menu's change from a column toggle; a data table's own change has no item. */\n private static _onToggle = (e: CustomEvent<{ item?: Element }>) => {\n const item = e.detail?.item;\n if (item?.matches?.(TOGGLE)) applyToggle(item);\n };\n\n private static _onPointerDown = (e: PointerEvent) => {\n const handle = Utils.closestInPath(e, HANDLE) as HTMLElement;\n if (handle && e.button === 0) DataTables._drag(handle, e);\n };\n\n /**\n * Moves a column's inline-end edge with the pointer. A few pixels of\n * travel is still a click.\n */\n private static _drag(handle: HTMLElement, start: PointerEvent) {\n const header = handle.parentElement as HTMLTableCellElement;\n const from = DataTables.width(header);\n const sign = getComputedStyle(header).direction === 'rtl' ? -1 : 1;\n DataTables._dragged = false;\n handle.setPointerCapture(start.pointerId);\n const drag = controllerFor(handle);\n const { signal } = drag;\n handle.addEventListener('pointermove', (e) => {\n const delta = e.clientX - start.clientX;\n if (Math.abs(delta) < 4 && !DataTables._dragged) return;\n DataTables._dragged = true;\n DataTables.setWidth(header, from + sign * delta);\n }, { signal });\n const end = () => {\n drag.abort();\n if (DataTables._dragged) DataTables._resized(header, from);\n };\n handle.addEventListener('pointerup', end, { signal });\n handle.addEventListener('pointercancel', end, { signal });\n }\n\n /**\n * Steps a column through narrow, middle and wide: the single-pointer\n * alternative to dragging. The click that ends a mouse drag is not a\n * request to step; a keyboard click (detail 0) always is.\n */\n private static _onHandleClick = (e: MouseEvent) => {\n const handle = Utils.closestInPath(e, HANDLE);\n if (!handle || (e.detail !== 0 && DataTables._dragged)) return;\n const header = handle.parentElement as HTMLTableCellElement;\n DataTables._resizeTo(header, nextStep(header));\n };\n\n private static _onKeyDown = (e: KeyboardEvent) => {\n const handle = Utils.closestInPath(e, HANDLE);\n if (!handle || !Utils.plainKey(e)) return;\n const header = handle.parentElement as HTMLTableCellElement;\n const width = keyWidth(header, e);\n if (width === undefined) return;\n e.preventDefault();\n DataTables._resizeTo(header, width);\n };\n\n /** Sets a column's width and fires `expressive:resize` if it changed. */\n private static _resizeTo(header: HTMLTableCellElement, width: number) {\n const from = DataTables.width(header);\n DataTables.setWidth(header, width);\n DataTables._resized(header, from);\n }\n\n /** Fires `expressive:resize` from the wrapper when a column's width moved off `from`. */\n private static _resized(header: HTMLTableCellElement, from: number) {\n const width = DataTables.width(header);\n if (Math.abs(width - from) < 0.5) return;\n const column = headerColumns(header.closest('thead')).get(header);\n Utils.emit(header.closest('.data-table'), 'resize', { header, column, width });\n }\n\n /**\n * Reorders each body's rows by one column. A detail row moves with the\n * row before it.\n */\n private static _sort(table: HTMLTableElement, header: HTMLTableCellElement, column: number, order: number) {\n if (DataTables._pages.get(table.closest('.data-table'))?.server) return;\n const compare = DataTables._compare(table, header);\n for (const body of Array.from(table.tBodies)) {\n const groups = DataTables._groups(body);\n groups.sort(([a], [b]) => order * compare(cellText(a, column), cellText(b, column)));\n body.append(...groups.flat());\n }\n }\n\n /**\n * How a column compares: a `.numeric` header's as numbers, as a chart\n * reads them, with text that is not a number first; any other as text in\n * the page's language, with digit runs as numbers.\n */\n private static _compare(table: HTMLTableElement, header: HTMLTableCellElement) {\n if (!header.classList.contains('numeric')) return new Intl.Collator(Utils.locale(table), { numeric: true, sensitivity: 'base' }).compare;\n const number = (text: string) => numberValue(text) ?? -Infinity;\n return (a: string, b: string) => number(a) - number(b);\n }\n\n private static _records(table: HTMLTableElement) {\n return Array.from(table.tBodies).flatMap(DataTables._groups).filter(([row]) => !row.classList.contains('data-table-detail'));\n }\n\n /** A body's rows in groups: each record row with the detail rows after it. */\n private static _groups(body: HTMLTableSectionElement) {\n const groups: HTMLTableRowElement[][] = [];\n for (const row of Array.from(body.rows)) {\n if (groups.length && row.classList.contains('data-table-detail')) groups[groups.length - 1].push(row);\n else groups.push([row]);\n }\n return groups;\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|