@ethlete/components 1.0.0-next.78 → 1.0.0-next.80

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 (270) hide show
  1. package/CHANGELOG.md +139 -0
  2. package/design/accordion.ts +73 -0
  3. package/design/anchored-dialog.ts +92 -0
  4. package/design/avatar.ts +90 -0
  5. package/design/badge.ts +48 -0
  6. package/design/banner.ts +77 -0
  7. package/design/bracket.ts +457 -0
  8. package/design/breadcrumb.ts +145 -0
  9. package/design/button.ts +62 -1
  10. package/design/calendar.ts +306 -0
  11. package/design/card.ts +92 -0
  12. package/design/carousel.ts +240 -0
  13. package/design/chart.ts +512 -0
  14. package/design/checkbox.ts +275 -0
  15. package/design/chip.ts +64 -0
  16. package/design/config.json +8 -0
  17. package/design/control.ts +19 -0
  18. package/design/copy-button.ts +59 -0
  19. package/design/description-list.ts +41 -0
  20. package/design/dialog.ts +216 -0
  21. package/design/divider.ts +27 -0
  22. package/design/empty-state.ts +45 -0
  23. package/design/floating-action.ts +55 -0
  24. package/design/form-field.ts +3 -0
  25. package/design/grid.ts +148 -0
  26. package/design/input.ts +86 -0
  27. package/design/kbd.ts +19 -0
  28. package/design/loader.ts +152 -0
  29. package/design/masonry.ts +115 -0
  30. package/design/match.ts +131 -0
  31. package/design/menu.ts +147 -0
  32. package/design/notification.ts +133 -0
  33. package/design/otp-input.ts +107 -0
  34. package/design/pagination.ts +120 -0
  35. package/design/picture.ts +80 -0
  36. package/design/progress-steps.ts +79 -0
  37. package/design/query-error.ts +60 -0
  38. package/design/radio-group.ts +132 -0
  39. package/design/scheduler.ts +369 -0
  40. package/design/scrollable.ts +218 -0
  41. package/design/scrollbar.ts +47 -0
  42. package/design/sdk/assets/fallback.svg +1 -0
  43. package/design/sdk/assets/tall.svg +1 -0
  44. package/design/sdk/assets/wide.svg +1 -0
  45. package/design/sdk/components/accent-on-light/accent-on-light.css +35 -0
  46. package/design/sdk/components/accent-on-light/accent-on-light.ts +10 -0
  47. package/design/sdk/components/accent-on-light/shared/controls.ts +46 -0
  48. package/design/sdk/components/accordion/accordion.css +17 -0
  49. package/design/sdk/components/accordion/accordion.ts +68 -0
  50. package/design/sdk/components/anchored-dialog/anchored-dialog.css +63 -0
  51. package/design/sdk/components/anchored-dialog/anchored-dialog.ts +65 -0
  52. package/design/sdk/components/avatar/avatar.css +14 -0
  53. package/design/sdk/components/avatar/avatar.ts +79 -0
  54. package/design/sdk/components/badge/badge.css +13 -0
  55. package/design/sdk/components/badge/badge.ts +53 -0
  56. package/design/sdk/components/banner/banner.css +18 -0
  57. package/design/sdk/components/banner/banner.ts +88 -0
  58. package/design/sdk/components/bracket/bracket.css +59 -0
  59. package/design/sdk/components/bracket/bracket.ts +144 -0
  60. package/design/sdk/components/breadcrumb/breadcrumb.css +25 -0
  61. package/design/sdk/components/breadcrumb/breadcrumb.ts +82 -0
  62. package/design/sdk/components/button/button.css +41 -0
  63. package/design/sdk/components/button/button.ts +59 -7
  64. package/design/sdk/components/calendar/calendar.css +33 -0
  65. package/design/sdk/components/calendar/calendar.ts +97 -0
  66. package/design/sdk/components/card/card.css +19 -0
  67. package/design/sdk/components/card/card.ts +62 -0
  68. package/design/sdk/components/carousel/carousel.css +44 -0
  69. package/design/sdk/components/carousel/carousel.ts +75 -0
  70. package/design/sdk/components/chart/chart.css +56 -0
  71. package/design/sdk/components/chart/chart.ts +99 -0
  72. package/design/sdk/components/checkbox/checkbox.css +65 -0
  73. package/design/sdk/components/checkbox/checkbox.ts +180 -0
  74. package/design/sdk/components/chip/chip.css +18 -0
  75. package/design/sdk/components/chip/chip.ts +77 -0
  76. package/design/sdk/components/copy-button/copy-button.css +14 -0
  77. package/design/sdk/components/copy-button/copy-button.ts +60 -0
  78. package/design/sdk/components/description-list/description-list.css +7 -0
  79. package/design/sdk/components/description-list/description-list.ts +54 -0
  80. package/design/sdk/components/dialog/dialog.css +29 -0
  81. package/design/sdk/components/dialog/dialog.ts +79 -0
  82. package/design/sdk/components/divider/divider.css +26 -0
  83. package/design/sdk/components/divider/divider.ts +44 -0
  84. package/design/sdk/components/empty-state/empty-state.css +15 -0
  85. package/design/sdk/components/empty-state/empty-state.ts +57 -0
  86. package/design/sdk/components/floating-action/floating-action.css +51 -0
  87. package/design/sdk/components/floating-action/floating-action.ts +63 -0
  88. package/design/sdk/components/form-field/form-field.ts +23 -5
  89. package/design/sdk/components/grid/grid.css +17 -0
  90. package/design/sdk/components/grid/grid.ts +81 -0
  91. package/design/sdk/components/input/input.css +75 -0
  92. package/design/sdk/components/input/input.ts +80 -0
  93. package/design/sdk/components/kbd/kbd.css +25 -0
  94. package/design/sdk/components/kbd/kbd.ts +58 -0
  95. package/design/sdk/components/loader/loader.css +37 -0
  96. package/design/sdk/components/loader/loader.ts +69 -0
  97. package/design/sdk/components/masonry/masonry.css +7 -0
  98. package/design/sdk/components/masonry/masonry.ts +43 -0
  99. package/design/sdk/components/match/match.css +25 -0
  100. package/design/sdk/components/match/match.ts +77 -0
  101. package/design/sdk/components/menu/menu.css +22 -0
  102. package/design/sdk/components/menu/menu.ts +103 -0
  103. package/design/sdk/components/notification/notification.css +32 -0
  104. package/design/sdk/components/notification/notification.ts +107 -0
  105. package/design/sdk/components/otp-input/otp-input.css +35 -0
  106. package/design/sdk/components/otp-input/otp-input.ts +65 -0
  107. package/design/sdk/components/pagination/pagination.css +14 -0
  108. package/design/sdk/components/pagination/pagination.ts +76 -0
  109. package/design/sdk/components/picture/picture.css +37 -0
  110. package/design/sdk/components/picture/picture.ts +97 -0
  111. package/design/sdk/components/progress-steps/progress-steps.css +37 -0
  112. package/design/sdk/components/progress-steps/progress-steps.ts +92 -0
  113. package/design/sdk/components/query-error/query-error.css +33 -0
  114. package/design/sdk/components/query-error/query-error.ts +121 -0
  115. package/design/sdk/components/radio-group/radio-group.css +46 -0
  116. package/design/sdk/components/radio-group/radio-group.ts +167 -0
  117. package/design/sdk/components/scheduler/scheduler.css +55 -0
  118. package/design/sdk/components/scheduler/scheduler.ts +240 -0
  119. package/design/sdk/components/scrollable/scrollable.css +58 -0
  120. package/design/sdk/components/scrollable/scrollable.ts +133 -0
  121. package/design/sdk/components/scrollbar/scrollbar.css +78 -0
  122. package/design/sdk/components/scrollbar/scrollbar.ts +124 -0
  123. package/design/sdk/components/select/select.ts +1 -1
  124. package/design/sdk/components/select/shared/select-part.ts +25 -3
  125. package/design/sdk/components/select-panel/select-panel.css +3 -0
  126. package/design/sdk/components/select-panel/select-panel.ts +125 -0
  127. package/design/sdk/components/skeleton/skeleton.css +22 -0
  128. package/design/sdk/components/skeleton/skeleton.ts +51 -0
  129. package/design/sdk/components/slider/slider.css +52 -0
  130. package/design/sdk/components/slider/slider.ts +87 -0
  131. package/design/sdk/components/standings/standings.css +33 -0
  132. package/design/sdk/components/standings/standings.ts +131 -0
  133. package/design/sdk/components/stat-tile/stat-tile.css +15 -0
  134. package/design/sdk/components/stat-tile/stat-tile.ts +85 -0
  135. package/design/sdk/components/stream/stream.css +48 -0
  136. package/design/sdk/components/stream/stream.ts +43 -0
  137. package/design/sdk/components/switch/switch.css +37 -0
  138. package/design/sdk/components/switch/switch.ts +63 -0
  139. package/design/sdk/components/table/table.css +67 -0
  140. package/design/sdk/components/table/table.ts +161 -0
  141. package/design/sdk/components/tabs/tabs.css +13 -0
  142. package/design/sdk/components/tabs/tabs.ts +74 -0
  143. package/design/sdk/components/textarea/textarea.css +116 -0
  144. package/design/sdk/components/textarea/textarea.ts +65 -0
  145. package/design/sdk/components/timeline/timeline.css +30 -0
  146. package/design/sdk/components/timeline/timeline.ts +87 -0
  147. package/design/sdk/components/toolbar/toolbar.css +24 -0
  148. package/design/sdk/components/toolbar/toolbar.ts +88 -0
  149. package/design/sdk/components/tooltip/tooltip.css +15 -0
  150. package/design/sdk/components/tooltip/tooltip.ts +28 -0
  151. package/design/sdk/components/tree/selected-tint.css +15 -0
  152. package/design/sdk/components/tree/tree.ts +70 -0
  153. package/design/sdk/foundations/colors/colors.css +124 -4
  154. package/design/sdk/foundations/colors/colors.ts +1 -1
  155. package/design/sdk/foundations/colors/shared/contrast.ts +1 -1
  156. package/design/sdk/foundations/elevation/elevation.css +6 -0
  157. package/design/sdk/foundations/elevation/elevation.ts +11 -0
  158. package/design/sdk/foundations/elevation/shared/elevation/scene.css +101 -0
  159. package/design/sdk/foundations/elevation/shared/elevation/scene.ts +74 -0
  160. package/design/sdk/foundations/icons/icons.ts +119 -0
  161. package/design/sdk/pictures.json +1183 -0
  162. package/design/select.ts +5 -4
  163. package/design/skeleton.ts +67 -0
  164. package/design/slider.ts +155 -0
  165. package/design/standings.ts +161 -0
  166. package/design/stat-tile.ts +109 -0
  167. package/design/stream.ts +92 -0
  168. package/design/switch.ts +83 -0
  169. package/design/table.ts +302 -0
  170. package/design/tabs.ts +75 -0
  171. package/design/textarea.ts +94 -0
  172. package/design/timeline.ts +52 -0
  173. package/design/toolbar.ts +95 -0
  174. package/design/tooltip.ts +87 -0
  175. package/fesm2022/ethlete-components.mjs +1440 -1209
  176. package/fesm2022/ethlete-components.mjs.map +1 -1
  177. package/generators/generators.json +2 -0
  178. package/package.json +1 -1
  179. package/src/lib/accordion/accordion.component.css +2 -1
  180. package/src/lib/avatar/avatar.component.css +10 -0
  181. package/src/lib/badge/badge.component.css +2 -2
  182. package/src/lib/banner/banner.component.css +3 -1
  183. package/src/lib/breadcrumb/breadcrumb-outlet.component.css +5 -0
  184. package/src/lib/breadcrumb/breadcrumb.component.css +5 -1
  185. package/src/lib/button/button-properties-styles.component.css +6 -6
  186. package/src/lib/button/button.component.css +27 -4
  187. package/src/lib/button/button.types.ts +33 -0
  188. package/src/lib/button/icon-button.component.css +21 -22
  189. package/src/lib/button/split-button.component.css +5 -1
  190. package/src/lib/button/window-control-button.component.css +43 -3
  191. package/src/lib/calendar/calendar.component.css +15 -5
  192. package/src/lib/card/card.component.css +4 -0
  193. package/src/lib/carousel/carousel-autoplay-styles.component.css +1 -1
  194. package/src/lib/carousel/carousel.component.css +2 -2
  195. package/src/lib/chart/chart-axis.component.css +3 -3
  196. package/src/lib/chip/chip.component.css +12 -6
  197. package/src/lib/description-list/description-list.component.css +2 -1
  198. package/src/lib/empty-state/empty-state.component.css +4 -0
  199. package/src/lib/floating-action/floating-action-styles.component.css +27 -0
  200. package/src/lib/focus-ring/focus-ring-styles.component.css +4 -1
  201. package/src/lib/forms/checkbox/checkbox.component.css +31 -5
  202. package/src/lib/forms/color-input/color-input.component.css +3 -1
  203. package/src/lib/forms/color-input/color-picker-panel.component.css +6 -2
  204. package/src/lib/forms/date-time/date-input/date-input.component.css +1 -1
  205. package/src/lib/forms/date-time/date-time-input/date-time-input.component.css +1 -1
  206. package/src/lib/forms/date-time/duration-input/duration-input.component.css +1 -1
  207. package/src/lib/forms/date-time/range-input-shell-styles.component.css +1 -1
  208. package/src/lib/forms/date-time/time-input/time-input.component.css +1 -1
  209. package/src/lib/forms/description/description.component.css +7 -0
  210. package/src/lib/forms/dropzone/dropzone.component.css +26 -0
  211. package/src/lib/forms/form-field/form-field-control-suffix-styles.component.css +4 -2
  212. package/src/lib/forms/form-field/form-field-text-shell-styles.component.css +54 -5
  213. package/src/lib/forms/form-field/form-field-textarea-styles.component.css +62 -0
  214. package/src/lib/forms/form-field/form-field.component.css +6 -0
  215. package/src/lib/forms/form-field/headless/label.directive.css +1 -1
  216. package/src/lib/forms/input/input.component.css +6 -2
  217. package/src/lib/forms/input/number-input.component.css +2 -2
  218. package/src/lib/forms/input/password-input.component.css +4 -3
  219. package/src/lib/forms/otp-input/otp-input.component.css +23 -4
  220. package/src/lib/forms/phone-input/phone-input.component.css +4 -3
  221. package/src/lib/forms/rating/rating.component.css +2 -1
  222. package/src/lib/forms/rich-text-editor/rich-text-editor.component.css +1 -1
  223. package/src/lib/forms/selection-card-styles.component.css +3 -2
  224. package/src/lib/forms/selection-list/checkbox-group/checkbox-group-select-all.component.css +4 -2
  225. package/src/lib/forms/selection-list/checkbox-group/checkbox-option.component.css +4 -2
  226. package/src/lib/forms/selection-list/radio-group/radio.component.css +5 -2
  227. package/src/lib/forms/selection-list/segmented-button-group/segmented-button.component.css +2 -1
  228. package/src/lib/forms/slider/range-slider.component.css +98 -6
  229. package/src/lib/forms/slider/slider.component.css +96 -4
  230. package/src/lib/forms/switch/switch.component.css +45 -15
  231. package/src/lib/forms/tag-input/tag-input.component.css +2 -2
  232. package/src/lib/forms/textarea/textarea-autosize-styles.component.css +2 -3
  233. package/src/lib/forms/textarea/textarea.component.css +7 -2
  234. package/src/lib/grid/grid-item-toolbar.component.css +10 -0
  235. package/src/lib/grid/grid-item.component.css +6 -1
  236. package/src/lib/kbd/kbd.component.css +1 -1
  237. package/src/lib/loader/brand-loader/brand-loader.component.css +4 -1
  238. package/src/lib/loader/progress-bar/progress-bar.component.css +1 -1
  239. package/src/lib/loader/spinner/spinner-styles.component.css +1 -1
  240. package/src/lib/match/match-card.component.css +9 -3
  241. package/src/lib/match/match-score.component.css +4 -1
  242. package/src/lib/menu/menu-selection-item.component.css +1 -1
  243. package/src/lib/menu/menu.component.css +6 -1
  244. package/src/lib/notification/notification.component.css +3 -3
  245. package/src/lib/overlay/overlay-container.component.css +4 -0
  246. package/src/lib/pagination/pagination.component.css +4 -0
  247. package/src/lib/progress-steps/progress-step.component.css +4 -4
  248. package/src/lib/query-error/query-error.component.css +4 -0
  249. package/src/lib/scheduler/scheduler-appointment-styles.component.css +21 -5
  250. package/src/lib/scheduler/scheduler-month-view.component.css +4 -2
  251. package/src/lib/scheduler/scheduler-time-grid-view.component.css +8 -2
  252. package/src/lib/scrollable/headless/scrollable-navigation.component.css +1 -1
  253. package/src/lib/standings/standings-pick.component.css +1 -1
  254. package/src/lib/standings/standings.component.css +10 -10
  255. package/src/lib/stat-tile/stat-tile-sparkline.component.css +1 -1
  256. package/src/lib/stream/consent/stream-consent.component.css +99 -0
  257. package/src/lib/stream/error/stream-player-error.component.css +100 -0
  258. package/src/lib/stream/loading/stream-player-loading.component.css +16 -0
  259. package/src/lib/stream/pip/pip-slot-placeholder.component.css +68 -0
  260. package/src/lib/stream/stream-player-slot-styles.component.css +4 -0
  261. package/src/lib/table/table-resize-grip.component.css +2 -1
  262. package/src/lib/table/table-select-cell.component.css +45 -15
  263. package/src/lib/table/table.component.css +15 -5
  264. package/src/lib/tabs/tab-bar-styles.component.css +1 -1
  265. package/src/lib/tabs/tabs/tab-group.component.css +111 -0
  266. package/src/lib/time-picker/time-picker.component.css +2 -1
  267. package/src/lib/timeline/timeline-item.component.css +5 -1
  268. package/src/lib/toolbar/toolbar.component.css +4 -0
  269. package/src/lib/tooltip/tooltip.component.css +14 -0
  270. package/types/ethlete-components.d.ts +156 -128
@@ -44,7 +44,7 @@
44
44
  padding: var(--et-selection-card-padding);
45
45
  border-radius: var(--et-selection-card-border-radius);
46
46
  background-color: var(--et-surface-background-solid, transparent);
47
- border: var(--et-selection-card-border-width) solid var(--et-surface-border-solid, currentColor);
47
+ border: var(--et-selection-card-border-width) solid var(--et-surface-interaction-solid, currentColor);
48
48
 
49
49
  /* Every state guard sits in `:where()` so source order decides; the checked rule below relies on it. */
50
50
  @media (hover: hover) {
@@ -65,7 +65,8 @@
65
65
  /* Each host resets its own control's focus ring, so the card shows one ring. */
66
66
  &:where(:focus-visible, :has(:focus-visible)) {
67
67
  border-color: var(--et-theme-color-primary-solid, currentColor);
68
- outline: 2px solid var(--et-theme-color-primary-solid, currentColor);
68
+ outline: 2px solid
69
+ light-dark(var(--et-theme-color-ink-solid, currentColor), var(--et-theme-color-primary-solid, currentColor));
69
70
  outline-offset: 2px;
70
71
  }
71
72
 
@@ -10,11 +10,12 @@
10
10
  }
11
11
 
12
12
  .et-checkbox-group-select-all-box {
13
+ box-sizing: border-box;
13
14
  display: grid;
14
15
  place-items: center;
15
16
  inline-size: var(--et-checkbox-option-size, 20px);
16
17
  block-size: var(--et-checkbox-option-size, 20px);
17
- border: var(--et-checkbox-option-border-width, 2px) solid var(--et-surface-border-solid, currentColor);
18
+ border: var(--et-checkbox-option-border-width, 2px) solid var(--et-surface-interaction-solid, currentColor);
18
19
  border-radius: var(--et-checkbox-option-border-radius, 4px);
19
20
  transition:
20
21
  border-color var(--et-checkbox-option-transition-duration, 150ms) ease,
@@ -68,7 +69,8 @@
68
69
  }
69
70
 
70
71
  .et-checkbox-group-select-all:focus-visible .et-checkbox-group-select-all-box {
71
- outline: 2px solid var(--et-theme-color-primary-solid, currentColor);
72
+ outline: 2px solid
73
+ light-dark(var(--et-theme-color-ink-solid, currentColor), var(--et-theme-color-primary-solid, currentColor));
72
74
  outline-offset: 2px;
73
75
  }
74
76
 
@@ -49,12 +49,13 @@
49
49
  user-select: none;
50
50
 
51
51
  .et-checkbox-option-box {
52
+ box-sizing: border-box;
52
53
  flex-shrink: 0;
53
54
  inline-size: var(--et-checkbox-option-size);
54
55
  block-size: var(--et-checkbox-option-size);
55
56
  border-radius: var(--et-checkbox-option-border-radius);
56
57
  border: var(--et-checkbox-option-border-width) solid
57
- var(--_et-control-border, var(--et-surface-border-solid, currentColor));
58
+ var(--_et-control-border, var(--et-surface-interaction-solid, currentColor));
58
59
  background-color: transparent;
59
60
  display: grid;
60
61
  place-items: center;
@@ -94,7 +95,8 @@
94
95
 
95
96
  &:focus-visible .et-checkbox-option-box {
96
97
  border-color: var(--et-theme-color-primary-solid);
97
- outline: 2px solid var(--et-theme-color-primary-solid);
98
+ outline: 2px solid
99
+ light-dark(var(--et-theme-color-ink-solid, currentColor), var(--et-theme-color-primary-solid, currentColor));
98
100
  outline-offset: 2px;
99
101
  }
100
102
 
@@ -49,11 +49,13 @@
49
49
  user-select: none;
50
50
 
51
51
  .et-radio-circle {
52
+ box-sizing: border-box;
52
53
  flex-shrink: 0;
53
54
  inline-size: var(--et-radio-size);
54
55
  block-size: var(--et-radio-size);
55
56
  border-radius: 50%;
56
- border: var(--et-radio-border-width) solid var(--_et-control-border, var(--et-surface-border-solid, currentColor));
57
+ border: var(--et-radio-border-width) solid
58
+ var(--_et-control-border, var(--et-surface-interaction-solid, currentColor));
57
59
  background-color: transparent;
58
60
  display: grid;
59
61
  place-items: center;
@@ -90,7 +92,8 @@
90
92
 
91
93
  &:focus-visible .et-radio-circle {
92
94
  border-color: var(--et-theme-color-primary-solid);
93
- outline: 2px solid var(--et-theme-color-primary-solid);
95
+ outline: 2px solid
96
+ light-dark(var(--et-theme-color-ink-solid, currentColor), var(--et-theme-color-primary-solid, currentColor));
94
97
  outline-offset: 2px;
95
98
  }
96
99
 
@@ -114,7 +114,8 @@
114
114
  }
115
115
 
116
116
  &:focus-visible {
117
- outline: 2px solid var(--et-theme-color-primary-solid);
117
+ outline: 2px solid
118
+ light-dark(var(--et-theme-color-ink-solid, currentColor), var(--et-theme-color-primary-solid, currentColor));
118
119
  outline-offset: var(--et-segmented-button-focus-ring-offset, 1px);
119
120
  }
120
121
 
@@ -91,9 +91,10 @@
91
91
  position: relative;
92
92
  display: flex;
93
93
  align-items: center;
94
- block-size: max(28px, var(--et-slider-thumb-size));
94
+ block-size: max(44px, var(--et-slider-thumb-size));
95
95
  /* thumbs overhang the rail by half their size at the extremes — keep them inside the box */
96
96
  margin-inline: calc(var(--et-slider-thumb-size) / 2);
97
+ container-type: inline-size;
97
98
  cursor: pointer;
98
99
  }
99
100
 
@@ -131,7 +132,8 @@
131
132
  /* not `:focus-visible` alone: the track focuses the thumb programmatically on a press, and
132
133
  Chrome matches `:focus-visible` for that - the ring then stayed on after every click */
133
134
  &:focus-visible:not([data-pointer-focused]) {
134
- outline: 2px solid var(--et-theme-color-primary-solid, currentColor);
135
+ outline: 2px solid
136
+ light-dark(var(--et-theme-color-ink-solid, currentColor), var(--et-theme-color-primary-solid, currentColor));
135
137
  outline-offset: 2px;
136
138
  }
137
139
 
@@ -168,7 +170,13 @@
168
170
  left: 50%;
169
171
  /* clear the thumb (which overhangs the tick by half the size difference), then add the gap */
170
172
  inset-block-start: calc(100% + (var(--et-slider-thumb-size) - var(--et-slider-mark-size)) / 2 + 6px);
171
- translate: -50% 0;
173
+ --_et-slider-edge-x: calc(var(--_et-slider-mark-position, 0) * 1cqi);
174
+ translate: clamp(
175
+ -1 * (var(--_et-slider-edge-x) + var(--et-slider-thumb-size) / 2),
176
+ -50%,
177
+ 100cqi - var(--_et-slider-edge-x) + var(--et-slider-thumb-size) / 2 - 100%
178
+ )
179
+ 0;
172
180
  inline-size: max-content;
173
181
  font-size: var(--et-slider-mark-label-font-size);
174
182
  line-height: 1.2;
@@ -189,7 +197,13 @@
189
197
  /* physical centering is direction-safe — 50% of the thumb is 50% in both directions */
190
198
  left: 50%;
191
199
  bottom: calc(100% + 8px);
192
- translate: -50% 0;
200
+ --_et-slider-edge-x: calc(var(--_et-slider-thumb-position, 0) * 1cqi);
201
+ translate: clamp(
202
+ -1 * (var(--_et-slider-edge-x) + var(--et-slider-thumb-size) / 2),
203
+ -50%,
204
+ 100cqi - var(--_et-slider-edge-x) + var(--et-slider-thumb-size) / 2 - 100%
205
+ )
206
+ 0;
193
207
  inline-size: max-content;
194
208
  padding: 2px 8px;
195
209
  border-radius: 6px;
@@ -203,6 +217,21 @@
203
217
  user-select: none;
204
218
  }
205
219
 
220
+ .et-range-slider-mark-label:dir(rtl) {
221
+ --_et-slider-edge-x: calc((100 - var(--_et-slider-mark-position, 0)) * 1cqi);
222
+ }
223
+
224
+ .et-range-slider-thumb-value:dir(rtl) {
225
+ --_et-slider-edge-x: calc((100 - var(--_et-slider-thumb-position, 0)) * 1cqi);
226
+ }
227
+
228
+ &:where([data-thumb-value]) .et-range-slider-interaction {
229
+ margin-block-start: calc(
230
+ var(--et-slider-thumb-value-font-size) * 1.4 + 14px -
231
+ (max(44px, var(--et-slider-thumb-size)) - var(--et-slider-thumb-size)) / 2
232
+ );
233
+ }
234
+
206
235
  /* an unresolved bulk-edit range parks both thumbs at the track start — the dashed accent rail
207
236
  (not a muted/grey one, which would read as disabled) makes that read as "provisional /
208
237
  values differ", not "minimum". The fill is already zero-width while mixed. Consumers
@@ -261,11 +290,12 @@
261
290
  .et-range-slider-interaction {
262
291
  flex-direction: column;
263
292
  align-items: center;
264
- inline-size: max(28px, var(--et-slider-thumb-size));
293
+ inline-size: max(44px, var(--et-slider-thumb-size));
265
294
  block-size: var(--et-slider-vertical-size);
266
295
  margin-inline: 0;
267
296
  /* thumbs overhang the rail by half their size at the extremes — keep them inside the box */
268
297
  margin-block: calc(var(--et-slider-thumb-size) / 2);
298
+ container-type: normal;
269
299
  }
270
300
 
271
301
  .et-range-slider-rail {
@@ -296,7 +326,17 @@
296
326
  bottom: auto;
297
327
  inset-block-start: 50%;
298
328
  inset-inline-start: calc(100% + 8px);
299
- translate: 0 -50%;
329
+ translate: 0
330
+ clamp(
331
+ -1 *
332
+ (
333
+ (100 - var(--_et-slider-thumb-position, 0)) * var(--et-slider-vertical-size) / 100 +
334
+ var(--et-slider-thumb-size) / 2
335
+ ),
336
+ -50%,
337
+ var(--_et-slider-thumb-position, 0) * var(--et-slider-vertical-size) / 100 + var(--et-slider-thumb-size) /
338
+ 2 - 100%
339
+ );
300
340
  }
301
341
 
302
342
  .et-range-slider-mark {
@@ -315,6 +355,58 @@
315
355
  translate: 0 -50%;
316
356
  }
317
357
 
358
+ &:where([data-mark-labels]) {
359
+ .et-range-slider-interaction {
360
+ display: grid;
361
+ grid-template-columns: auto max(44px, var(--et-slider-thumb-size));
362
+ align-self: flex-start;
363
+ inline-size: auto;
364
+ }
365
+
366
+ .et-range-slider-rail {
367
+ grid-area: 1 / 2;
368
+ justify-self: center;
369
+ }
370
+
371
+ .et-range-slider-fill,
372
+ .et-range-slider-thumb {
373
+ grid-area: 1 / 2;
374
+ }
375
+
376
+ .et-range-slider-marks,
377
+ .et-range-slider-mark {
378
+ display: contents;
379
+ }
380
+
381
+ .et-range-slider-mark::before {
382
+ content: '';
383
+ position: absolute;
384
+ grid-area: 1 / 2;
385
+ left: 50%;
386
+ bottom: calc(var(--_et-slider-mark-position, 0) * 1% - var(--et-slider-mark-size) / 2);
387
+ translate: -50% 0;
388
+ inline-size: var(--et-slider-mark-size);
389
+ block-size: var(--et-slider-mark-size);
390
+ border-radius: 50%;
391
+ background: inherit;
392
+ }
393
+
394
+ .et-range-slider-mark-label {
395
+ position: relative;
396
+ grid-area: 1 / 1;
397
+ justify-self: end;
398
+ align-self: end;
399
+ inset: auto;
400
+ bottom: clamp(
401
+ var(--et-slider-thumb-size) / -2,
402
+ var(--_et-slider-mark-position, 0) * 1% - var(--et-slider-mark-label-font-size) * 0.6,
403
+ 100% + var(--et-slider-thumb-size) / 2 - var(--et-slider-mark-label-font-size) * 1.2
404
+ );
405
+ translate: none;
406
+ margin-inline-end: calc(var(--et-slider-thumb-size) / 2 + 6px - max(44px, var(--et-slider-thumb-size)) / 2);
407
+ }
408
+ }
409
+
318
410
  &[data-mixed] {
319
411
  .et-range-slider-rail {
320
412
  background: repeating-linear-gradient(
@@ -93,6 +93,7 @@
93
93
  block-size: max(44px, var(--et-slider-thumb-size));
94
94
  /* thumbs overhang the rail by half their size at the extremes — keep them inside the box */
95
95
  margin-inline: calc(var(--et-slider-thumb-size) / 2);
96
+ container-type: inline-size;
96
97
  cursor: pointer;
97
98
  }
98
99
 
@@ -130,7 +131,8 @@
130
131
  /* not `:focus-visible` alone: the track focuses the thumb programmatically on a press, and
131
132
  Chrome matches `:focus-visible` for that - the ring then stayed on after every click */
132
133
  &:focus-visible:not([data-pointer-focused]) {
133
- outline: 2px solid var(--et-theme-color-primary-solid, currentColor);
134
+ outline: 2px solid
135
+ light-dark(var(--et-theme-color-ink-solid, currentColor), var(--et-theme-color-primary-solid, currentColor));
134
136
  outline-offset: 2px;
135
137
  }
136
138
  }
@@ -162,7 +164,13 @@
162
164
  left: 50%;
163
165
  /* clear the thumb (which overhangs the tick by half the size difference), then add the gap */
164
166
  inset-block-start: calc(100% + (var(--et-slider-thumb-size) - var(--et-slider-mark-size)) / 2 + 6px);
165
- translate: -50% 0;
167
+ --_et-slider-edge-x: calc(var(--_et-slider-mark-position, 0) * 1cqi);
168
+ translate: clamp(
169
+ -1 * (var(--_et-slider-edge-x) + var(--et-slider-thumb-size) / 2),
170
+ -50%,
171
+ 100cqi - var(--_et-slider-edge-x) + var(--et-slider-thumb-size) / 2 - 100%
172
+ )
173
+ 0;
166
174
  inline-size: max-content;
167
175
  font-size: var(--et-slider-mark-label-font-size);
168
176
  line-height: 1.2;
@@ -183,7 +191,13 @@
183
191
  /* physical centering is direction-safe — 50% of the thumb is 50% in both directions */
184
192
  left: 50%;
185
193
  bottom: calc(100% + 8px);
186
- translate: -50% 0;
194
+ --_et-slider-edge-x: calc(var(--_et-slider-thumb-position, 0) * 1cqi);
195
+ translate: clamp(
196
+ -1 * (var(--_et-slider-edge-x) + var(--et-slider-thumb-size) / 2),
197
+ -50%,
198
+ 100cqi - var(--_et-slider-edge-x) + var(--et-slider-thumb-size) / 2 - 100%
199
+ )
200
+ 0;
187
201
  inline-size: max-content;
188
202
  padding: 2px 8px;
189
203
  border-radius: 6px;
@@ -197,6 +211,21 @@
197
211
  user-select: none;
198
212
  }
199
213
 
214
+ .et-slider-mark-label:dir(rtl) {
215
+ --_et-slider-edge-x: calc((100 - var(--_et-slider-mark-position, 0)) * 1cqi);
216
+ }
217
+
218
+ .et-slider-thumb-value:dir(rtl) {
219
+ --_et-slider-edge-x: calc((100 - var(--_et-slider-thumb-position, 0)) * 1cqi);
220
+ }
221
+
222
+ &:where([data-thumb-value]) .et-slider-interaction {
223
+ margin-block-start: calc(
224
+ var(--et-slider-thumb-value-font-size) * 1.4 + 14px -
225
+ (max(44px, var(--et-slider-thumb-size)) - var(--et-slider-thumb-size)) / 2
226
+ );
227
+ }
228
+
200
229
  /* an unresolved bulk-edit value parks the thumb at the track start — the dashed accent rail
201
230
  (not a muted/grey one, which would read as disabled) makes that read as "provisional /
202
231
  values differ", not "minimum". The fill is already zero-width while mixed. Consumers
@@ -260,6 +289,7 @@
260
289
  margin-inline: 0;
261
290
  /* thumbs overhang the rail by half their size at the extremes — keep them inside the box */
262
291
  margin-block: calc(var(--et-slider-thumb-size) / 2);
292
+ container-type: normal;
263
293
  }
264
294
 
265
295
  .et-slider-rail {
@@ -290,7 +320,17 @@
290
320
  bottom: auto;
291
321
  inset-block-start: 50%;
292
322
  inset-inline-start: calc(100% + 8px);
293
- translate: 0 -50%;
323
+ translate: 0
324
+ clamp(
325
+ -1 *
326
+ (
327
+ (100 - var(--_et-slider-thumb-position, 0)) * var(--et-slider-vertical-size) / 100 +
328
+ var(--et-slider-thumb-size) / 2
329
+ ),
330
+ -50%,
331
+ var(--_et-slider-thumb-position, 0) * var(--et-slider-vertical-size) / 100 + var(--et-slider-thumb-size) /
332
+ 2 - 100%
333
+ );
294
334
  }
295
335
 
296
336
  .et-slider-mark {
@@ -309,6 +349,58 @@
309
349
  translate: 0 -50%;
310
350
  }
311
351
 
352
+ &:where([data-mark-labels]) {
353
+ .et-slider-interaction {
354
+ display: grid;
355
+ grid-template-columns: auto max(44px, var(--et-slider-thumb-size));
356
+ align-self: flex-start;
357
+ inline-size: auto;
358
+ }
359
+
360
+ .et-slider-rail {
361
+ grid-area: 1 / 2;
362
+ justify-self: center;
363
+ }
364
+
365
+ .et-slider-fill,
366
+ .et-slider-thumb {
367
+ grid-area: 1 / 2;
368
+ }
369
+
370
+ .et-slider-marks,
371
+ .et-slider-mark {
372
+ display: contents;
373
+ }
374
+
375
+ .et-slider-mark::before {
376
+ content: '';
377
+ position: absolute;
378
+ grid-area: 1 / 2;
379
+ left: 50%;
380
+ bottom: calc(var(--_et-slider-mark-position, 0) * 1% - var(--et-slider-mark-size) / 2);
381
+ translate: -50% 0;
382
+ inline-size: var(--et-slider-mark-size);
383
+ block-size: var(--et-slider-mark-size);
384
+ border-radius: 50%;
385
+ background: inherit;
386
+ }
387
+
388
+ .et-slider-mark-label {
389
+ position: relative;
390
+ grid-area: 1 / 1;
391
+ justify-self: end;
392
+ align-self: end;
393
+ inset: auto;
394
+ bottom: clamp(
395
+ var(--et-slider-thumb-size) / -2,
396
+ var(--_et-slider-mark-position, 0) * 1% - var(--et-slider-mark-label-font-size) * 0.6,
397
+ 100% + var(--et-slider-thumb-size) / 2 - var(--et-slider-mark-label-font-size) * 1.2
398
+ );
399
+ translate: none;
400
+ margin-inline-end: calc(var(--et-slider-thumb-size) / 2 + 6px - max(44px, var(--et-slider-thumb-size)) / 2);
401
+ }
402
+ }
403
+
312
404
  &[data-mixed] {
313
405
  .et-slider-rail {
314
406
  background: repeating-linear-gradient(
@@ -58,28 +58,54 @@
58
58
  width: var(--et-switch-track-width);
59
59
  height: var(--et-switch-track-height);
60
60
  border-radius: calc(var(--et-switch-track-height) / 2);
61
- background-color: color-mix(in srgb, var(--et-surface-interaction-solid, currentColor) 22%, transparent);
61
+ background-color: color-mix(in srgb, var(--et-surface-interaction-solid, currentColor) 38%, transparent);
62
+ }
63
+
64
+ :where(et-choice-field[data-error])
65
+ &:not([aria-disabled='true']):not([aria-checked='true']):not([data-indeterminate])
66
+ .et-switch-track {
67
+ background-color: color-mix(in srgb, var(--et-theme-color-primary-solid) 40%, transparent);
62
68
  }
63
69
 
64
- /* hover-capable pointers only — on touch, :hover sticks after a tap */
65
70
  @media (hover: hover) {
66
- &:hover:not([aria-disabled='true']):not([data-readonly]):not([aria-checked='true']):not([data-indeterminate])
71
+ :where(et-choice-field[data-error])
72
+ &:hover:not([aria-disabled='true']):not([data-readonly]):not([aria-checked='true']):not([data-indeterminate])
67
73
  .et-switch-track,
68
- :where(et-choice-field:has(.et-choice-field-label-area:hover))
74
+ :where(et-choice-field[data-error]:has(.et-choice-field-label-area:hover))
69
75
  &:not([aria-disabled='true']):not([data-readonly]):not([aria-checked='true']):not([data-indeterminate])
70
76
  .et-switch-track {
71
- background-color: color-mix(in srgb, var(--et-surface-interaction-solid, currentColor) 30%, transparent);
77
+ background-color: color-mix(
78
+ in srgb,
79
+ light-dark(
80
+ rgb(var(--et-color-primary-hover, var(--et-color-primary))),
81
+ rgb(
82
+ var(
83
+ --et-color-primary-ink-active,
84
+ var(
85
+ --et-color-primary-ink-focus,
86
+ var(
87
+ --et-color-primary-ink-hover,
88
+ var(
89
+ --et-color-primary-ink,
90
+ var(
91
+ --et-color-primary-active,
92
+ var(--et-color-primary-focus, var(--et-color-primary-hover, var(--et-color-primary)))
93
+ )
94
+ )
95
+ )
96
+ )
97
+ )
98
+ )
99
+ )
100
+ 40%,
101
+ transparent
102
+ );
72
103
  }
73
104
  }
74
105
 
75
- :where(et-choice-field[data-error])
76
- &:not([aria-disabled='true']):not([aria-checked='true']):not([data-indeterminate])
77
- .et-switch-track {
78
- background-color: color-mix(in srgb, var(--et-theme-color-primary-solid) 40%, transparent);
79
- }
80
-
81
106
  &:focus-visible .et-switch-track {
82
- outline: 2px solid var(--et-theme-color-primary-solid);
107
+ outline: 2px solid
108
+ light-dark(var(--et-theme-color-ink-solid, currentColor), var(--et-theme-color-primary-solid, currentColor));
83
109
  outline-offset: 2px;
84
110
  }
85
111
 
@@ -117,6 +143,7 @@
117
143
  &[aria-checked='true'] {
118
144
  .et-switch-track {
119
145
  background-color: var(--et-theme-color-primary-solid, currentColor);
146
+ box-shadow: inset 0 0 0 1px light-dark(var(--et-theme-color-ink-solid), transparent);
120
147
  }
121
148
 
122
149
  .et-switch-thumb {
@@ -149,25 +176,28 @@
149
176
  &[data-indeterminate] {
150
177
  .et-switch-track {
151
178
  background-color: transparent;
179
+ box-shadow: none;
152
180
 
153
181
  &::before {
154
182
  content: '';
155
183
  position: absolute;
156
184
  inset: 0;
157
185
  border-radius: inherit;
158
- border: 1px dashed var(--et-theme-color-primary-solid, currentColor);
186
+ border: 1px dashed var(--et-theme-color-ink-solid, currentColor);
159
187
  }
160
188
  }
161
189
 
162
190
  .et-switch-thumb {
163
191
  left: calc((var(--et-switch-track-width) - (var(--et-switch-thumb-size) - 4px)) / 2);
164
- background-color: var(--et-theme-color-primary-solid, currentColor);
192
+ background-color: var(--et-theme-color-ink-solid, currentColor);
165
193
  }
166
194
  }
167
195
 
168
196
  &[data-can-animate] {
169
197
  .et-switch-track {
170
- transition: background-color var(--et-switch-transition-duration) ease;
198
+ transition:
199
+ background-color var(--et-switch-transition-duration) ease,
200
+ box-shadow var(--et-switch-transition-duration) ease;
171
201
  }
172
202
 
173
203
  .et-switch-thumb {
@@ -35,7 +35,7 @@
35
35
  caret-color: var(--et-theme-color-primary-solid, currentColor);
36
36
 
37
37
  &::placeholder {
38
- color: color-mix(in srgb, currentColor 46%, transparent);
38
+ color: color-mix(in srgb, currentColor 60%, transparent);
39
39
  }
40
40
 
41
41
  &:disabled {
@@ -44,7 +44,7 @@
44
44
  }
45
45
 
46
46
  /* an unresolved bulk-edit value reads as provisional — the mixedLabel placeholder sits
47
- between committed text (full strength) and the regular placeholder (46%). Consumers
47
+ between committed text (full strength) and the regular placeholder (60%). Consumers
48
48
  restyle via [data-mixed]. */
49
49
  &[data-mixed] .et-tag-input-field::placeholder {
50
50
  font-style: italic;
@@ -4,9 +4,8 @@
4
4
  run at once - the directive skips measuring exactly when this `@supports` condition holds.
5
5
  Delete the fallback once Firefox ESR and iOS Safari 26 both support `field-sizing`.
6
6
 
7
- The row bounds hold only while the native textarea has no block padding: it is a border box,
8
- so any padding on it eats into the clamp, and CSS cannot add the padding back. Pad the form
9
- field's frame instead. */
7
+ The row bounds count only the content: the native textarea is a border box, so a rule that
8
+ pads it must add its block padding to both bounds, as form-field-textarea-styles does. */
10
9
  @supports (field-sizing: content) {
11
10
  textarea[data-et-textarea-autosize] {
12
11
  field-sizing: content;
@@ -18,7 +18,11 @@
18
18
  min-width: 0;
19
19
 
20
20
  &::placeholder {
21
- color: color-mix(in srgb, currentColor 46%, transparent);
21
+ color: color-mix(in srgb, currentColor 60%, transparent);
22
+ }
23
+
24
+ &[rows='1']::placeholder {
25
+ white-space: pre;
22
26
  }
23
27
 
24
28
  &[data-resize='none'] {
@@ -27,11 +31,12 @@
27
31
 
28
32
  &[data-resize='vertical'] {
29
33
  resize: vertical;
34
+ min-block-size: 1lh;
30
35
  }
31
36
  }
32
37
 
33
38
  /* an unresolved bulk-edit value reads as provisional — the mixed label shows as the
34
- placeholder, between a committed value (full strength) and a real placeholder (46%) */
39
+ placeholder, between a committed value (full strength) and a real placeholder (60%) */
35
40
  &[data-mixed] .et-textarea-native::placeholder {
36
41
  font-style: italic;
37
42
  color: color-mix(in srgb, currentColor 72%, transparent);
@@ -0,0 +1,10 @@
1
+ @layer components {
2
+ .et-grid-item-toolbar {
3
+ display: inline-flex;
4
+ align-items: center;
5
+ gap: var(--et-grid-item-toolbar-gap, 4px);
6
+ padding: var(--et-grid-item-toolbar-padding, 4px);
7
+ border-radius: var(--et-grid-item-toolbar-radius, 8px);
8
+ background: var(--et-grid-item-toolbar-background, transparent);
9
+ }
10
+ }
@@ -23,7 +23,8 @@
23
23
  background: var(--et-grid-item-bg, var(--et-surface-background-solid));
24
24
 
25
25
  &:focus-visible {
26
- outline: 2px solid var(--et-theme-color-primary-solid, currentColor);
26
+ outline: 2px solid
27
+ light-dark(var(--et-theme-color-ink-solid, currentColor), var(--et-theme-color-primary-solid, currentColor));
27
28
  outline-offset: -2px;
28
29
  }
29
30
 
@@ -152,6 +153,10 @@
152
153
  min-height: 0;
153
154
  }
154
155
 
156
+ .et-grid-item:has(> .et-grid-item__actions:not(:empty)) > .et-grid-item__content {
157
+ padding-inline-end: var(--et-grid-item-actions-reserve, calc(2.4rem + 12px));
158
+ }
159
+
155
160
  .et-grid:not(.et-grid--readonly) .et-grid-item__content {
156
161
  cursor: grab;
157
162
  user-select: none;
@@ -52,7 +52,7 @@
52
52
  border: 1px solid var(--et-surface-border-solid, rgb(255 255 255 / 0.1));
53
53
  border-radius: var(--et-kbd-key-border-radius);
54
54
  background: color-mix(in srgb, var(--et-surface-interaction-solid, rgb(255 255 255)) 8%, transparent);
55
- color: var(--et-surface-color-muted-solid, rgb(255 255 255 / 0.55));
55
+ color: var(--et-kbd-color, var(--et-surface-color-muted-solid, rgb(255 255 255 / 0.55)));
56
56
  font: inherit;
57
57
  font-size: var(--et-kbd-font-size);
58
58
  font-weight: var(--et-kbd-font-weight);
@@ -109,7 +109,7 @@
109
109
 
110
110
  .et-brand-loader__outline {
111
111
  fill: none;
112
- stroke: var(--_et-brand-loader-accent);
112
+ stroke: var(--et-brand-loader-accent, var(--et-theme-color-ink-solid, #00ffa1));
113
113
  stroke-width: 1.4;
114
114
  stroke-linecap: round;
115
115
  stroke-linejoin: round;
@@ -121,6 +121,9 @@
121
121
 
122
122
  .et-brand-loader__fill {
123
123
  fill: var(--_et-brand-loader-accent);
124
+ stroke: var(--et-theme-color-ink-solid);
125
+ stroke-width: 0.7;
126
+ stroke-linejoin: round;
124
127
  animation: et-brand-loader-fill-fade var(--_et-brand-loader-duration) ease infinite;
125
128
  }
126
129
 
@@ -172,6 +172,6 @@
172
172
  }
173
173
 
174
174
  .et-progress-bar:where(.et-progress-bar--themed) {
175
- --et-progress-bar-indicator-color: var(--et-theme-color-primary-solid, currentColor);
175
+ --et-progress-bar-indicator-color: var(--et-theme-color-ink-solid);
176
176
  }
177
177
  }
@@ -226,6 +226,6 @@
226
226
  /* `--et-spinner-color` is declared via `@property`, whose `initial-value` cannot contain `var()`, so the theme
227
227
  colour can only be applied by a rule - and only when `color` is set, hence the class gate. */
228
228
  .et-spinner:where(.et-spinner--themed) {
229
- --et-spinner-color: var(--et-theme-color-primary-solid, currentColor);
229
+ --et-spinner-color: var(--et-theme-color-ink-solid);
230
230
  }
231
231
  }