@eunomia/elements 1.0.0-beta.2 → 1.0.0-beta.4
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 +1 -1
- package/dist/cdn/components/chunks/chunk-2JLDJFYD.js +48 -0
- package/dist/cdn/components/chunks/chunk-4MXL6PZC.js +124 -0
- package/dist/cdn/components/chunks/{chunk-32KRPOPV.js → chunk-5XJGYXW7.js} +6 -6
- package/dist/cdn/components/chunks/{chunk-O2HNWH65.js → chunk-5XJLIHAU.js} +7 -7
- package/dist/cdn/components/chunks/{chunk-5GF2Q3NR.js → chunk-74AOAB4X.js} +1 -1
- package/dist/cdn/components/chunks/{chunk-WYMBUIKX.js → chunk-A6KGFALA.js} +4 -4
- package/dist/cdn/components/chunks/chunk-BMQOI7HX.js +371 -0
- package/dist/cdn/components/chunks/{chunk-LJYTHDZP.js → chunk-D2M4BV5Y.js} +6 -6
- package/dist/cdn/components/chunks/{chunk-NEYBPT3D.js → chunk-EJIX2D4Z.js} +2 -2
- package/dist/cdn/components/chunks/{chunk-BYBUXKXC.js → chunk-EOWBYZV7.js} +2 -2
- package/dist/cdn/components/chunks/chunk-EST3M4AO.js +1 -0
- package/dist/cdn/components/chunks/{chunk-AQQMW353.js → chunk-GSJEJLFA.js} +3 -3
- package/dist/cdn/components/chunks/chunk-GU6BVMFJ.js +1 -0
- package/dist/cdn/components/chunks/{chunk-5RCCZVFZ.js → chunk-IJ5WFMK4.js} +1 -1
- package/dist/cdn/components/chunks/{chunk-RWONCXTF.js → chunk-KVYUNKUO.js} +2 -2
- package/dist/cdn/components/chunks/chunk-LGLQ36QB.js +16 -0
- package/dist/cdn/components/chunks/{chunk-74HHV4CX.js → chunk-NHFWATVN.js} +2 -2
- package/dist/cdn/components/chunks/chunk-OAULRKHQ.js +38 -0
- package/dist/cdn/components/chunks/chunk-P32B7BFD.js +118 -0
- package/dist/cdn/components/chunks/{chunk-ZPFHTJSS.js → chunk-PCM7D3YF.js} +1 -1
- package/dist/cdn/components/chunks/{chunk-ABYEBP57.js → chunk-PED5ATYN.js} +11 -8
- package/dist/cdn/components/chunks/{chunk-ON42P6FI.js → chunk-RJCJXB7Y.js} +5 -5
- package/dist/cdn/components/chunks/{chunk-5C7YND22.js → chunk-S2UCEWNG.js} +8 -8
- package/dist/cdn/components/chunks/{chunk-7WTSHE7M.js → chunk-SIHZFOTK.js} +9 -9
- package/dist/cdn/components/chunks/{chunk-6UPI7GHJ.js → chunk-UAGCQF23.js} +7 -7
- package/dist/cdn/components/chunks/{chunk-6IILPCSQ.js → chunk-X2AUBZD2.js} +3 -3
- package/dist/cdn/components/chunks/chunk-YGUJJ25C.js +263 -0
- package/dist/cdn/components/chunks/chunk-YYCEPZUN.js +1 -0
- package/dist/cdn/components/eun-alert.js +65 -45
- package/dist/cdn/components/eun-animate.js +178 -2
- package/dist/cdn/components/eun-badge.js +1 -1
- package/dist/cdn/components/eun-breadcrumb-item.js +14 -10
- package/dist/cdn/components/eun-breadcrumb.js +11 -7
- package/dist/cdn/components/eun-button.js +1 -1
- package/dist/cdn/components/eun-calendar.js +16 -16
- package/dist/cdn/components/eun-card.js +29 -12
- 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 +3 -3
- package/dist/cdn/components/eun-checkbox.js +1 -1
- package/dist/cdn/components/eun-chip.js +45 -210
- package/dist/cdn/components/eun-collapse.js +20 -26
- package/dist/cdn/components/eun-color-picker.js +28 -28
- package/dist/cdn/components/eun-counter.js +11 -11
- package/dist/cdn/components/eun-date-picker.js +50 -50
- package/dist/cdn/components/eun-drawer.js +3 -3
- package/dist/cdn/components/eun-dropdown-button.js +1 -1
- package/dist/cdn/components/eun-dropdown-item.js +6 -6
- package/dist/cdn/components/eun-fab.js +31 -53
- package/dist/cdn/components/eun-icon.js +1 -1
- package/dist/cdn/components/eun-image-card.js +18 -11
- package/dist/cdn/components/eun-image-carousel.js +16 -16
- package/dist/cdn/components/eun-infinite-list.js +1 -1
- package/dist/cdn/components/eun-input-file.js +20 -20
- package/dist/cdn/components/eun-input-phone.js +14 -14
- package/dist/cdn/components/eun-input.js +1 -1
- package/dist/cdn/components/eun-label.js +4 -4
- package/dist/cdn/components/eun-link.js +29 -11
- package/dist/cdn/components/eun-loader.js +1 -1
- package/dist/cdn/components/eun-modal.js +6 -6
- package/dist/cdn/components/eun-pagination.js +3 -3
- package/dist/cdn/components/eun-password-strength.js +9 -6
- package/dist/cdn/components/eun-progress-bar.js +13 -13
- package/dist/cdn/components/eun-radio-card.js +2 -2
- package/dist/cdn/components/eun-radio-list.js +3 -3
- package/dist/cdn/components/eun-radio.js +1 -1
- package/dist/cdn/components/eun-scheduler-event-editor.js +2 -2
- package/dist/cdn/components/eun-scheduler-event.js +1 -1
- package/dist/cdn/components/eun-scheduler.js +10 -10
- package/dist/cdn/components/eun-search.js +7 -7
- package/dist/cdn/components/eun-select.js +39 -18
- package/dist/cdn/components/eun-sidebar.js +10 -10
- package/dist/cdn/components/eun-skeleton.js +1 -1
- package/dist/cdn/components/eun-slider.js +9 -9
- package/dist/cdn/components/eun-sliding-card.js +7 -10
- package/dist/cdn/components/eun-step.js +8 -8
- package/dist/cdn/components/eun-stepper.js +8 -8
- package/dist/cdn/components/eun-switch.js +10 -10
- package/dist/cdn/components/eun-tab-group.js +19 -11
- package/dist/cdn/components/eun-tab-panel.js +1 -1
- package/dist/cdn/components/eun-tab.js +1 -1
- package/dist/cdn/components/eun-table-action-bar.js +1 -1
- package/dist/cdn/components/eun-table-cell.js +1 -1
- package/dist/cdn/components/eun-table-column.js +1 -1
- package/dist/cdn/components/eun-table-header.js +1 -1
- package/dist/cdn/components/eun-table-item.js +1 -1
- package/dist/cdn/components/eun-table-skeleton-row.js +1 -1
- package/dist/cdn/components/eun-table.js +3 -3
- package/dist/cdn/components/eun-tag.js +34 -122
- package/dist/cdn/components/eun-textarea.js +28 -28
- package/dist/cdn/components/eun-time-picker.js +25 -25
- package/dist/cdn/components/eun-toast.js +40 -36
- package/dist/cdn/components/eun-toggle-group.js +199 -66
- package/dist/cdn/components/eun-toggle-item.js +42 -25
- package/dist/cdn/components/eun-toggle.js +13 -10
- package/dist/cdn/components/eun-toolbar.js +28 -19
- package/dist/cdn/components/eun-tooltip.js +122 -87
- package/dist/cdn/styles/eunomia-themes.css +1 -1
- package/dist/cdn/styles/themes/eunomia-theme.css +1 -1
- package/dist/cdn/styles/themes/eunomia-theme.scss +1 -0
- package/dist/cdn/styles/themes/mixins/eunomia-neutrals.mixin.scss +71 -0
- package/dist/cdn/styles/themes/prebuilt-themes/eunomia/eunomia-dark.mixin.scss +3 -13
- package/dist/cdn/styles/themes/prebuilt-themes/eunomia/eunomia.mixin.scss +3 -13
- package/dist/cdn/styles/themes/prebuilt-themes/eunomia/eunomia.theme.css +1 -1
- package/dist/cdn/styles/themes/prebuilt-themes/eunomia/eunomia.theme.scss +2 -0
- package/dist/cdn/styles/themes/prebuilt-themes/fire/eunomia-fire-dark.mixin.scss +3 -13
- package/dist/cdn/styles/themes/prebuilt-themes/fire/eunomia-fire.mixin.scss +3 -13
- package/dist/cdn/styles/themes/prebuilt-themes/fire/eunomia-fire.theme.css +1 -1
- package/dist/cdn/styles/themes/prebuilt-themes/fire/eunomia-fire.theme.scss +2 -0
- package/dist/cdn/styles/themes/prebuilt-themes/forest/eunomia-forest-dark.mixin.scss +3 -13
- package/dist/cdn/styles/themes/prebuilt-themes/forest/eunomia-forest.mixin.scss +3 -13
- package/dist/cdn/styles/themes/prebuilt-themes/forest/eunomia-forest.theme.css +1 -1
- package/dist/cdn/styles/themes/prebuilt-themes/forest/eunomia-forest.theme.scss +2 -0
- package/dist/cdn/styles/themes/prebuilt-themes/gold/eunomia-gold-dark.mixin.scss +3 -13
- package/dist/cdn/styles/themes/prebuilt-themes/gold/eunomia-gold.mixin.scss +3 -13
- package/dist/cdn/styles/themes/prebuilt-themes/gold/eunomia-gold.theme.css +1 -1
- package/dist/cdn/styles/themes/prebuilt-themes/gold/eunomia-gold.theme.scss +2 -0
- package/dist/cdn/styles/themes/prebuilt-themes/ocean/eunomia-ocean-dark.mixin.scss +3 -13
- package/dist/cdn/styles/themes/prebuilt-themes/ocean/eunomia-ocean.mixin.scss +3 -13
- package/dist/cdn/styles/themes/prebuilt-themes/ocean/eunomia-ocean.theme.css +1 -1
- package/dist/cdn/styles/themes/prebuilt-themes/ocean/eunomia-ocean.theme.scss +2 -0
- package/dist/cdn/styles/themes/prebuilt-themes/salmon/eunomia-salmon-dark.mixin.scss +3 -13
- package/dist/cdn/styles/themes/prebuilt-themes/salmon/eunomia-salmon.mixin.scss +3 -13
- package/dist/cdn/styles/themes/prebuilt-themes/salmon/eunomia-salmon.theme.css +1 -1
- package/dist/cdn/styles/themes/prebuilt-themes/salmon/eunomia-salmon.theme.scss +2 -0
- package/dist/cdn/styles/themes/prebuilt-themes/violet/eunomia-violet-dark.mixin.scss +3 -13
- package/dist/cdn/styles/themes/prebuilt-themes/violet/eunomia-violet.mixin.scss +3 -13
- package/dist/cdn/styles/themes/prebuilt-themes/violet/eunomia-violet.theme.css +1 -1
- package/dist/cdn/styles/themes/prebuilt-themes/violet/eunomia-violet.theme.scss +2 -0
- package/dist/cdn/styles/tools/indexes/eunomia-tools.index.scss +1 -0
- package/dist/cdn/styles/tools/mixins/settings/eunomia-alpha.mixin.scss +39 -0
- package/dist/cdn/styles/tools/mixins/settings/eunomia-border.mixin.scss +3 -3
- package/dist/cdn/styles/tools/mixins/settings/eunomia-font.mixin.scss +12 -12
- package/dist/cdn/styles/tools/mixins/settings/eunomia-radius.mixin.scss +4 -4
- package/dist/components/action/button/button.d.ts +7 -6
- package/dist/components/action/button/button.js +7 -6
- package/dist/components/action/button/button.styles.js +143 -373
- package/dist/components/action/dropdown-button/dropdown-button.d.ts +7 -0
- package/dist/components/action/dropdown-button/dropdown-button.js +11 -0
- package/dist/components/action/dropdown-button/dropdown-button.styles.js +8 -8
- package/dist/components/action/dropdown-button/dropdown-item.styles.js +6 -6
- package/dist/components/action/fab/fab.d.ts +3 -1
- package/dist/components/action/fab/fab.js +3 -1
- package/dist/components/action/fab/fab.styles.js +26 -49
- package/dist/components/action/link/link.d.ts +50 -0
- package/dist/components/action/link/link.js +69 -1
- package/dist/components/action/link/link.styles.js +19 -2
- package/dist/components/action/shared-styles/button-palette.styles.d.ts +27 -0
- package/dist/components/action/shared-styles/button-palette.styles.js +151 -0
- package/dist/components/action/toggle/toggle-group.d.ts +41 -7
- package/dist/components/action/toggle/toggle-group.js +162 -46
- package/dist/components/action/toggle/toggle-group.styles.d.ts +6 -5
- package/dist/components/action/toggle/toggle-group.styles.js +152 -35
- package/dist/components/action/toggle/toggle-item.styles.js +38 -21
- package/dist/components/action/toggle/toggle.d.ts +1 -1
- package/dist/components/action/toggle/toggle.js +2 -2
- package/dist/components/action/toggle/toggle.styles.d.ts +2 -2
- package/dist/components/action/toggle/toggle.styles.js +13 -10
- package/dist/components/alert/alert/alert.d.ts +4 -3
- package/dist/components/alert/alert/alert.js +4 -3
- package/dist/components/alert/alert/alert.styles.js +57 -36
- package/dist/components/alert/drawer/drawer.styles.js +3 -3
- package/dist/components/alert/modal/modal.styles.js +6 -6
- package/dist/components/alert/toast/toast.d.ts +4 -3
- package/dist/components/alert/toast/toast.js +4 -3
- package/dist/components/alert/toast/toast.styles.js +41 -36
- package/dist/components/content/badge/badge.styles.js +1 -1
- package/dist/components/content/card/card.d.ts +4 -4
- package/dist/components/content/card/card.js +4 -4
- package/dist/components/content/card/card.styles.js +27 -10
- package/dist/components/content/card/image-card.d.ts +1 -1
- package/dist/components/content/card/image-card.js +1 -1
- package/dist/components/content/card/image-card.styles.js +17 -10
- package/dist/components/content/card/sliding-card.styles.js +3 -6
- package/dist/components/content/chip/chip.d.ts +16 -7
- package/dist/components/content/chip/chip.js +18 -6
- package/dist/components/content/chip/chip.styles.d.ts +1 -1
- package/dist/components/content/chip/chip.styles.js +43 -210
- package/dist/components/content/collapse/collapse.styles.js +10 -16
- package/dist/components/content/icon/icon.d.ts +48 -5
- package/dist/components/content/icon/icon.js +92 -20
- package/dist/components/content/icon/icon.style.js +1 -1
- package/dist/components/content/image-carousel/image-carousel.styles.js +14 -14
- package/dist/components/content/password-strength/password-strength.styles.js +7 -4
- package/dist/components/content/progress-bar/progress-bar.styles.js +9 -9
- package/dist/components/content/shared-styles/tone-surface.styles.d.ts +31 -0
- package/dist/components/content/shared-styles/tone-surface.styles.js +149 -0
- package/dist/components/content/tag/tag.d.ts +16 -6
- package/dist/components/content/tag/tag.js +19 -6
- package/dist/components/content/tag/tag.styles.d.ts +1 -1
- package/dist/components/content/tag/tag.styles.js +40 -121
- package/dist/components/content/tooltip/tooltip.d.ts +15 -4
- package/dist/components/content/tooltip/tooltip.js +21 -4
- package/dist/components/content/tooltip/tooltip.styles.js +115 -79
- package/dist/components/form/checkbox/check-card.styles.js +2 -2
- package/dist/components/form/checkbox/checkbox-list.d.ts +1 -1
- package/dist/components/form/checkbox/checkbox-list.js +1 -1
- package/dist/components/form/checkbox/checkbox.d.ts +1 -1
- package/dist/components/form/checkbox/checkbox.styles.js +6 -6
- package/dist/components/form/color-picker/color-picker.d.ts +1 -1
- package/dist/components/form/color-picker/color-picker.js +9 -7
- package/dist/components/form/color-picker/color-picker.styles.js +7 -7
- package/dist/components/form/counter/counter.d.ts +1 -1
- package/dist/components/form/counter/counter.js +3 -3
- package/dist/components/form/counter/counter.styles.js +7 -7
- package/dist/components/form/date-picker/date-picker-day-grid.styles.js +2 -2
- package/dist/components/form/date-picker/date-picker-grid.styles.js +15 -15
- package/dist/components/form/date-picker/date-picker-month-grid.styles.js +1 -1
- package/dist/components/form/date-picker/date-picker-year-grid.styles.js +1 -1
- package/dist/components/form/date-picker/date-picker.d.ts +1 -1
- package/dist/components/form/date-picker/date-picker.js +3 -3
- package/dist/components/form/date-picker/date-picker.styles.js +12 -12
- package/dist/components/form/input/input.d.ts +1 -1
- package/dist/components/form/input/input.js +2 -2
- package/dist/components/form/input-file/input-file.d.ts +1 -1
- package/dist/components/form/input-file/input-file.js +5 -5
- package/dist/components/form/input-file/input-file.styles.js +9 -9
- package/dist/components/form/input-phone/input-phone.d.ts +1 -1
- package/dist/components/form/input-phone/input-phone.js +3 -3
- package/dist/components/form/input-phone/input-phone.styles.js +7 -7
- package/dist/components/form/label/label.styles.js +4 -4
- package/dist/components/form/radio/radio-card.styles.js +1 -1
- package/dist/components/form/radio/radio-list.d.ts +1 -1
- package/dist/components/form/radio/radio-list.js +2 -2
- package/dist/components/form/radio/radio.d.ts +1 -1
- package/dist/components/form/radio/radio.styles.js +2 -2
- package/dist/components/form/search/search.styles.js +6 -6
- package/dist/components/form/select/select.d.ts +17 -1
- package/dist/components/form/select/select.js +28 -5
- package/dist/components/form/select/select.styles.js +16 -5
- package/dist/components/form/shared-styles/card.styles.js +1 -1
- package/dist/components/form/shared-styles/field.styles.js +7 -7
- package/dist/components/form/shared-styles/form-labels.styles.js +1 -1
- package/dist/components/form/shared-styles/listbox.styles.js +6 -6
- package/dist/components/form/slider/slider.d.ts +1 -1
- package/dist/components/form/slider/slider.js +2 -2
- package/dist/components/form/slider/slider.styles.js +6 -6
- package/dist/components/form/switch/switch.d.ts +1 -1
- package/dist/components/form/switch/switch.styles.js +8 -8
- package/dist/components/form/textarea/textarea.d.ts +1 -1
- package/dist/components/form/textarea/textarea.js +4 -4
- package/dist/components/form/textarea/textarea.styles.js +6 -6
- package/dist/components/form/time-picker/time-picker-columns.styles.js +6 -6
- package/dist/components/form/time-picker/time-picker-list.styles.js +2 -2
- package/dist/components/form/time-picker/time-picker.d.ts +1 -1
- package/dist/components/form/time-picker/time-picker.js +3 -3
- package/dist/components/form/time-picker/time-picker.styles.js +8 -8
- package/dist/components/layout/animate/animate.d.ts +40 -5
- package/dist/components/layout/animate/animate.js +30 -11
- package/dist/components/layout/animate/animate.styles.d.ts +1 -1
- package/dist/components/layout/animate/animate.styles.js +191 -1
- package/dist/components/loader/loader/loader.styles.js +2 -2
- package/dist/components/loader/skeleton/skeleton.styles.js +8 -5
- package/dist/components/navigation/breadcrumb/breadcrumb-item.d.ts +7 -0
- package/dist/components/navigation/breadcrumb/breadcrumb-item.js +15 -1
- package/dist/components/navigation/breadcrumb/breadcrumb-item.styles.js +3 -3
- package/dist/components/navigation/breadcrumb/breadcrumb.d.ts +1 -0
- package/dist/components/navigation/breadcrumb/breadcrumb.js +7 -1
- package/dist/components/navigation/breadcrumb/breadcrumb.styles.js +3 -3
- package/dist/components/navigation/carousel/carousel.d.ts +40 -6
- package/dist/components/navigation/carousel/carousel.js +61 -12
- package/dist/components/navigation/carousel/carousel.styles.js +20 -8
- package/dist/components/navigation/pagination/pagination.styles.js +3 -3
- package/dist/components/navigation/sidebar/sidebar.styles.js +9 -9
- package/dist/components/navigation/stepper/step.styles.js +8 -8
- package/dist/components/navigation/stepper/stepper.styles.js +8 -8
- package/dist/components/navigation/tabs/tab/tab.styles.js +5 -5
- package/dist/components/navigation/tabs/tab-group/tab-group.d.ts +9 -0
- package/dist/components/navigation/tabs/tab-group/tab-group.js +19 -2
- package/dist/components/navigation/tabs/tab-group/tab-group.styles.js +12 -4
- package/dist/components/navigation/tabs/tab-panel/tab-panel.styles.js +1 -1
- package/dist/components/navigation/toolbar/toolbar.d.ts +24 -0
- package/dist/components/navigation/toolbar/toolbar.js +30 -2
- package/dist/components/navigation/toolbar/toolbar.styles.js +20 -10
- package/dist/events/change.event.d.ts +13 -1
- package/dist/events/change.event.js +2 -1
- package/dist/features/scheduler/calendar/calendar.js +1 -1
- package/dist/features/scheduler/calendar/calendar.styles.js +3 -3
- package/dist/features/scheduler/scheduler/scheduler.styles.js +2 -2
- package/dist/features/scheduler/scheduler-event/scheduler-event.styles.js +2 -2
- package/dist/features/scheduler/scheduler-event-editor/scheduler-event-editor.styles.js +2 -2
- package/dist/features/scheduler/shared/scheduler-event-popover.styles.js +4 -4
- package/dist/features/scheduler/shared/scheduler-hour-grid.styles.js +1 -1
- package/dist/features/scheduler/shared/scheduler-month-view.styles.js +1 -1
- package/dist/features/scheduler/shared/scheduler-year-view.styles.js +1 -1
- package/dist/features/table/native-table.css +11 -11
- package/dist/features/table/table/table.styles.js +2 -2
- package/dist/features/table/table-action-bar/table-action-bar.styles.js +2 -2
- package/dist/features/table/table-cell/table-cell.styles.js +2 -2
- package/dist/features/table/table-column/table-column.styles.js +3 -3
- package/dist/features/table/table-header/table-header.styles.js +4 -4
- package/dist/features/table/table-item/table-item.styles.js +6 -6
- package/dist/features/table/table-skeleton-row/table-skeleton-row.styles.js +1 -1
- package/dist/index.d.ts +5 -5
- package/dist/index.js +6 -3
- package/dist/jsx.d.ts +18 -5
- package/dist/mixins/button.mixin.d.ts +1 -0
- package/dist/mixins/button.mixin.js +10 -0
- package/dist/mixins/check.mixin.d.ts +1 -1
- package/dist/mixins/check.mixin.js +6 -2
- package/dist/mixins/editable.mixin.d.ts +1 -1
- package/dist/mixins/form.mixin.d.ts +9 -1
- package/dist/mixins/form.mixin.js +110 -14
- package/dist/mixins/overflow-navigation.mixin.js +2 -1
- package/dist/mixins/radio.mixin.d.ts +1 -1
- package/dist/mixins/radio.mixin.js +6 -2
- package/dist/mixins/validators.mixin.d.ts +9 -3
- package/dist/ssr/animate-ssr.css +149 -0
- package/dist/ssr/overlay-ssr.css +57 -0
- package/dist/ssr/sidebar-ssr.css +57 -0
- package/dist/ssr/toolbar-ssr.css +41 -0
- package/dist/utils/rich-text.utils.d.ts +33 -0
- package/dist/utils/rich-text.utils.js +140 -49
- package/dist/utils/theme-generator.utils.d.ts +24 -3
- package/dist/utils/theme-generator.utils.js +66 -21
- package/package.json +14 -3
- package/styles/themes/eunomia-theme.scss +1 -0
- package/styles/themes/mixins/eunomia-neutrals.mixin.scss +71 -0
- package/styles/themes/prebuilt-themes/eunomia/eunomia-dark.mixin.scss +3 -13
- package/styles/themes/prebuilt-themes/eunomia/eunomia.mixin.scss +3 -13
- package/styles/themes/prebuilt-themes/eunomia/eunomia.theme.scss +2 -0
- package/styles/themes/prebuilt-themes/fire/eunomia-fire-dark.mixin.scss +3 -13
- package/styles/themes/prebuilt-themes/fire/eunomia-fire.mixin.scss +3 -13
- package/styles/themes/prebuilt-themes/fire/eunomia-fire.theme.scss +2 -0
- package/styles/themes/prebuilt-themes/forest/eunomia-forest-dark.mixin.scss +3 -13
- package/styles/themes/prebuilt-themes/forest/eunomia-forest.mixin.scss +3 -13
- package/styles/themes/prebuilt-themes/forest/eunomia-forest.theme.scss +2 -0
- package/styles/themes/prebuilt-themes/gold/eunomia-gold-dark.mixin.scss +3 -13
- package/styles/themes/prebuilt-themes/gold/eunomia-gold.mixin.scss +3 -13
- package/styles/themes/prebuilt-themes/gold/eunomia-gold.theme.scss +2 -0
- package/styles/themes/prebuilt-themes/ocean/eunomia-ocean-dark.mixin.scss +3 -13
- package/styles/themes/prebuilt-themes/ocean/eunomia-ocean.mixin.scss +3 -13
- package/styles/themes/prebuilt-themes/ocean/eunomia-ocean.theme.scss +2 -0
- package/styles/themes/prebuilt-themes/salmon/eunomia-salmon-dark.mixin.scss +3 -13
- package/styles/themes/prebuilt-themes/salmon/eunomia-salmon.mixin.scss +3 -13
- package/styles/themes/prebuilt-themes/salmon/eunomia-salmon.theme.scss +2 -0
- package/styles/themes/prebuilt-themes/violet/eunomia-violet-dark.mixin.scss +3 -13
- package/styles/themes/prebuilt-themes/violet/eunomia-violet.mixin.scss +3 -13
- package/styles/themes/prebuilt-themes/violet/eunomia-violet.theme.scss +2 -0
- package/styles/tools/indexes/eunomia-tools.index.scss +1 -0
- package/styles/tools/mixins/settings/eunomia-alpha.mixin.scss +39 -0
- package/styles/tools/mixins/settings/eunomia-border.mixin.scss +3 -3
- package/styles/tools/mixins/settings/eunomia-font.mixin.scss +12 -12
- package/styles/tools/mixins/settings/eunomia-radius.mixin.scss +4 -4
- package/dist/cdn/components/chunks/chunk-27Q2SLRY.js +0 -603
- package/dist/cdn/components/chunks/chunk-2IQUMAMI.js +0 -38
- package/dist/cdn/components/chunks/chunk-5TH3P53V.js +0 -16
- package/dist/cdn/components/chunks/chunk-7Q6AHVI5.js +0 -1
- package/dist/cdn/components/chunks/chunk-DENMN3WH.js +0 -48
- package/dist/cdn/components/chunks/chunk-MBF52GEL.js +0 -1
- package/dist/cdn/components/chunks/chunk-ONYUXQV2.js +0 -1
- package/dist/cdn/components/chunks/chunk-ZKPCO5RB.js +0 -262
- package/dist/components/layout/animate/animate-ssr.css +0 -64
|
@@ -146,6 +146,39 @@ export declare function renderInline(nodes: InlineNode[]): TemplateResult;
|
|
|
146
146
|
* @returns the formatted template.
|
|
147
147
|
*/
|
|
148
148
|
export declare function formatRichText(text: string): TemplateResult;
|
|
149
|
+
/**
|
|
150
|
+
* Strips every Markdown-lite marker from a value and returns what a reader
|
|
151
|
+
* actually sees, as a plain string : the `[align:...]` directive, `**`,
|
|
152
|
+
* `{color=name}`, link URLs and so on are removed (a link keeps its label),
|
|
153
|
+
* and one newline is kept between lines. Needs no DOM, so it runs anywhere,
|
|
154
|
+
* including on the server, unlike {@link formatRichText}.
|
|
155
|
+
*
|
|
156
|
+
* Always consistent with {@link getPlainTextLength} :
|
|
157
|
+
* `toPlainText(text).length === getPlainTextLength(text)`. Handy for
|
|
158
|
+
* structured data (JSON-LD), meta descriptions, search indexes or
|
|
159
|
+
* notifications.
|
|
160
|
+
*
|
|
161
|
+
* @param text the raw Markdown-lite string.
|
|
162
|
+
* @returns the plain text.
|
|
163
|
+
*/
|
|
164
|
+
export declare function toPlainText(text: string): string;
|
|
165
|
+
/**
|
|
166
|
+
* Converts a Markdown-lite string into an HTML string, with the same markup
|
|
167
|
+
* as {@link formatRichText} (`<p>`, `<ul>`, `<strong>`, ...). Needs no DOM
|
|
168
|
+
* and no Lit, so it fits server rendering (a Next.js Server Component, an
|
|
169
|
+
* email, an RSS feed) where {@link formatRichText}'s template can't be used.
|
|
170
|
+
*
|
|
171
|
+
* Every piece of text and every attribute is escaped, and a link whose URL
|
|
172
|
+
* uses anything other than a relative path, a fragment, `http`, `https`,
|
|
173
|
+
* `mailto` or `tel` (such as `javascript:`) is rendered as its plain label,
|
|
174
|
+
* so the result is safe to inject with `innerHTML` or React's
|
|
175
|
+
* `dangerouslySetInnerHTML`. The `[align:...]` directive is stripped, read
|
|
176
|
+
* it with {@link splitAlign} if you need it.
|
|
177
|
+
*
|
|
178
|
+
* @param text the raw Markdown-lite string.
|
|
179
|
+
* @returns the HTML string.
|
|
180
|
+
*/
|
|
181
|
+
export declare function toHtml(text: string): string;
|
|
149
182
|
/**
|
|
150
183
|
* Populates a contenteditable root with the given Markdown-lite value,
|
|
151
184
|
* replacing its entire content — used both for the `formatting` toolbar's
|
|
@@ -126,15 +126,6 @@ export function parseInlineNodes(text) {
|
|
|
126
126
|
continue;
|
|
127
127
|
}
|
|
128
128
|
}
|
|
129
|
-
// `***text***` : bold and italic together produce adjacent `**`+`*`
|
|
130
|
-
// delimiters at both ends (from nesting `<strong><em>`/`</em></strong>`),
|
|
131
|
-
// which the plain `**` check below can't tell apart from "close bold,
|
|
132
|
-
// then a stray, unmatched italic `*`" — it greedily consumes the first
|
|
133
|
-
// two of the three as bold's own closer, leaving the third orphaned
|
|
134
|
-
// with no closer of its own within the once-was-italic content, and
|
|
135
|
-
// the italic wrapping is silently lost on reparse. Handling the
|
|
136
|
-
// three-character run as one atomic unit first — same convention real
|
|
137
|
-
// Markdown uses for `***bold italic***` — avoids that ambiguity.
|
|
138
129
|
if (text.startsWith("***", i)) {
|
|
139
130
|
const closeIndex = text.indexOf("***", i + 3);
|
|
140
131
|
if (closeIndex !== -1) {
|
|
@@ -266,6 +257,39 @@ function renderInlineNode(node) {
|
|
|
266
257
|
return html `<a href=${node.href}>${renderInline(node.children)}</a>`;
|
|
267
258
|
}
|
|
268
259
|
}
|
|
260
|
+
/**
|
|
261
|
+
* Splits a Markdown-lite body (without its `[align:...]` directive) into
|
|
262
|
+
* blocks : consecutive `- ` lines become one list, other non-empty lines
|
|
263
|
+
* become paragraphs, and empty lines are dropped. Shared by every output
|
|
264
|
+
* format ({@link formatRichText}, {@link toHtml}, {@link toPlainText}) so
|
|
265
|
+
* they can never disagree on what counts as a paragraph or a list.
|
|
266
|
+
*
|
|
267
|
+
* @param body the Markdown-lite body.
|
|
268
|
+
* @returns the blocks, in order.
|
|
269
|
+
*/
|
|
270
|
+
function splitBlocks(body) {
|
|
271
|
+
const blocks = [];
|
|
272
|
+
let list = [];
|
|
273
|
+
const flushList = () => {
|
|
274
|
+
if (list.length) {
|
|
275
|
+
blocks.push({ type: "list", items: list });
|
|
276
|
+
list = [];
|
|
277
|
+
}
|
|
278
|
+
};
|
|
279
|
+
body.split("\n").forEach((line) => {
|
|
280
|
+
const trimmed = line.trim();
|
|
281
|
+
if (trimmed.startsWith("- ")) {
|
|
282
|
+
list.push(trimmed.slice(2));
|
|
283
|
+
return;
|
|
284
|
+
}
|
|
285
|
+
flushList();
|
|
286
|
+
if (trimmed) {
|
|
287
|
+
blocks.push({ type: "paragraph", text: trimmed });
|
|
288
|
+
}
|
|
289
|
+
});
|
|
290
|
+
flushList();
|
|
291
|
+
return blocks;
|
|
292
|
+
}
|
|
269
293
|
/**
|
|
270
294
|
* Converts a multi-line Markdown-lite string into a Lit template — see
|
|
271
295
|
* {@link parseInlineNodes} for the supported inline syntax.
|
|
@@ -284,30 +308,115 @@ function renderInlineNode(node) {
|
|
|
284
308
|
*/
|
|
285
309
|
export function formatRichText(text) {
|
|
286
310
|
const { body } = splitAlign(text);
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
311
|
+
return html `${splitBlocks(body).map((block) => block.type === "list"
|
|
312
|
+
? html `<ul>
|
|
313
|
+
${block.items.map((item) => html `<li>${renderInline(parseInlineNodes(item))}</li>`)}
|
|
314
|
+
</ul>`
|
|
315
|
+
: html `<p>${renderInline(parseInlineNodes(block.text))}</p>`)}`;
|
|
316
|
+
}
|
|
317
|
+
function inlineToPlainText(nodes) {
|
|
318
|
+
return nodes
|
|
319
|
+
.map((node) => node.type === "text" ? node.value : inlineToPlainText(node.children))
|
|
320
|
+
.join("");
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Strips every Markdown-lite marker from a value and returns what a reader
|
|
324
|
+
* actually sees, as a plain string : the `[align:...]` directive, `**`,
|
|
325
|
+
* `{color=name}`, link URLs and so on are removed (a link keeps its label),
|
|
326
|
+
* and one newline is kept between lines. Needs no DOM, so it runs anywhere,
|
|
327
|
+
* including on the server, unlike {@link formatRichText}.
|
|
328
|
+
*
|
|
329
|
+
* Always consistent with {@link getPlainTextLength} :
|
|
330
|
+
* `toPlainText(text).length === getPlainTextLength(text)`. Handy for
|
|
331
|
+
* structured data (JSON-LD), meta descriptions, search indexes or
|
|
332
|
+
* notifications.
|
|
333
|
+
*
|
|
334
|
+
* @param text the raw Markdown-lite string.
|
|
335
|
+
* @returns the plain text.
|
|
336
|
+
*/
|
|
337
|
+
export function toPlainText(text) {
|
|
338
|
+
const { body } = splitAlign(text);
|
|
339
|
+
const lines = body.length ? body.split("\n") : [""];
|
|
340
|
+
return lines
|
|
341
|
+
.map((line) => inlineToPlainText(parseInlineNodes(line)))
|
|
342
|
+
.join("\n");
|
|
343
|
+
}
|
|
344
|
+
const HTML_ESCAPES = {
|
|
345
|
+
"&": "&",
|
|
346
|
+
"<": "<",
|
|
347
|
+
">": ">",
|
|
348
|
+
'"': """,
|
|
349
|
+
"'": "'",
|
|
350
|
+
};
|
|
351
|
+
function escapeHtml(value) {
|
|
352
|
+
return value.replace(/[&<>"']/g, (char) => HTML_ESCAPES[char]);
|
|
353
|
+
}
|
|
354
|
+
const SAFE_URL_SCHEMES = new Set(["http:", "https:", "mailto:", "tel:"]);
|
|
355
|
+
/**
|
|
356
|
+
* Whether a link destination is safe to put in an `href` : relative URLs,
|
|
357
|
+
* fragments and the `http`, `https`, `mailto` and `tel` schemes. Anything
|
|
358
|
+
* else (`javascript:`, `data:`, ...) is refused.
|
|
359
|
+
*
|
|
360
|
+
* @param href the raw destination.
|
|
361
|
+
* @returns `true` when it can be emitted as an `href`.
|
|
362
|
+
*/
|
|
363
|
+
function isSafeHref(href) {
|
|
364
|
+
const normalized = href.replace(/[\u0000-\u0020]/g, "");
|
|
365
|
+
const scheme = /^([a-z][a-z0-9+.-]*:)/i.exec(normalized);
|
|
366
|
+
return !scheme || SAFE_URL_SCHEMES.has(scheme[1].toLowerCase());
|
|
367
|
+
}
|
|
368
|
+
function inlineToHtml(nodes) {
|
|
369
|
+
return nodes.map(inlineNodeToHtml).join("");
|
|
370
|
+
}
|
|
371
|
+
function inlineNodeToHtml(node) {
|
|
372
|
+
switch (node.type) {
|
|
373
|
+
case "text":
|
|
374
|
+
return escapeHtml(node.value);
|
|
375
|
+
case "bold":
|
|
376
|
+
return `<strong>${inlineToHtml(node.children)}</strong>`;
|
|
377
|
+
case "italic":
|
|
378
|
+
return `<em>${inlineToHtml(node.children)}</em>`;
|
|
379
|
+
case "underline":
|
|
380
|
+
return `<u>${inlineToHtml(node.children)}</u>`;
|
|
381
|
+
case "color": {
|
|
382
|
+
const color = findRichTextColor(node.color);
|
|
383
|
+
return `<span data-color="${escapeHtml(node.color)}" style="color: ${color?.text ?? "inherit"}">${inlineToHtml(node.children)}</span>`;
|
|
303
384
|
}
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
385
|
+
case "highlight": {
|
|
386
|
+
const color = findRichTextColor(node.color);
|
|
387
|
+
return `<span data-highlight="${escapeHtml(node.color)}" style="background-color: ${color?.highlight ?? "transparent"}">${inlineToHtml(node.children)}</span>`;
|
|
307
388
|
}
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
389
|
+
case "link":
|
|
390
|
+
return isSafeHref(node.href)
|
|
391
|
+
? `<a href="${escapeHtml(node.href)}">${inlineToHtml(node.children)}</a>`
|
|
392
|
+
: inlineToHtml(node.children);
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
/**
|
|
396
|
+
* Converts a Markdown-lite string into an HTML string, with the same markup
|
|
397
|
+
* as {@link formatRichText} (`<p>`, `<ul>`, `<strong>`, ...). Needs no DOM
|
|
398
|
+
* and no Lit, so it fits server rendering (a Next.js Server Component, an
|
|
399
|
+
* email, an RSS feed) where {@link formatRichText}'s template can't be used.
|
|
400
|
+
*
|
|
401
|
+
* Every piece of text and every attribute is escaped, and a link whose URL
|
|
402
|
+
* uses anything other than a relative path, a fragment, `http`, `https`,
|
|
403
|
+
* `mailto` or `tel` (such as `javascript:`) is rendered as its plain label,
|
|
404
|
+
* so the result is safe to inject with `innerHTML` or React's
|
|
405
|
+
* `dangerouslySetInnerHTML`. The `[align:...]` directive is stripped, read
|
|
406
|
+
* it with {@link splitAlign} if you need it.
|
|
407
|
+
*
|
|
408
|
+
* @param text the raw Markdown-lite string.
|
|
409
|
+
* @returns the HTML string.
|
|
410
|
+
*/
|
|
411
|
+
export function toHtml(text) {
|
|
412
|
+
const { body } = splitAlign(text);
|
|
413
|
+
return splitBlocks(body)
|
|
414
|
+
.map((block) => block.type === "list"
|
|
415
|
+
? `<ul>${block.items
|
|
416
|
+
.map((item) => `<li>${inlineToHtml(parseInlineNodes(item))}</li>`)
|
|
417
|
+
.join("")}</ul>`
|
|
418
|
+
: `<p>${inlineToHtml(parseInlineNodes(block.text))}</p>`)
|
|
419
|
+
.join("");
|
|
311
420
|
}
|
|
312
421
|
/**
|
|
313
422
|
* Builds one `<p>` per line of `body`, each with its inline Markdown-lite
|
|
@@ -351,13 +460,6 @@ function buildParagraphs(body) {
|
|
|
351
460
|
render(html `${lines.map((line) => html `<p>${renderInline(parseInlineNodes(line))}</p>`)}`, scratch);
|
|
352
461
|
stripComments(scratch);
|
|
353
462
|
const paragraphs = Array.from(scratch.children);
|
|
354
|
-
// A genuinely empty <p> (an empty line, most commonly the sole paragraph
|
|
355
|
-
// of an otherwise-empty field) has no content a browser can anchor a
|
|
356
|
-
// caret inside — clicking into it then often places the caret at the
|
|
357
|
-
// *root* level instead, right before the <p>, so anything typed lands
|
|
358
|
-
// there as a stray text node the block-based serializer never sees
|
|
359
|
-
// (value silently stays empty forever). A <br> gives every empty
|
|
360
|
-
// paragraph a real caret position of its own.
|
|
361
463
|
paragraphs.forEach((paragraph) => {
|
|
362
464
|
if (!paragraph.hasChildNodes()) {
|
|
363
465
|
paragraph.appendChild(document.createElement("br"));
|
|
@@ -394,20 +496,9 @@ const INLINE_TAG_MARKERS = {
|
|
|
394
496
|
};
|
|
395
497
|
function serializeInlineNode(node) {
|
|
396
498
|
if (node.nodeType === Node.TEXT_NODE) {
|
|
397
|
-
// U+200B (zero-width space) : the textarea's own toolbar uses it as an
|
|
398
|
-
// invisible caret anchor for a "pending" mark toggled with nothing
|
|
399
|
-
// selected (see textarea.ts's `PENDING_CARET_TEXT`) ; a real character
|
|
400
|
-
// a browser can place a caret next to inside an otherwise-empty inline
|
|
401
|
-
// element, but never meant to be real content, so it never survives
|
|
402
|
-
// into `value`.
|
|
403
499
|
return (node.textContent ?? "").replace(/\u200B/g, "");
|
|
404
500
|
}
|
|
405
501
|
if (node.nodeName === "BR") {
|
|
406
|
-
// The editor only ever inserts a `<br>` as an empty paragraph's sole
|
|
407
|
-
// child (so it stays focusable/visible) — never as a mid-paragraph soft
|
|
408
|
-
// break — so it always serializes to nothing, not a newline (block
|
|
409
|
-
// boundaries already produce one `\n` per paragraph in
|
|
410
|
-
// `serializeEditableRoot`).
|
|
411
502
|
return "";
|
|
412
503
|
}
|
|
413
504
|
if (!(node instanceof HTMLElement)) {
|
|
@@ -5,11 +5,12 @@
|
|
|
5
5
|
* theme" widget run; see Theming > Custom theme for how it works and why
|
|
6
6
|
* each step is shaped the way it is.
|
|
7
7
|
*
|
|
8
|
-
* Only `buildPalette`, `buildTints`,
|
|
9
|
-
* types their signatures need) are exported
|
|
8
|
+
* Only `buildPalette`, `buildTints`, `initializeTheme`, and
|
|
9
|
+
* `buildThemeCss` (plus the types their signatures need) are exported
|
|
10
|
+
* from `index.ts`. Everything
|
|
10
11
|
* else below, the raw color math, the shade/tint step definitions, is
|
|
11
12
|
* kept file-private on purpose: none of it is meant to be reached on its
|
|
12
|
-
* own, it exists to be composed by those
|
|
13
|
+
* own, it exists to be composed by those four, and every extra export
|
|
13
14
|
* is a promise to a consumer that constrains how this file can change
|
|
14
15
|
* later. If a real need for one of these on its own ever comes up, it's
|
|
15
16
|
* a one-line change to export it.
|
|
@@ -60,6 +61,26 @@ export declare function buildTints(primaryHex: EunomiaHexColor, isDark: boolean)
|
|
|
60
61
|
*
|
|
61
62
|
* Client-side only: call it once the DOM exists (after mount, not during
|
|
62
63
|
* an SSR render), since it writes directly to `document.documentElement`.
|
|
64
|
+
* Because it only runs after the page has painted, the base theme shows
|
|
65
|
+
* for a frame first; `buildThemeCss` below avoids that flash.
|
|
63
66
|
*/
|
|
64
67
|
export declare function initializeTheme(primary: EunomiaHexColor, secondary: EunomiaHexColor, isDark?: boolean, surfaceColor?: EunomiaHexColor, darkSurfaceColor?: EunomiaHexColor, fontFamily?: string): void;
|
|
68
|
+
export interface EunomiaThemeCssOptions {
|
|
69
|
+
surfaceColor?: EunomiaHexColor;
|
|
70
|
+
darkSurfaceColor?: EunomiaHexColor;
|
|
71
|
+
fontFamily?: string;
|
|
72
|
+
brand?: string;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* The pure, stylesheet counterpart of `initializeTheme`: the same tokens,
|
|
76
|
+
* for both light and dark mode, returned as a CSS string instead of being
|
|
77
|
+
* written onto the DOM. Render it in a `<style>` in the document `<head>`
|
|
78
|
+
* (during SSR, or at build time) and the custom brand is there on first
|
|
79
|
+
* paint, with no flash of the base theme while the app hydrates.
|
|
80
|
+
*
|
|
81
|
+
* The rules are prefixed with `:root` so they outrank the prebuilt
|
|
82
|
+
* `[data-brand][data-theme]` rules whatever the stylesheet order, and
|
|
83
|
+
* switching mode is just a `data-theme` change, no regeneration needed.
|
|
84
|
+
*/
|
|
85
|
+
export declare function buildThemeCss(primary: EunomiaHexColor, secondary: EunomiaHexColor, options?: EunomiaThemeCssOptions): string;
|
|
65
86
|
export {};
|
|
@@ -5,11 +5,12 @@
|
|
|
5
5
|
* theme" widget run; see Theming > Custom theme for how it works and why
|
|
6
6
|
* each step is shaped the way it is.
|
|
7
7
|
*
|
|
8
|
-
* Only `buildPalette`, `buildTints`,
|
|
9
|
-
* types their signatures need) are exported
|
|
8
|
+
* Only `buildPalette`, `buildTints`, `initializeTheme`, and
|
|
9
|
+
* `buildThemeCss` (plus the types their signatures need) are exported
|
|
10
|
+
* from `index.ts`. Everything
|
|
10
11
|
* else below, the raw color math, the shade/tint step definitions, is
|
|
11
12
|
* kept file-private on purpose: none of it is meant to be reached on its
|
|
12
|
-
* own, it exists to be composed by those
|
|
13
|
+
* own, it exists to be composed by those four, and every extra export
|
|
13
14
|
* is a promise to a consumer that constrains how this file can change
|
|
14
15
|
* later. If a real need for one of these on its own ever comes up, it's
|
|
15
16
|
* a one-line change to export it.
|
|
@@ -201,15 +202,42 @@ export function buildTints(primaryHex, isDark) {
|
|
|
201
202
|
contentPressedTint: mix(LIGHT_TINT_BASE.contentPressed, primary500, TINT_RATIO),
|
|
202
203
|
};
|
|
203
204
|
}
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
205
|
+
/**
|
|
206
|
+
* Every custom property a custom brand sets for one mode, as ordered
|
|
207
|
+
* `[property, value]` pairs: both 11-step shade scales, their `on-*`
|
|
208
|
+
* text colors, the transparent hover/active tokens, the surface color,
|
|
209
|
+
* the `-tint` neutrals, and `--eun-font-family` when one is passed.
|
|
210
|
+
* Shared by `initializeTheme` and `buildThemeCss` so the inline and the
|
|
211
|
+
* stylesheet output can never drift apart.
|
|
212
|
+
*/
|
|
213
|
+
function buildThemeTokens(primary, secondary, isDark, surfaceColor, fontFamily) {
|
|
214
|
+
const tokens = [];
|
|
215
|
+
for (const [type, seed] of [
|
|
216
|
+
["primary", primary],
|
|
217
|
+
["secondary", secondary],
|
|
218
|
+
]) {
|
|
219
|
+
for (const shade of buildPalette(seed, isDark)) {
|
|
220
|
+
tokens.push([`--eun-color-${type}-${shade.name}`, shade.value]);
|
|
221
|
+
tokens.push([`--eun-color-on-${type}-${shade.name}`, shade.on]);
|
|
222
|
+
}
|
|
223
|
+
for (const token of TRANSPARENT_TOKENS) {
|
|
224
|
+
tokens.push([
|
|
225
|
+
`--eun-color-${type}-${token.name}`,
|
|
226
|
+
toRgba(seed, token.alpha),
|
|
227
|
+
]);
|
|
228
|
+
}
|
|
209
229
|
}
|
|
210
|
-
|
|
211
|
-
|
|
230
|
+
tokens.push(["--eun-surface-color", surfaceColor]);
|
|
231
|
+
if (fontFamily) {
|
|
232
|
+
tokens.push(["--eun-font-family", fontFamily]);
|
|
212
233
|
}
|
|
234
|
+
const tints = buildTints(primary, isDark);
|
|
235
|
+
tokens.push(["--eun-surface-tint", tints.surfaceTint]);
|
|
236
|
+
tokens.push(["--eun-border-tint", tints.borderTint]);
|
|
237
|
+
tokens.push(["--eun-divider-tint", tints.dividerTint]);
|
|
238
|
+
tokens.push(["--eun-content-hover-tint", tints.contentHoverTint]);
|
|
239
|
+
tokens.push(["--eun-content-pressed-tint", tints.contentPressedTint]);
|
|
240
|
+
return tokens;
|
|
213
241
|
}
|
|
214
242
|
/**
|
|
215
243
|
* The one non-pure export in this file: generates and applies a full
|
|
@@ -231,19 +259,36 @@ function applyBrand(type, seed, isDark) {
|
|
|
231
259
|
*
|
|
232
260
|
* Client-side only: call it once the DOM exists (after mount, not during
|
|
233
261
|
* an SSR render), since it writes directly to `document.documentElement`.
|
|
262
|
+
* Because it only runs after the page has painted, the base theme shows
|
|
263
|
+
* for a frame first; `buildThemeCss` below avoids that flash.
|
|
234
264
|
*/
|
|
235
265
|
export function initializeTheme(primary, secondary, isDark = false, surfaceColor = "#ffffff", darkSurfaceColor = DARK_SURFACE, fontFamily) {
|
|
236
|
-
applyBrand("primary", primary, isDark);
|
|
237
|
-
applyBrand("secondary", secondary, isDark);
|
|
238
266
|
const root = document.documentElement.style;
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
root.setProperty(
|
|
267
|
+
const tokens = buildThemeTokens(primary, secondary, isDark, isDark ? darkSurfaceColor : surfaceColor, fontFamily);
|
|
268
|
+
for (const [property, value] of tokens) {
|
|
269
|
+
root.setProperty(property, value);
|
|
242
270
|
}
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* The pure, stylesheet counterpart of `initializeTheme`: the same tokens,
|
|
274
|
+
* for both light and dark mode, returned as a CSS string instead of being
|
|
275
|
+
* written onto the DOM. Render it in a `<style>` in the document `<head>`
|
|
276
|
+
* (during SSR, or at build time) and the custom brand is there on first
|
|
277
|
+
* paint, with no flash of the base theme while the app hydrates.
|
|
278
|
+
*
|
|
279
|
+
* The rules are prefixed with `:root` so they outrank the prebuilt
|
|
280
|
+
* `[data-brand][data-theme]` rules whatever the stylesheet order, and
|
|
281
|
+
* switching mode is just a `data-theme` change, no regeneration needed.
|
|
282
|
+
*/
|
|
283
|
+
export function buildThemeCss(primary, secondary, options = {}) {
|
|
284
|
+
const { surfaceColor = "#ffffff", darkSurfaceColor = DARK_SURFACE, fontFamily, brand = "custom", } = options;
|
|
285
|
+
const rule = (selector, isDark) => {
|
|
286
|
+
const tokens = buildThemeTokens(primary, secondary, isDark, isDark ? darkSurfaceColor : surfaceColor, fontFamily);
|
|
287
|
+
const body = tokens
|
|
288
|
+
.map(([property, value]) => ` ${property}: ${value};`)
|
|
289
|
+
.join("\n");
|
|
290
|
+
return `${selector} {\n${body}\n}`;
|
|
291
|
+
};
|
|
292
|
+
const selector = `:root[data-brand="${brand}"]`;
|
|
293
|
+
return `${rule(selector, false)}\n${rule(`${selector}[data-theme="dark"]`, true)}\n`;
|
|
249
294
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@eunomia/elements",
|
|
3
|
-
"version": "1.0.0-beta.
|
|
3
|
+
"version": "1.0.0-beta.4",
|
|
4
4
|
"description": "Eunomia — a framework-agnostic web component design system",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"homepage": "https://eunomia-ds.vercel.app",
|
|
@@ -293,12 +293,21 @@
|
|
|
293
293
|
"types": "./dist/components/content/tooltip/tooltip.d.ts",
|
|
294
294
|
"default": "./dist/components/content/tooltip/tooltip.js"
|
|
295
295
|
},
|
|
296
|
+
"./rich-text.js": {
|
|
297
|
+
"types": "./dist/utils/rich-text.utils.d.ts",
|
|
298
|
+
"default": "./dist/utils/rich-text.utils.js"
|
|
299
|
+
},
|
|
296
300
|
"./jsx": {
|
|
297
301
|
"types": "./dist/jsx.d.ts",
|
|
298
302
|
"default": "./dist/jsx.js"
|
|
299
303
|
},
|
|
300
304
|
"./styles/*": "./styles/*",
|
|
301
|
-
"./cdn/*": "./dist/cdn/*"
|
|
305
|
+
"./cdn/*": "./dist/cdn/*",
|
|
306
|
+
"./animate-ssr.css": "./dist/ssr/animate-ssr.css",
|
|
307
|
+
"./toolbar-ssr.css": "./dist/ssr/toolbar-ssr.css",
|
|
308
|
+
"./sidebar-ssr.css": "./dist/ssr/sidebar-ssr.css",
|
|
309
|
+
"./overlay-ssr.css": "./dist/ssr/overlay-ssr.css",
|
|
310
|
+
"./native-table.css": "./dist/features/table/native-table.css"
|
|
302
311
|
},
|
|
303
312
|
"files": [
|
|
304
313
|
"dist",
|
|
@@ -306,12 +315,14 @@
|
|
|
306
315
|
"licenses"
|
|
307
316
|
],
|
|
308
317
|
"sideEffects": [
|
|
318
|
+
"./dist/index.js",
|
|
309
319
|
"./dist/components/**/*.js",
|
|
310
320
|
"./dist/features/**/*.js"
|
|
311
321
|
],
|
|
312
322
|
"scripts": {
|
|
313
323
|
"build": "tsc --noEmit",
|
|
314
|
-
"build:dist": "
|
|
324
|
+
"build:dist": "node scripts/build-dist.mjs",
|
|
325
|
+
"build:dist:watch": "tsc -p tsconfig.build.json && node scripts/copy-assets.mjs && node scripts/generate-exports.mjs && tsc -p tsconfig.build.json --watch",
|
|
315
326
|
"build:cdn": "node scripts/build-cdn.mjs",
|
|
316
327
|
"prepublishOnly": "npm run build:dist && npm run build:cdn",
|
|
317
328
|
"lint": "eslint . --config ../eslint.config.js",
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
@mixin eunomia-neutrals {
|
|
2
|
+
--eun-content-hover: #9696961a;
|
|
3
|
+
--eun-content-pressed: #e4e6e8;
|
|
4
|
+
--eun-divider-color: #dee0e7;
|
|
5
|
+
--eun-border-color: #dee0e7;
|
|
6
|
+
--eun-surface-color: #ffffff;
|
|
7
|
+
--eun-surface-sunken: color-mix(
|
|
8
|
+
in srgb,
|
|
9
|
+
var(--eun-text-color) 5%,
|
|
10
|
+
transparent
|
|
11
|
+
);
|
|
12
|
+
--eun-surface-sunken-hover: color-mix(
|
|
13
|
+
in srgb,
|
|
14
|
+
var(--eun-text-color) 9%,
|
|
15
|
+
transparent
|
|
16
|
+
);
|
|
17
|
+
--eun-surface-sunken-pressed: color-mix(
|
|
18
|
+
in srgb,
|
|
19
|
+
var(--eun-text-color) 12%,
|
|
20
|
+
transparent
|
|
21
|
+
);
|
|
22
|
+
--eun-surface-sunken-strong: color-mix(
|
|
23
|
+
in srgb,
|
|
24
|
+
var(--eun-text-color) 8%,
|
|
25
|
+
transparent
|
|
26
|
+
);
|
|
27
|
+
--eun-disabled-color: #ecedf0;
|
|
28
|
+
--eun-readonly-color: #666e8a;
|
|
29
|
+
--eun-text-color: #071621;
|
|
30
|
+
--eun-text-secondary: #484e61;
|
|
31
|
+
--eun-placeholder-color: var(--eun-color-grey-400, #c1c9d6);
|
|
32
|
+
--eun-text-disabled-color: #8d93aa;
|
|
33
|
+
--eun-text-readonly-color: #c1c9d6;
|
|
34
|
+
--eun-disabled-content: #c1c9d6;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
@mixin eunomia-dark-neutrals {
|
|
38
|
+
--eun-content-hover: rgba(255, 255, 255, 0.08);
|
|
39
|
+
--eun-content-pressed: rgba(255, 255, 255, 0.14);
|
|
40
|
+
--eun-divider-color: var(--eun-color-grey-300);
|
|
41
|
+
--eun-border-color: var(--eun-color-grey-300);
|
|
42
|
+
--eun-surface-color: var(--eun-color-grey-0);
|
|
43
|
+
--eun-surface-sunken: color-mix(
|
|
44
|
+
in srgb,
|
|
45
|
+
var(--eun-text-color) 8%,
|
|
46
|
+
transparent
|
|
47
|
+
);
|
|
48
|
+
--eun-surface-sunken-hover: color-mix(
|
|
49
|
+
in srgb,
|
|
50
|
+
var(--eun-text-color) 12%,
|
|
51
|
+
transparent
|
|
52
|
+
);
|
|
53
|
+
--eun-surface-sunken-pressed: color-mix(
|
|
54
|
+
in srgb,
|
|
55
|
+
var(--eun-text-color) 16%,
|
|
56
|
+
transparent
|
|
57
|
+
);
|
|
58
|
+
--eun-surface-sunken-strong: color-mix(
|
|
59
|
+
in srgb,
|
|
60
|
+
var(--eun-text-color) 16%,
|
|
61
|
+
transparent
|
|
62
|
+
);
|
|
63
|
+
--eun-disabled-color: var(--eun-color-grey-200);
|
|
64
|
+
--eun-readonly-color: var(--eun-color-grey-600);
|
|
65
|
+
--eun-text-color: var(--eun-color-grey-800);
|
|
66
|
+
--eun-text-secondary: var(--eun-color-grey-700);
|
|
67
|
+
--eun-placeholder-color: var(--eun-color-grey-400);
|
|
68
|
+
--eun-text-disabled-color: var(--eun-color-grey-500);
|
|
69
|
+
--eun-text-readonly-color: var(--eun-color-grey-400);
|
|
70
|
+
--eun-disabled-content: var(--eun-color-grey-400);
|
|
71
|
+
}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
@use "./../../mixins/eunomia-neutrals.mixin.scss" as *;
|
|
2
|
+
|
|
1
3
|
@mixin eunomia-eunomia-dark-theme-colors {
|
|
2
4
|
$primary-500: #6c92ff;
|
|
3
5
|
$secondary-500: #edbd6f;
|
|
@@ -58,19 +60,7 @@
|
|
|
58
60
|
--eun-color-secondary-transparent-hover: #{rgba($secondary-500, 0.3)};
|
|
59
61
|
--eun-color-secondary-transparent-active: #{rgba($secondary-500, 0.4)};
|
|
60
62
|
|
|
61
|
-
|
|
62
|
-
--eun-content-pressed: rgba(255, 255, 255, 0.14);
|
|
63
|
-
--eun-divider-color: var(--eun-color-grey-300);
|
|
64
|
-
--eun-border-color: var(--eun-color-grey-300);
|
|
65
|
-
--eun-surface-color: var(--eun-color-grey-0);
|
|
66
|
-
--eun-disabled-color: var(--eun-color-grey-200);
|
|
67
|
-
--eun-readonly-color: var(--eun-color-grey-600);
|
|
68
|
-
--eun-text-color: var(--eun-color-grey-800);
|
|
69
|
-
--eun-text-secondary: var(--eun-color-grey-700);
|
|
70
|
-
--eun-placeholder-color: var(--eun-color-grey-400);
|
|
71
|
-
--eun-text-disabled-color: var(--eun-color-grey-500);
|
|
72
|
-
--eun-text-readonly-color: var(--eun-color-grey-400);
|
|
73
|
-
--eun-disabled-content: var(--eun-color-grey-400);
|
|
63
|
+
@include eunomia-dark-neutrals();
|
|
74
64
|
|
|
75
65
|
--eun-surface-tint: #2a3243;
|
|
76
66
|
--eun-divider-tint: #667090;
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
@use "./../../mixins/eunomia-neutrals.mixin.scss" as *;
|
|
2
|
+
|
|
1
3
|
@mixin eunomia-eunomia-theme-colors {
|
|
2
4
|
$primary-500: #3d6fff;
|
|
3
5
|
$secondary-500: #edbd6f;
|
|
@@ -58,19 +60,7 @@
|
|
|
58
60
|
--eun-color-secondary-transparent-hover: #{rgba($secondary-500, 0.3)};
|
|
59
61
|
--eun-color-secondary-transparent-active: #{rgba($secondary-500, 0.4)};
|
|
60
62
|
|
|
61
|
-
|
|
62
|
-
--eun-content-pressed: #e4e6e8;
|
|
63
|
-
--eun-divider-color: #dee0e7;
|
|
64
|
-
--eun-border-color: #dee0e7;
|
|
65
|
-
--eun-surface-color: #ffffff;
|
|
66
|
-
--eun-disabled-color: #ecedf0;
|
|
67
|
-
--eun-readonly-color: #666e8a;
|
|
68
|
-
--eun-text-color: #071621;
|
|
69
|
-
--eun-text-secondary: #484e61;
|
|
70
|
-
--eun-placeholder-color: var(--eun-color-grey-400, #c1c9d6);
|
|
71
|
-
--eun-text-disabled-color: #8d93aa;
|
|
72
|
-
--eun-text-readonly-color: #c1c9d6;
|
|
73
|
-
--eun-disabled-content: #c1c9d6;
|
|
63
|
+
@include eunomia-neutrals();
|
|
74
64
|
|
|
75
65
|
--eun-surface-tint: #f5f8ff;
|
|
76
66
|
--eun-divider-tint: #d6dae8;
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
@use "./../../../tools/mixins/settings/eunomia-radius.mixin.scss" as *;
|
|
10
10
|
@use "./../../../tools/mixins/settings/eunomia-border.mixin.scss" as *;
|
|
11
11
|
@use "./../../../tools/mixins/settings/eunomia-shadows.mixin.scss" as *;
|
|
12
|
+
@use "./../../../tools/mixins/settings/eunomia-alpha.mixin.scss" as *;
|
|
12
13
|
@use "./../../../tools/mixins/layout/eunomia-grid.mixin.scss" as *;
|
|
13
14
|
|
|
14
15
|
@mixin default-settings {
|
|
@@ -19,6 +20,7 @@
|
|
|
19
20
|
@include eunomia-border-radius();
|
|
20
21
|
@include eunomia-border-width();
|
|
21
22
|
@include eunomia-shadows();
|
|
23
|
+
@include eunomia-alpha();
|
|
22
24
|
@include eunomia-height();
|
|
23
25
|
@include eunomia-breakpoints();
|
|
24
26
|
@include eunomia-grid-layouts();
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
@use "./../../mixins/eunomia-neutrals.mixin.scss" as *;
|
|
2
|
+
|
|
1
3
|
@mixin eunomia-fire-dark-theme-colors {
|
|
2
4
|
$primary-500: #e94235;
|
|
3
5
|
$secondary-500: #df781e;
|
|
@@ -58,19 +60,7 @@
|
|
|
58
60
|
--eun-color-secondary-transparent-hover: #{rgba($secondary-500, 0.3)};
|
|
59
61
|
--eun-color-secondary-transparent-active: #{rgba($secondary-500, 0.4)};
|
|
60
62
|
|
|
61
|
-
|
|
62
|
-
--eun-content-pressed: rgba(255, 255, 255, 0.14);
|
|
63
|
-
--eun-divider-color: var(--eun-color-grey-300);
|
|
64
|
-
--eun-border-color: var(--eun-color-grey-300);
|
|
65
|
-
--eun-surface-color: var(--eun-color-grey-0);
|
|
66
|
-
--eun-disabled-color: var(--eun-color-grey-200);
|
|
67
|
-
--eun-readonly-color: var(--eun-color-grey-600);
|
|
68
|
-
--eun-text-color: var(--eun-color-grey-800);
|
|
69
|
-
--eun-text-secondary: var(--eun-color-grey-700);
|
|
70
|
-
--eun-placeholder-color: var(--eun-color-grey-400);
|
|
71
|
-
--eun-text-disabled-color: var(--eun-color-grey-500);
|
|
72
|
-
--eun-text-readonly-color: var(--eun-color-grey-400);
|
|
73
|
-
--eun-disabled-content: var(--eun-color-grey-400);
|
|
63
|
+
@include eunomia-dark-neutrals();
|
|
74
64
|
|
|
75
65
|
--eun-surface-tint: #2f2e39;
|
|
76
66
|
--eun-divider-tint: #6c6c86;
|