@expressivecss/expressive 0.16.0 → 0.17.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 +306 -1
- package/README.md +1 -1
- package/dist/css/expressive.css +540 -646
- 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/js/chunks/{chunk-PA7NU5AK.mjs → chunk-26VUH75M.mjs} +6 -3
- package/dist/js/chunks/chunk-26VUH75M.mjs.map +7 -0
- package/dist/js/chunks/{chunk-NBJAUGPP.mjs → chunk-2LFCOGC3.mjs} +12 -23
- package/dist/js/chunks/chunk-2LFCOGC3.mjs.map +7 -0
- package/dist/js/chunks/{chunk-OP43LLIC.mjs → chunk-36GELQGX.mjs} +4 -4
- package/dist/js/chunks/{chunk-OP43LLIC.mjs.map → chunk-36GELQGX.mjs.map} +2 -2
- package/dist/js/chunks/{chunk-EC26RU2D.mjs → chunk-3FKWIRHW.mjs} +6 -2
- package/dist/js/chunks/chunk-3FKWIRHW.mjs.map +7 -0
- package/dist/js/chunks/{chunk-Y6H2X7ZC.mjs → chunk-3KF65KGL.mjs} +3 -3
- package/dist/js/chunks/{chunk-4QUCNFSD.mjs → chunk-3KLZRQZI.mjs} +31 -10
- package/dist/js/chunks/chunk-3KLZRQZI.mjs.map +7 -0
- package/dist/js/chunks/{chunk-75E5EDJF.mjs → chunk-3XORNED5.mjs} +2 -2
- package/dist/js/chunks/{chunk-NNHVANQA.mjs → chunk-4WBGAQN3.mjs} +3 -3
- package/dist/js/chunks/{chunk-ZJNLAGY5.mjs → chunk-5F4URJHL.mjs} +2 -2
- package/dist/js/chunks/{chunk-ZVLOUDIJ.mjs → chunk-67UNY7RH.mjs} +50 -2
- package/dist/js/chunks/chunk-67UNY7RH.mjs.map +7 -0
- package/dist/js/chunks/{chunk-P6DRQ6KS.mjs → chunk-7CXNATJS.mjs} +6 -5
- package/dist/js/chunks/chunk-7CXNATJS.mjs.map +7 -0
- package/dist/js/chunks/{chunk-4TRZ2AER.mjs → chunk-7X44MKEQ.mjs} +15 -14
- package/dist/js/chunks/chunk-7X44MKEQ.mjs.map +7 -0
- package/dist/js/chunks/{chunk-GWZ76SR4.mjs → chunk-7ZAMOMGY.mjs} +12 -7
- package/dist/js/chunks/chunk-7ZAMOMGY.mjs.map +7 -0
- package/dist/js/chunks/{chunk-GVZQH2H5.mjs → chunk-AEG6LOAJ.mjs} +2 -2
- package/dist/js/chunks/{chunk-Y6TLRA3U.mjs → chunk-AQNFCJJ5.mjs} +27 -21
- package/dist/js/chunks/chunk-AQNFCJJ5.mjs.map +7 -0
- package/dist/js/chunks/{chunk-OUCHKSAW.mjs → chunk-B55LWKBM.mjs} +16 -4
- package/dist/js/chunks/chunk-B55LWKBM.mjs.map +7 -0
- package/dist/js/chunks/{chunk-AI73GJKG.mjs → chunk-BB5VXYXT.mjs} +2 -2
- package/dist/js/chunks/{chunk-2RLBDFH4.mjs → chunk-BDATLH3H.mjs} +4 -4
- package/dist/js/chunks/{chunk-2CS6TITK.mjs → chunk-CWMQOT4O.mjs} +23 -10
- package/dist/js/chunks/chunk-CWMQOT4O.mjs.map +7 -0
- package/dist/js/chunks/{chunk-ZKWUWBUB.mjs → chunk-CY2CTOVM.mjs} +2 -2
- package/dist/js/chunks/{chunk-CSYWKEK3.mjs → chunk-DWA5UYLJ.mjs} +58 -27
- package/dist/js/chunks/chunk-DWA5UYLJ.mjs.map +7 -0
- package/dist/js/chunks/{chunk-CMGXGYUC.mjs → chunk-EB2V4OKL.mjs} +14 -9
- package/dist/js/chunks/chunk-EB2V4OKL.mjs.map +7 -0
- package/dist/js/chunks/{chunk-Z4GICXR2.mjs → chunk-EWO662ZC.mjs} +5 -7
- package/dist/js/chunks/chunk-EWO662ZC.mjs.map +7 -0
- package/dist/js/chunks/{chunk-VGY4M57S.mjs → chunk-F7LAKFMX.mjs} +67 -34
- package/dist/js/chunks/chunk-F7LAKFMX.mjs.map +7 -0
- package/dist/js/chunks/{chunk-67ZPPKXS.mjs → chunk-FNIIH2LU.mjs} +3 -3
- package/dist/js/chunks/chunk-GE3YMFS6.mjs +15 -0
- package/dist/js/chunks/chunk-GE3YMFS6.mjs.map +7 -0
- package/dist/js/chunks/{chunk-DZYVU75J.mjs → chunk-GFWYMWYN.mjs} +18 -14
- package/dist/js/chunks/chunk-GFWYMWYN.mjs.map +7 -0
- package/dist/js/chunks/{chunk-3L3QIYLC.mjs → chunk-H5ISU45X.mjs} +8 -6
- package/dist/js/chunks/chunk-H5ISU45X.mjs.map +7 -0
- package/dist/js/chunks/{chunk-QXKWVHBD.mjs → chunk-H6YIKFAQ.mjs} +67 -46
- package/dist/js/chunks/chunk-H6YIKFAQ.mjs.map +7 -0
- package/dist/js/chunks/{chunk-KZPSAXIU.mjs → chunk-HEH7E3KO.mjs} +22 -12
- package/dist/js/chunks/chunk-HEH7E3KO.mjs.map +7 -0
- package/dist/js/chunks/{chunk-T3BNSRP3.mjs → chunk-HQRLBTNM.mjs} +3 -3
- package/dist/js/chunks/{chunk-NAC72P7R.mjs → chunk-I2F7MLUU.mjs} +2 -2
- package/dist/js/chunks/{chunk-ZM3XBHWV.mjs → chunk-IQOTGGHX.mjs} +86 -35
- package/dist/js/chunks/chunk-IQOTGGHX.mjs.map +7 -0
- package/dist/js/chunks/{chunk-QACZ6TUP.mjs → chunk-JH3YWKA6.mjs} +5 -4
- package/dist/js/chunks/chunk-JH3YWKA6.mjs.map +7 -0
- package/dist/js/chunks/chunk-JOLJAYIJ.mjs +7 -0
- package/dist/js/chunks/{chunk-4IKVPCSU.mjs.map → chunk-JOLJAYIJ.mjs.map} +1 -1
- package/dist/js/chunks/{chunk-BPF3I2MN.mjs → chunk-KOTGMCMI.mjs} +9 -2
- package/dist/js/chunks/chunk-KOTGMCMI.mjs.map +7 -0
- package/dist/js/chunks/{chunk-ANKFWNWT.mjs → chunk-LC4O5LFS.mjs} +3 -3
- package/dist/js/chunks/{chunk-4PIXLDNJ.mjs → chunk-LEF33SCP.mjs} +2 -2
- package/dist/js/chunks/{chunk-ILDRRG7T.mjs → chunk-LFORZRPH.mjs} +3 -3
- package/dist/js/chunks/{chunk-Z4OARDZ7.mjs → chunk-LWLNV5EC.mjs} +26 -17
- package/dist/js/chunks/chunk-LWLNV5EC.mjs.map +7 -0
- package/dist/js/chunks/{chunk-WU7XJ4RR.mjs → chunk-LXRHUQAX.mjs} +66 -25
- package/dist/js/chunks/chunk-LXRHUQAX.mjs.map +7 -0
- package/dist/js/chunks/{chunk-VMY55K2X.mjs → chunk-MA2SZZFB.mjs} +11 -7
- package/dist/js/chunks/chunk-MA2SZZFB.mjs.map +7 -0
- package/dist/js/chunks/{chunk-VJVQIXHC.mjs → chunk-MDBZAMIV.mjs} +8 -10
- package/dist/js/chunks/chunk-MDBZAMIV.mjs.map +7 -0
- package/dist/js/chunks/{chunk-4EWGD4V2.mjs → chunk-NODZ5VAD.mjs} +2 -2
- package/dist/js/chunks/{chunk-UGJHCHXG.mjs → chunk-O2WJB6TH.mjs} +79 -55
- package/dist/js/chunks/chunk-O2WJB6TH.mjs.map +7 -0
- package/dist/js/chunks/{chunk-7YZ5CN3V.mjs → chunk-PCABY5BN.mjs} +5 -3
- package/dist/js/chunks/chunk-PCABY5BN.mjs.map +7 -0
- package/dist/js/chunks/{chunk-X7SDA2J5.mjs → chunk-PWKYVMND.mjs} +9 -5
- package/dist/js/chunks/{chunk-X7SDA2J5.mjs.map → chunk-PWKYVMND.mjs.map} +2 -2
- package/dist/js/chunks/{chunk-SPPHF7YZ.mjs → chunk-QHZZT7YO.mjs} +35 -14
- package/dist/js/chunks/chunk-QHZZT7YO.mjs.map +7 -0
- package/dist/js/chunks/{chunk-LDXCC2L3.mjs → chunk-QND56EW2.mjs} +5 -4
- package/dist/js/chunks/chunk-QND56EW2.mjs.map +7 -0
- package/dist/js/chunks/{chunk-NVQ5EHCU.mjs → chunk-QNODAANY.mjs} +4 -4
- package/dist/js/chunks/{chunk-7NLUI3RR.mjs → chunk-QRO5FV3I.mjs} +23 -13
- package/dist/js/chunks/chunk-QRO5FV3I.mjs.map +7 -0
- package/dist/js/chunks/{chunk-FCNF4GRJ.mjs → chunk-R7A7JRC5.mjs} +6 -11
- package/dist/js/chunks/chunk-R7A7JRC5.mjs.map +7 -0
- package/dist/js/chunks/{chunk-S23RJ3XY.mjs → chunk-RKG2CBFE.mjs} +4 -16
- package/dist/js/chunks/chunk-RKG2CBFE.mjs.map +7 -0
- package/dist/js/chunks/{chunk-6FSEUFVW.mjs → chunk-RSNS5OYS.mjs} +6 -6
- package/dist/js/chunks/chunk-RSNS5OYS.mjs.map +7 -0
- package/dist/js/chunks/{chunk-ROH2HDB4.mjs → chunk-RUDYMEJ3.mjs} +2 -2
- package/dist/js/chunks/{chunk-BIGU5RCJ.mjs → chunk-STJR62SU.mjs} +13 -5
- package/dist/js/chunks/chunk-STJR62SU.mjs.map +7 -0
- package/dist/js/chunks/{chunk-752ADW4M.mjs → chunk-SUSD4UTN.mjs} +27 -32
- package/dist/js/chunks/chunk-SUSD4UTN.mjs.map +7 -0
- package/dist/js/chunks/{chunk-B7DQFHA5.mjs → chunk-SYBOA5HC.mjs} +7 -12
- package/dist/js/chunks/chunk-SYBOA5HC.mjs.map +7 -0
- package/dist/js/chunks/{chunk-TFABTUAZ.mjs → chunk-T4MOBP3J.mjs} +2 -2
- package/dist/js/chunks/{chunk-GCWWEZKO.mjs → chunk-TM7HPGTV.mjs} +3 -3
- package/dist/js/chunks/{chunk-5KIHWJI2.mjs → chunk-TMQDZSDC.mjs} +34 -12
- package/dist/js/chunks/chunk-TMQDZSDC.mjs.map +7 -0
- package/dist/js/chunks/{chunk-ZO6ZLHFF.mjs → chunk-TVSX5YA2.mjs} +3 -3
- package/dist/js/chunks/{chunk-INLZWHLY.mjs → chunk-UHO5CV6K.mjs} +2 -2
- package/dist/js/chunks/{chunk-INLZWHLY.mjs.map → chunk-UHO5CV6K.mjs.map} +2 -2
- package/dist/js/chunks/{chunk-7YQBHTK3.mjs → chunk-UKCNELUN.mjs} +6 -8
- package/dist/js/chunks/chunk-UKCNELUN.mjs.map +7 -0
- package/dist/js/chunks/{chunk-VH4BMAZS.mjs → chunk-UKQK5GWR.mjs} +13 -13
- package/dist/js/chunks/chunk-UKQK5GWR.mjs.map +7 -0
- package/dist/js/chunks/{chunk-OYNUDOHR.mjs → chunk-UTSLYQ65.mjs} +7 -6
- package/dist/js/chunks/{chunk-OYNUDOHR.mjs.map → chunk-UTSLYQ65.mjs.map} +2 -2
- package/dist/js/chunks/{chunk-7W7TV6NY.mjs → chunk-VS5OJBOD.mjs} +2 -2
- package/dist/js/chunks/{chunk-7W7TV6NY.mjs.map → chunk-VS5OJBOD.mjs.map} +2 -2
- package/dist/js/chunks/{chunk-KYIEG4U3.mjs → chunk-VZMROW5A.mjs} +43 -14
- package/dist/js/chunks/chunk-VZMROW5A.mjs.map +7 -0
- package/dist/js/chunks/{chunk-VFV75DHF.mjs → chunk-XB6Y7P5W.mjs} +11 -12
- package/dist/js/chunks/chunk-XB6Y7P5W.mjs.map +7 -0
- package/dist/js/chunks/{chunk-CZSQHXEV.mjs → chunk-XDAMOMVD.mjs} +20 -21
- package/dist/js/chunks/chunk-XDAMOMVD.mjs.map +7 -0
- package/dist/js/chunks/{chunk-EVCVFEV3.mjs → chunk-XJPMW5SP.mjs} +21 -35
- package/dist/js/chunks/chunk-XJPMW5SP.mjs.map +7 -0
- package/dist/js/chunks/{chunk-VR3L2WN5.mjs → chunk-YKANQILZ.mjs} +7 -6
- package/dist/js/chunks/chunk-YKANQILZ.mjs.map +7 -0
- package/dist/js/chunks/{chunk-JUKBBN6P.mjs → chunk-YLZOJLDI.mjs} +2 -2
- package/dist/js/chunks/{chunk-U4B3VHFS.mjs → chunk-ZK7YY322.mjs} +28 -21
- package/dist/js/chunks/chunk-ZK7YY322.mjs.map +7 -0
- package/dist/js/expressive.cjs +2739 -2387
- package/dist/js/expressive.cjs.map +4 -4
- package/dist/js/expressive.js +2739 -2387
- package/dist/js/expressive.js.map +4 -4
- package/dist/js/expressive.min.js +7 -7
- package/dist/js/expressive.min.js.map +4 -4
- package/dist/js/expressive.mjs +76 -75
- package/dist/js/expressive.mjs.map +1 -1
- package/dist/js/internal/behaviors/bottomSheets.mjs +3 -3
- package/dist/js/internal/behaviors/copy.mjs +3 -3
- package/dist/js/internal/behaviors/dataTables.mjs +2 -4
- 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 +2 -2
- package/dist/js/internal/behaviors/lists.mjs +2 -2
- package/dist/js/internal/behaviors/paneResize.mjs +2 -2
- package/dist/js/internal/behaviors/sheetDrag.mjs +2 -2
- package/dist/js/internal/behaviors/sideSheets.mjs +3 -3
- package/dist/js/internal/behaviors/sortable.mjs +2 -2
- package/dist/js/internal/behaviors/theme.mjs +2 -2
- package/dist/js/internal/behaviors/tour.mjs +2 -2
- package/dist/js/internal/behaviors/transferList.mjs +2 -2
- package/dist/js/internal/components/appBar.mjs +3 -3
- package/dist/js/internal/components/autocomplete.mjs +5 -4
- package/dist/js/internal/components/backToTop.mjs +3 -3
- package/dist/js/internal/components/barChart.mjs +5 -5
- package/dist/js/internal/components/buttonGroup.mjs +3 -3
- 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 +4 -4
- package/dist/js/internal/components/characterCounter.mjs +3 -3
- package/dist/js/internal/components/chips.mjs +7 -6
- package/dist/js/internal/components/colorPicker.mjs +3 -3
- package/dist/js/internal/components/columnChart.mjs +4 -4
- package/dist/js/internal/components/commandPalette.mjs +3 -3
- package/dist/js/internal/components/confetti.mjs +3 -3
- package/dist/js/internal/components/currencyInput.mjs +3 -3
- package/dist/js/internal/components/datepicker.mjs +8 -7
- package/dist/js/internal/components/expandingCard.mjs +3 -3
- package/dist/js/internal/components/funnelChart.mjs +4 -4
- package/dist/js/internal/components/heatmapChart.mjs +4 -4
- package/dist/js/internal/components/hoverCard.mjs +3 -3
- package/dist/js/internal/components/index.mjs +60 -59
- package/dist/js/internal/components/inputMask.mjs +3 -3
- 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 +23 -7
- package/dist/js/internal/components/loadingOverlay.mjs +3 -3
- 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 +4 -4
- package/dist/js/internal/components/messageScroller.mjs +3 -3
- package/dist/js/internal/components/mixedChart.mjs +5 -5
- package/dist/js/internal/components/navigationRail.mjs +3 -3
- package/dist/js/internal/components/particles.mjs +3 -3
- package/dist/js/internal/components/pieChart.mjs +4 -4
- package/dist/js/internal/components/pullToRefresh.mjs +3 -3
- package/dist/js/internal/components/questionnaire.mjs +3 -3
- package/dist/js/internal/components/radarChart.mjs +4 -4
- package/dist/js/internal/components/radialChart.mjs +4 -4
- package/dist/js/internal/components/registry.mjs +59 -58
- package/dist/js/internal/components/richTextEditor.mjs +3 -3
- package/dist/js/internal/components/sankeyChart.mjs +4 -4
- package/dist/js/internal/components/scatterChart.mjs +4 -4
- package/dist/js/internal/components/scrollspy.mjs +3 -3
- package/dist/js/internal/components/select.mjs +5 -4
- package/dist/js/internal/components/showMore.mjs +3 -3
- 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 +3 -3
- package/dist/js/internal/components/tabs.mjs +3 -3
- package/dist/js/internal/components/timepicker.mjs +5 -5
- package/dist/js/internal/components/tooltip.mjs +3 -3
- package/dist/js/internal/components/treeSelect.mjs +6 -5
- package/dist/js/internal/components/treemapChart.mjs +4 -4
- package/dist/js/internal/core/component.mjs +6 -4
- package/dist/js/internal/core/formControl.mjs +2 -2
- package/dist/js/internal/core/imageURL.mjs +7 -0
- package/dist/js/internal/core/imageURL.mjs.map +7 -0
- package/dist/js/internal/core/utils.mjs +11 -1
- package/dist/js/internal/plugins/dockedDisplayPlugin.mjs +2 -2
- package/dist/js/internal/plugins/modalDisplayPlugin.mjs +3 -3
- package/dist/js/modular.mjs +76 -75
- package/dist/types/behaviors/bottomSheets.d.ts +5 -3
- package/dist/types/behaviors/dataTables.d.ts +2 -6
- package/dist/types/behaviors/forms.d.ts +7 -7
- package/dist/types/behaviors/imageCompare.d.ts +2 -1
- package/dist/types/behaviors/transferList.d.ts +2 -0
- package/dist/types/components/autocomplete.d.ts +14 -3
- package/dist/types/components/carousel.d.ts +7 -0
- package/dist/types/components/chips.d.ts +15 -0
- package/dist/types/components/colorPicker.d.ts +14 -0
- package/dist/types/components/currencyInput.d.ts +5 -4
- package/dist/types/components/datepicker.d.ts +54 -27
- package/dist/types/components/funnelChart.d.ts +1 -4
- package/dist/types/components/heatmapChart.d.ts +3 -0
- package/dist/types/components/hoverCard.d.ts +1 -0
- package/dist/types/components/inputMask.d.ts +0 -2
- package/dist/types/components/lineChart.d.ts +43 -5
- package/dist/types/components/mapView.d.ts +113 -11
- package/dist/types/components/menu.d.ts +14 -0
- package/dist/types/components/particles.d.ts +14 -1
- package/dist/types/components/pieChart.d.ts +1 -2
- package/dist/types/components/richTextEditor.d.ts +40 -9
- package/dist/types/components/select.d.ts +1 -3
- package/dist/types/components/showMore.d.ts +2 -0
- package/dist/types/components/slider.d.ts +0 -1
- package/dist/types/components/snackbar.d.ts +7 -1
- package/dist/types/components/tabs.d.ts +3 -3
- package/dist/types/components/timepicker.d.ts +15 -6
- package/dist/types/components/tooltip.d.ts +1 -1
- package/dist/types/components/treemapChart.d.ts +2 -2
- package/dist/types/core/component.d.ts +9 -3
- package/dist/types/core/imageURL.d.ts +2 -0
- package/dist/types/core/utils.d.ts +39 -1
- package/dist/types/modular.d.ts +1 -1
- package/dist/types/plugins/modalDisplayPlugin.d.ts +8 -1
- package/package.json +8 -6
- package/src/sass/abstracts/_mixins.scss +459 -59
- package/src/sass/abstracts/_variables.scss +25 -0
- package/src/sass/components/_accordion.scss +1 -3
- package/src/sass/components/_aura.scss +1 -0
- package/src/sass/components/_back-to-top.scss +3 -3
- package/src/sass/components/_bar-chart.scss +2 -83
- package/src/sass/components/_bottom-sheet.scss +7 -0
- package/src/sass/components/_breadcrumb.scss +1 -7
- package/src/sass/components/_button-groups.scss +15 -38
- package/src/sass/components/_buttons.scss +24 -74
- package/src/sass/components/_calendar.scss +1 -3
- package/src/sass/components/_carousel.scss +10 -10
- package/src/sass/components/_cascader.scss +3 -14
- package/src/sass/components/_column-chart.scss +1 -19
- package/src/sass/components/_confetti.scss +3 -4
- package/src/sass/components/_data-table.scss +10 -0
- package/src/sass/components/_dialog.scss +10 -18
- package/src/sass/components/_expanding-card.scss +1 -5
- package/src/sass/components/_fab-menu.scss +4 -12
- package/src/sass/components/_funnel-chart.scss +1 -62
- package/src/sass/components/_heatmap-chart.scss +2 -6
- package/src/sass/components/_icon-buttons.scss +1 -4
- package/src/sass/components/_line-chart.scss +2 -70
- package/src/sass/components/_map.scss +4 -0
- package/src/sass/components/_marquee.scss +3 -3
- package/src/sass/components/_mega-menu.scss +8 -17
- package/src/sass/components/_menu.scss +10 -11
- package/src/sass/components/_menubar.scss +1 -13
- package/src/sass/components/_mixed-chart.scss +1 -37
- package/src/sass/components/_navbar.scss +11 -16
- package/src/sass/components/_navigation-bar.scss +2 -5
- package/src/sass/components/_navigation-rail.scss +25 -15
- package/src/sass/components/_page-footer.scss +1 -3
- package/src/sass/components/_pagination.scss +3 -14
- package/src/sass/components/_panes.scss +3 -16
- package/src/sass/components/_particles.scss +3 -4
- package/src/sass/components/_pie-chart.scss +8 -70
- package/src/sass/components/_progress.scss +31 -13
- package/src/sass/components/_radar-chart.scss +2 -32
- package/src/sass/components/_radial-chart.scss +2 -48
- package/src/sass/components/_sankey-chart.scss +5 -28
- package/src/sass/components/_scatter-chart.scss +2 -11
- package/src/sass/components/_search.scss +1 -4
- package/src/sass/components/_side-sheet.scss +9 -14
- package/src/sass/components/_skeleton.scss +24 -15
- package/src/sass/components/_snackbar.scss +11 -13
- package/src/sass/components/_table_of_contents.scss +1 -3
- package/src/sass/components/_tabs.scss +4 -20
- package/src/sass/components/_timepicker.scss +2 -1
- package/src/sass/components/_toolbar.scss +1 -4
- package/src/sass/components/_tooltip.scss +9 -5
- package/src/sass/components/_tree.scss +5 -17
- package/src/sass/components/_treemap-chart.scss +2 -26
- package/src/sass/components/forms/_checkboxes.scss +2 -21
- package/src/sass/components/forms/_drop-zone.scss +1 -4
- package/src/sass/components/forms/_fieldset.scss +1 -4
- package/src/sass/components/forms/_file-input.scss +6 -0
- package/src/sass/components/forms/_input-fields.scss +21 -4
- package/src/sass/components/forms/_radio-buttons.scss +2 -24
- package/src/sass/components/forms/_select.scss +6 -7
- package/src/sass/components/forms/_slider.scss +1 -4
- package/src/sass/components/forms/_switches.scss +14 -21
- package/src/sass/utilities/_helpers.scss +1 -1
- package/src/sass/utilities/_visibility.scss +1 -3
- package/dist/js/chunks/chunk-2CS6TITK.mjs.map +0 -7
- package/dist/js/chunks/chunk-3L3QIYLC.mjs.map +0 -7
- package/dist/js/chunks/chunk-4IKVPCSU.mjs +0 -7
- package/dist/js/chunks/chunk-4QUCNFSD.mjs.map +0 -7
- package/dist/js/chunks/chunk-4TRZ2AER.mjs.map +0 -7
- package/dist/js/chunks/chunk-5KIHWJI2.mjs.map +0 -7
- package/dist/js/chunks/chunk-6FSEUFVW.mjs.map +0 -7
- package/dist/js/chunks/chunk-752ADW4M.mjs.map +0 -7
- package/dist/js/chunks/chunk-7NLUI3RR.mjs.map +0 -7
- package/dist/js/chunks/chunk-7YQBHTK3.mjs.map +0 -7
- package/dist/js/chunks/chunk-7YZ5CN3V.mjs.map +0 -7
- package/dist/js/chunks/chunk-B7DQFHA5.mjs.map +0 -7
- package/dist/js/chunks/chunk-BIGU5RCJ.mjs.map +0 -7
- package/dist/js/chunks/chunk-BPF3I2MN.mjs.map +0 -7
- package/dist/js/chunks/chunk-CMGXGYUC.mjs.map +0 -7
- package/dist/js/chunks/chunk-CSYWKEK3.mjs.map +0 -7
- package/dist/js/chunks/chunk-CZSQHXEV.mjs.map +0 -7
- package/dist/js/chunks/chunk-DZYVU75J.mjs.map +0 -7
- package/dist/js/chunks/chunk-EC26RU2D.mjs.map +0 -7
- package/dist/js/chunks/chunk-EVCVFEV3.mjs.map +0 -7
- package/dist/js/chunks/chunk-FCNF4GRJ.mjs.map +0 -7
- package/dist/js/chunks/chunk-GWZ76SR4.mjs.map +0 -7
- package/dist/js/chunks/chunk-KYIEG4U3.mjs.map +0 -7
- package/dist/js/chunks/chunk-KZPSAXIU.mjs.map +0 -7
- package/dist/js/chunks/chunk-LDXCC2L3.mjs.map +0 -7
- package/dist/js/chunks/chunk-NBJAUGPP.mjs.map +0 -7
- package/dist/js/chunks/chunk-OUCHKSAW.mjs.map +0 -7
- package/dist/js/chunks/chunk-P6DRQ6KS.mjs.map +0 -7
- package/dist/js/chunks/chunk-PA7NU5AK.mjs.map +0 -7
- package/dist/js/chunks/chunk-QACZ6TUP.mjs.map +0 -7
- package/dist/js/chunks/chunk-QXKWVHBD.mjs.map +0 -7
- package/dist/js/chunks/chunk-S23RJ3XY.mjs.map +0 -7
- package/dist/js/chunks/chunk-SPPHF7YZ.mjs.map +0 -7
- package/dist/js/chunks/chunk-U4B3VHFS.mjs.map +0 -7
- package/dist/js/chunks/chunk-UGJHCHXG.mjs.map +0 -7
- package/dist/js/chunks/chunk-VFV75DHF.mjs.map +0 -7
- package/dist/js/chunks/chunk-VGY4M57S.mjs.map +0 -7
- package/dist/js/chunks/chunk-VH4BMAZS.mjs.map +0 -7
- package/dist/js/chunks/chunk-VJVQIXHC.mjs.map +0 -7
- package/dist/js/chunks/chunk-VMY55K2X.mjs.map +0 -7
- package/dist/js/chunks/chunk-VR3L2WN5.mjs.map +0 -7
- package/dist/js/chunks/chunk-WU7XJ4RR.mjs.map +0 -7
- package/dist/js/chunks/chunk-Y6TLRA3U.mjs.map +0 -7
- package/dist/js/chunks/chunk-Z4GICXR2.mjs.map +0 -7
- package/dist/js/chunks/chunk-Z4OARDZ7.mjs.map +0 -7
- package/dist/js/chunks/chunk-ZM3XBHWV.mjs.map +0 -7
- package/dist/js/chunks/chunk-ZVLOUDIJ.mjs.map +0 -7
- /package/dist/js/chunks/{chunk-Y6H2X7ZC.mjs.map → chunk-3KF65KGL.mjs.map} +0 -0
- /package/dist/js/chunks/{chunk-75E5EDJF.mjs.map → chunk-3XORNED5.mjs.map} +0 -0
- /package/dist/js/chunks/{chunk-NNHVANQA.mjs.map → chunk-4WBGAQN3.mjs.map} +0 -0
- /package/dist/js/chunks/{chunk-ZJNLAGY5.mjs.map → chunk-5F4URJHL.mjs.map} +0 -0
- /package/dist/js/chunks/{chunk-GVZQH2H5.mjs.map → chunk-AEG6LOAJ.mjs.map} +0 -0
- /package/dist/js/chunks/{chunk-AI73GJKG.mjs.map → chunk-BB5VXYXT.mjs.map} +0 -0
- /package/dist/js/chunks/{chunk-2RLBDFH4.mjs.map → chunk-BDATLH3H.mjs.map} +0 -0
- /package/dist/js/chunks/{chunk-ZKWUWBUB.mjs.map → chunk-CY2CTOVM.mjs.map} +0 -0
- /package/dist/js/chunks/{chunk-67ZPPKXS.mjs.map → chunk-FNIIH2LU.mjs.map} +0 -0
- /package/dist/js/chunks/{chunk-T3BNSRP3.mjs.map → chunk-HQRLBTNM.mjs.map} +0 -0
- /package/dist/js/chunks/{chunk-NAC72P7R.mjs.map → chunk-I2F7MLUU.mjs.map} +0 -0
- /package/dist/js/chunks/{chunk-ANKFWNWT.mjs.map → chunk-LC4O5LFS.mjs.map} +0 -0
- /package/dist/js/chunks/{chunk-4PIXLDNJ.mjs.map → chunk-LEF33SCP.mjs.map} +0 -0
- /package/dist/js/chunks/{chunk-ILDRRG7T.mjs.map → chunk-LFORZRPH.mjs.map} +0 -0
- /package/dist/js/chunks/{chunk-4EWGD4V2.mjs.map → chunk-NODZ5VAD.mjs.map} +0 -0
- /package/dist/js/chunks/{chunk-NVQ5EHCU.mjs.map → chunk-QNODAANY.mjs.map} +0 -0
- /package/dist/js/chunks/{chunk-ROH2HDB4.mjs.map → chunk-RUDYMEJ3.mjs.map} +0 -0
- /package/dist/js/chunks/{chunk-TFABTUAZ.mjs.map → chunk-T4MOBP3J.mjs.map} +0 -0
- /package/dist/js/chunks/{chunk-GCWWEZKO.mjs.map → chunk-TM7HPGTV.mjs.map} +0 -0
- /package/dist/js/chunks/{chunk-ZO6ZLHFF.mjs.map → chunk-TVSX5YA2.mjs.map} +0 -0
- /package/dist/js/chunks/{chunk-JUKBBN6P.mjs.map → chunk-YLZOJLDI.mjs.map} +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/ts/components/datepicker.ts"],
|
|
4
|
+
"sourcesContent": ["import { Utils, afterFormReset, pickerFooter } from '../core/utils';\nimport { FormSelect } from './select';\nimport { BaseOptions, Component, I18nOptions } from '../core/component';\nimport { DisplayPlugin, ModalDisplayPlugin, createDisplayPlugin, hideModal } from '../plugins/modalDisplayPlugin';\n\nexport interface DateI18nOptions extends I18nOptions {\n previousMonth: string;\n nextMonth: string;\n months: string[];\n monthsShort: string[];\n weekdays: string[];\n weekdaysShort: string[];\n weekdaysAbbrev: string[];\n}\n\n/** A day in each month, and each weekday from Sunday: 1 January 2023 was one. */\nconst MONTHS = Array.from({ length: 12 }, (_, month) => new Date(Date.UTC(2023, month, 1)));\nconst WEEKDAYS = Array.from({ length: 7 }, (_, day) => new Date(Date.UTC(2023, 0, 1 + day)));\n\ntype WeekLocale = Intl.Locale & { getWeekInfo?(): { firstDay: number }; weekInfo?: { firstDay: number } };\n\n/**\n * Month and weekday names in a language, as Intl writes them, and its first\n * day of the week where the browser knows it. The button words are not\n * dates, so they stay as given.\n */\nfunction localeDates(locale: string) {\n const names = (dates: Date[], options: Intl.DateTimeFormatOptions) => {\n // The picker draws Gregorian dates, so the names are Gregorian too: in fa\n // the default calendar is Persian, whose first month is not January.\n const format = new Intl.DateTimeFormat(locale, { ...options, calendar: 'gregory', timeZone: 'UTC' });\n return dates.map((date) => format.format(date));\n };\n const intl = new Intl.Locale(locale) as WeekLocale;\n // Intl counts the days from Monday (1) to Sunday (7); firstDay counts from Sunday (0).\n const week = intl.getWeekInfo?.() ?? intl.weekInfo;\n return {\n week: week ? { firstDay: week.firstDay % 7 } : {},\n i18n: {\n months: names(MONTHS, { month: 'long' }),\n monthsShort: names(MONTHS, { month: 'short' }),\n weekdays: names(WEEKDAYS, { weekday: 'long' }),\n weekdaysShort: names(WEEKDAYS, { weekday: 'short' }),\n weekdaysAbbrev: names(WEEKDAYS, { weekday: 'narrow' })\n }\n };\n}\n\ntype DateParts = { year?: number; month?: number; day?: number };\ntype Reader = [pattern: string, set: (parts: DateParts, text: string) => void];\n\nconst escapeRegExp = (text: string) => text.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\nconst NUMBER = '(\\\\d{1,2})';\n/** A pattern for any of `names`, and what sets `key` to the index of the one found. */\nconst named = (names: string[], key?: keyof DateParts): Reader => [\n `(${names.map(escapeRegExp).join('|')})`,\n (parts, text) => key && (parts[key] = names.findIndex((name) => name.toLowerCase() === text.toLowerCase()))\n];\n\n/** How each format token reads back. Weekday names are read past, not used. */\nconst READERS: Record<string, (i18n: Partial<DateI18nOptions>) => Reader> = {\n d: () => [NUMBER, (parts, text) => (parts.day = +text)],\n dd: () => [NUMBER, (parts, text) => (parts.day = +text)],\n ddd: (i18n) => named(i18n.weekdaysShort),\n dddd: (i18n) => named(i18n.weekdays),\n m: () => [NUMBER, (parts, text) => (parts.month = +text - 1)],\n mm: () => [NUMBER, (parts, text) => (parts.month = +text - 1)],\n mmm: (i18n) => named(i18n.monthsShort, 'month'),\n mmmm: (i18n) => named(i18n.months, 'month'),\n // As Date.parse reads them: 00 to 49 in this century, 50 to 99 in the last.\n yy: () => ['(\\\\d{2})', (parts, text) => (parts.year = +text + (+text < 50 ? 2000 : 1900))],\n yyyy: () => ['(\\\\d{4})', (parts, text) => (parts.year = +text)]\n};\n\nconst pad = (n: number) => String(n).padStart(2, '0');\n/** What each `format` token writes for a date. */\nconst FORMATS: Record<string, (date: Date, i18n: Partial<DateI18nOptions>) => string | number> = {\n d: (date) => date.getDate(),\n dd: (date) => pad(date.getDate()),\n ddd: (date, i18n) => i18n.weekdaysShort[date.getDay()],\n dddd: (date, i18n) => i18n.weekdays[date.getDay()],\n m: (date) => date.getMonth() + 1,\n mm: (date) => pad(date.getMonth() + 1),\n mmm: (date, i18n) => i18n.monthsShort[date.getMonth()],\n mmmm: (date, i18n) => i18n.months[date.getMonth()],\n yy: (date) => String(date.getFullYear()).slice(2),\n yyyy: (date) => date.getFullYear()\n};\n\n/**\n * Reads a date written in a string format with the names it was written\n * in, so a German \"M\u00E4r 15, 2026\" reads back as Date.parse never would.\n * Null for text that does not fit the format, or a day the month lacks.\n */\nexport function readDate(value: string, format: string, i18n: Partial<DateI18nOptions>): Date | null {\n const readers: Reader[] = [];\n const pattern = format.split(/(d{1,4}|m{1,4}|y{4}|yy|!.)/g).map((token) => {\n const reader = READERS[token]?.(i18n);\n if (reader) readers.push(reader);\n return reader ? reader[0] : escapeRegExp(token);\n });\n const match = new RegExp(`^\\\\s*${pattern.join('')}\\\\s*$`, 'iu').exec(value);\n if (!match) return null;\n const parts: DateParts = {};\n readers.forEach(([, set], i) => set(parts, match[i + 1]));\n // setFullYear keeps a year below 100, which the Date constructor moves to the 1900s.\n const date = new Date(2000, 0, 1);\n date.setFullYear(parts.year, parts.month, parts.day);\n const same = [date.getFullYear(), date.getMonth(), date.getDate()].join() === [parts.year, parts.month, parts.day].join();\n return same ? date : null;\n}\n\n/**\n * The options under the page's: with a `lang` on or around the input, its\n * month and weekday names and first day of the week.\n */\nfunction withLocale(el: Element, options: Partial<DatepickerOptions> = {}): Partial<DatepickerOptions> {\n const locale = Utils.locale(el);\n if (!locale) return options;\n const { week, i18n } = localeDates(locale);\n return { ...week, ...options, i18n: { ...i18n, ...options.i18n } };\n}\n\nexport interface DatepickerOptions extends BaseOptions {\n /**\n * The date output format for the input field value\n * or a function taking the date and outputting the\n * formatted date string.\n * @default 'mmm dd, yyyy'\n */\n format: string | ((d: Date) => string);\n /**\n * Used to create date object from current input string.\n * Receives the format string, or an empty string when format is a function.\n * Not called for blank input.\n * @default null\n */\n parse: ((value: string, format: string) => Date) | null;\n /**\n * The initial condition if the datepicker is based on date range.\n * @default false\n */\n isDateRange: boolean;\n /**\n * The selector of the user specified date range end element\n */\n dateRangeEndEl: string | null;\n /**\n * The initial condition if the datepicker is based on multiple date selection.\n * @default false\n */\n isMultipleSelection: boolean;\n /**\n * The initial date to view when first opened.\n * @default null\n */\n defaultDate: Date | null;\n /**\n * The initial end date to view when first opened.\n * @default null\n */\n defaultEndDate: Date | null;\n /**\n * Make the `defaultDate` the initial selected value.\n * @default false\n */\n setDefaultDate: boolean;\n /**\n * Make the `defaultEndDate` the initial selected value.\n * @default false\n */\n setDefaultEndDate: boolean;\n /**\n * Prevent selection of any date on the weekend.\n * @default false\n */\n disableWeekends: boolean;\n /**\n * Custom function to disable certain days.\n * @default null\n */\n disableDayFn: ((day: Date) => boolean) | null;\n /**\n * First day of week (0: Sunday, 1: Monday etc).\n * @default 0, or the first day in the input's `lang` where the browser knows it\n */\n firstDay: number;\n /**\n * The earliest date that can be selected.\n * @default null\n */\n minDate: Date | null;\n /**\n * The latest date that can be selected.\n * @default null\n */\n maxDate: Date | null;\n /**\n * Number of years either side, or array of upper/lower range.\n * @default 10\n */\n yearRange: number | number[];\n /**\n * Sort year range in reverse order.\n * @default false\n */\n yearRangeReverse: boolean;\n /**\n * Changes Datepicker to RTL.\n * @default false\n */\n isRTL: boolean;\n /**\n * Show month after year in Datepicker title.\n * @default false\n */\n showMonthAfterYear: boolean;\n /**\n * Render days of the calendar grid that fall in the next\n * or previous month.\n * @default false\n */\n showDaysInNextAndPreviousMonths: boolean;\n /**\n * Specify if the docked datepicker is in open state by default\n */\n openByDefault: boolean;\n /**\n * Specify a DOM element OR selector for a DOM element to render\n * the calendar in, by default it will be placed before the input.\n * @default null\n */\n container: HTMLElement | string | null;\n /**\n * Show the clear button in the datepicker.\n * @default false\n */\n showClearBtn: boolean;\n /**\n * Autosubmit calendar day select to input field\n * @default true\n */\n autoSubmit: boolean;\n /**\n * Internationalization options. With a `lang` on or around the input, the\n * month and weekday names default to that language's, as Intl writes them.\n */\n i18n: Partial<DateI18nOptions>;\n /**\n * An array of string returned by `Date.toDateString()`,\n * indicating there are events in the specified days.\n * @default []\n */\n events: string[];\n /**\n * Callback function when date is selected,\n * first parameter is the newly selected date.\n * @default null\n */\n onSelect: ((selectedDate: Date) => void) | null;\n /**\n * Callback function when Datepicker HTML is refreshed.\n * @default null\n */\n onDraw: (() => void) | null;\n /**\n * Callback function for interaction with input field.\n * @default null\n */\n onInputInteraction: (() => void) | null;\n /**\n * Callback function for interaction with confirm button.\n * @default null\n */\n onConfirm: (() => void) | null;\n /**\n * Callback function for interaction with close button.\n * @default null\n */\n onCancel: (() => void) | null;\n\n /** Field used for internal calculations DO NOT CHANGE IT */\n minYear?: number;\n /** Field used for internal calculations DO NOT CHANGE IT */\n maxYear?: number;\n /** Field used for internal calculations DO NOT CHANGE IT */\n minMonth?: number;\n /** Field used for internal calculations DO NOT CHANGE IT */\n maxMonth?: number;\n /**\n * Display plugin: 'docked' for a popover under the input, or 'modal' for a\n * dialog with Cancel and Ok. A modal picker is always open inside its\n * dialog and writes the input only on Ok, so it sets `openByDefault` and\n * clears `autoSubmit`.\n */\n displayPlugin: string;\n /**\n * Configurable display plugin options\n */\n displayPluginOptions: object;\n}\n\ntype Calendar = { month: number; year: number };\n\n/** What `renderDay()` draws one cell from. */\ntype DayConfig = {\n day: number;\n month: number;\n year: number;\n hasEvent: boolean;\n isSelected: boolean;\n isToday: boolean;\n isDisabled: boolean;\n isEmpty: boolean;\n showDaysInNextAndPreviousMonths: boolean;\n isDateRangeStart: boolean;\n isDateRangeEnd: boolean;\n isDateRange: boolean;\n};\n\nconst _defaults: DatepickerOptions = {\n // the default output format for the input field value\n format: 'mmm dd, yyyy',\n // Used to create date object from current input string\n parse: null,\n // The initial condition if the datepicker is based on date range\n isDateRange: false,\n // The selector of the user specified date range end element\n dateRangeEndEl: null,\n // The initial condition if the datepicker is based on multiple date selection\n isMultipleSelection: false,\n // The initial date to view when first opened\n defaultDate: null,\n // The initial end date to view when first opened\n defaultEndDate: null,\n // Make the `defaultDate` the initial selected value\n setDefaultDate: false,\n // Make the `defaultEndDate` the initial selected value\n setDefaultEndDate: false,\n disableWeekends: false,\n disableDayFn: null,\n // First day of week (0: Sunday, 1: Monday etc)\n firstDay: 0,\n // The earliest date that can be selected\n minDate: null,\n // Thelatest date that can be selected\n maxDate: null,\n // Number of years either side, or array of upper/lower range\n yearRange: 10,\n // used internally (don't config outside)\n minYear: 0,\n maxYear: 9999,\n minMonth: undefined,\n maxMonth: undefined,\n isRTL: false,\n yearRangeReverse: false,\n // Render the month after year in the calendar title\n showMonthAfterYear: false,\n // Render days of the calendar grid that fall in the next or previous month\n showDaysInNextAndPreviousMonths: false,\n // Specify if docked picker is in open state by default\n openByDefault: false,\n // Specify a DOM element to render the calendar in\n container: null,\n // Show clear button\n showClearBtn: false,\n // Autosubmit\n autoSubmit: true,\n // internationalization\n i18n: {\n cancel: 'Cancel',\n clear: 'Clear',\n done: 'Ok',\n previousMonth: 'Previous month',\n nextMonth: 'Next month',\n months: [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December'\n ],\n monthsShort: [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec'\n ],\n weekdays: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n weekdaysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n weekdaysAbbrev: ['S', 'M', 'T', 'W', 'T', 'F', 'S']\n },\n // events array\n events: [],\n // callback function\n onSelect: null,\n onDraw: null,\n onInputInteraction: null,\n displayPlugin: null,\n displayPluginOptions: null,\n onConfirm: null,\n onCancel: null,\n};\n\nexport class Datepicker extends Component<DatepickerOptions> {\n declare el: HTMLInputElement;\n id: string;\n multiple: boolean = false;\n calendarEl: HTMLElement;\n containerEl: HTMLElement;\n dateTextEl: HTMLElement;\n endDateEl: HTMLInputElement;\n dateEls: HTMLInputElement[];\n /** The selected Date. */\n date: Date;\n endDate: null | Date;\n dates: Date[];\n calendars: [Calendar];\n private displayPlugin: DisplayPlugin;\n /** What setInputValue last wrote, so reading it back does not depend on the parser. */\n private _writtenInputs = new WeakMap<HTMLInputElement, { value: string; date: Date | null }>();\n private _resetDates = new WeakMap<HTMLInputElement, { value: string; date: Date | null }>();\n // Counts selections, so a callback that selects again silences the stale event.\n private _selection = 0;\n private footer: HTMLElement;\n /** Nesting depth of {@link _batchDraws}; > 0 means draws are being collected. */\n private _drawDepth = 0;\n /** Whether a draw was requested while batching. */\n private _drawDirty = false;\n /** Shape of the currently rendered controls; see {@link _controlsCacheKey}. */\n private _controlsKey: string = null;\n /** id linking the controls element to the table's aria-labelledby. */\n private _randId: string = null;\n private _focusedDate: Date = null;\n static _template: string;\n\n constructor(el: HTMLInputElement, options: Partial<DatepickerOptions>) {\n options = withLocale(el, options);\n super(el, options);\n\n // A modal calendar is always open in its dialog and writes on Ok.\n if (this.options.displayPlugin === 'modal') Object.assign(this.options, { openByDefault: true, autoSubmit: false });\n\n this._setDateBounds();\n\n this.id = Utils.guid();\n if (this.options.isMultipleSelection) {\n this.multiple = true;\n this.dates = [];\n this.dateEls = [el];\n }\n\n this._setupVariables();\n this._insertHTMLIntoDOM();\n this._setupEventHandlers();\n\n const fromValue = !this.options.defaultDate;\n if (fromValue) {\n this.options.defaultDate = this._parseInput(this.el.value);\n }\n\n const defDate = this.options.defaultDate;\n if (Datepicker._isDate(defDate)) {\n if (this.options.setDefaultDate) {\n this.setDate(defDate, true);\n this.setInputValue(this.el, defDate);\n } else if (fromValue && this._isSelectableDay(defDate)) {\n // The input already holds this date, so it is the selection, as it\n // is once the input is clicked. Its text is left as written.\n this.setDate(defDate, true);\n } else {\n this.gotoDate(this._withinBounds(defDate));\n }\n } else {\n this.gotoDate(this._withinBounds(new Date()));\n }\n if (this.options.isDateRange) {\n this.multiple = true;\n const defEndDate = this.options.defaultEndDate;\n if (Datepicker._isDate(defEndDate)) {\n if (this.options.setDefaultEndDate) {\n this.setDate(defEndDate, true, true);\n this.setInputValue(this.endDateEl, defEndDate);\n }\n }\n }\n this.displayPlugin = createDisplayPlugin(this.options.displayPlugin, this.el, this.containerEl, this.options.displayPluginOptions, this._cancel);\n if (this.endDateEl) this.displayPlugin?.triggers.push(this.endDateEl);\n // A form reset brings back these texts long after the cache of written\n // values has moved on, so keep the dates they stood for.\n for (const input of [this.el, this.endDateEl]) this._rememberResetDate(input);\n }\n\n // Only a default the picker wrote needs this: any other default text parses\n // at reset exactly as it did here.\n private _rememberResetDate(input: HTMLInputElement | undefined) {\n const written = input && this._writtenInputs.get(input);\n if (written && written.value === input.defaultValue) this._resetDates.set(input, written);\n }\n\n static get defaults() {\n return _defaults;\n }\n\n /**\n * Escape a value for interpolation into the calendar markup.\n *\n * `draw()` assembles the calendar as an HTML string, so every value that is\n * not a number this class computed itself has to go through here. In\n * practice that means the i18n strings: month and weekday names are the one\n * part of a datepicker that routinely comes from a translation file, and a\n * translation file is as trustworthy as whatever wrote it.\n */\n static _escape(value: unknown): string {\n return String(value ?? '')\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n }\n\n static _isDate(obj: unknown): obj is Date {\n return /Date/.test(Object.prototype.toString.call(obj)) && !isNaN((obj as Date).getTime());\n }\n\n /**\n * A value read without a custom parser: in the picker's own string format\n * with its names, or else as an ISO date or by the browser.\n */\n private _readDefault(value: string, el: HTMLInputElement): Date {\n const { format, i18n } = this.options;\n // A native date input's value is ISO, whatever the display format.\n const read = typeof format === 'string' && el.type !== 'date' ? readDate(value, format, i18n) : null;\n return read ?? Datepicker._parseDate(value);\n }\n\n private static _parseDate(value: string): Date {\n value = value.trim();\n if (!/^\\d{4}-\\d{2}-\\d{2}$/.test(value)) return new Date(Date.parse(value));\n // An ISO time without an offset is local. Reject days that roll into the next month.\n const date = new Date(value + 'T00:00:00');\n return date.getDate() === Number(value.slice(-2)) ? date : new Date(NaN);\n }\n\n private _parseInput(value: string, el: HTMLInputElement = this.el as HTMLInputElement): Date {\n if (!value.trim() || !this.options.parse) return this._readDefault(value, el);\n return this.options.parse(\n value,\n typeof this.options.format === 'string' ? this.options.format : ''\n );\n }\n\n /**\n * @deprecated as this function has no effect without any return statement or global parameter setter.\n */\n static _setToStartOfDay(date: unknown): void {\n if (Datepicker._isDate(date)) date.setHours(0, 0, 0, 0);\n }\n\n static _compareDates(a: Date, b: Date): boolean {\n // weak date comparison (use setToStartOfDay(date) to ensure correct result)\n return a.getTime() === b.getTime();\n }\n\n static key = 'Expressive_Datepicker';\n\n destroy() {\n this._events.abort();\n this.dateEls?.slice(1).forEach(input => this._removeDateInput(input));\n if (!this.options.dateRangeEndEl && this.endDateEl) this._removeDateInput(this.endDateEl);\n this.displayPlugin?.destroy();\n this.containerEl.remove();\n this.destroySelects();\n this._removeDateOverlay();\n super.destroy();\n }\n\n // CSS paints data-date over a native date input's own text.\n private _removeDateOverlay() {\n this.el.classList.remove('datepicker-date-input');\n for (const input of [this.el, this.endDateEl]) if (input?.type === 'date') input.removeAttribute('data-date');\n }\n\n destroySelects() {\n this._formSelect('.orig-select-year')?.destroy();\n this._formSelect('.orig-select-month')?.destroy();\n }\n\n _insertHTMLIntoDOM() {\n // HTML5 input date field support\n if (this.el.type == 'date') {\n this.el.classList.add('datepicker-date-input');\n }\n\n // `!x === null` is always false, so this never ran; _renderDateInputFormat\n // now no-ops on its own when there is no hint element to fill in.\n this._renderDateInputFormat(this.el);\n\n if (this.options.isDateRange) {\n this.containerEl.classList.add('daterange');\n if (!this.options.dateRangeEndEl) {\n this.endDateEl = this.createDateInput();\n this.endDateEl.classList.add('datepicker-end-date');\n } else {\n // querySelector returns null, never undefined: the old check compared\n // against undefined, so a miss skipped the warning and fell through to\n // dereferencing null. Looked up in the input's own tree first, so an\n // end input in the same shadow root is found.\n this.endDateEl = Utils.querySelector(this.el, this.options.dateRangeEndEl) as HTMLInputElement | null;\n if (!this.endDateEl) {\n console.warn('Specified date range end input element in dateRangeEndEl not found');\n } else {\n this._renderDateInputFormat(this.endDateEl);\n }\n }\n }\n\n pickerFooter(this.footer, this.options, 'datepicker-clear', this._handleClearClick, this._confirm, this._cancel);\n\n // A selector that matches nothing falls back to the default placement,\n // as Timepicker does, instead of throwing on null.\n const optEl = this.options.container;\n const container = typeof optEl === 'string' ? Utils.querySelector(this.el, optEl) : optEl;\n if (container) {\n this.options.container = container;\n container.append(this.containerEl);\n } else {\n const appendTo = !this.endDateEl ? this.el : this.endDateEl;\n if (!this.options.openByDefault) (this.containerEl as HTMLElement).setAttribute('style', 'display: none; visibility: hidden;');\n appendTo.parentElement.after(this.containerEl);\n }\n }\n\n /**\n * Renders the date input format into the optional `.datepicker-format` hint\n * next to the input, if the consumer provided one.\n */\n _renderDateInputFormat(el: HTMLInputElement) {\n const formatEl = el.parentElement?.querySelector('.datepicker-format');\n if (!formatEl) return;\n // textContent, and nothing at all for a function format: this used to be\n // `innerHTML = format.toString()`, which rendered a format string as\n // markup and dumped a function's entire source into the page.\n formatEl.textContent =\n typeof this.options.format === 'function' ? '' : String(this.options.format);\n }\n\n /**\n * Gets a string representation of the given date.\n */\n toString(date: Date = this.date, format: string | ((d: Date) => string) = null): string {\n format = format || this.options.format;\n if (typeof format === 'function') return format(date);\n if (!Datepicker._isDate(date)) return '';\n // String Format\n return this.formatDate(date, format);\n }\n\n /**\n * Returns the formatted date.\n */\n formatDate(date: Date, format: string) {\n const formatArray = format.split(/(d{1,4}|m{1,4}|y{4}|yy|!.)/g);\n return formatArray\n .map((label) => (FORMATS[label] ? FORMATS[label](date, this.options.i18n) : label))\n .join('');\n }\n\n /**\n * Sets date from input field.\n */\n setDateFromInput(el: HTMLInputElement) {\n // The native input's overlay follows edits, including cleared or partial values.\n this._syncDataDate(el);\n if ((this.options.isDateRange || !this.options.isMultipleSelection) && !el.value.trim()) {\n this.setSingleDate(null, el === this.endDateEl);\n this.draw();\n return;\n }\n const parsedDate = this._dateInInput(el);\n if (!Datepicker._isDate(parsedDate)) return;\n const date = new Date(parsedDate.getTime());\n Datepicker._setToStartOfDay(date);\n const isEndDate = el === this.endDateEl;\n // A day the calendar would not let anyone pick, or a range end before its\n // start, puts the input back to the date already chosen. The typed text\n // is what the form submits, so it cannot be left behind a clamped date.\n const outOfOrder = this.options.isDateRange && (isEndDate\n ? this.date && date < this.date\n : this.endDate && date > this.endDate);\n if (outOfOrder || this._isDisabledDay(date)) {\n this.setInputValue(el, this._selectedDateFor(el));\n return;\n }\n // Re-reading the date the input already shows, on a click, Enter or a\n // reset, is no selection, so onSelect does not fire for it.\n const unchanged = this._shows(el, date);\n this._selectTypedMultiDate(el, date);\n this.setDate(date, unchanged, isEndDate, true);\n }\n\n /** Whether `date` is the date already selected for `el`. */\n private _shows(el: HTMLInputElement, date: Date) {\n return this._selectedDateFor(el)?.getTime() === date.getTime();\n }\n\n // setDate does not toggle a typed date into a multiple selection, so it goes\n // in here, in place of the date its input showed. Re-reading an input on\n // click leaves the selection as it was.\n private _selectTypedMultiDate(el: HTMLInputElement, date: Date) {\n if (!this.options.isMultipleSelection) return;\n const shown = this._selectedDateFor(el);\n this.dates = this.dates.filter((day) => day !== shown && day.getTime() !== date.getTime());\n this.setMultiDate(date);\n }\n\n /**\n * Set a date on the datepicker.\n * @param date Date to set on the datepicker.\n * @param preventOnSelect Undocumented as of 5 March 2018.\n * @param isEndDate\n * @param fromUserInput\n */\n setDate(\n date: Date = null,\n preventOnSelect: boolean = false,\n isEndDate: boolean = false,\n fromUserInput: boolean = false\n ) {\n const selectedDate = this.validateDate(date);\n if (!selectedDate) {\n return;\n }\n Datepicker._setToStartOfDay(selectedDate);\n // Silent updates count too: they replace whatever an outer call reports.\n const selection = ++this._selection;\n if (!this.options.isMultipleSelection) this.setSingleDate(selectedDate, isEndDate);\n else if (!fromUserInput) this.setMultiDate(selectedDate);\n this.gotoDate(selectedDate);\n if (preventOnSelect) return;\n this._notify('select', this.options.onSelect, { args: [selectedDate], detail: { date: selectedDate }, current: () => selection === this._selection });\n }\n\n validateDate(date: Date) {\n if (!date) {\n this._renderDateDisplay(date);\n return this.draw();\n }\n if (typeof date === 'string') {\n date = Datepicker._parseDate(date);\n }\n if (!Datepicker._isDate(date)) {\n return;\n }\n return this._withinBounds(date);\n }\n\n /** A copy of `date`, moved to minDate or maxDate when it falls outside them. */\n private _withinBounds(date: Date): Date {\n const min = this.options.minDate,\n max = this.options.maxDate;\n if (Datepicker._isDate(min) && date < min) {\n date = min;\n } else if (Datepicker._isDate(max) && date > max) {\n date = max;\n }\n return new Date(date.getTime());\n }\n\n /**\n * The date an input holds. Without a custom parser, Date.parse reads\n * \"05/10/2026\" from a dd/mm/yyyy format as 10 May, so reuse the date behind\n * a value the picker wrote, or behind the value the input resets to.\n */\n _dateInInput(el: HTMLInputElement): Date | null {\n const known = !this.options.parse && [this._writtenInputs.get(el), this._resetDates.get(el)]\n .find((entry) => entry?.value === el.value);\n return known ? known.date : this._parseInput(el.value, el);\n }\n\n /** The selected date an input shows: its place in `dates` for a multiple selection. */\n _selectedDateFor(el: HTMLInputElement): Date | null {\n if (this.options.isMultipleSelection) return this.dates[this.dateEls.indexOf(el)] ?? null;\n return el === this.endDateEl ? this.endDate : this.date;\n }\n\n /** `_isDisabledDay` for a date that may carry a time of day. */\n _isSelectableDay(date: Date): boolean {\n const day = new Date(date.getTime());\n Datepicker._setToStartOfDay(day);\n return !this._isDisabledDay(day);\n }\n\n /** Whether the calendar shows `day` as disabled: outside the bounds, or refused by an option. */\n _isDisabledDay(day: Date): boolean {\n return this._isOutOfBounds(day) || this._isRefusedDay(day);\n }\n\n _isOutOfBounds(day: Date): boolean {\n const { minDate, maxDate } = this.options;\n return (minDate && day < minDate) || (maxDate && day > maxDate);\n }\n\n _isRefusedDay(day: Date): boolean {\n const { disableWeekends, disableDayFn } = this.options;\n return (disableWeekends && [0, 6].includes(day.getDay())) || !!disableDayFn?.(day);\n }\n\n /**\n * Set a single date on the datepicker.\n * @param date Date to set on the datepicker.\n * @param isEndDate\n */\n setSingleDate(date: Date, isEndDate: boolean) {\n if (!isEndDate) {\n this.date = date;\n } else {\n this.endDate = date;\n }\n }\n\n /**\n * Set a multi date on the datepicker.\n * @param date Date to set on the datepicker.\n */\n setMultiDate(date: Date) {\n const index = this.dates.findIndex((item) => item.getTime() === date.getTime());\n if (index === -1) {\n this.dates.push(date);\n } else {\n this.dates.splice(index, 1);\n }\n this.dates.sort((a: Date, b: Date) => a.getTime() - b.getTime());\n }\n\n /**\n * Sets the data-date attribute on the date input field\n */\n setDataDate(el: HTMLInputElement, date: Date | null): void {\n el.setAttribute('data-date', Datepicker._isDate(date) ? this.toString(date) : '');\n }\n\n /**\n * Sets dates on the input values.\n */\n setInputValues() {\n if (!this.options?.isMultipleSelection) {\n this.setInputValue(this.el, this.date);\n if (this.options?.isDateRange) {\n this.setInputValue(this.endDateEl, this.endDate);\n }\n return;\n }\n this.setMultipleSelectionInputValues();\n }\n\n setMultipleSelectionInputValues() {\n const count = Math.max(1, this.dates.length);\n for (const input of this.dateEls.splice(count)) this._removeDateInput(input);\n while (this.dateEls.length < count) this.dateEls.push(this.createDateInput());\n this.dateEls.forEach((input, index) => this.setInputValue(input, this.dates[index] ?? null));\n }\n\n /**\n * Sets given date as the input value on the given element.\n */\n setInputValue(el: HTMLInputElement | null, date: Date | null): void {\n if (!el) return;\n if (el.type == 'date') this.setDataDate(el, date);\n if (!Datepicker._isDate(date)) {\n el.value = '';\n } else if (el.type == 'date') {\n el.value = this.formatDate(date, 'yyyy-mm-dd');\n } else {\n el.value = this.toString(date);\n }\n this._writtenInputs.set(el, { value: el.value, date: Datepicker._isDate(date) ? new Date(date.getTime()) : null });\n el.dispatchEvent(\n new CustomEvent('change', {\n bubbles: true,\n cancelable: true,\n composed: true,\n detail: { firedBy: this }\n })\n );\n }\n\n /**\n * Renders the date in the modal head section.\n */\n _renderDateDisplay(date: Date, endDate: Date = null) {\n const displayDate = Datepicker._isDate(date) ? date : new Date();\n // @todo should we include an option for date formatting by component options?\n // textContent: formatDate splices i18n month and weekday names in.\n if (!this.options.isDateRange) {\n this.dateTextEl.textContent = this.formatDate(displayDate, 'ddd, mmm d');\n } else {\n const displayEndDate = Datepicker._isDate(endDate) ? endDate : new Date();\n this.dateTextEl.textContent = `${this.formatDate(displayDate, 'mmm d')} - ${this.formatDate(displayEndDate, 'mmm d')}`;\n }\n }\n\n /**\n * Change date view to a specific date on the datepicker.\n * @param date Date to show on the datepicker.\n */\n gotoDate(date: Date) {\n let newCalendar = true;\n if (!Datepicker._isDate(date)) {\n return;\n }\n if (this.calendars) {\n const firstVisibleDate = new Date(this.calendars[0].year, this.calendars[0].month, 1),\n lastVisibleDate = new Date(\n this.calendars[this.calendars.length - 1].year,\n this.calendars[this.calendars.length - 1].month,\n 1\n ),\n visibleDate = date.getTime();\n // get the end of the month\n lastVisibleDate.setMonth(lastVisibleDate.getMonth() + 1);\n lastVisibleDate.setDate(lastVisibleDate.getDate() - 1);\n newCalendar =\n visibleDate < firstVisibleDate.getTime() || lastVisibleDate.getTime() < visibleDate;\n }\n if (newCalendar) {\n this.calendars = [\n {\n month: date.getMonth(),\n year: date.getFullYear()\n }\n ];\n }\n this.adjustCalendars();\n }\n\n adjustCalendars() {\n this.calendars[0] = this.adjustCalendar(this.calendars[0]);\n this.draw();\n }\n\n adjustCalendar(calendar: Calendar): Calendar {\n if (calendar.month < 0) {\n calendar.year -= Math.ceil(Math.abs(calendar.month) / 12);\n calendar.month += 12;\n }\n if (calendar.month > 11) {\n calendar.year += Math.floor(Math.abs(calendar.month) / 12);\n calendar.month -= 12;\n }\n return calendar;\n }\n\n nextMonth() {\n this.calendars[0].month++;\n this.adjustCalendars();\n }\n\n prevMonth() {\n this.calendars[0].month--;\n this.adjustCalendars();\n }\n\n render(year: number, month: number, randId: string): string {\n const now = new Date(),\n // Day 0 of the next month is the last of this one.\n days = new Date(year, month + 1, 0).getDate(),\n data = [];\n let before = new Date(year, month, 1).getDay(),\n row = [];\n Datepicker._setToStartOfDay(now);\n if (this.options.firstDay > 0) {\n before -= this.options.firstDay;\n if (before < 0) {\n before += 7;\n }\n }\n const previousMonth = month === 0 ? 11 : month - 1,\n nextMonth = month === 11 ? 0 : month + 1,\n yearOfPreviousMonth = month === 0 ? year - 1 : year,\n yearOfNextMonth = month === 11 ? year + 1 : year,\n daysInPreviousMonth = new Date(year, month, 0).getDate();\n const cells = Math.ceil((days + before) / 7) * 7;\n for (let i = 0, r = 0; i < cells; i++) {\n const day = new Date(year, month, 1 + (i - before)),\n isToday = Datepicker._compareDates(day, now),\n hasEvent = this.options.events.indexOf(day.toDateString()) !== -1,\n isEmpty = i < before || i >= days + before,\n isDisabled = this._isDisabledDay(day),\n isDateRangeStart = this.options.isDateRange && this.date && this.endDate && Datepicker._compareDates(this.date, day),\n isDateRangeEnd = this.options.isDateRange && this.endDate && Datepicker._compareDates(this.endDate, day),\n isDateRange =\n this.options.isDateRange &&\n [this.date, this.endDate].every(Datepicker._isDate) &&\n day > this.date &&\n day < this.endDate;\n let dayNumber = 1 + (i - before),\n monthNumber = month,\n yearNumber = year;\n\n let isSelected = false;\n if (Datepicker._isDate(this.date)) {\n isSelected = Datepicker._compareDates(day, this.date);\n }\n\n if (!isSelected && Datepicker._isDate(this.endDate)) {\n isSelected = Datepicker._compareDates(day, this.endDate);\n }\n\n if (\n this.options.isMultipleSelection &&\n this.dates?.some((item) => item.getTime() === day.getTime())\n ) {\n isSelected = true;\n }\n\n if (isEmpty) {\n if (i < before) {\n dayNumber = daysInPreviousMonth + dayNumber;\n monthNumber = previousMonth;\n yearNumber = yearOfPreviousMonth;\n } else {\n dayNumber = dayNumber - days;\n monthNumber = nextMonth;\n yearNumber = yearOfNextMonth;\n }\n }\n\n const dayConfig = {\n day: dayNumber,\n month: monthNumber,\n year: yearNumber,\n hasEvent: hasEvent,\n isSelected: isSelected,\n isToday: isToday,\n isDisabled: isDisabled,\n isEmpty: isEmpty,\n showDaysInNextAndPreviousMonths: this.options.showDaysInNextAndPreviousMonths,\n isDateRangeStart: isDateRangeStart,\n isDateRangeEnd: isDateRangeEnd,\n isDateRange: isDateRange\n };\n\n row.push(this.renderDay(dayConfig));\n\n if (++r === 7) {\n data.push(this.renderRow(row, this.options.isRTL, false));\n row = [];\n r = 0;\n }\n }\n return this.renderTable(this.options, data, randId);\n }\n\n renderDay(opts: DayConfig): string {\n const classMap = {\n isDisabled: 'is-disabled',\n isToday: 'is-today',\n isSelected: 'is-selected',\n hasEvent: 'has-event',\n isDateRangeStart: 'is-daterange-start',\n isDateRangeEnd: 'is-daterange-end',\n isDateRange: 'is-daterange'\n },\n ariaSelected = opts.isSelected === true || opts.isDateRange === true,\n arr = ['datepicker-day'];\n\n if (opts.isEmpty) {\n if (opts.showDaysInNextAndPreviousMonths) {\n arr.push('is-outside-current-month');\n arr.push('is-selection-disabled');\n } else {\n return '<td class=\"is-empty\"></td>';\n }\n }\n\n for (const [property, className] of Object.entries(classMap)) {\n if (opts[property as keyof DayConfig]) {\n arr.push(className);\n }\n }\n\n const day = Datepicker._escape(opts.day);\n const month = Datepicker._escape(opts.month);\n const year = Datepicker._escape(opts.year);\n return (\n `<td data-day=\"${day}\" class=\"${arr.join(' ')}\" aria-selected=\"${ariaSelected}\">` +\n `<button class=\"datepicker-day-button\" type=\"button\" data-year=\"${year}\" data-month=\"${month}\" data-day=\"${day}\">${day}</button>` +\n '</td>'\n );\n }\n\n /** Assemble calendar cells; reject unsupported elements and attributes. */\n renderRow(days: string[], isRTL: boolean, isRowSelected: boolean): string {\n const row =\n '<tr class=\"datepicker-row' +\n (isRowSelected ? ' is-selected' : '') +\n '\">' +\n Datepicker._calendarMarkup((isRTL ? days.reverse() : days).join(''), 'tr') +\n '</tr>';\n return row;\n }\n\n /** Assemble calendar rows; reject unsupported elements and attributes. */\n renderTable(opts: DatepickerOptions, data: string[], randId: string): string {\n return (\n '<div class=\"datepicker-table-wrapper\"><table cellpadding=\"0\" cellspacing=\"0\" class=\"datepicker-table\" role=\"grid\" aria-labelledby=\"' +\n Datepicker._escape(randId) +\n '\">' +\n this.renderHead(opts) +\n this.renderBody(data) +\n '</table></div>'\n );\n }\n\n renderHead(opts: DatepickerOptions): string {\n const arr = [];\n let i;\n for (i = 0; i < 7; i++) {\n const full = Datepicker._escape(this.renderDayName(opts, i));\n const abbrev = Datepicker._escape(this.renderDayName(opts, i, true));\n arr.push(`<th scope=\"col\"><abbr title=\"${full}\">${abbrev}</abbr></th>`);\n }\n return '<thead><tr>' + (opts.isRTL ? arr.reverse() : arr).join('') + '</tr></thead>';\n }\n\n /** Wrap calendar rows after validating and encoding their contents. */\n renderBody(rows: string[]): string {\n const html = rows.join('');\n // Always sanitize row markup before insertion to avoid propagating unsafe library input.\n const safeHtml = Datepicker._calendarMarkup(html, 'tbody');\n return '<tbody>' + safeHtml + '</tbody>';\n }\n\n private static _calendarMarkup(html: string, parent: string): string {\n const template = document.createElement('template');\n // Template contents stay inert. Only rebuilt, encoded markup leaves here.\n template.innerHTML = html;\n const childOf: Record<string, 'tr' | 'td' | 'button'> = { tbody: 'tr', tr: 'td', td: 'button' };\n const attributes = {\n tr: ['class'],\n td: ['class', 'data-day', 'aria-selected'],\n button: ['class', 'type', 'data-year', 'data-month', 'data-day', 'aria-label', 'disabled', 'tabindex']\n };\n const render = (node: Node, container: string): string => {\n if (node.nodeType === Node.TEXT_NODE) {\n if (container === 'tbody' || container === 'tr') {\n if (node.textContent.trim()) throw new TypeError('Unsupported calendar row content');\n }\n return Datepicker._escape(node.textContent);\n }\n if (!(node instanceof HTMLElement)) throw new TypeError('Unsupported calendar row content');\n const tag = childOf[container];\n if (!tag || node.localName !== tag) {\n throw new TypeError('Unsupported calendar row element');\n }\n if ([...node.attributes].some(attr => !attributes[tag].includes(attr.name))) {\n throw new TypeError('Unsupported calendar row attribute');\n }\n if (tag === 'button' && node.getAttribute('type') !== 'button') {\n throw new TypeError('Calendar day buttons require type=\"button\"');\n }\n const attrs = attributes[tag].filter(name => node.hasAttribute(name))\n .map(name => ` ${name}=\"${Datepicker._escape(node.getAttribute(name))}\"`).join('');\n return `<${tag}${attrs}>${[...node.childNodes].map(child => render(child, tag)).join('')}</${tag}>`;\n };\n return [...template.content.childNodes].map(node => render(node, parent)).join('');\n }\n\n /**\n * Whether each month arrow is usable at this position in the allowed range.\n *\n * Depends on the month, which is deliberately *not* part of the controls\n * cache key - so the reuse path has to recompute and reapply it.\n */\n /**\n * Removes the time from minDate and maxDate, on copies: the caller's Date\n * objects are theirs. Each also sets the month and year bounds, which the\n * arrows, the month and year lists and PageUp/PageDown read. They used to\n * stay at their defaults, so the calendar paged into months where every\n * day was disabled.\n */\n private _setDateBounds() {\n const { minDate, maxDate } = this.options;\n if (minDate) {\n this.options.minDate = new Date(new Date(minDate.getTime()).setHours(0, 0, 0, 0));\n Object.assign(this.options, { minYear: minDate.getFullYear(), minMonth: minDate.getMonth() });\n }\n if (maxDate) {\n this.options.maxDate = new Date(new Date(maxDate.getTime()).setHours(0, 0, 0, 0));\n Object.assign(this.options, { maxYear: maxDate.getFullYear(), maxMonth: maxDate.getMonth() });\n }\n }\n\n private _arrowState(year: number, month: number) {\n const opts = this.options;\n const isMinYear = year === opts.minYear;\n const isMaxYear = year === opts.maxYear;\n return {\n prev: !(isMinYear && (month === 0 || opts.minMonth >= month)),\n next: !(isMaxYear && (month === 11 || opts.maxMonth <= month))\n };\n }\n\n /**\n * Identifies the *shape* of the controls - everything that changes which\n * options the month and year selects contain, as opposed to which one is\n * picked. While this is stable the two FormSelects can be left alone.\n *\n * `year` is in the key because a numeric `yearRange` centres the year list\n * on the displayed year, so paging across a year boundary does change it.\n */\n private _controlsCacheKey(year: number): string {\n const o = this.options;\n return [\n year,\n o.minYear,\n o.maxYear,\n o.minMonth,\n o.maxMonth,\n Array.isArray(o.yearRange) ? o.yearRange.join('-') : o.yearRange,\n o.yearRangeReverse,\n o.showMonthAfterYear\n ].join('|');\n }\n\n renderTitle(instance: Datepicker, c: number, year: number, month: number, refYear: number, randId: string): string {\n const opts = this.options,\n isMinYear = year === opts.minYear,\n isMaxYear = year === opts.maxYear;\n let i,\n j,\n arr = [],\n html =\n '<div id=\"' +\n Datepicker._escape(randId) +\n '\" class=\"datepicker-controls\" role=\"heading\" aria-live=\"assertive\">';\n\n // Decided up front. These used to be computed *below* the month-prev\n // button that reads `prev`, so the previous arrow was never disabled at\n // the start of the allowed range.\n const { prev, next } = this._arrowState(year, month);\n\n for (i = 0; i < 12; i++) {\n arr.push(\n '<option value=\"' +\n (year === refYear ? i - c : 12 + i - c) +\n '\"' +\n (i === month ? ' selected=\"selected\"' : '') +\n ((isMinYear && i < opts.minMonth) || (isMaxYear && i > opts.maxMonth)\n ? 'disabled=\"disabled\"'\n : '') +\n '>' +\n Datepicker._escape(opts.i18n.months[i]) +\n '</option>'\n );\n }\n\n const monthHtml =\n '<select class=\"datepicker-select orig-select-month\" tabindex=\"-1\">' +\n arr.join('') +\n '</select>';\n\n if (Array.isArray(opts.yearRange)) {\n i = opts.yearRange[0];\n j = opts.yearRange[1] + 1;\n } else {\n i = year - opts.yearRange;\n j = 1 + year + opts.yearRange;\n }\n\n for (arr = []; i < j && i <= opts.maxYear; i++) {\n if (i >= opts.minYear) {\n arr.push(`<option value=\"${i}\" ${i === year ? 'selected=\"selected\"' : ''}>${i}</option>`);\n }\n }\n if (opts.yearRangeReverse) arr.reverse();\n\n const yearHtml = `<select class=\"datepicker-select orig-select-year\" tabindex=\"-1\">${arr.join('')}</select>`;\n\n const leftArrow =\n '<svg height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M15.41 16.09l-4.58-4.59 4.58-4.59L14 5.5l-6 6 6 6z\"/><path d=\"M0-.5h24v24H0z\" fill=\"none\"/></svg>';\n html += `<button class=\"month-prev${prev ? '' : ' is-disabled'}\" type=\"button\" aria-label=\"${Datepicker._escape(opts.i18n.previousMonth)}\">${leftArrow}</button>`;\n\n html += '<div class=\"selects-container\">';\n if (opts.showMonthAfterYear) {\n html += yearHtml + monthHtml;\n } else {\n html += monthHtml + yearHtml;\n }\n html += '</div>';\n\n const rightArrow =\n '<svg height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M8.59 16.34l4.58-4.59-4.58-4.59L10 5.75l6 6-6 6z\"/><path d=\"M0-.25h24v24H0z\" fill=\"none\"/></svg>';\n html += `<button class=\"month-next${next ? '' : ' is-disabled'}\" type=\"button\" aria-label=\"${Datepicker._escape(opts.i18n.nextMonth)}\">${rightArrow}</button>`;\n\n return (html += '</div>');\n }\n\n /**\n * Run `fn`, collapsing every draw it triggers into a single one at the end.\n *\n * A single input click reaches draw() three times - once through\n * setDateFromInput -> setDate -> gotoDate, once directly, and once through\n * the trailing gotoDate - and each one destroys two FormSelect instances,\n * reparses the calendar and builds two fresh FormSelects. The three calls\n * cannot simply be deleted: the direct draw() is what covers an empty input\n * (setDate bails before drawing when the value does not parse), and the\n * trailing gotoDate re-centres on a date validateDate may have clamped to\n * minDate/maxDate. So they are collected instead of removed.\n *\n * Deliberately synchronous: the constructor and callers read calendarEl\n * immediately after init(), which a microtask-deferred draw would leave\n * empty.\n */\n private _batchDraws(fn: () => void) {\n this._drawDepth++;\n try {\n fn();\n } finally {\n this._drawDepth--;\n if (this._drawDepth === 0 && this._drawDirty) {\n this._drawDirty = false;\n this.draw();\n }\n }\n }\n\n // refresh HTML\n draw() {\n // Inside a batch, note that a draw is due and let the batch do it once.\n if (this._drawDepth > 0) {\n this._drawDirty = true;\n return;\n }\n const active = (this.calendarEl.getRootNode() as Document | ShadowRoot).activeElement;\n const restoreDayFocus = active?.matches('.datepicker-day-button') && this.calendarEl.contains(active);\n const restoreArrow = this.calendarEl.contains(active) && active?.matches('.month-prev, .month-next')\n ? active.classList.contains('month-prev') ? '.month-prev' : '.month-next' : null;\n const restoreSelect = this._selectFocusRestorer(active);\n const year = this.calendars[0].year;\n const month = this.calendars[0].month;\n\n this._renderDateDisplay(this.date, this.endDate);\n\n // Only the day grid changes when you page within a year. Rebuilding the\n // controls as well meant tearing down and reconstructing two FormSelects -\n // each with its own <ul> of 12 or 21+ options, an input, a caret and a\n // Menu - on every single draw.\n const key = this._controlsCacheKey(year);\n if (key === this._controlsKey && this.calendarEl.querySelector('.datepicker-controls')) {\n this._reuseControls(year, month);\n } else {\n this._controlsKey = key;\n // Held across table re-renders: the table's aria-labelledby points at\n // the controls element's id.\n this._randId = 'datepicker-title-' + Utils.guid();\n this._rebuildControls(year, month);\n }\n this._renderCalendarTable(year, month);\n this._syncCalendarFocus(!!restoreDayFocus);\n if (restoreArrow) this.calendarEl.querySelector<HTMLButtonElement>(restoreArrow)?.focus();\n restoreSelect();\n\n if (typeof this.options.onDraw === 'function') {\n this.options.onDraw.call(this);\n }\n }\n\n private _formSelect(selector: string): FormSelect | undefined {\n const el = this.calendarEl.querySelector<HTMLElement>(selector);\n return el ? FormSelect.getInstance(el) : undefined;\n }\n\n /**\n * Picking a year rebuilds both selects under the focus, which is on the old\n * input or in its menu. The returned callback, run after the redraw, gives\n * focus to the matching new input if the old one went with the rebuild.\n */\n private _selectFocusRestorer(active: Element | null) {\n const holdsFocus = (select?: FormSelect) =>\n !!select && (select.input === active || !!select.menuEl?.contains(active));\n const selector = ['.orig-select-year', '.orig-select-month'].find((s) => holdsFocus(this._formSelect(s)));\n return () => {\n if (selector && !active.isConnected) this._formSelect(selector)?.input.focus();\n };\n }\n\n /** Tear down the two FormSelects and render the controls from scratch. */\n private _rebuildControls(year: number, month: number) {\n this.destroySelects();\n this.calendarEl.innerHTML = this.renderTitle(this, 0, year, month, year, this._randId);\n\n const yearSelect = this.calendarEl.querySelector('.orig-select-year') as HTMLSelectElement;\n const monthSelect = this.calendarEl.querySelector('.orig-select-month') as HTMLSelectElement;\n // @todo fix accessibility\n FormSelect.init(yearSelect, {\n classes: 'select-year',\n menuOptions: { container: Utils.portalRoot(this.el), constrainWidth: false }\n });\n FormSelect.init(monthSelect, {\n classes: 'select-month',\n menuOptions: { container: Utils.portalRoot(this.el), constrainWidth: false }\n });\n\n // Add change handlers for select\n yearSelect.addEventListener('change', this._handleYearChange);\n monthSelect.addEventListener('change', this._handleMonthChange);\n }\n\n /**\n * Keep the existing controls and bring them up to date: the selected month,\n * and the arrow states, which depend on the month rather than on the key.\n */\n private _reuseControls(year: number, month: number) {\n const monthSelect = this.calendarEl.querySelector('.orig-select-month') as HTMLSelectElement;\n if (monthSelect && monthSelect.value !== month.toString()) {\n monthSelect.value = month.toString();\n // Assigning .value fires no change event, so the wrapper needs telling.\n FormSelect.getInstance(monthSelect)?.refresh();\n }\n\n const { prev, next } = this._arrowState(year, month);\n this.calendarEl.querySelector('.month-prev')?.classList.toggle('is-disabled', !prev);\n this.calendarEl.querySelector('.month-next')?.classList.toggle('is-disabled', !next);\n }\n\n /** Replace just the day grid, leaving the controls in place. */\n private _renderCalendarTable(year: number, month: number) {\n const html = this.render(year, month, this._randId);\n const existing = this.calendarEl.querySelector('.datepicker-table-wrapper');\n if (existing) existing.outerHTML = html;\n else this.calendarEl.insertAdjacentHTML('beforeend', html);\n }\n\n _setupEventHandlers() {\n this._addInputEventHandlers(this.el);\n if (this.endDateEl) this._addInputEventHandlers(this.endDateEl);\n const { signal } = this._events;\n afterFormReset(this.el, this._readBack, signal);\n this.calendarEl.addEventListener('click', this._handleCalendarClick, { signal });\n this.calendarEl.addEventListener('keydown', this._handleCalendarKeydown, { signal });\n this.calendarEl.addEventListener('focusin', this._handleCalendarFocus, { signal });\n }\n\n _setupVariables() {\n const template = document.createElement('template');\n template.innerHTML = Datepicker._template.trim();\n\n this.containerEl = <HTMLElement>template.content.firstChild;\n\n this.calendarEl = this.containerEl.querySelector('.datepicker-calendar');\n this.dateTextEl = this.containerEl.querySelector('.date-text');\n this.footer = this.containerEl.querySelector('.datepicker-footer');\n }\n\n /** A date input's listeners. An input the picker removes keeps them, but no event reaches it then. */\n private _addInputEventHandlers(input: HTMLInputElement) {\n const { signal } = this._events;\n input.addEventListener('click', this._handleInputClick, { signal });\n input.addEventListener('keydown', this._handleInputKeydown, { signal });\n input.addEventListener('change', this._handleInputChange, { signal });\n }\n\n private _removeDateInput(input: HTMLInputElement) {\n const focused = (input.getRootNode() as Document | ShadowRoot).activeElement === input;\n input.remove();\n if (focused && document.activeElement === document.body) this.el.focus();\n }\n\n // Bound to the date inputs only, so the target is one of them.\n _handleInputClick = (e: Event) => {\n const input = e.target as HTMLInputElement;\n // Block the native date picker only when the calendar is shown to replace it.\n if (input.type == 'date' && (this.options.openByDefault || this.options.container)) e.preventDefault();\n this._batchDraws(() => {\n this.setDateFromInput(input);\n this.draw();\n this.gotoDate(input === this.el ? this.date : this.endDate);\n });\n this._showDisplay();\n if (this.options.onInputInteraction) this.options.onInputInteraction.call(this);\n };\n\n /** Shows a docked or modal calendar. A modal takes focus from the input, so the selected day gets it. */\n private _showDisplay() {\n this.displayPlugin?.show();\n if (this.displayPlugin instanceof ModalDisplayPlugin) this._syncCalendarFocus(true);\n }\n\n _handleInputKeydown = Utils.ignoringComposition((e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n this._batchDraws(() => {\n this.setDateFromInput(e.target as HTMLInputElement);\n this._focusedDate = e.target === this.endDateEl ? this.endDate : this.date;\n this.draw();\n });\n if (this.displayPlugin) this.displayPlugin.show();\n this._syncCalendarFocus(true);\n if (this.options.onInputInteraction) this.options.onInputInteraction.call(this);\n }\n });\n\n private _dayDate(button: HTMLElement) {\n const date = new Date(0);\n date.setFullYear(Number(button.dataset.year), Number(button.dataset.month), Number(button.dataset.day));\n Datepicker._setToStartOfDay(date);\n return date;\n }\n\n private _syncCalendarFocus(restore = false) {\n const buttons = [...this.calendarEl.querySelectorAll<HTMLButtonElement>('.datepicker-day-button')];\n const current = buttons.filter(button => !button.parentElement.classList.contains('is-selection-disabled'));\n // Today at midnight: day buttons compare by exact time.\n const preferred = this._focusedDate || this.date || new Date(new Date().setHours(0, 0, 0, 0));\n const target = current.find(button => Datepicker._compareDates(this._dayDate(button), preferred))\n || current.find(button => button.parentElement.classList.contains('is-selected'))\n || current.find(button => !button.parentElement.classList.contains('is-disabled')) || current[0];\n for (const button of buttons) {\n button.tabIndex = button === target ? 0 : -1;\n button.setAttribute('aria-disabled', String(button.parentElement.matches('.is-disabled, .is-selection-disabled')));\n }\n if (target) {\n this._focusedDate = this._dayDate(target);\n if (restore) target.focus();\n }\n }\n\n private _handleCalendarFocus = (event: FocusEvent) => {\n const button = event.target as HTMLElement;\n if (!button.matches('.datepicker-day-button')) return;\n this._focusedDate = this._dayDate(button);\n this._syncCalendarFocus();\n };\n\n private _handleCalendarKeydown = (event: KeyboardEvent) => {\n const button = event.target as HTMLElement;\n if (!button.matches('.datepicker-day-button') || !Utils.plainKey(event)) return;\n const date = this._dayDate(button);\n const weekday = (date.getDay() - this.options.firstDay + 7) % 7;\n const offsets: Record<string, number> = { ArrowLeft: this.options.isRTL ? 1 : -1, ArrowRight: this.options.isRTL ? -1 : 1,\n ArrowUp: -7, ArrowDown: 7, Home: -weekday, End: 6 - weekday };\n if (Object.hasOwn(offsets, event.key)) date.setDate(date.getDate() + offsets[event.key]);\n else if (event.key === 'PageUp' || event.key === 'PageDown') {\n const day = date.getDate();\n date.setDate(1);\n date.setMonth(date.getMonth() + (event.key === 'PageUp' ? -1 : 1) * (event.shiftKey ? 12 : 1));\n const last = new Date(date.getTime());\n last.setMonth(last.getMonth() + 1, 0);\n date.setDate(Math.min(day, last.getDate()));\n } else return;\n event.preventDefault();\n const { minDate, maxDate, minYear, maxYear, minMonth, maxMonth } = this.options;\n if (minDate && date < minDate) date.setTime(minDate.getTime());\n if (maxDate && date > maxDate) date.setTime(maxDate.getTime());\n if (date.getFullYear() < minYear || date.getFullYear() > maxYear\n || (date.getFullYear() === minYear && date.getMonth() < (minMonth ?? 0))\n || (date.getFullYear() === maxYear && date.getMonth() > (maxMonth ?? 11))) return;\n this._focusedDate = date;\n // Moving within the shown month only moves focus; redrawing the grid on\n // every held arrow key rebuilt 42 cells for nothing.\n const { year, month } = this.calendars[0];\n if (date.getFullYear() === year && date.getMonth() === month) this._syncCalendarFocus(true);\n else this.gotoDate(date);\n };\n\n _handleCalendarClick = (e: Event) => {\n const target = e.target as HTMLElement;\n // A click on a disabled arrow's icon targets the svg, not the button.\n if (target.closest('.is-disabled')) return;\n\n this._batchDraws(() => {\n if (\n target.classList.contains('datepicker-day-button') &&\n !target.classList.contains('is-empty') &&\n !target.parentElement.classList.contains('is-disabled') &&\n !target.parentElement.classList.contains('is-selection-disabled')\n ) {\n const selectedDate = new Date(\n Number(target.getAttribute('data-year')),\n Number(target.getAttribute('data-month')),\n Number(target.getAttribute('data-day'))\n );\n\n if (!this.multiple || this.options.isMultipleSelection) {\n this.setDate(selectedDate);\n }\n\n // Selecting a range end draws a second time on top of setDate's.\n if (this.options.isDateRange) {\n this._handleDateRangeCalendarClick(selectedDate);\n }\n\n if (this.options.autoSubmit) this._finishSelection();\n } else if (target.closest('.month-prev')) {\n this.prevMonth();\n } else if (target.closest('.month-next')) {\n this.nextMonth();\n }\n });\n };\n\n _handleDateRangeCalendarClick = (date: Date) => {\n if (this.endDate == null || !Datepicker._compareDates(date, this.endDate)) {\n // A day before the start moves the start.\n this.setDate(date, false, Datepicker._isDate(this.date) && date >= this.date);\n return;\n }\n\n this._clearDates();\n this.draw();\n };\n\n // Like a day click: a picker with Ok and Cancel, which a modal always is,\n // writes the cleared input on Ok, so Cancel keeps the value.\n _handleClearClick = () => {\n this._clearDates();\n if (this.options.autoSubmit) this._finishSelection();\n };\n\n _clearDates = () => {\n this.date = null;\n this.endDate = null;\n this.dates?.splice(0);\n this.draw();\n };\n\n _handleMonthChange = (e: Event) => {\n this.gotoMonth((e.target as HTMLSelectElement).value);\n };\n\n _handleYearChange = (e: Event) => {\n this.gotoYear((e.target as HTMLSelectElement).value);\n };\n\n // change view to a specific month (zero-index, e.g. 0: January)\n gotoMonth(month: string | number): void {\n if (!isNaN(Number(month))) {\n this.calendars[0].month = parseInt(String(month), 10);\n this.adjustCalendars();\n }\n }\n\n // change view to a specific full year (e.g. \"2012\")\n gotoYear(year: string | number): void {\n if (!isNaN(Number(year))) {\n this.calendars[0].year = parseInt(String(year), 10);\n this.adjustCalendars();\n }\n }\n\n // A reset restores the inputs' values after its event, without a change\n // event. Drop the inputs added for extra dates and read the selection back\n // from what the reset left.\n private _readBack = () => {\n if (this.options.isMultipleSelection) this._readBackMultiple();\n else this._readBackSingle();\n this.draw();\n };\n\n private _readBackMultiple() {\n for (const input of this.dateEls.splice(1)) this._removeDateInput(input);\n this.dates = [];\n this._syncDataDate(this.el);\n const date = this._dateInInput(this.el);\n if (Datepicker._isDate(date) && this._isSelectableDay(date)) this.setDate(date, true);\n }\n\n /** A native date input's overlay text follows its value, including an empty one. */\n private _syncDataDate(el: HTMLInputElement) {\n if (el.type === 'date') this.setDataDate(el, Datepicker._parseDate(el.value));\n }\n\n private _readBackSingle() {\n this.setSingleDate(null, false);\n this.setSingleDate(null, true);\n for (const input of [this.el, this.endDateEl]) if (input) this.setDateFromInput(input);\n }\n\n _handleInputChange = (e: Event) => {\n // Prevent change event from being fired when triggered by the plugin\n if (e instanceof CustomEvent && e.detail?.firedBy === this) return;\n this.setDateFromInput(e.target as HTMLInputElement);\n };\n\n renderDayName(opts: DatepickerOptions, day: number, abbr: boolean = false): string {\n day += opts.firstDay;\n while (day >= 7) {\n day -= 7;\n }\n return abbr ? opts.i18n.weekdaysAbbrev[day] : opts.i18n.weekdays[day];\n }\n\n createDateInput() {\n const dateInput = <HTMLInputElement>this.el.cloneNode(true);\n // cloneNode copies the id too, and two elements sharing one id break every\n // lookup that goes through it.\n dateInput.removeAttribute('id');\n dateInput.classList.add('no-autoinit');\n this._addInputEventHandlers(dateInput);\n this.el.parentElement.appendChild(dateInput);\n return dateInput;\n }\n\n _finishSelection = () => {\n this.setInputValues();\n };\n\n _confirm = () => {\n this._finishSelection();\n hideModal(this.displayPlugin);\n this._notify('confirm', this.options.onConfirm, { args: [] });\n }\n\n _cancel = () => {\n hideModal(this.displayPlugin);\n this._notify('cancel', this.options.onCancel, { args: [] });\n };\n\n static {\n Datepicker._template = `\n <div class=\"datepicker-container\">\n <div class=\"datepicker-date-display\">\n <span class=\"date-text\"></span>\n </div>\n <div class=\"datepicker-calendar-container\">\n <div class=\"datepicker-calendar\"></div>\n <div class=\"datepicker-footer\"></div>\n </div>\n </div>`;\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Utils,
|
|
3
3
|
controllerFor,
|
|
4
|
+
deepActiveElement,
|
|
4
5
|
restoreAttribute
|
|
5
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-67UNY7RH.mjs";
|
|
6
7
|
|
|
7
8
|
// src/ts/components/snackbar.ts
|
|
8
9
|
var _defaults = {
|
|
@@ -59,8 +60,21 @@ var _Snackbar = class _Snackbar {
|
|
|
59
60
|
for (const snackbar of _Snackbar._snackbars.filter((shown) => !shown.el.isConnected)) {
|
|
60
61
|
snackbar._dismissed = true;
|
|
61
62
|
snackbar._remove(false);
|
|
63
|
+
snackbar.options.completeCallback?.();
|
|
62
64
|
}
|
|
63
65
|
}
|
|
66
|
+
/**
|
|
67
|
+
* Ends a snackbar a replacement cuts short, at once, with the events and
|
|
68
|
+
* callback a dismissal has: they used to be skipped, so code waiting on
|
|
69
|
+
* completeCallback never heard. One already dismissing has fired `close`.
|
|
70
|
+
*/
|
|
71
|
+
_evict() {
|
|
72
|
+
if (!this._dismissed) Utils.emit(this.el, "close");
|
|
73
|
+
this._dismissed = true;
|
|
74
|
+
Utils.emit(this.el, "closed");
|
|
75
|
+
this._restoreFocus(true);
|
|
76
|
+
this.options.completeCallback?.();
|
|
77
|
+
}
|
|
64
78
|
/** Throws now, rather than when the snackbar shows, if `snackbarId` names nothing. */
|
|
65
79
|
_requireBody() {
|
|
66
80
|
if (!this._hasBody()) throw new Error("Snackbar body not found");
|
|
@@ -71,7 +85,7 @@ var _Snackbar = class _Snackbar {
|
|
|
71
85
|
}
|
|
72
86
|
_build() {
|
|
73
87
|
this.el = this._createSnackbar();
|
|
74
|
-
this.el
|
|
88
|
+
Reflect.set(this.el, "Expressive_Snackbar", this);
|
|
75
89
|
}
|
|
76
90
|
/**
|
|
77
91
|
* Takes the snackbar on screen down at once, without starting the queue.
|
|
@@ -81,10 +95,7 @@ var _Snackbar = class _Snackbar {
|
|
|
81
95
|
_Snackbar._replacing = true;
|
|
82
96
|
try {
|
|
83
97
|
while (_Snackbar._snackbars.length) {
|
|
84
|
-
for (const snackbar of _Snackbar._snackbars.splice(0))
|
|
85
|
-
snackbar._dismissed = true;
|
|
86
|
-
snackbar._restoreFocus(true);
|
|
87
|
-
}
|
|
98
|
+
for (const snackbar of _Snackbar._snackbars.splice(0)) snackbar._evict();
|
|
88
99
|
}
|
|
89
100
|
} finally {
|
|
90
101
|
_Snackbar._replacing = false;
|
|
@@ -103,8 +114,7 @@ var _Snackbar = class _Snackbar {
|
|
|
103
114
|
}
|
|
104
115
|
/** The focused element, looking inside open shadow roots. */
|
|
105
116
|
static _focused() {
|
|
106
|
-
|
|
107
|
-
while (focused?.shadowRoot?.activeElement) focused = focused.shadowRoot.activeElement;
|
|
117
|
+
const focused = deepActiveElement(document);
|
|
108
118
|
return focused instanceof HTMLElement ? focused : null;
|
|
109
119
|
}
|
|
110
120
|
/**
|
|
@@ -122,7 +132,7 @@ var _Snackbar = class _Snackbar {
|
|
|
122
132
|
return _defaults;
|
|
123
133
|
}
|
|
124
134
|
static getInstance(el) {
|
|
125
|
-
return el
|
|
135
|
+
return Reflect.get(el, "Expressive_Snackbar");
|
|
126
136
|
}
|
|
127
137
|
static _createContainer(root = document.body) {
|
|
128
138
|
const container = document.createElement("div");
|
|
@@ -147,7 +157,7 @@ var _Snackbar = class _Snackbar {
|
|
|
147
157
|
const target = e.target;
|
|
148
158
|
if (target && !target.closest("button, a") && target.closest(".snackbar")) {
|
|
149
159
|
const snackbarElem = target.closest(".snackbar");
|
|
150
|
-
const snackbar = snackbarElem
|
|
160
|
+
const snackbar = _Snackbar.getInstance(snackbarElem);
|
|
151
161
|
if (!snackbar) return;
|
|
152
162
|
snackbar.panning = true;
|
|
153
163
|
snackbar._pauseTimer();
|
|
@@ -340,7 +350,7 @@ var _Snackbar = class _Snackbar {
|
|
|
340
350
|
_Snackbar._draggedSnackbar = null;
|
|
341
351
|
_Snackbar._dragPointerId = null;
|
|
342
352
|
}
|
|
343
|
-
this.el
|
|
353
|
+
Reflect.set(this.el, "Expressive_Snackbar", void 0);
|
|
344
354
|
if (this._restoreElement) this._restoreElement();
|
|
345
355
|
else this.el.remove();
|
|
346
356
|
const index = _Snackbar._snackbars.indexOf(this);
|
|
@@ -463,4 +473,4 @@ var Snackbar = _Snackbar;
|
|
|
463
473
|
export {
|
|
464
474
|
Snackbar
|
|
465
475
|
};
|
|
466
|
-
//# sourceMappingURL=chunk-
|
|
476
|
+
//# sourceMappingURL=chunk-HEH7E3KO.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/ts/components/snackbar.ts"],
|
|
4
|
+
"sourcesContent": ["import { BaseOptions } from '../core/component';\nimport { Utils, controllerFor, deepActiveElement, restoreAttribute } from '../core/utils';\n\nexport interface SnackbarOptions extends BaseOptions {\n /**\n * The content of the Snackbar.\n * @default \"\"\n */\n text: string;\n /**\n * Optional action label. Rendered as a trailing text button.\n * @default \"\"\n */\n action: string;\n /**\n * Called when the action button is pressed. The snackbar still dismisses.\n * @default null\n */\n onAction: () => void;\n /**\n * Show a trailing close icon button.\n * Defaults to true when action is set, otherwise false.\n */\n dismissible: boolean;\n /**\n * Element id of a `<template>` (or another element) used as the snackbar body.\n * @default \"\"\n */\n snackbarId?: string;\n /**\n * Length in ms the Snackbar stays before dismissal.\n * `Infinity` keeps it on screen until the user acts.\n * When `action` is set and this is omitted, the default is Infinity.\n * @default 4000\n */\n displayLength: number;\n /**\n * Transition in duration in milliseconds.\n * @default 300\n */\n inDuration: number;\n /**\n * Transition out duration in milliseconds.\n * @default 375\n */\n outDuration: number;\n /**\n * Classes to be added to the snackbar element.\n * @default \"\"\n */\n classes: string;\n /**\n * Callback function called when the snackbar is dismissed.\n * @default null\n */\n completeCallback: () => void;\n /**\n * The percentage of the snackbar's width it takes for a drag\n * to dismiss a Snackbar.\n * @default 0.8\n */\n activationPercent: number;\n /**\n * Any element in the tree the snackbar should render into. A Snackbar has no\n * originating element to infer this from, so pass one when the page lives in\n * a shadow root \u2014 the container is appended to that root instead of to\n * `document.body`, where a root-scoped stylesheet could not reach it.\n * @default null\n */\n root: HTMLElement;\n /**\n * Show at once, dismissing the snackbar on screen without its exit\n * animation, instead of waiting in the queue behind it.\n * @default false\n */\n replace: boolean;\n}\n\nconst _defaults: SnackbarOptions = {\n text: '',\n action: '',\n onAction: null,\n dismissible: false,\n displayLength: 4000,\n inDuration: 300,\n outDuration: 375,\n classes: '',\n completeCallback: null,\n activationPercent: 0.8,\n root: null,\n replace: false\n};\n\nexport class Snackbar {\n /** The snackbar element. */\n el: HTMLElement;\n /**\n * The remaining amount of time in ms that the snackbar\n * will stay before dismissal.\n */\n timeRemaining: number;\n /**\n * Describes the current pan state of the Snackbar.\n */\n panning: boolean;\n options: SnackbarOptions;\n message: string;\n counterTimeout: ReturnType<typeof setTimeout>;\n /** Wall-clock time the snackbar is due to dismiss, for pause/resume. */\n private _deadline: number;\n wasSwiped: boolean;\n startingXPos: number;\n xPos: number;\n time: number;\n deltaX: number;\n velocityX: number;\n /** Swipe distance that dismisses, measured once when the drag starts. */\n private _activationDistance: number;\n private _dismissed = false;\n private _returnFocus: HTMLElement | null = null;\n /** The document body or shadow root the snackbar renders into. */\n private _portal: HTMLElement | ShadowRoot;\n private _events: AbortController;\n private _restoreElement: (() => void) | null = null;\n private _transitionTimer: ReturnType<typeof setTimeout>;\n private _dismissTimer: ReturnType<typeof setTimeout>;\n private _focusTimer: ReturnType<typeof setTimeout>;\n\n /** The snackbar on screen, kept until its exit animation finishes. */\n static _snackbars: Snackbar[];\n /** Snackbars waiting for the one on screen to leave, oldest first. */\n static _queue: Snackbar[];\n /** Set while a replacement clears the screen; the queue waits for it. */\n private static _replacing = false;\n static _container: HTMLElement;\n static _draggedSnackbar: Snackbar;\n /** Which pointer owns the drag in flight; a second finger is ignored. */\n static _dragPointerId: number | null = null;\n\n /**\n * Whether a bar gets its close button when the page does not say. One with\n * an action waits for it, and one that never times out waits for the\n * reader; either way, swiping must not be the only way to send it off.\n */\n private static _needsClose(options: SnackbarOptions): boolean {\n return !!options.action || options.displayLength === Infinity;\n }\n\n constructor(options: Partial<SnackbarOptions> = {}) {\n this.options = {\n ...Snackbar.defaults,\n ...options\n };\n if (options.displayLength === undefined && this.options.action) {\n this.options.displayLength = Infinity;\n }\n if (options.dismissible === undefined) this.options.dismissible = Snackbar._needsClose(this.options);\n this.message = this.options.text;\n this.panning = false;\n this.timeRemaining = this.options.displayLength;\n // Worked out now: `root` may be inside the snackbar this one replaces,\n // and gone by the time it shows.\n this._portal = Utils.portalRoot(this.options.root ?? document.body);\n // First, so an authored body a re-render orphaned is back in its place.\n Snackbar._dropDetached();\n // An authored body is taken when the snackbar shows: one waiting in the\n // queue must not claim the element the snackbar on screen is using.\n if (this.options.snackbarId) this._requireBody();\n else this._build();\n // One snackbar at a time, as Material asks. Everything goes through the\n // queue, so arrivals show in order; a replacement goes to its front once\n // the screen is cleared.\n if (this.options.replace) Snackbar._replaceShown(this);\n else Snackbar._queue.push(this);\n Snackbar._advance();\n }\n\n /**\n * Lets go of snackbars a re-render took out of the page. A persistent one\n * would otherwise hold the queue for good.\n */\n private static _dropDetached() {\n for (const snackbar of Snackbar._snackbars.filter((shown) => !shown.el.isConnected)) {\n snackbar._dismissed = true;\n snackbar._remove(false);\n snackbar.options.completeCallback?.();\n }\n }\n\n /**\n * Ends a snackbar a replacement cuts short, at once, with the events and\n * callback a dismissal has: they used to be skipped, so code waiting on\n * completeCallback never heard. One already dismissing has fired `close`.\n */\n private _evict() {\n if (!this._dismissed) Utils.emit(this.el, 'close');\n this._dismissed = true;\n // While the snackbar is still in the page, so the event reaches the document.\n Utils.emit(this.el, 'closed');\n this._restoreFocus(true);\n this.options.completeCallback?.();\n }\n\n /** Throws now, rather than when the snackbar shows, if `snackbarId` names nothing. */\n private _requireBody() {\n if (!this._hasBody()) throw new Error('Snackbar body not found');\n }\n\n /** Whether the body a snackbar shows is still there: its own, or `snackbarId`'s. */\n private _hasBody(): boolean {\n return !this.options.snackbarId || !!Utils.getElementById(this._portal, this.options.snackbarId);\n }\n\n private _build() {\n this.el = this._createSnackbar();\n Reflect.set(this.el, 'Expressive_Snackbar', this);\n }\n\n /**\n * Takes the snackbar on screen down at once, without starting the queue.\n * Restoring focus can open another, which goes too.\n */\n private static _replaceShown(replacement: Snackbar) {\n // A snackbar opened by the focus restore below must not start the queue,\n // or the next waiting one would show only to be cut short here.\n Snackbar._replacing = true;\n try {\n while (Snackbar._snackbars.length) {\n for (const snackbar of Snackbar._snackbars.splice(0)) snackbar._evict();\n }\n } finally {\n Snackbar._replacing = false;\n }\n Snackbar._queue.unshift(replacement);\n }\n\n /** Puts the snackbar on screen and starts its countdown. */\n private _show() {\n if (!this.el) this._build();\n this._returnFocus = Snackbar._focused();\n Snackbar._containerIn(this._portal).appendChild(this.el);\n Snackbar._snackbars.push(this);\n this._animateIn();\n this._setTimer();\n Utils.emit(this.el, 'open');\n }\n\n /** The focused element, looking inside open shadow roots. */\n private static _focused(): HTMLElement | null {\n const focused = deepActiveElement(document);\n return focused instanceof HTMLElement ? focused : null;\n }\n\n /**\n * One container serves every snackbar, and only one snackbar shows at a\n * time \u2014 so it is moved rather than duplicated when the root changes.\n */\n private static _containerIn(root: HTMLElement | ShadowRoot): HTMLElement {\n const container = Snackbar._container;\n if (container?.isConnected && container.parentNode === root) return container;\n Snackbar._removeContainer();\n Snackbar._createContainer(root);\n return Snackbar._container;\n }\n\n static get defaults(): SnackbarOptions {\n return _defaults;\n }\n\n static getInstance(el: Element): Snackbar | undefined {\n return Reflect.get(el, 'Expressive_Snackbar');\n }\n\n static _createContainer(root: HTMLElement | ShadowRoot = document.body) {\n const container = document.createElement('div');\n container.setAttribute('id', 'snackbar-container');\n // One listener per stage. These used to be a touch trio on the container\n // plus a mouse trio split across the container and the document, with a\n // helper picking `targetTouches[0].clientX` or `clientX` apart afterwards.\n // Move and up stay on the document so a drag that leaves the container\n // still completes.\n container.addEventListener('pointerdown', Snackbar._onDragStart);\n document.addEventListener('pointermove', Snackbar._onDragMove);\n document.addEventListener('pointerup', Snackbar._onDragEnd);\n document.addEventListener('pointercancel', Snackbar._onDragCancel);\n root.appendChild(container);\n Snackbar._container = container;\n }\n\n static _removeContainer() {\n document.removeEventListener('pointermove', Snackbar._onDragMove);\n document.removeEventListener('pointerup', Snackbar._onDragEnd);\n document.removeEventListener('pointercancel', Snackbar._onDragCancel);\n Snackbar._container?.remove();\n Snackbar._container = null;\n }\n\n static _onDragStart(e: PointerEvent) {\n if (!e.isPrimary) return;\n if (e.pointerType === 'mouse' && e.button !== 0) return;\n const target = e.target as HTMLElement | null;\n // Don't start a swipe from the action or close \u2014 those are buttons.\n if (target && !target.closest('button, a') && target.closest('.snackbar')) {\n const snackbarElem = target.closest('.snackbar') as HTMLElement;\n const snackbar = Snackbar.getInstance(snackbarElem);\n if (!snackbar) return;\n snackbar.panning = true;\n snackbar._pauseTimer();\n Snackbar._draggedSnackbar = snackbar;\n snackbar.el.classList.add('panning');\n snackbar.el.style.transition = '';\n Snackbar._dragPointerId = e.pointerId;\n snackbar.startingXPos = e.clientX;\n snackbar.velocityX = 0;\n snackbar.time = Date.now();\n snackbar.xPos = e.clientX;\n // A translateX does not change the width, so one read covers the drag.\n snackbar._activationDistance = snackbar.el.offsetWidth * snackbar.options.activationPercent;\n }\n }\n\n static _onDragMove(e: PointerEvent) {\n if (Snackbar._dragPointerId !== e.pointerId) return;\n if (!!Snackbar._draggedSnackbar) {\n e.preventDefault();\n const snackbar = Snackbar._draggedSnackbar;\n snackbar.deltaX = Math.abs(snackbar.xPos - e.clientX);\n snackbar.xPos = e.clientX;\n // Two moves in the same millisecond would divide by zero, and an\n // infinite velocity dismisses on release.\n snackbar.velocityX = snackbar.deltaX / Math.max(1, Date.now() - snackbar.time);\n snackbar.time = Date.now();\n\n const totalDeltaX = snackbar.xPos - snackbar.startingXPos;\n const activationDistance = snackbar._activationDistance;\n snackbar.el.style.transform = `translateX(${totalDeltaX}px)`;\n snackbar.el.style.opacity = (1 - Math.abs(totalDeltaX / activationDistance)).toString();\n }\n }\n\n static _onDragEnd(e: PointerEvent) {\n if (Snackbar._dragPointerId !== e.pointerId) return;\n Snackbar._dragPointerId = null;\n if (!!Snackbar._draggedSnackbar) {\n const snackbar = Snackbar._draggedSnackbar;\n snackbar.panning = false;\n snackbar.el.classList.remove('panning');\n\n const totalDeltaX = snackbar.xPos - snackbar.startingXPos;\n const activationDistance = snackbar._activationDistance;\n const velocity = Date.now() - snackbar.time < 100 ? snackbar.velocityX : 0;\n const shouldBeDismissed = Math.abs(totalDeltaX) > activationDistance || velocity > 1;\n\n // Remove snackbar\n if (shouldBeDismissed) {\n snackbar.wasSwiped = true;\n snackbar.dismiss();\n // Animate snackbar back to original position\n } else {\n snackbar._snapBack();\n }\n Snackbar._draggedSnackbar = null;\n }\n }\n\n /**\n * A cancelled pointer is not a short swipe. Snap back and resume the timer\n * without consulting the distance travelled - the browser took the gesture\n * over, so the movement so far says nothing about what the user wanted.\n */\n static _onDragCancel(e: PointerEvent) {\n if (Snackbar._dragPointerId !== e.pointerId) return;\n Snackbar._dragPointerId = null;\n const snackbar = Snackbar._draggedSnackbar;\n if (!snackbar) return;\n snackbar.panning = false;\n snackbar.el.classList.remove('panning');\n snackbar._snapBack();\n Snackbar._draggedSnackbar = null;\n }\n\n private _snapBack() {\n this.el.style.transition = 'transform .2s, opacity .2s';\n this.el.style.transform = '';\n this.el.style.opacity = '';\n this._resumeTimer();\n }\n\n /**\n * dismiss all snackbars.\n */\n static dismissAll() {\n // The queue first, so the one on screen does not hand over to it. Copy\n // first: dismiss() splices the lists it is iterating.\n for (const snackbar of [...Snackbar._queue, ...Snackbar._snackbars]) {\n snackbar.dismiss();\n }\n }\n\n /**\n * Whether dismiss() is done already: the snackbar was dismissed before, or\n * never showed and is dropped from the queue. A dropped one reports through\n * completeCallback but fires no events, never having been in the page.\n */\n private _leaveQueue(): boolean {\n if (this._dismissed) return true;\n const index = Snackbar._queue.indexOf(this);\n if (index < 0) return false;\n Snackbar._queue.splice(index, 1);\n this._drop();\n return true;\n }\n\n private _drop() {\n this._dismissed = true;\n // An authored body was never taken, so there is nothing to give back.\n if (this.el) this._remove(false);\n this.options.completeCallback?.();\n }\n\n _createSnackbar() {\n let snackbar: HTMLElement = this.options.snackbarId\n ? Utils.getElementById(this._portal, this.options.snackbarId)\n : document.createElement('div');\n if (snackbar instanceof HTMLTemplateElement) {\n const node = snackbar.content.cloneNode(true);\n snackbar = (node as HTMLElement).firstElementChild as HTMLElement;\n } else if (snackbar && this.options.snackbarId) {\n const placeholder = document.createComment('');\n snackbar.before(placeholder);\n const children = [...snackbar.childNodes];\n const attributes = ['class', 'style', 'role', 'aria-live', 'aria-atomic', 'inert']\n .map(name => [name, snackbar.getAttribute(name)]);\n this._restoreElement = () => {\n snackbar.replaceChildren(...children);\n for (const [name, value] of attributes) restoreAttribute(snackbar, name, value);\n placeholder.replaceWith(snackbar);\n };\n }\n if (!snackbar) throw new Error('Snackbar body not found');\n this._events = controllerFor(snackbar);\n const listenerOptions = { signal: this._events.signal };\n snackbar.classList.add('snackbar');\n snackbar.setAttribute('role', 'status');\n snackbar.setAttribute('aria-live', 'polite');\n snackbar.setAttribute('aria-atomic', 'true');\n snackbar.inert = false;\n snackbar.addEventListener('focusin', (e) => {\n if (e.relatedTarget instanceof HTMLElement && !snackbar.contains(e.relatedTarget)) {\n this._returnFocus = e.relatedTarget;\n }\n this._pauseTimer();\n }, listenerOptions);\n snackbar.addEventListener('keydown', (e) => {\n if (e.key !== 'Escape' || e.defaultPrevented || this._dismissed) return;\n e.preventDefault();\n e.stopPropagation();\n this.dismiss();\n }, listenerOptions);\n snackbar.addEventListener('focusout', () => {\n clearTimeout(this._focusTimer);\n this._focusTimer = setTimeout(() => this._resumeTimer(), 0);\n }, listenerOptions);\n snackbar.addEventListener('pointerenter', () => this._pauseTimer(), listenerOptions);\n snackbar.addEventListener('pointerleave', () => this._resumeTimer(), listenerOptions);\n // Add custom classes onto snackbar\n if (this.options.classes.length > 0) {\n snackbar.classList.add(...this.options.classes.split(' ').filter(Boolean));\n }\n if (this.message) {\n const text = document.createElement('p');\n text.textContent = this.message;\n snackbar.replaceChildren(text);\n }\n if (this.options.action) {\n const action = document.createElement('button');\n action.type = 'button';\n action.textContent = this.options.action;\n action.addEventListener('click', (e) => {\n e.stopPropagation();\n if (this._dismissed) return;\n try {\n if (typeof this.options.onAction === 'function') this.options.onAction();\n Utils.emit(this.el, 'action');\n } finally {\n this.dismiss();\n }\n }, listenerOptions);\n snackbar.appendChild(action);\n }\n if (this.options.dismissible) {\n const close = document.createElement('button');\n close.type = 'button';\n close.className = 'circle';\n close.setAttribute('aria-label', 'Dismiss');\n const icon = document.createElement('span');\n icon.className = 'material-symbols';\n icon.setAttribute('aria-hidden', 'true');\n icon.textContent = 'close';\n close.appendChild(icon);\n close.addEventListener('click', (e) => {\n e.stopPropagation();\n this.dismiss();\n }, listenerOptions);\n snackbar.appendChild(close);\n }\n return snackbar;\n }\n\n private _remove(advance = true) {\n if (this._events.signal.aborted) return;\n this._events.abort();\n clearTimeout(this.counterTimeout);\n clearTimeout(this._transitionTimer);\n clearTimeout(this._dismissTimer);\n clearTimeout(this._focusTimer);\n this.counterTimeout = null;\n if (Snackbar._draggedSnackbar === this) {\n Snackbar._draggedSnackbar = null;\n Snackbar._dragPointerId = null;\n }\n Reflect.set(this.el, 'Expressive_Snackbar', undefined);\n if (this._restoreElement) this._restoreElement();\n else this.el.remove();\n const index = Snackbar._snackbars.indexOf(this);\n if (index >= 0) Snackbar._snackbars.splice(index, 1);\n if (advance) Snackbar._advance();\n }\n\n /** Shows the next queued snackbar once the screen is clear, or tidies up. */\n private static _advance() {\n while (!Snackbar._replacing && !Snackbar._snackbars.length) {\n const next = Snackbar._queue.shift();\n if (!next) return Snackbar._tidy();\n Snackbar._showOrDrop(next);\n }\n }\n\n /**\n * A queued snackbar completes without showing when the page it was for has\n * gone: its `root`, such as a removed shadow host, or its authored body.\n * Shown there, nothing could reach it to dismiss it, and the queue would stall.\n */\n private static _showOrDrop(next: Snackbar) {\n if (Snackbar._canShow(next)) next._show();\n else next._drop();\n }\n\n private static _canShow(next: Snackbar): boolean {\n if (!next._portal.isConnected) return false;\n return !!next.el || next._hasBody();\n }\n\n /** Removes the container once nothing is left in it. */\n private static _tidy() {\n if (Snackbar._container?.childElementCount === 0) Snackbar._removeContainer();\n }\n\n _animateIn() {\n this.el.style.display = '';\n this.el.style.opacity = '0';\n this.el.style.transform = 'translateY(24px)';\n this.el.style.transition = `\n transform ${this.options.inDuration}ms ease,\n opacity ${this.options.inDuration}ms ease\n `;\n this._transitionTimer = setTimeout(() => {\n this.el.style.transform = '';\n this.el.style.opacity = '1';\n }, 1);\n }\n\n /**\n * Arm the dismissal timer.\n *\n * One timeout, not a 20ms interval ticking a counter down: the old form woke\n * the page up 50 times a second per snackbar purely to subtract 20 from a\n * number. Dragging pauses the countdown via _pauseTimer/_resumeTimer instead.\n */\n _setTimer() {\n if (this.timeRemaining === Infinity) return;\n this._deadline = Date.now() + this.timeRemaining;\n this.counterTimeout = setTimeout(() => this.dismiss(), this.timeRemaining);\n }\n\n /** Stop the countdown, banking the time that was left on it. */\n _pauseTimer() {\n if (this.counterTimeout == null) return;\n clearTimeout(this.counterTimeout);\n this.counterTimeout = null;\n this.timeRemaining = Math.max(0, this._deadline - Date.now());\n }\n\n /** Restart a countdown stopped by {@link _pauseTimer}. */\n _resumeTimer() {\n if (this._dismissed || this.panning || this.el.matches(':hover, :focus-within') || this.counterTimeout != null) return;\n this._setTimer();\n }\n\n private _restoreFocus(remove = false) {\n const focused = (this.el.getRootNode() as Document | ShadowRoot).activeElement;\n const returnFocus = focused && this.el.contains(focused) ? this._returnFocus : null;\n this.el.inert = true;\n if (remove) this._remove(false);\n if (returnFocus?.isConnected) returnFocus.focus({ preventScroll: true });\n }\n\n /**\n * Dismiss snackbar with animation.\n */\n dismiss() {\n if (this._leaveQueue()) return;\n this._dismissed = true;\n clearTimeout(this.counterTimeout);\n this.counterTimeout = null;\n this._restoreFocus();\n if (this._events.signal.aborted) return;\n Utils.emit(this.el, 'close');\n const duration = this.options.outDuration;\n const transitions = [`margin ${duration}ms ease`, `opacity ${duration}ms ease`];\n\n if (this.wasSwiped) {\n // Carry on off the side the user swiped toward, from where they let go.\n const direction = this.xPos < this.startingXPos ? -1 : 1;\n this.el.style.transform = `translateX(${direction * this.el.offsetWidth}px)`;\n this.el.style.opacity = '0';\n transitions.push(`transform ${duration}ms ease`);\n }\n\n this.el.style.transition = transitions.join(', ');\n\n clearTimeout(this._transitionTimer);\n this._transitionTimer = setTimeout(() => {\n this.el.style.opacity = '0';\n this.el.style.marginTop = '-40px';\n }, 1);\n\n this._dismissTimer = setTimeout(() => {\n // While the snackbar is still in the page, so the event reaches the document.\n Utils.emit(this.el, 'closed');\n this._remove();\n // Call the optional callback\n if (typeof this.options.completeCallback === 'function') {\n this.options.completeCallback();\n }\n }, this.options.outDuration);\n }\n\n static {\n Snackbar._snackbars = [];\n Snackbar._queue = [];\n Snackbar._container = null;\n Snackbar._draggedSnackbar = null;\n }\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;AA8EA,IAAM,YAA6B;AAAA,EACjC,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,aAAa;AAAA,EACb,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,SAAS;AAAA,EACT,kBAAkB;AAAA,EAClB,mBAAmB;AAAA,EACnB,MAAM;AAAA,EACN,SAAS;AACX;AAEO,IAAM,YAAN,MAAM,UAAS;AAAA,EAuDpB,YAAY,UAAoC,CAAC,GAAG;AA9BpD,SAAQ,aAAa;AACrB,SAAQ,eAAmC;AAI3C,SAAQ,kBAAuC;AA0B7C,SAAK,UAAU;AAAA,MACb,GAAG,UAAS;AAAA,MACZ,GAAG;AAAA,IACL;AACA,QAAI,QAAQ,kBAAkB,UAAa,KAAK,QAAQ,QAAQ;AAC9D,WAAK,QAAQ,gBAAgB;AAAA,IAC/B;AACA,QAAI,QAAQ,gBAAgB,OAAW,MAAK,QAAQ,cAAc,UAAS,YAAY,KAAK,OAAO;AACnG,SAAK,UAAU,KAAK,QAAQ;AAC5B,SAAK,UAAU;AACf,SAAK,gBAAgB,KAAK,QAAQ;AAGlC,SAAK,UAAU,MAAM,WAAW,KAAK,QAAQ,QAAQ,SAAS,IAAI;AAElE,cAAS,cAAc;AAGvB,QAAI,KAAK,QAAQ,WAAY,MAAK,aAAa;AAAA,QAC1C,MAAK,OAAO;AAIjB,QAAI,KAAK,QAAQ,QAAS,WAAS,cAAc,IAAI;AAAA,QAChD,WAAS,OAAO,KAAK,IAAI;AAC9B,cAAS,SAAS;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA/BA,OAAe,YAAY,SAAmC;AAC5D,WAAO,CAAC,CAAC,QAAQ,UAAU,QAAQ,kBAAkB;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA;AAAA,EAmCA,OAAe,gBAAgB;AAC7B,eAAW,YAAY,UAAS,WAAW,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,WAAW,GAAG;AACnF,eAAS,aAAa;AACtB,eAAS,QAAQ,KAAK;AACtB,eAAS,QAAQ,mBAAmB;AAAA,IACtC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,SAAS;AACf,QAAI,CAAC,KAAK,WAAY,OAAM,KAAK,KAAK,IAAI,OAAO;AACjD,SAAK,aAAa;AAElB,UAAM,KAAK,KAAK,IAAI,QAAQ;AAC5B,SAAK,cAAc,IAAI;AACvB,SAAK,QAAQ,mBAAmB;AAAA,EAClC;AAAA;AAAA,EAGQ,eAAe;AACrB,QAAI,CAAC,KAAK,SAAS,EAAG,OAAM,IAAI,MAAM,yBAAyB;AAAA,EACjE;AAAA;AAAA,EAGQ,WAAoB;AAC1B,WAAO,CAAC,KAAK,QAAQ,cAAc,CAAC,CAAC,MAAM,eAAe,KAAK,SAAS,KAAK,QAAQ,UAAU;AAAA,EACjG;AAAA,EAEQ,SAAS;AACf,SAAK,KAAK,KAAK,gBAAgB;AAC/B,YAAQ,IAAI,KAAK,IAAI,uBAAuB,IAAI;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAe,cAAc,aAAuB;AAGlD,cAAS,aAAa;AACtB,QAAI;AACF,aAAO,UAAS,WAAW,QAAQ;AACjC,mBAAW,YAAY,UAAS,WAAW,OAAO,CAAC,EAAG,UAAS,OAAO;AAAA,MACxE;AAAA,IACF,UAAE;AACA,gBAAS,aAAa;AAAA,IACxB;AACA,cAAS,OAAO,QAAQ,WAAW;AAAA,EACrC;AAAA;AAAA,EAGQ,QAAQ;AACd,QAAI,CAAC,KAAK,GAAI,MAAK,OAAO;AAC1B,SAAK,eAAe,UAAS,SAAS;AACtC,cAAS,aAAa,KAAK,OAAO,EAAE,YAAY,KAAK,EAAE;AACvD,cAAS,WAAW,KAAK,IAAI;AAC7B,SAAK,WAAW;AAChB,SAAK,UAAU;AACf,UAAM,KAAK,KAAK,IAAI,MAAM;AAAA,EAC5B;AAAA;AAAA,EAGA,OAAe,WAA+B;AAC5C,UAAM,UAAU,kBAAkB,QAAQ;AAC1C,WAAO,mBAAmB,cAAc,UAAU;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAe,aAAa,MAA6C;AACvE,UAAM,YAAY,UAAS;AAC3B,QAAI,WAAW,eAAe,UAAU,eAAe,KAAM,QAAO;AACpE,cAAS,iBAAiB;AAC1B,cAAS,iBAAiB,IAAI;AAC9B,WAAO,UAAS;AAAA,EAClB;AAAA,EAEA,WAAW,WAA4B;AACrC,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,YAAY,IAAmC;AACpD,WAAO,QAAQ,IAAI,IAAI,qBAAqB;AAAA,EAC9C;AAAA,EAEA,OAAO,iBAAiB,OAAiC,SAAS,MAAM;AACtE,UAAM,YAAY,SAAS,cAAc,KAAK;AAC9C,cAAU,aAAa,MAAM,oBAAoB;AAMjD,cAAU,iBAAiB,eAAe,UAAS,YAAY;AAC/D,aAAS,iBAAiB,eAAe,UAAS,WAAW;AAC7D,aAAS,iBAAiB,aAAa,UAAS,UAAU;AAC1D,aAAS,iBAAiB,iBAAiB,UAAS,aAAa;AACjE,SAAK,YAAY,SAAS;AAC1B,cAAS,aAAa;AAAA,EACxB;AAAA,EAEA,OAAO,mBAAmB;AACxB,aAAS,oBAAoB,eAAe,UAAS,WAAW;AAChE,aAAS,oBAAoB,aAAa,UAAS,UAAU;AAC7D,aAAS,oBAAoB,iBAAiB,UAAS,aAAa;AACpE,cAAS,YAAY,OAAO;AAC5B,cAAS,aAAa;AAAA,EACxB;AAAA,EAEA,OAAO,aAAa,GAAiB;AACnC,QAAI,CAAC,EAAE,UAAW;AAClB,QAAI,EAAE,gBAAgB,WAAW,EAAE,WAAW,EAAG;AACjD,UAAM,SAAS,EAAE;AAEjB,QAAI,UAAU,CAAC,OAAO,QAAQ,WAAW,KAAK,OAAO,QAAQ,WAAW,GAAG;AACzE,YAAM,eAAe,OAAO,QAAQ,WAAW;AAC/C,YAAM,WAAW,UAAS,YAAY,YAAY;AAClD,UAAI,CAAC,SAAU;AACf,eAAS,UAAU;AACnB,eAAS,YAAY;AACrB,gBAAS,mBAAmB;AAC5B,eAAS,GAAG,UAAU,IAAI,SAAS;AACnC,eAAS,GAAG,MAAM,aAAa;AAC/B,gBAAS,iBAAiB,EAAE;AAC5B,eAAS,eAAe,EAAE;AAC1B,eAAS,YAAY;AACrB,eAAS,OAAO,KAAK,IAAI;AACzB,eAAS,OAAO,EAAE;AAElB,eAAS,sBAAsB,SAAS,GAAG,cAAc,SAAS,QAAQ;AAAA,IAC5E;AAAA,EACF;AAAA,EAEA,OAAO,YAAY,GAAiB;AAClC,QAAI,UAAS,mBAAmB,EAAE,UAAW;AAC7C,QAAI,CAAC,CAAC,UAAS,kBAAkB;AAC/B,QAAE,eAAe;AACjB,YAAM,WAAW,UAAS;AAC1B,eAAS,SAAS,KAAK,IAAI,SAAS,OAAO,EAAE,OAAO;AACpD,eAAS,OAAO,EAAE;AAGlB,eAAS,YAAY,SAAS,SAAS,KAAK,IAAI,GAAG,KAAK,IAAI,IAAI,SAAS,IAAI;AAC7E,eAAS,OAAO,KAAK,IAAI;AAEzB,YAAM,cAAc,SAAS,OAAO,SAAS;AAC7C,YAAM,qBAAqB,SAAS;AACpC,eAAS,GAAG,MAAM,YAAY,cAAc,WAAW;AACvD,eAAS,GAAG,MAAM,WAAW,IAAI,KAAK,IAAI,cAAc,kBAAkB,GAAG,SAAS;AAAA,IACxF;AAAA,EACF;AAAA,EAEA,OAAO,WAAW,GAAiB;AACjC,QAAI,UAAS,mBAAmB,EAAE,UAAW;AAC7C,cAAS,iBAAiB;AAC1B,QAAI,CAAC,CAAC,UAAS,kBAAkB;AAC/B,YAAM,WAAW,UAAS;AAC1B,eAAS,UAAU;AACnB,eAAS,GAAG,UAAU,OAAO,SAAS;AAEtC,YAAM,cAAc,SAAS,OAAO,SAAS;AAC7C,YAAM,qBAAqB,SAAS;AACpC,YAAM,WAAW,KAAK,IAAI,IAAI,SAAS,OAAO,MAAM,SAAS,YAAY;AACzE,YAAM,oBAAoB,KAAK,IAAI,WAAW,IAAI,sBAAsB,WAAW;AAGnF,UAAI,mBAAmB;AACrB,iBAAS,YAAY;AACrB,iBAAS,QAAQ;AAAA,MAEnB,OAAO;AACL,iBAAS,UAAU;AAAA,MACrB;AACA,gBAAS,mBAAmB;AAAA,IAC9B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,cAAc,GAAiB;AACpC,QAAI,UAAS,mBAAmB,EAAE,UAAW;AAC7C,cAAS,iBAAiB;AAC1B,UAAM,WAAW,UAAS;AAC1B,QAAI,CAAC,SAAU;AACf,aAAS,UAAU;AACnB,aAAS,GAAG,UAAU,OAAO,SAAS;AACtC,aAAS,UAAU;AACnB,cAAS,mBAAmB;AAAA,EAC9B;AAAA,EAEQ,YAAY;AAClB,SAAK,GAAG,MAAM,aAAa;AAC3B,SAAK,GAAG,MAAM,YAAY;AAC1B,SAAK,GAAG,MAAM,UAAU;AACxB,SAAK,aAAa;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,aAAa;AAGlB,eAAW,YAAY,CAAC,GAAG,UAAS,QAAQ,GAAG,UAAS,UAAU,GAAG;AACnE,eAAS,QAAQ;AAAA,IACnB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,cAAuB;AAC7B,QAAI,KAAK,WAAY,QAAO;AAC5B,UAAM,QAAQ,UAAS,OAAO,QAAQ,IAAI;AAC1C,QAAI,QAAQ,EAAG,QAAO;AACtB,cAAS,OAAO,OAAO,OAAO,CAAC;AAC/B,SAAK,MAAM;AACX,WAAO;AAAA,EACT;AAAA,EAEQ,QAAQ;AACd,SAAK,aAAa;AAElB,QAAI,KAAK,GAAI,MAAK,QAAQ,KAAK;AAC/B,SAAK,QAAQ,mBAAmB;AAAA,EAClC;AAAA,EAEA,kBAAkB;AAChB,QAAI,WAAwB,KAAK,QAAQ,aACrC,MAAM,eAAe,KAAK,SAAS,KAAK,QAAQ,UAAU,IAC1D,SAAS,cAAc,KAAK;AAChC,QAAI,oBAAoB,qBAAqB;AAC3C,YAAM,OAAO,SAAS,QAAQ,UAAU,IAAI;AAC5C,iBAAY,KAAqB;AAAA,IACnC,WAAW,YAAY,KAAK,QAAQ,YAAY;AAC9C,YAAM,cAAc,SAAS,cAAc,EAAE;AAC7C,eAAS,OAAO,WAAW;AAC3B,YAAM,WAAW,CAAC,GAAG,SAAS,UAAU;AACxC,YAAM,aAAa,CAAC,SAAS,SAAS,QAAQ,aAAa,eAAe,OAAO,EAC9E,IAAI,UAAQ,CAAC,MAAM,SAAS,aAAa,IAAI,CAAC,CAAC;AAClD,WAAK,kBAAkB,MAAM;AAC3B,iBAAS,gBAAgB,GAAG,QAAQ;AACpC,mBAAW,CAAC,MAAM,KAAK,KAAK,WAAY,kBAAiB,UAAU,MAAM,KAAK;AAC9E,oBAAY,YAAY,QAAQ;AAAA,MAClC;AAAA,IACF;AACA,QAAI,CAAC,SAAU,OAAM,IAAI,MAAM,yBAAyB;AACxD,SAAK,UAAU,cAAc,QAAQ;AACrC,UAAM,kBAAkB,EAAE,QAAQ,KAAK,QAAQ,OAAO;AACtD,aAAS,UAAU,IAAI,UAAU;AACjC,aAAS,aAAa,QAAQ,QAAQ;AACtC,aAAS,aAAa,aAAa,QAAQ;AAC3C,aAAS,aAAa,eAAe,MAAM;AAC3C,aAAS,QAAQ;AACjB,aAAS,iBAAiB,WAAW,CAAC,MAAM;AAC1C,UAAI,EAAE,yBAAyB,eAAe,CAAC,SAAS,SAAS,EAAE,aAAa,GAAG;AACjF,aAAK,eAAe,EAAE;AAAA,MACxB;AACA,WAAK,YAAY;AAAA,IACnB,GAAG,eAAe;AAClB,aAAS,iBAAiB,WAAW,CAAC,MAAM;AAC1C,UAAI,EAAE,QAAQ,YAAY,EAAE,oBAAoB,KAAK,WAAY;AACjE,QAAE,eAAe;AACjB,QAAE,gBAAgB;AAClB,WAAK,QAAQ;AAAA,IACf,GAAG,eAAe;AAClB,aAAS,iBAAiB,YAAY,MAAM;AAC1C,mBAAa,KAAK,WAAW;AAC7B,WAAK,cAAc,WAAW,MAAM,KAAK,aAAa,GAAG,CAAC;AAAA,IAC5D,GAAG,eAAe;AAClB,aAAS,iBAAiB,gBAAgB,MAAM,KAAK,YAAY,GAAG,eAAe;AACnF,aAAS,iBAAiB,gBAAgB,MAAM,KAAK,aAAa,GAAG,eAAe;AAEpF,QAAI,KAAK,QAAQ,QAAQ,SAAS,GAAG;AACnC,eAAS,UAAU,IAAI,GAAG,KAAK,QAAQ,QAAQ,MAAM,GAAG,EAAE,OAAO,OAAO,CAAC;AAAA,IAC3E;AACA,QAAI,KAAK,SAAS;AAChB,YAAM,OAAO,SAAS,cAAc,GAAG;AACvC,WAAK,cAAc,KAAK;AACxB,eAAS,gBAAgB,IAAI;AAAA,IAC/B;AACA,QAAI,KAAK,QAAQ,QAAQ;AACvB,YAAM,SAAS,SAAS,cAAc,QAAQ;AAC9C,aAAO,OAAO;AACd,aAAO,cAAc,KAAK,QAAQ;AAClC,aAAO,iBAAiB,SAAS,CAAC,MAAM;AACtC,UAAE,gBAAgB;AAClB,YAAI,KAAK,WAAY;AACrB,YAAI;AACF,cAAI,OAAO,KAAK,QAAQ,aAAa,WAAY,MAAK,QAAQ,SAAS;AACvE,gBAAM,KAAK,KAAK,IAAI,QAAQ;AAAA,QAC9B,UAAE;AACA,eAAK,QAAQ;AAAA,QACf;AAAA,MACF,GAAG,eAAe;AAClB,eAAS,YAAY,MAAM;AAAA,IAC7B;AACA,QAAI,KAAK,QAAQ,aAAa;AAC5B,YAAM,QAAQ,SAAS,cAAc,QAAQ;AAC7C,YAAM,OAAO;AACb,YAAM,YAAY;AAClB,YAAM,aAAa,cAAc,SAAS;AAC1C,YAAM,OAAO,SAAS,cAAc,MAAM;AAC1C,WAAK,YAAY;AACjB,WAAK,aAAa,eAAe,MAAM;AACvC,WAAK,cAAc;AACnB,YAAM,YAAY,IAAI;AACtB,YAAM,iBAAiB,SAAS,CAAC,MAAM;AACrC,UAAE,gBAAgB;AAClB,aAAK,QAAQ;AAAA,MACf,GAAG,eAAe;AAClB,eAAS,YAAY,KAAK;AAAA,IAC5B;AACA,WAAO;AAAA,EACT;AAAA,EAEQ,QAAQ,UAAU,MAAM;AAC9B,QAAI,KAAK,QAAQ,OAAO,QAAS;AACjC,SAAK,QAAQ,MAAM;AACnB,iBAAa,KAAK,cAAc;AAChC,iBAAa,KAAK,gBAAgB;AAClC,iBAAa,KAAK,aAAa;AAC/B,iBAAa,KAAK,WAAW;AAC7B,SAAK,iBAAiB;AACtB,QAAI,UAAS,qBAAqB,MAAM;AACtC,gBAAS,mBAAmB;AAC5B,gBAAS,iBAAiB;AAAA,IAC5B;AACA,YAAQ,IAAI,KAAK,IAAI,uBAAuB,MAAS;AACrD,QAAI,KAAK,gBAAiB,MAAK,gBAAgB;AAAA,QAC1C,MAAK,GAAG,OAAO;AACpB,UAAM,QAAQ,UAAS,WAAW,QAAQ,IAAI;AAC9C,QAAI,SAAS,EAAG,WAAS,WAAW,OAAO,OAAO,CAAC;AACnD,QAAI,QAAS,WAAS,SAAS;AAAA,EACjC;AAAA;AAAA,EAGA,OAAe,WAAW;AACxB,WAAO,CAAC,UAAS,cAAc,CAAC,UAAS,WAAW,QAAQ;AAC1D,YAAM,OAAO,UAAS,OAAO,MAAM;AACnC,UAAI,CAAC,KAAM,QAAO,UAAS,MAAM;AACjC,gBAAS,YAAY,IAAI;AAAA,IAC3B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAe,YAAY,MAAgB;AACzC,QAAI,UAAS,SAAS,IAAI,EAAG,MAAK,MAAM;AAAA,QACnC,MAAK,MAAM;AAAA,EAClB;AAAA,EAEA,OAAe,SAAS,MAAyB;AAC/C,QAAI,CAAC,KAAK,QAAQ,YAAa,QAAO;AACtC,WAAO,CAAC,CAAC,KAAK,MAAM,KAAK,SAAS;AAAA,EACpC;AAAA;AAAA,EAGA,OAAe,QAAQ;AACrB,QAAI,UAAS,YAAY,sBAAsB,EAAG,WAAS,iBAAiB;AAAA,EAC9E;AAAA,EAEA,aAAa;AACX,SAAK,GAAG,MAAM,UAAU;AACxB,SAAK,GAAG,MAAM,UAAU;AACxB,SAAK,GAAG,MAAM,YAAY;AAC1B,SAAK,GAAG,MAAM,aAAa;AAAA,kBACb,KAAK,QAAQ,UAAU;AAAA,gBACzB,KAAK,QAAQ,UAAU;AAAA;AAEnC,SAAK,mBAAmB,WAAW,MAAM;AACvC,WAAK,GAAG,MAAM,YAAY;AAC1B,WAAK,GAAG,MAAM,UAAU;AAAA,IAC1B,GAAG,CAAC;AAAA,EACN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,YAAY;AACV,QAAI,KAAK,kBAAkB,SAAU;AACrC,SAAK,YAAY,KAAK,IAAI,IAAI,KAAK;AACnC,SAAK,iBAAiB,WAAW,MAAM,KAAK,QAAQ,GAAG,KAAK,aAAa;AAAA,EAC3E;AAAA;AAAA,EAGA,cAAc;AACZ,QAAI,KAAK,kBAAkB,KAAM;AACjC,iBAAa,KAAK,cAAc;AAChC,SAAK,iBAAiB;AACtB,SAAK,gBAAgB,KAAK,IAAI,GAAG,KAAK,YAAY,KAAK,IAAI,CAAC;AAAA,EAC9D;AAAA;AAAA,EAGA,eAAe;AACb,QAAI,KAAK,cAAc,KAAK,WAAW,KAAK,GAAG,QAAQ,uBAAuB,KAAK,KAAK,kBAAkB,KAAM;AAChH,SAAK,UAAU;AAAA,EACjB;AAAA,EAEQ,cAAc,SAAS,OAAO;AACpC,UAAM,UAAW,KAAK,GAAG,YAAY,EAA4B;AACjE,UAAM,cAAc,WAAW,KAAK,GAAG,SAAS,OAAO,IAAI,KAAK,eAAe;AAC/E,SAAK,GAAG,QAAQ;AAChB,QAAI,OAAQ,MAAK,QAAQ,KAAK;AAC9B,QAAI,aAAa,YAAa,aAAY,MAAM,EAAE,eAAe,KAAK,CAAC;AAAA,EACzE;AAAA;AAAA;AAAA;AAAA,EAKA,UAAU;AACR,QAAI,KAAK,YAAY,EAAG;AACxB,SAAK,aAAa;AAClB,iBAAa,KAAK,cAAc;AAChC,SAAK,iBAAiB;AACtB,SAAK,cAAc;AACnB,QAAI,KAAK,QAAQ,OAAO,QAAS;AACjC,UAAM,KAAK,KAAK,IAAI,OAAO;AAC3B,UAAM,WAAW,KAAK,QAAQ;AAC9B,UAAM,cAAc,CAAC,UAAU,QAAQ,WAAW,WAAW,QAAQ,SAAS;AAE9E,QAAI,KAAK,WAAW;AAElB,YAAM,YAAY,KAAK,OAAO,KAAK,eAAe,KAAK;AACvD,WAAK,GAAG,MAAM,YAAY,cAAc,YAAY,KAAK,GAAG,WAAW;AACvE,WAAK,GAAG,MAAM,UAAU;AACxB,kBAAY,KAAK,aAAa,QAAQ,SAAS;AAAA,IACjD;AAEA,SAAK,GAAG,MAAM,aAAa,YAAY,KAAK,IAAI;AAEhD,iBAAa,KAAK,gBAAgB;AAClC,SAAK,mBAAmB,WAAW,MAAM;AACvC,WAAK,GAAG,MAAM,UAAU;AACxB,WAAK,GAAG,MAAM,YAAY;AAAA,IAC5B,GAAG,CAAC;AAEJ,SAAK,gBAAgB,WAAW,MAAM;AAEpC,YAAM,KAAK,KAAK,IAAI,QAAQ;AAC5B,WAAK,QAAQ;AAEb,UAAI,OAAO,KAAK,QAAQ,qBAAqB,YAAY;AACvD,aAAK,QAAQ,iBAAiB;AAAA,MAChC;AAAA,IACF,GAAG,KAAK,QAAQ,WAAW;AAAA,EAC7B;AAQF;AAAA;AAjjBa,UAwCI,aAAa;AAAA;AAxCjB,UA4CJ,iBAAgC;AAggBrC,UAAS,aAAa,CAAC;AACvB,UAAS,SAAS,CAAC;AACnB,UAAS,aAAa;AACtB,UAAS,mBAAmB;AA/iBzB,IAAM,WAAN;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Component
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-EB2V4OKL.mjs";
|
|
4
4
|
import {
|
|
5
5
|
Utils
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-67UNY7RH.mjs";
|
|
7
7
|
|
|
8
8
|
// src/ts/components/pullToRefresh.ts
|
|
9
9
|
var _defaults = {
|
|
@@ -149,4 +149,4 @@ var PullToRefresh = _PullToRefresh;
|
|
|
149
149
|
export {
|
|
150
150
|
PullToRefresh
|
|
151
151
|
};
|
|
152
|
-
//# sourceMappingURL=chunk-
|
|
152
|
+
//# sourceMappingURL=chunk-HQRLBTNM.mjs.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Utils
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-67UNY7RH.mjs";
|
|
4
4
|
|
|
5
5
|
// src/ts/behaviors/tour.ts
|
|
6
6
|
var states = /* @__PURE__ */ new WeakMap();
|
|
@@ -134,4 +134,4 @@ var Tour = _Tour;
|
|
|
134
134
|
export {
|
|
135
135
|
Tour
|
|
136
136
|
};
|
|
137
|
-
//# sourceMappingURL=chunk-
|
|
137
|
+
//# sourceMappingURL=chunk-I2F7MLUU.mjs.map
|