@ethlete/components 1.0.0-next.77 → 1.0.0-next.79

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 (318) hide show
  1. package/CHANGELOG.md +119 -0
  2. package/design/accordion.ts +73 -0
  3. package/design/avatar.ts +90 -0
  4. package/design/badge.ts +48 -0
  5. package/design/banner.ts +77 -0
  6. package/design/bracket.ts +457 -0
  7. package/design/breadcrumb.ts +145 -0
  8. package/design/button.ts +49 -0
  9. package/design/calendar.ts +306 -0
  10. package/design/card.ts +92 -0
  11. package/design/carousel.ts +240 -0
  12. package/design/chart.ts +512 -0
  13. package/design/checkbox.ts +275 -0
  14. package/design/chip.ts +64 -0
  15. package/design/config.json +22 -0
  16. package/design/control.ts +19 -0
  17. package/design/copy-button.ts +59 -0
  18. package/design/description-list.ts +41 -0
  19. package/design/dialog.ts +214 -0
  20. package/design/divider.ts +27 -0
  21. package/design/empty-state.ts +45 -0
  22. package/design/floating-action.ts +55 -0
  23. package/design/form-field.ts +40 -1
  24. package/design/grid.ts +148 -0
  25. package/design/icon-set.ts +19 -0
  26. package/design/icon.ts +9 -0
  27. package/design/input.ts +86 -0
  28. package/design/kbd.ts +19 -0
  29. package/design/loader.ts +152 -0
  30. package/design/masonry.ts +115 -0
  31. package/design/match.ts +131 -0
  32. package/design/menu.ts +143 -0
  33. package/design/notification.ts +129 -0
  34. package/design/otp-input.ts +107 -0
  35. package/design/pagination.ts +120 -0
  36. package/design/picture.ts +80 -0
  37. package/design/progress-steps.ts +79 -0
  38. package/design/query-error.ts +60 -0
  39. package/design/radio-group.ts +132 -0
  40. package/design/scheduler.ts +369 -0
  41. package/design/scrollable.ts +218 -0
  42. package/design/scrollbar.ts +47 -0
  43. package/design/sdk/assets/fallback.svg +1 -0
  44. package/design/sdk/assets/tall.svg +1 -0
  45. package/design/sdk/assets/wide.svg +1 -0
  46. package/design/sdk/components/accent-on-light/accent-on-light.css +35 -0
  47. package/design/sdk/components/accent-on-light/accent-on-light.ts +10 -0
  48. package/design/sdk/components/accent-on-light/shared/controls.ts +46 -0
  49. package/design/sdk/components/accordion/accordion.css +17 -0
  50. package/design/sdk/components/accordion/accordion.ts +64 -0
  51. package/design/sdk/components/avatar/avatar.css +14 -0
  52. package/design/sdk/components/avatar/avatar.ts +78 -0
  53. package/design/sdk/components/badge/badge.css +13 -0
  54. package/design/sdk/components/badge/badge.ts +52 -0
  55. package/design/sdk/components/banner/banner.css +18 -0
  56. package/design/sdk/components/banner/banner.ts +87 -0
  57. package/design/sdk/components/bracket/bracket.css +59 -0
  58. package/design/sdk/components/bracket/bracket.ts +143 -0
  59. package/design/sdk/components/breadcrumb/breadcrumb.css +25 -0
  60. package/design/sdk/components/breadcrumb/breadcrumb.ts +81 -0
  61. package/design/sdk/components/button/button.css +33 -0
  62. package/design/sdk/components/button/button.ts +82 -0
  63. package/design/sdk/components/calendar/calendar.css +33 -0
  64. package/design/sdk/components/calendar/calendar.ts +96 -0
  65. package/design/sdk/components/card/card.css +19 -0
  66. package/design/sdk/components/card/card.ts +61 -0
  67. package/design/sdk/components/carousel/carousel.css +44 -0
  68. package/design/sdk/components/carousel/carousel.ts +74 -0
  69. package/design/sdk/components/chart/chart.css +56 -0
  70. package/design/sdk/components/chart/chart.ts +98 -0
  71. package/design/sdk/components/chip/chip.css +18 -0
  72. package/design/sdk/components/chip/chip.ts +76 -0
  73. package/design/sdk/components/copy-button/copy-button.css +14 -0
  74. package/design/sdk/components/copy-button/copy-button.ts +59 -0
  75. package/design/sdk/components/description-list/description-list.css +7 -0
  76. package/design/sdk/components/description-list/description-list.ts +53 -0
  77. package/design/sdk/components/dialog/dialog.css +29 -0
  78. package/design/sdk/components/dialog/dialog.ts +78 -0
  79. package/design/sdk/components/divider/divider.css +26 -0
  80. package/design/sdk/components/divider/divider.ts +43 -0
  81. package/design/sdk/components/empty-state/empty-state.css +15 -0
  82. package/design/sdk/components/empty-state/empty-state.ts +56 -0
  83. package/design/sdk/components/floating-action/floating-action.css +51 -0
  84. package/design/sdk/components/floating-action/floating-action.ts +63 -0
  85. package/design/sdk/components/form-field/form-field.ts +118 -0
  86. package/design/sdk/components/grid/grid.css +17 -0
  87. package/design/sdk/components/grid/grid.ts +80 -0
  88. package/design/sdk/components/input/input.css +75 -0
  89. package/design/sdk/components/input/input.ts +79 -0
  90. package/design/sdk/components/kbd/kbd.css +25 -0
  91. package/design/sdk/components/kbd/kbd.ts +57 -0
  92. package/design/sdk/components/loader/loader.css +37 -0
  93. package/design/sdk/components/loader/loader.ts +68 -0
  94. package/design/sdk/components/masonry/masonry.css +7 -0
  95. package/design/sdk/components/masonry/masonry.ts +42 -0
  96. package/design/sdk/components/match/match.css +25 -0
  97. package/design/sdk/components/match/match.ts +76 -0
  98. package/design/sdk/components/menu/menu.css +22 -0
  99. package/design/sdk/components/menu/menu.ts +91 -0
  100. package/design/sdk/components/notification/notification.css +32 -0
  101. package/design/sdk/components/notification/notification.ts +106 -0
  102. package/design/sdk/components/otp-input/otp-input.css +35 -0
  103. package/design/sdk/components/otp-input/otp-input.ts +64 -0
  104. package/design/sdk/components/pagination/pagination.css +14 -0
  105. package/design/sdk/components/pagination/pagination.ts +75 -0
  106. package/design/sdk/components/picture/picture.css +37 -0
  107. package/design/sdk/components/picture/picture.ts +96 -0
  108. package/design/sdk/components/progress-steps/progress-steps.css +37 -0
  109. package/design/sdk/components/progress-steps/progress-steps.ts +91 -0
  110. package/design/sdk/components/query-error/query-error.css +33 -0
  111. package/design/sdk/components/query-error/query-error.ts +120 -0
  112. package/design/sdk/components/scheduler/scheduler.css +55 -0
  113. package/design/sdk/components/scheduler/scheduler.ts +239 -0
  114. package/design/sdk/components/scrollable/scrollable.css +58 -0
  115. package/design/sdk/components/scrollable/scrollable.ts +133 -0
  116. package/design/sdk/components/scrollbar/scrollbar.css +78 -0
  117. package/design/sdk/components/scrollbar/scrollbar.ts +123 -0
  118. package/design/sdk/components/select/select.css +5 -0
  119. package/design/sdk/components/select/select.ts +16 -0
  120. package/design/sdk/components/select/shared/select-part.ts +75 -0
  121. package/design/sdk/components/select-panel/select-panel.css +3 -0
  122. package/design/sdk/components/select-panel/select-panel.ts +124 -0
  123. package/design/sdk/components/skeleton/skeleton.css +22 -0
  124. package/design/sdk/components/skeleton/skeleton.ts +50 -0
  125. package/design/sdk/components/slider/slider.css +52 -0
  126. package/design/sdk/components/slider/slider.ts +86 -0
  127. package/design/sdk/components/standings/standings.css +33 -0
  128. package/design/sdk/components/standings/standings.ts +130 -0
  129. package/design/sdk/components/stat-tile/stat-tile.css +15 -0
  130. package/design/sdk/components/stat-tile/stat-tile.ts +84 -0
  131. package/design/sdk/components/stream/stream.css +48 -0
  132. package/design/sdk/components/stream/stream.ts +38 -0
  133. package/design/sdk/components/switch/switch.css +35 -0
  134. package/design/sdk/components/switch/switch.ts +63 -0
  135. package/design/sdk/components/table/table.css +67 -0
  136. package/design/sdk/components/table/table.ts +160 -0
  137. package/design/sdk/components/tabs/tabs.css +13 -0
  138. package/design/sdk/components/tabs/tabs.ts +74 -0
  139. package/design/sdk/components/textarea/textarea.css +116 -0
  140. package/design/sdk/components/textarea/textarea.ts +64 -0
  141. package/design/sdk/components/timeline/timeline.css +30 -0
  142. package/design/sdk/components/timeline/timeline.ts +87 -0
  143. package/design/sdk/components/toolbar/toolbar.css +24 -0
  144. package/design/sdk/components/toolbar/toolbar.ts +87 -0
  145. package/design/sdk/components/tooltip/tooltip.css +15 -0
  146. package/design/sdk/components/tooltip/tooltip.ts +28 -0
  147. package/design/sdk/components/tree/selected-tint.css +15 -0
  148. package/design/sdk/components/tree/tree.ts +70 -0
  149. package/design/sdk/fixtures.ts +0 -0
  150. package/design/sdk/foundations/colors/colors.css +632 -0
  151. package/design/sdk/foundations/colors/colors.ts +188 -0
  152. package/design/sdk/foundations/colors/overrides.json +19 -0
  153. package/design/sdk/foundations/colors/shared/contrast.ts +120 -0
  154. package/design/sdk/foundations/elevation/elevation.css +6 -0
  155. package/design/sdk/foundations/elevation/elevation.ts +11 -0
  156. package/design/sdk/foundations/elevation/shared/elevation/scene.css +101 -0
  157. package/design/sdk/foundations/elevation/shared/elevation/scene.ts +74 -0
  158. package/design/sdk/foundations/icons/icons.ts +119 -0
  159. package/design/select.ts +113 -28
  160. package/design/skeleton.ts +67 -0
  161. package/design/slider.ts +155 -0
  162. package/design/standings.ts +161 -0
  163. package/design/stat-tile.ts +109 -0
  164. package/design/stream.ts +92 -0
  165. package/design/switch.ts +83 -0
  166. package/design/table.ts +302 -0
  167. package/design/tabs.ts +75 -0
  168. package/design/textarea.ts +92 -0
  169. package/design/timeline.ts +52 -0
  170. package/design/toolbar.ts +95 -0
  171. package/design/tooltip.ts +87 -0
  172. package/design/tree.ts +106 -0
  173. package/fesm2022/ethlete-components.mjs +240 -199
  174. package/fesm2022/ethlete-components.mjs.map +1 -1
  175. package/package.json +1 -1
  176. package/src/lib/accordion/accordion.component.css +2 -1
  177. package/src/lib/avatar/avatar.component.css +10 -0
  178. package/src/lib/badge/badge.component.css +2 -2
  179. package/src/lib/banner/banner.component.css +3 -1
  180. package/src/lib/breadcrumb/breadcrumb-outlet.component.css +5 -0
  181. package/src/lib/breadcrumb/breadcrumb.component.css +5 -1
  182. package/src/lib/button/button.component.css +19 -0
  183. package/src/lib/button/icon-button.component.css +19 -20
  184. package/src/lib/button/split-button.component.css +5 -1
  185. package/src/lib/calendar/calendar.component.css +13 -3
  186. package/src/lib/card/card.component.css +4 -0
  187. package/src/lib/carousel/carousel-autoplay-styles.component.css +1 -1
  188. package/src/lib/carousel/carousel.component.css +2 -2
  189. package/src/lib/chart/chart-axis.component.css +3 -3
  190. package/src/lib/chip/chip.component.css +8 -2
  191. package/src/lib/description-list/description-list.component.css +2 -1
  192. package/src/lib/empty-state/empty-state.component.css +4 -0
  193. package/src/lib/floating-action/floating-action-styles.component.css +27 -0
  194. package/src/lib/focus-ring/focus-ring-styles.component.css +4 -1
  195. package/src/lib/forms/checkbox/checkbox.component.css +31 -5
  196. package/src/lib/forms/color-input/color-input.component.css +3 -1
  197. package/src/lib/forms/color-input/color-picker-panel.component.css +6 -2
  198. package/src/lib/forms/date-time/date-input/date-input.component.css +1 -1
  199. package/src/lib/forms/date-time/date-time-input/date-time-input.component.css +1 -1
  200. package/src/lib/forms/date-time/duration-input/duration-input.component.css +1 -1
  201. package/src/lib/forms/date-time/range-input-shell-styles.component.css +1 -1
  202. package/src/lib/forms/date-time/time-input/time-input.component.css +1 -1
  203. package/src/lib/forms/description/description.component.css +7 -0
  204. package/src/lib/forms/dropzone/dropzone.component.css +26 -0
  205. package/src/lib/forms/form-field/form-field-control-suffix-styles.component.css +4 -2
  206. package/src/lib/forms/form-field/form-field-text-shell-styles.component.css +74 -17
  207. package/src/lib/forms/form-field/form-field-textarea-styles.component.css +62 -0
  208. package/src/lib/forms/form-field/form-field.component.css +6 -0
  209. package/src/lib/forms/form-field/headless/label.directive.css +1 -1
  210. package/src/lib/forms/input/input.component.css +6 -2
  211. package/src/lib/forms/input/number-input.component.css +2 -2
  212. package/src/lib/forms/input/password-input.component.css +4 -3
  213. package/src/lib/forms/otp-input/otp-input.component.css +23 -4
  214. package/src/lib/forms/phone-input/phone-input.component.css +4 -3
  215. package/src/lib/forms/rating/rating.component.css +2 -1
  216. package/src/lib/forms/rich-text-editor/rich-text-editor.component.css +1 -1
  217. package/src/lib/forms/select/select-option-styles.component.css +3 -2
  218. package/src/lib/forms/selection-card-styles.component.css +3 -2
  219. package/src/lib/forms/selection-list/checkbox-group/checkbox-group-select-all.component.css +4 -2
  220. package/src/lib/forms/selection-list/checkbox-group/checkbox-option.component.css +4 -2
  221. package/src/lib/forms/selection-list/radio-group/radio.component.css +5 -2
  222. package/src/lib/forms/selection-list/segmented-button-group/segmented-button.component.css +2 -1
  223. package/src/lib/forms/slider/range-slider.component.css +98 -6
  224. package/src/lib/forms/slider/slider.component.css +96 -4
  225. package/src/lib/forms/switch/switch.component.css +47 -4
  226. package/src/lib/forms/tag-input/tag-input.component.css +2 -2
  227. package/src/lib/forms/textarea/textarea-autosize-styles.component.css +2 -3
  228. package/src/lib/forms/textarea/textarea.component.css +7 -2
  229. package/src/lib/grid/grid-item-toolbar.component.css +10 -0
  230. package/src/lib/grid/grid-item.component.css +6 -1
  231. package/src/lib/icon/headless/align-icons.ts +30 -0
  232. package/src/lib/icon/headless/arrow-out-up-right-icon.ts +17 -0
  233. package/src/lib/icon/headless/arrow-right-icon.ts +23 -0
  234. package/src/lib/icon/headless/arrow-up-icon.ts +30 -0
  235. package/src/lib/icon/headless/arrows-left-right-icon.ts +31 -0
  236. package/src/lib/icon/headless/bold-icon.ts +11 -0
  237. package/src/lib/icon/headless/calendar-icon.ts +21 -0
  238. package/src/lib/icon/headless/check-icon.ts +14 -0
  239. package/src/lib/icon/headless/chevron-icon.ts +14 -0
  240. package/src/lib/icon/headless/circle-check-icon.ts +14 -0
  241. package/src/lib/icon/headless/circle-info-icon.ts +14 -0
  242. package/src/lib/icon/headless/clipboard-check-icon.ts +28 -0
  243. package/src/lib/icon/headless/clock-icon.ts +21 -0
  244. package/src/lib/icon/headless/code-block-icon.ts +15 -0
  245. package/src/lib/icon/headless/code-icon.ts +14 -0
  246. package/src/lib/icon/headless/ellipsis-icon.ts +13 -0
  247. package/src/lib/icon/headless/ellipsis-vertical-icon.ts +13 -0
  248. package/src/lib/icon/headless/eye-icons.ts +27 -0
  249. package/src/lib/icon/headless/eyedropper-icon.ts +22 -0
  250. package/src/lib/icon/headless/file-icon.ts +16 -0
  251. package/src/lib/icon/headless/filter-icon.ts +11 -0
  252. package/src/lib/icon/headless/floppy-disk-icon.ts +27 -0
  253. package/src/lib/icon/headless/focus-frame-icon.ts +16 -0
  254. package/src/lib/icon/headless/grid-2x2-icon.ts +17 -0
  255. package/src/lib/icon/headless/heading-1-icon.ts +11 -0
  256. package/src/lib/icon/headless/heading-2-icon.ts +11 -0
  257. package/src/lib/icon/headless/heading-3-icon.ts +11 -0
  258. package/src/lib/icon/headless/icon-definition.ts +14 -0
  259. package/src/lib/icon/headless/image-icon.ts +14 -0
  260. package/src/lib/icon/headless/italic-icon.ts +19 -0
  261. package/src/lib/icon/headless/link-icon.ts +17 -0
  262. package/src/lib/icon/headless/list-bulleted-icon.ts +14 -0
  263. package/src/lib/icon/headless/list-numbered-icon.ts +14 -0
  264. package/src/lib/icon/headless/location-icon.ts +21 -0
  265. package/src/lib/icon/headless/lock-icon.ts +14 -0
  266. package/src/lib/icon/headless/minus-icon.ts +14 -0
  267. package/src/lib/icon/headless/paragraph-icon.ts +11 -0
  268. package/src/lib/icon/headless/pause-icon.ts +11 -0
  269. package/src/lib/icon/headless/pencil-icon.ts +21 -0
  270. package/src/lib/icon/headless/play-icon.ts +10 -0
  271. package/src/lib/icon/headless/plus-icon.ts +21 -0
  272. package/src/lib/icon/headless/quote-icon.ts +15 -0
  273. package/src/lib/icon/headless/rotate-right-icon.ts +16 -0
  274. package/src/lib/icon/headless/star-icon.ts +14 -0
  275. package/src/lib/icon/headless/strikethrough-icon.ts +18 -0
  276. package/src/lib/icon/headless/table-icon.ts +15 -0
  277. package/src/lib/icon/headless/thumbtack-icon.ts +18 -0
  278. package/src/lib/icon/headless/times-icon.ts +14 -0
  279. package/src/lib/icon/headless/trash-icon.ts +24 -0
  280. package/src/lib/icon/headless/triangle-exclamation-icon.ts +14 -0
  281. package/src/lib/icon/headless/trophy-icon.ts +24 -0
  282. package/src/lib/icon/headless/underline-icon.ts +12 -0
  283. package/src/lib/icon/headless/undo-redo-icons.ts +24 -0
  284. package/src/lib/icon/headless/upload-icon.ts +16 -0
  285. package/src/lib/loader/brand-loader/brand-loader.component.css +4 -1
  286. package/src/lib/loader/progress-bar/progress-bar.component.css +1 -1
  287. package/src/lib/loader/spinner/spinner-styles.component.css +1 -1
  288. package/src/lib/match/match-card.component.css +9 -3
  289. package/src/lib/match/match-score.component.css +4 -1
  290. package/src/lib/menu/menu-selection-item.component.css +1 -1
  291. package/src/lib/menu/menu.component.css +5 -0
  292. package/src/lib/overlay/overlay-container.component.css +4 -0
  293. package/src/lib/pagination/pagination.component.css +4 -0
  294. package/src/lib/progress-steps/progress-step.component.css +4 -4
  295. package/src/lib/query-error/query-error.component.css +4 -0
  296. package/src/lib/scheduler/scheduler-appointment-styles.component.css +21 -5
  297. package/src/lib/scheduler/scheduler-month-view.component.css +4 -2
  298. package/src/lib/scheduler/scheduler-time-grid-view.component.css +8 -2
  299. package/src/lib/scrollable/headless/scrollable-navigation.component.css +1 -1
  300. package/src/lib/standings/standings-pick.component.css +1 -1
  301. package/src/lib/standings/standings.component.css +10 -10
  302. package/src/lib/stat-tile/stat-tile-sparkline.component.css +1 -1
  303. package/src/lib/stream/consent/stream-consent.component.css +99 -0
  304. package/src/lib/stream/error/stream-player-error.component.css +100 -0
  305. package/src/lib/stream/loading/stream-player-loading.component.css +16 -0
  306. package/src/lib/stream/pip/pip-slot-placeholder.component.css +68 -0
  307. package/src/lib/stream/stream-player-slot-styles.component.css +4 -0
  308. package/src/lib/table/table-resize-grip.component.css +2 -1
  309. package/src/lib/table/table-select-cell.component.css +45 -15
  310. package/src/lib/table/table.component.css +15 -5
  311. package/src/lib/tabs/tab-bar-styles.component.css +1 -1
  312. package/src/lib/tabs/tabs/tab-group.component.css +111 -0
  313. package/src/lib/time-picker/time-picker.component.css +2 -1
  314. package/src/lib/timeline/timeline-item.component.css +5 -1
  315. package/src/lib/toolbar/toolbar.component.css +4 -0
  316. package/src/lib/tooltip/tooltip.component.css +14 -0
  317. package/src/lib/tree/tree.component.css +2 -2
  318. package/types/ethlete-components.d.ts +62 -53
@@ -255,6 +255,32 @@
255
255
  et-dropzone[data-error] {
256
256
  .et-dropzone-trigger {
257
257
  border-color: var(--et-theme-color-primary-solid, currentColor);
258
+
259
+ @media (hover: hover) {
260
+ &:hover:not(:disabled, [aria-disabled='true']) {
261
+ border-color: light-dark(
262
+ rgb(var(--et-color-primary-hover, var(--et-color-primary))),
263
+ rgb(
264
+ var(
265
+ --et-color-primary-ink-active,
266
+ var(
267
+ --et-color-primary-ink-focus,
268
+ var(
269
+ --et-color-primary-ink-hover,
270
+ var(
271
+ --et-color-primary-ink,
272
+ var(
273
+ --et-color-primary-active,
274
+ var(--et-color-primary-focus, var(--et-color-primary-hover, var(--et-color-primary)))
275
+ )
276
+ )
277
+ )
278
+ )
279
+ )
280
+ )
281
+ );
282
+ }
283
+ }
258
284
  }
259
285
  }
260
286
 
@@ -70,7 +70,8 @@
70
70
  }
71
71
 
72
72
  &:focus-visible::before {
73
- outline: 2px solid var(--et-theme-color-primary-solid, currentColor);
73
+ outline: 2px solid
74
+ light-dark(var(--et-theme-color-ink-solid, currentColor), var(--et-theme-color-primary-solid, currentColor));
74
75
  outline-offset: 1px;
75
76
  }
76
77
 
@@ -125,7 +126,8 @@
125
126
  }
126
127
 
127
128
  &:focus-visible {
128
- outline: 2px solid var(--et-theme-color-primary-solid, currentColor);
129
+ outline: 2px solid
130
+ light-dark(var(--et-theme-color-ink-solid, currentColor), var(--et-theme-color-primary-solid, currentColor));
129
131
  outline-offset: 2px;
130
132
  border-radius: 4px;
131
133
  }
@@ -47,6 +47,63 @@
47
47
  injected by the control, so a control instantiated before any form-field would inject it
48
48
  *before* the base sheet and lose every source-order tie against the base frame/label rules. */
49
49
  &[data-text-shell] {
50
+ --_et-form-field-frame-border: var(--et-surface-interaction-solid, currentColor);
51
+ --_et-form-field-frame-border-hover: color-mix(
52
+ in srgb,
53
+ var(--et-surface-interaction-solid, currentColor) 75%,
54
+ var(--et-surface-color-solid, currentColor)
55
+ );
56
+ --_et-form-field-frame-focus: var(--et-surface-color-solid, currentColor);
57
+ --_et-form-field-label-color: var(--et-surface-color-muted-solid, currentColor);
58
+ --_et-form-field-label-color-active: var(--et-surface-color-solid, currentColor);
59
+
60
+ &[data-error] {
61
+ --_et-form-field-frame-border: var(--et-theme-color-primary-solid);
62
+ --_et-form-field-frame-border-hover: light-dark(
63
+ rgb(var(--et-color-primary-hover, var(--et-color-primary))),
64
+ rgb(
65
+ var(
66
+ --et-color-primary-ink-active,
67
+ var(
68
+ --et-color-primary-ink-focus,
69
+ var(
70
+ --et-color-primary-ink-hover,
71
+ var(
72
+ --et-color-primary-ink,
73
+ var(
74
+ --et-color-primary-active,
75
+ var(--et-color-primary-focus, var(--et-color-primary-hover, var(--et-color-primary)))
76
+ )
77
+ )
78
+ )
79
+ )
80
+ )
81
+ )
82
+ );
83
+ --_et-form-field-frame-focus: var(--et-theme-color-ink-solid);
84
+ --_et-form-field-label-color: var(--et-theme-color-ink-solid);
85
+ --_et-form-field-label-color-active: var(--et-theme-color-ink-solid);
86
+ }
87
+
88
+ &:not(:has(> .et-form-field-shell > .et-form-field-control-frame > .et-form-field-prefix svg)) {
89
+ --_et-form-field-prefix-gap: 4px;
90
+ }
91
+
92
+ .et-form-field-control-frame {
93
+ border-color: var(--_et-form-field-frame-border);
94
+ }
95
+
96
+ .et-form-field-prefix {
97
+ margin-inline-end: calc(
98
+ var(--_et-form-field-prefix-gap, var(--et-form-field-control-affix-gap)) -
99
+ var(--et-form-field-control-affix-gap)
100
+ );
101
+ }
102
+
103
+ .et-form-field-affix {
104
+ color: var(--_et-form-field-label-color);
105
+ }
106
+
50
107
  &[data-label-mode='static'] {
51
108
  &[data-has-label]:not(:has(et-label[hidden])) .et-form-field-shell {
52
109
  padding-block-start: calc(var(--et-form-field-label-font-size) * 1.2 + var(--et-form-field-gap));
@@ -178,6 +235,7 @@
178
235
  }
179
236
 
180
237
  .et-form-field-label-area {
238
+ color: var(--_et-form-field-label-color);
181
239
  max-inline-size: 100%;
182
240
  overflow: hidden;
183
241
  text-overflow: ellipsis;
@@ -194,12 +252,12 @@
194
252
  :has(.et-form-field-label-area:hover)
195
253
  ) {
196
254
  .et-form-field-control-frame {
197
- border-color: var(--et-surface-interaction-hover-solid, currentColor);
255
+ border-color: var(--_et-form-field-frame-border-hover);
198
256
  }
199
257
 
200
258
  .et-form-field-label-area,
201
259
  .et-form-field-affix {
202
- color: var(--et-surface-color-solid, currentColor);
260
+ color: var(--_et-form-field-label-color-active);
203
261
  opacity: 1;
204
262
  }
205
263
  }
@@ -208,7 +266,8 @@
208
266
  &:where(:has(:focus-visible):not([data-readonly])) .et-form-field-control-frame,
209
267
  &:where([data-expanded]:not([data-readonly])) .et-form-field-control-frame,
210
268
  &:where([data-focused]:not([data-readonly])) .et-form-field-control-frame {
211
- border-color: var(--et-theme-color-primary-solid);
269
+ border-color: var(--_et-form-field-frame-focus);
270
+ box-shadow: inset 0 0 0 var(--et-form-field-control-border-width) var(--_et-form-field-frame-focus);
212
271
  }
213
272
 
214
273
  &:where(:has(:focus-visible):not([data-readonly])) .et-form-field-label-area,
@@ -217,7 +276,7 @@
217
276
  &:where([data-expanded]:not([data-readonly])) .et-form-field-affix,
218
277
  &:where([data-focused]:not([data-readonly])) .et-form-field-label-area,
219
278
  &:where([data-focused]:not([data-readonly])) .et-form-field-affix {
220
- color: var(--et-surface-color-solid, currentColor);
279
+ color: var(--_et-form-field-label-color-active);
221
280
  opacity: 1;
222
281
  }
223
282
 
@@ -227,9 +286,20 @@
227
286
  }
228
287
 
229
288
  .et-form-field-control-frame {
289
+ border-style: dashed;
230
290
  cursor: default;
231
291
  }
232
292
 
293
+ &:is([data-focused], :has(:focus-visible)) .et-form-field-control-frame {
294
+ border-color: var(--_et-form-field-frame-focus);
295
+ }
296
+
297
+ &:not([data-appearance='underline']):is([data-focused], :has(:focus-visible)) .et-form-field-control-frame {
298
+ border-color: transparent;
299
+ outline: calc(2 * var(--et-form-field-control-border-width)) dashed var(--_et-form-field-frame-focus);
300
+ outline-offset: calc(-2 * var(--et-form-field-control-border-width));
301
+ }
302
+
233
303
  .et-form-field-label-area {
234
304
  cursor: default;
235
305
  }
@@ -242,19 +312,6 @@
242
312
  }
243
313
  }
244
314
 
245
- &[data-error] .et-form-field-control-frame {
246
- border-color: var(--et-theme-color-primary-solid);
247
- }
248
-
249
- &[data-error] .et-form-field-label-area {
250
- color: var(--et-theme-color-ink-solid);
251
- }
252
-
253
- &[data-error] .et-form-field-affix {
254
- color: var(--et-theme-color-ink-solid);
255
- opacity: 1;
256
- }
257
-
258
315
  /* Driven by the registered control's disabled state (data-disabled), NOT :has(:disabled) —
259
316
  a composite control like the rich text editor legitimately disables individual toolbar
260
317
  buttons while fully enabled, and :has(:disabled) would dim (and pointer-events-kill) the
@@ -4,6 +4,68 @@
4
4
  align-items: stretch;
5
5
  }
6
6
 
7
+ &[data-appearance='box']:not([data-label-mode='floating-inside']) {
8
+ --_et-form-field-textarea-font-size: var(--et-form-field-control-font-size);
9
+ --_et-form-field-textarea-padding-block: max(
10
+ var(--et-form-field-control-padding-block),
11
+ (
12
+ var(--et-form-field-control-min-height) - var(--_et-form-field-textarea-font-size) *
13
+ var(--et-form-field-control-line-height) - 2 * var(--et-form-field-control-border-width)
14
+ ) /
15
+ 2
16
+ );
17
+
18
+ .et-form-field-control-frame {
19
+ padding-block: 0;
20
+ }
21
+
22
+ .et-form-field-affix {
23
+ padding-block: var(--_et-form-field-textarea-padding-block);
24
+ }
25
+
26
+ .et-textarea-native {
27
+ box-sizing: border-box;
28
+ padding-block: var(--_et-form-field-textarea-padding-block);
29
+ }
30
+
31
+ .et-form-field-control-frame:not(:has(> .et-form-field-suffix:not(:empty))) {
32
+ padding-inline-end: 0;
33
+
34
+ .et-textarea-native {
35
+ padding-inline-end: var(--et-form-field-control-padding-inline);
36
+ }
37
+ }
38
+
39
+ :where(.et-textarea-native[data-resize='vertical']) {
40
+ min-block-size: calc(1lh + 2 * var(--_et-form-field-textarea-padding-block));
41
+ }
42
+
43
+ textarea[data-et-textarea-autosize] {
44
+ min-block-size: calc(var(--et-textarea-min-rows, 1) * 1lh + 2 * var(--_et-form-field-textarea-padding-block));
45
+ max-block-size: calc(
46
+ var(--et-textarea-max-block-size, 1000lh) + 2 * var(--_et-form-field-textarea-padding-block)
47
+ );
48
+ }
49
+
50
+ &[data-label-mode='floating-outside'] .et-form-field-label-area--floating {
51
+ margin-block-start: var(--_et-form-field-textarea-padding-block);
52
+ }
53
+
54
+ &[data-label-mode='inline'] .et-form-field-label-area--inline {
55
+ margin-block: 0;
56
+ padding-block-start: calc(
57
+ var(--_et-form-field-textarea-padding-block) +
58
+ (var(--_et-form-field-textarea-font-size) - var(--et-form-field-control-font-size)) *
59
+ var(--et-form-field-control-line-height) / 2
60
+ );
61
+ }
62
+
63
+ /* Mirrors the 16px floor form-field.component.css puts on a coarse-pointer textarea. */
64
+ @media (pointer: coarse) {
65
+ --_et-form-field-textarea-font-size: max(var(--et-form-field-control-font-size), 16px);
66
+ }
67
+ }
68
+
7
69
  .et-form-field-control-area,
8
70
  .et-form-field-control-slot {
9
71
  align-items: stretch;
@@ -305,6 +305,12 @@
305
305
  );
306
306
  }
307
307
 
308
+ > et-description {
309
+ padding-inline-start: calc(
310
+ var(--et-form-field-control-padding-inline) + var(--et-form-field-control-border-width)
311
+ );
312
+ }
313
+
308
314
  .et-form-field-support[data-can-animate] {
309
315
  transition: block-size var(--et-form-field-support-duration) ease;
310
316
 
@@ -14,7 +14,7 @@
14
14
 
15
15
  .et-label-required-marker {
16
16
  display: inline-block;
17
- color: var(--et-theme-color-primary-solid);
17
+ color: var(--et-theme-color-ink-solid);
18
18
  margin-inline-start: 0.45ch;
19
19
  transition: color 150ms ease;
20
20
  }
@@ -23,7 +23,11 @@
23
23
  }
24
24
 
25
25
  &::placeholder {
26
- color: color-mix(in srgb, currentColor 46%, transparent);
26
+ color: color-mix(in srgb, currentColor 60%, transparent);
27
+ }
28
+
29
+ &::-webkit-search-cancel-button {
30
+ appearance: none;
27
31
  }
28
32
 
29
33
  &[data-text-align='start'] {
@@ -40,7 +44,7 @@
40
44
  }
41
45
 
42
46
  /* an unresolved bulk-edit value reads as provisional — the mixed label shows as the
43
- placeholder, between a committed value (full strength) and a real placeholder (46%) */
47
+ placeholder, between a committed value (full strength) and a real placeholder (60%) */
44
48
  &[data-mixed] .et-input-native::placeholder {
45
49
  font-style: italic;
46
50
  color: color-mix(in srgb, currentColor 72%, transparent);
@@ -102,7 +102,7 @@
102
102
  }
103
103
 
104
104
  &::placeholder {
105
- color: color-mix(in srgb, currentColor 46%, transparent);
105
+ color: color-mix(in srgb, currentColor 60%, transparent);
106
106
  }
107
107
 
108
108
  &[data-text-align='start'] {
@@ -119,7 +119,7 @@
119
119
  }
120
120
 
121
121
  /* an unresolved bulk-edit value reads as provisional — the mixed label shows as the
122
- placeholder, between a committed value (full strength) and a real placeholder (46%) */
122
+ placeholder, between a committed value (full strength) and a real placeholder (60%) */
123
123
  &[data-mixed] .et-number-input-native::placeholder {
124
124
  font-style: italic;
125
125
  color: color-mix(in srgb, currentColor 72%, transparent);
@@ -32,12 +32,12 @@
32
32
  }
33
33
 
34
34
  &::placeholder {
35
- color: color-mix(in srgb, currentColor 46%, transparent);
35
+ color: color-mix(in srgb, currentColor 60%, transparent);
36
36
  }
37
37
  }
38
38
 
39
39
  /* an unresolved bulk-edit value reads as provisional — the mixed label shows as the
40
- placeholder, between a committed value (full strength) and a real placeholder (46%) */
40
+ placeholder, between a committed value (full strength) and a real placeholder (60%) */
41
41
  &[data-mixed] .et-password-input-native::placeholder {
42
42
  font-style: italic;
43
43
  color: color-mix(in srgb, currentColor 72%, transparent);
@@ -86,7 +86,8 @@
86
86
  }
87
87
 
88
88
  &:focus-visible {
89
- outline: 2px solid var(--et-theme-color-primary-solid, currentColor);
89
+ outline: 2px solid
90
+ light-dark(var(--et-theme-color-ink-solid, currentColor), var(--et-theme-color-primary-solid, currentColor));
90
91
  outline-offset: 1px;
91
92
  }
92
93
 
@@ -61,6 +61,8 @@
61
61
  display: inline-flex;
62
62
  flex-direction: column;
63
63
  gap: 6px;
64
+ max-inline-size: 100%;
65
+ min-inline-size: 0;
64
66
  color: var(--et-surface-color-solid, currentColor);
65
67
 
66
68
  --et-form-support-duration: var(--et-otp-input-support-duration);
@@ -78,9 +80,14 @@
78
80
  user-select: none;
79
81
  }
80
82
 
83
+ > et-label .et-label-required-marker {
84
+ color: light-dark(var(--et-theme-color-ink-solid), var(--et-theme-color-primary-solid));
85
+ }
86
+
81
87
  .et-otp-input-field {
82
88
  position: relative;
83
89
  inline-size: fit-content;
90
+ max-inline-size: 100%;
84
91
  }
85
92
 
86
93
  .et-otp-input-segments {
@@ -89,11 +96,13 @@
89
96
  }
90
97
 
91
98
  .et-otp-input-segment {
99
+ box-sizing: border-box;
92
100
  display: flex;
93
101
  align-items: center;
94
102
  justify-content: center;
95
103
  inline-size: var(--et-otp-input-segment-size);
96
- block-size: var(--et-otp-input-segment-size);
104
+ min-inline-size: 0;
105
+ aspect-ratio: 1;
97
106
  border: 1px solid var(--et-surface-border-solid, rgb(255 255 255 / 0.1));
98
107
  border-radius: var(--et-otp-input-segment-radius);
99
108
  font-size: calc(var(--et-otp-input-segment-size) * 0.45);
@@ -102,8 +111,8 @@
102
111
  user-select: none;
103
112
 
104
113
  &[data-caret] {
105
- border-color: var(--et-theme-color-primary-solid, currentColor);
106
- outline: 1px solid var(--et-theme-color-primary-solid, currentColor);
114
+ border-color: var(--et-theme-color-ink-solid, currentColor);
115
+ outline: 1px solid var(--et-theme-color-ink-solid, currentColor);
107
116
  outline-offset: -1px;
108
117
  }
109
118
 
@@ -116,7 +125,7 @@
116
125
  inline-size: 2px;
117
126
  block-size: 1.1em;
118
127
  border-radius: 1px;
119
- background: var(--et-theme-color-primary-solid, currentColor);
128
+ background: var(--et-theme-color-ink-solid, currentColor);
120
129
  animation: et-otp-input-caret-blink 1.1s steps(2, jump-none) infinite;
121
130
  }
122
131
  }
@@ -156,6 +165,16 @@
156
165
  border-color: var(--et-theme-color-primary-solid, currentColor);
157
166
  }
158
167
 
168
+ @media (hover: hover) {
169
+ &:not(:has(.et-otp-input-native:read-only)):hover .et-otp-input-segment:not([data-caret]) {
170
+ border-color: var(--et-surface-interaction-hover-solid);
171
+ }
172
+
173
+ &[data-error]:not(:has(.et-otp-input-native:read-only)):hover .et-otp-input-segment:not([data-caret]) {
174
+ border-color: var(--et-theme-color-ink-solid);
175
+ }
176
+ }
177
+
159
178
  &:has(.et-otp-input-native:disabled) {
160
179
  opacity: 0.4;
161
180
 
@@ -27,7 +27,8 @@
27
27
  }
28
28
 
29
29
  &:focus-visible {
30
- outline: 2px solid var(--et-theme-color-primary-solid, currentColor);
30
+ outline: 2px solid
31
+ light-dark(var(--et-theme-color-ink-solid, currentColor), var(--et-theme-color-primary-solid, currentColor));
31
32
  outline-offset: 2px;
32
33
  border-radius: 4px;
33
34
  }
@@ -61,7 +62,7 @@
61
62
  font-variant-numeric: tabular-nums;
62
63
 
63
64
  &::placeholder {
64
- color: color-mix(in srgb, currentColor 46%, transparent);
65
+ color: color-mix(in srgb, currentColor 60%, transparent);
65
66
  }
66
67
 
67
68
  &:disabled {
@@ -70,7 +71,7 @@
70
71
  }
71
72
 
72
73
  /* an unresolved bulk-edit value reads as provisional — the mixedLabel placeholder sits
73
- between committed text (full strength) and the regular placeholder (46%). Consumers
74
+ between committed text (full strength) and the regular placeholder (60%). Consumers
74
75
  restyle via [data-mixed]. */
75
76
  &[data-mixed] .et-phone-input-field::placeholder {
76
77
  font-style: italic;
@@ -64,7 +64,8 @@
64
64
  }
65
65
 
66
66
  &:focus-visible .et-rating-icons {
67
- outline: 2px solid var(--et-theme-color-primary-solid, currentColor);
67
+ outline: 2px solid
68
+ light-dark(var(--et-theme-color-ink-solid, currentColor), var(--et-theme-color-primary-solid, currentColor));
68
69
  outline-offset: 2px;
69
70
  border-radius: 4px;
70
71
  }
@@ -167,7 +167,7 @@
167
167
 
168
168
  &:empty::before {
169
169
  content: attr(data-placeholder);
170
- color: color-mix(in srgb, currentColor 46%, transparent);
170
+ color: color-mix(in srgb, currentColor 60%, transparent);
171
171
  pointer-events: none;
172
172
  }
173
173
  }
@@ -61,7 +61,8 @@
61
61
  opacity 120ms ease;
62
62
 
63
63
  &:where([data-active][data-active-source='keyboard']) {
64
- background: color-mix(in srgb, var(--et-surface-interaction-solid, rgb(255 255 255)) 12%, transparent);
64
+ outline: 2px solid var(--et-theme-color-ink-solid, currentColor);
65
+ outline-offset: -2px;
65
66
  }
66
67
 
67
68
  @media (hover: hover) {
@@ -90,7 +91,7 @@
90
91
  flex: none;
91
92
  inline-size: var(--et-select-option-check-size);
92
93
  block-size: var(--et-select-option-check-size);
93
- color: var(--et-theme-color-primary-solid, currentColor);
94
+ color: var(--et-theme-color-ink-solid, currentColor);
94
95
  /* hidden via opacity, NOT visibility — an explicit `visibility: visible` would punch
95
96
  through the pane's positioning phase (`visibility: hidden`) and paint the check
96
97
  before the panel itself becomes visible */
@@ -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