@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,108 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Menu
|
|
3
|
+
} from "./chunk-CSYWKEK3.mjs";
|
|
4
|
+
import {
|
|
5
|
+
Component
|
|
6
|
+
} from "./chunk-CMGXGYUC.mjs";
|
|
7
|
+
import {
|
|
8
|
+
Utils
|
|
9
|
+
} from "./chunk-ZVLOUDIJ.mjs";
|
|
10
|
+
|
|
11
|
+
// src/ts/components/menubar.ts
|
|
12
|
+
var _defaults = {
|
|
13
|
+
menuOptions: { constrainWidth: false, coverTrigger: false }
|
|
14
|
+
};
|
|
15
|
+
var Menubar = class extends Component {
|
|
16
|
+
constructor(el, options) {
|
|
17
|
+
super(el, options);
|
|
18
|
+
this._added = [];
|
|
19
|
+
this._onFocusin = (e) => {
|
|
20
|
+
const items = this._items;
|
|
21
|
+
if (!items.includes(e.target)) return;
|
|
22
|
+
items.forEach((item) => item.tabIndex = item === e.target ? 0 : -1);
|
|
23
|
+
};
|
|
24
|
+
this._onBarKeydown = (e) => {
|
|
25
|
+
if (!Utils.plainKey(e)) return;
|
|
26
|
+
const items = this._items;
|
|
27
|
+
const index = items.indexOf(e.target);
|
|
28
|
+
if (index < 0) return;
|
|
29
|
+
const step = this._step(e.key);
|
|
30
|
+
if (step) this._focusItem(index, step, false);
|
|
31
|
+
else if (e.key === "Home") this._focusItem(-1, 1, false);
|
|
32
|
+
else if (e.key === "End") this._focusItem(items.length, -1, false);
|
|
33
|
+
else return;
|
|
34
|
+
e.preventDefault();
|
|
35
|
+
};
|
|
36
|
+
// Inside an open menu, Menu handles every key first and takes Left and
|
|
37
|
+
// Right only for submenus; whatever it leaves moves along the bar.
|
|
38
|
+
this._onMenuKeydown = (e) => {
|
|
39
|
+
const step = this._step(e.key);
|
|
40
|
+
if (!step || e.defaultPrevented || !Utils.plainKey(e)) return;
|
|
41
|
+
const items = this._items;
|
|
42
|
+
const path = e.composedPath();
|
|
43
|
+
const index = items.findIndex((item) => {
|
|
44
|
+
const menu = Menu.getInstance(item);
|
|
45
|
+
return menu?.isOpen && menu.menuEl && path.includes(menu.menuEl);
|
|
46
|
+
});
|
|
47
|
+
if (index < 0) return;
|
|
48
|
+
e.preventDefault();
|
|
49
|
+
this._focusItem(index, step, true);
|
|
50
|
+
};
|
|
51
|
+
this._setAttribute(this.el, "role", "menubar");
|
|
52
|
+
this._items.forEach((item, index) => {
|
|
53
|
+
Menu.init(item, this.options.menuOptions);
|
|
54
|
+
this._setAttribute(item, "role", "menuitem");
|
|
55
|
+
item.tabIndex = index === 0 ? 0 : -1;
|
|
56
|
+
});
|
|
57
|
+
const { signal } = this._events;
|
|
58
|
+
this.el.addEventListener("keydown", this._onBarKeydown, { signal });
|
|
59
|
+
this.el.addEventListener("focusin", this._onFocusin, { signal });
|
|
60
|
+
document.addEventListener("keydown", this._onMenuKeydown, { signal });
|
|
61
|
+
}
|
|
62
|
+
static get defaults() {
|
|
63
|
+
return _defaults;
|
|
64
|
+
}
|
|
65
|
+
destroy() {
|
|
66
|
+
this._items.forEach((item) => {
|
|
67
|
+
Menu.getInstance(item)?.destroy();
|
|
68
|
+
item.removeAttribute("tabindex");
|
|
69
|
+
});
|
|
70
|
+
this._added.forEach(({ el, name }) => el.removeAttribute(name));
|
|
71
|
+
this._added = [];
|
|
72
|
+
super.destroy();
|
|
73
|
+
}
|
|
74
|
+
get _items() {
|
|
75
|
+
return [...this.el.querySelectorAll(":scope > .menu-trigger")];
|
|
76
|
+
}
|
|
77
|
+
/** Sets an attribute the author left out, remembering it for destroy(). */
|
|
78
|
+
_setAttribute(el, name, value) {
|
|
79
|
+
if (el.hasAttribute(name)) return;
|
|
80
|
+
el.setAttribute(name, value);
|
|
81
|
+
this._added.push({ el, name });
|
|
82
|
+
}
|
|
83
|
+
_step(key) {
|
|
84
|
+
const rtl = getComputedStyle(this.el).direction === "rtl";
|
|
85
|
+
if (key === "ArrowRight") return rtl ? -1 : 1;
|
|
86
|
+
if (key === "ArrowLeft") return rtl ? 1 : -1;
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
/** Focuses the first enabled item after `index` in the `step` direction, wrapping. */
|
|
90
|
+
_focusItem(index, step, open) {
|
|
91
|
+
const items = this._items;
|
|
92
|
+
const n = items.length;
|
|
93
|
+
const item = items.map((_, i) => items[((index + step * (i + 1)) % n + n) % n]).find((candidate) => !candidate.matches(':disabled, [aria-disabled="true"]'));
|
|
94
|
+
if (!item) return;
|
|
95
|
+
items.forEach((other) => {
|
|
96
|
+
const menu = Menu.getInstance(other);
|
|
97
|
+
if (other !== item && menu?.isOpen) menu.close();
|
|
98
|
+
});
|
|
99
|
+
item.focus();
|
|
100
|
+
if (open) Menu.getInstance(item)?.open();
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
Menubar.key = "Expressive_Menubar";
|
|
104
|
+
|
|
105
|
+
export {
|
|
106
|
+
Menubar
|
|
107
|
+
};
|
|
108
|
+
//# sourceMappingURL=chunk-2RLBDFH4.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/ts/components/menubar.ts"],
|
|
4
|
+
"sourcesContent": ["import { Utils } from '../core/utils';\nimport { Component, BaseOptions } from '../core/component';\nimport { Menu, MenuOptions } from './menu';\n\nexport interface MenubarOptions extends BaseOptions {\n /**\n * Options for each item's Menu. The defaults size the menus to their\n * content and open them below the bar.\n * @default { constrainWidth: false, coverTrigger: false }\n */\n menuOptions: Partial<MenuOptions>;\n}\n\nconst _defaults: MenubarOptions = {\n menuOptions: { constrainWidth: false, coverTrigger: false }\n};\n\n/**\n * Menubar. An application's row of menus, such as File, Edit and View. A\n * `.menubar` holds `.menu-trigger` buttons whose `data-target` menus are\n * ordinary Menus; this adds the ARIA menubar contract around them. The bar\n * is `role=\"menubar\"` and each button a `menuitem`, with one tab stop that\n * follows focus. Left and Right move between items, wrapping, and Home and\n * End go to the first and last; with a menu open, Left and Right close it\n * and open the neighbour's, unless the focused row opens or closes a\n * submenu. Down, Up, Enter and Space open a menu, and Escape closes it,\n * through Menu itself.\n */\nexport class Menubar extends Component<MenubarOptions> {\n private _added: { el: Element; name: string }[] = [];\n\n constructor(el: HTMLElement, options: Partial<MenubarOptions>) {\n super(el, options);\n this._setAttribute(this.el, 'role', 'menubar');\n this._items.forEach((item, index) => {\n Menu.init(item, this.options.menuOptions);\n this._setAttribute(item, 'role', 'menuitem');\n item.tabIndex = index === 0 ? 0 : -1;\n });\n const { signal } = this._events;\n this.el.addEventListener('keydown', this._onBarKeydown, { signal });\n this.el.addEventListener('focusin', this._onFocusin, { signal });\n document.addEventListener('keydown', this._onMenuKeydown, { signal });\n }\n\n static get defaults(): MenubarOptions {\n return _defaults;\n }\n\n static key = 'Expressive_Menubar';\n\n destroy() {\n this._items.forEach((item) => {\n Menu.getInstance(item)?.destroy();\n item.removeAttribute('tabindex');\n });\n this._added.forEach(({ el, name }) => el.removeAttribute(name));\n this._added = [];\n super.destroy();\n }\n\n private get _items(): HTMLElement[] {\n return [...this.el.querySelectorAll<HTMLElement>(':scope > .menu-trigger')];\n }\n\n /** Sets an attribute the author left out, remembering it for destroy(). */\n private _setAttribute(el: Element, name: string, value: string) {\n if (el.hasAttribute(name)) return;\n el.setAttribute(name, value);\n this._added.push({ el, name });\n }\n\n private _step(key: string): number | null {\n const rtl = getComputedStyle(this.el).direction === 'rtl';\n if (key === 'ArrowRight') return rtl ? -1 : 1;\n if (key === 'ArrowLeft') return rtl ? 1 : -1;\n return null;\n }\n\n /** Focuses the first enabled item after `index` in the `step` direction, wrapping. */\n private _focusItem(index: number, step: number, open: boolean) {\n const items = this._items;\n const n = items.length;\n // focus() on a disabled button does nothing, which stranded every item\n // past it, and opening its menu would bypass the disabled state.\n const item = items\n .map((_, i) => items[(((index + step * (i + 1)) % n) + n) % n])\n .find((candidate) => !candidate.matches(':disabled, [aria-disabled=\"true\"]'));\n if (!item) return;\n items.forEach((other) => {\n const menu = Menu.getInstance(other);\n if (other !== item && menu?.isOpen) menu.close();\n });\n item.focus();\n if (open) Menu.getInstance(item)?.open();\n }\n\n private _onFocusin = (e: FocusEvent) => {\n const items = this._items;\n if (!items.includes(e.target as HTMLElement)) return;\n items.forEach((item) => (item.tabIndex = item === e.target ? 0 : -1));\n };\n\n private _onBarKeydown = (e: KeyboardEvent) => {\n if (!Utils.plainKey(e)) return;\n const items = this._items;\n const index = items.indexOf(e.target as HTMLElement);\n if (index < 0) return;\n const step = this._step(e.key);\n // Home and End search from just outside the ends of the bar.\n if (step) this._focusItem(index, step, false);\n else if (e.key === 'Home') this._focusItem(-1, 1, false);\n else if (e.key === 'End') this._focusItem(items.length, -1, false);\n else return;\n e.preventDefault();\n };\n\n // Inside an open menu, Menu handles every key first and takes Left and\n // Right only for submenus; whatever it leaves moves along the bar.\n private _onMenuKeydown = (e: KeyboardEvent) => {\n const step = this._step(e.key);\n if (!step || e.defaultPrevented || !Utils.plainKey(e)) return;\n const items = this._items;\n const path = e.composedPath();\n const index = items.findIndex((item) => {\n const menu = Menu.getInstance(item);\n return menu?.isOpen && menu.menuEl && path.includes(menu.menuEl);\n });\n if (index < 0) return;\n e.preventDefault();\n this._focusItem(index, step, true);\n };\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import {
|
|
2
|
+
DISMISS_DISTANCE,
|
|
3
|
+
DISMISS_VELOCITY,
|
|
4
|
+
installSheetDrag
|
|
5
|
+
} from "./chunk-JUKBBN6P.mjs";
|
|
6
|
+
import {
|
|
7
|
+
Utils
|
|
8
|
+
} from "./chunk-ZVLOUDIJ.mjs";
|
|
9
|
+
|
|
10
|
+
// src/ts/behaviors/bottomSheets.ts
|
|
11
|
+
var SHEET_SELECTOR = "dialog.bottom-sheet";
|
|
12
|
+
var RESIZE_DISTANCE = 48;
|
|
13
|
+
var toward = (sign, distance, delta, velocity) => delta * sign > distance || velocity * sign > DISMISS_VELOCITY;
|
|
14
|
+
var _BottomSheets = class _BottomSheets {
|
|
15
|
+
static Init() {
|
|
16
|
+
installSheetDrag({
|
|
17
|
+
selector: SHEET_SELECTOR,
|
|
18
|
+
axis: "y",
|
|
19
|
+
property: "--md-comp-bottom-sheet-shift",
|
|
20
|
+
motion: "--md-comp-bottom-sheet-motion",
|
|
21
|
+
direction: () => 1,
|
|
22
|
+
inHandle: (event, dialog) => {
|
|
23
|
+
if (Utils.closestInPath(event, ".drag-handle")) return true;
|
|
24
|
+
const rect = dialog.getBoundingClientRect();
|
|
25
|
+
return event.clientY >= rect.top && event.clientY <= rect.top + 48;
|
|
26
|
+
},
|
|
27
|
+
onPress: () => {
|
|
28
|
+
_BottomSheets._dragged = false;
|
|
29
|
+
},
|
|
30
|
+
onRelease: (dragged) => {
|
|
31
|
+
_BottomSheets._dragged = dragged;
|
|
32
|
+
},
|
|
33
|
+
release: (dialog, delta, velocity) => _BottomSheets._resize(dialog, delta, velocity)
|
|
34
|
+
});
|
|
35
|
+
Utils.onDocumentReady(() => {
|
|
36
|
+
document.addEventListener("click", _BottomSheets._onClick);
|
|
37
|
+
document.addEventListener("close", _BottomSheets._onClose, true);
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* For an .expandable sheet, a drag up expands it and a drag down from
|
|
42
|
+
* expanded collapses it. Returns whether the drag resized the sheet.
|
|
43
|
+
*/
|
|
44
|
+
static _resize(dialog, delta, velocity) {
|
|
45
|
+
if (!dialog.classList.contains("expandable")) return false;
|
|
46
|
+
const expanded = dialog.classList.contains("expanded");
|
|
47
|
+
const next = expanded ? !toward(1, DISMISS_DISTANCE, delta, velocity) : toward(-1, RESIZE_DISTANCE, delta, velocity);
|
|
48
|
+
if (next === expanded) return false;
|
|
49
|
+
_BottomSheets.setExpanded(dialog, next);
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
/** Sets an .expandable sheet to its full height or back to partial, and tells its handle. */
|
|
53
|
+
static setExpanded(dialog, expanded) {
|
|
54
|
+
dialog.classList.toggle("expanded", expanded);
|
|
55
|
+
dialog.querySelector(":scope > button.drag-handle")?.setAttribute("aria-expanded", String(expanded));
|
|
56
|
+
}
|
|
57
|
+
static _onClose(event) {
|
|
58
|
+
const dialog = event.target;
|
|
59
|
+
if (dialog.matches?.(`${SHEET_SELECTOR}.expandable`)) _BottomSheets.setExpanded(dialog, false);
|
|
60
|
+
}
|
|
61
|
+
static _onClick(event) {
|
|
62
|
+
const handle = Utils.closestInPath(event, ".drag-handle");
|
|
63
|
+
if (!(handle instanceof HTMLButtonElement)) return;
|
|
64
|
+
if (event.detail !== 0 && _BottomSheets._dragged) return;
|
|
65
|
+
const dialog = handle.closest(SHEET_SELECTOR);
|
|
66
|
+
if (dialog instanceof HTMLDialogElement && dialog.open) _BottomSheets._activate(dialog);
|
|
67
|
+
}
|
|
68
|
+
/** The handle button switches an .expandable sheet's height, and closes any other. */
|
|
69
|
+
static _activate(dialog) {
|
|
70
|
+
if (dialog.classList.contains("expandable")) _BottomSheets.setExpanded(dialog, !dialog.classList.contains("expanded"));
|
|
71
|
+
else dialog.close();
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
/**
|
|
75
|
+
* Whether the last pointer sequence moved. A drag ends with a `click` on the
|
|
76
|
+
* element it started on, so without this the tail of a drag that snapped back
|
|
77
|
+
* would dismiss the sheet the drag had just declined to dismiss.
|
|
78
|
+
*/
|
|
79
|
+
_BottomSheets._dragged = false;
|
|
80
|
+
var BottomSheets = _BottomSheets;
|
|
81
|
+
|
|
82
|
+
export {
|
|
83
|
+
BottomSheets
|
|
84
|
+
};
|
|
85
|
+
//# sourceMappingURL=chunk-3L3QIYLC.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/ts/behaviors/bottomSheets.ts"],
|
|
4
|
+
"sourcesContent": ["import { DISMISS_DISTANCE, DISMISS_VELOCITY, installSheetDrag } from './sheetDrag';\nimport { Utils } from '../core/utils';\n\nconst SHEET_SELECTOR = 'dialog.bottom-sheet';\n/** Past this a drag up expands an .expandable sheet, in pixels; a drag down uses the dismissal distance. */\nconst RESIZE_DISTANCE = 48;\n\n/** Whether a drag went past `distance`, or flicked, down (1) or up (-1). */\nconst toward = (sign: 1 | -1, distance: number, delta: number, velocity: number) =>\n delta * sign > distance || velocity * sign > DISMISS_VELOCITY;\n\n/**\n * Drag-to-dismiss for `dialog.bottom-sheet`, and two heights for\n * `.expandable` sheets.\n *\n * The handle is the top 48dp of the sheet, or an explicit `.drag-handle`. A downward drag past 96dp, or a\n * flick, closes. Anything else snaps back. Content below the handle scrolls\n * normally. Light-dismiss on the scrim stays with {@link Dialogs}.\n *\n * The drag itself is {@link installSheetDrag}, shared with the side sheet. What\n * is here is what is not shared: a handle written as a `<button>` also closes\n * the sheet when it is *activated*, which is what makes it reachable without a\n * pointer - dragging is a pointer gesture, so a control labelled \"Dismiss\" that\n * only answers a drag promises an action a keyboard user cannot perform. A\n * handle written as any other element is decoration and does nothing here -\n * Escape still closes the sheet either way, natively.\n *\n * An `.expandable` sheet opens partly expanded. A drag up, or a flick up,\n * expands it to its full height with `.expanded`; from there a drag down\n * collapses it, and a drag down from the partial height dismisses as usual.\n * Its handle button switches between the two heights instead of closing,\n * and carries `aria-expanded`. Closing the sheet puts it back to partial.\n */\nexport class BottomSheets {\n /**\n * Whether the last pointer sequence moved. A drag ends with a `click` on the\n * element it started on, so without this the tail of a drag that snapped back\n * would dismiss the sheet the drag had just declined to dismiss.\n */\n private static _dragged = false;\n\n static Init() {\n installSheetDrag({\n selector: SHEET_SELECTOR,\n axis: 'y',\n property: '--md-comp-bottom-sheet-shift',\n motion: '--md-comp-bottom-sheet-motion',\n direction: () => 1,\n inHandle: (event, dialog) => {\n if (Utils.closestInPath(event, '.drag-handle')) return true;\n const rect = dialog.getBoundingClientRect();\n return event.clientY >= rect.top && event.clientY <= rect.top + 48;\n },\n onPress: () => {\n BottomSheets._dragged = false;\n },\n onRelease: (dragged) => {\n BottomSheets._dragged = dragged;\n },\n release: (dialog, delta, velocity) => BottomSheets._resize(dialog, delta, velocity)\n });\n Utils.onDocumentReady(() => {\n document.addEventListener('click', BottomSheets._onClick);\n // close does not bubble, so it is caught on its way down.\n document.addEventListener('close', BottomSheets._onClose, true);\n });\n }\n\n /**\n * For an .expandable sheet, a drag up expands it and a drag down from\n * expanded collapses it. Returns whether the drag resized the sheet.\n */\n static _resize(dialog: HTMLDialogElement, delta: number, velocity: number): boolean {\n if (!dialog.classList.contains('expandable')) return false;\n const expanded = dialog.classList.contains('expanded');\n const next = expanded ? !toward(1, DISMISS_DISTANCE, delta, velocity) : toward(-1, RESIZE_DISTANCE, delta, velocity);\n if (next === expanded) return false;\n BottomSheets.setExpanded(dialog, next);\n return true;\n }\n\n /** Sets an .expandable sheet to its full height or back to partial, and tells its handle. */\n static setExpanded(dialog: HTMLDialogElement, expanded: boolean) {\n dialog.classList.toggle('expanded', expanded);\n dialog.querySelector(':scope > button.drag-handle')?.setAttribute('aria-expanded', String(expanded));\n }\n\n private static _onClose(event: Event) {\n const dialog = event.target as Element;\n if (dialog.matches?.(`${SHEET_SELECTOR}.expandable`)) BottomSheets.setExpanded(dialog as HTMLDialogElement, false);\n }\n\n static _onClick(event: MouseEvent) {\n const handle = Utils.closestInPath(event, '.drag-handle');\n // Only a <button> is a control. A decorative <span> in the same slot is\n // exactly what it looks like, and clicking it does nothing.\n if (!(handle instanceof HTMLButtonElement)) return;\n // `detail` is 0 when the click came from Enter or Space and >= 1 when a\n // pointer produced it, so the keyboard path is decided without consulting\n // pointer state at all - a stale drag can never swallow a key press.\n if (event.detail !== 0 && BottomSheets._dragged) return;\n const dialog = handle.closest(SHEET_SELECTOR);\n if (dialog instanceof HTMLDialogElement && dialog.open) BottomSheets._activate(dialog);\n }\n\n /** The handle button switches an .expandable sheet's height, and closes any other. */\n private static _activate(dialog: HTMLDialogElement) {\n if (dialog.classList.contains('expandable')) BottomSheets.setExpanded(dialog, !dialog.classList.contains('expanded'));\n else dialog.close();\n }\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;AAGA,IAAM,iBAAiB;AAEvB,IAAM,kBAAkB;AAGxB,IAAM,SAAS,CAAC,MAAc,UAAkB,OAAe,aAC7D,QAAQ,OAAO,YAAY,WAAW,OAAO;AAwBxC,IAAM,gBAAN,MAAM,cAAa;AAAA,EAQxB,OAAO,OAAO;AACZ,qBAAiB;AAAA,MACf,UAAU;AAAA,MACV,MAAM;AAAA,MACN,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,WAAW,MAAM;AAAA,MACjB,UAAU,CAAC,OAAO,WAAW;AAC3B,YAAI,MAAM,cAAc,OAAO,cAAc,EAAG,QAAO;AACvD,cAAM,OAAO,OAAO,sBAAsB;AAC1C,eAAO,MAAM,WAAW,KAAK,OAAO,MAAM,WAAW,KAAK,MAAM;AAAA,MAClE;AAAA,MACA,SAAS,MAAM;AACb,sBAAa,WAAW;AAAA,MAC1B;AAAA,MACA,WAAW,CAAC,YAAY;AACtB,sBAAa,WAAW;AAAA,MAC1B;AAAA,MACA,SAAS,CAAC,QAAQ,OAAO,aAAa,cAAa,QAAQ,QAAQ,OAAO,QAAQ;AAAA,IACpF,CAAC;AACD,UAAM,gBAAgB,MAAM;AAC1B,eAAS,iBAAiB,SAAS,cAAa,QAAQ;AAExD,eAAS,iBAAiB,SAAS,cAAa,UAAU,IAAI;AAAA,IAChE,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,QAAQ,QAA2B,OAAe,UAA2B;AAClF,QAAI,CAAC,OAAO,UAAU,SAAS,YAAY,EAAG,QAAO;AACrD,UAAM,WAAW,OAAO,UAAU,SAAS,UAAU;AACrD,UAAM,OAAO,WAAW,CAAC,OAAO,GAAG,kBAAkB,OAAO,QAAQ,IAAI,OAAO,IAAI,iBAAiB,OAAO,QAAQ;AACnH,QAAI,SAAS,SAAU,QAAO;AAC9B,kBAAa,YAAY,QAAQ,IAAI;AACrC,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,OAAO,YAAY,QAA2B,UAAmB;AAC/D,WAAO,UAAU,OAAO,YAAY,QAAQ;AAC5C,WAAO,cAAc,6BAA6B,GAAG,aAAa,iBAAiB,OAAO,QAAQ,CAAC;AAAA,EACrG;AAAA,EAEA,OAAe,SAAS,OAAc;AACpC,UAAM,SAAS,MAAM;AACrB,QAAI,OAAO,UAAU,GAAG,cAAc,aAAa,EAAG,eAAa,YAAY,QAA6B,KAAK;AAAA,EACnH;AAAA,EAEA,OAAO,SAAS,OAAmB;AACjC,UAAM,SAAS,MAAM,cAAc,OAAO,cAAc;AAGxD,QAAI,EAAE,kBAAkB,mBAAoB;AAI5C,QAAI,MAAM,WAAW,KAAK,cAAa,SAAU;AACjD,UAAM,SAAS,OAAO,QAAQ,cAAc;AAC5C,QAAI,kBAAkB,qBAAqB,OAAO,KAAM,eAAa,UAAU,MAAM;AAAA,EACvF;AAAA;AAAA,EAGA,OAAe,UAAU,QAA2B;AAClD,QAAI,OAAO,UAAU,SAAS,YAAY,EAAG,eAAa,YAAY,QAAQ,CAAC,OAAO,UAAU,SAAS,UAAU,CAAC;AAAA,QAC/G,QAAO,MAAM;AAAA,EACpB;AACF;AAAA;AAAA;AAAA;AAAA;AAAA;AA7Ea,cAMI,WAAW;AANrB,IAAM,eAAN;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Component
|
|
3
|
+
} from "./chunk-CMGXGYUC.mjs";
|
|
4
|
+
|
|
5
|
+
// src/ts/components/loadingOverlay.ts
|
|
6
|
+
var _defaults = {
|
|
7
|
+
i18n: {
|
|
8
|
+
loading: "Loading",
|
|
9
|
+
loaded: "Loaded"
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
var focusLost = (doc) => !doc.activeElement || doc.activeElement === doc.body;
|
|
13
|
+
var LoadingOverlay = class extends Component {
|
|
14
|
+
constructor(el, options) {
|
|
15
|
+
super(el, options);
|
|
16
|
+
this._busy = false;
|
|
17
|
+
/** The region's own `inert`, put back when it clears. */
|
|
18
|
+
this._wasInert = false;
|
|
19
|
+
/** The element inside the region that had focus when it became busy. */
|
|
20
|
+
this._focus = null;
|
|
21
|
+
this._status = el.ownerDocument.createElement("span");
|
|
22
|
+
this._status.className = "loading-overlay-status";
|
|
23
|
+
this._status.setAttribute("role", "status");
|
|
24
|
+
el.after(this._status);
|
|
25
|
+
this._observer = new MutationObserver(() => this._sync());
|
|
26
|
+
this._observer.observe(el, { attributeFilter: ["aria-busy"] });
|
|
27
|
+
this._sync();
|
|
28
|
+
if (this._busy) {
|
|
29
|
+
this._status.textContent = "";
|
|
30
|
+
requestAnimationFrame(() => this._announceStart());
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
static get defaults() {
|
|
34
|
+
return _defaults;
|
|
35
|
+
}
|
|
36
|
+
destroy() {
|
|
37
|
+
this._observer.disconnect();
|
|
38
|
+
if (this._busy) this.el.inert = this._wasInert;
|
|
39
|
+
this._status.remove();
|
|
40
|
+
super.destroy();
|
|
41
|
+
}
|
|
42
|
+
/** Follows `aria-busy`. Other values than "true" clear, as ARIA treats them. */
|
|
43
|
+
_sync() {
|
|
44
|
+
const busy = this.el.getAttribute("aria-busy") === "true";
|
|
45
|
+
if (busy === this._busy) return;
|
|
46
|
+
this._busy = busy;
|
|
47
|
+
if (busy) this._start();
|
|
48
|
+
else this._clear();
|
|
49
|
+
}
|
|
50
|
+
_start() {
|
|
51
|
+
const active = this.el.getRootNode().activeElement;
|
|
52
|
+
this._focus = active instanceof HTMLElement && this.el.contains(active) ? active : null;
|
|
53
|
+
this._wasInert = this.el.inert;
|
|
54
|
+
this.el.inert = true;
|
|
55
|
+
this._focus?.blur();
|
|
56
|
+
this._status.textContent = this.options.i18n.loading;
|
|
57
|
+
}
|
|
58
|
+
_clear() {
|
|
59
|
+
this.el.inert = this._wasInert;
|
|
60
|
+
this._status.textContent = this.options.i18n.loaded;
|
|
61
|
+
const focus = this._focus;
|
|
62
|
+
this._focus = null;
|
|
63
|
+
if (focus?.isConnected && focusLost(this.el.ownerDocument)) focus.focus();
|
|
64
|
+
}
|
|
65
|
+
/** The deferred first announcement, unless the region cleared or the instance went first. */
|
|
66
|
+
_announceStart() {
|
|
67
|
+
if (this._busy && this._status.isConnected) this._status.textContent = this.options.i18n.loading;
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
LoadingOverlay.key = "Expressive_LoadingOverlay";
|
|
71
|
+
|
|
72
|
+
export {
|
|
73
|
+
LoadingOverlay
|
|
74
|
+
};
|
|
75
|
+
//# sourceMappingURL=chunk-4EWGD4V2.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/ts/components/loadingOverlay.ts"],
|
|
4
|
+
"sourcesContent": ["import { Component, BaseOptions } from '../core/component';\n\n/** What the status region announces. */\nexport interface LoadingOverlayI18nOptions {\n /** Announced when the region becomes busy. */\n loading: string;\n /** Announced when it clears. */\n loaded: string;\n}\n\nexport interface LoadingOverlayOptions extends BaseOptions {\n /** What the status region announces when the region becomes busy and when it clears. */\n i18n: Partial<LoadingOverlayI18nOptions>;\n}\n\nconst _defaults: LoadingOverlayOptions = {\n i18n: {\n loading: 'Loading',\n loaded: 'Loaded'\n }\n};\n\n/** Whether focus has gone nowhere: an element that turns inert drops it to the body. */\nconst focusLost = (doc: Document) => !doc.activeElement || doc.activeElement === doc.body;\n\n/**\n * Loading overlay. While the page sets `aria-busy=\"true\"` on the region, the\n * region is inert, so nothing inside it takes a click, a tap or keyboard\n * focus, and the stylesheet shows a scrim and the author's loading indicator\n * over it. The page clears the region by removing the attribute or setting it\n * to anything else; there is no method for either.\n *\n * Inert content leaves the accessibility tree, the indicator's status\n * included, so the start and the finish are announced from a status region\n * the script adds after the region.\n */\nexport class LoadingOverlay extends Component<LoadingOverlayOptions> {\n static key = 'Expressive_LoadingOverlay';\n private _status: HTMLElement;\n private _observer: MutationObserver;\n private _busy = false;\n /** The region's own `inert`, put back when it clears. */\n private _wasInert = false;\n /** The element inside the region that had focus when it became busy. */\n private _focus: HTMLElement | null = null;\n\n constructor(el: HTMLElement, options: Partial<LoadingOverlayOptions>) {\n super(el, options);\n this._status = el.ownerDocument.createElement('span');\n this._status.className = 'loading-overlay-status';\n this._status.setAttribute('role', 'status');\n el.after(this._status);\n this._observer = new MutationObserver(() => this._sync());\n this._observer.observe(el, { attributeFilter: ['aria-busy'] });\n this._sync();\n // Screen readers often skip text a live region already holds when it is\n // inserted, so a region busy from the start announces a frame later.\n if (this._busy) {\n this._status.textContent = '';\n requestAnimationFrame(() => this._announceStart());\n }\n }\n\n static get defaults(): LoadingOverlayOptions {\n return _defaults;\n }\n\n destroy() {\n this._observer.disconnect();\n if (this._busy) this.el.inert = this._wasInert;\n this._status.remove();\n super.destroy();\n }\n\n /** Follows `aria-busy`. Other values than \"true\" clear, as ARIA treats them. */\n private _sync() {\n const busy = this.el.getAttribute('aria-busy') === 'true';\n if (busy === this._busy) return;\n this._busy = busy;\n if (busy) this._start();\n else this._clear();\n }\n\n private _start() {\n // The root's, so a region inside a shadow root sees its own focused control\n // rather than the host. Read before inert drops it.\n const active = (this.el.getRootNode() as Document | ShadowRoot).activeElement;\n this._focus = active instanceof HTMLElement && this.el.contains(active) ? active : null;\n this._wasInert = this.el.inert;\n this.el.inert = true;\n // Inert alone is not enough for the focused control. WebKit reports the body\n // as focused but still types into it, and every engine leaves focus inside a\n // shadow root where it was.\n this._focus?.blur();\n this._status.textContent = this.options.i18n.loading;\n }\n\n private _clear() {\n this.el.inert = this._wasInert;\n this._status.textContent = this.options.i18n.loaded;\n const focus = this._focus;\n this._focus = null;\n // Not over a move the person made while it loaded, and not to an element the page removed.\n if (focus?.isConnected && focusLost(this.el.ownerDocument)) focus.focus();\n }\n\n /** The deferred first announcement, unless the region cleared or the instance went first. */\n private _announceStart() {\n if (this._busy && this._status.isConnected) this._status.textContent = this.options.i18n.loading;\n }\n}\n"],
|
|
5
|
+
"mappings": ";;;;;AAeA,IAAM,YAAmC;AAAA,EACvC,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,QAAQ;AAAA,EACV;AACF;AAGA,IAAM,YAAY,CAAC,QAAkB,CAAC,IAAI,iBAAiB,IAAI,kBAAkB,IAAI;AAa9E,IAAM,iBAAN,cAA6B,UAAiC;AAAA,EAUnE,YAAY,IAAiB,SAAyC;AACpE,UAAM,IAAI,OAAO;AAPnB,SAAQ,QAAQ;AAEhB;AAAA,SAAQ,YAAY;AAEpB;AAAA,SAAQ,SAA6B;AAInC,SAAK,UAAU,GAAG,cAAc,cAAc,MAAM;AACpD,SAAK,QAAQ,YAAY;AACzB,SAAK,QAAQ,aAAa,QAAQ,QAAQ;AAC1C,OAAG,MAAM,KAAK,OAAO;AACrB,SAAK,YAAY,IAAI,iBAAiB,MAAM,KAAK,MAAM,CAAC;AACxD,SAAK,UAAU,QAAQ,IAAI,EAAE,iBAAiB,CAAC,WAAW,EAAE,CAAC;AAC7D,SAAK,MAAM;AAGX,QAAI,KAAK,OAAO;AACd,WAAK,QAAQ,cAAc;AAC3B,4BAAsB,MAAM,KAAK,eAAe,CAAC;AAAA,IACnD;AAAA,EACF;AAAA,EAEA,WAAW,WAAkC;AAC3C,WAAO;AAAA,EACT;AAAA,EAEA,UAAU;AACR,SAAK,UAAU,WAAW;AAC1B,QAAI,KAAK,MAAO,MAAK,GAAG,QAAQ,KAAK;AACrC,SAAK,QAAQ,OAAO;AACpB,UAAM,QAAQ;AAAA,EAChB;AAAA;AAAA,EAGQ,QAAQ;AACd,UAAM,OAAO,KAAK,GAAG,aAAa,WAAW,MAAM;AACnD,QAAI,SAAS,KAAK,MAAO;AACzB,SAAK,QAAQ;AACb,QAAI,KAAM,MAAK,OAAO;AAAA,QACjB,MAAK,OAAO;AAAA,EACnB;AAAA,EAEQ,SAAS;AAGf,UAAM,SAAU,KAAK,GAAG,YAAY,EAA4B;AAChE,SAAK,SAAS,kBAAkB,eAAe,KAAK,GAAG,SAAS,MAAM,IAAI,SAAS;AACnF,SAAK,YAAY,KAAK,GAAG;AACzB,SAAK,GAAG,QAAQ;AAIhB,SAAK,QAAQ,KAAK;AAClB,SAAK,QAAQ,cAAc,KAAK,QAAQ,KAAK;AAAA,EAC/C;AAAA,EAEQ,SAAS;AACf,SAAK,GAAG,QAAQ,KAAK;AACrB,SAAK,QAAQ,cAAc,KAAK,QAAQ,KAAK;AAC7C,UAAM,QAAQ,KAAK;AACnB,SAAK,SAAS;AAEd,QAAI,OAAO,eAAe,UAAU,KAAK,GAAG,aAAa,EAAG,OAAM,MAAM;AAAA,EAC1E;AAAA;AAAA,EAGQ,iBAAiB;AACvB,QAAI,KAAK,SAAS,KAAK,QAAQ,YAAa,MAAK,QAAQ,cAAc,KAAK,QAAQ,KAAK;AAAA,EAC3F;AACF;AA1Ea,eACJ,MAAM;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/ts/modular.ts"],
|
|
4
|
+
"sourcesContent": ["export * from './components';\nexport { Dialogs } from './behaviors/dialogs';\nexport type { ConfirmOptions } from './behaviors/dialogs';\nexport { BottomSheets } from './behaviors/bottomSheets';\nexport { SideSheets } from './behaviors/sideSheets';\nexport { Forms } from './behaviors/forms';\nexport { Copy } from './behaviors/copy';\nexport { Theme } from './behaviors/theme';\nexport { PaneResize } from './behaviors/paneResize';\nexport { ImageCompare } from './behaviors/imageCompare';\nexport { Tour } from './behaviors/tour';\nexport { Sortable } from './behaviors/sortable';\nexport { Lists } from './behaviors/lists';\nexport { DataTables } from './behaviors/dataTables';\nexport { TransferList } from './behaviors/transferList';\nexport { AutoInit } from './components/registry';\nexport type { AutoInitOptions } from './components/registry';\n\nexport const version = '0.16.0';\n\nexport type * from './components/autocomplete';\nexport type * from './components/appBar';\nexport type * from './components/buttons';\nexport type * from './components/buttonGroup';\nexport type * from './components/cards';\nexport type * from './components/expandingCard';\nexport type * from './components/carousel';\nexport type * from './components/confetti';\nexport type * from './components/particles';\nexport type * from './components/keypad';\nexport type * from './components/characterCounter';\nexport type * from './components/chips';\nexport type * from './components/cascader';\nexport type * from './components/lineChart';\nexport type * from './components/columnChart';\nexport type * from './components/barChart';\nexport type * from './components/pieChart';\nexport type * from './components/heatmapChart';\nexport type * from './components/radarChart';\nexport type * from './components/radialChart';\nexport type * from './components/mixedChart';\nexport type * from './components/scatterChart';\nexport type * from './components/funnelChart';\nexport type * from './components/sankeyChart';\nexport type * from './components/treemapChart';\nexport type * from './components/pullToRefresh';\nexport type * from './components/loadingOverlay';\nexport type * from './components/backToTop';\nexport type * from './components/swipeActions';\nexport type * from './components/inputMask';\nexport type * from './components/showMore';\nexport type * from './components/hoverCard';\nexport type * from './components/currencyInput';\nexport type * from './components/commandPalette';\nexport type * from './components/questionnaire';\nexport type * from './components/datepicker';\nexport type * from './components/menu';\nexport type * from './components/menubar';\nexport type * from './components/messageScroller';\nexport type * from './components/richTextEditor';\nexport type * from './components/mapView';\nexport type * from './components/lightbox';\nexport type * from './components/slider';\nexport type * from './components/scrollspy';\nexport type * from './components/select';\nexport type * from './components/treeSelect';\nexport type * from './components/navigationRail';\nexport type * from './components/tabs';\nexport type * from './components/timepicker';\nexport type * from './components/snackbar';\nexport type * from './components/tooltip';\n"],
|
|
5
|
+
"mappings": ";AAkBO,IAAM,UAAU;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Utils
|
|
3
|
+
} from "./chunk-ZVLOUDIJ.mjs";
|
|
4
|
+
|
|
5
|
+
// src/ts/behaviors/dialogs.ts
|
|
6
|
+
function textElement(tag, text) {
|
|
7
|
+
const el = document.createElement(tag);
|
|
8
|
+
el.textContent = text;
|
|
9
|
+
return el;
|
|
10
|
+
}
|
|
11
|
+
function actionButton(label, value) {
|
|
12
|
+
const button = textElement("button", label);
|
|
13
|
+
button.type = "submit";
|
|
14
|
+
button.value = value;
|
|
15
|
+
return button;
|
|
16
|
+
}
|
|
17
|
+
var _Dialogs = class _Dialogs {
|
|
18
|
+
/**
|
|
19
|
+
* Asks a yes-or-no question in a modal alert dialog. Resolves true on the
|
|
20
|
+
* confirm button and false on Cancel, Escape or a scrim tap, then removes
|
|
21
|
+
* the dialog. The browser returns focus to the element that had it.
|
|
22
|
+
*/
|
|
23
|
+
static confirm(options) {
|
|
24
|
+
const dialog = _Dialogs._confirmDialog(options);
|
|
25
|
+
document.body.append(dialog);
|
|
26
|
+
dialog.showModal();
|
|
27
|
+
return new Promise((resolve) => {
|
|
28
|
+
const removed = new MutationObserver(() => {
|
|
29
|
+
if (!dialog.isConnected) settle(false);
|
|
30
|
+
});
|
|
31
|
+
const settle = (answer) => {
|
|
32
|
+
removed.disconnect();
|
|
33
|
+
dialog.remove();
|
|
34
|
+
resolve(answer);
|
|
35
|
+
};
|
|
36
|
+
removed.observe(document, { childList: true, subtree: true });
|
|
37
|
+
dialog.addEventListener("close", () => settle(dialog.returnValue === "confirm"), { once: true });
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
static _confirmDialog({ text, headline, confirm, cancel }) {
|
|
41
|
+
const dialog = document.createElement("dialog");
|
|
42
|
+
dialog.setAttribute("role", "alertdialog");
|
|
43
|
+
const id = `expressive-confirm-${++_Dialogs._confirms}`;
|
|
44
|
+
const body = textElement("p", text);
|
|
45
|
+
body.id = `${id}-text`;
|
|
46
|
+
const cancelButton = actionButton(cancel ?? _Dialogs.i18n.cancel, "");
|
|
47
|
+
cancelButton.className = "text";
|
|
48
|
+
cancelButton.autofocus = true;
|
|
49
|
+
const form = document.createElement("form");
|
|
50
|
+
form.method = "dialog";
|
|
51
|
+
form.append(cancelButton, actionButton(confirm ?? _Dialogs.i18n.confirm, "confirm"));
|
|
52
|
+
dialog.append(body, form);
|
|
53
|
+
_Dialogs._name(dialog, body, id, headline);
|
|
54
|
+
return dialog;
|
|
55
|
+
}
|
|
56
|
+
/** Names the dialog by its headline and describes it by the text, or names it by the text alone. */
|
|
57
|
+
static _name(dialog, body, id, headline) {
|
|
58
|
+
if (!headline) {
|
|
59
|
+
dialog.setAttribute("aria-labelledby", body.id);
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
const heading = textElement("h2", headline);
|
|
63
|
+
heading.id = `${id}-headline`;
|
|
64
|
+
dialog.prepend(heading);
|
|
65
|
+
dialog.setAttribute("aria-labelledby", heading.id);
|
|
66
|
+
dialog.setAttribute("aria-describedby", body.id);
|
|
67
|
+
}
|
|
68
|
+
static Init() {
|
|
69
|
+
Utils.onDocumentReady(() => {
|
|
70
|
+
document.addEventListener("pointerdown", _Dialogs._onPointerDown, { passive: true });
|
|
71
|
+
document.addEventListener("pointerup", _Dialogs._onPointerUp, { passive: true });
|
|
72
|
+
document.addEventListener("pointercancel", _Dialogs._onPointerCancel, { passive: true });
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
static _onPointerDown(event) {
|
|
76
|
+
const dialog = _Dialogs._isPrimaryPress(event) ? _Dialogs._backdropDialog(event) : null;
|
|
77
|
+
_Dialogs._down = dialog && _Dialogs._lightDismissible(dialog) && _Dialogs._outside(event, dialog) ? { dialog, pointerId: event.pointerId } : null;
|
|
78
|
+
}
|
|
79
|
+
static _onPointerUp(event) {
|
|
80
|
+
const started = _Dialogs._down;
|
|
81
|
+
_Dialogs._down = null;
|
|
82
|
+
if (!started || started.pointerId !== event.pointerId) return;
|
|
83
|
+
if (!started.dialog.isConnected || !started.dialog.open) return;
|
|
84
|
+
if (!_Dialogs._lightDismissible(started.dialog)) return;
|
|
85
|
+
if (_Dialogs._backdropDialog(event) !== started.dialog) return;
|
|
86
|
+
if (_Dialogs._outside(event, started.dialog)) {
|
|
87
|
+
started.dialog.close();
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
static _onPointerCancel() {
|
|
91
|
+
_Dialogs._down = null;
|
|
92
|
+
}
|
|
93
|
+
/** Backdrop hits retarget to the dialog itself, never a child. */
|
|
94
|
+
static _backdropDialog(event) {
|
|
95
|
+
const target = Utils.eventTarget(event);
|
|
96
|
+
if (!(target instanceof HTMLDialogElement) || !target.open) return null;
|
|
97
|
+
return target;
|
|
98
|
+
}
|
|
99
|
+
static _outside(event, dialog) {
|
|
100
|
+
const rect = dialog.getBoundingClientRect();
|
|
101
|
+
return event.clientX < rect.left || event.clientX > rect.right || event.clientY < rect.top || event.clientY > rect.bottom;
|
|
102
|
+
}
|
|
103
|
+
static _isPrimaryPress(event) {
|
|
104
|
+
if (!event.isPrimary) return false;
|
|
105
|
+
return event.pointerType !== "mouse" || event.button === 0;
|
|
106
|
+
}
|
|
107
|
+
// Read the attribute only. The IDL default for an unset closedby is
|
|
108
|
+
// "closerequest" (Escape, no light dismiss) — treating that as an
|
|
109
|
+
// author opt-out made every dialog undismissable from the scrim.
|
|
110
|
+
// Native closedby="any" already light-dismisses with the same "both ends
|
|
111
|
+
// outside" rule, so leave it to the browser where it has one.
|
|
112
|
+
static _lightDismissible(dialog) {
|
|
113
|
+
const value = dialog.getAttribute("closedby");
|
|
114
|
+
if (value === "any") return !("closedBy" in HTMLDialogElement.prototype);
|
|
115
|
+
return value !== "none" && value !== "closerequest";
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
/** The confirm dialog's default button labels. */
|
|
119
|
+
_Dialogs.i18n = { confirm: "OK", cancel: "Cancel" };
|
|
120
|
+
_Dialogs._down = null;
|
|
121
|
+
_Dialogs._confirms = 0;
|
|
122
|
+
var Dialogs = _Dialogs;
|
|
123
|
+
|
|
124
|
+
export {
|
|
125
|
+
Dialogs
|
|
126
|
+
};
|
|
127
|
+
//# sourceMappingURL=chunk-4PIXLDNJ.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/ts/behaviors/dialogs.ts"],
|
|
4
|
+
"sourcesContent": ["import { Utils } from '../core/utils';\n\nexport interface ConfirmOptions {\n /** The question, shown as the supporting text. */\n text: string;\n /** An optional headline above the text. */\n headline?: string;\n /** The confirm button's label. Defaults to `Dialogs.i18n.confirm`. */\n confirm?: string;\n /** The cancel button's label. Defaults to `Dialogs.i18n.cancel`. */\n cancel?: string;\n}\n\n/** An element holding `text`, set as text so markup in it is never parsed. */\nfunction textElement<K extends keyof HTMLElementTagNameMap>(tag: K, text: string): HTMLElementTagNameMap[K] {\n const el = document.createElement(tag);\n el.textContent = text;\n return el;\n}\n\n/** A submit button that closes its dialog with `value` as the return value. */\nfunction actionButton(label: string, value: string): HTMLButtonElement {\n const button = textElement('button', label);\n button.type = 'submit';\n button.value = value;\n return button;\n}\n\n/**\n * Light-dismiss for native `<dialog>` elements.\n *\n * `showModal()` does not close on a backdrop tap. A naive `click` listener\n * on the dialog (where `::backdrop` events retarget) also fires when the\n * user starts a gesture on the dialog and releases on the scrim \u2014 selecting\n * text, missing a button, dragging a thumb. Both ends of the pointer\n * gesture must land outside the dialog's border box.\n *\n * Default is on. Opt out with `closedby=\"none\"` or `closedby=\"closerequest\"`.\n * If the browser already honours `closedby=\"any\"`, we leave that alone.\n *\n * `Dialogs.confirm()` asks a yes-or-no question from script and needs no Init.\n */\nexport class Dialogs {\n /** The confirm dialog's default button labels. */\n static i18n = { confirm: 'OK', cancel: 'Cancel' };\n private static _down: { dialog: HTMLDialogElement; pointerId: number } | null = null;\n private static _confirms = 0;\n\n /**\n * Asks a yes-or-no question in a modal alert dialog. Resolves true on the\n * confirm button and false on Cancel, Escape or a scrim tap, then removes\n * the dialog. The browser returns focus to the element that had it.\n */\n static confirm(options: ConfirmOptions): Promise<boolean> {\n const dialog = Dialogs._confirmDialog(options);\n document.body.append(dialog);\n // A new dialog's returnValue is '', and Escape and close() leave it alone,\n // so only the confirm button sets it.\n dialog.showModal();\n return new Promise((resolve) => {\n // Removing an open dialog fires no close event, so watch for page code\n // that removes it, such as a route change, and answer false.\n const removed = new MutationObserver(() => {\n if (!dialog.isConnected) settle(false);\n });\n const settle = (answer: boolean) => {\n removed.disconnect();\n dialog.remove();\n resolve(answer);\n };\n removed.observe(document, { childList: true, subtree: true });\n dialog.addEventListener('close', () => settle(dialog.returnValue === 'confirm'), { once: true });\n });\n }\n\n private static _confirmDialog({ text, headline, confirm, cancel }: ConfirmOptions): HTMLDialogElement {\n const dialog = document.createElement('dialog');\n dialog.setAttribute('role', 'alertdialog');\n const id = `expressive-confirm-${++Dialogs._confirms}`;\n const body = textElement('p', text);\n body.id = `${id}-text`;\n const cancelButton = actionButton(cancel ?? Dialogs.i18n.cancel, '');\n cancelButton.className = 'text';\n // The less destructive action takes focus when the dialog opens.\n cancelButton.autofocus = true;\n const form = document.createElement('form');\n form.method = 'dialog';\n form.append(cancelButton, actionButton(confirm ?? Dialogs.i18n.confirm, 'confirm'));\n dialog.append(body, form);\n Dialogs._name(dialog, body, id, headline);\n return dialog;\n }\n\n /** Names the dialog by its headline and describes it by the text, or names it by the text alone. */\n private static _name(dialog: HTMLDialogElement, body: HTMLElement, id: string, headline?: string) {\n if (!headline) {\n dialog.setAttribute('aria-labelledby', body.id);\n return;\n }\n const heading = textElement('h2', headline);\n heading.id = `${id}-headline`;\n dialog.prepend(heading);\n dialog.setAttribute('aria-labelledby', heading.id);\n dialog.setAttribute('aria-describedby', body.id);\n }\n\n static Init() {\n Utils.onDocumentReady(() => {\n document.addEventListener('pointerdown', Dialogs._onPointerDown, { passive: true });\n document.addEventListener('pointerup', Dialogs._onPointerUp, { passive: true });\n document.addEventListener('pointercancel', Dialogs._onPointerCancel, { passive: true });\n });\n }\n\n static _onPointerDown(event: PointerEvent) {\n const dialog = Dialogs._isPrimaryPress(event) ? Dialogs._backdropDialog(event) : null;\n Dialogs._down =\n dialog && Dialogs._lightDismissible(dialog) && Dialogs._outside(event, dialog)\n ? { dialog, pointerId: event.pointerId }\n : null;\n }\n\n static _onPointerUp(event: PointerEvent) {\n const started = Dialogs._down;\n Dialogs._down = null;\n if (!started || started.pointerId !== event.pointerId) return;\n if (!started.dialog.isConnected || !started.dialog.open) return;\n if (!Dialogs._lightDismissible(started.dialog)) return;\n if (Dialogs._backdropDialog(event) !== started.dialog) return;\n if (Dialogs._outside(event, started.dialog)) {\n started.dialog.close();\n }\n }\n\n static _onPointerCancel() {\n Dialogs._down = null;\n }\n\n /** Backdrop hits retarget to the dialog itself, never a child. */\n private static _backdropDialog(event: Event): HTMLDialogElement | null {\n const target = Utils.eventTarget(event);\n if (!(target instanceof HTMLDialogElement) || !target.open) return null;\n return target;\n }\n\n private static _outside(event: PointerEvent, dialog: HTMLDialogElement): boolean {\n const rect = dialog.getBoundingClientRect();\n return (\n event.clientX < rect.left ||\n event.clientX > rect.right ||\n event.clientY < rect.top ||\n event.clientY > rect.bottom\n );\n }\n\n private static _isPrimaryPress(event: PointerEvent): boolean {\n if (!event.isPrimary) return false;\n return event.pointerType !== 'mouse' || event.button === 0;\n }\n\n // Read the attribute only. The IDL default for an unset closedby is\n // \"closerequest\" (Escape, no light dismiss) \u2014 treating that as an\n // author opt-out made every dialog undismissable from the scrim.\n // Native closedby=\"any\" already light-dismisses with the same \"both ends\n // outside\" rule, so leave it to the browser where it has one.\n private static _lightDismissible(dialog: HTMLDialogElement): boolean {\n const value = dialog.getAttribute('closedby');\n if (value === 'any') return !('closedBy' in HTMLDialogElement.prototype);\n return value !== 'none' && value !== 'closerequest';\n }\n}\n"],
|
|
5
|
+
"mappings": ";;;;;AAcA,SAAS,YAAmD,KAAQ,MAAwC;AAC1G,QAAM,KAAK,SAAS,cAAc,GAAG;AACrC,KAAG,cAAc;AACjB,SAAO;AACT;AAGA,SAAS,aAAa,OAAe,OAAkC;AACrE,QAAM,SAAS,YAAY,UAAU,KAAK;AAC1C,SAAO,OAAO;AACd,SAAO,QAAQ;AACf,SAAO;AACT;AAgBO,IAAM,WAAN,MAAM,SAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWnB,OAAO,QAAQ,SAA2C;AACxD,UAAM,SAAS,SAAQ,eAAe,OAAO;AAC7C,aAAS,KAAK,OAAO,MAAM;AAG3B,WAAO,UAAU;AACjB,WAAO,IAAI,QAAQ,CAAC,YAAY;AAG9B,YAAM,UAAU,IAAI,iBAAiB,MAAM;AACzC,YAAI,CAAC,OAAO,YAAa,QAAO,KAAK;AAAA,MACvC,CAAC;AACD,YAAM,SAAS,CAAC,WAAoB;AAClC,gBAAQ,WAAW;AACnB,eAAO,OAAO;AACd,gBAAQ,MAAM;AAAA,MAChB;AACA,cAAQ,QAAQ,UAAU,EAAE,WAAW,MAAM,SAAS,KAAK,CAAC;AAC5D,aAAO,iBAAiB,SAAS,MAAM,OAAO,OAAO,gBAAgB,SAAS,GAAG,EAAE,MAAM,KAAK,CAAC;AAAA,IACjG,CAAC;AAAA,EACH;AAAA,EAEA,OAAe,eAAe,EAAE,MAAM,UAAU,SAAS,OAAO,GAAsC;AACpG,UAAM,SAAS,SAAS,cAAc,QAAQ;AAC9C,WAAO,aAAa,QAAQ,aAAa;AACzC,UAAM,KAAK,sBAAsB,EAAE,SAAQ,SAAS;AACpD,UAAM,OAAO,YAAY,KAAK,IAAI;AAClC,SAAK,KAAK,GAAG,EAAE;AACf,UAAM,eAAe,aAAa,UAAU,SAAQ,KAAK,QAAQ,EAAE;AACnE,iBAAa,YAAY;AAEzB,iBAAa,YAAY;AACzB,UAAM,OAAO,SAAS,cAAc,MAAM;AAC1C,SAAK,SAAS;AACd,SAAK,OAAO,cAAc,aAAa,WAAW,SAAQ,KAAK,SAAS,SAAS,CAAC;AAClF,WAAO,OAAO,MAAM,IAAI;AACxB,aAAQ,MAAM,QAAQ,MAAM,IAAI,QAAQ;AACxC,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,OAAe,MAAM,QAA2B,MAAmB,IAAY,UAAmB;AAChG,QAAI,CAAC,UAAU;AACb,aAAO,aAAa,mBAAmB,KAAK,EAAE;AAC9C;AAAA,IACF;AACA,UAAM,UAAU,YAAY,MAAM,QAAQ;AAC1C,YAAQ,KAAK,GAAG,EAAE;AAClB,WAAO,QAAQ,OAAO;AACtB,WAAO,aAAa,mBAAmB,QAAQ,EAAE;AACjD,WAAO,aAAa,oBAAoB,KAAK,EAAE;AAAA,EACjD;AAAA,EAEA,OAAO,OAAO;AACZ,UAAM,gBAAgB,MAAM;AAC1B,eAAS,iBAAiB,eAAe,SAAQ,gBAAgB,EAAE,SAAS,KAAK,CAAC;AAClF,eAAS,iBAAiB,aAAa,SAAQ,cAAc,EAAE,SAAS,KAAK,CAAC;AAC9E,eAAS,iBAAiB,iBAAiB,SAAQ,kBAAkB,EAAE,SAAS,KAAK,CAAC;AAAA,IACxF,CAAC;AAAA,EACH;AAAA,EAEA,OAAO,eAAe,OAAqB;AACzC,UAAM,SAAS,SAAQ,gBAAgB,KAAK,IAAI,SAAQ,gBAAgB,KAAK,IAAI;AACjF,aAAQ,QACN,UAAU,SAAQ,kBAAkB,MAAM,KAAK,SAAQ,SAAS,OAAO,MAAM,IACzE,EAAE,QAAQ,WAAW,MAAM,UAAU,IACrC;AAAA,EACR;AAAA,EAEA,OAAO,aAAa,OAAqB;AACvC,UAAM,UAAU,SAAQ;AACxB,aAAQ,QAAQ;AAChB,QAAI,CAAC,WAAW,QAAQ,cAAc,MAAM,UAAW;AACvD,QAAI,CAAC,QAAQ,OAAO,eAAe,CAAC,QAAQ,OAAO,KAAM;AACzD,QAAI,CAAC,SAAQ,kBAAkB,QAAQ,MAAM,EAAG;AAChD,QAAI,SAAQ,gBAAgB,KAAK,MAAM,QAAQ,OAAQ;AACvD,QAAI,SAAQ,SAAS,OAAO,QAAQ,MAAM,GAAG;AAC3C,cAAQ,OAAO,MAAM;AAAA,IACvB;AAAA,EACF;AAAA,EAEA,OAAO,mBAAmB;AACxB,aAAQ,QAAQ;AAAA,EAClB;AAAA;AAAA,EAGA,OAAe,gBAAgB,OAAwC;AACrE,UAAM,SAAS,MAAM,YAAY,KAAK;AACtC,QAAI,EAAE,kBAAkB,sBAAsB,CAAC,OAAO,KAAM,QAAO;AACnE,WAAO;AAAA,EACT;AAAA,EAEA,OAAe,SAAS,OAAqB,QAAoC;AAC/E,UAAM,OAAO,OAAO,sBAAsB;AAC1C,WACE,MAAM,UAAU,KAAK,QACrB,MAAM,UAAU,KAAK,SACrB,MAAM,UAAU,KAAK,OACrB,MAAM,UAAU,KAAK;AAAA,EAEzB;AAAA,EAEA,OAAe,gBAAgB,OAA8B;AAC3D,QAAI,CAAC,MAAM,UAAW,QAAO;AAC7B,WAAO,MAAM,gBAAgB,WAAW,MAAM,WAAW;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAe,kBAAkB,QAAoC;AACnE,UAAM,QAAQ,OAAO,aAAa,UAAU;AAC5C,QAAI,UAAU,MAAO,QAAO,EAAE,cAAc,kBAAkB;AAC9D,WAAO,UAAU,UAAU,UAAU;AAAA,EACvC;AACF;AAAA;AAhIa,SAEJ,OAAO,EAAE,SAAS,MAAM,QAAQ,SAAS;AAFrC,SAGI,QAAiE;AAHrE,SAII,YAAY;AAJtB,IAAM,UAAN;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|