@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
@@ -46,10 +46,37 @@
46
46
  reader cannot see. */
47
47
  visibility: hidden;
48
48
  }
49
+
50
+ .et-floating-action-trigger:where(
51
+ [data-floating-action-state='floating'],
52
+ [data-floating-action-state='hidden']
53
+ )::before {
54
+ content: '';
55
+ position: absolute;
56
+ inset: 0;
57
+ border-radius: inherit;
58
+ pointer-events: none;
59
+ opacity: 0;
60
+ box-shadow:
61
+ 0 0.3rem 0.8rem rgb(var(--et-shadow-color-rgb, 0 0 0) / 0.2),
62
+ 0 0.1rem 0.3rem rgb(var(--et-shadow-color-rgb, 0 0 0) / 0.12);
63
+ }
64
+
65
+ .et-floating-action-trigger:where([data-floating-action-state='floating']) {
66
+ --et-button-shadow: inset 0 0 0 1px light-dark(var(--et-theme-color-ink-solid), transparent);
67
+ }
68
+
69
+ .et-floating-action-trigger:where([data-floating-action-state='floating'])::before {
70
+ opacity: 1;
71
+ }
49
72
  }
50
73
 
51
74
  @media (prefers-reduced-motion: no-preference) {
52
75
  .et-floating-action {
76
+ .et-floating-action-trigger::before {
77
+ transition: opacity var(--et-floating-action-duration) var(--ease-3, ease-out);
78
+ }
79
+
53
80
  /* Scaling *in* is a keyframe rather than a transition: the first time the trigger detaches there is no
54
81
  previous scale to animate from. */
55
82
  .et-floating-action-trigger:where([data-floating-action-state='floating']) {
@@ -2,7 +2,10 @@
2
2
  .et-focus-ring {
3
3
  --_et-focus-ring-offset: 3px;
4
4
  --_et-focus-ring-width: 2px;
5
- --_et-focus-ring-color: var(--et-theme-color-primary-solid, currentColor);
5
+ --_et-focus-ring-color: light-dark(
6
+ var(--et-theme-color-ink-solid, currentColor),
7
+ var(--et-theme-color-primary-solid, currentColor)
8
+ );
6
9
  outline: var(--_et-focus-ring-width) solid transparent;
7
10
  outline-offset: var(--_et-focus-ring-offset);
8
11
  }
@@ -51,12 +51,13 @@
51
51
  }
52
52
 
53
53
  .et-checkbox-box {
54
+ box-sizing: border-box;
54
55
  position: relative;
55
56
  display: grid;
56
57
  place-items: center;
57
58
  width: var(--et-checkbox-size);
58
59
  height: var(--et-checkbox-size);
59
- border: var(--et-checkbox-border-width) solid var(--et-surface-border-solid, currentColor);
60
+ border: var(--et-checkbox-border-width) solid var(--et-surface-interaction-solid, currentColor);
60
61
  border-radius: var(--et-checkbox-border-radius);
61
62
  }
62
63
 
@@ -79,11 +80,33 @@
79
80
  }
80
81
 
81
82
  @media (hover: hover) {
82
- :where(et-choice-field[data-error]) &:hover:not([aria-disabled='true']):not([data-readonly]) .et-checkbox-box,
83
+ :where(et-choice-field[data-error])
84
+ &:hover:not([aria-disabled='true']):not([data-readonly]):not([aria-checked='true']):not([aria-checked='mixed'])
85
+ .et-checkbox-box,
83
86
  :where(et-choice-field[data-error]:has(.et-choice-field-label-area:hover))
84
- &:not([aria-disabled='true']):not([data-readonly])
87
+ &:not([aria-disabled='true']):not([data-readonly]):not([aria-checked='true']):not([aria-checked='mixed'])
85
88
  .et-checkbox-box {
86
- border-color: var(--et-theme-color-primary-solid);
89
+ border-color: light-dark(
90
+ rgb(var(--et-color-primary-hover, var(--et-color-primary))),
91
+ rgb(
92
+ var(
93
+ --et-color-primary-ink-active,
94
+ var(
95
+ --et-color-primary-ink-focus,
96
+ var(
97
+ --et-color-primary-ink-hover,
98
+ var(
99
+ --et-color-primary-ink,
100
+ var(
101
+ --et-color-primary-active,
102
+ var(--et-color-primary-focus, var(--et-color-primary-hover, var(--et-color-primary)))
103
+ )
104
+ )
105
+ )
106
+ )
107
+ )
108
+ )
109
+ );
87
110
  }
88
111
  }
89
112
 
@@ -100,7 +123,10 @@
100
123
  }
101
124
 
102
125
  et-choice-field[data-error] &:focus-visible:not([aria-checked='true']):not([aria-checked='mixed']) {
103
- --_et-focus-ring-color: var(--et-theme-color-primary-solid);
126
+ --_et-focus-ring-color: light-dark(
127
+ var(--et-theme-color-ink-solid, currentColor),
128
+ var(--et-theme-color-primary-solid, currentColor)
129
+ );
104
130
  }
105
131
 
106
132
  et-choice-field[data-error]
@@ -47,6 +47,7 @@
47
47
  --_et-color-input-checker: color-mix(in srgb, currentColor 18%, transparent);
48
48
  --_et-color-input-swatch-color: transparent;
49
49
 
50
+ box-sizing: border-box;
50
51
  inline-size: var(--et-color-input-swatch-size);
51
52
  block-size: var(--et-color-input-swatch-size);
52
53
  border-radius: var(--et-color-input-swatch-radius);
@@ -86,7 +87,8 @@
86
87
  outline: none;
87
88
 
88
89
  .et-color-input-swatch {
89
- outline: 2px solid var(--et-theme-color-primary-solid, currentColor);
90
+ outline: 2px solid
91
+ light-dark(var(--et-theme-color-ink-solid, currentColor), var(--et-theme-color-primary-solid, currentColor));
90
92
  outline-offset: 2px;
91
93
  }
92
94
  }
@@ -88,7 +88,8 @@
88
88
  cursor: crosshair;
89
89
 
90
90
  &:has(.et-color-picker-channel:focus-visible) {
91
- outline: 2px solid var(--et-theme-color-primary-solid, currentColor);
91
+ outline: 2px solid
92
+ light-dark(var(--et-theme-color-ink-solid, currentColor), var(--et-theme-color-primary-solid, currentColor));
92
93
  outline-offset: 2px;
93
94
  }
94
95
  }
@@ -99,7 +100,8 @@
99
100
  border-radius: 999px;
100
101
 
101
102
  &:has(.et-color-picker-channel:focus-visible) {
102
- outline: 2px solid var(--et-theme-color-primary-solid, currentColor);
103
+ outline: 2px solid
104
+ light-dark(var(--et-theme-color-ink-solid, currentColor), var(--et-theme-color-primary-solid, currentColor));
103
105
  outline-offset: 2px;
104
106
  }
105
107
  }
@@ -148,6 +150,7 @@
148
150
  choosing, so it has to stay legible over every hue a token could not anticipate */
149
151
  .et-color-picker-area-thumb,
150
152
  .et-color-picker-track-thumb {
153
+ box-sizing: border-box;
151
154
  position: absolute;
152
155
  inline-size: var(--et-color-picker-thumb-size);
153
156
  block-size: var(--et-color-picker-thumb-size);
@@ -227,6 +230,7 @@
227
230
  --_et-color-picker-preview-color: transparent;
228
231
 
229
232
  flex: none;
233
+ box-sizing: border-box;
230
234
  inline-size: 20px;
231
235
  block-size: 20px;
232
236
  border-radius: 4px;
@@ -19,7 +19,7 @@
19
19
  font-variant-numeric: tabular-nums;
20
20
 
21
21
  &::placeholder {
22
- color: color-mix(in srgb, currentColor 46%, transparent);
22
+ color: color-mix(in srgb, currentColor 60%, transparent);
23
23
  }
24
24
 
25
25
  &:disabled {
@@ -19,7 +19,7 @@
19
19
  font-variant-numeric: tabular-nums;
20
20
 
21
21
  &::placeholder {
22
- color: color-mix(in srgb, currentColor 46%, transparent);
22
+ color: color-mix(in srgb, currentColor 60%, transparent);
23
23
  }
24
24
 
25
25
  &:disabled {
@@ -20,7 +20,7 @@
20
20
  font-variant-numeric: tabular-nums;
21
21
 
22
22
  &::placeholder {
23
- color: color-mix(in srgb, currentColor 46%, transparent);
23
+ color: color-mix(in srgb, currentColor 60%, transparent);
24
24
  }
25
25
 
26
26
  &:disabled {
@@ -32,7 +32,7 @@
32
32
  font-variant-numeric: tabular-nums;
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
  &:disabled {
@@ -19,7 +19,7 @@
19
19
  font-variant-numeric: tabular-nums;
20
20
 
21
21
  &::placeholder {
22
- color: color-mix(in srgb, currentColor 46%, transparent);
22
+ color: color-mix(in srgb, currentColor 60%, transparent);
23
23
  }
24
24
 
25
25
  &:disabled {
@@ -0,0 +1,7 @@
1
+ @layer components {
2
+ et-description {
3
+ display: block;
4
+ font-size: var(--et-description-font-size, 12px);
5
+ color: var(--et-surface-color-muted-solid, currentColor);
6
+ }
7
+ }
@@ -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,22 +47,59 @@
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-border-solid, currentColor);
51
- --_et-form-field-frame-border-hover: var(--et-surface-interaction-hover-solid, currentColor);
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);
52
57
  --_et-form-field-label-color: var(--et-surface-color-muted-solid, currentColor);
53
58
  --_et-form-field-label-color-active: var(--et-surface-color-solid, currentColor);
54
59
 
55
60
  &[data-error] {
56
- --_et-form-field-frame-border: color-mix(in srgb, var(--et-theme-color-primary-solid) 50%, transparent);
57
- --_et-form-field-frame-border-hover: var(--et-theme-color-ink-solid);
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);
58
84
  --_et-form-field-label-color: var(--et-theme-color-ink-solid);
59
85
  --_et-form-field-label-color-active: var(--et-theme-color-ink-solid);
60
86
  }
61
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
+
62
92
  .et-form-field-control-frame {
63
93
  border-color: var(--_et-form-field-frame-border);
64
94
  }
65
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
+
66
103
  .et-form-field-affix {
67
104
  color: var(--_et-form-field-label-color);
68
105
  }
@@ -229,7 +266,8 @@
229
266
  &:where(:has(:focus-visible):not([data-readonly])) .et-form-field-control-frame,
230
267
  &:where([data-expanded]:not([data-readonly])) .et-form-field-control-frame,
231
268
  &:where([data-focused]:not([data-readonly])) .et-form-field-control-frame {
232
- 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);
233
271
  }
234
272
 
235
273
  &:where(:has(:focus-visible):not([data-readonly])) .et-form-field-label-area,
@@ -248,9 +286,20 @@
248
286
  }
249
287
 
250
288
  .et-form-field-control-frame {
289
+ border-style: dashed;
251
290
  cursor: default;
252
291
  }
253
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
+
254
303
  .et-form-field-label-area {
255
304
  cursor: default;
256
305
  }
@@ -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
  }