@expressivecss/expressive 0.13.1 → 0.15.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 +196 -1
- package/README.md +2 -1
- package/dist/css/expressive.css +432 -311
- 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-DTKR54I6.mjs → chunk-33QVDDGR.mjs} +3 -3
- package/dist/js/chunks/{chunk-SPETGK25.mjs → chunk-45FER6RI.mjs} +5 -5
- package/dist/js/chunks/chunk-45FER6RI.mjs.map +7 -0
- package/dist/js/chunks/{chunk-WJXDBPXQ.mjs → chunk-5CEAOLUA.mjs} +17 -20
- package/dist/js/chunks/chunk-5CEAOLUA.mjs.map +7 -0
- package/dist/js/chunks/{chunk-CKQP6P76.mjs → chunk-6VATUZC6.mjs} +12 -7
- package/dist/js/chunks/chunk-6VATUZC6.mjs.map +7 -0
- package/dist/js/chunks/{chunk-QDAL4IYN.mjs → chunk-74MXKKLN.mjs} +2 -2
- package/dist/js/chunks/{chunk-QDAL4IYN.mjs.map → chunk-74MXKKLN.mjs.map} +2 -2
- package/dist/js/chunks/{chunk-DLWYKFEI.mjs → chunk-AIURVCG6.mjs} +3 -3
- package/dist/js/chunks/{chunk-NNYP33NB.mjs → chunk-BGZLF6JZ.mjs} +19 -18
- package/dist/js/chunks/chunk-BGZLF6JZ.mjs.map +7 -0
- package/dist/js/chunks/chunk-C6CHEWYP.mjs +154 -0
- package/dist/js/chunks/chunk-C6CHEWYP.mjs.map +7 -0
- package/dist/js/chunks/{chunk-GVGT6MIU.mjs → chunk-CK2XCICY.mjs} +2 -2
- package/dist/js/chunks/{chunk-XGHORT7J.mjs → chunk-CXXM2L4F.mjs} +8 -9
- package/dist/js/chunks/chunk-CXXM2L4F.mjs.map +7 -0
- package/dist/js/chunks/{chunk-QVVEWBOF.mjs → chunk-DXGRXYYL.mjs} +25 -37
- package/dist/js/chunks/chunk-DXGRXYYL.mjs.map +7 -0
- package/dist/js/chunks/{chunk-QV2JAWIZ.mjs → chunk-FM5CZOUB.mjs} +5 -8
- package/dist/js/chunks/{chunk-QV2JAWIZ.mjs.map → chunk-FM5CZOUB.mjs.map} +2 -2
- package/dist/js/chunks/{chunk-PLYXLSH3.mjs → chunk-GJL6GCIU.mjs} +46 -58
- package/dist/js/chunks/chunk-GJL6GCIU.mjs.map +7 -0
- package/dist/js/chunks/chunk-K3HZMFMD.mjs +135 -0
- package/dist/js/chunks/chunk-K3HZMFMD.mjs.map +7 -0
- package/dist/js/chunks/chunk-KHXZ2A4K.mjs +395 -0
- package/dist/js/chunks/chunk-KHXZ2A4K.mjs.map +7 -0
- package/dist/js/chunks/chunk-KQACNQ22.mjs +7 -0
- package/dist/js/chunks/{chunk-4PWAPV6F.mjs.map → chunk-KQACNQ22.mjs.map} +1 -1
- package/dist/js/chunks/chunk-KUFHW3DS.mjs +214 -0
- package/dist/js/chunks/chunk-KUFHW3DS.mjs.map +7 -0
- package/dist/js/chunks/{chunk-LWBQIX5J.mjs → chunk-KVJAVDBC.mjs} +46 -57
- package/dist/js/chunks/chunk-KVJAVDBC.mjs.map +7 -0
- package/dist/js/chunks/{chunk-YDCS5S3J.mjs → chunk-L27Q6ZMI.mjs} +2 -2
- package/dist/js/chunks/{chunk-CCWDV5CR.mjs → chunk-LQWUDNHZ.mjs} +3 -3
- package/dist/js/chunks/{chunk-6OMRGML6.mjs → chunk-M372EDXD.mjs} +7 -13
- package/dist/js/chunks/{chunk-6OMRGML6.mjs.map → chunk-M372EDXD.mjs.map} +2 -2
- package/dist/js/chunks/{chunk-EC63CHXU.mjs → chunk-M3MURWMB.mjs} +20 -16
- package/dist/js/chunks/chunk-M3MURWMB.mjs.map +7 -0
- package/dist/js/chunks/{chunk-U2OTHOTI.mjs → chunk-NUHMOAOY.mjs} +19 -33
- package/dist/js/chunks/chunk-NUHMOAOY.mjs.map +7 -0
- package/dist/js/chunks/{chunk-P3G3QHII.mjs → chunk-OWG3LMUL.mjs} +17 -14
- package/dist/js/chunks/chunk-OWG3LMUL.mjs.map +7 -0
- package/dist/js/chunks/{chunk-LTWPGFBR.mjs → chunk-PD6HYHAE.mjs} +4 -15
- package/dist/js/chunks/chunk-PD6HYHAE.mjs.map +7 -0
- package/dist/js/chunks/{chunk-PIJ2TAR3.mjs → chunk-PDG64UHF.mjs} +3 -3
- package/dist/js/chunks/{chunk-IFXVDDDH.mjs → chunk-PO3AXVR3.mjs} +38 -64
- package/dist/js/chunks/chunk-PO3AXVR3.mjs.map +7 -0
- package/dist/js/chunks/{chunk-QKWPQK5N.mjs → chunk-QYGK36OG.mjs} +16 -14
- package/dist/js/chunks/chunk-QYGK36OG.mjs.map +7 -0
- package/dist/js/chunks/{chunk-UNEMYWEW.mjs → chunk-SFI2U4YW.mjs} +28 -44
- package/dist/js/chunks/chunk-SFI2U4YW.mjs.map +7 -0
- package/dist/js/chunks/{chunk-VTLBW7QS.mjs → chunk-SMY7GJSS.mjs} +3 -3
- package/dist/js/chunks/{chunk-O5XPWXIQ.mjs → chunk-TCCA2HDG.mjs} +39 -31
- package/dist/js/chunks/chunk-TCCA2HDG.mjs.map +7 -0
- package/dist/js/chunks/{chunk-UBLRRJ7N.mjs → chunk-TSZYSW7F.mjs} +4 -4
- package/dist/js/chunks/{chunk-UBLRRJ7N.mjs.map → chunk-TSZYSW7F.mjs.map} +2 -2
- package/dist/js/chunks/{chunk-UEZUJQ66.mjs → chunk-UAZSDUVP.mjs} +3 -4
- package/dist/js/chunks/{chunk-UEZUJQ66.mjs.map → chunk-UAZSDUVP.mjs.map} +2 -2
- package/dist/js/chunks/{chunk-6N2XAEFK.mjs → chunk-UBRZZWRA.mjs} +10 -8
- package/dist/js/chunks/chunk-UBRZZWRA.mjs.map +7 -0
- package/dist/js/chunks/{chunk-3VOK6J7U.mjs → chunk-UCOE7ZDL.mjs} +47 -45
- package/dist/js/chunks/chunk-UCOE7ZDL.mjs.map +7 -0
- package/dist/js/chunks/{chunk-K4CJCRGE.mjs → chunk-UETTGDLI.mjs} +3 -3
- package/dist/js/chunks/{chunk-RHRQKTTX.mjs → chunk-UNCRDLP6.mjs} +6 -9
- package/dist/js/chunks/chunk-UNCRDLP6.mjs.map +7 -0
- package/dist/js/chunks/{chunk-LNCCYGPC.mjs → chunk-VGNYF6FB.mjs} +8 -10
- package/dist/js/chunks/chunk-VGNYF6FB.mjs.map +7 -0
- package/dist/js/chunks/{chunk-UAEAQBRC.mjs → chunk-VGPGBNGL.mjs} +4 -12
- package/dist/js/chunks/chunk-VGPGBNGL.mjs.map +7 -0
- package/dist/js/chunks/chunk-VKAUVTQY.mjs +1 -0
- package/dist/js/chunks/{chunk-HKT2S7VM.mjs → chunk-VM4FTS7L.mjs} +3 -3
- package/dist/js/chunks/{chunk-55IA2XUC.mjs → chunk-WDK4T63U.mjs} +8 -11
- package/dist/js/chunks/chunk-WDK4T63U.mjs.map +7 -0
- package/dist/js/chunks/{chunk-XH6BEEMY.mjs → chunk-WOCCTVUF.mjs} +51 -39
- package/dist/js/chunks/chunk-WOCCTVUF.mjs.map +7 -0
- package/dist/js/chunks/{chunk-GZWPXXY6.mjs → chunk-WQYN5L4E.mjs} +14 -16
- package/dist/js/chunks/chunk-WQYN5L4E.mjs.map +7 -0
- package/dist/js/chunks/{chunk-6WLSDZ4O.mjs → chunk-X4ISMKE2.mjs} +2 -2
- package/dist/js/chunks/{chunk-3DHK5CZU.mjs → chunk-XAEAEHIX.mjs} +6 -8
- package/dist/js/chunks/chunk-XAEAEHIX.mjs.map +7 -0
- package/dist/js/chunks/{chunk-3CLXLPYS.mjs → chunk-ZX6M7SWO.mjs} +43 -29
- package/dist/js/chunks/chunk-ZX6M7SWO.mjs.map +7 -0
- package/dist/js/expressive.cjs +1337 -572
- package/dist/js/expressive.cjs.map +4 -4
- package/dist/js/expressive.js +1337 -572
- package/dist/js/expressive.js.map +4 -4
- package/dist/js/expressive.min.js +10 -13
- package/dist/js/expressive.min.js.map +4 -4
- package/dist/js/expressive.mjs +71 -55
- package/dist/js/expressive.mjs.map +1 -1
- package/dist/js/internal/behaviors/bottomSheets.mjs +3 -3
- package/dist/js/internal/behaviors/dialogs.mjs +2 -2
- package/dist/js/internal/behaviors/forms.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/components/appBar.mjs +2 -2
- package/dist/js/internal/components/autocomplete.mjs +4 -4
- package/dist/js/internal/components/barChart.mjs +4 -4
- package/dist/js/internal/components/buttonGroup.mjs +2 -2
- package/dist/js/internal/components/buttons.mjs +3 -3
- package/dist/js/internal/components/cards.mjs +3 -3
- package/dist/js/internal/components/carousel.mjs +3 -3
- package/dist/js/internal/components/characterCounter.mjs +2 -2
- package/dist/js/internal/components/chips.mjs +5 -5
- package/dist/js/internal/components/columnChart.mjs +3 -3
- package/dist/js/internal/components/commandPalette.mjs +3 -3
- package/dist/js/internal/components/confetti.mjs +8 -0
- package/dist/js/internal/components/confetti.mjs.map +7 -0
- package/dist/js/internal/components/datepicker.mjs +6 -6
- package/dist/js/internal/components/expandingCard.mjs +3 -3
- package/dist/js/internal/components/heatmapChart.mjs +3 -3
- package/dist/js/internal/components/index.mjs +64 -48
- package/dist/js/internal/components/keypad.mjs +9 -0
- package/dist/js/internal/components/keypad.mjs.map +7 -0
- package/dist/js/internal/components/lightbox.mjs +3 -3
- package/dist/js/internal/components/lineChart.mjs +6 -2
- package/dist/js/internal/components/mapView.mjs +9 -0
- package/dist/js/internal/components/mapView.mjs.map +7 -0
- package/dist/js/internal/components/menu.mjs +3 -3
- package/dist/js/internal/components/messageScroller.mjs +3 -3
- package/dist/js/internal/components/mixedChart.mjs +4 -4
- package/dist/js/internal/components/navigationRail.mjs +2 -2
- package/dist/js/internal/components/particles.mjs +8 -0
- package/dist/js/internal/components/particles.mjs.map +7 -0
- package/dist/js/internal/components/pieChart.mjs +3 -3
- package/dist/js/internal/components/questionnaire.mjs +3 -3
- package/dist/js/internal/components/radarChart.mjs +3 -3
- package/dist/js/internal/components/radialChart.mjs +3 -3
- package/dist/js/internal/components/registry.mjs +41 -37
- package/dist/js/internal/components/richTextEditor.mjs +3 -3
- package/dist/js/internal/components/scrollspy.mjs +2 -2
- package/dist/js/internal/components/select.mjs +4 -4
- package/dist/js/internal/components/slider.mjs +3 -3
- package/dist/js/internal/components/snackbar.mjs +2 -2
- package/dist/js/internal/components/tabs.mjs +4 -4
- package/dist/js/internal/components/timepicker.mjs +4 -4
- package/dist/js/internal/components/tooltip.mjs +3 -3
- package/dist/js/internal/core/component.mjs +1 -1
- package/dist/js/internal/core/utils.mjs +1 -1
- package/dist/js/internal/plugins/dockedDisplayPlugin.mjs +2 -2
- package/dist/js/modular.mjs +71 -55
- package/dist/types/behaviors/forms.d.ts +5 -0
- package/dist/types/components/autocomplete.d.ts +1 -0
- package/dist/types/components/carousel.d.ts +2 -0
- package/dist/types/components/confetti.d.ts +103 -0
- package/dist/types/components/datepicker.d.ts +5 -4
- package/dist/types/components/expandingCard.d.ts +2 -0
- package/dist/types/components/index.d.ts +4 -0
- package/dist/types/components/keypad.d.ts +34 -0
- package/dist/types/components/lightbox.d.ts +3 -5
- package/dist/types/components/lineChart.d.ts +4 -0
- package/dist/types/components/mapView.d.ts +151 -0
- package/dist/types/components/menu.d.ts +1 -0
- package/dist/types/components/particles.d.ts +72 -0
- package/dist/types/components/pieChart.d.ts +3 -0
- package/dist/types/components/radialChart.d.ts +0 -1
- package/dist/types/components/registry.d.ts +12 -0
- package/dist/types/components/slider.d.ts +3 -1
- package/dist/types/components/snackbar.d.ts +3 -0
- package/dist/types/components/tabs.d.ts +5 -1
- package/dist/types/components/timepicker.d.ts +2 -0
- package/dist/types/modular.d.ts +1 -1
- package/dist/types/plugins/dockedDisplayPlugin.d.ts +4 -3
- package/package.json +2 -1
- package/src/sass/abstracts/_breakpoints.scss +0 -1
- package/src/sass/abstracts/_elevation.scss +1 -1
- package/src/sass/abstracts/_mixins.scss +20 -60
- package/src/sass/abstracts/_variables.scss +10 -0
- package/src/sass/base/_global.scss +3 -12
- package/src/sass/base/_index.scss +1 -1
- package/src/sass/components/_badges.scss +1 -8
- package/src/sass/components/_bar-chart.scss +1 -1
- package/src/sass/components/_button-groups.scss +31 -66
- package/src/sass/components/_buttons.scss +1 -1
- package/src/sass/components/_cards.scss +6 -25
- package/src/sass/components/_carousel.scss +16 -55
- package/src/sass/components/_chips.scss +0 -6
- package/src/sass/components/_column-chart.scss +1 -1
- package/src/sass/components/_confetti.scss +14 -0
- package/src/sass/components/_data-table.scss +1 -3
- package/src/sass/components/_datepicker.scss +3 -22
- package/src/sass/components/_dialog.scss +1 -4
- package/src/sass/components/_heatmap-chart.scss +2 -2
- package/src/sass/components/_icon-buttons.scss +0 -1
- package/src/sass/components/_index.scss +4 -0
- package/src/sass/components/_keypad.scss +162 -0
- package/src/sass/components/_lightbox.scss +3 -8
- package/src/sass/components/_map.scss +188 -0
- package/src/sass/components/_menu.scss +31 -74
- package/src/sass/components/_mixed-chart.scss +1 -1
- package/src/sass/components/_navbar.scss +9 -45
- package/src/sass/components/_navigation-rail.scss +23 -32
- package/src/sass/components/_page-footer.scss +15 -12
- package/src/sass/components/_panes.scss +2 -6
- package/src/sass/components/_particles.scss +14 -0
- package/src/sass/components/_progress.scss +6 -4
- package/src/sass/components/_side-sheet.scss +1 -4
- package/src/sass/components/_stepper.scss +0 -4
- package/src/sass/components/_table_of_contents.scss +3 -1
- package/src/sass/components/_timepicker.scss +4 -36
- package/src/sass/components/_toolbar.scss +0 -4
- package/src/sass/components/forms/_checkboxes.scss +44 -67
- package/src/sass/components/forms/_fieldset.scss +3 -3
- package/src/sass/components/forms/_file-input.scss +0 -1
- package/src/sass/components/forms/_radio-buttons.scss +10 -36
- package/src/sass/components/forms/_select.scss +0 -3
- package/src/sass/components/forms/_slider.scss +72 -259
- package/src/sass/tokens/_state.scss +2 -2
- package/src/sass/tokens/_theme.scss +1 -1
- package/src/sass/utilities/_colors.scss +6 -1
- package/src/sass/utilities/_index.scss +1 -1
- package/dist/js/chunks/chunk-3CLXLPYS.mjs.map +0 -7
- package/dist/js/chunks/chunk-3DHK5CZU.mjs.map +0 -7
- package/dist/js/chunks/chunk-3VOK6J7U.mjs.map +0 -7
- package/dist/js/chunks/chunk-4PWAPV6F.mjs +0 -7
- package/dist/js/chunks/chunk-55IA2XUC.mjs.map +0 -7
- package/dist/js/chunks/chunk-6N2XAEFK.mjs.map +0 -7
- package/dist/js/chunks/chunk-CKQP6P76.mjs.map +0 -7
- package/dist/js/chunks/chunk-EC63CHXU.mjs.map +0 -7
- package/dist/js/chunks/chunk-GZWPXXY6.mjs.map +0 -7
- package/dist/js/chunks/chunk-IFXVDDDH.mjs.map +0 -7
- package/dist/js/chunks/chunk-LNCCYGPC.mjs.map +0 -7
- package/dist/js/chunks/chunk-LTWPGFBR.mjs.map +0 -7
- package/dist/js/chunks/chunk-LWBQIX5J.mjs.map +0 -7
- package/dist/js/chunks/chunk-NNYP33NB.mjs.map +0 -7
- package/dist/js/chunks/chunk-NQLC3YMW.mjs +0 -1
- package/dist/js/chunks/chunk-O5XPWXIQ.mjs.map +0 -7
- package/dist/js/chunks/chunk-P3G3QHII.mjs.map +0 -7
- package/dist/js/chunks/chunk-PLYXLSH3.mjs.map +0 -7
- package/dist/js/chunks/chunk-QKWPQK5N.mjs.map +0 -7
- package/dist/js/chunks/chunk-QVVEWBOF.mjs.map +0 -7
- package/dist/js/chunks/chunk-RHRQKTTX.mjs.map +0 -7
- package/dist/js/chunks/chunk-SPETGK25.mjs.map +0 -7
- package/dist/js/chunks/chunk-U2OTHOTI.mjs.map +0 -7
- package/dist/js/chunks/chunk-UAEAQBRC.mjs.map +0 -7
- package/dist/js/chunks/chunk-UNEMYWEW.mjs.map +0 -7
- package/dist/js/chunks/chunk-WJXDBPXQ.mjs.map +0 -7
- package/dist/js/chunks/chunk-XGHORT7J.mjs.map +0 -7
- package/dist/js/chunks/chunk-XH6BEEMY.mjs.map +0 -7
- /package/dist/js/chunks/{chunk-DTKR54I6.mjs.map → chunk-33QVDDGR.mjs.map} +0 -0
- /package/dist/js/chunks/{chunk-DLWYKFEI.mjs.map → chunk-AIURVCG6.mjs.map} +0 -0
- /package/dist/js/chunks/{chunk-GVGT6MIU.mjs.map → chunk-CK2XCICY.mjs.map} +0 -0
- /package/dist/js/chunks/{chunk-YDCS5S3J.mjs.map → chunk-L27Q6ZMI.mjs.map} +0 -0
- /package/dist/js/chunks/{chunk-CCWDV5CR.mjs.map → chunk-LQWUDNHZ.mjs.map} +0 -0
- /package/dist/js/chunks/{chunk-PIJ2TAR3.mjs.map → chunk-PDG64UHF.mjs.map} +0 -0
- /package/dist/js/chunks/{chunk-VTLBW7QS.mjs.map → chunk-SMY7GJSS.mjs.map} +0 -0
- /package/dist/js/chunks/{chunk-K4CJCRGE.mjs.map → chunk-UETTGDLI.mjs.map} +0 -0
- /package/dist/js/chunks/{chunk-NQLC3YMW.mjs.map → chunk-VKAUVTQY.mjs.map} +0 -0
- /package/dist/js/chunks/{chunk-HKT2S7VM.mjs.map → chunk-VM4FTS7L.mjs.map} +0 -0
- /package/dist/js/chunks/{chunk-6WLSDZ4O.mjs.map → chunk-X4ISMKE2.mjs.map} +0 -0
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Menu
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-NUHMOAOY.mjs";
|
|
4
4
|
import {
|
|
5
5
|
Utils
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-M372EDXD.mjs";
|
|
7
7
|
import {
|
|
8
8
|
Component
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-PD6HYHAE.mjs";
|
|
10
10
|
|
|
11
11
|
// src/ts/components/select.ts
|
|
12
12
|
var _defaults = {
|
|
@@ -83,7 +83,7 @@ var FormSelect = class _FormSelect extends Component {
|
|
|
83
83
|
...options
|
|
84
84
|
};
|
|
85
85
|
this.isMultiple = this.el.multiple;
|
|
86
|
-
this.nativeTabIndex = this.el.tabIndex
|
|
86
|
+
this.nativeTabIndex = this.el.tabIndex;
|
|
87
87
|
this.el.tabIndex = -1;
|
|
88
88
|
this._values = [];
|
|
89
89
|
this._createdWrapper = false;
|
|
@@ -326,13 +326,13 @@ var FormSelect = class _FormSelect extends Component {
|
|
|
326
326
|
if (selectedOption.id) this.input.setAttribute("aria-activedescendant", selectedOption.id);
|
|
327
327
|
}
|
|
328
328
|
this.input.ariaExpanded = "true";
|
|
329
|
-
if (
|
|
329
|
+
if (typeof userOnOpenEnd === "function")
|
|
330
330
|
userOnOpenEnd.call(this.menu, this.el);
|
|
331
331
|
};
|
|
332
332
|
menuOptions.onCloseEnd = () => {
|
|
333
333
|
this.input.ariaExpanded = "false";
|
|
334
334
|
this.input.removeAttribute("aria-activedescendant");
|
|
335
|
-
if (
|
|
335
|
+
if (typeof userOnCloseEnd === "function")
|
|
336
336
|
userOnCloseEnd.call(this.menu, this.el);
|
|
337
337
|
};
|
|
338
338
|
menuOptions.closeOnClick = false;
|
|
@@ -482,10 +482,7 @@ var FormSelect = class _FormSelect extends Component {
|
|
|
482
482
|
else this._selectValue(value);
|
|
483
483
|
}
|
|
484
484
|
_getSelectedOptions() {
|
|
485
|
-
return Array.
|
|
486
|
-
this.el.selectedOptions,
|
|
487
|
-
(realOption) => realOption
|
|
488
|
-
);
|
|
485
|
+
return Array.from(this.el.selectedOptions);
|
|
489
486
|
}
|
|
490
487
|
_setValueToInput() {
|
|
491
488
|
this.input.value = this._getSelectedOptions().map((option) => option.textContent.trim()).join(", ");
|
|
@@ -518,4 +515,4 @@ var FormSelect = class _FormSelect extends Component {
|
|
|
518
515
|
export {
|
|
519
516
|
FormSelect
|
|
520
517
|
};
|
|
521
|
-
//# sourceMappingURL=chunk-
|
|
518
|
+
//# sourceMappingURL=chunk-WDK4T63U.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/ts/components/select.ts"],
|
|
4
|
+
"sourcesContent": ["import { Utils } from '../core/utils';\nimport { Menu, MenuOptions } from './menu';\nimport { Component, BaseOptions, InitElements, InitElement } from '../core/component';\n\nexport interface FormSelectOptions extends BaseOptions {\n /**\n * Classes to be added to the select wrapper element.\n * @default \"\"\n */\n classes: string;\n /**\n * Pass options object to select menu initialization.\n * @default {}\n */\n menuOptions: Partial<MenuOptions>;\n}\n\nconst _defaults: FormSelectOptions = {\n classes: '',\n menuOptions: {}\n};\n\ntype ValueStruct = {\n el: HTMLOptionElement;\n optionEl: HTMLElement;\n};\n\nexport class FormSelect extends Component<FormSelectOptions> {\n declare el: HTMLSelectElement;\n /** If this is a multiple select. */\n isMultiple: boolean;\n /**\n * Label associated with the current select element.\n * Is \"null\", if not detected.\n */\n labelEl: HTMLLabelElement;\n /** The generated menu element. */\n menuEl: HTMLElement;\n /** Text input that shows current selected option. */\n input: HTMLInputElement;\n /** Instance of the menu plugin for this select. */\n menu: Menu;\n /** The field wrapper around the native select. */\n wrapper: HTMLDivElement;\n selectOptions: (HTMLOptionElement | HTMLOptGroupElement)[];\n private _values: ValueStruct[];\n private _createdWrapper: boolean;\n private _originalLabels = new Map<HTMLLabelElement, { for: string | null; id: string | null }>();\n private _labelPlaceholder: Comment;\n private _form: HTMLFormElement | null;\n private _resetTimer: ReturnType<typeof setTimeout>;\n private _validationMessage: HTMLElement | null = null;\n nativeTabIndex: number;\n\n constructor(el: HTMLSelectElement, options: FormSelectOptions) {\n super(el, options, FormSelect);\n if (this.el.classList.contains('browser-default')) return;\n this.el['Expressive_FormSelect'] = this;\n\n this.options = {\n ...FormSelect.defaults,\n ...options\n };\n\n this.isMultiple = this.el.multiple;\n this.nativeTabIndex = this.el.tabIndex;\n this.el.tabIndex = -1;\n this._values = [];\n this._createdWrapper = false;\n this._setupMenu();\n this._setupEventHandlers();\n }\n\n static get defaults(): FormSelectOptions {\n return _defaults;\n }\n\n /**\n * Initializes instance of FormSelect.\n * @param el HTML element.\n * @param options Component options.\n */\n static init(el: HTMLSelectElement, options?: Partial<FormSelectOptions>): FormSelect;\n /**\n * Initializes instances of FormSelect.\n * @param els HTML elements.\n * @param options Component options.\n */\n static init(\n els: InitElements<HTMLSelectElement | InitElement>,\n options?: Partial<FormSelectOptions>\n ): FormSelect[];\n /**\n * Initializes instances of FormSelect.\n * @param els HTML elements.\n * @param options Component options.\n */\n static init(\n els: HTMLSelectElement | InitElements<HTMLSelectElement | InitElement>,\n options: Partial<FormSelectOptions> = {}\n ): FormSelect | FormSelect[] {\n return super.init(els, options, FormSelect);\n }\n\n static getInstance(el: HTMLElement): FormSelect {\n return el['Expressive_FormSelect'];\n }\n\n destroy() {\n this._removeEventHandlers();\n this._clearValidationError();\n // The Menu holds itself in the static Menu._menus registry\n // until its own destroy() runs, so dropping the elements is not enough -\n // every rebuilt select used to leave an instance behind for good.\n this.menu?.destroy();\n this._removeMenu();\n this.el.tabIndex = this.nativeTabIndex;\n this.el['Expressive_FormSelect'] = undefined;\n }\n\n /**\n * Re-read the native `<select>` and update the generated menu to match.\n *\n * Assigning `select.value` from script fires no `change` event, so nothing\n * else syncs the visible input text or the `.selected` state on the virtual\n * options. Adding or removing `<option>`s also requires this \u2014 the menu is\n * rebuilt from the native list, the field and Menu instance stay put.\n */\n refresh() {\n if (!this.menuEl) return;\n this._bindForm();\n const root = this.menuEl.getRootNode() as Document | ShadowRoot;\n const focused = this._values.find(value => value.optionEl.contains(root.activeElement))?.el;\n this.input.disabled = this.el.matches(':disabled');\n this.wrapper.classList.toggle('disabled', this.input.disabled);\n if (this.input.disabled) this.menu?.close();\n else if (!this.menu) this._initMenu();\n this.input.removeAttribute('aria-activedescendant');\n this._rebuildOptions();\n this._handleSelectChange();\n if (this.menu) this.menu.focusedIndex = -1;\n if (this.menu?.isOpen) {\n this.menu.recalculateDimensions();\n if (focused) (this._values.find(value => value.el === focused)?.optionEl ?? this.input).focus();\n }\n }\n\n _setupEventHandlers() {\n this._setupOptionHandlers();\n this.el.addEventListener('change', this._handleSelectChange);\n this.el.addEventListener('invalid', this._handleInvalid);\n this.el.addEventListener('focus', this._handleNativeFocus);\n this.input.addEventListener('click', this._handleInputClick);\n this.menuEl.addEventListener('focusin', this._handleOptionFocus);\n this._bindForm();\n }\n\n private _bindForm() {\n this._form?.removeEventListener('reset', this._handleReset);\n this._form = this.el.form;\n this._form?.addEventListener('reset', this._handleReset);\n }\n\n _removeEventHandlers() {\n this._removeOptionHandlers();\n this.el.removeEventListener('change', this._handleSelectChange);\n this.el.removeEventListener('invalid', this._handleInvalid);\n this.el.removeEventListener('focus', this._handleNativeFocus);\n this.input?.removeEventListener('click', this._handleInputClick);\n this.menuEl?.removeEventListener('focusin', this._handleOptionFocus);\n this._form?.removeEventListener('reset', this._handleReset);\n clearTimeout(this._resetTimer);\n }\n\n private _setupOptionHandlers() {\n this.menuEl.querySelectorAll('li:not(.optgroup)').forEach((el) => {\n el.addEventListener('click', this._handleOptionClick);\n el.addEventListener('keydown', this._handleOptionKeydown);\n });\n }\n\n private _removeOptionHandlers() {\n this.menuEl?.querySelectorAll('li:not(.optgroup)').forEach((el) => {\n el.removeEventListener('click', this._handleOptionClick);\n el.removeEventListener('keydown', this._handleOptionKeydown);\n });\n }\n\n _handleSelectChange = () => {\n this._setValueToInput();\n this._setSelectedStates();\n this._syncValidationError();\n };\n\n private _handleInvalid = (e: Event) => {\n if (e.defaultPrevented) return;\n if (!this._validationMessage) {\n this._validationMessage = document.createElement('small');\n this._validationMessage.id = this.input.id + '-error';\n this._validationMessage.className = 'supporting-text';\n this._validationMessage.style.color = 'var(--md-sys-color-error)';\n this.wrapper.append(this._validationMessage);\n this.input.setAttribute('aria-describedby',\n [this.input.getAttribute('aria-describedby'), this._validationMessage.id].filter(Boolean).join(' '));\n }\n this.input.ariaInvalid = 'true';\n this._syncValidationError();\n };\n\n // Native reporting chooses the control; static checks never focus. Wait until\n // reporting finishes so Firefox dismisses its native popup when focus moves.\n private _handleNativeFocus = () => queueMicrotask(() => {\n if (FormSelect.getInstance(this.el) === this && this.el.matches(':focus')) this.input.focus();\n });\n\n private _syncValidationError() {\n if (!this._validationMessage) return;\n if (this.el.willValidate && !this.el.validity.valid) {\n this._validationMessage.textContent = this.el.validationMessage;\n } else this._clearValidationError();\n }\n\n private _clearValidationError() {\n if (!this._validationMessage) return;\n const descriptions = this.input.getAttribute('aria-describedby')?.split(/\\s+/)\n .filter(id => id !== this._validationMessage.id).join(' ');\n if (descriptions) this.input.setAttribute('aria-describedby', descriptions);\n else this.input.removeAttribute('aria-describedby');\n this.input.ariaInvalid = this.el.ariaInvalid;\n this._validationMessage.remove();\n this._validationMessage = null;\n }\n\n private _handleReset = (e: Event) => {\n clearTimeout(this._resetTimer);\n this._resetTimer = setTimeout(() => {\n if (!e.defaultPrevented) {\n this._handleSelectChange();\n this._clearValidationError();\n }\n }, 0);\n };\n\n // Named rather than inline so that _removeEventHandlers can actually detach\n // it - an anonymous listener per option was unremovable.\n _handleOptionKeydown = (e: KeyboardEvent) => {\n if (e.key === ' ' || e.key === 'Enter') this._handleOptionClick(e);\n };\n\n _handleOptionClick = (e: MouseEvent | KeyboardEvent) => {\n e.preventDefault();\n const virtualOption = (e.target as HTMLLIElement).closest('li');\n this._selectOptionElement(virtualOption);\n e.stopPropagation();\n };\n\n private _handleOptionFocus = (e: FocusEvent) => {\n const target = e.target;\n if (!(target instanceof Element)) return;\n const li = target.closest('li[role=\"option\"]');\n if (li?.id) this.input.setAttribute('aria-activedescendant', li.id);\n };\n\n _arraysEqual<T, E>(a: T[], b: (E | T)[]) {\n if (a === b) return true;\n if (a == null || b == null) return false;\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; ++i) if (a[i] !== b[i]) return false;\n return true;\n }\n\n _selectOptionElement(virtualOption: HTMLElement) {\n if (this.el.matches(':disabled')) return;\n if (\n !virtualOption.classList.contains('disabled') &&\n !virtualOption.classList.contains('optgroup')\n ) {\n const value = this._values.find((value) => value.optionEl === virtualOption);\n if (!value || value.el.matches(':disabled')) return;\n const previousSelectedValues = this.getSelectedValues();\n if (this.isMultiple) {\n this._toggleEntryFromArray(value);\n } else {\n this._deselectAll();\n this._selectValue(value);\n }\n this._handleSelectChange();\n const actualSelectedValues = this.getSelectedValues();\n const selectionHasChanged = !this._arraysEqual(previousSelectedValues, actualSelectedValues);\n if (selectionHasChanged)\n this.el.dispatchEvent(\n new Event('change', { bubbles: true, cancelable: true, composed: true })\n );\n }\n if (!this.isMultiple) this.menu?.close();\n }\n\n _handleInputClick = () => {\n if (this.menu && this.menu.isOpen) {\n this._setValueToInput();\n this._setSelectedStates();\n }\n };\n\n _setupMenu() {\n // The DOM already knows which labels belong to this control. Building a\n // selector out of the id instead meant an id with any CSS-special\n // character either threw or matched something else entirely.\n this.labelEl = this.el.labels?.[0] ?? null;\n Array.from(this.el.labels ?? []).forEach(label => {\n this._originalLabels.set(label, { for: label.getAttribute('for'), id: label.getAttribute('id') });\n });\n if (this.labelEl && !this.el.closest('label')) {\n this._labelPlaceholder = document.createComment('');\n this.labelEl.before(this._labelPlaceholder);\n }\n\n this._setupWrapper();\n this._hideNativeSelect();\n if (this.el.matches(':disabled')) this.wrapper.classList.add('disabled');\n\n this.menuEl = document.createElement('menu');\n this.menuEl.id = `select-options-${Utils.guid()}`;\n this.menuEl.setAttribute('popover', 'auto');\n this.menuEl.setAttribute('role', 'listbox');\n this.menuEl.ariaMultiSelectable = this.isMultiple.toString();\n if (this.isMultiple) this.menuEl.classList.add('multiple-select-menu');\n this._buildOptions();\n this.wrapper.append(this.menuEl);\n\n this._buildInput();\n this._buildCaret();\n this._initMenu();\n this._setSelectedStates();\n if (this._labelPlaceholder) this.input.after(this.labelEl);\n }\n\n private _setupWrapper() {\n const parent = this.el.parentElement;\n const reuse =\n parent &&\n parent.matches('.field') &&\n !parent.querySelector(':scope > .hide-select') &&\n !parent.querySelector(':scope > input, :scope > textarea');\n if (reuse) {\n this.wrapper = parent as HTMLDivElement;\n this._createdWrapper = false;\n } else {\n this.wrapper = document.createElement('div');\n this.wrapper.classList.add('field');\n this._createdWrapper = true;\n this.el.before(this.wrapper);\n }\n if (this.options.classes.length > 0) {\n this.wrapper.classList.add(...this.options.classes.split(' ').filter(Boolean));\n }\n }\n\n private _hideNativeSelect() {\n const hiddenDiv = document.createElement('div');\n hiddenDiv.classList.add('hide-select');\n hiddenDiv.ariaHidden = 'true';\n this.el.before(hiddenDiv);\n hiddenDiv.appendChild(this.el);\n if (this._createdWrapper) this.wrapper.append(hiddenDiv);\n }\n\n private _buildInput() {\n this.input = document.createElement('input');\n this.input.id = 'select-input-' + Utils.guid();\n // FormSelect owns this Menu. A later AutoInit must not replace it before\n // FormSelect can destroy its own instance during reinitialization.\n this.input.classList.add('menu-trigger', 'no-autoinit');\n this.input.type = 'text';\n this.input.readOnly = true;\n this.input.setAttribute('data-target', this.menuEl.id);\n this.input.ariaReadOnly = 'true';\n this.input.ariaRequired = this.el.hasAttribute('required').toString();\n this.input.disabled = this.el.matches(':disabled');\n this.input.setAttribute('tabindex', this.nativeTabIndex.toString());\n\n const attrs = this.el.attributes;\n for (let i = 0; i < attrs.length; ++i) {\n const attr = attrs[i];\n if (attr.name.startsWith('aria-')) this.input.setAttribute(attr.name, attr.value);\n }\n\n this.input.setAttribute('role', 'combobox');\n this.input.setAttribute('aria-haspopup', 'listbox');\n this.input.ariaExpanded = 'false';\n this.input.setAttribute('aria-controls', this.menuEl.id);\n this.input.placeholder = ' ';\n\n this._originalLabels.forEach((_, label) => { label.htmlFor = this.input.id; });\n // Moving the first label can change DOM order. Preserve the original naming\n // order without overriding an author's explicit accessible name.\n if (this._labelPlaceholder && this._originalLabels.size > 1 && !this.input.getAttribute('aria-label') && !this.input.getAttribute('aria-labelledby')) {\n this.input.setAttribute('aria-labelledby', Array.from(this._originalLabels.keys(), (label, index) => {\n if (!label.id) label.id = `${this.input.id}-label-${index}`;\n return label.id;\n }).join(' '));\n }\n\n this.wrapper.prepend(this.input);\n this._setValueToInput();\n }\n\n private _buildCaret() {\n const caret = document.createElement('span');\n caret.classList.add('caret');\n caret.setAttribute('aria-hidden', 'true');\n this.wrapper.prepend(caret);\n }\n\n private _initMenu() {\n if (this.el.matches(':disabled')) return;\n const menuOptions = { ...this.options.menuOptions };\n menuOptions.coverTrigger = false;\n const userOnOpenEnd = menuOptions.onOpenEnd;\n const userOnCloseEnd = menuOptions.onCloseEnd;\n menuOptions.onOpenEnd = () => {\n const selectedOption = this.menuEl.querySelector('.selected');\n if (selectedOption) {\n this.menu.focusedIndex = [...selectedOption.parentNode.children].indexOf(selectedOption);\n this.menu._focusFocusedItem();\n if (this.menu.isScrollable) {\n let scrollOffset =\n selectedOption.getBoundingClientRect().top -\n this.menuEl.getBoundingClientRect().top;\n scrollOffset -= this.menuEl.clientHeight / 2;\n this.menuEl.scrollTop = scrollOffset;\n }\n if (selectedOption.id) this.input.setAttribute('aria-activedescendant', selectedOption.id);\n }\n this.input.ariaExpanded = 'true';\n if (typeof userOnOpenEnd === 'function')\n userOnOpenEnd.call(this.menu, this.el);\n };\n menuOptions.onCloseEnd = () => {\n this.input.ariaExpanded = 'false';\n this.input.removeAttribute('aria-activedescendant');\n if (typeof userOnCloseEnd === 'function')\n userOnCloseEnd.call(this.menu, this.el);\n };\n menuOptions.closeOnClick = false;\n this.menu = Menu.init(this.input, menuOptions);\n }\n\n private _nativeOptions(): (HTMLOptGroupElement | HTMLOptionElement)[] {\n return <(HTMLOptGroupElement | HTMLOptionElement)[]>(\n Array.from(this.el.children).filter((el) => ['OPTION', 'OPTGROUP'].includes(el.tagName))\n );\n }\n\n private _buildOptions() {\n this.selectOptions = this._nativeOptions();\n this._values = [];\n this.selectOptions.forEach((realOption) => {\n if (realOption.tagName === 'OPTION') {\n const virtualOption = this._createAndAppendOptionWithIcon(\n realOption,\n this.isMultiple ? 'multiple' : undefined\n );\n this._addOptionToValues(realOption as HTMLOptionElement, virtualOption);\n } else if (realOption.tagName === 'OPTGROUP') {\n const groupId = 'opt-group-' + Utils.guid();\n const groupParent = document.createElement('li');\n groupParent.classList.add('optgroup');\n groupParent.tabIndex = -1;\n groupParent.setAttribute('role', 'group');\n groupParent.setAttribute('aria-labelledby', groupId);\n // Built as nodes, not markup: the optgroup's label attribute is\n // author content that may come from a server, and interpolating it\n // into innerHTML let it close the span and inject an element.\n const groupLabel = document.createElement('span');\n groupLabel.id = groupId;\n groupLabel.setAttribute('role', 'presentation');\n groupLabel.textContent = realOption.getAttribute('label') ?? '';\n groupParent.replaceChildren(groupLabel);\n this.menuEl.append(groupParent);\n\n const groupChildren = [];\n const selectOptions = <HTMLOptionElement[]>(\n Array.from(realOption.children).filter((el) => el.tagName === 'OPTION')\n );\n selectOptions.forEach((child) => {\n const virtualOption = this._createAndAppendOptionWithIcon(child, 'optgroup-option');\n groupChildren.push(virtualOption.id);\n this._addOptionToValues(child, virtualOption);\n });\n groupParent.setAttribute('aria-owns', groupChildren.join(' '));\n }\n });\n }\n\n private _rebuildOptions() {\n this._removeOptionHandlers();\n this.menuEl.replaceChildren();\n this._buildOptions();\n this._setupOptionHandlers();\n this.menu?._makeMenuFocusable();\n }\n\n _addOptionToValues(realOption: HTMLOptionElement, virtualOption: HTMLElement) {\n this._values.push({ el: realOption, optionEl: virtualOption });\n }\n\n _removeMenu() {\n this.wrapper?.querySelector(':scope > .caret')?.remove();\n this.input?.remove();\n this.menuEl?.remove();\n const hide = this.el.parentElement;\n if (hide?.classList.contains('hide-select')) hide.replaceWith(this.el);\n this._originalLabels.forEach((original, label) => {\n for (const name of ['for', 'id'] as const) {\n if (original[name] === null) label.removeAttribute(name);\n else label.setAttribute(name, original[name]);\n }\n });\n this._labelPlaceholder?.replaceWith(this.labelEl);\n if (!this.wrapper) return;\n if (this._createdWrapper) {\n this.wrapper.replaceWith(this.el);\n } else {\n this.wrapper.classList.remove('disabled');\n if (this.options.classes.length > 0) {\n this.wrapper.classList.remove(...this.options.classes.split(' ').filter(Boolean));\n }\n }\n }\n\n _createAndAppendOptionWithIcon(\n realOption: HTMLOptionElement | HTMLOptGroupElement,\n type: string\n ) {\n const li = document.createElement('li');\n li.id = 'select-option-' + Utils.guid();\n li.setAttribute('role', 'option');\n li.tabIndex = 0;\n const disabled = this.el.matches(':disabled') || realOption.matches(':disabled');\n if (disabled) {\n li.classList.add('disabled');\n li.ariaDisabled = 'true';\n li.tabIndex = -1;\n }\n if (type === 'optgroup-option') li.classList.add(type);\n\n // Text / Checkbox. An <option>'s content model is text, so its markup is\n // its text - copying it as nodes rather than through innerHTML keeps it\n // that way instead of handing it back to the parser.\n const optionText = realOption.textContent;\n const span = document.createElement('span');\n if (this.isMultiple && !disabled) {\n const label = document.createElement('label');\n const checkbox = document.createElement('input');\n checkbox.type = 'checkbox';\n checkbox.tabIndex = -1;\n const labelText = document.createElement('span');\n labelText.textContent = optionText;\n label.append(checkbox, labelText);\n span.appendChild(label);\n } else {\n span.textContent = optionText;\n }\n li.appendChild(span);\n\n const iconUrl = realOption.getAttribute('data-icon');\n let imageUrl: URL | undefined;\n if (iconUrl) {\n try {\n const url = new URL(iconUrl, this.el.ownerDocument.baseURI);\n if (['http:', 'https:', 'blob:'].includes(url.protocol) ||\n /^data:image\\/(?:avif|bmp|gif|jpeg|png|svg\\+xml|webp|x-icon)(?:;|,)/i.test(url.href)) {\n imageUrl = url;\n }\n } catch { /* Invalid icons must not prevent selection. */ }\n }\n // filter(Boolean): a doubled or trailing space yields an empty string,\n // and classList.add('') throws.\n const classes = realOption.getAttribute('class')?.split(' ').filter(Boolean);\n if (imageUrl) {\n const img = document.createElement('img');\n if (classes?.length) img.classList.add(...classes);\n img.src = imageUrl.href;\n img.ariaHidden = 'true';\n li.prepend(img);\n }\n this.menuEl.append(li);\n return li;\n }\n\n _selectValue(value: ValueStruct) {\n value.el.selected = true;\n value.optionEl.classList.add('selected');\n value.optionEl.ariaSelected = 'true';\n const checkbox = <HTMLInputElement>value.optionEl.querySelector('input[type=\"checkbox\"]');\n if (checkbox) checkbox.checked = true;\n }\n\n _deselectValue(value: ValueStruct) {\n value.el.selected = false;\n value.optionEl.classList.remove('selected');\n value.optionEl.ariaSelected = 'false';\n const checkbox = <HTMLInputElement>value.optionEl.querySelector('input[type=\"checkbox\"]');\n if (checkbox) checkbox.checked = false;\n }\n\n _deselectAll() {\n this._values.forEach((value) => this._deselectValue(value));\n }\n\n _isValueSelected(value: ValueStruct) {\n return value.el.selected;\n }\n\n _toggleEntryFromArray(value: ValueStruct) {\n if (this._isValueSelected(value)) this._deselectValue(value);\n else this._selectValue(value);\n }\n\n _getSelectedOptions(): HTMLOptionElement[] {\n return Array.from(this.el.selectedOptions);\n }\n\n _setValueToInput() {\n this.input.value = this._getSelectedOptions().map(option => option.textContent.trim()).join(', ');\n }\n\n _setSelectedStates() {\n this._values.forEach((value) => {\n const optionIsSelected = value.el.selected;\n const cb = <HTMLInputElement>value.optionEl.querySelector('input[type=\"checkbox\"]');\n if (cb) cb.checked = optionIsSelected;\n if (optionIsSelected) {\n this._activateOption(this.menuEl, value.optionEl);\n } else {\n value.optionEl.classList.remove('selected');\n value.optionEl.ariaSelected = 'false';\n }\n });\n }\n\n _activateOption(ul: HTMLElement, li: HTMLElement) {\n if (!li) return;\n if (!this.isMultiple)\n ul.querySelectorAll('li.selected').forEach((row) => row.classList.remove('selected'));\n li.classList.add('selected');\n li.ariaSelected = 'true';\n }\n\n getSelectedValues() {\n return this._getSelectedOptions().map((realOption) => realOption.value);\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["value"]
|
|
7
|
+
}
|
|
@@ -1,90 +1,99 @@
|
|
|
1
|
-
import {
|
|
2
|
-
Tooltip
|
|
3
|
-
} from "./chunk-CKQP6P76.mjs";
|
|
4
|
-
import {
|
|
5
|
-
ScrollSpy
|
|
6
|
-
} from "./chunk-QV2JAWIZ.mjs";
|
|
7
1
|
import {
|
|
8
2
|
Tabs
|
|
9
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-UCOE7ZDL.mjs";
|
|
10
4
|
import {
|
|
11
5
|
Timepicker
|
|
12
|
-
} from "./chunk-
|
|
13
|
-
import {
|
|
14
|
-
MessageScroller
|
|
15
|
-
} from "./chunk-CCWDV5CR.mjs";
|
|
6
|
+
} from "./chunk-PO3AXVR3.mjs";
|
|
16
7
|
import {
|
|
17
|
-
|
|
18
|
-
} from "./chunk-
|
|
19
|
-
import {
|
|
20
|
-
NavigationRail
|
|
21
|
-
} from "./chunk-6N2XAEFK.mjs";
|
|
8
|
+
Tooltip
|
|
9
|
+
} from "./chunk-6VATUZC6.mjs";
|
|
22
10
|
import {
|
|
23
11
|
PieChart
|
|
24
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-OWG3LMUL.mjs";
|
|
25
13
|
import {
|
|
26
14
|
Questionnaire
|
|
27
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-33QVDDGR.mjs";
|
|
28
16
|
import {
|
|
29
17
|
RadarChart
|
|
30
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-XAEAEHIX.mjs";
|
|
31
19
|
import {
|
|
32
20
|
RadialChart
|
|
33
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-UNCRDLP6.mjs";
|
|
22
|
+
import {
|
|
23
|
+
ScrollSpy
|
|
24
|
+
} from "./chunk-FM5CZOUB.mjs";
|
|
25
|
+
import {
|
|
26
|
+
Lightbox
|
|
27
|
+
} from "./chunk-SFI2U4YW.mjs";
|
|
28
|
+
import {
|
|
29
|
+
MessageScroller
|
|
30
|
+
} from "./chunk-LQWUDNHZ.mjs";
|
|
31
|
+
import {
|
|
32
|
+
MixedChart
|
|
33
|
+
} from "./chunk-VM4FTS7L.mjs";
|
|
34
|
+
import {
|
|
35
|
+
NavigationRail
|
|
36
|
+
} from "./chunk-UBRZZWRA.mjs";
|
|
37
|
+
import {
|
|
38
|
+
Particles
|
|
39
|
+
} from "./chunk-C6CHEWYP.mjs";
|
|
34
40
|
import {
|
|
35
41
|
CommandPalette
|
|
36
|
-
} from "./chunk-
|
|
42
|
+
} from "./chunk-UETTGDLI.mjs";
|
|
43
|
+
import {
|
|
44
|
+
Confetti
|
|
45
|
+
} from "./chunk-KUFHW3DS.mjs";
|
|
37
46
|
import {
|
|
38
47
|
Datepicker
|
|
39
|
-
} from "./chunk-
|
|
48
|
+
} from "./chunk-GJL6GCIU.mjs";
|
|
40
49
|
import {
|
|
41
50
|
FormSelect
|
|
42
|
-
} from "./chunk-
|
|
51
|
+
} from "./chunk-WDK4T63U.mjs";
|
|
43
52
|
import {
|
|
44
53
|
EXPANDING_CARD_SELECTOR,
|
|
45
54
|
ExpandingCard
|
|
46
|
-
} from "./chunk-
|
|
55
|
+
} from "./chunk-DXGRXYYL.mjs";
|
|
47
56
|
import {
|
|
48
57
|
HeatmapChart
|
|
49
|
-
} from "./chunk-
|
|
58
|
+
} from "./chunk-VGNYF6FB.mjs";
|
|
50
59
|
import {
|
|
51
|
-
|
|
52
|
-
} from "./chunk-
|
|
60
|
+
Keypad
|
|
61
|
+
} from "./chunk-K3HZMFMD.mjs";
|
|
53
62
|
import {
|
|
54
63
|
BarChart
|
|
55
|
-
} from "./chunk-
|
|
64
|
+
} from "./chunk-CK2XCICY.mjs";
|
|
56
65
|
import {
|
|
57
66
|
ColumnChart
|
|
58
|
-
} from "./chunk-
|
|
67
|
+
} from "./chunk-45FER6RI.mjs";
|
|
59
68
|
import {
|
|
60
69
|
LineChart
|
|
61
|
-
} from "./chunk-
|
|
70
|
+
} from "./chunk-TCCA2HDG.mjs";
|
|
62
71
|
import {
|
|
63
72
|
ButtonGroup
|
|
64
|
-
} from "./chunk-
|
|
73
|
+
} from "./chunk-L27Q6ZMI.mjs";
|
|
65
74
|
import {
|
|
66
75
|
FloatingActionButton
|
|
67
|
-
} from "./chunk-
|
|
76
|
+
} from "./chunk-PDG64UHF.mjs";
|
|
68
77
|
import {
|
|
69
78
|
CARDS_SELECTOR,
|
|
70
79
|
Cards,
|
|
71
80
|
isCardReveal
|
|
72
|
-
} from "./chunk-
|
|
81
|
+
} from "./chunk-TSZYSW7F.mjs";
|
|
73
82
|
import {
|
|
74
83
|
Carousel
|
|
75
|
-
} from "./chunk-
|
|
84
|
+
} from "./chunk-KVJAVDBC.mjs";
|
|
76
85
|
import {
|
|
77
86
|
Chips
|
|
78
|
-
} from "./chunk-
|
|
87
|
+
} from "./chunk-CXXM2L4F.mjs";
|
|
79
88
|
import {
|
|
80
89
|
Autocomplete
|
|
81
|
-
} from "./chunk-
|
|
90
|
+
} from "./chunk-ZX6M7SWO.mjs";
|
|
82
91
|
import {
|
|
83
92
|
Menu
|
|
84
|
-
} from "./chunk-
|
|
93
|
+
} from "./chunk-NUHMOAOY.mjs";
|
|
85
94
|
import {
|
|
86
95
|
AppBar
|
|
87
|
-
} from "./chunk-
|
|
96
|
+
} from "./chunk-UAZSDUVP.mjs";
|
|
88
97
|
|
|
89
98
|
// src/ts/components/registry.ts
|
|
90
99
|
var AUTO_INIT_COMPONENTS = {
|
|
@@ -109,6 +118,9 @@ var AUTO_INIT_COMPONENTS = {
|
|
|
109
118
|
},
|
|
110
119
|
Carousel: { component: Carousel, selector: ".carousel" },
|
|
111
120
|
Chips: { component: Chips, selector: ".chips" },
|
|
121
|
+
Confetti: { component: Confetti, selector: ".confetti" },
|
|
122
|
+
Particles: { component: Particles, selector: "canvas.particles" },
|
|
123
|
+
Keypad: { component: Keypad, selector: ".keypad, .keyboard" },
|
|
112
124
|
ColumnChart: { component: ColumnChart, selector: ".column-chart" },
|
|
113
125
|
BarChart: { component: BarChart, selector: ".bar-chart" },
|
|
114
126
|
PieChart: { component: PieChart, selector: ".pie-chart" },
|
|
@@ -170,4 +182,4 @@ export {
|
|
|
170
182
|
AUTO_INIT_COMPONENTS,
|
|
171
183
|
AutoInit
|
|
172
184
|
};
|
|
173
|
-
//# sourceMappingURL=chunk-
|
|
185
|
+
//# sourceMappingURL=chunk-WOCCTVUF.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/ts/components/registry.ts"],
|
|
4
|
+
"sourcesContent": ["import { InitElements, InitElement } from \"../core/component\";\nimport * as Components from \"./index\";\nimport { CARDS_SELECTOR, isCardReveal } from \"./cards\";\nimport { EXPANDING_CARD_SELECTOR } from \"./expandingCard\";\n\n/**\n * The components `AutoInit()` starts, in initialization order, with the\n * selector each one claims.\n *\n * This table is the single source of truth: the options type below and the\n * init calls in `AutoInit()` are both derived from it, so wiring up a new\n * auto-initialized component means adding one line here (plus its export in\n * ./index.ts) - not four hand-synchronized edits that fail silently when one\n * is forgotten.\n *\n * A component that should only ever be constructed explicitly (Snackbar,\n * CharacterCounter, Range, ...) simply stays out of this table.\n */\nexport const AUTO_INIT_COMPONENTS = {\n AppBar: {\n component: Components.AppBar,\n selector:\n \"header.medium, header.large, header:has(> :is(nav:not(.tabs, .navigation-bar, .navigation-rail), .bar) > :is(.search-bar, .searchbar))\",\n },\n Autocomplete: {\n component: Components.Autocomplete,\n selector: \".autocomplete\",\n },\n ButtonGroup: {\n component: Components.ButtonGroup,\n selector: \".button-group\",\n },\n // Shared with Cards.Init() - see CARDS_SELECTOR. This entry used to read\n // '.cards', which no card markup uses.\n Cards: { component: Components.Cards, selector: CARDS_SELECTOR, filter: isCardReveal },\n ExpandingCard: {\n component: Components.ExpandingCard,\n selector: EXPANDING_CARD_SELECTOR,\n },\n Carousel: { component: Components.Carousel, selector: \".carousel\" },\n Chips: { component: Components.Chips, selector: \".chips\" },\n Confetti: { component: Components.Confetti, selector: \".confetti\" },\n Particles: { component: Components.Particles, selector: \"canvas.particles\" },\n Keypad: { component: Components.Keypad, selector: \".keypad, .keyboard\" },\n ColumnChart: { component: Components.ColumnChart, selector: \".column-chart\" },\n BarChart: { component: Components.BarChart, selector: \".bar-chart\" },\n PieChart: { component: Components.PieChart, selector: \".pie-chart\" },\n HeatmapChart: { component: Components.HeatmapChart, selector: \".heatmap-chart\" },\n RadarChart: { component: Components.RadarChart, selector: \".radar-chart\" },\n RadialChart: { component: Components.RadialChart, selector: \".radial-chart\" },\n MixedChart: { component: Components.MixedChart, selector: \".mixed-chart\" },\n CommandPalette: {\n component: Components.CommandPalette,\n selector: \"dialog.command-palette\",\n },\n Questionnaire: {\n component: Components.Questionnaire,\n selector: \"form.questionnaire\",\n },\n Datepicker: {\n component: Components.Datepicker,\n selector: \".datepicker, .date-picker\",\n },\n LineChart: { component: Components.LineChart, selector: \".line-chart\" },\n Menu: { component: Components.Menu, selector: \".menu-trigger\" },\n MessageScroller: {\n component: Components.MessageScroller,\n selector: \".message-scroller\",\n },\n Lightbox: { component: Components.Lightbox, selector: \".lightboxed\" },\n ScrollSpy: { component: Components.ScrollSpy, selector: \".scrollspy\" },\n FormSelect: { component: Components.FormSelect, selector: \"select\" },\n NavigationRail: {\n component: Components.NavigationRail,\n selector: \".navigation-rail\",\n },\n Tabs: { component: Components.Tabs, selector: \".tabs\" },\n Timepicker: {\n component: Components.Timepicker,\n selector: \".timepicker, .time-picker\",\n },\n Tooltip: { component: Components.Tooltip, selector: \".tooltipped\" },\n FloatingActionButton: {\n component: Components.FloatingActionButton,\n selector: \".fab-menu\",\n },\n};\n\ntype Registry = typeof AUTO_INIT_COMPONENTS;\n\n/**\n * Per-component options accepted by {@link AutoInit}, derived from the table\n * above - each key takes that component's own options type.\n */\nexport type AutoInitOptions = {\n [K in keyof Registry]?: Partial<\n InstanceType<Registry[K][\"component\"]>[\"options\"]\n >;\n};\n\n/** The shape every entry in the table satisfies; see the cast in AutoInit. */\ntype AutoInitable = {\n init(els: InitElement | InitElements<InitElement>, options: Partial<object>): unknown;\n};\n\ntype AutoInitEntry = {\n component: AutoInitable;\n selector: string;\n filter?: (el: Element) => boolean;\n};\n\n/**\n * Automatically initialize components.\n * @param context Root element to initialize. Defaults to `document.body`.\n * @param options Options for each component.\n */\nexport function AutoInit(\n context: HTMLElement = document.body,\n options?: Partial<AutoInitOptions>,\n) {\n for (const name of Object.keys(AUTO_INIT_COMPONENTS) as (keyof Registry)[]) {\n const { component, selector, filter } = AUTO_INIT_COMPONENTS[\n name\n ] as unknown as AutoInitEntry;\n // `:is()` so that `:not(.no-autoinit)` applies to the whole selector. A\n // bare `${selector}:not(...)` binds the negation to the last alternative\n // only, which would silently break the opt-out for any comma-separated\n // entry (Cards is the first).\n const els = context.querySelectorAll(`:is(${selector}):not(.no-autoinit)`);\n // Each component's static `init` is overloaded; indexing the table widens\n // it to a union TypeScript cannot call, so narrow it once, here.\n if (filter) {\n els.forEach((el) => {\n if (filter(el)) component.init(el, options?.[name] ?? {});\n });\n } else {\n component.init(els, options?.[name] ?? {});\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Utils
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-M372EDXD.mjs";
|
|
4
4
|
|
|
5
5
|
// src/ts/behaviors/sheetDrag.ts
|
|
6
6
|
var DISMISS_DISTANCE = 96;
|
|
7
7
|
var DISMISS_VELOCITY = 0.5;
|
|
8
8
|
var FLICK_TIMEOUT = 100;
|
|
9
9
|
var DRAG_SLOP = 4;
|
|
10
|
+
var installed = /* @__PURE__ */ new Set();
|
|
10
11
|
function installSheetDrag(config) {
|
|
12
|
+
if (installed.has(config.selector)) return;
|
|
13
|
+
installed.add(config.selector);
|
|
11
14
|
const coord = (event) => config.axis === "x" ? event.clientX : event.clientY;
|
|
12
15
|
let observer;
|
|
13
16
|
let drag = null;
|
|
@@ -26,21 +29,15 @@ function installSheetDrag(config) {
|
|
|
26
29
|
onCancel();
|
|
27
30
|
config.onPress?.();
|
|
28
31
|
const dialog = sheetFor(event.target);
|
|
29
|
-
if (!dialog?.open)
|
|
30
|
-
drag = null;
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
if (!config.inHandle(event, dialog)) {
|
|
34
|
-
drag = null;
|
|
35
|
-
return;
|
|
36
|
-
}
|
|
32
|
+
if (!dialog?.open || !config.inHandle(event, dialog)) return;
|
|
37
33
|
dialog.style.transition = "none";
|
|
34
|
+
const at = coord(event);
|
|
38
35
|
drag = {
|
|
39
36
|
dialog,
|
|
40
37
|
pointerId: event.pointerId,
|
|
41
38
|
direction: config.direction(dialog),
|
|
42
|
-
start:
|
|
43
|
-
last:
|
|
39
|
+
start: at,
|
|
40
|
+
last: at,
|
|
44
41
|
lastT: Date.now(),
|
|
45
42
|
velocity: 0,
|
|
46
43
|
shift: 0
|
|
@@ -53,12 +50,13 @@ function installSheetDrag(config) {
|
|
|
53
50
|
onCancel();
|
|
54
51
|
return;
|
|
55
52
|
}
|
|
56
|
-
const
|
|
53
|
+
const at = coord(event);
|
|
54
|
+
const delta = at - drag.start;
|
|
57
55
|
drag.shift = drag.direction === 1 ? Math.max(0, delta) : Math.min(0, delta);
|
|
58
|
-
if (
|
|
56
|
+
if (at !== drag.last) {
|
|
59
57
|
const now = Date.now();
|
|
60
|
-
drag.velocity = (
|
|
61
|
-
drag.last =
|
|
58
|
+
drag.velocity = (at - drag.last) / Math.max(1, now - drag.lastT);
|
|
59
|
+
drag.last = at;
|
|
62
60
|
drag.lastT = now;
|
|
63
61
|
}
|
|
64
62
|
drag.dialog.style.setProperty(config.property, `${drag.shift}px`);
|
|
@@ -106,4 +104,4 @@ function installSheetDrag(config) {
|
|
|
106
104
|
export {
|
|
107
105
|
installSheetDrag
|
|
108
106
|
};
|
|
109
|
-
//# sourceMappingURL=chunk-
|
|
107
|
+
//# sourceMappingURL=chunk-WQYN5L4E.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/ts/behaviors/sheetDrag.ts"],
|
|
4
|
+
"sourcesContent": ["import { Utils } from '../core/utils';\n\n/**\n * Drag-to-dismiss, shared by the bottom sheet and the side sheet.\n *\n * The two were the same state machine written twice on different axes - same\n * dismissal distance, same flick velocity, same transition suppression, same\n * pointer bookkeeping - so a fix to one could land without reaching the other.\n * What actually differs between them is stated as configuration below.\n *\n * Light-dismiss on the scrim is not here; it stays with `Dialogs`.\n */\nexport interface SheetDragConfig {\n /** Which dialogs this drag applies to. */\n selector: string;\n /** The axis the sheet travels on. */\n axis: 'x' | 'y';\n /** The custom property carrying the live drag offset. */\n property: string;\n /**\n * `1` when the sheet dismisses toward increasing coordinates (downward, or\n * rightward for an end-docked side sheet), `-1` when it dismisses toward\n * decreasing ones. A function rather than a constant because a side sheet's\n * direction depends on which edge each individual sheet is docked to.\n */\n direction: (dialog: HTMLDialogElement) => 1 | -1;\n /** Whether a press at this point landed on the sheet's drag handle. */\n inHandle: (event: PointerEvent, dialog: HTMLDialogElement) => boolean;\n /**\n * Called on primary `pointerdown`, after clearing the previous drag. The\n * bottom sheet clears its dragged flag here so a sequence abandoned without\n * a `pointerup` cannot leave the flag set and swallow the next tap.\n */\n onPress?: () => void;\n /** Called when a drag ends, with whether the pointer actually moved. */\n onRelease?: (dragged: boolean) => void;\n}\n\n/** Past this the sheet dismisses rather than snapping back, in pixels. */\nconst DISMISS_DISTANCE = 96;\n/** Past this a flick dismisses whatever the distance, in pixels per millisecond. */\nconst DISMISS_VELOCITY = 0.5;\n/** Ignore a flick after the pointer has rested for this many milliseconds. */\nconst FLICK_TIMEOUT = 100;\n/** Past this the pointer was dragging, not tapping. Hand jitter, in pixels. */\nconst DRAG_SLOP = 4;\n\n/** Selectors whose drag is already installed, so a second `Init()` is a no-op. */\nconst installed = new Set<string>();\n\n/**\n * Register one sheet kind's drag handlers on the document. Called once per kind\n * at import time; there is nothing to tear down.\n */\nexport function installSheetDrag(config: SheetDragConfig): void {\n if (installed.has(config.selector)) return;\n installed.add(config.selector);\n const coord = (event: PointerEvent) => (config.axis === 'x' ? event.clientX : event.clientY);\n let observer: MutationObserver;\n\n let drag: {\n dialog: HTMLDialogElement;\n pointerId: number;\n direction: 1 | -1;\n start: number;\n last: number;\n lastT: number;\n velocity: number;\n shift: number;\n } | null = null;\n\n const sheetFor = (target: EventTarget | null): HTMLDialogElement | null => {\n if (!(target instanceof Element)) return null;\n const dialog = target.closest(config.selector);\n return dialog instanceof HTMLDialogElement ? dialog : null;\n };\n\n const reset = (dialog: HTMLDialogElement) => {\n dialog.style.transition = '';\n dialog.style.setProperty(config.property, '0px');\n };\n\n const onDown = (event: PointerEvent) => {\n // A press that is not the primary pointer is ignored without disturbing a\n // drag already in flight - a second finger must not abort the first one.\n // A press that lands off the sheet or off its handle does clear it.\n if (!event.isPrimary) return;\n if (event.pointerType === 'mouse' && event.button !== 0) return;\n onCancel();\n config.onPress?.();\n const dialog = sheetFor(event.target);\n if (!dialog?.open || !config.inHandle(event, dialog)) return;\n dialog.style.transition = 'none';\n const at = coord(event);\n drag = {\n dialog,\n pointerId: event.pointerId,\n direction: config.direction(dialog),\n start: at,\n last: at,\n lastT: Date.now(),\n velocity: 0,\n shift: 0\n };\n observer.observe(document, { childList: true, subtree: true, attributes: true, attributeFilter: ['open'], attributeOldValue: true });\n };\n\n const onMove = (event: PointerEvent) => {\n if (!drag || drag.pointerId !== event.pointerId) return;\n if (!drag.dialog.open || !drag.dialog.isConnected) {\n onCancel();\n return;\n }\n const at = coord(event);\n const delta = at - drag.start;\n // Only movement toward dismissal counts; dragging the other way is a no-op\n // rather than a sheet that lifts off its edge.\n drag.shift = drag.direction === 1 ? Math.max(0, delta) : Math.min(0, delta);\n if (at !== drag.last) {\n const now = Date.now();\n drag.velocity = (at - drag.last) / Math.max(1, now - drag.lastT);\n drag.last = at;\n drag.lastT = now;\n }\n drag.dialog.style.setProperty(config.property, `${drag.shift}px`);\n };\n\n const onUp = (event: PointerEvent) => {\n const held = drag;\n if (!held || held.pointerId !== event.pointerId) return;\n if (!held.dialog.open || !held.dialog.isConnected) {\n onCancel();\n return;\n }\n onMove(event);\n drag = null;\n observer.disconnect();\n // Not `reset()`, though it looks like it: the two halves belong on either\n // side of close(). The transition has to be back before the sheet closes,\n // so the dismissal animates; the shift has to clear after, or a snap-back\n // would jump to zero before the transition could carry it there.\n held.dialog.style.transition = '';\n const velocity = Date.now() - held.lastT < FLICK_TIMEOUT ? held.velocity : 0;\n const dragged = Math.abs(held.shift) > DRAG_SLOP;\n config.onRelease?.(dragged);\n const dismiss = dragged &&\n (held.direction === 1\n ? held.shift > DISMISS_DISTANCE || velocity > DISMISS_VELOCITY\n : held.shift < -DISMISS_DISTANCE || velocity < -DISMISS_VELOCITY);\n if (dismiss && held.dialog.open) held.dialog.close();\n held.dialog.style.setProperty(config.property, '0px');\n };\n\n const onCancel = (event?: PointerEvent) => {\n if (event && drag?.pointerId !== event.pointerId) return;\n observer.disconnect();\n config.onRelease?.(false);\n const held = drag;\n drag = null;\n if (held) reset(held.dialog);\n };\n\n Utils.onDocumentReady(() => {\n observer = new MutationObserver(records => {\n const dialog = drag?.dialog;\n if (dialog && (!dialog.open || !dialog.isConnected || records.some(record =>\n (record.type === 'attributes' && record.target === dialog && record.oldValue === null) ||\n [...record.removedNodes].some(node => node.contains(dialog))\n ))) onCancel();\n });\n document.addEventListener('pointerdown', onDown, { passive: true });\n document.addEventListener('pointermove', onMove, { passive: true });\n document.addEventListener('pointerup', onUp, { passive: true });\n document.addEventListener('pointercancel', onCancel, { passive: true });\n });\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
installSheetDrag
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-WQYN5L4E.mjs";
|
|
4
4
|
|
|
5
5
|
// src/ts/behaviors/sideSheets.ts
|
|
6
6
|
var startDocked = (dialog) => dialog.classList.contains("left") || dialog.classList.contains("left-sheet") || dialog.classList.contains("start");
|
|
@@ -25,4 +25,4 @@ var SideSheets = class {
|
|
|
25
25
|
export {
|
|
26
26
|
SideSheets
|
|
27
27
|
};
|
|
28
|
-
//# sourceMappingURL=chunk-
|
|
28
|
+
//# sourceMappingURL=chunk-X4ISMKE2.mjs.map
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
|
-
COLORS,
|
|
3
2
|
LineChart,
|
|
3
|
+
polarPoint,
|
|
4
|
+
seriesColor,
|
|
4
5
|
svgNode
|
|
5
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-TCCA2HDG.mjs";
|
|
6
7
|
|
|
7
8
|
// src/ts/components/radarChart.ts
|
|
8
9
|
var RINGS = 4;
|
|
@@ -59,10 +60,7 @@ var RadarChart = class extends LineChart {
|
|
|
59
60
|
* the labels round it are HTML.
|
|
60
61
|
*/
|
|
61
62
|
_draw() {
|
|
62
|
-
const at = (index, share2) =>
|
|
63
|
-
const angle = this._turn(index) * 2 * Math.PI;
|
|
64
|
-
return `${(50 * share2 * Math.sin(angle)).toFixed(3)},${(-50 * share2 * Math.cos(angle)).toFixed(3)}`;
|
|
65
|
-
};
|
|
63
|
+
const at = (index, share2) => polarPoint(this._turn(index), 50 * share2);
|
|
66
64
|
const share = (value) => Math.min(1, Math.max(0, 1 - this._y(value) / 100));
|
|
67
65
|
const rows = this.labels.map((_, i) => i);
|
|
68
66
|
const ring = (r) => `M${rows.map((i) => at(i, r)).join("L")}Z`;
|
|
@@ -75,7 +73,7 @@ var RadarChart = class extends LineChart {
|
|
|
75
73
|
this.series.forEach((series, s) => {
|
|
76
74
|
const group = svgNode("g", {
|
|
77
75
|
class: `radar-chart-series ${series.className}`.trim(),
|
|
78
|
-
"data-series":
|
|
76
|
+
"data-series": seriesColor(s)
|
|
79
77
|
});
|
|
80
78
|
const drawn = rows.filter((i) => series.values[i] !== null);
|
|
81
79
|
const corners = drawn.map((i) => at(i, share(series.values[i])));
|
|
@@ -102,4 +100,4 @@ var RadarChart = class extends LineChart {
|
|
|
102
100
|
export {
|
|
103
101
|
RadarChart
|
|
104
102
|
};
|
|
105
|
-
//# sourceMappingURL=chunk-
|
|
103
|
+
//# sourceMappingURL=chunk-XAEAEHIX.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/ts/components/radarChart.ts"],
|
|
4
|
+
"sourcesContent": ["import { InitElements, InitElement } from '../core/component';\nimport { LineChart, LineChartOptions, polarPoint, seriesColor, svgNode as node } from './lineChart';\n\nexport type RadarChartOptions = LineChartOptions;\n\n/** Grid rings, evenly spaced from the middle to the rim. */\nconst RINGS = 4;\n\n/**\n * Radar chart. It reads its <table> like LineChart, but each row is a spoke,\n * clockwise from the top, and each value column is a series drawn as a\n * shape joining its values on the spokes, from zero in the middle to the\n * scale's top at the rim. The row labels sit round the rim.\n *\n * Re-run `RadarChart.init(el)` after changing the table.\n */\nexport class RadarChart extends LineChart {\n protected get _type() {\n return 'radar-chart';\n }\n\n protected get _key() {\n return 'Expressive_RadarChart';\n }\n\n /** The scale starts at zero, the middle, so shapes compare by size. */\n protected get _fromZero() {\n return true;\n }\n\n protected get _circular() {\n return true;\n }\n\n static init(el: HTMLElement, options?: Partial<RadarChartOptions>): RadarChart;\n static init(els: InitElements<InitElement>, options?: Partial<RadarChartOptions>): RadarChart[];\n static init(\n els: HTMLElement | InitElements<InitElement>,\n options: Partial<RadarChartOptions> = {}\n ): RadarChart | RadarChart[] {\n return super.init(els as HTMLElement, options) as RadarChart | RadarChart[];\n }\n\n static getInstance(el: HTMLElement): RadarChart {\n return el['Expressive_RadarChart'];\n }\n\n /**\n * The cursor is a spoke turned by --turn, and the tooltip sits past its\n * tip. LineChart's points on the spoke keep their top, a share of the\n * radius, which stops at the rim and the middle like the shapes.\n */\n protected _place(index: number) {\n for (const dot of this._cursor.children as HTMLCollectionOf<HTMLElement>) {\n dot.style.top = `${Math.min(100, Math.max(0, parseFloat(dot.style.top)))}%`;\n }\n const turn = this._turn(index);\n this._cursor.style.setProperty('--turn', String(turn));\n this._tooltip.style.setProperty('--turn', String(turn));\n // On the right half it opens leftwards, over the chart.\n this._tooltip.classList.toggle('end', turn > 0 && turn < 0.5);\n }\n\n /** A row's spoke as a fraction of a turn clockwise from the top. */\n private _turn(index: number) {\n return index / this.labels.length;\n }\n\n /** Only the legend; the labels go round the rim in _draw. */\n protected _guides(): Element[] {\n return this._legend();\n }\n\n /** The nearest spoke to the pointer, by its angle from the middle. */\n protected _indexAt(e: PointerEvent) {\n const [turn] = this._polarAt(e);\n return Math.round(turn * this.labels.length) % this.labels.length;\n }\n\n /**\n * An SVG in a -50 to 50 box: the rings and spokes of the grid, then each\n * series' shape, with its points for .points. The rim is the box's edge;\n * the labels round it are HTML.\n */\n protected _draw(): Element {\n const at = (index: number, share: number) => polarPoint(this._turn(index), 50 * share);\n // The rim is the scale's top, so _y is the distance in from the rim.\n const share = (value: number) => Math.min(1, Math.max(0, 1 - this._y(value) / 100));\n const rows = this.labels.map((_, i) => i);\n const ring = (r: number) => `M${rows.map((i) => at(i, r)).join('L')}Z`;\n\n const svg = node('svg', { viewBox: '-50 -50 100 100', 'aria-hidden': 'true', focusable: 'false' });\n svg.append(node('path', {\n class: 'radar-chart-grid',\n d: Array.from({ length: RINGS }, (_, r) => ring((r + 1) / RINGS)).join('')\n + rows.map((i) => `M0,0L${at(i, 1)}`).join('')\n }));\n const points = this.el.classList.contains('points');\n this.series.forEach((series, s) => {\n const group = node('g', {\n class: `radar-chart-series ${series.className}`.trim(),\n 'data-series': seriesColor(s)\n });\n // ponytail: a gap joins the spokes either side of it; mark gaps if charts need them.\n const drawn = rows.filter((i) => series.values[i] !== null);\n const corners = drawn.map((i) => at(i, share(series.values[i]!)));\n group.append(node('path', { class: 'radar-chart-shape', d: corners.length ? `M${corners.join('L')}Z` : '' }));\n // Round caps on zero-length lines, so CSS sizes the points in pixels.\n if (points) group.append(node('path', { class: 'radar-chart-points', d: corners.map((c) => `M${c}h0`).join('') }));\n svg.append(group);\n });\n\n const labels = document.createElement('ol');\n labels.className = 'radar-chart-axes';\n labels.setAttribute('aria-hidden', 'true');\n this.labels.forEach((text, i) => {\n const li = document.createElement('li');\n li.textContent = text;\n li.style.setProperty('--turn', String(this._turn(i)));\n labels.append(li);\n });\n\n const web = document.createElement('div');\n web.className = 'radar-chart-web';\n web.append(svg, labels);\n return web;\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["share"]
|
|
7
|
+
}
|