@expressivecss/expressive 0.14.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 +88 -1
- package/README.md +1 -1
- package/dist/css/expressive.css +200 -241
- 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-4KMNFIFZ.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-GIW4K4SE.mjs → chunk-5CEAOLUA.mjs} +11 -10
- package/dist/js/chunks/{chunk-GIW4K4SE.mjs.map → chunk-5CEAOLUA.mjs.map} +2 -2
- package/dist/js/chunks/{chunk-LRZMJZ3T.mjs → chunk-6VATUZC6.mjs} +10 -6
- 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-CUQPB25U.mjs → chunk-AIURVCG6.mjs} +3 -3
- package/dist/js/chunks/{chunk-KHV6DZXX.mjs → chunk-BGZLF6JZ.mjs} +16 -16
- package/dist/js/chunks/chunk-BGZLF6JZ.mjs.map +7 -0
- package/dist/js/chunks/{chunk-BG6ZRB5H.mjs → chunk-C6CHEWYP.mjs} +2 -2
- package/dist/js/chunks/{chunk-GVGT6MIU.mjs → chunk-CK2XCICY.mjs} +2 -2
- package/dist/js/chunks/{chunk-KY6U46SM.mjs → chunk-CXXM2L4F.mjs} +8 -9
- package/dist/js/chunks/chunk-CXXM2L4F.mjs.map +7 -0
- package/dist/js/chunks/{chunk-Z2NRKI7R.mjs → chunk-DXGRXYYL.mjs} +25 -37
- package/dist/js/chunks/chunk-DXGRXYYL.mjs.map +7 -0
- package/dist/js/chunks/{chunk-MZ6Z24BX.mjs → chunk-FM5CZOUB.mjs} +3 -7
- package/dist/js/chunks/{chunk-MZ6Z24BX.mjs.map → chunk-FM5CZOUB.mjs.map} +2 -2
- package/dist/js/chunks/{chunk-5HQSGDZ5.mjs → chunk-GJL6GCIU.mjs} +34 -55
- 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-TBM3FT7G.mjs → chunk-KHXZ2A4K.mjs} +12 -15
- package/dist/js/chunks/{chunk-TBM3FT7G.mjs.map → chunk-KHXZ2A4K.mjs.map} +2 -2
- package/dist/js/chunks/chunk-KQACNQ22.mjs +7 -0
- package/dist/js/chunks/{chunk-KBNN3QDH.mjs.map → chunk-KQACNQ22.mjs.map} +1 -1
- package/dist/js/chunks/{chunk-UEXCIMJZ.mjs → chunk-KUFHW3DS.mjs} +2 -2
- package/dist/js/chunks/{chunk-A7ALMYUR.mjs → chunk-KVJAVDBC.mjs} +7 -15
- 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-NS2UMNZV.mjs → chunk-LQWUDNHZ.mjs} +3 -3
- package/dist/js/chunks/{chunk-MNPROCZF.mjs → chunk-M372EDXD.mjs} +4 -10
- package/dist/js/chunks/chunk-M372EDXD.mjs.map +7 -0
- package/dist/js/chunks/{chunk-YMSXJON6.mjs → chunk-M3MURWMB.mjs} +15 -12
- package/dist/js/chunks/{chunk-YMSXJON6.mjs.map → chunk-M3MURWMB.mjs.map} +2 -2
- package/dist/js/chunks/{chunk-JIDMQGK6.mjs → chunk-NUHMOAOY.mjs} +18 -33
- package/dist/js/chunks/chunk-NUHMOAOY.mjs.map +7 -0
- package/dist/js/chunks/{chunk-VGZSAFTX.mjs → chunk-OWG3LMUL.mjs} +7 -11
- 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-ZAS25YFD.mjs → chunk-PDG64UHF.mjs} +3 -3
- package/dist/js/chunks/{chunk-QERLECVU.mjs → chunk-PO3AXVR3.mjs} +38 -64
- package/dist/js/chunks/chunk-PO3AXVR3.mjs.map +7 -0
- package/dist/js/chunks/{chunk-ILP3PDTL.mjs → chunk-QYGK36OG.mjs} +7 -13
- package/dist/js/chunks/chunk-QYGK36OG.mjs.map +7 -0
- package/dist/js/chunks/{chunk-S3XDFGSZ.mjs → chunk-SFI2U4YW.mjs} +28 -44
- package/dist/js/chunks/chunk-SFI2U4YW.mjs.map +7 -0
- package/dist/js/chunks/{chunk-FS7XY3HT.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-PM655FXL.mjs → chunk-TSZYSW7F.mjs} +4 -4
- package/dist/js/chunks/{chunk-PM655FXL.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-5BKHWHYY.mjs → chunk-UCOE7ZDL.mjs} +41 -46
- package/dist/js/chunks/chunk-UCOE7ZDL.mjs.map +7 -0
- package/dist/js/chunks/{chunk-4TKTLGEM.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-GUB3TNO2.mjs → chunk-VGNYF6FB.mjs} +3 -6
- package/dist/js/chunks/{chunk-GUB3TNO2.mjs.map → chunk-VGNYF6FB.mjs.map} +2 -2
- package/dist/js/chunks/{chunk-X7OCHZVF.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-3GVFZ4XO.mjs → chunk-WDK4T63U.mjs} +8 -11
- package/dist/js/chunks/chunk-WDK4T63U.mjs.map +7 -0
- package/dist/js/chunks/{chunk-GZKEFWPM.mjs → chunk-WOCCTVUF.mjs} +38 -34
- package/dist/js/chunks/chunk-WOCCTVUF.mjs.map +7 -0
- package/dist/js/chunks/{chunk-QJABDLSD.mjs → chunk-WQYN5L4E.mjs} +11 -16
- package/dist/js/chunks/chunk-WQYN5L4E.mjs.map +7 -0
- package/dist/js/chunks/{chunk-DAIU5SLG.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-4HZMB7LI.mjs → chunk-ZX6M7SWO.mjs} +24 -24
- package/dist/js/chunks/chunk-ZX6M7SWO.mjs.map +7 -0
- package/dist/js/expressive.cjs +484 -507
- package/dist/js/expressive.cjs.map +4 -4
- package/dist/js/expressive.js +484 -507
- 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 +54 -50
- 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 +2 -2
- 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 +47 -43
- 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 +3 -3
- 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 +2 -2
- 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 -40
- 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 +54 -50
- package/dist/types/components/autocomplete.d.ts +1 -0
- package/dist/types/components/datepicker.d.ts +3 -4
- package/dist/types/components/expandingCard.d.ts +2 -0
- package/dist/types/components/index.d.ts +1 -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/menu.d.ts +1 -0
- package/dist/types/components/radialChart.d.ts +0 -1
- package/dist/types/components/registry.d.ts +4 -0
- package/dist/types/components/slider.d.ts +2 -0
- package/dist/types/components/snackbar.d.ts +1 -0
- package/dist/types/components/tabs.d.ts +4 -0
- package/dist/types/components/timepicker.d.ts +2 -0
- package/dist/types/modular.d.ts +1 -1
- package/dist/types/plugins/dockedDisplayPlugin.d.ts +1 -0
- package/package.json +1 -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/_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/_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 +1 -0
- package/src/sass/components/_keypad.scss +162 -0
- package/src/sass/components/_lightbox.scss +3 -8
- package/src/sass/components/_map.scss +2 -2
- 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/_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/_timepicker.scss +4 -36
- package/src/sass/components/_toolbar.scss +0 -4
- package/src/sass/components/forms/_checkboxes.scss +37 -65
- 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-3DHK5CZU.mjs.map +0 -7
- package/dist/js/chunks/chunk-3GVFZ4XO.mjs.map +0 -7
- package/dist/js/chunks/chunk-4HZMB7LI.mjs.map +0 -7
- package/dist/js/chunks/chunk-5BKHWHYY.mjs.map +0 -7
- package/dist/js/chunks/chunk-5HQSGDZ5.mjs.map +0 -7
- package/dist/js/chunks/chunk-6N2XAEFK.mjs.map +0 -7
- package/dist/js/chunks/chunk-A7ALMYUR.mjs.map +0 -7
- package/dist/js/chunks/chunk-GZKEFWPM.mjs.map +0 -7
- package/dist/js/chunks/chunk-ILP3PDTL.mjs.map +0 -7
- package/dist/js/chunks/chunk-JIDMQGK6.mjs.map +0 -7
- package/dist/js/chunks/chunk-KBNN3QDH.mjs +0 -7
- package/dist/js/chunks/chunk-KHV6DZXX.mjs.map +0 -7
- package/dist/js/chunks/chunk-KY6U46SM.mjs.map +0 -7
- package/dist/js/chunks/chunk-LRZMJZ3T.mjs.map +0 -7
- package/dist/js/chunks/chunk-LTWPGFBR.mjs.map +0 -7
- package/dist/js/chunks/chunk-MNPROCZF.mjs.map +0 -7
- package/dist/js/chunks/chunk-O5XPWXIQ.mjs.map +0 -7
- package/dist/js/chunks/chunk-QERLECVU.mjs.map +0 -7
- package/dist/js/chunks/chunk-QJABDLSD.mjs.map +0 -7
- package/dist/js/chunks/chunk-RHRQKTTX.mjs.map +0 -7
- package/dist/js/chunks/chunk-S3XDFGSZ.mjs.map +0 -7
- package/dist/js/chunks/chunk-SPETGK25.mjs.map +0 -7
- package/dist/js/chunks/chunk-VGZSAFTX.mjs.map +0 -7
- package/dist/js/chunks/chunk-X7OCHZVF.mjs.map +0 -7
- package/dist/js/chunks/chunk-Z2NRKI7R.mjs.map +0 -7
- package/dist/js/chunks/chunk-ZKZKNSLC.mjs +0 -1
- /package/dist/js/chunks/{chunk-4KMNFIFZ.mjs.map → chunk-33QVDDGR.mjs.map} +0 -0
- /package/dist/js/chunks/{chunk-CUQPB25U.mjs.map → chunk-AIURVCG6.mjs.map} +0 -0
- /package/dist/js/chunks/{chunk-BG6ZRB5H.mjs.map → chunk-C6CHEWYP.mjs.map} +0 -0
- /package/dist/js/chunks/{chunk-GVGT6MIU.mjs.map → chunk-CK2XCICY.mjs.map} +0 -0
- /package/dist/js/chunks/{chunk-UEXCIMJZ.mjs.map → chunk-KUFHW3DS.mjs.map} +0 -0
- /package/dist/js/chunks/{chunk-YDCS5S3J.mjs.map → chunk-L27Q6ZMI.mjs.map} +0 -0
- /package/dist/js/chunks/{chunk-NS2UMNZV.mjs.map → chunk-LQWUDNHZ.mjs.map} +0 -0
- /package/dist/js/chunks/{chunk-ZAS25YFD.mjs.map → chunk-PDG64UHF.mjs.map} +0 -0
- /package/dist/js/chunks/{chunk-FS7XY3HT.mjs.map → chunk-SMY7GJSS.mjs.map} +0 -0
- /package/dist/js/chunks/{chunk-4TKTLGEM.mjs.map → chunk-UETTGDLI.mjs.map} +0 -0
- /package/dist/js/chunks/{chunk-ZKZKNSLC.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-DAIU5SLG.mjs.map → chunk-X4ISMKE2.mjs.map} +0 -0
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/ts/components/timepicker.ts"],
|
|
4
|
-
"sourcesContent": ["import { Utils } from '../core/utils';\nimport { Component, BaseOptions, InitElements, InitElement, I18nOptions } from '../core/component';\nimport { DockedDisplayPlugin } from '../plugins/dockedDisplayPlugin';\n\nexport type Views = 'hours' | 'minutes';\n\nexport interface TimepickerOptions extends BaseOptions {\n /**\n * Dial radius.\n * @default 135\n */\n dialRadius: number;\n /**\n * Outer radius.\n * @default 105\n */\n outerRadius: number;\n /**\n * Inner radius.\n * @default 70\n */\n innerRadius: number;\n /**\n * Tick radius.\n * @default 20\n */\n tickRadius: number;\n /**\n * Duration of the transition from/to the hours/minutes view.\n * @default 350\n */\n duration: number;\n /**\n * Specify a DOM element OR selector for a DOM element to render\n * the time picker 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 Timepicker.\n * @default false\n */\n showClearBtn: boolean;\n /**\n * Autosubmit timepicker selection to input field\n * @default true\n */\n autoSubmit: boolean;\n /**\n * Default time to set on the timepicker 'now' or '13:14'.\n * @default 'now';\n */\n defaultTime: string;\n /**\n * Millisecond offset from the defaultTime.\n * @default 0\n */\n fromNow: number;\n /**\n * Internationalization options.\n */\n i18n: Partial<I18nOptions & { hours: string; minutes: string }>;\n /**\n * Use 12 hour AM/PM clock instead of 24 hour clock.\n * @default true\n */\n twelveHour: boolean;\n /**\n * Vibrate device when dragging clock hand.\n * @default true\n */\n vibrate: boolean;\n /**\n * Callback function when a time is selected.\n * @default null\n */\n onSelect: (hour: number, minute: number) => void;\n /**\n * Callback function for interaction with input field.\n * @default null\n */\n onInputInteraction: (() => void) | null;\n /**\n * Callback function for done.\n * @default null\n */\n onDone: (() => void) | null;\n /**\n * Callback function for cancel.\n * @default null\n */\n onCancel: (() => void) | null;\n /**\n * Display plugin\n */\n displayPlugin: string;\n /**\n * Configurable display plugin options\n */\n displayPluginOptions: object;\n}\n\nconst _defaults: TimepickerOptions = {\n dialRadius: 135,\n outerRadius: 105,\n innerRadius: 70,\n tickRadius: 20,\n duration: 350,\n container: null,\n defaultTime: 'now', // default time, 'now' or '13:14' e.g.\n fromNow: 0, // Millisecond offset from the defaultTime\n showClearBtn: false,\n autoSubmit: true,\n // internationalization\n i18n: {\n cancel: 'Cancel',\n clear: 'Clear',\n done: 'Ok',\n hours: 'Hours',\n minutes: 'Minutes'\n },\n twelveHour: true, // change to 12 hour AM/PM clock from 24 hour\n vibrate: true, // vibrate the device when dragging clock hand\n // Callbacks\n onSelect: null,\n onInputInteraction: null,\n onDone: null,\n onCancel: null,\n displayPlugin: null,\n displayPluginOptions: null,\n};\n\nexport class Timepicker extends Component<TimepickerOptions> {\n declare el: HTMLInputElement;\n id: string;\n containerEl: HTMLElement;\n plate: HTMLElement;\n digitalClock: HTMLElement;\n inputHours: HTMLInputElement;\n inputMinutes: HTMLInputElement;\n x0: number;\n y0: number;\n moved: boolean;\n /** Which pointer is dragging the clock hand; a second finger is ignored. */\n private _dragPointerId: number | null = null;\n dx: number;\n dy: number;\n /**\n * Current view on the timepicker.\n * @default 'hours'\n */\n currentView: Views;\n hand: SVGElement;\n minutesView: HTMLElement;\n hours: number;\n minutes: number;\n /** The selected time. */\n time: string;\n /**\n * If the time is AM or PM on twelve-hour clock.\n * @default 'PM'\n */\n amOrPm: 'AM' | 'PM';\n static _template;\n /** Whether this device exposes the Vibration API at all. */\n canVibrate: boolean;\n _canvas: HTMLElement;\n hoursView: HTMLElement;\n spanAmPm: HTMLSpanElement;\n footer: HTMLElement;\n private _amBtn: HTMLButtonElement;\n private _pmBtn: HTMLButtonElement;\n bg: Element;\n bearing: Element;\n g: Element;\n toggleViewTimer: ReturnType<typeof setTimeout>;\n vibrateTimer: ReturnType<typeof setTimeout>;\n private _autoSubmitTimer: ReturnType<typeof setTimeout>;\n private _clockResetTimer: ReturnType<typeof setTimeout>;\n private displayPlugin: DockedDisplayPlugin;\n /** Whether the dial (ticks + SVG + AM/PM buttons) has been built yet. */\n private _clockBuilt = false;\n\n constructor(el: HTMLInputElement, options: Partial<TimepickerOptions>) {\n super(el, options, Timepicker);\n this.el['Expressive_Timepicker'] = this;\n this.options = {\n ...Timepicker.defaults,\n ...options,\n i18n: { ...Timepicker.defaults.i18n, ...options?.i18n }\n };\n this.id = Utils.guid();\n this._insertHTMLIntoDOM();\n this._setupVariables();\n this._setupEventHandlers();\n // The dial is ~40 elements (12 or 24 hour ticks, 12 minute ticks, the SVG\n // hand and the AM/PM buttons) and is built by _ensureClockBuilt() rather\n // than here - see _pickerSetup for when that first happens.\n this._pickerSetup();\n\n if (this.options.displayPlugin) {\n if (this.options.displayPlugin === 'docked') this.displayPlugin = DockedDisplayPlugin.init(this.el, this.containerEl, this.options.displayPluginOptions);\n }\n }\n\n static get defaults(): TimepickerOptions {\n return _defaults;\n }\n\n /**\n * Initializes instance of Timepicker.\n * @param el HTML element.\n * @param options Component options.\n */\n static init(el: HTMLInputElement, options?: Partial<TimepickerOptions>): Timepicker;\n /**\n * Initializes instances of Timepicker.\n * @param els HTML elements.\n * @param options Component options.\n */\n static init(\n els: InitElements<HTMLInputElement | InitElement>,\n options?: Partial<TimepickerOptions>\n ): Timepicker[];\n /**\n * Initializes instances of Timepicker.\n * @param els HTML elements.\n * @param options Component options.\n */\n static init(\n els: HTMLInputElement | InitElements<HTMLInputElement | InitElement>,\n options: Partial<TimepickerOptions> = {}\n ): Timepicker | Timepicker[] {\n return super.init(els, options, Timepicker);\n }\n\n static _addLeadingZero(num: number) {\n return (num < 10 ? '0' : '') + num;\n }\n\n static _createSVGEl(name: string) {\n const svgNS = 'http://www.w3.org/2000/svg';\n return document.createElementNS(svgNS, name);\n }\n\n static getInstance(el: HTMLElement): Timepicker {\n return el['Expressive_Timepicker'];\n }\n\n destroy() {\n clearTimeout(this._autoSubmitTimer);\n clearTimeout(this.toggleViewTimer);\n clearTimeout(this.vibrateTimer);\n this._cancelClockReset();\n this._removeEventHandlers();\n this.displayPlugin?.destroy();\n this.containerEl.remove();\n this.el['Expressive_Timepicker'] = undefined;\n }\n\n _setupEventHandlers() {\n this.el.addEventListener('click', this._handleInputClick);\n this.el.addEventListener('keydown', this._handleInputKeydown);\n this.plate.addEventListener('pointerdown', this._handleClockClickStart);\n this.digitalClock.addEventListener('input', this._inputFromTextField);\n this.inputHours.addEventListener('focus', () => this.showView('hours'));\n this.inputHours.addEventListener('focusout', () => this.formatHours());\n this.inputMinutes.addEventListener('focus', () => this.showView('minutes'));\n this.inputMinutes.addEventListener('focusout', () => this.formatMinutes());\n }\n\n _removeEventHandlers() {\n this.digitalClock.removeEventListener('input', this._inputFromTextField);\n this.el.removeEventListener('click', this._handleInputClick);\n this.el.removeEventListener('keydown', this._handleInputKeydown);\n // Drag handlers live on the document while the clock hand is held; if the\n // component is destroyed mid-drag they would otherwise outlive it.\n document.removeEventListener('pointermove', this._handleDocumentClickMove);\n document.removeEventListener('pointerup', this._handleDocumentClickEnd);\n document.removeEventListener('pointercancel', this._handleDocumentClickCancel);\n }\n\n _handleInputClick = () => {\n this._updateTimeFromInput();\n // Before focus(): focusing inputHours fires the handler that calls\n // showView, and an already-focused input fires nothing at all.\n this._ensureClockBuilt();\n if (this.displayPlugin) this.displayPlugin.show();\n this.inputHours.focus();\n if (typeof this.options.onInputInteraction === 'function') this.options.onInputInteraction.call(this);\n };\n\n _handleInputKeydown = (e: KeyboardEvent) => {\n if (e.key === Utils.keys.ENTER) {\n e.preventDefault();\n this._handleInputClick();\n }\n };\n\n _handleClockClickStart = (e: PointerEvent) => {\n if (!e.isPrimary) return;\n if (e.pointerType === 'mouse' && e.button !== 0) return;\n e.preventDefault();\n this._ensureClockBuilt();\n const clockPlateBR = this.plate.getBoundingClientRect();\n const offset = { x: clockPlateBR.left, y: clockPlateBR.top };\n\n this.x0 = offset.x + this.options.dialRadius;\n this.y0 = offset.y + this.options.dialRadius;\n this.moved = false;\n this._dragPointerId = e.pointerId;\n this.dx = e.clientX - this.x0;\n this.dy = e.clientY - this.y0;\n\n // Set clock hands\n this.setHand(this.dx, this.dy, false);\n // The hand follows the pointer anywhere on the page while it is held.\n // `pointercancel` ends the drag the same way `pointerup` does: without it\n // these document listeners outlived a cancelled touch, because the\n // `touchend` pair this replaced had no `touchcancel` companion.\n document.addEventListener('pointermove', this._handleDocumentClickMove);\n document.addEventListener('pointerup', this._handleDocumentClickEnd);\n document.addEventListener('pointercancel', this._handleDocumentClickCancel);\n };\n\n _handleDocumentClickMove = (e: PointerEvent) => {\n if (e.pointerId !== this._dragPointerId) return;\n e.preventDefault();\n const x = e.clientX - this.x0;\n const y = e.clientY - this.y0;\n this.moved = true;\n this.setHand(x, y, false);\n };\n\n _handleDocumentClickEnd = (e: PointerEvent) => {\n if (e.pointerId !== this._dragPointerId) return;\n this._dragPointerId = null;\n e.preventDefault();\n document.removeEventListener('pointerup', this._handleDocumentClickEnd);\n document.removeEventListener('pointercancel', this._handleDocumentClickCancel);\n const x = e.clientX - this.x0;\n const y = e.clientY - this.y0;\n if (this.moved && x === this.dx && y === this.dy) {\n this.setHand(x, y);\n }\n\n if (this.currentView === 'hours') {\n this.inputMinutes.focus();\n this.showView('minutes', this.options.duration / 2);\n } else {\n clearTimeout(this._autoSubmitTimer);\n this._autoSubmitTimer = setTimeout(() => {\n this._autoSubmitTimer = null;\n if (this.options.autoSubmit) this.done();\n }, this.options.duration / 2);\n }\n\n if (typeof this.options.onSelect === 'function') {\n this.options.onSelect.call(this, this.hours, this.minutes);\n }\n document.removeEventListener('pointermove', this._handleDocumentClickMove);\n };\n\n /**\n * A cancelled pointer is not a completed selection. The browser or the OS\n * took the gesture over, so this only lets go of the drag - it must not run\n * the pointer-up path, which advances hours to minutes, fires `onSelect`,\n * and under `autoSubmit` closes the picker on a time the user never chose.\n */\n _handleDocumentClickCancel = (e: PointerEvent) => {\n if (e.pointerId !== this._dragPointerId) return;\n this._dragPointerId = null;\n this.moved = false;\n document.removeEventListener('pointermove', this._handleDocumentClickMove);\n document.removeEventListener('pointerup', this._handleDocumentClickEnd);\n document.removeEventListener('pointercancel', this._handleDocumentClickCancel);\n };\n\n _insertHTMLIntoDOM() {\n const template = document.createElement('template');\n template.innerHTML = Timepicker._template.trim();\n\n this.containerEl = <HTMLElement>template.content.firstChild;\n this.containerEl.id = 'container-' + this.id;\n\n // Append popover to input by default\n const optEl = this.options.container;\n const containerEl = optEl instanceof HTMLElement ? optEl : document.querySelector(optEl);\n\n if (this.options.container && !!containerEl) {\n containerEl.append(this.containerEl);\n } else {\n this.el.parentElement.appendChild(this.containerEl);\n }\n }\n\n _setupVariables() {\n this.currentView = 'hours';\n // `navigator.webkitVibrate` never shipped in any browser - the probe it\n // came from was folklore. A plain feature check is the whole of it.\n this.canVibrate = typeof navigator.vibrate === 'function';\n this._canvas = this.containerEl.querySelector('.timepicker-canvas');\n this.plate = this.containerEl.querySelector('.timepicker-plate');\n this.digitalClock = this.containerEl.querySelector('.timepicker-display-column');\n this.hoursView = this.containerEl.querySelector('.timepicker-hours');\n this.minutesView = this.containerEl.querySelector('.timepicker-minutes');\n this.inputHours = this.containerEl.querySelector('.timepicker-input-hours');\n this.inputMinutes = this.containerEl.querySelector('.timepicker-input-minutes');\n this.inputHours.setAttribute('aria-label', this.options.i18n.hours);\n this.inputMinutes.setAttribute('aria-label', this.options.i18n.minutes);\n this.spanAmPm = this.containerEl.querySelector('.timepicker-span-am-pm');\n this.footer = this.containerEl.querySelector('.timepicker-footer');\n this.amOrPm = 'PM';\n }\n\n _pickerSetup() {\n Utils.createButton(\n this.footer,\n this.options.i18n.clear,\n ['timepicker-clear'],\n this.options.showClearBtn,\n this.clear\n );\n\n if (!this.options.autoSubmit) {\n Utils.createConfirmationContainer(\n this.footer,\n this.options.i18n.done,\n this.options.i18n.cancel,\n this.confirm,\n this.cancel\n );\n }\n\n this._updateTimeFromInput();\n\n // With a docked display the container is `visibility: hidden` until\n // show(), so the dial can wait for the first interaction. Without one it\n // is on screen from the moment it is inserted and has to be ready now.\n if (!this.options.displayPlugin) this.showView('hours');\n }\n\n /**\n * Build the dial, once. Cheap to call repeatedly - every entry point that\n * touches the clock calls it first, so the picker cannot be interacted with\n * before it exists.\n */\n private _ensureClockBuilt() {\n if (this._clockBuilt) return;\n this._clockBuilt = true;\n this._clockSetup();\n // Applies the AM/PM state _updateTimeFromInput worked out before the\n // buttons existed.\n this._updateAmPmView();\n }\n\n _clockSetup() {\n if (this.options.twelveHour) {\n // AM Button\n this._amBtn = document.createElement('button');\n this._amBtn.type = 'button';\n this._amBtn.classList.add('am-btn');\n this._amBtn.innerText = 'AM';\n this._amBtn.addEventListener('click', this._handleAmPmClick);\n this.spanAmPm.appendChild(this._amBtn);\n // PM Button\n this._pmBtn = document.createElement('button');\n this._pmBtn.type = 'button';\n this._pmBtn.classList.add('pm-btn');\n this._pmBtn.innerText = 'PM';\n this._pmBtn.addEventListener('click', this._handleAmPmClick);\n this.spanAmPm.appendChild(this._pmBtn);\n }\n this._buildHoursView();\n this._buildMinutesView();\n this._buildSVGClock();\n }\n\n _buildSVGClock() {\n // Draw clock hands and others\n const dialRadius = this.options.dialRadius;\n const tickRadius = this.options.tickRadius;\n const diameter = dialRadius * 2;\n const svg = Timepicker._createSVGEl('svg');\n svg.setAttribute('class', 'timepicker-svg');\n svg.setAttribute('width', diameter.toString());\n svg.setAttribute('height', diameter.toString());\n const g = Timepicker._createSVGEl('g');\n g.setAttribute('transform', 'translate(' + dialRadius + ',' + dialRadius + ')');\n const bearing = Timepicker._createSVGEl('circle');\n bearing.setAttribute('class', 'timepicker-canvas-bearing');\n bearing.setAttribute('cx', '0');\n bearing.setAttribute('cy', '0');\n bearing.setAttribute('r', '4');\n const hand = Timepicker._createSVGEl('line');\n hand.setAttribute('x1', '0');\n hand.setAttribute('y1', '0');\n const bg = Timepicker._createSVGEl('circle');\n bg.setAttribute('class', 'timepicker-canvas-bg');\n bg.setAttribute('r', tickRadius.toString());\n g.appendChild(hand);\n g.appendChild(bg);\n g.appendChild(bearing);\n svg.appendChild(g);\n this._canvas.appendChild(svg);\n this.hand = hand;\n this.bg = bg;\n this.bearing = bearing;\n this.g = g;\n }\n\n _buildHoursView() {\n // Hours view\n if (this.options.twelveHour) {\n for (let i = 1; i < 13; i += 1) {\n // const tick = <HTMLElement>$tick.cloneNode(true);\n const radian = (i / 6) * Math.PI;\n const radius = this.options.outerRadius;\n this._buildHoursTick(i, radian, radius);\n }\n } else {\n for (let i = 0; i < 24; i += 1) {\n // const tick = <HTMLElement>$tick.cloneNode(true);\n const radian = (i / 6) * Math.PI;\n const inner = i > 0 && i < 13;\n const radius = inner ? this.options.innerRadius : this.options.outerRadius;\n this._buildHoursTick(i, radian, radius);\n }\n }\n }\n\n _buildHoursTick(i: number, radian: number, radius: number) {\n const tick = document.createElement('div');\n tick.classList.add('timepicker-tick');\n tick.style.left =\n this.options.dialRadius + Math.sin(radian) * radius - this.options.tickRadius + 'px';\n tick.style.top =\n this.options.dialRadius - Math.cos(radian) * radius - this.options.tickRadius + 'px';\n tick.textContent = i === 0 ? '00' : i.toString();\n this.hoursView.appendChild(tick);\n }\n\n _buildMinutesView() {\n const _tick = document.createElement('div');\n _tick.classList.add('timepicker-tick');\n // Minutes view\n for (let i = 0; i < 60; i += 5) {\n const tick = <HTMLElement>_tick.cloneNode(true);\n const radian = (i / 30) * Math.PI;\n tick.style.left =\n this.options.dialRadius +\n Math.sin(radian) * this.options.outerRadius -\n this.options.tickRadius +\n 'px';\n tick.style.top =\n this.options.dialRadius -\n Math.cos(radian) * this.options.outerRadius -\n this.options.tickRadius +\n 'px';\n tick.textContent = Timepicker._addLeadingZero(i);\n this.minutesView.appendChild(tick);\n }\n }\n\n _handleAmPmClick = (e: MouseEvent) => {\n this._handleAmPmInteraction(<HTMLElement>e.target);\n };\n\n _handleAmPmInteraction = (e: HTMLElement) => {\n this.amOrPm = e.classList.contains('am-btn') ? 'AM' : 'PM';\n this._updateAmPmView();\n }\n\n _updateAmPmView() {\n // _updateTimeFromInput settles amOrPm before the dial is built; the\n // buttons pick the state up in _ensureClockBuilt.\n if (!this._amBtn || !this._pmBtn) return;\n this._amBtn.setAttribute('aria-pressed', String(this.amOrPm === 'AM'));\n this._pmBtn.setAttribute('aria-pressed', String(this.amOrPm === 'PM'));\n this._amBtn.classList.toggle('outlined', this.amOrPm !== 'AM');\n this._pmBtn.classList.toggle('outlined', this.amOrPm !== 'PM');\n if (this.options.twelveHour) {\n if (this.amOrPm === 'PM') {\n this._amBtn.classList.remove('filled');\n this._pmBtn.classList.add('filled');\n } else if (this.amOrPm === 'AM') {\n this._amBtn.classList.add('filled');\n this._pmBtn.classList.remove('filled');\n }\n }\n }\n\n _updateTimeFromInput() {\n this._cancelClockReset();\n // Get the time\n let value = ((this.el.value || this.options.defaultTime || '') + '').trim().toUpperCase().split(':');\n const period = value[1]?.match(/AM|PM/)?.[0];\n value[1] = value[1]?.replace(/AM|PM/, '');\n if (value[0] === 'NOW') {\n const now = new Date(+new Date() + this.options.fromNow);\n value = [now.getHours().toString(), now.getMinutes().toString()];\n }\n this.hours = +value[0] || 0;\n this.minutes = +value[1] || 0;\n if (this.options.twelveHour) {\n this.amOrPm = period === 'AM' || period === 'PM' ? period : this.hours >= 12 ? 'PM' : 'AM';\n this.hours = this.hours % 12 || 12;\n }\n this.inputHours.value = Timepicker._addLeadingZero(this.hours);\n this.inputMinutes.value = Timepicker._addLeadingZero(this.minutes);\n\n this._updateAmPmView();\n }\n\n /**\n * Show hours or minutes view on timepicker.\n * @param view The name of the view you want to switch to, 'hours' or 'minutes'.\n * @param delay\n */\n showView = (view: Views, delay: number = null) => {\n this._ensureClockBuilt();\n const isHours = view === 'hours',\n nextView = isHours ? this.hoursView : this.minutesView,\n hideView = isHours ? this.minutesView : this.hoursView;\n this.currentView = view;\n\n /*if (isHours) {\n this.inputHours.classList.add('text-primary');\n this.inputMinutes.classList.remove('text-primary');\n } else {\n this.inputHours.classList.remove('text-primary');\n this.inputMinutes.classList.add('text-primary');\n }*/\n\n // Transition view\n hideView.classList.add('timepicker-dial-out');\n\n nextView.style.visibility = 'visible';\n nextView.classList.remove('timepicker-dial-out');\n\n // Reset clock hand\n this.resetClock(delay);\n // After transitions ended\n clearTimeout(this.toggleViewTimer);\n this.toggleViewTimer = setTimeout(() => {\n hideView.style.visibility = 'hidden';\n }, this.options.duration);\n };\n\n private _cancelClockReset() {\n clearTimeout(this._clockResetTimer);\n this._clockResetTimer = null;\n this._canvas?.classList.remove('timepicker-canvas-out');\n }\n\n resetClock(delay) {\n this._cancelClockReset();\n const view = this.currentView,\n value = this[view],\n isHours = view === 'hours',\n unit = Math.PI / (isHours ? 6 : 30),\n radian = value * unit,\n radius =\n isHours && value > 0 && value < 13 ? this.options.innerRadius : this.options.outerRadius,\n x = Math.sin(radian) * radius,\n y = -Math.cos(radian) * radius;\n\n if (delay) {\n this._canvas?.classList.add('timepicker-canvas-out');\n this._clockResetTimer = setTimeout(() => {\n this.setHand(x, y);\n }, delay);\n } else {\n this.setHand(x, y);\n }\n }\n\n _inputFromTextField = (event: Event) => {\n const input = event.target as HTMLInputElement;\n const isHours = input === this.inputHours;\n if (!isHours && input !== this.inputMinutes) return;\n this._cancelClockReset();\n const value = Number(input.value);\n const min = isHours && this.options.twelveHour ? 1 : 0;\n const max = isHours ? (this.options.twelveHour ? 12 : 23) : 59;\n if (!input.value.trim() || !Number.isInteger(value) || value < min || value > max) return;\n this[isHours ? 'hours' : 'minutes'] = value;\n this.drawClockFromTimeInput(value, isHours);\n };\n\n drawClockFromTimeInput(value, isHours) {\n const unit = Math.PI / (isHours ? 6 : 30);\n const radian = value * unit;\n let radius;\n if (this.options.twelveHour) {\n radius = this.options.outerRadius;\n } else {\n radius =\n isHours && value > 0 && value < 13 ? this.options.innerRadius : this.options.outerRadius;\n }\n this.setClockAttributes(radian, radius);\n }\n\n setHand(x, y, roundBy5: boolean = false) {\n this._cancelClockReset();\n const isHours = this.currentView === 'hours',\n unit = Math.PI / (isHours || roundBy5 ? 6 : 30),\n z = Math.sqrt(x * x + y * y),\n inner = isHours && z < (this.options.outerRadius + this.options.innerRadius) / 2;\n let radian = Math.atan2(x, -y),\n radius = inner ? this.options.innerRadius : this.options.outerRadius;\n\n if (this.options.twelveHour) {\n radius = this.options.outerRadius;\n }\n\n // Radian should in range [0, 2PI]\n if (radian < 0) {\n radian = Math.PI * 2 + radian;\n }\n\n // Get the round value\n let value = Math.round(radian / unit);\n\n // Get the round radian\n radian = value * unit;\n\n // Correct the hours or minutes\n if (this.options.twelveHour) {\n if (isHours) {\n if (value === 0) value = 12;\n } else {\n if (roundBy5) value *= 5;\n if (value === 60) value = 0;\n }\n } else {\n if (isHours) {\n if (value === 12) {\n value = 0;\n }\n value = inner ? (value === 0 ? 12 : value) : value === 0 ? 0 : value + 12;\n } else {\n if (roundBy5) {\n value *= 5;\n }\n if (value === 60) {\n value = 0;\n }\n }\n }\n\n // Once hours or minutes changed, vibrate the device\n if (this[this.currentView] !== value) {\n if (this.canVibrate && this.options.vibrate) {\n // Do not vibrate too frequently\n if (!this.vibrateTimer) {\n navigator.vibrate(10);\n this.vibrateTimer = setTimeout(() => {\n this.vibrateTimer = null;\n }, 100);\n }\n }\n }\n\n this[this.currentView] = value;\n if (isHours) {\n this.inputHours.value = Timepicker._addLeadingZero(value);\n } else {\n this.inputMinutes.value = Timepicker._addLeadingZero(value);\n }\n\n // Set clock hand and others' position\n this.setClockAttributes(radian, radius);\n }\n\n setClockAttributes(radian: number, radius: number) {\n // Nothing to point at until the SVG exists.\n if (!this.hand || !this.bg) return;\n const cx1 = Math.sin(radian) * (radius - this.options.tickRadius),\n cy1 = -Math.cos(radian) * (radius - this.options.tickRadius),\n cx2 = Math.sin(radian) * radius,\n cy2 = -Math.cos(radian) * radius;\n this.hand.setAttribute('x2', cx1.toString());\n this.hand.setAttribute('y2', cy1.toString());\n this.bg.setAttribute('cx', cx2.toString());\n this.bg.setAttribute('cy', cy2.toString());\n }\n\n formatHours() {\n if (this.inputHours.value == '') this.setHoursDefault();\n this.inputHours.value = Timepicker._addLeadingZero(this.hours);\n }\n\n formatMinutes() {\n if (this.inputMinutes.value == '') this.minutes = new Date().getMinutes();\n this.inputMinutes.value = Timepicker._addLeadingZero(this.minutes);\n }\n\n setHoursDefault() {\n this.hours = new Date().getHours();\n if (this.options.twelveHour) this.hours = this.hours % 12 || 12;\n this.inputHours.value = this.hours.toString();\n }\n\n done = (clearValue = null) => {\n // Set input value\n const last = this.el.value;\n let value = clearValue\n ? ''\n : Timepicker._addLeadingZero(this.hours) + ':' + Timepicker._addLeadingZero(this.minutes);\n this.time = value;\n if (!clearValue && this.options.twelveHour) {\n value = `${value} ${this.amOrPm}`;\n }\n this.el.value = value;\n // Trigger change event\n if (value !== last) {\n this.el.dispatchEvent(\n new Event('change', { bubbles: true, cancelable: true, composed: true })\n );\n }\n };\n\n confirm = () => {\n this.done();\n if (typeof this.options.onDone === 'function') this.options.onDone.call(this);\n }\n\n cancel = () => {\n // not logical clearing the input field on cancel, since the end user might want to make use of the previously submitted value\n // this.clear();\n if (typeof this.options.onCancel === 'function') this.options.onCancel.call(this);\n }\n\n clear = () => {\n this.done(true);\n };\n\n static {\n Timepicker._template = `<div class=\"timepicker-container\">\n <div class=\"timepicker-digital-display\">\n <div class=\"timepicker-text-container\">\n <div class=\"timepicker-display-column timepicker-display-digital-clock\">\n <div class=\"timepicker-input-hours-wrapper\">\n <input type=\"text\" maxlength=\"2\" class=\"timepicker-input-hours text-primary\" />\n </div>\n <div class=\"timepicker-input-divider-wrapper\">\n <span class=\"timepicker-input-divider\">:</span>\n </div>\n <div class=\"timepicker-input-minutes-wrapper\">\n <input type=\"text\" maxlength=\"2\" class=\"timepicker-input-minutes\" />\n </div>\n </div>\n <div class=\"timepicker-display-column timepicker-display-am-pm\">\n <div class=\"timepicker-span-am-pm\"></div>\n </div>\n </div>\n </div>\n <div class=\"timepicker-analog-display\">\n <div class=\"timepicker-plate\">\n <div class=\"timepicker-canvas\"></div>\n <div class=\"timepicker-dial timepicker-hours\"></div>\n <div class=\"timepicker-dial timepicker-minutes timepicker-dial-out\"></div>\n </div>\n <div class=\"timepicker-footer\"></div>\n </div>\n </div>`;\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
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) {\n drag = null;\n return;\n }\n if (!config.inHandle(event, dialog)) {\n drag = null;\n return;\n }\n dialog.style.transition = 'none';\n drag = {\n dialog,\n pointerId: event.pointerId,\n direction: config.direction(dialog),\n start: coord(event),\n last: coord(event),\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 delta = coord(event) - 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 (coord(event) !== drag.last) {\n const now = Date.now();\n drag.velocity = (coord(event) - drag.last) / Math.max(1, now - drag.lastT);\n drag.last = coord(event);\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": ";;;;;AAuCA,IAAM,mBAAmB;AAEzB,IAAM,mBAAmB;AAEzB,IAAM,gBAAgB;AAEtB,IAAM,YAAY;AAGlB,IAAM,YAAY,oBAAI,IAAY;AAM3B,SAAS,iBAAiB,QAA+B;AAC9D,MAAI,UAAU,IAAI,OAAO,QAAQ,EAAG;AACpC,YAAU,IAAI,OAAO,QAAQ;AAC7B,QAAM,QAAQ,CAAC,UAAyB,OAAO,SAAS,MAAM,MAAM,UAAU,MAAM;AACpF,MAAI;AAEJ,MAAI,OASO;AAEX,QAAM,WAAW,CAAC,WAAyD;AACzE,QAAI,EAAE,kBAAkB,SAAU,QAAO;AACzC,UAAM,SAAS,OAAO,QAAQ,OAAO,QAAQ;AAC7C,WAAO,kBAAkB,oBAAoB,SAAS;AAAA,EACxD;AAEA,QAAM,QAAQ,CAAC,WAA8B;AAC3C,WAAO,MAAM,aAAa;AAC1B,WAAO,MAAM,YAAY,OAAO,UAAU,KAAK;AAAA,EACjD;AAEA,QAAM,SAAS,CAAC,UAAwB;AAItC,QAAI,CAAC,MAAM,UAAW;AACtB,QAAI,MAAM,gBAAgB,WAAW,MAAM,WAAW,EAAG;AACzD,aAAS;AACT,WAAO,UAAU;AACjB,UAAM,SAAS,SAAS,MAAM,MAAM;AACpC,QAAI,CAAC,QAAQ,MAAM;AACjB,aAAO;AACP;AAAA,IACF;AACA,QAAI,CAAC,OAAO,SAAS,OAAO,MAAM,GAAG;AACnC,aAAO;AACP;AAAA,IACF;AACA,WAAO,MAAM,aAAa;AAC1B,WAAO;AAAA,MACL;AAAA,MACA,WAAW,MAAM;AAAA,MACjB,WAAW,OAAO,UAAU,MAAM;AAAA,MAClC,OAAO,MAAM,KAAK;AAAA,MAClB,MAAM,MAAM,KAAK;AAAA,MACjB,OAAO,KAAK,IAAI;AAAA,MAChB,UAAU;AAAA,MACV,OAAO;AAAA,IACT;AACA,aAAS,QAAQ,UAAU,EAAE,WAAW,MAAM,SAAS,MAAM,YAAY,MAAM,iBAAiB,CAAC,MAAM,GAAG,mBAAmB,KAAK,CAAC;AAAA,EACrI;AAEA,QAAM,SAAS,CAAC,UAAwB;AACtC,QAAI,CAAC,QAAQ,KAAK,cAAc,MAAM,UAAW;AACjD,QAAI,CAAC,KAAK,OAAO,QAAQ,CAAC,KAAK,OAAO,aAAa;AACjD,eAAS;AACT;AAAA,IACF;AACA,UAAM,QAAQ,MAAM,KAAK,IAAI,KAAK;AAGlC,SAAK,QAAQ,KAAK,cAAc,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,IAAI,GAAG,KAAK;AAC1E,QAAI,MAAM,KAAK,MAAM,KAAK,MAAM;AAC9B,YAAM,MAAM,KAAK,IAAI;AACrB,WAAK,YAAY,MAAM,KAAK,IAAI,KAAK,QAAQ,KAAK,IAAI,GAAG,MAAM,KAAK,KAAK;AACzE,WAAK,OAAO,MAAM,KAAK;AACvB,WAAK,QAAQ;AAAA,IACf;AACA,SAAK,OAAO,MAAM,YAAY,OAAO,UAAU,GAAG,KAAK,KAAK,IAAI;AAAA,EAClE;AAEA,QAAM,OAAO,CAAC,UAAwB;AACpC,UAAM,OAAO;AACb,QAAI,CAAC,QAAQ,KAAK,cAAc,MAAM,UAAW;AACjD,QAAI,CAAC,KAAK,OAAO,QAAQ,CAAC,KAAK,OAAO,aAAa;AACjD,eAAS;AACT;AAAA,IACF;AACA,WAAO,KAAK;AACZ,WAAO;AACP,aAAS,WAAW;AAKpB,SAAK,OAAO,MAAM,aAAa;AAC/B,UAAM,WAAW,KAAK,IAAI,IAAI,KAAK,QAAQ,gBAAgB,KAAK,WAAW;AAC3E,UAAM,UAAU,KAAK,IAAI,KAAK,KAAK,IAAI;AACvC,WAAO,YAAY,OAAO;AAC1B,UAAM,UAAU,YACb,KAAK,cAAc,IAChB,KAAK,QAAQ,oBAAoB,WAAW,mBAC5C,KAAK,QAAQ,CAAC,oBAAoB,WAAW,CAAC;AACpD,QAAI,WAAW,KAAK,OAAO,KAAM,MAAK,OAAO,MAAM;AACnD,SAAK,OAAO,MAAM,YAAY,OAAO,UAAU,KAAK;AAAA,EACtD;AAEA,QAAM,WAAW,CAAC,UAAyB;AACzC,QAAI,SAAS,MAAM,cAAc,MAAM,UAAW;AAClD,aAAS,WAAW;AACpB,WAAO,YAAY,KAAK;AACxB,UAAM,OAAO;AACb,WAAO;AACP,QAAI,KAAM,OAAM,KAAK,MAAM;AAAA,EAC7B;AAEA,QAAM,gBAAgB,MAAM;AAC1B,eAAW,IAAI,iBAAiB,aAAW;AACzC,YAAM,SAAS,MAAM;AACrB,UAAI,WAAW,CAAC,OAAO,QAAQ,CAAC,OAAO,eAAe,QAAQ;AAAA,QAAK,YAChE,OAAO,SAAS,gBAAgB,OAAO,WAAW,UAAU,OAAO,aAAa,QACjF,CAAC,GAAG,OAAO,YAAY,EAAE,KAAK,UAAQ,KAAK,SAAS,MAAM,CAAC;AAAA,MAC7D,GAAI,UAAS;AAAA,IACf,CAAC;AACD,aAAS,iBAAiB,eAAe,QAAQ,EAAE,SAAS,KAAK,CAAC;AAClE,aAAS,iBAAiB,eAAe,QAAQ,EAAE,SAAS,KAAK,CAAC;AAClE,aAAS,iBAAiB,aAAa,MAAM,EAAE,SAAS,KAAK,CAAC;AAC9D,aAAS,iBAAiB,iBAAiB,UAAU,EAAE,SAAS,KAAK,CAAC;AAAA,EACxE,CAAC;AACH;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/ts/components/radialChart.ts"],
|
|
4
|
-
"sourcesContent": ["import { InitElements, InitElement } from '../core/component';\nimport { COLORS, LineChart, LineChartOptions, svgNode as node } from './lineChart';\n\nexport type RadialChartOptions = LineChartOptions;\n\n/** The outer ring's outer edge in a 100-unit box. */\nconst RADIUS = 46;\n/** The rings never fill more of the radius than this, leaving a middle. */\nconst FILL = 0.8;\n\n/**\n * Radial chart. It reads its <table> like LineChart, but draws each row of\n * the first value column as a ring, outermost first, filled clockwise from\n * the top as a share of `data-max` above zero (100 by default). With `.gauge` the rings\n * are half circles over the middle. A <tfoot> row shows in the middle, and\n * a legend lists the rows when there is more than one. Further columns show\n * in the tooltip.\n *\n * Re-run `RadialChart.init(el)` after changing the table or the ring tokens.\n */\nexport class RadialChart extends LineChart {\n // No initializers: LineChart's constructor draws before they would run.\n /** Each ring's middle radius, and their shared width. */\n private _radii: number[];\n private _width: number;\n /** Each row's share of the maximum, from 0 to 1. */\n private _fractions: number[];\n private _rings: SVGCircleElement[];\n\n protected get _type() {\n return 'radial-chart';\n }\n\n protected get _key() {\n return 'Expressive_RadialChart';\n }\n\n protected get _points() {\n return false;\n }\n\n protected get _circular() {\n return true;\n }\n\n private get _gauge() {\n return this.el.classList.contains('gauge');\n }\n\n static init(el: HTMLElement, options?: Partial<RadialChartOptions>): RadialChart;\n static init(els: InitElements<InitElement>, options?: Partial<RadialChartOptions>): RadialChart[];\n static init(\n els: HTMLElement | InitElements<InitElement>,\n options: Partial<RadialChartOptions> = {}\n ): RadialChart | RadialChart[] {\n return super.init(els as HTMLElement, options) as RadialChart | RadialChart[];\n }\n\n static getInstance(el: HTMLElement): RadialChart {\n return el['Expressive_RadialChart'];\n }\n\n show(index: number) {\n if (!this._tooltip || index === this.activeIndex) return;\n super.show(index);\n this._rings.forEach((ring, i) => ring.classList.toggle('active', i === index));\n // LineChart hides the tooltip for -1 and for an index past the last row.\n if (this._tooltip.hidden) return;\n const color = this._color(index);\n this._tooltip.querySelectorAll<HTMLElement>('[data-series]').forEach((span) => {\n span.dataset.series = color;\n });\n }\n\n /** The tooltip sits where the ring's fill ends. */\n protected _place(index: number) {\n const turn = this._turn(this._fractions[index]);\n const r = this._radii[index];\n const [x, y] = [r * Math.sin(turn * 2 * Math.PI), -r * Math.cos(turn * 2 * Math.PI)];\n this._tooltip.style.left = `${50 + x}%`;\n this._tooltip.style.top = `${((50 + y) / (this._gauge ? 50 : 100)) * 100}%`;\n // On the right half it opens leftwards, over the rings.\n this._tooltip.classList.toggle('end', x > 0);\n }\n\n private _color(index: number) {\n return String((index % COLORS) + 1);\n }\n\n /** A fraction of the ring as a turn clockwise from the top. */\n private _turn(fraction: number) {\n return this._gauge ? fraction / 2 - 0.25 : fraction;\n }\n\n /** For more than one row, a legend of every row with its color and cell. */\n protected _guides(): Element[] {\n if (this.labels.length < 2) return [];\n const legend = document.createElement('ul');\n legend.className = 'radial-chart-legend';\n legend.setAttribute('aria-hidden', 'true');\n const text = this.series[0].text;\n legend.append(...this.labels.map((label, i) => {\n const li = document.createElement('li');\n li.dataset.series = this._color(i);\n const [name, value] = [label, text[i]].map((content) => {\n const span = document.createElement('span');\n span.textContent = content;\n return span;\n });\n li.append(name, value);\n return li;\n }));\n return [legend];\n }\n\n /** The ring under the pointer by its distance from the middle, or -1. */\n protected _indexAt(e: PointerEvent) {\n const box = this._plot.getBoundingClientRect();\n // The middle is half the width down in both shapes.\n const [x, y] = [e.clientX - box.left - box.width / 2, e.clientY - box.top - box.width / 2];\n if (this._gauge && y > 0) return -1;\n // The distance in the SVG's 100-unit box; a gap belongs to a ring beside it.\n const distance = (Math.hypot(x, y) / box.width) * 100;\n const step = this._radii.length > 1 ? this._radii[0] - this._radii[1] : this._width;\n return this._radii.findIndex((r) => Math.abs(distance - r) <= step / 2);\n }\n\n /**\n * An SVG of rings in a -50 to 50 box, the top half for a gauge. Each row\n * is a track circle and a fill circle whose dash is its share; CSS draws\n * them from --radial-chart-dash. The total is HTML over it.\n */\n protected _draw(): Element {\n const style = getComputedStyle(this.el);\n const token = (name: string, fallback: number) => {\n const value = parseFloat(style.getPropertyValue(`--md-comp-radial-chart-${name}`));\n return Number.isFinite(value) ? value : fallback;\n };\n const count = this.labels.length;\n let [width, gap] = [Math.max(0, token('thickness', 8)), Math.max(0, token('gap', 2))];\n // Too many rings to leave a middle thin, with their gaps, to fit.\n // ponytail: past about 18 rings they are hairlines; that many values want a bar chart.\n const scale = Math.min(1, (RADIUS * FILL) / (count * width + (count - 1) * gap || 1));\n [width, gap] = [width * scale, gap * scale];\n this._width = width;\n this._radii = this.labels.map((_, i) => RADIUS - width / 2 - i * (width + gap));\n // A maximum of zero or less means nothing, so it falls back.\n const max = [parseFloat(this.el.dataset.max ?? ''), this.options.max ?? NaN, 100].find((value) => value > 0)!;\n this._fractions = this.series[0].values.map((value) => Math.min(1, Math.max(0, (value ?? 0) / max)));\n\n const gauge = this._gauge;\n const svg = node('svg', { viewBox: gauge ? '-50 -50 100 50' : '-50 -50 100 100', focusable: 'false' });\n // A circle starts at three o'clock; turn it to the top, or to nine for a gauge.\n const transform = gauge ? 'rotate(180)' : 'rotate(-90)';\n const span = gauge ? 0.5 : 1;\n this._rings = this._radii.map((r, i) => {\n const length = 2 * Math.PI * r;\n // Round caps reach half the width past each end of a dash, so a capped\n // dash is one width shorter and starts half a width in. One shorter\n // than the width is a dot at the start.\n const circle = (name: string, fraction: number, capped: boolean) => {\n const ring = node('circle', { class: name, r: r.toFixed(3), transform, 'stroke-width': width.toFixed(3) });\n const dash = Math.max(0.001, fraction * span * length - (capped ? width : 0));\n ring.style.setProperty('--radial-chart-dash', `${dash.toFixed(3)} ${length.toFixed(3)}`);\n if (capped) ring.style.setProperty('--radial-chart-offset', (-width / 2).toFixed(3));\n return ring;\n };\n const ring = circle('radial-chart-ring', this._fractions[i], true) as SVGCircleElement;\n ring.dataset.series = this._color(i);\n // An empty ring would still draw its round cap.\n if (!this._fractions[i]) ring.classList.add('empty');\n // Only a gauge's track has ends to round.\n svg.append(circle('radial-chart-track', 1, gauge), ring);\n return ring;\n });\n\n const rings = document.createElement('div');\n rings.className = 'radial-chart-rings';\n rings.setAttribute('aria-hidden', 'true');\n rings.style.setProperty('--radial-chart-middle', `${(this._radii[count - 1] - this._width / 2) * 2}%`);\n rings.append(svg);\n\n const total = this._total('radial-chart-total');\n if (total) rings.append(total);\n return rings;\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["ring"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/ts/components/lightbox.ts"],
|
|
4
|
-
"sourcesContent": ["import { Utils } from '../core/utils';\nimport { BaseOptions, Component, InitElements, InitElement } from '../core/component';\n\nexport interface LightboxOptions extends BaseOptions {\n /**\n * Transition in duration in milliseconds.\n * @default 275\n */\n inDuration: number;\n /**\n * Transition out duration in milliseconds.\n * @default 200\n */\n outDuration: number;\n /**\n * Callback function called before lightbox is opened.\n * @default null\n */\n onOpenStart: (el: Element) => void;\n /**\n * Callback function called after lightbox is opened.\n * @default null\n */\n onOpenEnd: (el: Element) => void;\n /**\n * Callback function called before lightbox is closed.\n * @default null\n */\n onCloseStart: (el: Element) => void;\n /**\n * Callback function called after lightbox is closed.\n * @default null\n */\n onCloseEnd: (el: Element) => void;\n}\n\nconst _defaults: LightboxOptions = {\n inDuration: 275,\n outDuration: 200,\n onOpenStart: null,\n onOpenEnd: null,\n onCloseStart: null,\n onCloseEnd: null\n};\n\nexport class Lightbox extends Component<LightboxOptions> {\n /** If the lightbox overlay is showing. */\n overlayActive: boolean;\n /** If the lightbox is no longer being animated. */\n doneAnimating: boolean;\n /** Caption, if specified. */\n caption: string;\n /** Original width of image. */\n originalWidth: number;\n /** Original height of image. */\n originalHeight: number;\n private originInlineStyles: string;\n private placeholder: HTMLElement;\n /** Ancestors forced to `overflow: visible`, with the inline value to put back. */\n private _changedAncestorList: HTMLElement[] = [];\n private static _overflow = new WeakMap<HTMLElement, { count: number; value: string; priority: string }>();\n private newHeight: number;\n private newWidth: number;\n private windowWidth: number;\n private windowHeight: number;\n private attrWidth: string;\n private attrHeight: string;\n private _overlay: HTMLElement;\n private _photoCaption: HTMLElement;\n private _trigger: HTMLElement;\n private _tabindex: string | null;\n private _timers = new Map<ReturnType<typeof setTimeout>, () => void>();\n private _motion = window.matchMedia('(prefers-reduced-motion: reduce)');\n private _isOpen = false;\n private _destroyed = false;\n private _revision = 0;\n\n constructor(el: HTMLElement, options: Partial<LightboxOptions>) {\n super(el, options, Lightbox);\n this.el['Expressive_Lightbox'] = this;\n\n this.options = {\n ...Lightbox.defaults,\n ...options\n };\n\n this.overlayActive = false;\n this.doneAnimating = true;\n this.placeholder = document.createElement('div');\n this.placeholder.classList.add('material-placeholder');\n this.originalWidth = 0;\n this.originalHeight = 0;\n this.originInlineStyles = this.el.getAttribute('style');\n this.caption = this.el.getAttribute('data-caption') || '';\n this._tabindex = this.el.getAttribute('tabindex');\n this._trigger = this.el.closest('button') ?? this.el;\n this.el.tabIndex = this._trigger === this.el ? 0 : -1;\n // Wrap\n this.el.before(this.placeholder);\n this.placeholder.append(this.el);\n this._setupEventHandlers();\n }\n\n static get defaults(): LightboxOptions {\n return _defaults;\n }\n\n /**\n * Initializes instance of Lightbox.\n * @param el HTML element.\n * @param options Component options.\n */\n static init(el: HTMLElement, options?: Partial<LightboxOptions>): Lightbox;\n /**\n * Initializes instances of Lightbox.\n * @param els HTML elements.\n * @param options Component options.\n */\n static init(els: InitElements<InitElement>, options?: Partial<LightboxOptions>): Lightbox[];\n /**\n * Initializes instances of Lightbox.\n * @param els HTML elements.\n * @param options Component options.\n */\n static init(\n els: HTMLElement | InitElements<InitElement>,\n options: Partial<LightboxOptions> = {}\n ): Lightbox | Lightbox[] {\n return super.init(els, options, Lightbox);\n }\n\n static getInstance(el: HTMLElement): Lightbox {\n return el['Expressive_Lightbox'];\n }\n\n destroy() {\n if (this._destroyed) return;\n this._destroyed = true;\n const root = this.el.getRootNode() as Document | ShadowRoot;\n const focused = root.activeElement === this.el;\n this._removeEventHandlers();\n this._cancel();\n this._reset();\n this.placeholder.replaceWith(this.el);\n let active = document.activeElement;\n while (active?.shadowRoot?.activeElement) active = active.shadowRoot.activeElement;\n if (focused && (active === document.body || active === (root as ShadowRoot).host)) this._trigger.focus();\n if (this._tabindex === null) this.el.removeAttribute('tabindex');\n else this.el.setAttribute('tabindex', this._tabindex);\n this.el['Expressive_Lightbox'] = undefined;\n }\n\n private _reset() {\n window.removeEventListener('scroll', this._handleWindowScroll);\n window.removeEventListener('resize', this._handleWindowResize);\n window.removeEventListener('keyup', this._handleWindowEscape);\n this._overlay?.remove();\n this._photoCaption?.remove();\n for (const ancestor of this._changedAncestorList) {\n const saved = Lightbox._overflow.get(ancestor);\n if (--saved.count === 0) {\n ancestor.style.setProperty('overflow', saved.value, saved.priority);\n Lightbox._overflow.delete(ancestor);\n }\n }\n this._changedAncestorList = [];\n if (this.attrWidth !== null && this.attrWidth !== undefined) this.el.setAttribute('width', this.attrWidth);\n if (this.attrHeight !== null && this.attrHeight !== undefined) this.el.setAttribute('height', this.attrHeight);\n this.el.classList.remove('active');\n this.placeholder.removeAttribute('style');\n if (this.originInlineStyles === null) this.el.removeAttribute('style');\n else this.el.setAttribute('style', this.originInlineStyles);\n this.overlayActive = false;\n this._isOpen = false;\n this.doneAnimating = true;\n }\n\n private _cancel() {\n for (const timer of this._timers.keys()) clearTimeout(timer);\n this._timers.clear();\n return ++this._revision;\n }\n\n private _schedule(callback: () => void, delay: number) {\n if (this._motion.matches) { callback(); return; }\n const timer = setTimeout(() => { this._timers.delete(timer); callback(); }, delay);\n this._timers.set(timer, callback);\n }\n\n private _handleMotionChange = () => {\n if (!this._motion.matches) return;\n const callbacks = [...this._timers.values()];\n const revision = this._cancel();\n for (const callback of callbacks) {\n if (revision !== this._revision) break;\n callback();\n }\n if (this.overlayActive) {\n for (const el of [this.el, this._overlay, this._photoCaption]) if (el) el.style.transition = 'none';\n }\n };\n\n private _setupEventHandlers() {\n this._motion.addEventListener('change', this._handleMotionChange);\n this._trigger.addEventListener('click', this._handleLightboxClick);\n this.el.addEventListener('keydown', this._handleLightboxKeypress);\n }\n\n private _removeEventHandlers() {\n this._motion.removeEventListener('change', this._handleMotionChange);\n this._trigger.removeEventListener('click', this._handleLightboxClick);\n this.el.removeEventListener('keydown', this._handleLightboxKeypress);\n }\n\n private _handleLightboxClick = () => {\n this._handleLightboxToggle();\n };\n\n private _handleLightboxKeypress = (e: KeyboardEvent) => {\n if (this._trigger === this.el && (e.key === Utils.keys.ENTER || e.key === ' ')) {\n e.preventDefault();\n this._handleLightboxToggle();\n }\n };\n\n private _handleLightboxToggle = () => {\n // If already modal, return to original\n if (this._isOpen) this.close();\n else this.open();\n };\n\n private _handleWindowScroll = () => {\n if (this.overlayActive) this.close();\n };\n\n private _handleWindowResize = () => {\n if (this.overlayActive) this.close();\n };\n\n private _handleWindowEscape = (e: KeyboardEvent) => {\n if (e.key === Utils.keys.ESC) this.close();\n };\n\n private _makeAncestorsOverflowVisible() {\n this._changedAncestorList = [];\n let ancestor: Node = this.placeholder.parentNode;\n while (ancestor !== null && ancestor !== undefined && ancestor !== document) {\n const curr = <HTMLElement>ancestor;\n // A shadow root has no style; the clipping ancestors are above its host.\n if (curr.style && (curr.style.overflow !== 'visible' || Lightbox._overflow.has(curr))) {\n // Read before the write: an author's inline `overflow` has to come\n // back on close, and restoring '' would silently discard it.\n const saved = Lightbox._overflow.get(curr) ?? { count: 0, value: curr.style.overflow, priority: curr.style.getPropertyPriority('overflow') };\n saved.count++;\n Lightbox._overflow.set(curr, saved);\n this._changedAncestorList.push(curr);\n curr.style.overflow = 'visible';\n }\n ancestor = ancestor.parentNode ?? (<ShadowRoot>ancestor).host;\n }\n }\n\n private _offset(el: HTMLElement) {\n const box = el.getBoundingClientRect();\n const docElem = document.documentElement;\n return {\n top: box.top + window.scrollY - docElem.clientTop,\n left: box.left + window.scrollX - docElem.clientLeft\n };\n }\n private _updateVars(): void {\n this.windowWidth = window.innerWidth;\n this.windowHeight = window.innerHeight;\n this.caption = this.el.getAttribute('data-caption') || '';\n }\n\n // Image\n private _animateImageIn(): void {\n this.el.style.maxHeight = this.newHeight.toString() + 'px';\n this.el.style.maxWidth = this.newWidth.toString() + 'px';\n const duration = this._motion.matches ? 0 : this.options.inDuration;\n // from\n this.el.style.transition = 'none';\n this.el.style.height = this.originalHeight + 'px';\n this.el.style.width = this.originalWidth + 'px';\n this._schedule(() => {\n // One offset for both axes, read before any of the writes below.\n const placeholderOffset = this._offset(this.placeholder);\n // easeOutQuad\n this.el.style.transition = `height ${duration}ms ease,\n width ${duration}ms ease,\n left ${duration}ms ease,\n top ${duration}ms ease\n `;\n // to\n this.el.style.height = this.newHeight + 'px';\n this.el.style.width = this.newWidth + 'px';\n this.el.style.left =\n Utils.getDocumentScrollLeft() +\n this.windowWidth / 2 -\n placeholderOffset.left -\n this.newWidth / 2 +\n 'px';\n\n this.el.style.top =\n Utils.getDocumentScrollTop() +\n this.windowHeight / 2 -\n placeholderOffset.top -\n this.newHeight / 2 +\n 'px';\n }, 1);\n\n this._schedule(() => {\n this.doneAnimating = true;\n if (typeof this.options.onOpenEnd === 'function') this.options.onOpenEnd.call(this, this.el);\n }, duration);\n\n }\n private _animateImageOut(): void {\n const duration = this._motion.matches ? 0 : this.options.outDuration;\n // easeOutQuad\n this.el.style.transition = `height ${duration}ms ease,\n width ${duration}ms ease,\n left ${duration}ms ease,\n top ${duration}ms ease\n `;\n // to\n this.el.style.height = this.originalHeight + 'px'; // was originalWidth\n this.el.style.width = this.originalWidth + 'px';\n this.el.style.left = '0';\n this.el.style.top = '0';\n this._schedule(() => {\n this._reset();\n // onCloseEnd callback\n if (typeof this.options.onCloseEnd === 'function')\n this.options.onCloseEnd.call(this, this.el);\n }, duration);\n }\n\n // Caption\n private _addCaption(): void {\n this._photoCaption = document.createElement('div');\n this._photoCaption.classList.add('lightbox-caption');\n this._photoCaption.innerText = this.caption;\n Utils.portalRoot(this.el).append(this._photoCaption);\n this._photoCaption.style.display = 'inline';\n // Animate\n this._photoCaption.style.transition = 'none';\n this._photoCaption.style.opacity = '0';\n const duration = this._motion.matches ? 0 : this.options.inDuration;\n this._schedule(() => {\n this._photoCaption.style.transition = `opacity ${duration}ms ease`;\n this._photoCaption.style.opacity = '1';\n }, 1);\n }\n private _removeCaption(): void {\n const duration = this._motion.matches ? 0 : this.options.outDuration;\n this._photoCaption.style.transition = `opacity ${duration}ms ease`;\n this._photoCaption.style.opacity = '0';\n }\n\n // Overlay\n private _addOverlay(): void {\n this._overlay = document.createElement('div');\n this._overlay.id = 'lightbox-overlay';\n this._overlay.addEventListener(\n 'click',\n (event) => {\n event.stopPropagation();\n this.close();\n },\n { once: true }\n );\n\n // Put before in origin image to preserve z-index layering.\n this.el.before(this._overlay);\n\n // Set dimensions if needed\n const overlayOffset = this._overlay.getBoundingClientRect();\n this._overlay.style.width = this.windowWidth + 'px';\n this._overlay.style.height = this.windowHeight + 'px';\n this._overlay.style.left = -1 * overlayOffset.left + 'px';\n this._overlay.style.top = -1 * overlayOffset.top + 'px';\n\n // Animate\n this._overlay.style.transition = 'none';\n this._overlay.style.opacity = '0';\n const duration = this._motion.matches ? 0 : this.options.inDuration;\n this._schedule(() => {\n this._overlay.style.transition = `opacity ${duration}ms ease`;\n this._overlay.style.opacity = '1';\n }, 1);\n }\n private _removeOverlay(): void {\n const duration = this._motion.matches ? 0 : this.options.outDuration;\n this._overlay.style.transition = `opacity ${duration}ms ease`;\n this._overlay.style.opacity = '0';\n }\n\n /**\n * Open lightbox.\n */\n open = () => {\n if (this._destroyed || this._isOpen) return;\n const revision = this._cancel();\n if (this.overlayActive) this._reset();\n this._isOpen = true;\n this._updateVars();\n // Both rects are read up front: measuring the placeholder after writing\n // its width forced a second layout for the height.\n const originRect = this.el.getBoundingClientRect();\n const placeholderRect = this.placeholder.getBoundingClientRect();\n this.originalWidth = originRect.width;\n this.originalHeight = originRect.height;\n // Set states\n this.doneAnimating = false;\n this.el.classList.add('active');\n this.overlayActive = true;\n // onOpenStart callback\n if (typeof this.options.onOpenStart === 'function')\n this.options.onOpenStart.call(this, this.el);\n if (revision !== this._revision) return;\n // Set positioning for placeholder\n this.placeholder.style.width = placeholderRect.width + 'px';\n this.placeholder.style.height = placeholderRect.height + 'px';\n this.placeholder.style.position = 'relative';\n this.placeholder.style.top = '0';\n this.placeholder.style.left = '0';\n this._makeAncestorsOverflowVisible();\n // Set css on origin\n this.el.style.position = 'absolute';\n this.el.style.zIndex = '1000';\n this.el.style.willChange = 'left, top, width, height';\n // Change from width or height attribute to css\n this.attrWidth = this.el.getAttribute('width');\n this.attrHeight = this.el.getAttribute('height');\n if (this.attrWidth) {\n this.el.style.width = this.attrWidth + 'px';\n this.el.removeAttribute('width');\n }\n if (this.attrHeight) {\n this.el.style.height = this.attrHeight + 'px'; // was width, from the height attribute\n this.el.removeAttribute('height');\n }\n this._addOverlay();\n // Add and animate caption if it exists\n if (this.caption !== '') this._addCaption();\n // Resize Image\n const widthPercent = this.originalWidth / this.windowWidth;\n const heightPercent = this.originalHeight / this.windowHeight;\n this.newWidth = 0;\n this.newHeight = 0;\n if (widthPercent > heightPercent) {\n // Width first\n const ratio = this.originalHeight / this.originalWidth;\n this.newWidth = this.windowWidth * 0.9;\n this.newHeight = this.windowWidth * 0.9 * ratio;\n } else {\n // Height first\n const ratio = this.originalWidth / this.originalHeight;\n this.newWidth = this.windowHeight * 0.9 * ratio;\n this.newHeight = this.windowHeight * 0.9;\n }\n // Handle Exit triggers\n window.addEventListener('scroll', this._handleWindowScroll, { passive: true });\n window.addEventListener('resize', this._handleWindowResize, { passive: true });\n window.addEventListener('keyup', this._handleWindowEscape);\n this._animateImageIn();\n };\n\n /**\n * Close lightbox.\n */\n close = () => {\n if (this._destroyed || !this._isOpen) return;\n const revision = this._cancel();\n this._isOpen = false;\n this.doneAnimating = false;\n // onCloseStart callback\n if (typeof this.options.onCloseStart === 'function')\n this.options.onCloseStart.call(this, this.el);\n if (revision !== this._revision) return;\n // disable exit handlers\n window.removeEventListener('scroll', this._handleWindowScroll);\n window.removeEventListener('resize', this._handleWindowResize);\n window.removeEventListener('keyup', this._handleWindowEscape);\n if (this._overlay) this._removeOverlay();\n if (this._photoCaption) this._removeCaption();\n this._animateImageOut();\n };\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/ts/components/columnChart.ts"],
|
|
4
|
-
"sourcesContent": ["import { InitElements, InitElement } from '../core/component';\nimport { COLORS, LineChart, LineChartOptions } from './lineChart';\n\nexport type ColumnChartOptions = LineChartOptions;\n\n/**\n * Column chart. It reads its <table>, scales, labels and tooltip like\n * LineChart, but draws each row as a group of columns from zero, or one\n * column of segments with `stacked`. Columns are HTML clipped to their\n * value, so their rounded corners keep their shape at any size.\n *\n * Re-run `ColumnChart.init(el)` after changing the table.\n */\nexport class ColumnChart extends LineChart {\n protected get _type() {\n return 'column-chart';\n }\n\n protected get _key() {\n return 'Expressive_ColumnChart';\n }\n\n protected get _fromZero() {\n return true;\n }\n\n protected get _points() {\n return false;\n }\n\n static init(el: HTMLElement, options?: Partial<ColumnChartOptions>): ColumnChart;\n static init(els: InitElements<InitElement>, options?: Partial<ColumnChartOptions>): ColumnChart[];\n static init(\n els: HTMLElement | InitElements<InitElement>,\n options: Partial<ColumnChartOptions> = {}\n ): ColumnChart | ColumnChart[] {\n return super.init(els as HTMLElement, options) as ColumnChart | ColumnChart[];\n }\n\n static getInstance(el: HTMLElement): ColumnChart {\n return el['Expressive_ColumnChart'];\n }\n\n protected _draw(drawn = this.series): Element {\n const columns = document.createElement('div');\n columns.className = 'column-chart-columns';\n columns.setAttribute('aria-hidden', 'true');\n const clamp = (value: number, y = drawn[0]?.y ?? this._y) => Math.min(100, Math.max(0, y(value)));\n // Columns grow from zero, or from the plot edge when zero is off the scale.\n columns.style.setProperty('--zero', `${clamp(0)}%`);\n this._plot.style.setProperty('--rows', String(this.labels.length));\n\n this.labels.forEach((_, index) => {\n const row = document.createElement('div');\n drawn.forEach((series) => {\n // A stacked segment above a gap has no known base, so it is left out.\n const to = series.tops[index];\n const from = series.base?.[index] ?? 0;\n if (series.base && (to === null || from === null)) return;\n const column = document.createElement('span');\n // A gap in a grouped row keeps its empty slot, so the series stay aligned.\n if (to !== null) {\n column.className = series.className;\n column.dataset.series = String((this.series.indexOf(series) % COLORS) + 1);\n // A stacked segment never hangs from zero, so it keeps the top rounding.\n column.classList.toggle('negative', !series.base && to < from);\n column.style.setProperty('--top', `${clamp(Math.max(from, to), series.y)}%`);\n column.style.setProperty('--bottom', `${100 - clamp(Math.min(from, to), series.y)}%`);\n // The cell text, which a bar chart with .values writes along its bar.\n if (this._horizontal) column.dataset.text = series.text[index];\n }\n row.append(column);\n });\n columns.append(row);\n });\n return columns;\n }\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;AAaO,IAAM,cAAN,cAA0B,UAAU;AAAA,EACzC,IAAc,QAAQ;AACpB,WAAO;AAAA,EACT;AAAA,EAEA,IAAc,OAAO;AACnB,WAAO;AAAA,EACT;AAAA,EAEA,IAAc,YAAY;AACxB,WAAO;AAAA,EACT;AAAA,EAEA,IAAc,UAAU;AACtB,WAAO;AAAA,EACT;AAAA,EAIA,OAAO,KACL,KACA,UAAuC,CAAC,GACX;AAC7B,WAAO,MAAM,KAAK,KAAoB,OAAO;AAAA,EAC/C;AAAA,EAEA,OAAO,YAAY,IAA8B;AAC/C,WAAO,GAAG,wBAAwB;AAAA,EACpC;AAAA,EAEU,MAAM,QAAQ,KAAK,QAAiB;AAC5C,UAAM,UAAU,SAAS,cAAc,KAAK;AAC5C,YAAQ,YAAY;AACpB,YAAQ,aAAa,eAAe,MAAM;AAC1C,UAAM,QAAQ,CAAC,OAAe,IAAI,MAAM,CAAC,GAAG,KAAK,KAAK,OAAO,KAAK,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE,KAAK,CAAC,CAAC;AAEhG,YAAQ,MAAM,YAAY,UAAU,GAAG,MAAM,CAAC,CAAC,GAAG;AAClD,SAAK,MAAM,MAAM,YAAY,UAAU,OAAO,KAAK,OAAO,MAAM,CAAC;AAEjE,SAAK,OAAO,QAAQ,CAAC,GAAG,UAAU;AAChC,YAAM,MAAM,SAAS,cAAc,KAAK;AACxC,YAAM,QAAQ,CAAC,WAAW;AAExB,cAAM,KAAK,OAAO,KAAK,KAAK;AAC5B,cAAM,OAAO,OAAO,OAAO,KAAK,KAAK;AACrC,YAAI,OAAO,SAAS,OAAO,QAAQ,SAAS,MAAO;AACnD,cAAM,SAAS,SAAS,cAAc,MAAM;AAE5C,YAAI,OAAO,MAAM;AACf,iBAAO,YAAY,OAAO;AAC1B,iBAAO,QAAQ,SAAS,OAAQ,KAAK,OAAO,QAAQ,MAAM,IAAI,SAAU,CAAC;AAEzE,iBAAO,UAAU,OAAO,YAAY,CAAC,OAAO,QAAQ,KAAK,IAAI;AAC7D,iBAAO,MAAM,YAAY,SAAS,GAAG,MAAM,KAAK,IAAI,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG;AAC3E,iBAAO,MAAM,YAAY,YAAY,GAAG,MAAM,MAAM,KAAK,IAAI,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG;AAEpF,cAAI,KAAK,YAAa,QAAO,QAAQ,OAAO,OAAO,KAAK,KAAK;AAAA,QAC/D;AACA,YAAI,OAAO,MAAM;AAAA,MACnB,CAAC;AACD,cAAQ,OAAO,GAAG;AAAA,IACpB,CAAC;AACD,WAAO;AAAA,EACT;AACF;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/ts/components/pieChart.ts"],
|
|
4
|
-
"sourcesContent": ["import { InitElements, InitElement } from '../core/component';\nimport { LineChart, LineChartOptions, svgNode as node } from './lineChart';\n\nexport type PieChartOptions = LineChartOptions;\n\n// ponytail: rows past six repeat the colors; group small parts as \"Other\".\nconst COLORS = 6;\n/** The pie's radius in a 100-unit box, leaving room for the active slice to grow. */\nconst RADIUS = 46;\n/** The active slice's scale, as in _pie-chart.scss. */\nconst GROWN = 1.06;\n/** Slices smaller than this share get no .values label. */\nconst LABEL_SHARE = 0.05;\nlet _maskId = 0;\n\n/**\n * Pie chart. It reads its <table> like LineChart, but draws each row of the\n * first value column as a slice of the whole, clockwise from the top, with\n * a legend of every row and its share. With `.donut`, a <tfoot> row is the\n * total in the middle. Further columns show in the tooltip.\n *\n * Re-run `PieChart.init(el)` after changing the table.\n */\nexport class PieChart extends LineChart {\n // No initializers: LineChart's constructor draws before they would run.\n /** Each row's start and end, as fractions of a turn clockwise from the top. */\n private _turns: [number, number][];\n /** Each row's color, or undefined for a row with no slice. */\n private _colors: (string | undefined)[];\n private _slices: (SVGPathElement | null)[];\n /** Percent formatters by fraction digits, rebuilt once per legend. */\n private _percents: Intl.NumberFormat[];\n\n protected get _type() {\n return 'pie-chart';\n }\n\n protected get _key() {\n return 'Expressive_PieChart';\n }\n\n protected get _points() {\n return false;\n }\n\n protected get _circular() {\n return true;\n }\n\n static init(el: HTMLElement, options?: Partial<PieChartOptions>): PieChart;\n static init(els: InitElements<InitElement>, options?: Partial<PieChartOptions>): PieChart[];\n static init(\n els: HTMLElement | InitElements<InitElement>,\n options: Partial<PieChartOptions> = {}\n ): PieChart | PieChart[] {\n return super.init(els as HTMLElement, options) as PieChart | PieChart[];\n }\n\n static getInstance(el: HTMLElement): PieChart {\n return el['Expressive_PieChart'];\n }\n\n show(index: number) {\n if (!this._tooltip || index === this.activeIndex) return;\n super.show(index);\n this._slices.forEach((slice, i) => slice?.classList.toggle('active', i === index));\n // LineChart hides the tooltip for -1 and for an index past the last row.\n if (this._tooltip.hidden) return;\n\n const color = this._colors[index];\n this._tooltip.querySelectorAll<HTMLElement>('[data-series]').forEach((span) => {\n if (color) span.dataset.series = color;\n else delete span.dataset.series;\n });\n const share = this._share(index);\n const value = this._tooltip.querySelector('span:nth-of-type(2)');\n if (share && value) value.textContent += ` (${share})`;\n }\n\n /** CSS places the tooltip on the slice's middle from --turn. */\n protected _place(index: number) {\n const middle = (this._turns[index][0] + this._turns[index][1]) / 2;\n this._tooltip.style.setProperty('--turn', String(middle));\n // On the right half it opens leftwards, over the pie.\n this._tooltip.classList.toggle('end', middle < 0.5);\n }\n\n /** The row's share of the whole as a percentage, or '' for none. */\n private _share(index: number) {\n const [start, end] = this._turns[index];\n if (end <= start) return '';\n const share = end - start;\n // Whole percentages, with a tenth below 10% so a small part is not 0%.\n const digits = share < 0.1 ? 1 : 0;\n (this._percents ??= [])[digits] ??= this._percent(digits);\n return this._percents[digits].format(share);\n }\n\n private _percent(digits: number) {\n const options = { style: 'percent', maximumFractionDigits: digits } as const;\n try {\n return new Intl.NumberFormat(this.el.closest<HTMLElement>('[lang]')?.lang || undefined, options);\n } catch {\n // An invalid lang attribute.\n return new Intl.NumberFormat(undefined, options);\n }\n }\n\n /** The legend: every row with its color, its cell and its share. */\n protected _guides(): Element[] {\n // A redraw picks up a changed lang attribute.\n this._percents = [];\n const legend = document.createElement('ul');\n legend.className = 'pie-chart-legend';\n legend.setAttribute('aria-hidden', 'true');\n const text = this.series[0].text;\n legend.append(...this.labels.map((label, i) => {\n const li = document.createElement('li');\n if (this._colors[i]) li.dataset.series = this._colors[i];\n const [name, value, share] = [label, text[i], this._share(i)].map((content) => {\n const span = document.createElement('span');\n span.textContent = content;\n return span;\n });\n li.append(name, value, share);\n return li;\n }));\n return [legend];\n }\n\n /** The row under the pointer by its angle from the middle, or -1 off the slices. */\n protected _indexAt(e: PointerEvent) {\n const [turn, share] = this._polarAt(e);\n // The distance in the SVG's 100-unit box.\n const distance = share * 100;\n const hole = this.el.classList.contains('donut')\n ? parseFloat(getComputedStyle(this.el).getPropertyValue('--md-comp-pie-chart-hole')) || 0\n : 0;\n if (distance < RADIUS * hole) return -1;\n const index = this._turns.findIndex(([start, end]) => start <= turn && turn < end);\n // The active slice is drawn larger, so the pointer stays on it to its edge.\n return distance > RADIUS * (index === this.activeIndex ? GROWN : 1) ? -1 : index;\n }\n\n /**\n * An SVG of slices in a -50 to 50 box, under a mask that cuts the gaps\n * between them and the donut's hole, which CSS sizes. The values and the\n * total are HTML over it.\n */\n protected _draw(): Element {\n const values = this.series[0].values.map((value) => Math.max(0, value ?? 0));\n const total = values.reduce((sum, value) => sum + value, 0);\n let turn = 0;\n this._turns = values.map((value) => [turn, (turn += total ? value / total : 0)]);\n // Colors go round the drawn slices; the last skips the first's color beside it.\n const drawn = this._turns.filter(([start, end]) => end > start).length;\n let slice = 0;\n this._colors = this._turns.map(([start, end]) => {\n if (end <= start) return undefined;\n const index = slice++;\n return String(index === drawn - 1 && index > 0 && index % COLORS === 0 ? 2 : (index % COLORS) + 1);\n });\n const at = (t: number, r = RADIUS) => {\n const angle = t * 2 * Math.PI;\n return `${(r * Math.sin(angle)).toFixed(3)},${(-r * Math.cos(angle)).toFixed(3)}`;\n };\n\n const pie = document.createElement('div');\n pie.className = 'pie-chart-pie';\n pie.setAttribute('aria-hidden', 'true');\n const svg = node('svg', { viewBox: '-50 -50 100 100', focusable: 'false' });\n const id = `pie-chart-mask-${++_maskId}`;\n const area = { x: '-50', y: '-50', width: '100', height: '100' };\n const mask = node('mask', { id, maskUnits: 'userSpaceOnUse', ...area });\n const edges = this._turns.filter(([start, end]) => end > start);\n mask.append(\n node('rect', { ...area, fill: 'white' }),\n node('path', {\n class: 'pie-chart-gaps',\n stroke: 'black',\n d: edges.length > 1 ? edges.map(([start]) => `M0,0L${at(start, 50)}`).join('') : ''\n }),\n node('circle', { class: 'pie-chart-hole', r: String(RADIUS), fill: 'black' })\n );\n\n const slices = node('g', { mask: `url(#${id})` });\n const arc = `A${RADIUS},${RADIUS} 0`;\n this._slices = this._turns.map(([start, end], i) => {\n if (end <= start) return null;\n const slice = node('path', {\n class: 'pie-chart-slice',\n 'data-series': this._colors[i],\n // A whole circle is two half arcs; one arc cannot end where it starts.\n d: end - start >= 1\n ? `M0,${-RADIUS}${arc} 1 1 0,${RADIUS}${arc} 1 1 0,${-RADIUS}Z`\n : `M0,0L${at(start)}${arc} ${end - start > 0.5 ? 1 : 0} 1 ${at(end)}Z`\n }) as SVGPathElement;\n slices.append(slice);\n return slice;\n });\n svg.append(mask, slices);\n pie.append(svg);\n\n if (this.el.classList.contains('values')) {\n const labels = document.createElement('div');\n labels.className = 'pie-chart-values';\n this._turns.forEach(([start, end], i) => {\n if (end - start < LABEL_SHARE) return;\n const label = document.createElement('span');\n label.dataset.series = this._colors[i];\n label.style.setProperty('--turn', String((start + end) / 2));\n label.textContent = this._share(i);\n labels.append(label);\n });\n pie.append(labels);\n }\n\n const middle = this._total('pie-chart-total');\n if (middle) pie.append(middle);\n return pie;\n }\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;AAMA,IAAM,SAAS;AAEf,IAAM,SAAS;AAEf,IAAM,QAAQ;AAEd,IAAM,cAAc;AACpB,IAAI,UAAU;AAUP,IAAM,WAAN,cAAuB,UAAU;AAAA,EAUtC,IAAc,QAAQ;AACpB,WAAO;AAAA,EACT;AAAA,EAEA,IAAc,OAAO;AACnB,WAAO;AAAA,EACT;AAAA,EAEA,IAAc,UAAU;AACtB,WAAO;AAAA,EACT;AAAA,EAEA,IAAc,YAAY;AACxB,WAAO;AAAA,EACT;AAAA,EAIA,OAAO,KACL,KACA,UAAoC,CAAC,GACd;AACvB,WAAO,MAAM,KAAK,KAAoB,OAAO;AAAA,EAC/C;AAAA,EAEA,OAAO,YAAY,IAA2B;AAC5C,WAAO,GAAG,qBAAqB;AAAA,EACjC;AAAA,EAEA,KAAK,OAAe;AAClB,QAAI,CAAC,KAAK,YAAY,UAAU,KAAK,YAAa;AAClD,UAAM,KAAK,KAAK;AAChB,SAAK,QAAQ,QAAQ,CAAC,OAAO,MAAM,OAAO,UAAU,OAAO,UAAU,MAAM,KAAK,CAAC;AAEjF,QAAI,KAAK,SAAS,OAAQ;AAE1B,UAAM,QAAQ,KAAK,QAAQ,KAAK;AAChC,SAAK,SAAS,iBAA8B,eAAe,EAAE,QAAQ,CAAC,SAAS;AAC7E,UAAI,MAAO,MAAK,QAAQ,SAAS;AAAA,UAC5B,QAAO,KAAK,QAAQ;AAAA,IAC3B,CAAC;AACD,UAAM,QAAQ,KAAK,OAAO,KAAK;AAC/B,UAAM,QAAQ,KAAK,SAAS,cAAc,qBAAqB;AAC/D,QAAI,SAAS,MAAO,OAAM,eAAe,KAAK,KAAK;AAAA,EACrD;AAAA;AAAA,EAGU,OAAO,OAAe;AAC9B,UAAM,UAAU,KAAK,OAAO,KAAK,EAAE,CAAC,IAAI,KAAK,OAAO,KAAK,EAAE,CAAC,KAAK;AACjE,SAAK,SAAS,MAAM,YAAY,UAAU,OAAO,MAAM,CAAC;AAExD,SAAK,SAAS,UAAU,OAAO,OAAO,SAAS,GAAG;AAAA,EACpD;AAAA;AAAA,EAGQ,OAAO,OAAe;AAxFhC;AAyFI,UAAM,CAAC,OAAO,GAAG,IAAI,KAAK,OAAO,KAAK;AACtC,QAAI,OAAO,MAAO,QAAO;AACzB,UAAM,QAAQ,MAAM;AAEpB,UAAM,SAAS,QAAQ,MAAM,IAAI;AACjC,KAAC,UAAK,cAAL,KAAK,YAAc,CAAC,IAApB,yBAAmC,KAAK,SAAS,MAAM;AACxD,WAAO,KAAK,UAAU,MAAM,EAAE,OAAO,KAAK;AAAA,EAC5C;AAAA,EAEQ,SAAS,QAAgB;AAC/B,UAAM,UAAU,EAAE,OAAO,WAAW,uBAAuB,OAAO;AAClE,QAAI;AACF,aAAO,IAAI,KAAK,aAAa,KAAK,GAAG,QAAqB,QAAQ,GAAG,QAAQ,QAAW,OAAO;AAAA,IACjG,QAAQ;AAEN,aAAO,IAAI,KAAK,aAAa,QAAW,OAAO;AAAA,IACjD;AAAA,EACF;AAAA;AAAA,EAGU,UAAqB;AAE7B,SAAK,YAAY,CAAC;AAClB,UAAM,SAAS,SAAS,cAAc,IAAI;AAC1C,WAAO,YAAY;AACnB,WAAO,aAAa,eAAe,MAAM;AACzC,UAAM,OAAO,KAAK,OAAO,CAAC,EAAE;AAC5B,WAAO,OAAO,GAAG,KAAK,OAAO,IAAI,CAAC,OAAO,MAAM;AAC7C,YAAM,KAAK,SAAS,cAAc,IAAI;AACtC,UAAI,KAAK,QAAQ,CAAC,EAAG,IAAG,QAAQ,SAAS,KAAK,QAAQ,CAAC;AACvD,YAAM,CAAC,MAAM,OAAO,KAAK,IAAI,CAAC,OAAO,KAAK,CAAC,GAAG,KAAK,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY;AAC7E,cAAM,OAAO,SAAS,cAAc,MAAM;AAC1C,aAAK,cAAc;AACnB,eAAO;AAAA,MACT,CAAC;AACD,SAAG,OAAO,MAAM,OAAO,KAAK;AAC5B,aAAO;AAAA,IACT,CAAC,CAAC;AACF,WAAO,CAAC,MAAM;AAAA,EAChB;AAAA;AAAA,EAGU,SAAS,GAAiB;AAClC,UAAM,CAAC,MAAM,KAAK,IAAI,KAAK,SAAS,CAAC;AAErC,UAAM,WAAW,QAAQ;AACzB,UAAM,OAAO,KAAK,GAAG,UAAU,SAAS,OAAO,IAC3C,WAAW,iBAAiB,KAAK,EAAE,EAAE,iBAAiB,0BAA0B,CAAC,KAAK,IACtF;AACJ,QAAI,WAAW,SAAS,KAAM,QAAO;AACrC,UAAM,QAAQ,KAAK,OAAO,UAAU,CAAC,CAAC,OAAO,GAAG,MAAM,SAAS,QAAQ,OAAO,GAAG;AAEjF,WAAO,WAAW,UAAU,UAAU,KAAK,cAAc,QAAQ,KAAK,KAAK;AAAA,EAC7E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOU,QAAiB;AACzB,UAAM,SAAS,KAAK,OAAO,CAAC,EAAE,OAAO,IAAI,CAAC,UAAU,KAAK,IAAI,GAAG,SAAS,CAAC,CAAC;AAC3E,UAAM,QAAQ,OAAO,OAAO,CAAC,KAAK,UAAU,MAAM,OAAO,CAAC;AAC1D,QAAI,OAAO;AACX,SAAK,SAAS,OAAO,IAAI,CAAC,UAAU,CAAC,MAAO,QAAQ,QAAQ,QAAQ,QAAQ,CAAE,CAAC;AAE/E,UAAM,QAAQ,KAAK,OAAO,OAAO,CAAC,CAAC,OAAO,GAAG,MAAM,MAAM,KAAK,EAAE;AAChE,QAAI,QAAQ;AACZ,SAAK,UAAU,KAAK,OAAO,IAAI,CAAC,CAAC,OAAO,GAAG,MAAM;AAC/C,UAAI,OAAO,MAAO,QAAO;AACzB,YAAM,QAAQ;AACd,aAAO,OAAO,UAAU,QAAQ,KAAK,QAAQ,KAAK,QAAQ,WAAW,IAAI,IAAK,QAAQ,SAAU,CAAC;AAAA,IACnG,CAAC;AACD,UAAM,KAAK,CAAC,GAAW,IAAI,WAAW;AACpC,YAAM,QAAQ,IAAI,IAAI,KAAK;AAC3B,aAAO,IAAI,IAAI,KAAK,IAAI,KAAK,GAAG,QAAQ,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,KAAK,GAAG,QAAQ,CAAC,CAAC;AAAA,IACjF;AAEA,UAAM,MAAM,SAAS,cAAc,KAAK;AACxC,QAAI,YAAY;AAChB,QAAI,aAAa,eAAe,MAAM;AACtC,UAAM,MAAM,QAAK,OAAO,EAAE,SAAS,mBAAmB,WAAW,QAAQ,CAAC;AAC1E,UAAM,KAAK,kBAAkB,EAAE,OAAO;AACtC,UAAM,OAAO,EAAE,GAAG,OAAO,GAAG,OAAO,OAAO,OAAO,QAAQ,MAAM;AAC/D,UAAM,OAAO,QAAK,QAAQ,EAAE,IAAI,WAAW,kBAAkB,GAAG,KAAK,CAAC;AACtE,UAAM,QAAQ,KAAK,OAAO,OAAO,CAAC,CAAC,OAAO,GAAG,MAAM,MAAM,KAAK;AAC9D,SAAK;AAAA,MACH,QAAK,QAAQ,EAAE,GAAG,MAAM,MAAM,QAAQ,CAAC;AAAA,MACvC,QAAK,QAAQ;AAAA,QACX,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,GAAG,MAAM,SAAS,IAAI,MAAM,IAAI,CAAC,CAAC,KAAK,MAAM,QAAQ,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI;AAAA,MACnF,CAAC;AAAA,MACD,QAAK,UAAU,EAAE,OAAO,kBAAkB,GAAG,OAAO,MAAM,GAAG,MAAM,QAAQ,CAAC;AAAA,IAC9E;AAEA,UAAM,SAAS,QAAK,KAAK,EAAE,MAAM,QAAQ,EAAE,IAAI,CAAC;AAChD,UAAM,MAAM,IAAI,MAAM,IAAI,MAAM;AAChC,SAAK,UAAU,KAAK,OAAO,IAAI,CAAC,CAAC,OAAO,GAAG,GAAG,MAAM;AAClD,UAAI,OAAO,MAAO,QAAO;AACzB,YAAMA,SAAQ,QAAK,QAAQ;AAAA,QACzB,OAAO;AAAA,QACP,eAAe,KAAK,QAAQ,CAAC;AAAA;AAAA,QAE7B,GAAG,MAAM,SAAS,IACd,MAAM,CAAC,MAAM,GAAG,GAAG,UAAU,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM,MAC1D,QAAQ,GAAG,KAAK,CAAC,GAAG,GAAG,IAAI,MAAM,QAAQ,MAAM,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;AAAA,MACvE,CAAC;AACD,aAAO,OAAOA,MAAK;AACnB,aAAOA;AAAA,IACT,CAAC;AACD,QAAI,OAAO,MAAM,MAAM;AACvB,QAAI,OAAO,GAAG;AAEd,QAAI,KAAK,GAAG,UAAU,SAAS,QAAQ,GAAG;AACxC,YAAM,SAAS,SAAS,cAAc,KAAK;AAC3C,aAAO,YAAY;AACnB,WAAK,OAAO,QAAQ,CAAC,CAAC,OAAO,GAAG,GAAG,MAAM;AACvC,YAAI,MAAM,QAAQ,YAAa;AAC/B,cAAM,QAAQ,SAAS,cAAc,MAAM;AAC3C,cAAM,QAAQ,SAAS,KAAK,QAAQ,CAAC;AACrC,cAAM,MAAM,YAAY,UAAU,QAAQ,QAAQ,OAAO,CAAC,CAAC;AAC3D,cAAM,cAAc,KAAK,OAAO,CAAC;AACjC,eAAO,OAAO,KAAK;AAAA,MACrB,CAAC;AACD,UAAI,OAAO,MAAM;AAAA,IACnB;AAEA,UAAM,SAAS,KAAK,OAAO,iBAAiB;AAC5C,QAAI,OAAQ,KAAI,OAAO,MAAM;AAC7B,WAAO;AAAA,EACT;AACF;",
|
|
6
|
-
"names": ["slice"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/ts/behaviors/dialogs.ts"],
|
|
4
|
-
"sourcesContent": ["import { Utils } from '../core/utils';\n\ntype ClosedBy = 'any' | 'closerequest' | 'none';\n\n/**\n * Light-dismiss for native `<dialog>` elements.\n *\n * `showModal()` does not close on a backdrop tap. A naive `click` listener\n * on the dialog (where `::backdrop` events retarget) also fires when the\n * user starts a gesture on the dialog and releases on the scrim \u2014 selecting\n * text, missing a button, dragging a thumb. Both ends of the pointer\n * gesture must land outside the dialog's border box.\n *\n * Default is on. Opt out with `closedby=\"none\"` or `closedby=\"closerequest\"`.\n * If the browser already honours `closedby=\"any\"`, we leave that alone.\n */\nexport class Dialogs {\n private static _down: { dialog: HTMLDialogElement; pointerId: number } | null = null;\n\n static Init() {\n Utils.onDocumentReady(() => {\n document.addEventListener('pointerdown', Dialogs._onPointerDown, { passive: true });\n document.addEventListener('pointerup', Dialogs._onPointerUp, { passive: true });\n document.addEventListener('pointercancel', Dialogs._onPointerCancel, { passive: true });\n });\n }\n\n static _onPointerDown(event: PointerEvent) {\n if (!Dialogs._isPrimaryPress(event)) {\n Dialogs._down = null;\n return;\n }\n const dialog = Dialogs._backdropDialog(event);\n if (!dialog || !Dialogs._lightDismissible(dialog) || !Dialogs._outside(event, dialog)) {\n Dialogs._down = null;\n return;\n }\n Dialogs._down = { dialog, pointerId: event.pointerId };\n }\n\n static _onPointerUp(event: PointerEvent) {\n const started = Dialogs._down;\n Dialogs._down = null;\n if (!started || started.pointerId !== event.pointerId) return;\n if (!event.isPrimary) return;\n if (!started.dialog.isConnected || !started.dialog.open) return;\n if (!Dialogs._lightDismissible(started.dialog)) return;\n if (Dialogs._backdropDialog(event) !== started.dialog) return;\n if (Dialogs._outside(event, started.dialog)) {\n started.dialog.close();\n }\n }\n\n static _onPointerCancel() {\n Dialogs._down = null;\n }\n\n /** Backdrop hits retarget to the dialog itself, never a child. */\n private static _backdropDialog(event: Event): HTMLDialogElement | null {\n const target = event.target;\n if (!(target instanceof HTMLDialogElement) || !target.open) return null;\n return target;\n }\n\n private static _outside(event: PointerEvent, dialog: HTMLDialogElement): boolean {\n const rect = dialog.getBoundingClientRect();\n return (\n event.clientX < rect.left ||\n event.clientX > rect.right ||\n event.clientY < rect.top ||\n event.clientY > rect.bottom\n );\n }\n\n private static _isPrimaryPress(event: PointerEvent): boolean {\n if (!event.isPrimary) return false;\n return event.pointerType !== 'mouse' || event.button === 0;\n }\n\n private static _lightDismissible(dialog: HTMLDialogElement): boolean {\n const value = Dialogs._closedBy(dialog);\n if (value === 'none' || value === 'closerequest') return false;\n // Native closedby=\"any\" already light-dismisses with the same\n // \"both ends outside\" rule. Don't race it.\n if (value === 'any' && 'closedBy' in HTMLDialogElement.prototype) return false;\n return true;\n }\n\n // Read the attribute only. The IDL default for an unset closedby is\n // \"closerequest\" (Escape, no light dismiss) \u2014 treating that as an\n // author opt-out made every dialog undismissable from the scrim.\n private static _closedBy(dialog: HTMLDialogElement): ClosedBy | null {\n const attr = dialog.getAttribute('closedby');\n if (attr === 'any' || attr === 'closerequest' || attr === 'none') return attr;\n return null;\n }\n}\n"],
|
|
5
|
-
"mappings": ";;;;;AAgBO,IAAM,WAAN,MAAM,SAAQ;AAAA,EAGnB,OAAO,OAAO;AACZ,UAAM,gBAAgB,MAAM;AAC1B,eAAS,iBAAiB,eAAe,SAAQ,gBAAgB,EAAE,SAAS,KAAK,CAAC;AAClF,eAAS,iBAAiB,aAAa,SAAQ,cAAc,EAAE,SAAS,KAAK,CAAC;AAC9E,eAAS,iBAAiB,iBAAiB,SAAQ,kBAAkB,EAAE,SAAS,KAAK,CAAC;AAAA,IACxF,CAAC;AAAA,EACH;AAAA,EAEA,OAAO,eAAe,OAAqB;AACzC,QAAI,CAAC,SAAQ,gBAAgB,KAAK,GAAG;AACnC,eAAQ,QAAQ;AAChB;AAAA,IACF;AACA,UAAM,SAAS,SAAQ,gBAAgB,KAAK;AAC5C,QAAI,CAAC,UAAU,CAAC,SAAQ,kBAAkB,MAAM,KAAK,CAAC,SAAQ,SAAS,OAAO,MAAM,GAAG;AACrF,eAAQ,QAAQ;AAChB;AAAA,IACF;AACA,aAAQ,QAAQ,EAAE,QAAQ,WAAW,MAAM,UAAU;AAAA,EACvD;AAAA,EAEA,OAAO,aAAa,OAAqB;AACvC,UAAM,UAAU,SAAQ;AACxB,aAAQ,QAAQ;AAChB,QAAI,CAAC,WAAW,QAAQ,cAAc,MAAM,UAAW;AACvD,QAAI,CAAC,MAAM,UAAW;AACtB,QAAI,CAAC,QAAQ,OAAO,eAAe,CAAC,QAAQ,OAAO,KAAM;AACzD,QAAI,CAAC,SAAQ,kBAAkB,QAAQ,MAAM,EAAG;AAChD,QAAI,SAAQ,gBAAgB,KAAK,MAAM,QAAQ,OAAQ;AACvD,QAAI,SAAQ,SAAS,OAAO,QAAQ,MAAM,GAAG;AAC3C,cAAQ,OAAO,MAAM;AAAA,IACvB;AAAA,EACF;AAAA,EAEA,OAAO,mBAAmB;AACxB,aAAQ,QAAQ;AAAA,EAClB;AAAA;AAAA,EAGA,OAAe,gBAAgB,OAAwC;AACrE,UAAM,SAAS,MAAM;AACrB,QAAI,EAAE,kBAAkB,sBAAsB,CAAC,OAAO,KAAM,QAAO;AACnE,WAAO;AAAA,EACT;AAAA,EAEA,OAAe,SAAS,OAAqB,QAAoC;AAC/E,UAAM,OAAO,OAAO,sBAAsB;AAC1C,WACE,MAAM,UAAU,KAAK,QACrB,MAAM,UAAU,KAAK,SACrB,MAAM,UAAU,KAAK,OACrB,MAAM,UAAU,KAAK;AAAA,EAEzB;AAAA,EAEA,OAAe,gBAAgB,OAA8B;AAC3D,QAAI,CAAC,MAAM,UAAW,QAAO;AAC7B,WAAO,MAAM,gBAAgB,WAAW,MAAM,WAAW;AAAA,EAC3D;AAAA,EAEA,OAAe,kBAAkB,QAAoC;AACnE,UAAM,QAAQ,SAAQ,UAAU,MAAM;AACtC,QAAI,UAAU,UAAU,UAAU,eAAgB,QAAO;AAGzD,QAAI,UAAU,SAAS,cAAc,kBAAkB,UAAW,QAAO;AACzE,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,OAAe,UAAU,QAA4C;AACnE,UAAM,OAAO,OAAO,aAAa,UAAU;AAC3C,QAAI,SAAS,SAAS,SAAS,kBAAkB,SAAS,OAAQ,QAAO;AACzE,WAAO;AAAA,EACT;AACF;AAhFa,SACI,QAAiE;AAD3E,IAAM,UAAN;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/ts/components/expandingCard.ts"],
|
|
4
|
-
"sourcesContent": ["import { Utils } from \"../core/utils\";\nimport {\n Component,\n BaseOptions,\n InitElements,\n InitElement,\n Openable,\n} from \"../core/component\";\n\nexport interface ExpandingCardOptions extends BaseOptions {\n onOpen: (el: Element) => void;\n onClose: (el: Element) => void;\n}\n\nconst _defaults: ExpandingCardOptions = {\n onOpen: null,\n onClose: null,\n};\n\nexport const EXPANDING_CARD_SELECTOR =\n \"article.expanding-card:has(> dialog.expanding-card-dialog)\";\n\n/**\n * Morphs a compact card into a full-screen modal detail surface.\n */\nexport class ExpandingCard\n extends Component<ExpandingCardOptions>\n implements Openable\n{\n isOpen: boolean = false;\n private readonly trigger: HTMLElement | null;\n private readonly dialog: HTMLDialogElement | null;\n private readonly closeButton: HTMLElement | null;\n private closeGeneration = 0;\n\n constructor(el: HTMLElement, options: Partial<ExpandingCardOptions>) {\n super(el, options, ExpandingCard);\n this.el[\"Expressive_ExpandingCard\"] = this;\n\n this.options = {\n ...ExpandingCard.defaults,\n ...options,\n };\n\n this.dialog = this.el.querySelector(\n \":scope > dialog.expanding-card-dialog\",\n );\n this.trigger = this.el.querySelector(\n \":scope > .expanding-card-trigger, :scope > figure > .expanding-card-trigger\",\n );\n this.closeButton =\n this.dialog?.querySelector(\".expanding-card-close\") ?? null;\n\n if (this.trigger && this.dialog) {\n this.trigger.ariaExpanded = \"false\";\n if (this.dialog.id)\n this.trigger.setAttribute(\"aria-controls\", this.dialog.id);\n if (!this.trigger.matches(\"a[href], button, input, select, textarea\")) {\n this.trigger.tabIndex = 0;\n this.trigger.setAttribute(\"role\", \"button\");\n }\n this.dialog.ariaExpanded = \"false\";\n this._setupEventHandlers();\n }\n }\n\n static get defaults(): ExpandingCardOptions {\n return _defaults;\n }\n\n static init(\n el: HTMLElement,\n options?: Partial<ExpandingCardOptions>,\n ): ExpandingCard;\n static init(\n els: InitElements<InitElement>,\n options?: Partial<ExpandingCardOptions>,\n ): ExpandingCard[];\n static init(\n els: HTMLElement | InitElements<InitElement>,\n options?: Partial<ExpandingCardOptions>,\n ): ExpandingCard | ExpandingCard[] {\n return super.init(els, options, ExpandingCard);\n }\n\n static getInstance(el: HTMLElement): ExpandingCard {\n return el[\"Expressive_ExpandingCard\"];\n }\n\n destroy() {\n this._removeEventHandlers();\n this.closeGeneration++;\n this.isOpen = false;\n if (this.trigger) this.trigger.ariaExpanded = \"false\";\n if (this.dialog) this.dialog.ariaExpanded = \"false\";\n this.dialog?.classList.remove(\"expanded\");\n if (this.dialog?.open) this.dialog.close();\n this.el[\"Expressive_ExpandingCard\"] = undefined;\n }\n\n private _setupEventHandlers = () => {\n this.trigger?.addEventListener(\"click\", this.open);\n this.trigger?.addEventListener(\"keypress\", this._handleTriggerKeypress);\n this.closeButton?.addEventListener(\"click\", this.close);\n this.dialog?.addEventListener(\"cancel\", this._handleCancel);\n this.dialog?.addEventListener(\"close\", this._handleNativeClose);\n };\n\n private _removeEventHandlers = () => {\n this.trigger?.removeEventListener(\"click\", this.open);\n this.trigger?.removeEventListener(\"keypress\", this._handleTriggerKeypress);\n this.closeButton?.removeEventListener(\"click\", this.close);\n this.dialog?.removeEventListener(\"cancel\", this._handleCancel);\n this.dialog?.removeEventListener(\"close\", this._handleNativeClose);\n };\n\n private _handleTriggerKeypress = (event: KeyboardEvent) => {\n if (event.key === Utils.keys.ENTER || event.key === \" \") {\n event.preventDefault();\n this.open();\n }\n };\n\n private _handleCancel = (event: Event) => {\n event.preventDefault();\n this.close();\n };\n\n private _handleNativeClose = () => {\n // A queued close event can arrive after a caller has reopened the dialog.\n if (this.dialog.open) return;\n this.closeGeneration++;\n this.isOpen = false;\n this.trigger.ariaExpanded = \"false\";\n this.dialog.ariaExpanded = \"false\";\n this.dialog.classList.remove(\"expanded\");\n };\n\n private _setTransitionOrigin = () => {\n if (!this.dialog) return;\n const card = this.el.getBoundingClientRect();\n const media = this.el.querySelector<HTMLElement>(\n \":scope > figure, :scope > img\",\n );\n const mediaRect = media?.getBoundingClientRect();\n\n this.dialog.style.setProperty(\n \"--md-comp-expanding-card-from-top\",\n `${Math.max(0, card.top)}px`,\n );\n this.dialog.style.setProperty(\n \"--md-comp-expanding-card-from-right\",\n `${Math.max(0, window.innerWidth - card.right)}px`,\n );\n this.dialog.style.setProperty(\n \"--md-comp-expanding-card-from-bottom\",\n `${Math.max(0, window.innerHeight - card.bottom)}px`,\n );\n this.dialog.style.setProperty(\n \"--md-comp-expanding-card-from-left\",\n `${Math.max(0, card.left)}px`,\n );\n this.dialog.style.setProperty(\n \"--md-comp-expanding-card-from-media-height\",\n `${Math.max(0, mediaRect?.height ?? 0)}px`,\n );\n };\n\n open: () => void = () => {\n if (this.isOpen || !this.dialog || !this.trigger) return;\n this.closeGeneration++;\n\n this._setTransitionOrigin();\n this.isOpen = true;\n this.trigger.ariaExpanded = \"true\";\n this.dialog.ariaExpanded = \"true\";\n this.dialog.showModal();\n // Commit the clipped start frame before asking CSS to expand it.\n void this.dialog.offsetWidth;\n this.dialog.classList.add(\"expanded\");\n this.closeButton?.focus();\n\n if (typeof this.options.onOpen === \"function\") {\n this.options.onOpen.call(this, this.el);\n }\n };\n\n close: () => void = () => {\n if (!this.isOpen || !this.dialog || !this.trigger) return;\n const generation = ++this.closeGeneration;\n this._setTransitionOrigin();\n this.isOpen = false;\n this.trigger.ariaExpanded = \"false\";\n this.dialog.ariaExpanded = \"false\";\n this.dialog.classList.remove(\"expanded\");\n\n if (typeof this.options.onClose === \"function\") {\n this.options.onClose.call(this, this.el);\n }\n\n const finish = () => {\n if (generation !== this.closeGeneration || this.isOpen || !this.dialog.open) return;\n this.dialog.close();\n if (this.dialog.isConnected && this.trigger.isConnected) this.trigger.focus();\n };\n const reducedMotion = window.matchMedia(\n \"(prefers-reduced-motion: reduce)\",\n ).matches;\n // Wait only for the container's actual clip transition, not arbitrary\n // animations in consumer content. Cancellation also completes cleanup.\n const transitions = reducedMotion ? [] : (this.dialog.getAnimations?.() ?? [])\n .filter((animation) => (animation as CSSTransition).transitionProperty === \"clip-path\");\n if (transitions.length === 0) finish();\n else void Promise.allSettled(transitions.map((animation) => animation.finished)).then(finish);\n };\n\n static Init() {\n Utils.onDocumentReady(() => {\n document.querySelectorAll(EXPANDING_CARD_SELECTOR).forEach((el) => {\n if (el && el[\"Expressive_ExpandingCard\"] == undefined) {\n this.init(el as HTMLElement);\n }\n });\n });\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
//# sourceMappingURL=chunk-ZKZKNSLC.mjs.map
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|