@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
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { html, nothing } from "lit";
|
|
2
|
-
import { GUEST_STATUS_ICON, isMultiDay, PRIORITY_SEMANTIC_STATE, } from "./scheduler.utils.js";
|
|
2
|
+
import { GUEST_STATUS_ICON, isMultiDay, PRIORITY_SEMANTIC_STATE, resolveEventColor, } from "./scheduler.utils.js";
|
|
3
3
|
/**
|
|
4
4
|
* Renders the read-only event detail popover (consultation mode) : the
|
|
5
5
|
* default result of clicking an event chip — full details (title,
|
|
@@ -7,7 +7,9 @@ import { GUEST_STATUS_ICON, isMultiDay, PRIORITY_SEMANTIC_STATE, } from "./sched
|
|
|
7
7
|
* shared guests, each with a status icon — check/hourglass/cross for
|
|
8
8
|
* confirmed/pending/declined), plus
|
|
9
9
|
* Edit/Delete actions to actually enter the editor and a close (✕) button
|
|
10
|
-
* to dismiss it without acting on the event at all.
|
|
10
|
+
* to dismiss it without acting on the event at all. Delete asks for a
|
|
11
|
+
* confirmation in place first, swapping the actions for a question and a
|
|
12
|
+
* Cancel/Delete pair. Deliberately not
|
|
11
13
|
* `eun-tooltip` : that component is non-interactive (`role="tooltip"`,
|
|
12
14
|
* closes on blur) by ARIA convention, the wrong fit for a panel that needs
|
|
13
15
|
* to hold focusable buttons — this is a small popover instead, positioned
|
|
@@ -19,11 +21,11 @@ import { GUEST_STATUS_ICON, isMultiDay, PRIORITY_SEMANTIC_STATE, } from "./sched
|
|
|
19
21
|
* @returns the rendered template.
|
|
20
22
|
*/
|
|
21
23
|
export function renderEventPopover(props) {
|
|
22
|
-
const { event, locale,
|
|
24
|
+
const { event, locale, closeLabel, allDayLabel, priorityLabels, onClose } = props;
|
|
23
25
|
return html `
|
|
24
26
|
<div
|
|
25
27
|
class="event-popover-bar"
|
|
26
|
-
style
|
|
28
|
+
style=${`--_accent: ${resolveEventColor(event.color)?.accent ?? "var(--eun-color-blue-600)"};`}
|
|
27
29
|
></div>
|
|
28
30
|
<eun-button
|
|
29
31
|
id="event-popover-close"
|
|
@@ -39,7 +41,7 @@ export function renderEventPopover(props) {
|
|
|
39
41
|
<h3 class="event-popover-title">${event.title}</h3>
|
|
40
42
|
<div class="event-popover-row">
|
|
41
43
|
<eun-icon name="schedule" size="16"></eun-icon>
|
|
42
|
-
<span>${formatEventPopoverDate(event, locale)}</span>
|
|
44
|
+
<span>${formatEventPopoverDate(event, allDayLabel, locale)}</span>
|
|
43
45
|
</div>
|
|
44
46
|
${event.location
|
|
45
47
|
? html `
|
|
@@ -99,54 +101,87 @@ export function renderEventPopover(props) {
|
|
|
99
101
|
`
|
|
100
102
|
: nothing}
|
|
101
103
|
</div>
|
|
102
|
-
${
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
104
|
+
${renderEventPopoverActions(props)}
|
|
105
|
+
`;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Renders the popover's Delete/Edit actions, or the delete confirmation
|
|
109
|
+
* that replaces them once Delete was pressed. Nothing in readonly mode.
|
|
110
|
+
* @private
|
|
111
|
+
*/
|
|
112
|
+
function renderEventPopoverActions(props) {
|
|
113
|
+
if (props.readonly) {
|
|
114
|
+
return nothing;
|
|
115
|
+
}
|
|
116
|
+
if (props.confirmingDelete) {
|
|
117
|
+
return html `
|
|
118
|
+
<div
|
|
119
|
+
class="event-popover-actions event-popover-confirm"
|
|
120
|
+
role="group"
|
|
121
|
+
aria-labelledby="event-popover-confirm-text"
|
|
122
|
+
>
|
|
123
|
+
<span id="event-popover-confirm-text">${props.deleteConfirmLabel}</span>
|
|
124
|
+
<eun-button
|
|
125
|
+
id="event-popover-confirm-cancel"
|
|
126
|
+
appearance="ghost"
|
|
127
|
+
rounded
|
|
128
|
+
@click=${props.onCancelDelete}
|
|
129
|
+
>${props.cancelLabel}</eun-button
|
|
130
|
+
>
|
|
131
|
+
<eun-button
|
|
132
|
+
id="event-popover-confirm-delete"
|
|
133
|
+
color="critical"
|
|
134
|
+
rounded
|
|
135
|
+
@click=${props.onConfirmDelete}
|
|
136
|
+
>${props.deleteLabel}</eun-button
|
|
137
|
+
>
|
|
138
|
+
</div>
|
|
139
|
+
`;
|
|
140
|
+
}
|
|
141
|
+
return html `
|
|
142
|
+
<div class="event-popover-actions">
|
|
143
|
+
<eun-button
|
|
144
|
+
id="event-popover-delete"
|
|
145
|
+
color="critical"
|
|
146
|
+
appearance="outline"
|
|
147
|
+
rounded
|
|
148
|
+
@click=${props.onDelete}
|
|
149
|
+
>${props.deleteLabel}</eun-button
|
|
150
|
+
>
|
|
151
|
+
<eun-button color="primary" rounded @click=${props.onEdit}
|
|
152
|
+
>${props.editLabel}</eun-button
|
|
153
|
+
>
|
|
154
|
+
</div>
|
|
119
155
|
`;
|
|
120
156
|
}
|
|
121
157
|
/**
|
|
122
158
|
* Formats an event's date/time for the popover's detail line : an
|
|
123
|
-
* `
|
|
124
|
-
* for an {@link EunomiaSchedulerEvent.allDay} event,
|
|
125
|
-
* a multi-day *timed* one
|
|
126
|
-
*
|
|
127
|
-
* start–end time range otherwise.
|
|
159
|
+
* `allDayLabel`-prefixed date (or date range, if it spans multiple days)
|
|
160
|
+
* for an {@link EunomiaSchedulerEvent.allDay} event, each end's own date
|
|
161
|
+
* and time for a multi-day *timed* one, or a full date + start–end time
|
|
162
|
+
* range otherwise.
|
|
128
163
|
* @private
|
|
129
164
|
*/
|
|
130
|
-
function formatEventPopoverDate(event, locale) {
|
|
165
|
+
function formatEventPopoverDate(event, allDayLabel, locale) {
|
|
131
166
|
const dateOptions = {
|
|
132
167
|
weekday: "long",
|
|
133
168
|
day: "numeric",
|
|
134
169
|
month: "long",
|
|
135
170
|
};
|
|
136
|
-
|
|
137
|
-
const startLabel = event.start.toLocaleDateString(locale, dateOptions);
|
|
138
|
-
const endLabel = event.end.toLocaleDateString(locale, dateOptions);
|
|
139
|
-
const range = startLabel === endLabel ? startLabel : `${startLabel} – ${endLabel}`;
|
|
140
|
-
return event.allDay ? `All day · ${range}` : range;
|
|
141
|
-
}
|
|
142
|
-
const dayLabel = event.start.toLocaleDateString(locale, dateOptions);
|
|
143
|
-
const startTime = event.start.toLocaleTimeString(locale, {
|
|
144
|
-
hour: "numeric",
|
|
145
|
-
minute: "2-digit",
|
|
146
|
-
});
|
|
147
|
-
const endTime = event.end.toLocaleTimeString(locale, {
|
|
171
|
+
const timeOptions = {
|
|
148
172
|
hour: "numeric",
|
|
149
173
|
minute: "2-digit",
|
|
150
|
-
}
|
|
151
|
-
|
|
174
|
+
};
|
|
175
|
+
const startDate = event.start.toLocaleDateString(locale, dateOptions);
|
|
176
|
+
const endDate = event.end.toLocaleDateString(locale, dateOptions);
|
|
177
|
+
if (event.allDay) {
|
|
178
|
+
const range = startDate === endDate ? startDate : `${startDate} – ${endDate}`;
|
|
179
|
+
return `${allDayLabel} · ${range}`;
|
|
180
|
+
}
|
|
181
|
+
const startTime = event.start.toLocaleTimeString(locale, timeOptions);
|
|
182
|
+
const endTime = event.end.toLocaleTimeString(locale, timeOptions);
|
|
183
|
+
if (isMultiDay(event)) {
|
|
184
|
+
return `${startDate} · ${startTime} – ${endDate} · ${endTime}`;
|
|
185
|
+
}
|
|
186
|
+
return `${startDate} · ${startTime} – ${endTime}`;
|
|
152
187
|
}
|
|
@@ -83,13 +83,13 @@ const base = css `
|
|
|
83
83
|
align-items: flex-start;
|
|
84
84
|
gap: var(--eun-space-s, 8px);
|
|
85
85
|
font-size: 13px;
|
|
86
|
-
color: var(--eun-text-secondary, #
|
|
86
|
+
color: var(--eun-text-secondary, #666e8a);
|
|
87
87
|
}
|
|
88
88
|
|
|
89
89
|
.event-popover-row eun-icon {
|
|
90
90
|
flex: 0 0 auto;
|
|
91
91
|
margin-top: 1px;
|
|
92
|
-
color: var(--eun-text-secondary, #
|
|
92
|
+
color: var(--eun-text-secondary, #666e8a);
|
|
93
93
|
}
|
|
94
94
|
|
|
95
95
|
.event-popover-guests {
|
|
@@ -110,7 +110,7 @@ const base = css `
|
|
|
110
110
|
.event-popover-guest eun-icon {
|
|
111
111
|
flex: 0 0 auto;
|
|
112
112
|
margin-top: 0;
|
|
113
|
-
color: var(--_guestStatusColor, var(--eun-text-secondary, #
|
|
113
|
+
color: var(--_guestStatusColor, var(--eun-text-secondary, #666e8a));
|
|
114
114
|
}
|
|
115
115
|
|
|
116
116
|
.event-popover-guest[data-status="confirmed"] {
|
|
@@ -129,5 +129,16 @@ const base = css `
|
|
|
129
129
|
gap: var(--eun-space-s, 8px);
|
|
130
130
|
padding: 0 var(--eun-space-m, 16px) var(--eun-space-m, 16px);
|
|
131
131
|
}
|
|
132
|
+
|
|
133
|
+
.event-popover-confirm {
|
|
134
|
+
flex-wrap: wrap;
|
|
135
|
+
align-items: center;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
#event-popover-confirm-text {
|
|
139
|
+
flex: 1 1 100%;
|
|
140
|
+
font-size: var(--eun-font-size-s, 14px);
|
|
141
|
+
font-weight: 600;
|
|
142
|
+
}
|
|
132
143
|
`;
|
|
133
144
|
export const schedulerEventPopoverStyles = base;
|
|
@@ -16,11 +16,12 @@ export interface HourGridProps {
|
|
|
16
16
|
onSlotClick: (start: Date) => void;
|
|
17
17
|
onEventClick: (event: EunomiaSchedulerEvent, domEvent: MouseEvent) => void;
|
|
18
18
|
draggingEventId?: string | null;
|
|
19
|
+
hideDayHeader?: boolean;
|
|
19
20
|
onEventDragStart?: (event: EunomiaSchedulerEvent, domEvent: PointerEvent) => void;
|
|
20
21
|
}
|
|
21
22
|
/**
|
|
22
|
-
* Renders the day/week/work-week grid : a sticky day-header row
|
|
23
|
-
* optional all-day/multi-day event row beneath it (via
|
|
23
|
+
* Renders the day/week/work-week grid : a sticky day-header row and an
|
|
24
|
+
* optional all-day/multi-day event row beneath it, pinned together (via
|
|
24
25
|
* `layoutAllDayEvents`), and the scrollable timed hour grid below that —
|
|
25
26
|
* one shared horizontal+vertical scroll container, with the header row and
|
|
26
27
|
* the hour gutter each independently `position: sticky` (top and left
|
|
@@ -19,8 +19,8 @@ const CONDENSED_HEIGHT_THRESHOLD = 34;
|
|
|
19
19
|
*/
|
|
20
20
|
const ALL_DAY_BAR_HEIGHT = 22;
|
|
21
21
|
/**
|
|
22
|
-
* Renders the day/week/work-week grid : a sticky day-header row
|
|
23
|
-
* optional all-day/multi-day event row beneath it (via
|
|
22
|
+
* Renders the day/week/work-week grid : a sticky day-header row and an
|
|
23
|
+
* optional all-day/multi-day event row beneath it, pinned together (via
|
|
24
24
|
* `layoutAllDayEvents`), and the scrollable timed hour grid below that —
|
|
25
25
|
* one shared horizontal+vertical scroll container, with the header row and
|
|
26
26
|
* the hour gutter each independently `position: sticky` (top and left
|
|
@@ -56,63 +56,67 @@ export function renderHourGrid(props) {
|
|
|
56
56
|
const allDayRowCount = allDaySlots.reduce((max, slot) => Math.max(max, slot.row + 1), 0);
|
|
57
57
|
return html `
|
|
58
58
|
<div id="hour-grid-scroll">
|
|
59
|
-
<div class="hour-grid-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
class
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
59
|
+
<div class="hour-grid-top">
|
|
60
|
+
${props.hideDayHeader
|
|
61
|
+
? null
|
|
62
|
+
: html `<div class="hour-grid-header">
|
|
63
|
+
<div class="hour-grid-gutter-spacer"></div>
|
|
64
|
+
${days.map((day) => html `
|
|
65
|
+
<div
|
|
66
|
+
class=${classMap({
|
|
67
|
+
"hour-grid-day-header": true,
|
|
68
|
+
today: isToday(day),
|
|
69
|
+
})}
|
|
70
|
+
>
|
|
71
|
+
${day.toLocaleDateString(locale, { weekday: "short" })}
|
|
72
|
+
<br />
|
|
73
|
+
${day.toLocaleDateString(locale, {
|
|
74
|
+
day: "numeric",
|
|
75
|
+
month: "short",
|
|
76
|
+
})}
|
|
77
|
+
</div>
|
|
78
|
+
`)}
|
|
79
|
+
</div>`}
|
|
80
|
+
${allDayRowCount > 0
|
|
78
81
|
? html `
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
+
<div
|
|
83
|
+
class="hour-grid-allday-row"
|
|
84
|
+
style=${styleMap({
|
|
82
85
|
height: `${allDayRowCount * ALL_DAY_BAR_HEIGHT}px`,
|
|
83
86
|
})}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
87
|
+
>
|
|
88
|
+
<div class="hour-grid-gutter-spacer"></div>
|
|
89
|
+
<div class="hour-grid-allday-days">
|
|
90
|
+
${allDaySlots.map((slot) => {
|
|
88
91
|
const span = slot.endIndex - slot.startIndex + 1;
|
|
89
92
|
const left = (slot.startIndex / days.length) * 100;
|
|
90
93
|
const width = (span / days.length) * 100;
|
|
91
94
|
return html `
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
+
<div
|
|
96
|
+
class="hour-grid-allday-event"
|
|
97
|
+
style=${styleMap({
|
|
95
98
|
top: `${slot.row * ALL_DAY_BAR_HEIGHT}px`,
|
|
96
99
|
left: `${left}%`,
|
|
97
100
|
width: `${width}%`,
|
|
98
101
|
})}
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
102
|
+
>
|
|
103
|
+
<eun-scheduler-event
|
|
104
|
+
.label=${slot.event.title}
|
|
105
|
+
.start=${slot.event.start}
|
|
106
|
+
.end=${slot.event.end}
|
|
107
|
+
color=${slot.event.color}
|
|
108
|
+
appearance=${props.eventAppearance}
|
|
109
|
+
hide-time
|
|
110
|
+
@click=${(domEvent) => props.onEventClick(slot.event, domEvent)}
|
|
111
|
+
></eun-scheduler-event>
|
|
112
|
+
</div>
|
|
113
|
+
`;
|
|
111
114
|
})}
|
|
115
|
+
</div>
|
|
112
116
|
</div>
|
|
113
|
-
|
|
114
|
-
`
|
|
117
|
+
`
|
|
115
118
|
: null}
|
|
119
|
+
</div>
|
|
116
120
|
<div
|
|
117
121
|
class="hour-grid-body"
|
|
118
122
|
style=${styleMap({ "--_slotsPerHour": String(slotsPerHour) })}
|
|
@@ -184,7 +188,10 @@ function renderDayColumn(day, props, now, hourCount) {
|
|
|
184
188
|
: null}
|
|
185
189
|
${slots.map((slot) => {
|
|
186
190
|
const startMinutes = Math.max(slot.event.start.getHours() * 60 + slot.event.start.getMinutes(), gridStartMinutes);
|
|
187
|
-
|
|
191
|
+
// A same-day event can still end at the next midnight, read as 24:00.
|
|
192
|
+
const endMinutes = Math.min(isSameDay(slot.event.start, slot.event.end)
|
|
193
|
+
? slot.event.end.getHours() * 60 + slot.event.end.getMinutes()
|
|
194
|
+
: 24 * 60, gridEndMinutes);
|
|
188
195
|
if (endMinutes <= gridStartMinutes || startMinutes >= gridEndMinutes) {
|
|
189
196
|
return null;
|
|
190
197
|
}
|
|
@@ -14,9 +14,10 @@ import { cssBelow } from "../../../utils/media.styles.js";
|
|
|
14
14
|
* One shared scroll container (`#hour-grid-scroll`) holds the header, the
|
|
15
15
|
* optional all-day row, and the timed body — scrolling both horizontally
|
|
16
16
|
* (so narrow viewports keep every day column at a legible minimum width
|
|
17
|
-
* instead of squeezing them illegibly) and vertically. The header
|
|
18
|
-
* the hour gutter are each
|
|
19
|
-
* respectively), so both stay
|
|
17
|
+
* instead of squeezing them illegibly) and vertically. The header and
|
|
18
|
+
* all-day rows (`.hour-grid-top`) and the hour gutter are each
|
|
19
|
+
* independently `position: sticky` (top / left respectively), so both stay
|
|
20
|
+
* in view while scrolling in either direction.
|
|
20
21
|
*
|
|
21
22
|
* `#hour-grid-scroll` reacts to `:host`'s own rendered width via
|
|
22
23
|
* `@container`, not `@media`, since a scheduler embedded in a narrow
|
|
@@ -42,12 +43,17 @@ const base = css `
|
|
|
42
43
|
touch-action: pan-y;
|
|
43
44
|
}
|
|
44
45
|
|
|
45
|
-
.hour-grid-
|
|
46
|
-
display: flex;
|
|
46
|
+
.hour-grid-top {
|
|
47
47
|
position: sticky;
|
|
48
48
|
top: 0;
|
|
49
49
|
z-index: 3;
|
|
50
|
+
width: max-content;
|
|
51
|
+
min-width: 100%;
|
|
50
52
|
background: var(--eun-surface-color, #ffffff);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.hour-grid-header {
|
|
56
|
+
display: flex;
|
|
51
57
|
border-bottom: 1px solid var(--eun-border-color, #dee0e7);
|
|
52
58
|
}
|
|
53
59
|
|
|
@@ -68,7 +74,7 @@ const base = css `
|
|
|
68
74
|
border-left: 1px solid var(--eun-divider-color, #dee0e7);
|
|
69
75
|
text-align: center;
|
|
70
76
|
font-size: 12px;
|
|
71
|
-
color: var(--eun-text-secondary, #
|
|
77
|
+
color: var(--eun-text-secondary, #666e8a);
|
|
72
78
|
}
|
|
73
79
|
|
|
74
80
|
.hour-grid-day-header.today {
|
|
@@ -119,7 +125,7 @@ const base = css `
|
|
|
119
125
|
padding-right: var(--eun-space-xs, 4px);
|
|
120
126
|
text-align: center;
|
|
121
127
|
font-size: 11px;
|
|
122
|
-
color: var(--eun-text-secondary, #
|
|
128
|
+
color: var(--eun-text-secondary, #666e8a);
|
|
123
129
|
transform: translateY(-0.5em);
|
|
124
130
|
border-top: none;
|
|
125
131
|
}
|
|
@@ -122,7 +122,7 @@ function renderMonthWeek(week, props) {
|
|
|
122
122
|
color=${slot.event.color}
|
|
123
123
|
appearance=${isMultiDay(slot.event) ? "default" : "ghost"}
|
|
124
124
|
direction=${desktop ? "row" : "column"}
|
|
125
|
-
?hide-time=${!desktop ||
|
|
125
|
+
?hide-time=${!desktop || isMultiDay(slot.event)}
|
|
126
126
|
@click=${(domEvent) => onEventClick(slot.event, domEvent)}
|
|
127
127
|
></eun-scheduler-event>
|
|
128
128
|
`)}
|
|
@@ -2,7 +2,7 @@ import { css } from "lit";
|
|
|
2
2
|
import { cssBelow } from "../../../utils/media.styles.js";
|
|
3
3
|
const base = css `
|
|
4
4
|
.month-scroll {
|
|
5
|
-
max-height: var(--scheduler-body-max-height,
|
|
5
|
+
max-height: var(--scheduler-body-max-height, none);
|
|
6
6
|
overflow-y: auto;
|
|
7
7
|
}
|
|
8
8
|
|
|
@@ -28,7 +28,7 @@ const base = css `
|
|
|
28
28
|
padding: var(--eun-space-xs, 4px) var(--eun-space-s, 8px);
|
|
29
29
|
text-align: center;
|
|
30
30
|
font-size: 12px;
|
|
31
|
-
color: var(--eun-text-secondary, #
|
|
31
|
+
color: var(--eun-text-secondary, #666e8a);
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
.month-week {
|
|
@@ -51,7 +51,7 @@ const base = css `
|
|
|
51
51
|
.month-cell.outside {
|
|
52
52
|
background: color-mix(
|
|
53
53
|
in srgb,
|
|
54
|
-
var(--eun-text-secondary, #
|
|
54
|
+
var(--eun-text-secondary, #666e8a) 4%,
|
|
55
55
|
transparent
|
|
56
56
|
);
|
|
57
57
|
}
|
|
@@ -70,7 +70,7 @@ const base = css `
|
|
|
70
70
|
}
|
|
71
71
|
|
|
72
72
|
.month-cell.outside .month-cell-day {
|
|
73
|
-
color: var(--eun-text-secondary, #
|
|
73
|
+
color: var(--eun-text-secondary, #666e8a);
|
|
74
74
|
}
|
|
75
75
|
|
|
76
76
|
.month-cell-day.today {
|
|
@@ -87,7 +87,10 @@ const base = css `
|
|
|
87
87
|
|
|
88
88
|
.month-cell-day:focus-visible {
|
|
89
89
|
outline: 2px solid
|
|
90
|
-
var(
|
|
90
|
+
var(
|
|
91
|
+
--scheduler-focus-outline-color,
|
|
92
|
+
var(--scheduler-accent-color, var(--eun-color-primary-500, #3d6fff))
|
|
93
|
+
);
|
|
91
94
|
outline-offset: 2px;
|
|
92
95
|
}
|
|
93
96
|
|
|
@@ -108,7 +111,7 @@ const base = css `
|
|
|
108
111
|
padding: 1px 4px;
|
|
109
112
|
cursor: pointer;
|
|
110
113
|
font-size: 11px;
|
|
111
|
-
color: var(--eun-text-secondary, #
|
|
114
|
+
color: var(--eun-text-secondary, #666e8a);
|
|
112
115
|
z-index: 1;
|
|
113
116
|
}
|
|
114
117
|
|
|
@@ -119,7 +122,10 @@ const base = css `
|
|
|
119
122
|
|
|
120
123
|
.month-week-more:focus-visible {
|
|
121
124
|
outline: 2px solid
|
|
122
|
-
var(
|
|
125
|
+
var(
|
|
126
|
+
--scheduler-focus-outline-color,
|
|
127
|
+
var(--scheduler-accent-color, var(--eun-color-primary-500, #3d6fff))
|
|
128
|
+
);
|
|
123
129
|
outline-offset: -2px;
|
|
124
130
|
}
|
|
125
131
|
`;
|
|
@@ -13,11 +13,12 @@ export interface YearViewProps {
|
|
|
13
13
|
onMonthLabelClick: (month: Date) => void;
|
|
14
14
|
}
|
|
15
15
|
/**
|
|
16
|
-
* Renders the `year` view : the 12 months of the year
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
16
|
+
* Renders the `year` view : the 12 months of the year as mini-month grids,
|
|
17
|
+
* several per row from the `tablet` container width, each with its own
|
|
18
|
+
* weekday labels. Narrower, they stack in a single scrollable column of
|
|
19
|
+
* full-width grids, with a single weekday-label header (`position:
|
|
20
|
+
* sticky`, shared across every month rather than repeated 12 times)
|
|
21
|
+
* pinned at the top of that same scroll. Each day is
|
|
21
22
|
* marked with a plain dot when it has ≥1 event (not color-coded —
|
|
22
23
|
* illegible at this scale, unlike the month view's own real chips).
|
|
23
24
|
* Clicking a day switches to `day` view for that date ; clicking a month
|
|
@@ -3,11 +3,12 @@ import { classMap } from "lit/directives/class-map.js";
|
|
|
3
3
|
import { addDays, getCalendarMonthMatrix, isSameMonth, isToday, } from "../../../utils/date.utils.js";
|
|
4
4
|
import { eventsOnDay } from "./scheduler.utils.js";
|
|
5
5
|
/**
|
|
6
|
-
* Renders the `year` view : the 12 months of the year
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
6
|
+
* Renders the `year` view : the 12 months of the year as mini-month grids,
|
|
7
|
+
* several per row from the `tablet` container width, each with its own
|
|
8
|
+
* weekday labels. Narrower, they stack in a single scrollable column of
|
|
9
|
+
* full-width grids, with a single weekday-label header (`position:
|
|
10
|
+
* sticky`, shared across every month rather than repeated 12 times)
|
|
11
|
+
* pinned at the top of that same scroll. Each day is
|
|
11
12
|
* marked with a plain dot when it has ≥1 event (not color-coded —
|
|
12
13
|
* illegible at this scale, unlike the month view's own real chips).
|
|
13
14
|
* Clicking a day switches to `day` view for that date ; clicking a month
|
|
@@ -26,12 +27,12 @@ export function renderSchedulerYearView(props) {
|
|
|
26
27
|
<div class="year-weekday-header" role="row">
|
|
27
28
|
${weekdayLabels.map((label) => html `<span role="columnheader">${label}</span>`)}
|
|
28
29
|
</div>
|
|
29
|
-
${months.map((month) => renderYearMonth(month, weekStartsOn, locale, props))}
|
|
30
|
+
${months.map((month) => renderYearMonth(month, weekStartsOn, weekdayLabels, locale, props))}
|
|
30
31
|
</div>
|
|
31
32
|
`;
|
|
32
33
|
}
|
|
33
34
|
/** @private */
|
|
34
|
-
function renderYearMonth(month, weekStartsOn, locale, props) {
|
|
35
|
+
function renderYearMonth(month, weekStartsOn, weekdayLabels, locale, props) {
|
|
35
36
|
const weeks = getCalendarMonthMatrix(month, weekStartsOn);
|
|
36
37
|
return html `
|
|
37
38
|
<div class="year-month-section">
|
|
@@ -43,6 +44,9 @@ function renderYearMonth(month, weekStartsOn, locale, props) {
|
|
|
43
44
|
${month.toLocaleDateString(locale, { month: "long", year: "numeric" })}
|
|
44
45
|
</button>
|
|
45
46
|
<div class="year-month-grid" role="grid">
|
|
47
|
+
<div class="year-month-weekdays" role="row">
|
|
48
|
+
${weekdayLabels.map((label) => html `<span role="columnheader">${label}</span>`)}
|
|
49
|
+
</div>
|
|
46
50
|
${weeks.map((week) => html `
|
|
47
51
|
<div class="year-month-row" role="row">
|
|
48
52
|
${week.map((day) => renderYearDay(day, month, locale, props))}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { css } from "lit";
|
|
2
|
-
import { cssBelow } from "../../../utils/media.styles.js";
|
|
2
|
+
import { cssBelow, cssFrom } from "../../../utils/media.styles.js";
|
|
3
3
|
const base = css `
|
|
4
4
|
.year-scroll {
|
|
5
5
|
max-height: var(--scheduler-body-max-height, 640px);
|
|
@@ -31,7 +31,7 @@ const base = css `
|
|
|
31
31
|
padding: var(--eun-space-xs, 4px) var(--eun-space-s, 8px);
|
|
32
32
|
text-align: center;
|
|
33
33
|
font-size: 12px;
|
|
34
|
-
color: var(--eun-text-secondary, #
|
|
34
|
+
color: var(--eun-text-secondary, #666e8a);
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
.year-month-section {
|
|
@@ -72,6 +72,18 @@ const base = css `
|
|
|
72
72
|
grid-template-columns: repeat(7, 1fr);
|
|
73
73
|
}
|
|
74
74
|
|
|
75
|
+
.year-month-weekdays {
|
|
76
|
+
display: none;
|
|
77
|
+
grid-template-columns: repeat(7, 1fr);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.year-month-weekdays span {
|
|
81
|
+
padding: var(--eun-space-xs, 4px) 0;
|
|
82
|
+
text-align: center;
|
|
83
|
+
font-size: 11px;
|
|
84
|
+
color: var(--eun-text-secondary, #666e8a);
|
|
85
|
+
}
|
|
86
|
+
|
|
75
87
|
.year-day {
|
|
76
88
|
all: unset;
|
|
77
89
|
box-sizing: border-box;
|
|
@@ -111,7 +123,10 @@ const base = css `
|
|
|
111
123
|
|
|
112
124
|
.year-day:focus-visible {
|
|
113
125
|
outline: 2px solid
|
|
114
|
-
var(
|
|
126
|
+
var(
|
|
127
|
+
--scheduler-focus-outline-color,
|
|
128
|
+
var(--scheduler-accent-color, var(--eun-color-primary-500, #3d6fff))
|
|
129
|
+
);
|
|
115
130
|
outline-offset: 1px;
|
|
116
131
|
}
|
|
117
132
|
|
|
@@ -122,5 +137,44 @@ const base = css `
|
|
|
122
137
|
border-radius: 999px;
|
|
123
138
|
background: currentColor;
|
|
124
139
|
}
|
|
140
|
+
|
|
141
|
+
@container ${cssFrom("tablet")} {
|
|
142
|
+
.year-scroll {
|
|
143
|
+
display: grid;
|
|
144
|
+
grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
|
|
145
|
+
align-content: start;
|
|
146
|
+
gap: var(--eun-space-m, 16px) var(--eun-space-l, 24px);
|
|
147
|
+
padding: var(--eun-space-m, 16px);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
.year-weekday-header {
|
|
151
|
+
display: none;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
.year-month-section {
|
|
155
|
+
padding-bottom: 0;
|
|
156
|
+
border-bottom: none;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
.year-month-label {
|
|
160
|
+
position: static;
|
|
161
|
+
margin: 0 0 var(--eun-space-xs, 4px);
|
|
162
|
+
padding: var(--eun-space-xs, 4px) var(--eun-space-s, 8px);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
.year-month-weekdays {
|
|
166
|
+
display: grid;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
.year-day {
|
|
170
|
+
aspect-ratio: auto;
|
|
171
|
+
height: 32px;
|
|
172
|
+
font-size: 12px;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
.year-day-number {
|
|
176
|
+
width: 26px;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
125
179
|
`;
|
|
126
180
|
export const schedulerYearViewStyles = base;
|
|
@@ -3,15 +3,11 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export type EunomiaSchedulerView = "day" | "week" | "work-week" | "month" | "year";
|
|
5
5
|
/**
|
|
6
|
-
* An event's accent color, as a `#rrggbb` hex string
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* CSS whenever `color` matches one of their hex values exactly, so existing
|
|
12
|
-
* events keep rendering pixel-identically ; any other hex drives both the
|
|
13
|
-
* accent and tint shades from that single value instead (see
|
|
14
|
-
* `EunomiaSchedulerEvent`'s own doc comment).
|
|
6
|
+
* An event's accent color, as a `#rrggbb` hex string, which is what the
|
|
7
|
+
* editor saves. The six preset hex values (see `EVENT_COLOR_PRESETS` in
|
|
8
|
+
* `scheduler.utils.ts`) keep their own tuned two-tone shades, and their
|
|
9
|
+
* names (red/purple/yellow/blue/green/pink) are accepted as aliases. Any
|
|
10
|
+
* other hex drives both shades from that single value.
|
|
15
11
|
*/
|
|
16
12
|
export type EunomiaSchedulerEventColor = string;
|
|
17
13
|
/**
|