@ethlete/components 1.0.0-next.68 → 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.
Files changed (239) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/design/button.ts +57 -0
  3. package/design/form-field.ts +210 -0
  4. package/design/select.ts +110 -0
  5. package/fesm2022/ethlete-components-testing.mjs +3 -1
  6. package/fesm2022/ethlete-components-testing.mjs.map +1 -1
  7. package/fesm2022/ethlete-components.mjs +1543 -352
  8. package/fesm2022/ethlete-components.mjs.map +1 -1
  9. package/package.json +20 -14
  10. package/src/lib/accordion/accordion-group.component.css +12 -0
  11. package/src/lib/accordion/accordion.component.css +185 -0
  12. package/src/lib/avatar/avatar-group.component.css +31 -0
  13. package/src/lib/avatar/avatar.component.css +75 -0
  14. package/src/lib/badge/badge.component.css +111 -0
  15. package/src/lib/banner/banner.component.css +94 -0
  16. package/src/lib/bracket/bracket-default-continue.component.css +29 -0
  17. package/src/lib/bracket/bracket-default-final-match.component.css +76 -0
  18. package/src/lib/bracket/bracket-default-match.component.css +21 -0
  19. package/src/lib/bracket/bracket-default-round-header.component.css +36 -0
  20. package/src/lib/bracket/bracket-participants.component.css +13 -0
  21. package/src/lib/bracket/bracket-pick-card.component.css +232 -0
  22. package/src/lib/bracket/bracket-rounds-list.component.css +75 -0
  23. package/src/lib/bracket/bracket-skeleton.component.css +55 -0
  24. package/src/lib/bracket/bracket.component.css +102 -0
  25. package/src/lib/bracket/layouts/swiss/bracket-swiss-styles.component.css +10 -0
  26. package/src/lib/breadcrumb/breadcrumb-overflow.component.css +38 -0
  27. package/src/lib/breadcrumb/breadcrumb.component.css +120 -0
  28. package/src/lib/button/button-properties-styles.component.css +143 -0
  29. package/src/lib/button/button.component.css +196 -0
  30. package/src/lib/button/fab.component.css +252 -0
  31. package/src/lib/button/icon-button.component.css +143 -0
  32. package/src/lib/button/split-button.component.css +77 -0
  33. package/src/lib/button/text-button.component.css +140 -0
  34. package/src/lib/button/window-control-button.component.css +158 -0
  35. package/src/lib/calendar/calendar-coarse-grid-styles.component.css +29 -0
  36. package/src/lib/calendar/calendar-comparison-band-styles.component.css +36 -0
  37. package/src/lib/calendar/calendar-week-numbers-styles.component.css +32 -0
  38. package/src/lib/calendar/calendar.component.css +366 -0
  39. package/src/lib/card/card.component.css +39 -0
  40. package/src/lib/carousel/carousel-autoplay-styles.component.css +166 -0
  41. package/src/lib/carousel/carousel-transition-styles.component.css +179 -0
  42. package/src/lib/carousel/carousel.component.css +142 -0
  43. package/src/lib/chart/bar-chart.component.css +176 -0
  44. package/src/lib/chart/chart-axis.component.css +40 -0
  45. package/src/lib/chart/chart-grid.component.css +6 -0
  46. package/src/lib/chart/chart-legend.component.css +46 -0
  47. package/src/lib/chart/chart-tooltip.component.css +34 -0
  48. package/src/lib/chart/line-chart-tooltip.component.css +51 -0
  49. package/src/lib/chart/line-chart.component.css +234 -0
  50. package/src/lib/chart/pie-chart.component.css +176 -0
  51. package/src/lib/chart/sankey-chart.component.css +221 -0
  52. package/src/lib/chip/chip.component.css +155 -0
  53. package/src/lib/command-palette/command-palette-item.component.css +94 -0
  54. package/src/lib/command-palette/command-palette.component.css +100 -0
  55. package/src/lib/description-list/description-list.component.css +77 -0
  56. package/src/lib/divider/divider.component.css +36 -0
  57. package/src/lib/empty-state/empty-state.component.css +73 -0
  58. package/src/lib/floating-action/floating-action-styles.component.css +78 -0
  59. package/src/lib/focus-ring/focus-ring-styles.component.css +13 -0
  60. package/src/lib/forms/cascader/cascader-breadcrumb-styles.component.css +98 -0
  61. package/src/lib/forms/cascader/cascader-panel.component.css +386 -0
  62. package/src/lib/forms/cascader/cascader-sheet-styles.component.css +241 -0
  63. package/src/lib/forms/cascader/cascader.component.css +52 -0
  64. package/src/lib/forms/checkbox/checkbox.component.css +247 -0
  65. package/src/lib/forms/choice-field/choice-field-card-styles.component.css +59 -0
  66. package/src/lib/forms/choice-field/choice-field.component.css +186 -0
  67. package/src/lib/forms/color-input/color-input.component.css +108 -0
  68. package/src/lib/forms/color-input/color-picker-panel.component.css +349 -0
  69. package/src/lib/forms/date-time/date-input/date-input.component.css +35 -0
  70. package/src/lib/forms/date-time/date-picker-panel.component.css +115 -0
  71. package/src/lib/forms/date-time/date-range-input/date-range-input.component.css +16 -0
  72. package/src/lib/forms/date-time/date-range-presets.component.css +60 -0
  73. package/src/lib/forms/date-time/date-time-input/date-time-input.component.css +151 -0
  74. package/src/lib/forms/date-time/date-time-range-input/date-time-range-input.component.css +121 -0
  75. package/src/lib/forms/date-time/duration-input/duration-input.component.css +88 -0
  76. package/src/lib/forms/date-time/range-input-shell-styles.component.css +55 -0
  77. package/src/lib/forms/date-time/time-input/time-input.component.css +35 -0
  78. package/src/lib/forms/date-time/time-range-input/time-range-input.component.css +16 -0
  79. package/src/lib/forms/dropzone/dropzone-item.component.css +51 -0
  80. package/src/lib/forms/dropzone/dropzone-preview-styles.component.css +67 -0
  81. package/src/lib/forms/dropzone/dropzone-readonly-styles.component.css +34 -0
  82. package/src/lib/forms/dropzone/dropzone.component.css +267 -0
  83. package/src/lib/forms/form-field/counter.component.css +25 -0
  84. package/src/lib/forms/form-field/form-field-control-suffix-styles.component.css +116 -0
  85. package/src/lib/forms/form-field/form-field-rich-text-styles.component.css +31 -0
  86. package/src/lib/forms/form-field/form-field-suffix-overlap-styles.component.css +66 -0
  87. package/src/lib/forms/form-field/form-field-text-shell-styles.component.css +312 -0
  88. package/src/lib/forms/form-field/form-field-textarea-styles.component.css +32 -0
  89. package/src/lib/forms/form-field/form-field.component.css +328 -0
  90. package/src/lib/forms/form-field/form-support-styles.component.css +102 -0
  91. package/src/lib/forms/form-field/headless/label.directive.css +25 -0
  92. package/src/lib/forms/form-field/hint.component.css +20 -0
  93. package/src/lib/forms/input/input.component.css +49 -0
  94. package/src/lib/forms/input/number-input.component.css +128 -0
  95. package/src/lib/forms/input/password-input.component.css +103 -0
  96. package/src/lib/forms/multi-language-rich-text-editor/multi-language-rich-text-editor.component.css +8 -0
  97. package/src/lib/forms/multi-language-rich-text-editor/tools/multi-language-rich-text-editor-language-tool.component.css +104 -0
  98. package/src/lib/forms/otp-input/otp-input.component.css +194 -0
  99. package/src/lib/forms/phone-input/phone-input.component.css +126 -0
  100. package/src/lib/forms/rating/rating.component.css +197 -0
  101. package/src/lib/forms/rich-text-editor/rich-text-content-styles.component.css +234 -0
  102. package/src/lib/forms/rich-text-editor/rich-text-editor-floating-toolbar.component.css +90 -0
  103. package/src/lib/forms/rich-text-editor/rich-text-editor-image-editor.component.css +172 -0
  104. package/src/lib/forms/rich-text-editor/rich-text-editor-link-editor.component.css +149 -0
  105. package/src/lib/forms/rich-text-editor/rich-text-editor-token-palette.component.css +18 -0
  106. package/src/lib/forms/rich-text-editor/rich-text-editor-token-popup.component.css +199 -0
  107. package/src/lib/forms/rich-text-editor/rich-text-editor.component.css +175 -0
  108. package/src/lib/forms/rich-text-editor/rich-text-viewer.component.css +6 -0
  109. package/src/lib/forms/rich-text-editor/tools/rich-text-editor-align-tool.component.css +5 -0
  110. package/src/lib/forms/rich-text-editor/tools/rich-text-editor-heading-tool.component.css +5 -0
  111. package/src/lib/forms/rich-text-editor/tools/rich-text-editor-image-styles.component.css +109 -0
  112. package/src/lib/forms/rich-text-editor/tools/rich-text-editor-table-styles.component.css +21 -0
  113. package/src/lib/forms/rich-text-editor/tools/rich-text-editor-table-tool.component.css +44 -0
  114. package/src/lib/forms/select/select-all-option.component.css +14 -0
  115. package/src/lib/forms/select/select-extras-styles.component.css +143 -0
  116. package/src/lib/forms/select/select-option-group.component.css +35 -0
  117. package/src/lib/forms/select/select-option-styles.component.css +137 -0
  118. package/src/lib/forms/select/select-panel.component.css +112 -0
  119. package/src/lib/forms/select/select.component.css +180 -0
  120. package/src/lib/forms/selection-card-styles.component.css +136 -0
  121. package/src/lib/forms/selection-list/checkbox-group/checkbox-group-select-all.component.css +89 -0
  122. package/src/lib/forms/selection-list/checkbox-group/checkbox-group.component.css +142 -0
  123. package/src/lib/forms/selection-list/checkbox-group/checkbox-option.component.css +153 -0
  124. package/src/lib/forms/selection-list/radio-group/radio-group.component.css +134 -0
  125. package/src/lib/forms/selection-list/radio-group/radio.component.css +137 -0
  126. package/src/lib/forms/selection-list/segmented-button-group/segmented-button-group.component.css +149 -0
  127. package/src/lib/forms/selection-list/segmented-button-group/segmented-button.component.css +180 -0
  128. package/src/lib/forms/slider/range-slider.component.css +348 -0
  129. package/src/lib/forms/slider/slider.component.css +342 -0
  130. package/src/lib/forms/switch/switch.component.css +187 -0
  131. package/src/lib/forms/tag-input/tag-input.component.css +54 -0
  132. package/src/lib/forms/textarea/textarea-autosize-styles.component.css +17 -0
  133. package/src/lib/forms/textarea/textarea.component.css +40 -0
  134. package/src/lib/grid/grid-debug.component.css +130 -0
  135. package/src/lib/grid/grid-item-default-actions.component.css +11 -0
  136. package/src/lib/grid/grid-item.component.css +172 -0
  137. package/src/lib/grid/grid.component.css +56 -0
  138. package/src/lib/icon/headless/icon-styles.component.css +7 -0
  139. package/src/lib/kbd/kbd.component.css +62 -0
  140. package/src/lib/loader/brand-loader/brand-loader.component.css +130 -0
  141. package/src/lib/loader/progress-bar/progress-bar.component.css +176 -0
  142. package/src/lib/loader/spinner/spinner.component.css +216 -0
  143. package/src/lib/masonry/masonry-styles.component.css +84 -0
  144. package/src/lib/match/match-card.component.css +441 -0
  145. package/src/lib/match/match-participant.component.css +137 -0
  146. package/src/lib/match/match-score.component.css +74 -0
  147. package/src/lib/menu/menu-group-label.component.css +12 -0
  148. package/src/lib/menu/menu-item-shortcut.component.css +10 -0
  149. package/src/lib/menu/menu-item-submenu-icon.component.css +18 -0
  150. package/src/lib/menu/menu-item.component.css +32 -0
  151. package/src/lib/menu/menu-search-styles.component.css +56 -0
  152. package/src/lib/menu/menu-selection-item.component.css +88 -0
  153. package/src/lib/menu/menu-separator.component.css +9 -0
  154. package/src/lib/menu/menu.component.css +296 -0
  155. package/src/lib/notification/notification-stack.component.css +114 -0
  156. package/src/lib/notification/notification.component.css +271 -0
  157. package/src/lib/overlay/alert-dialog/alert-dialog.component.css +45 -0
  158. package/src/lib/overlay/floating-panel-styles.component.css +71 -0
  159. package/src/lib/overlay/floating-tip-styles.component.css +78 -0
  160. package/src/lib/overlay/overlay-container.component.css +167 -0
  161. package/src/lib/overlay/overlay-main-styles.component.css +105 -0
  162. package/src/lib/overlay/overlay-template-host.component.css +7 -0
  163. package/src/lib/overlay/routing/overlay-route-header-template-outlet.component.css +36 -0
  164. package/src/lib/overlay/routing/overlay-router-outlet.component.css +207 -0
  165. package/src/lib/overlay/routing/overlay-shared-route-template-outlet.component.css +5 -0
  166. package/src/lib/overlay/sidebar/overlay-sidebar.component.css +16 -0
  167. package/src/lib/overlay/strategies/anchored-dialog-styles.component.css +51 -0
  168. package/src/lib/overlay/strategies/dialog-styles.component.css +50 -0
  169. package/src/lib/overlay/strategies/full-screen-dialog-styles.component.css +83 -0
  170. package/src/lib/overlay/strategies/overlay-arrow-styles.component.css +112 -0
  171. package/src/lib/overlay/strategies/overlay-origin-clone.component.css +63 -0
  172. package/src/lib/overlay/strategies/sheet-styles.component.css +143 -0
  173. package/src/lib/pagination/page-size-select.component.css +102 -0
  174. package/src/lib/pagination/pagination.component.css +192 -0
  175. package/src/lib/picture/picture.component.css +66 -0
  176. package/src/lib/progress-steps/progress-step.component.css +187 -0
  177. package/src/lib/progress-steps/progress-steps.component.css +26 -0
  178. package/src/lib/query-error/query-error.component.css +21 -0
  179. package/src/lib/scheduler/scheduler-agenda-view.component.css +97 -0
  180. package/src/lib/scheduler/scheduler-appointment-drag-styles.component.css +56 -0
  181. package/src/lib/scheduler/scheduler-appointment-styles.component.css +111 -0
  182. package/src/lib/scheduler/scheduler-edit-color.component.css +16 -0
  183. package/src/lib/scheduler/scheduler-edit-surface-actions.component.css +14 -0
  184. package/src/lib/scheduler/scheduler-edit-surface-breadcrumb.component.css +26 -0
  185. package/src/lib/scheduler/scheduler-edit-surface-children.component.css +57 -0
  186. package/src/lib/scheduler/scheduler-edit-surface-fields.component.css +11 -0
  187. package/src/lib/scheduler/scheduler-edit-surface-footer.component.css +7 -0
  188. package/src/lib/scheduler/scheduler-edit-surface-header.component.css +15 -0
  189. package/src/lib/scheduler/scheduler-edit-time-range.component.css +11 -0
  190. package/src/lib/scheduler/scheduler-month-view.component.css +143 -0
  191. package/src/lib/scheduler/scheduler-time-grid-view.component.css +260 -0
  192. package/src/lib/scheduler/scheduler.component.css +87 -0
  193. package/src/lib/scrollable/headless/scrollable-buttons.component.css +122 -0
  194. package/src/lib/scrollable/headless/scrollable-footer.css +25 -0
  195. package/src/lib/scrollable/headless/scrollable-masks.component.css +112 -0
  196. package/src/lib/scrollable/headless/scrollable-navigation.component.css +94 -0
  197. package/src/lib/scrollable/scrollable.component.css +192 -0
  198. package/src/lib/scrollbar/scrollbar.component.css +110 -0
  199. package/src/lib/skeleton/skeleton.component.css +108 -0
  200. package/src/lib/standings/standings-pick.component.css +172 -0
  201. package/src/lib/standings/standings.component.css +201 -0
  202. package/src/lib/stat-tile/stat-tile-sparkline.component.css +49 -0
  203. package/src/lib/stat-tile/stat-tile.component.css +111 -0
  204. package/src/lib/stream/pip/pip-chrome.component.css +96 -0
  205. package/src/lib/stream/pip/pip-player.component.css +40 -0
  206. package/src/lib/stream/pip/pip-window.component.css +222 -0
  207. package/src/lib/stream/stream-manager-styles.component.css +10 -0
  208. package/src/lib/stream/stream-overlay-card-styles.component.css +43 -0
  209. package/src/lib/stream/stream-player-slot-styles.component.css +14 -0
  210. package/src/lib/table/table-column-chooser.component.css +17 -0
  211. package/src/lib/table/table-column-menu-trigger.component.css +31 -0
  212. package/src/lib/table/table-detail-styles.component.css +103 -0
  213. package/src/lib/table/table-drag-scroll-styles.component.css +18 -0
  214. package/src/lib/table/table-expander-cell.component.css +58 -0
  215. package/src/lib/table/table-filter-trigger.component.css +44 -0
  216. package/src/lib/table/table-group-header-row.component.css +38 -0
  217. package/src/lib/table/table-inline-edit-styles.component.css +20 -0
  218. package/src/lib/table/table-page-sticky-header-styles.component.css +77 -0
  219. package/src/lib/table/table-reorder-overlay.component.css +42 -0
  220. package/src/lib/table/table-resize-grip.component.css +65 -0
  221. package/src/lib/table/table-row-box-styles.component.css +260 -0
  222. package/src/lib/table/table-select-cell.component.css +89 -0
  223. package/src/lib/table/table-skeleton-rows.component.css +19 -0
  224. package/src/lib/table/table-sort-priority-styles.component.css +15 -0
  225. package/src/lib/table/table-sticky-columns-styles.component.css +80 -0
  226. package/src/lib/table/table-virtual-scroll-styles.component.css +9 -0
  227. package/src/lib/table/table.component.css +829 -0
  228. package/src/lib/tabs/nav-tabs/nav-tab-link-styles.component.css +33 -0
  229. package/src/lib/tabs/tab-bar-styles.component.css +173 -0
  230. package/src/lib/tabs/tab-scale-styles.component.css +61 -0
  231. package/src/lib/time-picker/time-picker.component.css +220 -0
  232. package/src/lib/timeline/timeline-item.component.css +116 -0
  233. package/src/lib/timeline/timeline.component.css +7 -0
  234. package/src/lib/toggletip/toggletip.component.css +83 -0
  235. package/src/lib/toolbar/toolbar.component.css +40 -0
  236. package/src/lib/tooltip/tooltip.component.css +64 -0
  237. package/src/lib/tree/tree.component.css +221 -0
  238. package/types/ethlete-components-testing.d.ts +1 -1
  239. package/types/ethlete-components.d.ts +275 -36
@@ -0,0 +1,222 @@
1
+ @layer components {
2
+ @property --et-pip-border-radius {
3
+ syntax: '<length>';
4
+ inherits: true;
5
+ initial-value: 8px;
6
+ }
7
+
8
+ @property --et-pip-backdrop-blur {
9
+ syntax: '<length>';
10
+ inherits: true;
11
+ initial-value: 4px;
12
+ }
13
+
14
+ @property --et-pip-title-bar-height {
15
+ syntax: '<length>';
16
+ inherits: true;
17
+ initial-value: 32px;
18
+ }
19
+
20
+ et-pip-window {
21
+ position: fixed;
22
+ right: var(--et-pip-window-offset-right, 24px);
23
+ bottom: var(--et-pip-window-offset-bottom, 24px);
24
+ z-index: var(--et-pip-window-z-index, 1000);
25
+ display: flex;
26
+ flex-direction: column;
27
+ touch-action: none;
28
+ color: var(--et-surface-color-solid, inherit);
29
+ --et-resize-handles-side-top: var(--et-pip-title-bar-h);
30
+
31
+ &::after {
32
+ content: '';
33
+ display: block;
34
+ position: absolute;
35
+ inset: 0;
36
+ background: var(--et-pip-bg, color-mix(in srgb, var(--et-surface-background-solid, rgb(0 0 0)) 60%, transparent));
37
+ backdrop-filter: blur(var(--et-pip-backdrop-blur));
38
+ z-index: -1;
39
+ transform: translateY(var(--et-pip-title-bar-h));
40
+ transition: transform 0.2s ease;
41
+ pointer-events: none;
42
+ border-radius: var(--et-pip-border-radius);
43
+ }
44
+ }
45
+
46
+ et-pip-window.et-pip-window--dragging .et-pip-window__title-bar {
47
+ cursor: grabbing;
48
+ }
49
+
50
+ .et-pip-window__title-bar {
51
+ height: var(--et-pip-title-bar-height);
52
+ display: flex;
53
+ align-items: center;
54
+ gap: 4px;
55
+ padding: 0 6px;
56
+ transform: translateY(100%);
57
+ transition:
58
+ transform 0.2s ease,
59
+ opacity 0.2s ease;
60
+ pointer-events: none;
61
+ opacity: 0;
62
+ cursor: grab;
63
+ border-radius: var(--et-pip-border-radius) var(--et-pip-border-radius) 0 0;
64
+ }
65
+ .et-pip-window__title-bar:focus-visible {
66
+ outline: none;
67
+ box-shadow: inset 0 0 0 2px
68
+ color-mix(in srgb, var(--et-surface-interaction-solid, rgb(255 255 255)) 60%, transparent);
69
+ }
70
+
71
+ .et-pip-window__title-bar-spacer {
72
+ flex: 1;
73
+ }
74
+
75
+ et-pip-window:hover,
76
+ et-pip-window.et-pip-window--dragging,
77
+ et-pip-window.et-pip-window--collapsed,
78
+ et-pip-window.et-pip-window--title-bar-forced,
79
+ et-pip-window:has(.et-pip-window__title-bar :focus-visible),
80
+ et-pip-window:has(.et-pip-window__title-bar:focus-visible) {
81
+ .et-pip-window__title-bar {
82
+ transform: translateY(0);
83
+ pointer-events: auto;
84
+ opacity: 1;
85
+ }
86
+
87
+ &::after {
88
+ transform: translateY(0);
89
+ }
90
+ }
91
+
92
+ @media (hover: none) {
93
+ .et-pip-window__title-bar {
94
+ transform: translateY(0);
95
+ pointer-events: auto;
96
+ animation: etPipWindowTitleBarSlideIn 0.5s ease;
97
+ opacity: 1;
98
+ }
99
+
100
+ .et-pip-window__content {
101
+ border-radius: 0 0 var(--et-pip-border-radius) var(--et-pip-border-radius);
102
+ }
103
+ }
104
+
105
+ @keyframes etPipWindowTitleBarSlideIn {
106
+ from {
107
+ transform: translateY(100%);
108
+ opacity: 0;
109
+ }
110
+ to {
111
+ transform: translateY(0);
112
+ opacity: 1;
113
+ }
114
+ }
115
+
116
+ .et-pip-window__content {
117
+ flex: 1;
118
+ min-height: 0;
119
+ position: relative;
120
+ overflow: hidden;
121
+ aspect-ratio: var(--et-pip-content-ratio, calc(16 / 9));
122
+ border-radius: var(--et-pip-border-radius);
123
+ transition: border-radius 0.2s ease;
124
+ }
125
+
126
+ et-pip-window:hover .et-pip-window__content,
127
+ et-pip-window.et-pip-window--dragging .et-pip-window__content,
128
+ et-pip-window.et-pip-window--collapsed .et-pip-window__content,
129
+ et-pip-window.et-pip-window--title-bar-forced .et-pip-window__content,
130
+ et-pip-window:has(.et-pip-window__title-bar :focus-visible) .et-pip-window__content,
131
+ et-pip-window:has(.et-pip-window__title-bar:focus-visible) .et-pip-window__content {
132
+ border-radius: 0 0 var(--et-pip-border-radius) var(--et-pip-border-radius);
133
+ }
134
+
135
+ .et-pip-window__collapse-overlay {
136
+ position: absolute;
137
+ inset: 0;
138
+ z-index: 4;
139
+ cursor: grab;
140
+ }
141
+
142
+ .et-pip-interacting iframe,
143
+ .et-pip-interacting [contenteditable] {
144
+ pointer-events: none !important;
145
+ -webkit-user-select: none !important;
146
+ user-select: none !important;
147
+ }
148
+
149
+ et-pip-window.et-pip-window--positioned {
150
+ top: 0 !important;
151
+ left: 0 !important;
152
+ right: auto !important;
153
+ bottom: auto !important;
154
+ }
155
+
156
+ et-pip-window.et-pip-window--mode-transitioning {
157
+ transition:
158
+ width 250ms cubic-bezier(0.4, 0, 0.2, 1),
159
+ height 250ms cubic-bezier(0.4, 0, 0.2, 1);
160
+ }
161
+
162
+ et-pip-window .et-resize-handle::before {
163
+ content: '';
164
+ position: absolute;
165
+ background: color-mix(in srgb, var(--et-surface-color-solid, rgb(255 255 255)) 65%, transparent);
166
+ border-radius: 3px;
167
+ opacity: 0;
168
+ transition: opacity 0.15s 0s;
169
+ pointer-events: none;
170
+ }
171
+
172
+ et-pip-window .et-resize-handle:hover::before {
173
+ opacity: 1;
174
+ transition: opacity 0.15s 0.4s;
175
+ }
176
+
177
+ et-pip-window .et-resize-handle--s::before {
178
+ height: 3px;
179
+ left: 10px;
180
+ right: 10px;
181
+ bottom: 1px;
182
+ }
183
+
184
+ et-pip-window .et-resize-handle--e::before {
185
+ width: 3px;
186
+ top: 10px;
187
+ bottom: 10px;
188
+ right: 1px;
189
+ }
190
+
191
+ et-pip-window .et-resize-handle--w::before {
192
+ width: 3px;
193
+ top: 10px;
194
+ bottom: 10px;
195
+ left: 1px;
196
+ }
197
+
198
+ et-pip-window .et-resize-handle--se::before {
199
+ width: 8px;
200
+ height: 8px;
201
+ bottom: 2px;
202
+ right: 2px;
203
+ border-radius: 1px 1px 3px 1px;
204
+ }
205
+
206
+ et-pip-window .et-resize-handle--sw::before {
207
+ width: 8px;
208
+ height: 8px;
209
+ bottom: 2px;
210
+ left: 2px;
211
+ border-radius: 1px 1px 1px 3px;
212
+ }
213
+
214
+ et-pip-window et-resize-handles[data-active-edge='s'] .et-resize-handle--s::before,
215
+ et-pip-window et-resize-handles[data-active-edge='e'] .et-resize-handle--e::before,
216
+ et-pip-window et-resize-handles[data-active-edge='w'] .et-resize-handle--w::before,
217
+ et-pip-window et-resize-handles[data-active-edge='se'] .et-resize-handle--se::before,
218
+ et-pip-window et-resize-handles[data-active-edge='sw'] .et-resize-handle--sw::before {
219
+ opacity: 1;
220
+ transition: none;
221
+ }
222
+ }
@@ -0,0 +1,10 @@
1
+ @layer components {
2
+ .et-stream-manager {
3
+ position: fixed;
4
+ top: -9999px;
5
+ left: -9999px;
6
+ width: 1px;
7
+ height: 1px;
8
+ overflow: hidden;
9
+ }
10
+ }
@@ -0,0 +1,43 @@
1
+ @layer components {
2
+ .et-stream-consent-card,
3
+ .et-stream-player-error-card,
4
+ .et-pip-slot-placeholder-card {
5
+ display: flex;
6
+ flex-direction: column;
7
+ align-items: center;
8
+ gap: var(--et-stream-overlay-card-gap, 12px);
9
+ padding: var(--et-stream-overlay-card-padding, 32px);
10
+ border-radius: var(--et-stream-overlay-card-border-radius, 16px);
11
+ max-width: 36rem;
12
+ text-align: center;
13
+ background: var(--et-surface-background-solid, inherit);
14
+ }
15
+
16
+ .et-stream-consent-icon,
17
+ .et-stream-player-error-icon,
18
+ .et-pip-slot-placeholder-icon {
19
+ width: var(--et-stream-overlay-card-icon-size, 36px);
20
+ height: var(--et-stream-overlay-card-icon-size, 36px);
21
+ color: var(--et-surface-color-subtle-solid, currentColor);
22
+ }
23
+
24
+ .et-stream-consent-heading,
25
+ .et-stream-player-error-heading {
26
+ margin: 0;
27
+ font-size: var(--et-stream-overlay-card-heading-size, 16px);
28
+ font-weight: var(--et-stream-overlay-card-heading-weight, 600);
29
+ line-height: var(--et-stream-overlay-card-heading-line-height, 122%);
30
+ letter-spacing: var(--et-stream-overlay-card-heading-letter-spacing, 0.2px);
31
+ color: var(--et-surface-color-solid, currentColor);
32
+ }
33
+
34
+ .et-stream-consent-description,
35
+ .et-stream-player-error-description,
36
+ .et-pip-slot-placeholder-message {
37
+ margin: 0;
38
+ font-size: var(--et-stream-overlay-card-description-size, 14px);
39
+ font-weight: var(--et-stream-overlay-card-description-weight, 400);
40
+ line-height: var(--et-stream-overlay-card-description-line-height, 150%);
41
+ color: var(--et-surface-color-muted-solid, currentColor);
42
+ }
43
+ }
@@ -0,0 +1,14 @@
1
+ @layer components {
2
+ @property --et-stream-player-slot-radius {
3
+ syntax: '<length>';
4
+ inherits: false;
5
+ initial-value: 12px;
6
+ }
7
+
8
+ .et-stream-player-slot {
9
+ position: relative;
10
+ display: block;
11
+ overflow: hidden;
12
+ border-radius: var(--et-stream-player-slot-radius);
13
+ }
14
+ }
@@ -0,0 +1,17 @@
1
+ @layer components {
2
+ /* The stamped host is layout-transparent so the trigger sits directly in whatever row it is dropped
3
+ into — a footer bar, a toolbar — rather than adding a wrapper box of its own. */
4
+ et-table-column-chooser {
5
+ display: contents;
6
+ }
7
+
8
+ .et-table-column-chooser {
9
+ display: inline-flex;
10
+ flex: none;
11
+ }
12
+
13
+ .et-table-column-chooser-icon {
14
+ inline-size: var(--et-menu-item-icon-size, 16px);
15
+ block-size: var(--et-menu-item-icon-size, 16px);
16
+ }
17
+ }
@@ -0,0 +1,31 @@
1
+ @layer components {
2
+ /* The stamped host is layout-transparent so the trigger is the header cell's own flex item, sitting
3
+ after the (growing) label at the trailing edge. */
4
+ et-table-column-menu-trigger {
5
+ display: contents;
6
+ }
7
+
8
+ .et-table-column-menu {
9
+ display: inline-flex;
10
+ flex: none;
11
+ }
12
+
13
+ /* Permanently visible, like the filter trigger: a column's actions shouldn't have to be discovered
14
+ by hovering, and a control that appears on hover makes the header twitch under the pointer.
15
+
16
+ Scoped through the header cell so it beats the button's own single-class `--_et-button-color`
17
+ rule: a transparent button paints itself in the accent ink, but in this table accent means
18
+ *active* (a sorted arrow, a filtered column), so a resting control has to read as header chrome. */
19
+ .et-table-header-cell .et-table-column-menu-trigger {
20
+ color: var(--et-surface-color-muted-solid, currentColor);
21
+ }
22
+
23
+ .et-table-column-menu-icon {
24
+ inline-size: var(--et-menu-item-icon-size, 16px);
25
+ block-size: var(--et-menu-item-icon-size, 16px);
26
+ }
27
+
28
+ .et-table-column-menu-icon:where(.et-table-column-menu-icon--down) {
29
+ transform: rotate(180deg);
30
+ }
31
+ }
@@ -0,0 +1,103 @@
1
+ @layer components {
2
+ /* Detail-row chrome and its grow-open animation, mounted by etTableRowExpansion. Sizeable — the
3
+ keyframes alone are most of it — and useless to a table that never expands a row.
4
+
5
+ Detail rows grow open: the row is a one-track grid whose row animates between `0fr` and `1fr`, so
6
+ the rows below glide down with it instead of the detail appearing at full height under them.
7
+ Angular's `animate.enter`/`animate.leave` keep it mounted for the leave animation, then unmount it.
8
+
9
+ Known cost, accepted for the look: an `fr` track resolves against the whole grid, so every frame
10
+ re-resolves the table's layout. Measured on a 20-row table at 20× CPU throttle, per toggle: ~41ms
11
+ average frame and 5–6 long frames, against ~20ms and 3 for the compositor-only transform+opacity
12
+ reveal this replaced. Reach for that one instead (`opacity`/`translateY`, no track animation) if a
13
+ table ever needs to stay smooth under load.
14
+
15
+ Sized and pinned to the scroll viewport, not to the column tracks: the row spans every column, so on
16
+ a table wider than its viewport the detail content is laid out across the whole scroll extent — its
17
+ right-hand part sits off screen, and the panel slides sideways with the list instead of staying where
18
+ the reader is looking. The same shape `table.component.css` gives the empty and error cells, and
19
+ `--_et-table-viewport-inline-size` is the width the table measures for them.
20
+
21
+ The pin belongs on this row and not on the cell inside it: that cell clips its overflow, which makes
22
+ it a scroll container, and a `position: sticky` element inside one sticks to that container rather
23
+ than to the table's viewport. */
24
+ .et-table-detail-row {
25
+ grid-column: 1 / -1;
26
+ position: sticky;
27
+ inset-inline-start: 0;
28
+ inline-size: var(--_et-table-viewport-inline-size, 100%);
29
+ display: grid;
30
+ grid-template-rows: 1fr;
31
+ border-block-end: var(--_et-table-detail-rule);
32
+ }
33
+
34
+ /* The detail row of the last row ends the table, so its rule has nothing under it to close off. */
35
+ .et-table-row--last + .et-table-detail-row {
36
+ border-block-end: 0;
37
+ }
38
+
39
+ /* The animation must sit on the element Angular removes — this component's host, which is why it is a
40
+ host binding. `animate.leave` looks for a running animation on *that* element and unmounts the
41
+ moment it finds none, so an animation on a child is never awaited. */
42
+ .et-table-detail-row.et-table-detail--enter {
43
+ animation: et-table-detail-in 0.18s ease;
44
+ }
45
+
46
+ .et-table-detail-row.et-table-detail--leave {
47
+ animation: et-table-detail-out 0.18s ease forwards;
48
+ }
49
+
50
+ /* The row's track opens from nothing while the content fades in. Both `from`/`to` are single `<flex>`
51
+ values, which is the form `grid-template-rows` interpolates. */
52
+ @keyframes et-table-detail-in {
53
+ from {
54
+ grid-template-rows: 0fr;
55
+ opacity: 0;
56
+ }
57
+
58
+ to {
59
+ grid-template-rows: 1fr;
60
+ opacity: 1;
61
+ }
62
+ }
63
+
64
+ @keyframes et-table-detail-out {
65
+ from {
66
+ grid-template-rows: 1fr;
67
+ opacity: 1;
68
+ }
69
+
70
+ to {
71
+ grid-template-rows: 0fr;
72
+ opacity: 0;
73
+ }
74
+ }
75
+
76
+ /* The clip window, and nothing else. It is stretched to a track that is 0 tall for part of the
77
+ animation, so it has to be allowed to shrink past its content (`min-block-size`) and clip what
78
+ doesn't fit (`overflow-y`) — without either, the row would jump to full height on the first frame.
79
+
80
+ Only the block axis is clipped. The row is now as wide as the viewport, so content that needs more
81
+ room than that has to stay reachable; `overflow-x: auto` gives the detail its own scrollbar instead
82
+ of cutting it off. A nested `et-table` scrolls itself and never reaches for this one.
83
+
84
+ It must also carry no padding or border of its own: under `box-sizing: border-box` those set a floor
85
+ under its height, so the row would pop open to that floor before the animation started and then jump
86
+ the rest of the way. That is what the padding below is separated out for. */
87
+ .et-table-detail-cell {
88
+ min-block-size: 0;
89
+ overflow-x: auto;
90
+ overflow-y: hidden;
91
+ }
92
+
93
+ .et-table-detail-body {
94
+ padding: var(--et-table-cell-padding-block) var(--et-table-cell-padding-inline);
95
+ }
96
+
97
+ @media (prefers-reduced-motion: reduce) {
98
+ .et-table-detail-row.et-table-detail--enter,
99
+ .et-table-detail-row.et-table-detail--leave {
100
+ animation: none;
101
+ }
102
+ }
103
+ }
@@ -0,0 +1,18 @@
1
+ @layer components {
2
+ /* Only where the table can actually be dragged: a table whose columns fit takes no grab cursor, and a
3
+ touch pointer already scrolls it by dragging without any of this. */
4
+ @media (hover: hover) and (pointer: fine) {
5
+ .et-table-host--drag-scrollable {
6
+ cursor: grab;
7
+ }
8
+
9
+ /* On the host rather than only on the pointer's target: the drag runs under a pointer capture, so
10
+ the cursor has to hold while it travels over a cell, a link or the header. */
11
+ .et-table-host--dragging,
12
+ .et-table-host--dragging * {
13
+ cursor: grabbing !important;
14
+ -webkit-user-select: none;
15
+ user-select: none;
16
+ }
17
+ }
18
+ }
@@ -0,0 +1,58 @@
1
+ @layer components {
2
+ /* The expander column's chrome. It lives with the stamped cell component rather than in the table's
3
+ own sheet, so Angular injects it the first time a table actually renders an expander — a table
4
+ without a detail template never puts these rules in the document. */
5
+ .et-table-expander-cell {
6
+ justify-content: center;
7
+ padding-inline: 4px;
8
+ }
9
+
10
+ /* The stamped component host is layout-transparent, so the button itself is the cell's flex item
11
+ and picks up its `align-items: center`. As a block box the host would establish a line box and
12
+ the inline-flex button would sit on its text baseline — a few px above centre. */
13
+ et-table-expander-cell {
14
+ display: contents;
15
+ }
16
+
17
+ .et-table-expander {
18
+ display: inline-flex;
19
+ align-items: center;
20
+ justify-content: center;
21
+ /* Never let the flex row shrink it out of square — a narrow `--et-table-expander-width` would
22
+ otherwise squeeze the button's inline size while its block size stayed at 24px. */
23
+ flex: none;
24
+ inline-size: 24px;
25
+ block-size: 24px;
26
+ padding: 0;
27
+ color: inherit;
28
+ background: none;
29
+ border: none;
30
+ border-radius: 4px;
31
+ cursor: pointer;
32
+ }
33
+
34
+ .et-table-expander:hover,
35
+ .et-table-expander:focus-visible {
36
+ background: color-mix(in srgb, var(--et-surface-interaction-solid, gray) 12%, transparent);
37
+ }
38
+
39
+ /* The shared `et-chevron` points up, and the expander wants it pointing at what it opens: right
40
+ while collapsed, down once open. Rotating (rather than swapping icons) is what makes the turn
41
+ animatable. */
42
+ .et-table-expander-icon {
43
+ inline-size: 14px;
44
+ block-size: 14px;
45
+ transform: rotate(90deg);
46
+ transition: transform 0.15s ease;
47
+ }
48
+
49
+ .et-table-expander-icon:where([data-expanded='true']) {
50
+ transform: rotate(180deg);
51
+ }
52
+
53
+ @media (prefers-reduced-motion: reduce) {
54
+ .et-table-expander-icon {
55
+ transition: none;
56
+ }
57
+ }
58
+ }
@@ -0,0 +1,44 @@
1
+ @layer components {
2
+ /* The stamped host is layout-transparent so the trigger's own auto margin can push it against the
3
+ trailing edge of the header cell — as a block box the margin would resolve inside it and do nothing. */
4
+ et-table-filter-trigger {
5
+ display: contents;
6
+ }
7
+
8
+ /* The header label grows, so the trigger simply sits after it at the cell's trailing edge, beside
9
+ the column menu when that feature is on too. It is permanently visible: a filter you have to
10
+ discover by hovering isn't discoverable, and a control that appears on hover makes the header
11
+ twitch as the pointer crosses it. */
12
+ .et-table-filter {
13
+ display: inline-flex;
14
+ flex: none;
15
+ }
16
+
17
+ /* Header chrome at rest — see the same note on the column menu trigger. */
18
+ .et-table-header-cell .et-table-filter-trigger {
19
+ color: var(--et-surface-color-muted-solid, currentColor);
20
+ }
21
+
22
+ /* An active filter reads as accented, so a filtered column is obvious at a glance. */
23
+ .et-table-header-cell .et-table-filter-trigger:where([data-active='true']) {
24
+ color: var(--et-theme-color-primary-solid, currentColor);
25
+ }
26
+
27
+ .et-table-filter-empty {
28
+ margin: 0;
29
+ padding: 8px 12px;
30
+ color: var(--et-surface-color-muted-solid, CanvasText);
31
+ font-size: 13px;
32
+ }
33
+
34
+ .et-table-filter-more {
35
+ inline-size: 100%;
36
+ padding: 8px;
37
+ color: var(--et-theme-color-ink-solid, currentColor);
38
+ font: inherit;
39
+ text-align: center;
40
+ background: none;
41
+ border: none;
42
+ cursor: pointer;
43
+ }
44
+ }
@@ -0,0 +1,38 @@
1
+ @layer components {
2
+ /* The spanning group-header row, mounted with etTableGroupHeaders. Layout-transparent like every other
3
+ table row, so its cells span the table's own column tracks. */
4
+ .et-table-group-row {
5
+ display: contents;
6
+ }
7
+
8
+ .et-table-group-cell {
9
+ display: flex;
10
+ align-items: center;
11
+ min-inline-size: 0;
12
+ overflow: hidden;
13
+ padding: 6px var(--et-table-cell-padding-inline);
14
+ /* Pinned above the sub-header row, which offsets itself by `--_et-table-group-h`. */
15
+ position: sticky;
16
+ inset-block-start: 0;
17
+ z-index: 2;
18
+ /* Opaque band so scrolling rows pass behind it. */
19
+ background: var(--_et-table-header-bg);
20
+ /* Full-width divider between the group tier and the column headers — on every cell (labelled or
21
+ not) so the line runs the whole width, in the same subtle border colour as the rest. */
22
+ border-block-end: 1px solid var(--_et-table-header-border);
23
+ }
24
+
25
+ /* Only runs with a label read as a group; ungrouped runs just extend the header band upward. */
26
+ .et-table-group-cell:where(.et-table-group-cell--labeled) {
27
+ justify-content: center;
28
+ font-size: 12px;
29
+ font-weight: 600;
30
+ letter-spacing: 0.04em;
31
+ text-transform: uppercase;
32
+ color: var(--et-surface-color-muted-solid, CanvasText);
33
+ /* The vertical rule the base sheet draws between header cells and body cells, extended to labelled
34
+ group runs. Unlabelled runs get none, so the band above an ungrouped column reads as empty rather
35
+ than as a one-column group. */
36
+ border-inline-end: var(--_et-table-cell-rule);
37
+ }
38
+ }
@@ -0,0 +1,20 @@
1
+ @layer components {
2
+ /* The cell in edit mode hands its box to the editor: the control draws its own frame and its own
3
+ padding, so keeping the cell's would inset the field inside a box the reader can already see and
4
+ make the row jump the moment editing starts. A thin inline gutter is left so the field's border
5
+ doesn't sit flush against the column divider. */
6
+ .et-table-cell.et-table-cell--editing {
7
+ padding-block: 0;
8
+ padding-inline: 2px;
9
+ /* Cells clip by default so long values can't bleed into the next column. An editor is the one thing
10
+ in a cell that may legitimately draw outside it — a focus ring, a select's chevron. */
11
+ overflow: visible;
12
+ }
13
+
14
+ /* Whatever the consumer put in the template fills the cell, so a form field is as wide as the column
15
+ rather than as wide as its own content. */
16
+ .et-table-cell--editing > * {
17
+ inline-size: 100%;
18
+ min-inline-size: 0;
19
+ }
20
+ }