@ethlete/components 1.0.0-next.69 → 1.0.0-next.70
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +29 -0
- package/design/button.ts +57 -0
- package/design/form-field.ts +210 -0
- package/design/select.ts +110 -0
- package/fesm2022/ethlete-components-testing.mjs +3 -1
- package/fesm2022/ethlete-components-testing.mjs.map +1 -1
- package/fesm2022/ethlete-components.mjs +823 -105
- package/fesm2022/ethlete-components.mjs.map +1 -1
- package/package.json +20 -14
- package/src/lib/accordion/accordion-group.component.css +12 -0
- package/src/lib/accordion/accordion.component.css +185 -0
- package/src/lib/avatar/avatar-group.component.css +31 -0
- package/src/lib/avatar/avatar.component.css +75 -0
- package/src/lib/badge/badge.component.css +111 -0
- package/src/lib/banner/banner.component.css +94 -0
- package/src/lib/bracket/bracket-default-continue.component.css +29 -0
- package/src/lib/bracket/bracket-default-final-match.component.css +76 -0
- package/src/lib/bracket/bracket-default-match.component.css +21 -0
- package/src/lib/bracket/bracket-default-round-header.component.css +36 -0
- package/src/lib/bracket/bracket-participants.component.css +13 -0
- package/src/lib/bracket/bracket-pick-card.component.css +232 -0
- package/src/lib/bracket/bracket-rounds-list.component.css +75 -0
- package/src/lib/bracket/bracket-skeleton.component.css +55 -0
- package/src/lib/bracket/bracket.component.css +102 -0
- package/src/lib/bracket/layouts/swiss/bracket-swiss-styles.component.css +10 -0
- package/src/lib/breadcrumb/breadcrumb-overflow.component.css +38 -0
- package/src/lib/breadcrumb/breadcrumb.component.css +120 -0
- package/src/lib/button/button-properties-styles.component.css +143 -0
- package/src/lib/button/button.component.css +196 -0
- package/src/lib/button/fab.component.css +252 -0
- package/src/lib/button/icon-button.component.css +143 -0
- package/src/lib/button/split-button.component.css +77 -0
- package/src/lib/button/text-button.component.css +140 -0
- package/src/lib/button/window-control-button.component.css +158 -0
- package/src/lib/calendar/calendar-coarse-grid-styles.component.css +29 -0
- package/src/lib/calendar/calendar-comparison-band-styles.component.css +36 -0
- package/src/lib/calendar/calendar-week-numbers-styles.component.css +32 -0
- package/src/lib/calendar/calendar.component.css +366 -0
- package/src/lib/card/card.component.css +39 -0
- package/src/lib/carousel/carousel-autoplay-styles.component.css +166 -0
- package/src/lib/carousel/carousel-transition-styles.component.css +179 -0
- package/src/lib/carousel/carousel.component.css +142 -0
- package/src/lib/chart/bar-chart.component.css +176 -0
- package/src/lib/chart/chart-axis.component.css +40 -0
- package/src/lib/chart/chart-grid.component.css +6 -0
- package/src/lib/chart/chart-legend.component.css +46 -0
- package/src/lib/chart/chart-tooltip.component.css +34 -0
- package/src/lib/chart/line-chart-tooltip.component.css +51 -0
- package/src/lib/chart/line-chart.component.css +234 -0
- package/src/lib/chart/pie-chart.component.css +176 -0
- package/src/lib/chart/sankey-chart.component.css +221 -0
- package/src/lib/chip/chip.component.css +155 -0
- package/src/lib/command-palette/command-palette-item.component.css +94 -0
- package/src/lib/command-palette/command-palette.component.css +100 -0
- package/src/lib/description-list/description-list.component.css +77 -0
- package/src/lib/divider/divider.component.css +36 -0
- package/src/lib/empty-state/empty-state.component.css +73 -0
- package/src/lib/floating-action/floating-action-styles.component.css +78 -0
- package/src/lib/focus-ring/focus-ring-styles.component.css +13 -0
- package/src/lib/forms/cascader/cascader-breadcrumb-styles.component.css +98 -0
- package/src/lib/forms/cascader/cascader-panel.component.css +386 -0
- package/src/lib/forms/cascader/cascader-sheet-styles.component.css +241 -0
- package/src/lib/forms/cascader/cascader.component.css +52 -0
- package/src/lib/forms/checkbox/checkbox.component.css +247 -0
- package/src/lib/forms/choice-field/choice-field-card-styles.component.css +59 -0
- package/src/lib/forms/choice-field/choice-field.component.css +186 -0
- package/src/lib/forms/color-input/color-input.component.css +108 -0
- package/src/lib/forms/color-input/color-picker-panel.component.css +349 -0
- package/src/lib/forms/date-time/date-input/date-input.component.css +35 -0
- package/src/lib/forms/date-time/date-picker-panel.component.css +115 -0
- package/src/lib/forms/date-time/date-range-input/date-range-input.component.css +16 -0
- package/src/lib/forms/date-time/date-range-presets.component.css +60 -0
- package/src/lib/forms/date-time/date-time-input/date-time-input.component.css +151 -0
- package/src/lib/forms/date-time/date-time-range-input/date-time-range-input.component.css +121 -0
- package/src/lib/forms/date-time/duration-input/duration-input.component.css +88 -0
- package/src/lib/forms/date-time/range-input-shell-styles.component.css +55 -0
- package/src/lib/forms/date-time/time-input/time-input.component.css +35 -0
- package/src/lib/forms/date-time/time-range-input/time-range-input.component.css +16 -0
- package/src/lib/forms/dropzone/dropzone-item.component.css +51 -0
- package/src/lib/forms/dropzone/dropzone-preview-styles.component.css +67 -0
- package/src/lib/forms/dropzone/dropzone-readonly-styles.component.css +34 -0
- package/src/lib/forms/dropzone/dropzone.component.css +267 -0
- package/src/lib/forms/form-field/counter.component.css +25 -0
- package/src/lib/forms/form-field/form-field-control-suffix-styles.component.css +116 -0
- package/src/lib/forms/form-field/form-field-rich-text-styles.component.css +31 -0
- package/src/lib/forms/form-field/form-field-suffix-overlap-styles.component.css +66 -0
- package/src/lib/forms/form-field/form-field-text-shell-styles.component.css +312 -0
- package/src/lib/forms/form-field/form-field-textarea-styles.component.css +32 -0
- package/src/lib/forms/form-field/form-field.component.css +328 -0
- package/src/lib/forms/form-field/form-support-styles.component.css +102 -0
- package/src/lib/forms/form-field/headless/label.directive.css +25 -0
- package/src/lib/forms/form-field/hint.component.css +20 -0
- package/src/lib/forms/input/input.component.css +49 -0
- package/src/lib/forms/input/number-input.component.css +128 -0
- package/src/lib/forms/input/password-input.component.css +103 -0
- package/src/lib/forms/multi-language-rich-text-editor/multi-language-rich-text-editor.component.css +8 -0
- package/src/lib/forms/multi-language-rich-text-editor/tools/multi-language-rich-text-editor-language-tool.component.css +104 -0
- package/src/lib/forms/otp-input/otp-input.component.css +194 -0
- package/src/lib/forms/phone-input/phone-input.component.css +126 -0
- package/src/lib/forms/rating/rating.component.css +197 -0
- package/src/lib/forms/rich-text-editor/rich-text-content-styles.component.css +234 -0
- package/src/lib/forms/rich-text-editor/rich-text-editor-floating-toolbar.component.css +90 -0
- package/src/lib/forms/rich-text-editor/rich-text-editor-image-editor.component.css +172 -0
- package/src/lib/forms/rich-text-editor/rich-text-editor-link-editor.component.css +149 -0
- package/src/lib/forms/rich-text-editor/rich-text-editor-token-palette.component.css +18 -0
- package/src/lib/forms/rich-text-editor/rich-text-editor-token-popup.component.css +199 -0
- package/src/lib/forms/rich-text-editor/rich-text-editor.component.css +175 -0
- package/src/lib/forms/rich-text-editor/rich-text-viewer.component.css +6 -0
- package/src/lib/forms/rich-text-editor/tools/rich-text-editor-align-tool.component.css +5 -0
- package/src/lib/forms/rich-text-editor/tools/rich-text-editor-heading-tool.component.css +5 -0
- package/src/lib/forms/rich-text-editor/tools/rich-text-editor-image-styles.component.css +109 -0
- package/src/lib/forms/rich-text-editor/tools/rich-text-editor-table-styles.component.css +21 -0
- package/src/lib/forms/rich-text-editor/tools/rich-text-editor-table-tool.component.css +44 -0
- package/src/lib/forms/select/select-all-option.component.css +14 -0
- package/src/lib/forms/select/select-extras-styles.component.css +143 -0
- package/src/lib/forms/select/select-option-group.component.css +35 -0
- package/src/lib/forms/select/select-option-styles.component.css +137 -0
- package/src/lib/forms/select/select-panel.component.css +112 -0
- package/src/lib/forms/select/select.component.css +180 -0
- package/src/lib/forms/selection-card-styles.component.css +136 -0
- package/src/lib/forms/selection-list/checkbox-group/checkbox-group-select-all.component.css +89 -0
- package/src/lib/forms/selection-list/checkbox-group/checkbox-group.component.css +142 -0
- package/src/lib/forms/selection-list/checkbox-group/checkbox-option.component.css +153 -0
- package/src/lib/forms/selection-list/radio-group/radio-group.component.css +134 -0
- package/src/lib/forms/selection-list/radio-group/radio.component.css +137 -0
- package/src/lib/forms/selection-list/segmented-button-group/segmented-button-group.component.css +149 -0
- package/src/lib/forms/selection-list/segmented-button-group/segmented-button.component.css +180 -0
- package/src/lib/forms/slider/range-slider.component.css +348 -0
- package/src/lib/forms/slider/slider.component.css +342 -0
- package/src/lib/forms/switch/switch.component.css +187 -0
- package/src/lib/forms/tag-input/tag-input.component.css +54 -0
- package/src/lib/forms/textarea/textarea-autosize-styles.component.css +17 -0
- package/src/lib/forms/textarea/textarea.component.css +40 -0
- package/src/lib/grid/grid-debug.component.css +130 -0
- package/src/lib/grid/grid-item-default-actions.component.css +11 -0
- package/src/lib/grid/grid-item.component.css +172 -0
- package/src/lib/grid/grid.component.css +56 -0
- package/src/lib/icon/headless/icon-styles.component.css +7 -0
- package/src/lib/kbd/kbd.component.css +62 -0
- package/src/lib/loader/brand-loader/brand-loader.component.css +130 -0
- package/src/lib/loader/progress-bar/progress-bar.component.css +176 -0
- package/src/lib/loader/spinner/spinner.component.css +216 -0
- package/src/lib/masonry/masonry-styles.component.css +84 -0
- package/src/lib/match/match-card.component.css +441 -0
- package/src/lib/match/match-participant.component.css +137 -0
- package/src/lib/match/match-score.component.css +74 -0
- package/src/lib/menu/menu-group-label.component.css +12 -0
- package/src/lib/menu/menu-item-shortcut.component.css +10 -0
- package/src/lib/menu/menu-item-submenu-icon.component.css +18 -0
- package/src/lib/menu/menu-item.component.css +32 -0
- package/src/lib/menu/menu-search-styles.component.css +56 -0
- package/src/lib/menu/menu-selection-item.component.css +88 -0
- package/src/lib/menu/menu-separator.component.css +9 -0
- package/src/lib/menu/menu.component.css +296 -0
- package/src/lib/notification/notification-stack.component.css +114 -0
- package/src/lib/notification/notification.component.css +271 -0
- package/src/lib/overlay/alert-dialog/alert-dialog.component.css +45 -0
- package/src/lib/overlay/floating-panel-styles.component.css +71 -0
- package/src/lib/overlay/floating-tip-styles.component.css +78 -0
- package/src/lib/overlay/overlay-container.component.css +167 -0
- package/src/lib/overlay/overlay-main-styles.component.css +105 -0
- package/src/lib/overlay/overlay-template-host.component.css +7 -0
- package/src/lib/overlay/routing/overlay-route-header-template-outlet.component.css +36 -0
- package/src/lib/overlay/routing/overlay-router-outlet.component.css +207 -0
- package/src/lib/overlay/routing/overlay-shared-route-template-outlet.component.css +5 -0
- package/src/lib/overlay/sidebar/overlay-sidebar.component.css +16 -0
- package/src/lib/overlay/strategies/anchored-dialog-styles.component.css +51 -0
- package/src/lib/overlay/strategies/dialog-styles.component.css +50 -0
- package/src/lib/overlay/strategies/full-screen-dialog-styles.component.css +83 -0
- package/src/lib/overlay/strategies/overlay-arrow-styles.component.css +112 -0
- package/src/lib/overlay/strategies/overlay-origin-clone.component.css +63 -0
- package/src/lib/overlay/strategies/sheet-styles.component.css +143 -0
- package/src/lib/pagination/page-size-select.component.css +102 -0
- package/src/lib/pagination/pagination.component.css +192 -0
- package/src/lib/picture/picture.component.css +66 -0
- package/src/lib/progress-steps/progress-step.component.css +187 -0
- package/src/lib/progress-steps/progress-steps.component.css +26 -0
- package/src/lib/query-error/query-error.component.css +21 -0
- package/src/lib/scheduler/scheduler-agenda-view.component.css +97 -0
- package/src/lib/scheduler/scheduler-appointment-drag-styles.component.css +56 -0
- package/src/lib/scheduler/scheduler-appointment-styles.component.css +111 -0
- package/src/lib/scheduler/scheduler-edit-color.component.css +16 -0
- package/src/lib/scheduler/scheduler-edit-surface-actions.component.css +14 -0
- package/src/lib/scheduler/scheduler-edit-surface-breadcrumb.component.css +26 -0
- package/src/lib/scheduler/scheduler-edit-surface-children.component.css +57 -0
- package/src/lib/scheduler/scheduler-edit-surface-fields.component.css +11 -0
- package/src/lib/scheduler/scheduler-edit-surface-footer.component.css +7 -0
- package/src/lib/scheduler/scheduler-edit-surface-header.component.css +15 -0
- package/src/lib/scheduler/scheduler-edit-time-range.component.css +11 -0
- package/src/lib/scheduler/scheduler-month-view.component.css +143 -0
- package/src/lib/scheduler/scheduler-time-grid-view.component.css +260 -0
- package/src/lib/scheduler/scheduler.component.css +87 -0
- package/src/lib/scrollable/headless/scrollable-buttons.component.css +122 -0
- package/src/lib/scrollable/headless/scrollable-footer.css +25 -0
- package/src/lib/scrollable/headless/scrollable-masks.component.css +112 -0
- package/src/lib/scrollable/headless/scrollable-navigation.component.css +94 -0
- package/src/lib/scrollable/scrollable.component.css +192 -0
- package/src/lib/scrollbar/scrollbar.component.css +110 -0
- package/src/lib/skeleton/skeleton.component.css +108 -0
- package/src/lib/standings/standings-pick.component.css +172 -0
- package/src/lib/standings/standings.component.css +201 -0
- package/src/lib/stat-tile/stat-tile-sparkline.component.css +49 -0
- package/src/lib/stat-tile/stat-tile.component.css +111 -0
- package/src/lib/stream/pip/pip-chrome.component.css +96 -0
- package/src/lib/stream/pip/pip-player.component.css +40 -0
- package/src/lib/stream/pip/pip-window.component.css +222 -0
- package/src/lib/stream/stream-manager-styles.component.css +10 -0
- package/src/lib/stream/stream-overlay-card-styles.component.css +43 -0
- package/src/lib/stream/stream-player-slot-styles.component.css +14 -0
- package/src/lib/table/table-column-chooser.component.css +17 -0
- package/src/lib/table/table-column-menu-trigger.component.css +31 -0
- package/src/lib/table/table-detail-styles.component.css +103 -0
- package/src/lib/table/table-drag-scroll-styles.component.css +18 -0
- package/src/lib/table/table-expander-cell.component.css +58 -0
- package/src/lib/table/table-filter-trigger.component.css +44 -0
- package/src/lib/table/table-group-header-row.component.css +38 -0
- package/src/lib/table/table-inline-edit-styles.component.css +20 -0
- package/src/lib/table/table-page-sticky-header-styles.component.css +77 -0
- package/src/lib/table/table-reorder-overlay.component.css +42 -0
- package/src/lib/table/table-resize-grip.component.css +65 -0
- package/src/lib/table/table-row-box-styles.component.css +260 -0
- package/src/lib/table/table-select-cell.component.css +89 -0
- package/src/lib/table/table-skeleton-rows.component.css +19 -0
- package/src/lib/table/table-sort-priority-styles.component.css +15 -0
- package/src/lib/table/table-sticky-columns-styles.component.css +80 -0
- package/src/lib/table/table-virtual-scroll-styles.component.css +9 -0
- package/src/lib/table/table.component.css +829 -0
- package/src/lib/tabs/nav-tabs/nav-tab-link-styles.component.css +33 -0
- package/src/lib/tabs/tab-bar-styles.component.css +173 -0
- package/src/lib/tabs/tab-scale-styles.component.css +61 -0
- package/src/lib/time-picker/time-picker.component.css +220 -0
- package/src/lib/timeline/timeline-item.component.css +116 -0
- package/src/lib/timeline/timeline.component.css +7 -0
- package/src/lib/toggletip/toggletip.component.css +83 -0
- package/src/lib/toolbar/toolbar.component.css +40 -0
- package/src/lib/tooltip/tooltip.component.css +64 -0
- package/src/lib/tree/tree.component.css +221 -0
- package/types/ethlete-components-testing.d.ts +1 -1
- package/types/ethlete-components.d.ts +172 -7
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
@layer components {
|
|
2
|
+
.et-overlay.et-rte-token-popup-overlay {
|
|
3
|
+
overflow: visible;
|
|
4
|
+
background: transparent;
|
|
5
|
+
box-shadow: none;
|
|
6
|
+
border-radius: 10px;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
/* open / close: fade + a small slide toward the caret (same treatment as et-menu). The overlay
|
|
10
|
+
runtime toggles the enter/leave classes and sets --et-overlay-anchored-x/y for positioning. */
|
|
11
|
+
.et-overlay.et-with-default-animation.et-rte-token-popup-overlay {
|
|
12
|
+
&.et-animation-enter-from,
|
|
13
|
+
&.et-animation-leave-to {
|
|
14
|
+
opacity: 0;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
&.et-animation-enter-active {
|
|
18
|
+
transition:
|
|
19
|
+
transform 140ms ease,
|
|
20
|
+
opacity 140ms ease;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
&.et-animation-leave-active {
|
|
24
|
+
transition:
|
|
25
|
+
transform 100ms ease,
|
|
26
|
+
opacity 100ms ease;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.et-rte-token-popup-overlay[data-overlay-placement^='top'] {
|
|
31
|
+
&.et-animation-enter-from,
|
|
32
|
+
&.et-animation-leave-to {
|
|
33
|
+
transform: translate3d(var(--et-overlay-anchored-x, 0px), var(--et-overlay-anchored-y, 0px), 0) translateY(0.3rem) !important;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.et-rte-token-popup-overlay[data-overlay-placement^='bottom'] {
|
|
38
|
+
&.et-animation-enter-from,
|
|
39
|
+
&.et-animation-leave-to {
|
|
40
|
+
transform: translate3d(var(--et-overlay-anchored-x, 0px), var(--et-overlay-anchored-y, 0px), 0)
|
|
41
|
+
translateY(-0.3rem) !important;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
@media (prefers-reduced-motion: reduce) {
|
|
46
|
+
.et-overlay.et-with-default-animation.et-rte-token-popup-overlay {
|
|
47
|
+
&.et-animation-enter-active {
|
|
48
|
+
transition: opacity 140ms ease;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
&.et-animation-leave-active {
|
|
52
|
+
transition: opacity 100ms ease;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.et-rte-token-popup-overlay[data-overlay-placement] {
|
|
57
|
+
&.et-animation-enter-from,
|
|
58
|
+
&.et-animation-leave-to {
|
|
59
|
+
transform: translate3d(var(--et-overlay-anchored-x, 0px), var(--et-overlay-anchored-y, 0px), 0) !important;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.et-rte-token-popup {
|
|
65
|
+
--_et-rte-popup-background: var(--et-surface-background-solid, rgb(38 38 38));
|
|
66
|
+
--_et-rte-popup-color: var(--et-surface-color-solid, rgb(244 244 245));
|
|
67
|
+
--_et-rte-popup-border: var(--et-surface-border-solid, rgb(255 255 255 / 0.1));
|
|
68
|
+
--_et-rte-popup-shadow: var(--et-anchored-panel-shadow, 0 10px 24px rgb(var(--et-shadow-color-rgb, 0 0 0) / 0.16));
|
|
69
|
+
--_et-rte-popup-radius: 10px;
|
|
70
|
+
--_et-rte-popup-option-radius: 6px;
|
|
71
|
+
--_et-rte-popup-max-block-size: 260px;
|
|
72
|
+
--_et-rte-popup-muted-color: var(--et-surface-color-muted-solid, rgb(255 255 255 / 0.55));
|
|
73
|
+
--_et-rte-popup-option-active-background: color-mix(
|
|
74
|
+
in srgb,
|
|
75
|
+
var(--et-surface-interaction-solid, rgb(255 255 255)) 12%,
|
|
76
|
+
transparent
|
|
77
|
+
);
|
|
78
|
+
|
|
79
|
+
position: relative;
|
|
80
|
+
display: block;
|
|
81
|
+
min-inline-size: 180px;
|
|
82
|
+
max-inline-size: min(320px, calc(100vw - 24px));
|
|
83
|
+
border-radius: 10px;
|
|
84
|
+
border: 1px solid var(--_et-rte-popup-border);
|
|
85
|
+
background: var(--_et-rte-popup-background);
|
|
86
|
+
color: var(--_et-rte-popup-color);
|
|
87
|
+
font-family: var(--et-font-family, inherit);
|
|
88
|
+
font-size: 14px;
|
|
89
|
+
box-shadow: var(--_et-rte-popup-shadow);
|
|
90
|
+
outline: none;
|
|
91
|
+
overflow: hidden;
|
|
92
|
+
|
|
93
|
+
&.et-rte-token-popup--resizing {
|
|
94
|
+
overflow: clip;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/* out of flow: the re-fetch cue sits on the top edge and never changes the list height. Kept
|
|
98
|
+
mounted and faded via `--visible` so it eases in/out instead of popping. */
|
|
99
|
+
.et-rte-token-popup-progress {
|
|
100
|
+
position: absolute;
|
|
101
|
+
inset-block-start: 0;
|
|
102
|
+
inset-inline: 0;
|
|
103
|
+
z-index: 1;
|
|
104
|
+
--et-progress-bar-height: 1.5px;
|
|
105
|
+
--et-progress-bar-border-radius: 0;
|
|
106
|
+
--et-progress-bar-indicator-color: var(--et-theme-color-primary-solid, currentColor);
|
|
107
|
+
--et-progress-bar-track-color: transparent;
|
|
108
|
+
pointer-events: none;
|
|
109
|
+
opacity: 0;
|
|
110
|
+
transition: opacity 160ms ease;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
.et-rte-token-popup-progress--visible {
|
|
114
|
+
opacity: 1;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
.et-rte-token-popup-error {
|
|
118
|
+
margin: 6px 8px 0;
|
|
119
|
+
font-size: 12px;
|
|
120
|
+
color: var(--et-theme-color-ink-solid, rgb(248 113 113));
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
.et-rte-token-popup-state {
|
|
124
|
+
display: flex;
|
|
125
|
+
flex-direction: column;
|
|
126
|
+
align-items: center;
|
|
127
|
+
justify-content: center;
|
|
128
|
+
gap: 8px;
|
|
129
|
+
min-block-size: 72px;
|
|
130
|
+
padding: 12px 16px;
|
|
131
|
+
text-align: center;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
.et-rte-token-popup-state--error {
|
|
135
|
+
color: var(--et-theme-color-ink-solid, rgb(248 113 113));
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
.et-rte-token-popup-state-icon {
|
|
139
|
+
inline-size: 22px;
|
|
140
|
+
block-size: 22px;
|
|
141
|
+
color: inherit;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
.et-rte-token-popup-state-label {
|
|
145
|
+
font-size: 12px;
|
|
146
|
+
line-height: 1.35;
|
|
147
|
+
color: inherit;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
.et-rte-token-popup-body {
|
|
151
|
+
max-block-size: var(--_et-rte-popup-max-block-size);
|
|
152
|
+
padding: 6px;
|
|
153
|
+
overflow-y: auto;
|
|
154
|
+
overscroll-behavior: contain;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
.et-rte-token-popup-option {
|
|
158
|
+
display: flex;
|
|
159
|
+
flex-direction: column;
|
|
160
|
+
justify-content: center;
|
|
161
|
+
gap: 2px;
|
|
162
|
+
min-block-size: 36px;
|
|
163
|
+
padding: 6px 10px;
|
|
164
|
+
border-radius: var(--_et-rte-popup-option-radius);
|
|
165
|
+
cursor: pointer;
|
|
166
|
+
transition: background 120ms ease;
|
|
167
|
+
|
|
168
|
+
&[data-active] {
|
|
169
|
+
background: var(--_et-rte-popup-option-active-background);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
&[aria-disabled='true'] {
|
|
173
|
+
opacity: 0.4;
|
|
174
|
+
cursor: default;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
.et-rte-token-popup-option-label {
|
|
179
|
+
line-height: 1.3;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
.et-rte-token-popup-option-description {
|
|
183
|
+
font-size: 12px;
|
|
184
|
+
line-height: 1.2;
|
|
185
|
+
color: var(--_et-rte-popup-muted-color);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/* one fixed-height box shared by the first-load spinner and the empty label, so switching
|
|
189
|
+
between them never resizes the panel */
|
|
190
|
+
.et-rte-token-popup-placeholder {
|
|
191
|
+
display: flex;
|
|
192
|
+
align-items: center;
|
|
193
|
+
justify-content: center;
|
|
194
|
+
min-block-size: 52px;
|
|
195
|
+
font-size: 13px;
|
|
196
|
+
color: var(--_et-rte-popup-muted-color);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
@layer components {
|
|
2
|
+
@property --et-rich-text-editor-toolbar-gap {
|
|
3
|
+
syntax: '<length>';
|
|
4
|
+
inherits: true;
|
|
5
|
+
initial-value: 2px;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
@property --et-rich-text-editor-toolbar-padding {
|
|
9
|
+
syntax: '<length>';
|
|
10
|
+
inherits: true;
|
|
11
|
+
initial-value: 4px;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
@property --et-rich-text-editor-button-radius {
|
|
15
|
+
syntax: '<length>';
|
|
16
|
+
inherits: true;
|
|
17
|
+
initial-value: 4px;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
@property --et-rich-text-editor-min-height {
|
|
21
|
+
syntax: '<length>';
|
|
22
|
+
inherits: true;
|
|
23
|
+
initial-value: 96px;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
et-rich-text-editor {
|
|
27
|
+
display: flex;
|
|
28
|
+
flex: 1;
|
|
29
|
+
flex-direction: column;
|
|
30
|
+
min-inline-size: 0;
|
|
31
|
+
color: inherit;
|
|
32
|
+
|
|
33
|
+
.et-rte-toolbar {
|
|
34
|
+
display: flex;
|
|
35
|
+
flex-wrap: wrap;
|
|
36
|
+
align-items: center;
|
|
37
|
+
gap: var(--et-rich-text-editor-toolbar-gap);
|
|
38
|
+
padding: var(--et-rich-text-editor-toolbar-padding);
|
|
39
|
+
padding-inline: calc(var(--et-form-field-control-padding-inline) - var(--et-rich-text-editor-toolbar-padding));
|
|
40
|
+
border-block-end: var(--et-form-field-control-border-width, 1px) solid
|
|
41
|
+
color-mix(in srgb, currentColor 12%, transparent);
|
|
42
|
+
|
|
43
|
+
--et-icon-button-border-radius: var(--et-rich-text-editor-button-radius);
|
|
44
|
+
|
|
45
|
+
/* dense toolbar: the default outward ring offset (3px) reaches past the toolbar padding (4px)
|
|
46
|
+
and gap (2px), stacking the ring on the field border and neighboring buttons — pull it onto
|
|
47
|
+
the button edge instead */
|
|
48
|
+
.et-icon-button {
|
|
49
|
+
--_et-focus-ring-offset: -1px;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/* readonly disables every tool, but the editor is view-only rather than broken - the button's
|
|
53
|
+
`not-allowed` would say the wrong thing */
|
|
54
|
+
:where([data-readonly]) & .et-icon-button {
|
|
55
|
+
cursor: default;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/* On touch the toolbar is a full-width bar fixed above the on-screen keyboard (the OS selection
|
|
60
|
+
menu owns the top). It never sits at the top: it's hidden until the editor is active, then
|
|
61
|
+
fades/slides in rather than popping.
|
|
62
|
+
|
|
63
|
+
The keyboard is cleared by *padding*, not by `inset-block-end`: the box itself always reaches the
|
|
64
|
+
bottom of the layout viewport and the measured inset (driven by JS from `visualViewport`) pushes
|
|
65
|
+
the tools up out of the keyboard's way. The difference matters where the measurement cannot be
|
|
66
|
+
exact — Chrome for Android reports a visible viewport one tab-group-strip too short while a tab
|
|
67
|
+
belongs to a tab group, and nothing in the page can tell — because the bar's own background
|
|
68
|
+
covers whatever is between it and the keyboard instead of letting page content show through a
|
|
69
|
+
gap. Everything below the tools is behind the keyboard (or behind browser chrome), so nobody can
|
|
70
|
+
reach it. The padding deliberately has NO transition: it must track the viewport instantly as the
|
|
71
|
+
page scrolls (a transition would make it lag a frame behind the keyboard). */
|
|
72
|
+
/* the tools' own scrollbar hangs at the bottom edge of the scrollport, so the keyboard
|
|
73
|
+
clearance below has to belong to the dock - not to the tools - or the bar sits behind the
|
|
74
|
+
keyboard */
|
|
75
|
+
&.et-rich-text-editor--touch .et-rte-toolbar-dock {
|
|
76
|
+
position: fixed;
|
|
77
|
+
inset-inline: 0;
|
|
78
|
+
inset-block-end: 0;
|
|
79
|
+
z-index: 60;
|
|
80
|
+
/* Two sources, whichever is available, and never both: `env(keyboard-inset-height)` is the
|
|
81
|
+
browser telling us exactly where the keyboard is — but only for a page that opted into the
|
|
82
|
+
VirtualKeyboard API (`navigator.virtualKeyboard.overlaysContent = true`), which is also what
|
|
83
|
+
stops the viewport from resizing, so the measured inset is 0 there. Without that opt-in (or
|
|
84
|
+
in a browser without the API) the env var falls back to 0 and the measurement carries it.
|
|
85
|
+
`max()` needs no feature detection and cannot place the bar too low. */
|
|
86
|
+
padding-block-end: max(var(--_et-rte-keyboard-inset, 0px), env(keyboard-inset-height, 0px));
|
|
87
|
+
background: var(--et-surface-background-solid, rgb(24 24 24));
|
|
88
|
+
border-block-start: var(--et-form-field-control-border-width, 1px) solid
|
|
89
|
+
color-mix(in srgb, currentColor 12%, transparent);
|
|
90
|
+
box-shadow: 0 -6px 20px rgb(var(--et-shadow-color-rgb, 0 0 0) / 0.24);
|
|
91
|
+
opacity: 0;
|
|
92
|
+
transform: translateY(100%);
|
|
93
|
+
pointer-events: none;
|
|
94
|
+
transition:
|
|
95
|
+
opacity 160ms var(--ease-out-5, ease),
|
|
96
|
+
transform 260ms var(--ease-out-5, ease);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
.et-rte-toolbar-viewport {
|
|
100
|
+
position: relative;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
&.et-rich-text-editor--touch .et-rte-toolbar-viewport {
|
|
104
|
+
--et-scrollbar-thickness: 6px;
|
|
105
|
+
--et-scrollbar-thumb-thickness: 3px;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
&.et-rich-text-editor--touch .et-rte-toolbar {
|
|
109
|
+
flex-wrap: nowrap;
|
|
110
|
+
overflow-x: auto;
|
|
111
|
+
/* scroll the tools horizontally when they overflow, without triggering browser back-swipe */
|
|
112
|
+
overscroll-behavior-x: contain;
|
|
113
|
+
-webkit-overflow-scrolling: touch;
|
|
114
|
+
padding-inline: 8px;
|
|
115
|
+
padding-block: 6px;
|
|
116
|
+
border-block-end: none;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
&.et-rich-text-editor--touch.et-rich-text-editor--docked-toolbar .et-rte-toolbar-dock {
|
|
120
|
+
opacity: 1;
|
|
121
|
+
transform: translateY(0);
|
|
122
|
+
pointer-events: auto;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/* iOS Safari zooms the whole page when a focused editable's font-size is below 16px — floor
|
|
126
|
+
it there on touch devices (1em = the inherited size, so larger fonts pass through; on
|
|
127
|
+
desktop nothing changes). */
|
|
128
|
+
&.et-rich-text-editor--touch .et-rte-content {
|
|
129
|
+
font-size: max(1em, 16px);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
@media (prefers-reduced-motion: reduce) {
|
|
133
|
+
&.et-rich-text-editor--touch .et-rte-toolbar-dock {
|
|
134
|
+
transition: opacity 160ms var(--ease-out-5, ease);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
.et-rte-toolbar .et-divider {
|
|
139
|
+
--et-divider-color: color-mix(in srgb, currentColor 12%, transparent);
|
|
140
|
+
--et-divider-spacing: 2px;
|
|
141
|
+
--et-divider-inset: 4px;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
.et-rte-content {
|
|
145
|
+
/* Rendered content is display, not the field's interactive chrome. The editor frame is an
|
|
146
|
+
`et-color-interactive--has-focus` ancestor that retints `--et-theme-color-*` on focus, and
|
|
147
|
+
content that reads the accent — token chips (outline + fill), links, the caret — would
|
|
148
|
+
otherwise pick that shift up. Re-anchor the accent tokens to their resting (base) values
|
|
149
|
+
here so content stays stable whether or not the editor is focused. This is the same
|
|
150
|
+
immunity the interactive toolbar buttons already get from carrying `et-color-interactive`
|
|
151
|
+
themselves; content can't (a chip must not react to its own hover), so it re-anchors once
|
|
152
|
+
at the root instead. */
|
|
153
|
+
--et-theme-color-primary-rgb: var(--et-color-primary);
|
|
154
|
+
--et-theme-color-primary-solid: rgb(var(--et-theme-color-primary-rgb));
|
|
155
|
+
--et-theme-color-ink-rgb: var(--et-color-primary-ink, var(--et-color-primary));
|
|
156
|
+
--et-theme-color-ink-solid: rgb(var(--et-theme-color-ink-rgb));
|
|
157
|
+
|
|
158
|
+
display: block;
|
|
159
|
+
flex: 1;
|
|
160
|
+
min-inline-size: 0;
|
|
161
|
+
padding-block: var(--et-form-field-control-padding-block);
|
|
162
|
+
padding-inline: var(--et-form-field-control-padding-inline);
|
|
163
|
+
min-block-size: var(--et-rich-text-editor-min-height);
|
|
164
|
+
outline: none;
|
|
165
|
+
color: inherit;
|
|
166
|
+
caret-color: var(--et-theme-color-primary-solid, currentColor);
|
|
167
|
+
|
|
168
|
+
&:empty::before {
|
|
169
|
+
content: attr(data-placeholder);
|
|
170
|
+
color: color-mix(in srgb, currentColor 46%, transparent);
|
|
171
|
+
pointer-events: none;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
@layer components {
|
|
2
|
+
@property --et-rich-text-editor-image-radius {
|
|
3
|
+
syntax: '<length>';
|
|
4
|
+
inherits: true;
|
|
5
|
+
initial-value: 6px;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
@property --et-rich-text-editor-image-upload-height {
|
|
9
|
+
syntax: '<length>';
|
|
10
|
+
inherits: true;
|
|
11
|
+
initial-value: 140px;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.et-rte-content {
|
|
15
|
+
img {
|
|
16
|
+
display: block;
|
|
17
|
+
max-inline-size: 100%;
|
|
18
|
+
block-size: auto;
|
|
19
|
+
margin-block: var(--et-rich-text-editor-content-gap);
|
|
20
|
+
border-radius: var(--et-rich-text-editor-image-radius);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
et-rich-text-editor & img {
|
|
24
|
+
cursor: pointer;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/* The upload placeholder the image tool leaves at the caret while a file uploads. It stands in
|
|
28
|
+
for the image, so it takes an image's room rather than a character's — but it carries no text
|
|
29
|
+
(that is what keeps it out of the editor's value), so everything it says is drawn here from
|
|
30
|
+
its attributes: a spinning ring, the label plus percentage, a progress bar along the bottom,
|
|
31
|
+
and a failed state that removes itself shortly after.
|
|
32
|
+
|
|
33
|
+
It is a `<span>` set to `display: block` on purpose: a real block element (`<p>`, `<div>`)
|
|
34
|
+
would serialize as a paragraph boundary, and this must serialize as nothing at all. */
|
|
35
|
+
.et-rte-image-upload {
|
|
36
|
+
display: block;
|
|
37
|
+
position: relative;
|
|
38
|
+
block-size: var(--et-rich-text-editor-image-upload-height);
|
|
39
|
+
margin-block: var(--et-rich-text-editor-content-gap);
|
|
40
|
+
border-radius: var(--et-rich-text-editor-image-radius);
|
|
41
|
+
outline: 1px dashed color-mix(in srgb, currentColor 24%, transparent);
|
|
42
|
+
outline-offset: -1px;
|
|
43
|
+
background:
|
|
44
|
+
linear-gradient(to right, var(--et-theme-color-primary-solid, currentColor) 0 0) no-repeat left bottom /
|
|
45
|
+
var(--_et-rte-image-progress, 0%) 3px,
|
|
46
|
+
color-mix(in srgb, var(--et-surface-interaction-solid, currentColor) 8%, transparent);
|
|
47
|
+
-webkit-user-select: all;
|
|
48
|
+
user-select: all;
|
|
49
|
+
|
|
50
|
+
/* The spinner, above the label. */
|
|
51
|
+
&::before {
|
|
52
|
+
content: '';
|
|
53
|
+
position: absolute;
|
|
54
|
+
inset-inline: 0;
|
|
55
|
+
inset-block-start: calc(50% - 1.9em);
|
|
56
|
+
margin-inline: auto;
|
|
57
|
+
inline-size: 1.8em;
|
|
58
|
+
block-size: 1.8em;
|
|
59
|
+
border: 2px solid color-mix(in srgb, var(--et-theme-color-primary-solid, currentColor) 28%, transparent);
|
|
60
|
+
border-block-start-color: var(--et-theme-color-primary-solid, currentColor);
|
|
61
|
+
border-radius: 50%;
|
|
62
|
+
animation: et-rte-image-upload-spin 800ms linear infinite;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/* The state, read straight off the accessible name so it needs no text node of its own. */
|
|
66
|
+
&::after {
|
|
67
|
+
content: attr(aria-label);
|
|
68
|
+
position: absolute;
|
|
69
|
+
inset-inline: 0;
|
|
70
|
+
inset-block-start: calc(50% + 0.4em);
|
|
71
|
+
color: var(--et-surface-color-muted-solid, inherit);
|
|
72
|
+
font-size: 1.2rem;
|
|
73
|
+
text-align: center;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
&[data-progress]::after {
|
|
77
|
+
content: attr(aria-label) ' · ' attr(data-progress) '%';
|
|
78
|
+
font-variant-numeric: tabular-nums;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
&[data-state='error'] {
|
|
82
|
+
outline-color: color-mix(in srgb, var(--et-theme-color-primary-solid, currentColor) 40%, transparent);
|
|
83
|
+
background: color-mix(in srgb, var(--et-theme-color-primary-solid, currentColor) 10%, transparent);
|
|
84
|
+
|
|
85
|
+
/* A failed upload is not still working — the ring stops and becomes a cross. */
|
|
86
|
+
&::before {
|
|
87
|
+
border: none;
|
|
88
|
+
border-radius: 0;
|
|
89
|
+
background:
|
|
90
|
+
linear-gradient(to bottom right, transparent 44%, currentColor 44% 56%, transparent 56%),
|
|
91
|
+
linear-gradient(to bottom left, transparent 44%, currentColor 44% 56%, transparent 56%);
|
|
92
|
+
animation: none;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
@keyframes et-rte-image-upload-spin {
|
|
99
|
+
to {
|
|
100
|
+
transform: rotate(1turn);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
@media (prefers-reduced-motion: reduce) {
|
|
105
|
+
.et-rte-content .et-rte-image-upload::before {
|
|
106
|
+
animation: none;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
@layer components {
|
|
2
|
+
.et-rte-content {
|
|
3
|
+
table {
|
|
4
|
+
border-collapse: collapse;
|
|
5
|
+
inline-size: 100%;
|
|
6
|
+
margin-block: var(--et-rich-text-editor-content-gap);
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
:is(th, td) {
|
|
10
|
+
padding: 6px 8px;
|
|
11
|
+
border: 1px solid var(--et-surface-border-solid, rgb(255 255 255 / 0.15));
|
|
12
|
+
text-align: start;
|
|
13
|
+
vertical-align: top;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
th {
|
|
17
|
+
font-weight: 700;
|
|
18
|
+
background: color-mix(in srgb, var(--et-surface-interaction-solid, currentColor) 8%, transparent);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
@layer components {
|
|
2
|
+
.et-rte-table-tool {
|
|
3
|
+
display: contents;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
.et-rte-table-picker {
|
|
7
|
+
display: flex;
|
|
8
|
+
flex-direction: column;
|
|
9
|
+
align-items: center;
|
|
10
|
+
gap: 8px;
|
|
11
|
+
padding: 4px;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.et-rte-table-picker-grid {
|
|
15
|
+
display: grid;
|
|
16
|
+
grid-template-columns: repeat(8, 1fr);
|
|
17
|
+
gap: 3px;
|
|
18
|
+
/* a swipe across the grid extends the selection — never let the browser pan/scroll instead */
|
|
19
|
+
touch-action: none;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.et-rte-table-picker-cell {
|
|
23
|
+
inline-size: 16px;
|
|
24
|
+
block-size: 16px;
|
|
25
|
+
padding: 0;
|
|
26
|
+
border: 1px solid var(--et-surface-border-solid, rgb(255 255 255 / 0.2));
|
|
27
|
+
border-radius: 2px;
|
|
28
|
+
background: transparent;
|
|
29
|
+
cursor: pointer;
|
|
30
|
+
transition:
|
|
31
|
+
background 80ms ease,
|
|
32
|
+
border-color 80ms ease;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.et-rte-table-picker-cell--active {
|
|
36
|
+
border-color: var(--et-theme-color-primary-solid, currentColor);
|
|
37
|
+
background: color-mix(in srgb, var(--et-theme-color-primary-solid, currentColor) 35%, transparent);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.et-rte-table-picker-label {
|
|
41
|
+
font-size: 12px;
|
|
42
|
+
color: var(--et-surface-color-muted-solid, currentColor);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
@layer components {
|
|
2
|
+
.et-select-option.et-select-all-option {
|
|
3
|
+
.et-select-all-option-dash {
|
|
4
|
+
inline-size: 10px;
|
|
5
|
+
block-size: 2px;
|
|
6
|
+
border-radius: 1px;
|
|
7
|
+
background: currentColor;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
&:where([aria-checked='true'], [aria-checked='mixed']) .et-select-option-check {
|
|
11
|
+
opacity: 1;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
}
|