@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,63 @@
|
|
|
1
|
+
@layer components {
|
|
2
|
+
.et-overlay-origin-clone {
|
|
3
|
+
position: fixed;
|
|
4
|
+
margin: 0;
|
|
5
|
+
z-index: 999999;
|
|
6
|
+
pointer-events: none;
|
|
7
|
+
transform-origin: center center;
|
|
8
|
+
|
|
9
|
+
&.et-animation-enter-from {
|
|
10
|
+
transform: translate(var(--enter-from-translate-x, 0), var(--enter-from-translate-y, 0))
|
|
11
|
+
scale(var(--enter-from-scale-x, 1), var(--enter-from-scale-y, 1));
|
|
12
|
+
opacity: 1;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
&.et-animation-enter-active {
|
|
16
|
+
transition:
|
|
17
|
+
transform 400ms var(--ease-out-5),
|
|
18
|
+
opacity 100ms linear;
|
|
19
|
+
|
|
20
|
+
@supports (transition-timing-function: linear(0, 1)) {
|
|
21
|
+
transition:
|
|
22
|
+
transform 400ms var(--ease-spring-1),
|
|
23
|
+
opacity 100ms linear;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
&.et-animation-enter-to,
|
|
28
|
+
&.et-animation-enter-done {
|
|
29
|
+
transform: translate(var(--enter-to-translate-x, 0), var(--enter-to-translate-y, 0))
|
|
30
|
+
scale(var(--enter-to-scale-x, 1), var(--enter-to-scale-y, 1));
|
|
31
|
+
opacity: 0;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
&.et-animation-leave-from {
|
|
35
|
+
transform: translate(var(--leave-from-translate-x, 0), var(--leave-from-translate-y, 0))
|
|
36
|
+
scale(var(--leave-from-scale-x, 1), var(--leave-from-scale-y, 1));
|
|
37
|
+
opacity: 0;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
&.et-animation-leave-active {
|
|
41
|
+
transition:
|
|
42
|
+
transform 300ms var(--ease-in-out-5),
|
|
43
|
+
opacity 125ms 175ms linear;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
&.et-animation-leave-to,
|
|
47
|
+
&.et-animation-leave-done {
|
|
48
|
+
transform: translate(var(--leave-to-translate-x, 0), var(--leave-to-translate-y, 0))
|
|
49
|
+
scale(var(--leave-to-scale-x, 1), var(--leave-to-scale-y, 1));
|
|
50
|
+
opacity: 1;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
@media (prefers-reduced-motion: reduce) {
|
|
54
|
+
&.et-animation-enter-active {
|
|
55
|
+
transition: opacity 100ms linear;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
&.et-animation-leave-active {
|
|
59
|
+
transition: opacity 125ms 175ms linear;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
@layer components {
|
|
2
|
+
.et-overlay {
|
|
3
|
+
--_et-overlay-drag-handle-inline-size: 32px;
|
|
4
|
+
--_et-overlay-drag-handle-block-size: 4px;
|
|
5
|
+
--_et-overlay-drag-handle-block-margin: 22px;
|
|
6
|
+
--_et-overlay-drag-handle-color: var(--et-surface-border-solid, #565656);
|
|
7
|
+
--_et-overlay-drag-handle-radius: 5px;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
.et-overlay.et-with-default-animation {
|
|
11
|
+
/* Color of the overshoot filler painted past a sheet's docked edge (see the per-direction
|
|
12
|
+
box-shadows below). Sourced from the surface token — which the container always forces onto
|
|
13
|
+
the host by elevation — because most sheet content (e.g. a date picker) paints its background
|
|
14
|
+
on a nested element, leaving the host itself transparent, so `inherit` would paint nothing.
|
|
15
|
+
Falls back to transparent (no filler) for overlays opened without surface themes. */
|
|
16
|
+
--_et-overlay-overshoot-fill: var(--et-surface-background-solid, transparent);
|
|
17
|
+
|
|
18
|
+
&.et-overlay--bottom-sheet {
|
|
19
|
+
&.et-animation-enter-from,
|
|
20
|
+
&.et-animation-leave-to {
|
|
21
|
+
transform: translateY(100%) !important;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
&.et-animation-enter-active {
|
|
25
|
+
transition: transform 300ms var(--ease-out-5);
|
|
26
|
+
|
|
27
|
+
@supports (transition-timing-function: linear(0, 1)) {
|
|
28
|
+
transition: transform 300ms var(--ease-spring-1);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
&.et-animation-leave-active {
|
|
33
|
+
transition: transform 150ms var(--ease-in-5);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/* Hide the spring overshoot: the sheet momentarily springs past its docked edge, which
|
|
37
|
+
would reveal the page behind it. A solid, zero-blur offset box-shadow paints a 50px block
|
|
38
|
+
just past that edge in the surface color, filling the gap. A shadow (not a pseudo-element)
|
|
39
|
+
is used deliberately: sheets keep `overflow: hidden` to clip their rounded corners, and an
|
|
40
|
+
element's own box-shadow is not clipped by its own overflow — a child/`::after` would be. */
|
|
41
|
+
box-shadow: 0 50px 0 0 var(--_et-overlay-overshoot-fill);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
&.et-overlay--top-sheet {
|
|
45
|
+
&.et-animation-enter-from,
|
|
46
|
+
&.et-animation-leave-to {
|
|
47
|
+
transform: translateY(-100%) !important;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
&.et-animation-enter-active {
|
|
51
|
+
transition: transform 300ms var(--ease-out-5);
|
|
52
|
+
|
|
53
|
+
@supports (transition-timing-function: linear(0, 1)) {
|
|
54
|
+
transition: transform 300ms var(--ease-spring-1);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
&.et-animation-leave-active {
|
|
59
|
+
transition: transform 150ms var(--ease-in-5);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
box-shadow: 0 -50px 0 0 var(--_et-overlay-overshoot-fill);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/* Side sheets dock to a *logical* inline edge (the position strategy uses `start`/`end`), but
|
|
66
|
+
`translateX` and the overshoot shadow are physical — so the slide axis is driven by a sign that
|
|
67
|
+
flips with the writing direction. `-1` slides toward the physical left, `1` toward the right.
|
|
68
|
+
This has to agree with the drag-to-dismiss gesture, which resolves its logical direction the
|
|
69
|
+
same way (see `resolvePhysicalDirection` in `overlay-drag-to-dismiss.ts`). */
|
|
70
|
+
&.et-overlay--left-sheet {
|
|
71
|
+
--_et-overlay-sheet-slide-sign: -1;
|
|
72
|
+
|
|
73
|
+
&:dir(rtl) {
|
|
74
|
+
--_et-overlay-sheet-slide-sign: 1;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
&.et-animation-enter-from,
|
|
78
|
+
&.et-animation-leave-to {
|
|
79
|
+
transform: translateX(calc(100% * var(--_et-overlay-sheet-slide-sign))) !important;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
&.et-animation-enter-active {
|
|
83
|
+
transition: transform 300ms var(--ease-out-5);
|
|
84
|
+
|
|
85
|
+
@supports (transition-timing-function: linear(0, 1)) {
|
|
86
|
+
transition: transform 300ms var(--ease-spring-1);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
&.et-animation-leave-active {
|
|
91
|
+
transition: transform 150ms var(--ease-in-5);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
box-shadow: calc(50px * var(--_et-overlay-sheet-slide-sign)) 0 0 0 var(--_et-overlay-overshoot-fill);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
&.et-overlay--right-sheet {
|
|
98
|
+
--_et-overlay-sheet-slide-sign: 1;
|
|
99
|
+
|
|
100
|
+
&:dir(rtl) {
|
|
101
|
+
--_et-overlay-sheet-slide-sign: -1;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
&.et-animation-enter-from,
|
|
105
|
+
&.et-animation-leave-to {
|
|
106
|
+
transform: translateX(calc(100% * var(--_et-overlay-sheet-slide-sign))) !important;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
&.et-animation-enter-active {
|
|
110
|
+
transition: transform 300ms var(--ease-out-5);
|
|
111
|
+
|
|
112
|
+
@supports (transition-timing-function: linear(0, 1)) {
|
|
113
|
+
transition: transform 300ms var(--ease-spring-1);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
&.et-animation-leave-active {
|
|
118
|
+
transition: transform 150ms var(--ease-in-5);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
box-shadow: calc(50px * var(--_et-overlay-sheet-slide-sign)) 0 0 0 var(--_et-overlay-overshoot-fill);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
@media (prefers-reduced-motion: reduce) {
|
|
126
|
+
.et-overlay.et-with-default-animation {
|
|
127
|
+
&.et-overlay--bottom-sheet,
|
|
128
|
+
&.et-overlay--top-sheet,
|
|
129
|
+
&.et-overlay--left-sheet,
|
|
130
|
+
&.et-overlay--right-sheet {
|
|
131
|
+
&.et-animation-enter-active,
|
|
132
|
+
&.et-animation-leave-active {
|
|
133
|
+
transition-duration: 0ms;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
&.et-animation-enter-from,
|
|
137
|
+
&.et-animation-leave-to {
|
|
138
|
+
transform: none !important;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
@layer components {
|
|
2
|
+
/* Its own height token rather than the paginator's `--et-pagination-item-size`: that one is
|
|
3
|
+
`@property`-registered as inheriting with a 36px initial value, so it resolves everywhere — the
|
|
4
|
+
select would silently take 36px regardless of its own density, and would not follow a compact
|
|
5
|
+
paginator that lowered it on its own host anyway. Set this to line the two up exactly. */
|
|
6
|
+
@property --et-page-size-select-height {
|
|
7
|
+
syntax: '<length>';
|
|
8
|
+
inherits: true;
|
|
9
|
+
initial-value: 36px;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
:where(.et-page-size-select-host) {
|
|
13
|
+
display: inline-flex;
|
|
14
|
+
align-items: center;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/* Follows the paginator's coarse-pointer target so the two stay level on touch. Zero specificity, so
|
|
18
|
+
the `sm` rule below still wins. */
|
|
19
|
+
@media (pointer: coarse) {
|
|
20
|
+
:where(.et-page-size-select-host) {
|
|
21
|
+
--et-page-size-select-height: 44px;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.et-page-size-select-label {
|
|
26
|
+
display: inline-flex;
|
|
27
|
+
align-items: center;
|
|
28
|
+
gap: 8px;
|
|
29
|
+
font-size: 14px;
|
|
30
|
+
white-space: nowrap;
|
|
31
|
+
color: var(--et-surface-color-muted-solid, CanvasText);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/* The chevron is drawn over the control's trailing edge, so the field is the positioning context. */
|
|
35
|
+
.et-page-size-select-field {
|
|
36
|
+
position: relative;
|
|
37
|
+
display: inline-flex;
|
|
38
|
+
align-items: center;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/* The control itself reads as the paginator's own chrome — same radius, same border, same minimum
|
|
42
|
+
height — so the two sit level in a controls row without either being restyled at the call site.
|
|
43
|
+
The trailing padding leaves room for the chevron. */
|
|
44
|
+
.et-page-size-select-control {
|
|
45
|
+
appearance: none;
|
|
46
|
+
min-block-size: var(--et-page-size-select-height);
|
|
47
|
+
padding-block: 0;
|
|
48
|
+
padding-inline: 8px 26px;
|
|
49
|
+
font: inherit;
|
|
50
|
+
font-variant-numeric: tabular-nums;
|
|
51
|
+
color: var(--et-surface-color-solid, CanvasText);
|
|
52
|
+
background: transparent;
|
|
53
|
+
border: 1px solid var(--et-surface-border-solid, rgb(128 128 128 / 0.3));
|
|
54
|
+
border-radius: var(--et-pagination-radius, 8px);
|
|
55
|
+
cursor: pointer;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.et-page-size-select-chevron {
|
|
59
|
+
position: absolute;
|
|
60
|
+
inset-inline-end: 8px;
|
|
61
|
+
/* The picker is the select's; the chevron is decoration sitting on top of it. */
|
|
62
|
+
pointer-events: none;
|
|
63
|
+
color: var(--et-surface-color-muted-solid, CanvasText);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/* The dropdown the browser draws is outside this element, so it inherits nothing from the surface
|
|
67
|
+
theme — give the options a background that at least matches the app rather than the UA default. */
|
|
68
|
+
.et-page-size-select-control option {
|
|
69
|
+
color: var(--et-surface-color-solid, CanvasText);
|
|
70
|
+
background: var(--et-surface-background-solid, Canvas);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
@media (hover: hover) {
|
|
74
|
+
.et-page-size-select-control:hover {
|
|
75
|
+
background: color-mix(in srgb, var(--et-surface-interaction-solid, gray) 8%, transparent);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.et-page-size-select-control:focus-visible {
|
|
80
|
+
outline: 2px solid var(--et-theme-color-primary-solid, currentColor);
|
|
81
|
+
outline-offset: 2px;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/* Matches the paginator's own `sm` density, so a table footer can shrink both together. */
|
|
85
|
+
.et-page-size-select-host:where([data-size='sm']) .et-page-size-select-label {
|
|
86
|
+
font-size: 13px;
|
|
87
|
+
gap: 6px;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
.et-page-size-select-host:where([data-size='sm']) {
|
|
91
|
+
/* Level with the compact pager's 34px chevrons, which is what it usually sits beside. */
|
|
92
|
+
--et-page-size-select-height: 34px;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
.et-page-size-select-host:where([data-size='sm']) .et-page-size-select-control {
|
|
96
|
+
padding-inline: 6px 22px;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
.et-page-size-select-host:where([data-size='sm']) .et-page-size-select-chevron {
|
|
100
|
+
inset-inline-end: 6px;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
@layer components {
|
|
2
|
+
@property --et-pagination-item-size {
|
|
3
|
+
syntax: '<length>';
|
|
4
|
+
inherits: true;
|
|
5
|
+
initial-value: 36px;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
@property --et-pagination-gap {
|
|
9
|
+
syntax: '<length>';
|
|
10
|
+
inherits: true;
|
|
11
|
+
initial-value: 4px;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
@property --et-pagination-radius {
|
|
15
|
+
syntax: '<length>';
|
|
16
|
+
inherits: true;
|
|
17
|
+
initial-value: 8px;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
:where(.et-pagination-host) {
|
|
21
|
+
display: flex;
|
|
22
|
+
flex-wrap: wrap;
|
|
23
|
+
align-items: center;
|
|
24
|
+
gap: var(--et-pagination-gap);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/* The fit measures the host. Sized to its trimmed content, a flex item would never see room return. */
|
|
28
|
+
:where(.et-pagination-host[data-fit-width]) {
|
|
29
|
+
flex-grow: 1;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/* Touch gets the comfortable 44px target. `:where()` holds this at zero specificity so the `sm` and
|
|
33
|
+
compact rules below - which floor the size on purpose - still win over it. */
|
|
34
|
+
@media (pointer: coarse) {
|
|
35
|
+
:where(.et-pagination-host) {
|
|
36
|
+
--et-pagination-item-size: 44px;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/* Without this stacking context the hit areas below (z-index -1) would drop under the host's
|
|
40
|
+
own box and catch nothing; inside it they sit under every visible item, so they never take a
|
|
41
|
+
tap from a neighbour. */
|
|
42
|
+
.et-pagination-host {
|
|
43
|
+
isolation: isolate;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.et-pagination-host .et-pagination-button::before {
|
|
47
|
+
content: '';
|
|
48
|
+
position: absolute;
|
|
49
|
+
z-index: -1;
|
|
50
|
+
top: 50%;
|
|
51
|
+
left: 50%;
|
|
52
|
+
inline-size: max(100%, 44px);
|
|
53
|
+
block-size: max(100%, 44px);
|
|
54
|
+
translate: -50% -50%;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.et-pagination-list {
|
|
59
|
+
display: flex;
|
|
60
|
+
flex-wrap: wrap;
|
|
61
|
+
align-items: center;
|
|
62
|
+
gap: var(--et-pagination-gap);
|
|
63
|
+
margin: 0;
|
|
64
|
+
padding: 0;
|
|
65
|
+
list-style: none;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.et-pagination-item {
|
|
69
|
+
display: flex;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/* Square, compact cells. Scoped through the host so these beat the button's own
|
|
73
|
+
`.et-button:where([data-size='sm'])` size rule (two classes vs one) — setting
|
|
74
|
+
`--et-button-padding` from a single-class selector loses to it, which is what used to leave the
|
|
75
|
+
chevrons 40×34 instead of square. */
|
|
76
|
+
.et-pagination-host .et-pagination-button {
|
|
77
|
+
--et-button-padding: 0;
|
|
78
|
+
--et-button-border-radius: var(--et-pagination-radius);
|
|
79
|
+
|
|
80
|
+
/* Page numbers grow past the square only when the digits demand it (100+). */
|
|
81
|
+
padding-inline: 4px;
|
|
82
|
+
min-inline-size: var(--et-pagination-item-size);
|
|
83
|
+
min-block-size: var(--et-pagination-item-size);
|
|
84
|
+
font-variant-numeric: tabular-nums;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/* Icon-only controls (first/previous/next/last) hold an exact square: there is no text to grow them,
|
|
88
|
+
so a fixed inline size keeps every chevron cell identical to the item size. */
|
|
89
|
+
.et-pagination-host .et-pagination-button--control {
|
|
90
|
+
padding-inline: 0;
|
|
91
|
+
inline-size: var(--et-pagination-item-size);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
.et-pagination-ellipsis {
|
|
95
|
+
display: inline-flex;
|
|
96
|
+
align-items: center;
|
|
97
|
+
justify-content: center;
|
|
98
|
+
min-inline-size: var(--et-pagination-item-size);
|
|
99
|
+
block-size: var(--et-pagination-item-size);
|
|
100
|
+
color: var(--et-surface-color-muted-solid, CanvasText);
|
|
101
|
+
-webkit-user-select: none;
|
|
102
|
+
user-select: none;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
.et-pagination-range {
|
|
106
|
+
margin: 0;
|
|
107
|
+
font-size: 14px;
|
|
108
|
+
font-variant-numeric: tabular-nums;
|
|
109
|
+
color: var(--et-surface-color-muted-solid, CanvasText);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/* Both readouts stack their live text over an invisible copy of the widest string they can ever show
|
|
113
|
+
(see `widestRangeStatus`), in a single grid cell — so the cell is sized by the wider of the two and
|
|
114
|
+
the readout's box stays put as the page changes, instead of nudging whatever sits beside it. */
|
|
115
|
+
.et-pagination-range,
|
|
116
|
+
.et-pagination-status {
|
|
117
|
+
display: inline-grid;
|
|
118
|
+
grid-template-columns: auto;
|
|
119
|
+
justify-items: center;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
.et-pagination-readout-sizer,
|
|
123
|
+
.et-pagination-readout-text {
|
|
124
|
+
grid-area: 1 / 1;
|
|
125
|
+
white-space: nowrap;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
.et-pagination-readout-sizer {
|
|
129
|
+
visibility: hidden;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
.et-pagination-jump {
|
|
133
|
+
display: inline-flex;
|
|
134
|
+
align-items: center;
|
|
135
|
+
gap: 8px;
|
|
136
|
+
font-size: 14px;
|
|
137
|
+
color: var(--et-surface-color-muted-solid, CanvasText);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
.et-pagination-jump-input {
|
|
141
|
+
inline-size: 64px;
|
|
142
|
+
min-block-size: var(--et-pagination-item-size);
|
|
143
|
+
padding-inline: 8px;
|
|
144
|
+
font: inherit;
|
|
145
|
+
font-variant-numeric: tabular-nums;
|
|
146
|
+
color: var(--et-surface-color-solid, CanvasText);
|
|
147
|
+
background: transparent;
|
|
148
|
+
border: 1px solid var(--et-surface-border-solid, rgb(128 128 128 / 0.3));
|
|
149
|
+
border-radius: var(--et-pagination-radius);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
.et-pagination-jump-input:where(:focus-visible) {
|
|
153
|
+
outline: 2px solid var(--et-theme-color-primary-solid, currentColor);
|
|
154
|
+
outline-offset: 2px;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/* Compact density: smaller cells with tighter padding, so the paginator sits closer to table-row
|
|
158
|
+
height. Deliberately below the comfortable touch size — opt in only where space is tight. */
|
|
159
|
+
.et-pagination-host:where([data-size='sm']) {
|
|
160
|
+
--et-pagination-item-size: 28px;
|
|
161
|
+
--et-pagination-gap: 4px;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/* Only the block padding and text size change — inline padding and the square geometry stay with the
|
|
165
|
+
base rule above, so `sm` cells are smaller squares rather than a different shape. */
|
|
166
|
+
.et-pagination-host:where([data-size='sm']) .et-pagination-button {
|
|
167
|
+
--et-button-padding: 2px 0;
|
|
168
|
+
|
|
169
|
+
font-size: 13px;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/* Compact pager: when the paginator's own width can't hold a comfortable numbered window, it renders
|
|
173
|
+
just previous/next around a "page X of Y" readout (see `compact` in the component). Driven by the
|
|
174
|
+
measured container width — not a viewport media query — so it collapses per instance, wherever it
|
|
175
|
+
sits. The remaining controls grow into roomy touch targets since there are only two of them. */
|
|
176
|
+
.et-pagination-host:where([data-compact]) {
|
|
177
|
+
/* Modest chevrons that sit level with a small page-size select — floored so touch stays usable
|
|
178
|
+
without the bulky whitespace of a full 44px target. */
|
|
179
|
+
--et-pagination-item-size: 34px;
|
|
180
|
+
--et-pagination-gap: 2px;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
.et-pagination-status {
|
|
184
|
+
align-items: center;
|
|
185
|
+
min-block-size: var(--et-pagination-item-size);
|
|
186
|
+
padding-inline: 6px;
|
|
187
|
+
font-size: 14px;
|
|
188
|
+
font-variant-numeric: tabular-nums;
|
|
189
|
+
white-space: nowrap;
|
|
190
|
+
color: var(--et-surface-color-muted-solid, CanvasText);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
@layer components {
|
|
2
|
+
.et-picture {
|
|
3
|
+
display: block;
|
|
4
|
+
|
|
5
|
+
.et-picture-figure {
|
|
6
|
+
/* A <figure> carries a UA margin, which is never what a layout component wants. */
|
|
7
|
+
margin: 0;
|
|
8
|
+
display: block;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.et-picture-picture {
|
|
12
|
+
display: block;
|
|
13
|
+
/* The containing block for the placeholder / error slots. */
|
|
14
|
+
position: relative;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.et-picture-img {
|
|
18
|
+
display: block;
|
|
19
|
+
max-inline-size: 100%;
|
|
20
|
+
/* Given `width`/`height` for CLS, the intrinsic ratio has to be kept once CSS resizes the box. */
|
|
21
|
+
block-size: auto;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
&:where([data-aspect-ratio]) {
|
|
25
|
+
.et-picture-picture {
|
|
26
|
+
aspect-ratio: var(--_et-picture-aspect-ratio);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.et-picture-img {
|
|
30
|
+
inline-size: 100%;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.et-picture-slot {
|
|
35
|
+
position: absolute;
|
|
36
|
+
inset: 0;
|
|
37
|
+
display: grid;
|
|
38
|
+
place-items: center;
|
|
39
|
+
/* Nothing is painted here by the component — the slot's content brings its own look. */
|
|
40
|
+
overflow: hidden;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/* With `fit`, the host is the box: every wrapper stretches to it so the img has something definite to fit
|
|
44
|
+
into, and the img fills it instead of sizing itself. */
|
|
45
|
+
&:where([data-fit]) {
|
|
46
|
+
.et-picture-figure,
|
|
47
|
+
.et-picture-picture {
|
|
48
|
+
inline-size: 100%;
|
|
49
|
+
block-size: 100%;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.et-picture-img {
|
|
53
|
+
inline-size: 100%;
|
|
54
|
+
block-size: 100%;
|
|
55
|
+
object-fit: var(--_et-picture-fit);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/* A broken image still occupies its box behind the error slot, showing the UA's broken icon through it.
|
|
60
|
+
Only hidden when there is a slot to replace it: without one, the browser's own broken-image rendering
|
|
61
|
+
(which shows the alt text) is more useful than an empty box. */
|
|
62
|
+
&:where([data-state='error']):has(.et-picture-slot) .et-picture-img {
|
|
63
|
+
visibility: hidden;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|