@eunomia/elements 1.0.0-beta.9 → 1.0.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/README.md +28 -6
- package/dist/angular/forms.d.ts +80 -0
- package/dist/angular/forms.js +267 -0
- package/dist/cdn/components/chunks/chunk-2XPIGFBD.js +1 -0
- package/dist/cdn/components/chunks/chunk-5IUNSTM3.js +1 -0
- package/dist/cdn/components/chunks/chunk-7HXPLZ7C.js +1 -0
- package/dist/cdn/components/chunks/{chunk-J3SZBXM6.js → chunk-A2NO4RSF.js} +7 -7
- package/dist/cdn/components/chunks/{chunk-Q34EQ5HZ.js → chunk-A623JJXJ.js} +1 -1
- package/dist/cdn/components/chunks/{chunk-Y3HOIL64.js → chunk-AW7PU43S.js} +2 -2
- package/dist/cdn/components/chunks/{chunk-FF3I7C3C.js → chunk-DWTNRFWW.js} +1 -3
- package/dist/cdn/components/chunks/chunk-FPNWPMHA.js +1 -0
- package/dist/cdn/components/chunks/chunk-GMWUHGNI.js +319 -0
- package/dist/cdn/components/chunks/{chunk-FQUWHNQT.js → chunk-GXOEPXDW.js} +1 -1
- package/dist/cdn/components/chunks/chunk-HXESKTK2.js +1 -0
- package/dist/cdn/components/chunks/chunk-JDUWKPHW.js +46 -0
- package/dist/cdn/components/chunks/{chunk-D3JJBHXN.js → chunk-JLKCBPD2.js} +2 -2
- package/dist/cdn/components/chunks/chunk-M6ZJHL4Q.js +1 -0
- package/dist/cdn/components/chunks/{chunk-TN3HGHQO.js → chunk-MDSUMP3O.js} +4 -4
- package/dist/cdn/components/chunks/chunk-MSQWOKBB.js +1 -0
- package/dist/cdn/components/chunks/{chunk-3UUZM7X2.js → chunk-NPXRQHUN.js} +3 -3
- package/dist/cdn/components/chunks/chunk-OB7DEGNX.js +1 -0
- package/dist/cdn/components/chunks/{chunk-JANNHW4Q.js → chunk-PADHCLBG.js} +4 -4
- package/dist/cdn/components/chunks/chunk-QMXE3KLT.js +1 -0
- package/dist/cdn/components/chunks/chunk-QNWKRPOW.js +1 -0
- package/dist/cdn/components/chunks/{chunk-KQUUMZ7U.js → chunk-RZF7QQDX.js} +7 -7
- package/dist/cdn/components/chunks/chunk-SCAP7J35.js +1 -0
- package/dist/cdn/components/chunks/chunk-TISMX7UL.js +1 -0
- package/dist/cdn/components/chunks/chunk-TWLI2ZOT.js +1 -0
- package/dist/cdn/components/chunks/chunk-W4VCWRY7.js +210 -0
- package/dist/cdn/components/chunks/{chunk-SZZRMJ65.js → chunk-WEG3KO6T.js} +3 -3
- package/dist/cdn/components/chunks/chunk-WP6ZYBAC.js +1 -0
- package/dist/cdn/components/chunks/{chunk-HGX6GPHM.js → chunk-XCBQ4CKH.js} +1 -1
- package/dist/cdn/components/chunks/{chunk-3UW2LJ7T.js → chunk-XZ3LFOQP.js} +2 -2
- package/dist/cdn/components/eun-alert.js +1 -1
- package/dist/cdn/components/eun-animate.js +92 -180
- package/dist/cdn/components/eun-breadcrumb.js +4 -4
- package/dist/cdn/components/eun-button.js +1 -1
- package/dist/cdn/components/eun-calendar.js +188 -115
- package/dist/cdn/components/eun-card.js +1 -1
- package/dist/cdn/components/eun-carousel.js +36 -28
- package/dist/cdn/components/eun-check-card.js +3 -3
- package/dist/cdn/components/eun-checkbox-list.js +2 -2
- package/dist/cdn/components/eun-checkbox.js +1 -1
- package/dist/cdn/components/eun-chip.js +11 -15
- package/dist/cdn/components/eun-collapse.js +21 -10
- package/dist/cdn/components/eun-color-picker.js +32 -32
- package/dist/cdn/components/eun-counter.js +8 -8
- package/dist/cdn/components/eun-date-picker.js +83 -79
- package/dist/cdn/components/eun-description-list.js +1 -1
- package/dist/cdn/components/eun-divider.js +9 -8
- package/dist/cdn/components/eun-drawer.js +8 -6
- package/dist/cdn/components/eun-dropdown-button.js +1 -1
- package/dist/cdn/components/eun-dropdown-item.js +4 -4
- package/dist/cdn/components/eun-fab.js +1 -1
- package/dist/cdn/components/eun-image-card.js +2 -2
- package/dist/cdn/components/eun-image-carousel.js +55 -29
- package/dist/cdn/components/eun-infinite-list.js +2 -2
- package/dist/cdn/components/eun-input-file.js +3 -3
- package/dist/cdn/components/eun-input-phone.js +6 -6
- package/dist/cdn/components/eun-input.js +1 -1
- package/dist/cdn/components/eun-label.js +1 -1
- package/dist/cdn/components/eun-link.js +18 -329
- package/dist/cdn/components/eun-loader.js +1 -1
- package/dist/cdn/components/eun-modal.js +9 -7
- package/dist/cdn/components/eun-nav-menu.js +363 -0
- package/dist/cdn/components/eun-pagination.js +4 -4
- package/dist/cdn/components/eun-password-strength.js +2 -2
- package/dist/cdn/components/eun-progress-bar.js +1 -1
- package/dist/cdn/components/eun-radio-card.js +4 -4
- package/dist/cdn/components/eun-radio-list.js +1 -1
- package/dist/cdn/components/eun-radio.js +1 -1
- package/dist/cdn/components/eun-rating.js +9 -9
- package/dist/cdn/components/eun-scheduler-event-editor.js +113 -77
- package/dist/cdn/components/eun-scheduler-event.js +1 -1
- package/dist/cdn/components/eun-scheduler.js +137 -79
- package/dist/cdn/components/eun-search.js +6 -6
- package/dist/cdn/components/eun-select.js +1 -1
- package/dist/cdn/components/eun-sidebar.js +23 -14
- package/dist/cdn/components/eun-slider.js +2 -2
- package/dist/cdn/components/eun-sliding-card.js +1 -1
- package/dist/cdn/components/eun-step.js +2 -2
- package/dist/cdn/components/eun-stepper.js +11 -12
- package/dist/cdn/components/eun-switch.js +2 -2
- package/dist/cdn/components/eun-tab-group.js +1 -1
- package/dist/cdn/components/eun-tab-panel.js +1 -1
- package/dist/cdn/components/eun-table-action-bar.js +1 -1
- package/dist/cdn/components/eun-table.js +13 -10
- package/dist/cdn/components/eun-tag.js +1 -1
- package/dist/cdn/components/eun-textarea.js +4 -4
- package/dist/cdn/components/eun-time-picker.js +28 -25
- package/dist/cdn/components/eun-toast.js +8 -8
- package/dist/cdn/components/eun-toggle-group.js +8 -2
- package/dist/cdn/components/eun-toggle-item.js +8 -2
- package/dist/cdn/components/eun-toggle.js +4 -1
- package/dist/cdn/components/eun-toolbar.js +114 -36
- package/dist/cdn/components/eun-tooltip.js +1 -1
- package/dist/cdn/styles/eunomia-themes.css +1 -1
- package/dist/cdn/styles/themes/eunomia-theme.css +1 -1
- package/dist/cdn/styles/themes/mixins/eunomia-neutrals.mixin.scss +2 -2
- package/dist/cdn/styles/themes/prebuilt-themes/eunomia/eunomia.theme.css +1 -1
- package/dist/cdn/styles/themes/prebuilt-themes/fire/eunomia-fire.theme.css +1 -1
- package/dist/cdn/styles/themes/prebuilt-themes/forest/eunomia-forest.theme.css +1 -1
- package/dist/cdn/styles/themes/prebuilt-themes/gold/eunomia-gold.theme.css +1 -1
- package/dist/cdn/styles/themes/prebuilt-themes/ocean/eunomia-ocean.theme.css +1 -1
- package/dist/cdn/styles/themes/prebuilt-themes/salmon/eunomia-salmon.theme.css +1 -1
- package/dist/cdn/styles/themes/prebuilt-themes/violet/eunomia-violet.theme.css +1 -1
- package/dist/cdn/styles/tools/mixins/layout/eunomia-grid.mixin.scss +116 -8
- package/dist/components/action/button/button.styles.js +2 -2
- package/dist/components/action/dropdown-button/dropdown-button.d.ts +4 -0
- package/dist/components/action/dropdown-button/dropdown-button.js +1 -0
- package/dist/components/action/dropdown-button/dropdown-button.styles.js +5 -4
- package/dist/components/action/dropdown-button/dropdown-item.d.ts +1 -0
- package/dist/components/action/dropdown-button/dropdown-item.js +1 -0
- package/dist/components/action/dropdown-button/dropdown-item.styles.js +4 -4
- package/dist/components/action/link/link.d.ts +2 -1
- package/dist/components/action/link/link.js +2 -1
- package/dist/components/action/link/link.styles.d.ts +40 -1
- package/dist/components/action/link/link.styles.js +83 -60
- package/dist/components/action/shared-styles/button-palette.styles.js +1 -1
- package/dist/components/action/toggle/toggle-group.d.ts +1 -0
- package/dist/components/action/toggle/toggle-group.js +1 -0
- package/dist/components/action/toggle/toggle-group.styles.d.ts +1 -0
- package/dist/components/action/toggle/toggle-group.styles.js +9 -2
- package/dist/components/action/toggle/toggle-item.styles.js +8 -2
- package/dist/components/action/toggle/toggle.d.ts +1 -0
- package/dist/components/action/toggle/toggle.js +1 -0
- package/dist/components/action/toggle/toggle.styles.d.ts +1 -0
- package/dist/components/action/toggle/toggle.styles.js +5 -1
- package/dist/components/alert/drawer/drawer.d.ts +14 -13
- package/dist/components/alert/drawer/drawer.js +20 -28
- package/dist/components/alert/modal/modal.d.ts +14 -13
- package/dist/components/alert/modal/modal.js +20 -28
- package/dist/components/alert/modal/modal.styles.js +1 -1
- package/dist/components/alert/toast/toast.d.ts +5 -5
- package/dist/components/alert/toast/toast.js +9 -10
- package/dist/components/alert/toast/toast.styles.js +3 -3
- package/dist/components/content/card/image-card.styles.js +1 -1
- package/dist/components/content/chip/chip.d.ts +7 -9
- package/dist/components/content/chip/chip.js +11 -14
- package/dist/components/content/chip/chip.styles.js +1 -5
- package/dist/components/content/collapse/collapse.d.ts +5 -0
- package/dist/components/content/collapse/collapse.js +7 -0
- package/dist/components/content/collapse/collapse.styles.d.ts +3 -0
- package/dist/components/content/collapse/collapse.styles.js +13 -1
- package/dist/components/content/description-list/description-list.styles.js +1 -1
- package/dist/components/content/image-carousel/image-carousel.d.ts +60 -13
- package/dist/components/content/image-carousel/image-carousel.js +100 -22
- package/dist/components/content/image-carousel/image-carousel.styles.js +32 -6
- package/dist/components/content/password-strength/password-strength.styles.js +1 -1
- package/dist/components/content/progress-bar/progress-bar.styles.js +1 -1
- package/dist/components/content/shared-styles/card-link.styles.js +1 -1
- package/dist/components/content/shared-styles/tone-surface.styles.js +1 -3
- package/dist/components/form/checkbox/check-card.styles.js +2 -2
- package/dist/components/form/checkbox/checkbox-list.d.ts +3 -1
- package/dist/components/form/checkbox/checkbox-list.js +3 -1
- package/dist/components/form/checkbox/checkbox.styles.js +1 -1
- package/dist/components/form/color-picker/color-picker.d.ts +28 -3
- package/dist/components/form/color-picker/color-picker.js +53 -7
- package/dist/components/form/counter/counter.js +1 -1
- package/dist/components/form/counter/counter.styles.js +2 -2
- package/dist/components/form/date-picker/date-picker-day-grid.styles.js +1 -1
- package/dist/components/form/date-picker/date-picker-month-grid.js +1 -1
- package/dist/components/form/date-picker/date-picker.d.ts +50 -13
- package/dist/components/form/date-picker/date-picker.js +178 -43
- package/dist/components/form/input/input.js +1 -4
- package/dist/components/form/input-file/input-file.styles.js +2 -2
- package/dist/components/form/input-phone/input-phone.js +4 -3
- package/dist/components/form/label/label.styles.js +1 -1
- package/dist/components/form/radio/radio-card.styles.js +2 -2
- package/dist/components/form/radio/radio.styles.js +1 -1
- package/dist/components/form/rating/rating.js +3 -5
- package/dist/components/form/rating/rating.styles.js +2 -2
- package/dist/components/form/search/search.d.ts +1 -7
- package/dist/components/form/search/search.js +2 -12
- package/dist/components/form/shared-styles/field.styles.js +2 -2
- package/dist/components/form/slider/slider.styles.js +1 -1
- package/dist/components/form/switch/switch.styles.js +1 -1
- package/dist/components/form/textarea/textarea.js +1 -5
- package/dist/components/form/textarea/textarea.styles.js +2 -2
- package/dist/components/form/time-picker/time-picker-columns.d.ts +4 -1
- package/dist/components/form/time-picker/time-picker-columns.js +64 -15
- package/dist/components/form/time-picker/time-picker-columns.styles.js +5 -1
- package/dist/components/form/time-picker/time-picker-list.d.ts +4 -1
- package/dist/components/form/time-picker/time-picker-list.js +15 -8
- package/dist/components/form/time-picker/time-picker.d.ts +11 -2
- package/dist/components/form/time-picker/time-picker.js +22 -8
- package/dist/components/layout/animate/animate.d.ts +35 -17
- package/dist/components/layout/animate/animate.js +27 -14
- package/dist/components/layout/animate/animate.styles.d.ts +2 -1
- package/dist/components/layout/animate/animate.styles.js +107 -179
- package/dist/components/layout/divider/divider.d.ts +1 -0
- package/dist/components/layout/divider/divider.js +2 -1
- package/dist/components/layout/divider/divider.styles.js +7 -6
- package/dist/components/layout/infinite-list/infinite-list.styles.js +1 -1
- package/dist/components/navigation/breadcrumb/breadcrumb.styles.js +3 -3
- package/dist/components/navigation/carousel/carousel.d.ts +23 -14
- package/dist/components/navigation/carousel/carousel.js +39 -27
- package/dist/components/navigation/carousel/carousel.styles.js +16 -8
- package/dist/components/navigation/nav-menu/nav-menu.d.ts +201 -0
- package/dist/components/navigation/nav-menu/nav-menu.js +673 -0
- package/dist/components/navigation/nav-menu/nav-menu.styles.d.ts +1 -0
- package/dist/components/navigation/nav-menu/nav-menu.styles.js +352 -0
- package/dist/components/navigation/pagination/pagination.d.ts +3 -0
- package/dist/components/navigation/pagination/pagination.styles.js +2 -2
- package/dist/components/navigation/sidebar/sidebar.d.ts +8 -10
- package/dist/components/navigation/sidebar/sidebar.js +12 -15
- package/dist/components/navigation/sidebar/sidebar.styles.js +13 -4
- package/dist/components/navigation/stepper/step.styles.js +2 -2
- package/dist/components/navigation/stepper/stepper.d.ts +24 -13
- package/dist/components/navigation/stepper/stepper.js +36 -23
- package/dist/components/navigation/stepper/stepper.styles.js +2 -2
- package/dist/components/navigation/tabs/tab-group/tab-group.js +1 -1
- package/dist/components/navigation/tabs/tab-panel/tab-panel.styles.js +1 -1
- package/dist/components/navigation/toolbar/toolbar.d.ts +121 -20
- package/dist/components/navigation/toolbar/toolbar.js +176 -45
- package/dist/components/navigation/toolbar/toolbar.styles.js +113 -28
- package/dist/events/editor-state-change.event.d.ts +28 -0
- package/dist/events/editor-state-change.event.js +22 -0
- package/dist/events/event-cancel.event.d.ts +20 -0
- package/dist/events/event-cancel.event.js +17 -0
- package/dist/events/period-change.event.d.ts +14 -6
- package/dist/events/period-change.event.js +9 -6
- package/dist/features/scheduler/calendar/calendar.d.ts +52 -20
- package/dist/features/scheduler/calendar/calendar.js +84 -36
- package/dist/features/scheduler/calendar/calendar.styles.js +5 -2
- package/dist/features/scheduler/scheduler/scheduler.d.ts +69 -4
- package/dist/features/scheduler/scheduler/scheduler.js +172 -47
- package/dist/features/scheduler/scheduler/scheduler.styles.js +6 -0
- package/dist/features/scheduler/scheduler-event/scheduler-event.d.ts +18 -20
- package/dist/features/scheduler/scheduler-event/scheduler-event.js +29 -38
- package/dist/features/scheduler/scheduler-event/scheduler-event.styles.js +2 -2
- package/dist/features/scheduler/scheduler-event-editor/scheduler-event-editor.d.ts +102 -18
- package/dist/features/scheduler/scheduler-event-editor/scheduler-event-editor.js +249 -112
- package/dist/features/scheduler/scheduler-event-editor/scheduler-event-editor.styles.js +11 -1
- package/dist/features/scheduler/shared/scheduler-event-popover.d.ts +9 -1
- package/dist/features/scheduler/shared/scheduler-event-popover.js +77 -42
- package/dist/features/scheduler/shared/scheduler-event-popover.styles.js +14 -3
- package/dist/features/scheduler/shared/scheduler-hour-grid.d.ts +3 -2
- package/dist/features/scheduler/shared/scheduler-hour-grid.js +53 -46
- package/dist/features/scheduler/shared/scheduler-hour-grid.styles.js +13 -7
- package/dist/features/scheduler/shared/scheduler-month-view.js +1 -1
- package/dist/features/scheduler/shared/scheduler-month-view.styles.js +13 -7
- package/dist/features/scheduler/shared/scheduler-year-view.d.ts +6 -5
- package/dist/features/scheduler/shared/scheduler-year-view.js +11 -7
- package/dist/features/scheduler/shared/scheduler-year-view.styles.js +57 -3
- package/dist/features/scheduler/shared/scheduler.types.d.ts +5 -9
- package/dist/features/scheduler/shared/scheduler.utils.d.ts +61 -0
- package/dist/features/scheduler/shared/scheduler.utils.js +78 -4
- package/dist/features/table/table/table-native.styles.js +8 -4
- package/dist/features/table/table/table.d.ts +2 -1
- package/dist/features/table/table/table.js +2 -1
- package/dist/features/table/table/table.styles.js +6 -4
- package/dist/i18n/en.d.ts +17 -0
- package/dist/i18n/en.js +17 -0
- package/dist/i18n/fr.js +17 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +4 -0
- package/dist/jsx.d.ts +48 -6
- package/dist/mixins/anchor-position.mixin.d.ts +17 -0
- package/dist/mixins/anchor-position.mixin.js +45 -7
- package/dist/mixins/button.mixin.js +2 -1
- package/dist/mixins/check.mixin.js +14 -5
- package/dist/mixins/dialog-surface.mixin.d.ts +1 -1
- package/dist/mixins/dialog-surface.mixin.js +5 -5
- package/dist/mixins/form.mixin.js +33 -13
- package/dist/mixins/localizable.mixin.d.ts +1 -0
- package/dist/mixins/localizable.mixin.js +9 -2
- package/dist/mixins/radio.mixin.js +14 -5
- package/dist/mixins/validators.mixin.js +4 -3
- package/dist/react.d.ts +59 -0
- package/dist/react.js +42 -0
- package/dist/ssr/animate-ssr.css +35 -0
- package/dist/ssr/breadcrumb-ssr.css +3 -3
- package/dist/ssr/button-ssr.css +8 -2
- package/dist/ssr/card-ssr.css +1 -1
- package/dist/ssr/carousel-ssr.css +15 -4
- package/dist/ssr/chip-ssr.css +3 -3
- package/dist/ssr/collapse-ssr.css +2 -2
- package/dist/ssr/description-list-ssr.css +1 -1
- package/dist/ssr/divider-ssr.css +23 -0
- package/dist/ssr/field-ssr.css +245 -42
- package/dist/ssr/image-carousel-ssr.css +2 -4
- package/dist/ssr/links-ssr.css +17 -3
- package/dist/ssr/nav-menu-ssr.css +82 -0
- package/dist/ssr/overlay-ssr.css +4 -0
- package/dist/ssr/scheduler-ssr.css +182 -0
- package/dist/ssr/stepper-ssr.css +136 -0
- package/dist/ssr/table-ssr.css +7 -4
- package/dist/ssr/tag-ssr.css +1 -1
- package/dist/ssr/toolbar-ssr.css +7 -5
- package/dist/utils/css-length.utils.d.ts +14 -0
- package/dist/utils/css-length.utils.js +32 -0
- package/dist/utils/form-validation.utils.d.ts +36 -0
- package/dist/utils/form-validation.utils.js +113 -0
- package/dist/utils/implicit-submission.utils.js +2 -14
- package/dist/utils/interactive-content.utils.d.ts +10 -0
- package/dist/utils/interactive-content.utils.js +43 -0
- package/dist/utils/popover.utils.js +3 -2
- package/dist/utils/scroll-lock.utils.d.ts +9 -1
- package/dist/utils/scroll-lock.utils.js +21 -2
- package/dist/utils/theme-generator.utils.d.ts +1 -0
- package/dist/utils/theme-generator.utils.js +23 -10
- package/dist/utils/validity.utils.d.ts +18 -4
- package/dist/utils/validity.utils.js +74 -4
- package/package.json +34 -3
- package/styles/themes/mixins/eunomia-neutrals.mixin.scss +2 -2
- package/styles/tools/mixins/layout/eunomia-grid.mixin.scss +116 -8
- package/dist/cdn/components/chunks/chunk-4DRU3IYJ.js +0 -1
- package/dist/cdn/components/chunks/chunk-647ISUF4.js +0 -1
- package/dist/cdn/components/chunks/chunk-6TIEBY34.js +0 -1
- package/dist/cdn/components/chunks/chunk-E6UOI36Q.js +0 -1
- package/dist/cdn/components/chunks/chunk-GNAUNTS5.js +0 -1
- package/dist/cdn/components/chunks/chunk-IJJ67C66.js +0 -1
- package/dist/cdn/components/chunks/chunk-J7ETIRSK.js +0 -1
- package/dist/cdn/components/chunks/chunk-JGV7LHEI.js +0 -1
- package/dist/cdn/components/chunks/chunk-L74LXUGL.js +0 -1
- package/dist/cdn/components/chunks/chunk-MY6ORZJR.js +0 -46
- package/dist/cdn/components/chunks/chunk-QWTFP56P.js +0 -1
- package/dist/cdn/components/chunks/chunk-SFX2LQ4K.js +0 -205
- package/dist/cdn/components/chunks/chunk-WW4BTWMH.js +0 -1
- package/dist/utils/boolean.utils.d.ts +0 -14
- package/dist/utils/boolean.utils.js +0 -20
|
@@ -11,7 +11,7 @@ import { DialogSurfaceMixin } from "../../../mixins/dialog-surface.mixin.js";
|
|
|
11
11
|
import { EUNOMIA_BREAKPOINTS } from "../../../breakpoints.js";
|
|
12
12
|
import { toolbarStyles } from "./toolbar.styles.js";
|
|
13
13
|
import { LocalizableMixin } from "../../../mixins/localizable.mixin.js";
|
|
14
|
-
import {
|
|
14
|
+
import { isScrollLocked } from "../../../utils/scroll-lock.utils.js";
|
|
15
15
|
/**
|
|
16
16
|
* Tag name of the toolbar component.
|
|
17
17
|
*/
|
|
@@ -55,6 +55,7 @@ export const EunomiaToolbarTagName = "eun-toolbar";
|
|
|
55
55
|
* everything behind it, including the logo and any other bar content;
|
|
56
56
|
* the burger is the only thing that stays visible in front of it.
|
|
57
57
|
*
|
|
58
|
+
* @slot [burger-icon] - Replaces both burger icons with a single piece of content, kept in place while the panel opens and closes, so it can animate between the two states itself, styled from the host's own open attribute (eun-toolbar[open]). Takes priority over menu-icon and close-icon
|
|
58
59
|
* @slot [menu-icon] - Replaces the burger's default open icon (an `eun-icon name="menu"`) with any content, shown while the panel is closed. Useful wherever `eun-icon`'s own dynamic SVG resolution doesn't fit, e.g. some bundler setups
|
|
59
60
|
* @slot [close-icon] - Replaces the burger's default close icon (an `eun-icon name="close"`) with any content, shown while the panel is open. See `menu-icon` above
|
|
60
61
|
* @slot start - Left-side content, such as the logo, as a link of your own wrapping an image
|
|
@@ -63,6 +64,7 @@ export const EunomiaToolbarTagName = "eun-toolbar";
|
|
|
63
64
|
* @slot [default] - The mobile slide-in panel's content, opened by the burger button below the mobile breakpoint. Entirely up to the consumer ; never rendered anywhere else
|
|
64
65
|
* @slot skip-links - Custom skip to X links, such as skip to navigation, main content, or footer, replacing the single default skip link built from skipLinkTarget and skipLinkLabel. Accepts plain `a` elements or `eun-link`, styled the same either way, separated by a thin divider drawn between them rather than on either link itself, so it never ends up inside either one's own focus ring. Hidden as a group, revealed as a small panel opening from the top-start corner as soon as focus lands on any of them, staying open while Tab cycles between them. Clicking any of them, default or slotted, also focuses its `href` target directly, on top of the native anchor jump, since that native jump alone doesn't reliably move focus across browsers
|
|
65
66
|
* @prop {'sticky' | 'fixed' | 'static'} [position='sticky'] - How the toolbar is positioned relative to the page
|
|
67
|
+
* @prop {'centered' | 'between'} [layout='centered'] - How start, center, and end share the bar. centered keeps center truly centered on the bar whatever the widths of start and end, while between spaces the three out evenly, like a flexbox space-between
|
|
66
68
|
* @prop {number} [mobileBreakpoint=768] - The viewport width in pixels below which the burger button and its sliding panel become available
|
|
67
69
|
* @attr {number} [mobile-breakpoint=768] - The viewport width in pixels below which the burger button and its sliding panel become available
|
|
68
70
|
* @prop {boolean} [open=false] - Whether the mobile menu panel is open
|
|
@@ -72,8 +74,8 @@ export const EunomiaToolbarTagName = "eun-toolbar";
|
|
|
72
74
|
* @attr {string} panel-size - A custom open size for the mobile panel
|
|
73
75
|
* @prop {string} mobileHide - The bar slots hidden below the mobile breakpoint, as a space-separated list of start, center and end, such as "center end" when their content is repeated in the panel. Applied by toolbar-ssr.css before the upgrade too
|
|
74
76
|
* @attr {string} mobile-hide - The bar slots hidden below the mobile breakpoint, as a space-separated list of start, center and end
|
|
75
|
-
* @prop {boolean} [closeOnBackdrop=
|
|
76
|
-
* @attr {boolean} [close-on-backdrop=
|
|
77
|
+
* @prop {boolean} [closeOnBackdrop=false] - Whether clicking outside the mobile panel closes it
|
|
78
|
+
* @attr {boolean} [close-on-backdrop=false] - Whether clicking outside the mobile panel closes it
|
|
77
79
|
* @prop {string} [menuOpenLabel] - The accessible label of the burger button while the panel is closed. Defaults to the localized string for the current locale (English: "Open menu")
|
|
78
80
|
* @attr {string} [menu-open-label] - The accessible label of the burger button while the panel is closed. Defaults to the localized string for the current locale (English: "Open menu")
|
|
79
81
|
* @prop {string} [menuCloseLabel] - The accessible label of the burger button while the panel is open. Defaults to the localized string for the current locale (English: "Close menu")
|
|
@@ -94,8 +96,10 @@ export const EunomiaToolbarTagName = "eun-toolbar";
|
|
|
94
96
|
* @attr {string} scroll-target - A CSS selector for a custom scroll container to track instead of the page
|
|
95
97
|
* @prop {boolean} [adaptiveTheme=false] - Enables automatic theme switching driven by marked page sections scrolling underneath the bar
|
|
96
98
|
* @attr {boolean} [adaptive-theme=false] - Enables automatic theme switching driven by marked page sections
|
|
97
|
-
* @prop {string} [
|
|
98
|
-
* @attr {string} [adaptive-theme-
|
|
99
|
+
* @prop {string} [adaptiveThemeAttribute='data-toolbar-theme'] - The marker attribute adaptiveTheme reads dark or light from, for a page that already marks its sections with an attribute of its own
|
|
100
|
+
* @attr {string} [adaptive-theme-attribute='data-toolbar-theme'] - The marker attribute adaptive-theme reads dark or light from
|
|
101
|
+
* @prop {string} adaptiveThemeSelector - A selector for the marker elements adaptiveTheme observes, defaulting to every element carrying adaptiveThemeAttribute. Each should carry that attribute set to dark or light
|
|
102
|
+
* @attr {string} adaptive-theme-selector - A selector for the marker elements adaptive-theme observes, defaulting to every element carrying adaptive-theme-attribute
|
|
99
103
|
* @prop {'light' | 'dark'} [theme='light'] - The toolbar's current color scheme. A plain manual switch when adaptiveTheme is off, and driven by the marker observer, though still settable to seed the initial value, when it's on
|
|
100
104
|
* @prop {'light' | 'dark'} [defaultTheme='light'] - The fallback theme used while adaptiveTheme is on and no marked section currently intersects the bar
|
|
101
105
|
* @attr {'light' | 'dark'} [default-theme='light'] - The fallback theme used while adaptive-theme is on and no marked section currently intersects the bar
|
|
@@ -103,7 +107,7 @@ export const EunomiaToolbarTagName = "eun-toolbar";
|
|
|
103
107
|
* @attr {string} skip-link-target - The id of the page's main-content landmark
|
|
104
108
|
* @prop {string} [skipLinkLabel] - The text of the default skip link built from skipLinkTarget. Defaults to the localized string for the current locale (English: "Skip to main content")
|
|
105
109
|
* @attr {string} [skip-link-label] - The text of the default skip link built from skip-link-target. Defaults to the localized string for the current locale (English: "Skip to main content")
|
|
106
|
-
* @fires {ChangeEvent} eunchange - Fired whenever open, collapsed, or, under adaptiveTheme, theme changes
|
|
110
|
+
* @fires {ChangeEvent} eunchange - Fired once whenever open, collapsed, or, under adaptiveTheme, theme changes. Its value holds the property that changed and the current open, collapsed, and theme. On close, it fires once the panel has finished closing and page scroll is released
|
|
107
111
|
* @cssprop [--toolbar-height] - Sets the expanded height of the bar
|
|
108
112
|
* @cssprop [--toolbar-height-collapsed] - Sets the collapsed height of the bar, for collapseOnScroll only
|
|
109
113
|
* @cssprop [--toolbar-padding] - Sets the padding of the bar
|
|
@@ -113,7 +117,10 @@ export const EunomiaToolbarTagName = "eun-toolbar";
|
|
|
113
117
|
* @cssprop [--toolbar-gap-start] - Sets the gap between items inside the start slot, falling back to --toolbar-gap
|
|
114
118
|
* @cssprop [--toolbar-gap-center] - Sets the gap between items inside the center slot, falling back to --toolbar-gap
|
|
115
119
|
* @cssprop [--toolbar-gap-end] - Sets the gap between items inside the end slot, falling back to --toolbar-gap
|
|
120
|
+
* @cssprop [--toolbar-columns] - Sets the grid columns of start, center, and end, overriding the ones set by layout
|
|
116
121
|
* @cssprop [--toolbar-background] - Sets the background color, overriding both light and dark variants below
|
|
122
|
+
* @cssprop [--toolbar-background-at-top] - Sets the background of the bar while transparent-at-top applies, transparent by default
|
|
123
|
+
* @cssprop [--toolbar-backdrop-blur] - Sets a backdrop blur radius for the bar itself, for a frosted glass effect behind a translucent background
|
|
117
124
|
* @cssprop [--toolbar-color] - Sets the text color, overriding both light and dark variants below
|
|
118
125
|
* @cssprop [--toolbar-background-light] - Sets the background color for the light theme
|
|
119
126
|
* @cssprop [--toolbar-color-light] - Sets the text color for the light theme
|
|
@@ -123,6 +130,8 @@ export const EunomiaToolbarTagName = "eun-toolbar";
|
|
|
123
130
|
* @cssprop [--toolbar-shadow] - Sets the shadow of the bar
|
|
124
131
|
* @cssprop [--toolbar-z-index] - Sets the stacking order of the bar
|
|
125
132
|
* @cssprop [--toolbar-transition-duration] - Sets the duration of the collapse, transparency, theme, and panel transitions
|
|
133
|
+
* @cssprop [--toolbar-color-transition-duration] - Sets the duration of the background, text color, border, and shadow transitions of the bar, falling back to --toolbar-transition-duration
|
|
134
|
+
* @cssprop [--toolbar-transition-easing] - Sets the timing function of every transition of the toolbar
|
|
126
135
|
* @cssprop [--toolbar-panel-size] - Sets a custom open size for the mobile panel, also settable through the panel-size attribute
|
|
127
136
|
* @cssprop [--toolbar-panel-background] - Sets the background of the mobile panel, defaulting to a translucent mix of the bar's own background
|
|
128
137
|
* @cssprop [--toolbar-panel-color] - Sets the text color of the mobile panel
|
|
@@ -134,13 +143,24 @@ export const EunomiaToolbarTagName = "eun-toolbar";
|
|
|
134
143
|
* @cssprop [--toolbar-burger-padding] - Sets the padding around the burger button, defaulting to 0 on the block axis and --toolbar-panel-padding on the inline axis
|
|
135
144
|
* @cssprop [--toolbar-burger-padding-block] - Sets the vertical padding, as one length applied to both sides. Ignored when --toolbar-burger-padding is set
|
|
136
145
|
* @cssprop [--toolbar-burger-padding-inline] - Sets the horizontal padding, as one length applied to both sides. Ignored when --toolbar-burger-padding is set
|
|
146
|
+
* @cssprop [--toolbar-burger-color] - Sets the color of the burger button, defaulting to the bar's text color, or the panel's once open
|
|
147
|
+
* @cssprop [--toolbar-burger-background-hover] - Sets the background of the burger button on hover, defaulting to a light mix of its own color
|
|
148
|
+
* @cssprop [--toolbar-burger-background-active] - Sets the background of the burger button while pressed, defaulting to a light mix of its own color
|
|
137
149
|
* @cssprop [--toolbar-panel-gap] - Sets the gap inside the mobile panel
|
|
138
150
|
* @cssprop [--toolbar-panel-backdrop-blur] - Sets a backdrop blur radius for the mobile panel
|
|
139
151
|
* @cssprop [--toolbar-skip-links-height] - Sets the height of the skip-links bar
|
|
140
152
|
* @cssprop [--toolbar-skip-links-background] - Sets the background of the skip-links bar, defaulting to a darker mix of the bar's background, or of primary-600 in the light theme without --toolbar-background
|
|
141
153
|
* @cssprop [--toolbar-skip-links-color] - Sets the text color of the skip-links bar
|
|
154
|
+
* @cssprop [--toolbar-skip-links-focus-outline-color] - Sets the keyboard focus outline color of the skip links, defaulting to their text color
|
|
155
|
+
* @cssprop [--toolbar-skip-links-background-focus] - Sets the background color of a skip link on keyboard focus
|
|
142
156
|
* @cssprop [--toolbar-skip-links-separator-color] - Sets the color of the divider drawn between skip links
|
|
157
|
+
* @cssprop [--toolbar-skip-links-separator] - Replaces the thin divider drawn between skip links with a glyph, as a CSS content string such as "/"
|
|
143
158
|
* @cssprop [--toolbar-skip-links-gap] - Sets the gap between skip links, with the divider centered in it
|
|
159
|
+
* @cssprop [--toolbar-skip-links-padding-inline] - Sets the horizontal padding of the skip-links bar
|
|
160
|
+
* @cssprop [--toolbar-skip-links-font-size] - Sets the font size of the skip links
|
|
161
|
+
* @cssprop [--toolbar-skip-link-padding] - Sets the padding of each skip link
|
|
162
|
+
* @cssprop [--toolbar-focus-outline-color] - Sets the keyboard focus outline color of the links in the bar
|
|
163
|
+
* @cssprop [--toolbar-link-background-focus] - Sets the background color of an eun-link in the bar on keyboard focus
|
|
144
164
|
* @element eun-toolbar
|
|
145
165
|
*/
|
|
146
166
|
let EunomiaToolbar = class EunomiaToolbar extends DialogSurfaceMixin(LocalizableMixin(LitElement)) {
|
|
@@ -151,6 +171,13 @@ let EunomiaToolbar = class EunomiaToolbar extends DialogSurfaceMixin(Localizable
|
|
|
151
171
|
* @default sticky
|
|
152
172
|
*/
|
|
153
173
|
this.position = "sticky";
|
|
174
|
+
/**
|
|
175
|
+
* How start, center, and end share the bar. Reflected, since the layout
|
|
176
|
+
* is pure CSS on the attribute, also matched by `toolbar-ssr.css` before
|
|
177
|
+
* upgrade.
|
|
178
|
+
* @default centered
|
|
179
|
+
*/
|
|
180
|
+
this.layout = "centered";
|
|
154
181
|
/**
|
|
155
182
|
* Viewport width (px) below which the burger button and its sliding
|
|
156
183
|
* panel become available.
|
|
@@ -169,9 +196,9 @@ let EunomiaToolbar = class EunomiaToolbar extends DialogSurfaceMixin(Localizable
|
|
|
169
196
|
this.panelDirection = "top";
|
|
170
197
|
/**
|
|
171
198
|
* Whether clicking outside the mobile panel closes it.
|
|
172
|
-
* @default
|
|
199
|
+
* @default false
|
|
173
200
|
*/
|
|
174
|
-
this.closeOnBackdrop =
|
|
201
|
+
this.closeOnBackdrop = false;
|
|
175
202
|
/**
|
|
176
203
|
* Enables the scroll-triggered collapse mode.
|
|
177
204
|
* @default false
|
|
@@ -207,11 +234,10 @@ let EunomiaToolbar = class EunomiaToolbar extends DialogSurfaceMixin(Localizable
|
|
|
207
234
|
*/
|
|
208
235
|
this.adaptiveTheme = false;
|
|
209
236
|
/**
|
|
210
|
-
*
|
|
211
|
-
*
|
|
212
|
-
* @default [data-toolbar-theme]
|
|
237
|
+
* The marker attribute `adaptiveTheme` reads `"dark"` or `"light"` from.
|
|
238
|
+
* @default data-toolbar-theme
|
|
213
239
|
*/
|
|
214
|
-
this.
|
|
240
|
+
this.adaptiveThemeAttribute = "data-toolbar-theme";
|
|
215
241
|
/**
|
|
216
242
|
* The toolbar's current color scheme. A plain manual switch when
|
|
217
243
|
* `adaptiveTheme` is off ; driven by the marker observer (still settable
|
|
@@ -260,6 +286,11 @@ let EunomiaToolbar = class EunomiaToolbar extends DialogSurfaceMixin(Localizable
|
|
|
260
286
|
* @internal
|
|
261
287
|
*/
|
|
262
288
|
this.intersectingThemeEls = new Set();
|
|
289
|
+
/**
|
|
290
|
+
* Marker elements the adaptive-theme observer currently observes.
|
|
291
|
+
* @internal
|
|
292
|
+
*/
|
|
293
|
+
this.observedThemeEls = new Set();
|
|
263
294
|
/**
|
|
264
295
|
* Reacts to the viewport crossing `mobileBreakpoint`. Force-closes the
|
|
265
296
|
* panel when leaving mobile while it's open — the panel itself is about
|
|
@@ -288,6 +319,20 @@ let EunomiaToolbar = class EunomiaToolbar extends DialogSurfaceMixin(Localizable
|
|
|
288
319
|
this.updateScrollState();
|
|
289
320
|
});
|
|
290
321
|
};
|
|
322
|
+
/**
|
|
323
|
+
* Coalesces document mutations into one marker sync per frame, since a
|
|
324
|
+
* client-side navigation swaps many nodes at once.
|
|
325
|
+
* @private
|
|
326
|
+
*/
|
|
327
|
+
this.handleThemeMutation = () => {
|
|
328
|
+
if (this.themeMarkerRafId !== undefined) {
|
|
329
|
+
return;
|
|
330
|
+
}
|
|
331
|
+
this.themeMarkerRafId = requestAnimationFrame(() => {
|
|
332
|
+
this.themeMarkerRafId = undefined;
|
|
333
|
+
this.syncThemeMarkers();
|
|
334
|
+
});
|
|
335
|
+
};
|
|
291
336
|
/**
|
|
292
337
|
* Tracks which marker elements currently cross the trigger line and
|
|
293
338
|
* resolves `theme` from them.
|
|
@@ -330,12 +375,12 @@ let EunomiaToolbar = class EunomiaToolbar extends DialogSurfaceMixin(Localizable
|
|
|
330
375
|
}
|
|
331
376
|
},
|
|
332
377
|
});
|
|
333
|
-
this.
|
|
378
|
+
this.dispatchChange("open");
|
|
334
379
|
void this.updateComplete.then(() => this.focusInitialElement());
|
|
335
380
|
return;
|
|
336
381
|
}
|
|
337
382
|
this.closeDialogSurface(this.burgerEl);
|
|
338
|
-
this.
|
|
383
|
+
this.dispatchChange("open");
|
|
339
384
|
};
|
|
340
385
|
/**
|
|
341
386
|
* Explicitly focuses a skip link's target on click, on top of (not
|
|
@@ -385,7 +430,7 @@ let EunomiaToolbar = class EunomiaToolbar extends DialogSurfaceMixin(Localizable
|
|
|
385
430
|
this.mediaQueryList?.removeEventListener("change", this.handleMediaChange);
|
|
386
431
|
this.detachScrollListener();
|
|
387
432
|
this.teardownAdaptiveThemeObserver();
|
|
388
|
-
this.teardownDialogSurface(
|
|
433
|
+
this.teardownDialogSurface();
|
|
389
434
|
super.disconnectedCallback();
|
|
390
435
|
}
|
|
391
436
|
/**
|
|
@@ -440,8 +485,9 @@ let EunomiaToolbar = class EunomiaToolbar extends DialogSurfaceMixin(Localizable
|
|
|
440
485
|
* The `updated()` slice handling `adaptiveTheme` : sets up or tears down
|
|
441
486
|
* the marker observer when the mode itself toggles, and re-anchors it
|
|
442
487
|
* when anything its setup depends on changes while already on
|
|
443
|
-
* (`adaptiveThemeSelector`, `collapsed` — the
|
|
444
|
-
* line is measured from — or `scrollTarget` — the
|
|
488
|
+
* (`adaptiveThemeSelector`, `adaptiveThemeAttribute`, `collapsed` — the
|
|
489
|
+
* bar height the trigger line is measured from — or `scrollTarget` — the
|
|
490
|
+
* observer's root).
|
|
445
491
|
*
|
|
446
492
|
* @param changed the changed properties.
|
|
447
493
|
* @private
|
|
@@ -462,6 +508,7 @@ let EunomiaToolbar = class EunomiaToolbar extends DialogSurfaceMixin(Localizable
|
|
|
462
508
|
}
|
|
463
509
|
if (this.adaptiveTheme &&
|
|
464
510
|
(changed.has("adaptiveThemeSelector") ||
|
|
511
|
+
changed.has("adaptiveThemeAttribute") ||
|
|
465
512
|
changed.has("collapsed") ||
|
|
466
513
|
changed.has("scrollTarget"))) {
|
|
467
514
|
this.setupAdaptiveThemeObserver();
|
|
@@ -486,21 +533,23 @@ let EunomiaToolbar = class EunomiaToolbar extends DialogSurfaceMixin(Localizable
|
|
|
486
533
|
this.open = !this.open;
|
|
487
534
|
}
|
|
488
535
|
/**
|
|
489
|
-
* Re-queries `adaptiveThemeSelector` and
|
|
490
|
-
*
|
|
491
|
-
*
|
|
492
|
-
*
|
|
536
|
+
* Re-queries `adaptiveThemeSelector` and syncs the observed markers with
|
|
537
|
+
* the current matches. Marker sections added, removed, or re-marked
|
|
538
|
+
* through their `adaptiveThemeAttribute` are already picked up on their
|
|
539
|
+
* own ; this is left for a change the document watch can't see, such as
|
|
540
|
+
* an element starting to match a custom `adaptiveThemeSelector` through
|
|
541
|
+
* a class.
|
|
493
542
|
*/
|
|
494
543
|
refreshAdaptiveTheme() {
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
this.
|
|
544
|
+
this.syncThemeMarkers();
|
|
545
|
+
}
|
|
546
|
+
/**
|
|
547
|
+
* The selector matching the marker elements, `adaptiveThemeSelector`
|
|
548
|
+
* when set, every element carrying `adaptiveThemeAttribute` otherwise.
|
|
549
|
+
* @private
|
|
550
|
+
*/
|
|
551
|
+
get themeMarkerSelector() {
|
|
552
|
+
return this.adaptiveThemeSelector ?? `[${this.adaptiveThemeAttribute}]`;
|
|
504
553
|
}
|
|
505
554
|
/**
|
|
506
555
|
* (Re)builds the `mobile` matchMedia listener for the current
|
|
@@ -603,10 +652,17 @@ let EunomiaToolbar = class EunomiaToolbar extends DialogSurfaceMixin(Localizable
|
|
|
603
652
|
}
|
|
604
653
|
/**
|
|
605
654
|
* Recomputes `collapsed`/`atTop` from the current scroll position,
|
|
606
|
-
* dispatching `eunchange` for a genuine `collapsed` transition.
|
|
655
|
+
* dispatching `eunchange` for a genuine `collapsed` transition. Skipped
|
|
656
|
+
* while page scroll is locked (the mobile panel, or any other overlay, is
|
|
657
|
+
* open) : the pinned `<body>` makes `window.scrollY` read `0`, which would
|
|
658
|
+
* otherwise expand the bar and fire `eunchange` for a scroll that never
|
|
659
|
+
* happened. The real position comes back with the unlock.
|
|
607
660
|
* @private
|
|
608
661
|
*/
|
|
609
662
|
updateScrollState() {
|
|
663
|
+
if (this.scrollTargetEl === window && isScrollLocked()) {
|
|
664
|
+
return;
|
|
665
|
+
}
|
|
610
666
|
const scrollY = this.currentScrollY();
|
|
611
667
|
if (this.collapseOnScroll) {
|
|
612
668
|
this.setCollapsed(scrollY > this.collapseThreshold);
|
|
@@ -627,7 +683,7 @@ let EunomiaToolbar = class EunomiaToolbar extends DialogSurfaceMixin(Localizable
|
|
|
627
683
|
return;
|
|
628
684
|
}
|
|
629
685
|
this.collapsed = collapsed;
|
|
630
|
-
this.
|
|
686
|
+
this.dispatchChange("collapsed");
|
|
631
687
|
}
|
|
632
688
|
/**
|
|
633
689
|
* Sets `theme`, dispatching `eunchange` only for a genuine transition.
|
|
@@ -640,7 +696,22 @@ let EunomiaToolbar = class EunomiaToolbar extends DialogSurfaceMixin(Localizable
|
|
|
640
696
|
return;
|
|
641
697
|
}
|
|
642
698
|
this.theme = theme;
|
|
643
|
-
this.
|
|
699
|
+
this.dispatchChange("theme");
|
|
700
|
+
}
|
|
701
|
+
/**
|
|
702
|
+
* Dispatches `eunchange` for `property`, with the toolbar's current state
|
|
703
|
+
* as its value.
|
|
704
|
+
*
|
|
705
|
+
* @param property the property that just changed.
|
|
706
|
+
* @private
|
|
707
|
+
*/
|
|
708
|
+
dispatchChange(property) {
|
|
709
|
+
this.dispatchEvent(new ChangeEvent({
|
|
710
|
+
property,
|
|
711
|
+
open: this.open,
|
|
712
|
+
collapsed: this.collapsed,
|
|
713
|
+
theme: this.theme,
|
|
714
|
+
}));
|
|
644
715
|
}
|
|
645
716
|
/**
|
|
646
717
|
* The bar's current live height, used to anchor the adaptive-theme
|
|
@@ -669,20 +740,67 @@ let EunomiaToolbar = class EunomiaToolbar extends DialogSurfaceMixin(Localizable
|
|
|
669
740
|
root: this.resolveIntersectionRoot(),
|
|
670
741
|
rootMargin: `-${barHeight}px 0px -85% 0px`,
|
|
671
742
|
});
|
|
672
|
-
document
|
|
673
|
-
.
|
|
674
|
-
|
|
743
|
+
document.querySelectorAll(this.themeMarkerSelector).forEach((el) => {
|
|
744
|
+
this.themeObserver?.observe(el);
|
|
745
|
+
this.observedThemeEls.add(el);
|
|
746
|
+
});
|
|
747
|
+
this.themeMarkerObserver = new MutationObserver(this.handleThemeMutation);
|
|
748
|
+
this.themeMarkerObserver.observe(document.documentElement, {
|
|
749
|
+
childList: true,
|
|
750
|
+
subtree: true,
|
|
751
|
+
attributes: true,
|
|
752
|
+
attributeFilter: [this.adaptiveThemeAttribute],
|
|
753
|
+
});
|
|
675
754
|
this.resolveAdaptiveTheme();
|
|
676
755
|
}
|
|
677
756
|
/**
|
|
678
|
-
* Disconnects and clears the adaptive-theme
|
|
757
|
+
* Disconnects and clears the adaptive-theme observers, if any.
|
|
679
758
|
* @private
|
|
680
759
|
*/
|
|
681
760
|
teardownAdaptiveThemeObserver() {
|
|
682
761
|
this.themeObserver?.disconnect();
|
|
683
762
|
this.themeObserver = undefined;
|
|
763
|
+
this.themeMarkerObserver?.disconnect();
|
|
764
|
+
this.themeMarkerObserver = undefined;
|
|
765
|
+
if (this.themeMarkerRafId !== undefined) {
|
|
766
|
+
cancelAnimationFrame(this.themeMarkerRafId);
|
|
767
|
+
this.themeMarkerRafId = undefined;
|
|
768
|
+
}
|
|
769
|
+
this.observedThemeEls.clear();
|
|
684
770
|
this.intersectingThemeEls.clear();
|
|
685
771
|
}
|
|
772
|
+
/**
|
|
773
|
+
* Observes markers that newly match `adaptiveThemeSelector` and drops
|
|
774
|
+
* the ones gone from the document, then resolves `theme`. Resolving waits
|
|
775
|
+
* for the observer when new markers were just observed : it reports each
|
|
776
|
+
* of them once, and resolving before that would briefly fall back to
|
|
777
|
+
* `defaultTheme` while the new page's section is already under the bar.
|
|
778
|
+
* @private
|
|
779
|
+
*/
|
|
780
|
+
syncThemeMarkers() {
|
|
781
|
+
if (!this.themeObserver) {
|
|
782
|
+
return;
|
|
783
|
+
}
|
|
784
|
+
const matches = new Set(document.querySelectorAll(this.themeMarkerSelector));
|
|
785
|
+
for (const el of this.observedThemeEls) {
|
|
786
|
+
if (!matches.has(el)) {
|
|
787
|
+
this.themeObserver.unobserve(el);
|
|
788
|
+
this.observedThemeEls.delete(el);
|
|
789
|
+
this.intersectingThemeEls.delete(el);
|
|
790
|
+
}
|
|
791
|
+
}
|
|
792
|
+
let observedNew = false;
|
|
793
|
+
for (const el of matches) {
|
|
794
|
+
if (!this.observedThemeEls.has(el)) {
|
|
795
|
+
this.themeObserver.observe(el);
|
|
796
|
+
this.observedThemeEls.add(el);
|
|
797
|
+
observedNew = true;
|
|
798
|
+
}
|
|
799
|
+
}
|
|
800
|
+
if (!observedNew) {
|
|
801
|
+
this.resolveAdaptiveTheme();
|
|
802
|
+
}
|
|
803
|
+
}
|
|
686
804
|
/**
|
|
687
805
|
* Resolves `theme` from whichever marked section currently intersects the
|
|
688
806
|
* trigger line — the last one in document order among current matches,
|
|
@@ -695,10 +813,10 @@ let EunomiaToolbar = class EunomiaToolbar extends DialogSurfaceMixin(Localizable
|
|
|
695
813
|
this.setTheme(this.defaultTheme);
|
|
696
814
|
return;
|
|
697
815
|
}
|
|
698
|
-
const all = document.querySelectorAll(this.
|
|
816
|
+
const all = document.querySelectorAll(this.themeMarkerSelector);
|
|
699
817
|
for (let i = all.length - 1; i >= 0; i -= 1) {
|
|
700
818
|
if (this.intersectingThemeEls.has(all[i])) {
|
|
701
|
-
this.setTheme(all[i].getAttribute(
|
|
819
|
+
this.setTheme(all[i].getAttribute(this.adaptiveThemeAttribute) === "dark"
|
|
702
820
|
? "dark"
|
|
703
821
|
: "light");
|
|
704
822
|
return;
|
|
@@ -707,8 +825,10 @@ let EunomiaToolbar = class EunomiaToolbar extends DialogSurfaceMixin(Localizable
|
|
|
707
825
|
this.setTheme(this.defaultTheme);
|
|
708
826
|
}
|
|
709
827
|
/**
|
|
710
|
-
* Focuses the `[autofocus]` slotted element if present, otherwise
|
|
711
|
-
*
|
|
828
|
+
* Focuses the `[autofocus]` slotted element if present, otherwise keeps
|
|
829
|
+
* it on the burger button, which lives inside the panel : the button just
|
|
830
|
+
* activated keeps its visible focus ring, and since the panel header
|
|
831
|
+
* comes first in the DOM, the next `Tab` lands on the panel's first item.
|
|
712
832
|
* @private
|
|
713
833
|
*/
|
|
714
834
|
focusInitialElement() {
|
|
@@ -717,7 +837,7 @@ let EunomiaToolbar = class EunomiaToolbar extends DialogSurfaceMixin(Localizable
|
|
|
717
837
|
autofocusTarget.focus();
|
|
718
838
|
return;
|
|
719
839
|
}
|
|
720
|
-
this.
|
|
840
|
+
this.burgerEl?.focus();
|
|
721
841
|
}
|
|
722
842
|
/**
|
|
723
843
|
* Whether anything should render in the skip-links area at all — either
|
|
@@ -810,10 +930,15 @@ let EunomiaToolbar = class EunomiaToolbar extends DialogSurfaceMixin(Localizable
|
|
|
810
930
|
: (this.menuOpenLabel ?? this.dictionary.toolbar.menuOpen)}
|
|
811
931
|
@click=${() => this.toggle()}
|
|
812
932
|
>
|
|
813
|
-
|
|
814
|
-
|
|
933
|
+
<!-- burger-icon holds the per-state slots as its fallback, so a
|
|
934
|
+
single element slotted into it stays put across both states, free
|
|
935
|
+
to animate between them, and wins over menu-icon/close-icon. -->
|
|
936
|
+
<slot name="burger-icon">
|
|
937
|
+
<slot name=${slotName} @slotchange=${this.handleIconSlotChange}>
|
|
938
|
+
${hasSlotted
|
|
815
939
|
? nothing
|
|
816
940
|
: html `<eun-icon name=${iconName} size="20"></eun-icon>`}
|
|
941
|
+
</slot>
|
|
817
942
|
</slot>
|
|
818
943
|
</eun-button>
|
|
819
944
|
`;
|
|
@@ -886,6 +1011,9 @@ EunomiaToolbar.styles = toolbarStyles;
|
|
|
886
1011
|
__decorate([
|
|
887
1012
|
property({ reflect: true, useDefault: true })
|
|
888
1013
|
], EunomiaToolbar.prototype, "position", void 0);
|
|
1014
|
+
__decorate([
|
|
1015
|
+
property({ reflect: true, useDefault: true })
|
|
1016
|
+
], EunomiaToolbar.prototype, "layout", void 0);
|
|
889
1017
|
__decorate([
|
|
890
1018
|
property({ type: Number, attribute: "mobile-breakpoint" })
|
|
891
1019
|
], EunomiaToolbar.prototype, "mobileBreakpoint", void 0);
|
|
@@ -902,7 +1030,7 @@ __decorate([
|
|
|
902
1030
|
property({ reflect: true, attribute: "mobile-hide" })
|
|
903
1031
|
], EunomiaToolbar.prototype, "mobileHide", void 0);
|
|
904
1032
|
__decorate([
|
|
905
|
-
property({
|
|
1033
|
+
property({ type: Boolean, attribute: "close-on-backdrop" })
|
|
906
1034
|
], EunomiaToolbar.prototype, "closeOnBackdrop", void 0);
|
|
907
1035
|
__decorate([
|
|
908
1036
|
property({ attribute: "menu-open-label" })
|
|
@@ -934,6 +1062,9 @@ __decorate([
|
|
|
934
1062
|
__decorate([
|
|
935
1063
|
property({ type: Boolean, attribute: "adaptive-theme" })
|
|
936
1064
|
], EunomiaToolbar.prototype, "adaptiveTheme", void 0);
|
|
1065
|
+
__decorate([
|
|
1066
|
+
property({ attribute: "adaptive-theme-attribute" })
|
|
1067
|
+
], EunomiaToolbar.prototype, "adaptiveThemeAttribute", void 0);
|
|
937
1068
|
__decorate([
|
|
938
1069
|
property({ attribute: "adaptive-theme-selector" })
|
|
939
1070
|
], EunomiaToolbar.prototype, "adaptiveThemeSelector", void 0);
|