material 3.0.2 → 3.0.4

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 (287) hide show
  1. package/README.md +2 -2
  2. package/dist/components/badge/config.d.ts +2 -2
  3. package/dist/components/button/features/toggle.d.ts +1 -1
  4. package/dist/components/button/types.d.ts +5 -5
  5. package/dist/components/button-group/button-group.d.ts +1 -1
  6. package/dist/components/button-group/constants.d.ts +1 -1
  7. package/dist/components/button-group/index.d.ts +1 -1
  8. package/dist/components/button-group/types.d.ts +2 -2
  9. package/dist/components/card/types.d.ts +5 -5
  10. package/dist/components/carousel/features/scroll.js +33 -33
  11. package/dist/components/carousel/keylines.d.ts +8 -5
  12. package/dist/components/carousel/keylines.js +23 -21
  13. package/dist/components/carousel/types.d.ts +1 -1
  14. package/dist/components/checkbox/types.d.ts +4 -4
  15. package/dist/components/chips/types.d.ts +12 -12
  16. package/dist/components/datepicker/datepicker.d.ts +1 -1
  17. package/dist/components/datepicker/types.d.ts +11 -11
  18. package/dist/components/datepicker/utils.d.ts +1 -1
  19. package/dist/components/dialog/types.d.ts +1 -1
  20. package/dist/components/drawer/types.d.ts +1 -1
  21. package/dist/components/extended-fab/types.d.ts +3 -3
  22. package/dist/components/fab/types.d.ts +2 -3
  23. package/dist/components/fab-menu/types.d.ts +1 -1
  24. package/dist/components/icon-button/types.d.ts +4 -5
  25. package/dist/components/list/types.d.ts +1 -1
  26. package/dist/components/menu/features/loader.d.ts +1 -1
  27. package/dist/components/menu/types.d.ts +3 -3
  28. package/dist/components/navigation-bar/types.d.ts +1 -1
  29. package/dist/components/navigation-rail/types.d.ts +2 -2
  30. package/dist/components/progress/types.d.ts +1 -1
  31. package/dist/components/radios/types.d.ts +1 -1
  32. package/dist/components/search/types.d.ts +5 -5
  33. package/dist/components/select/constants.d.ts +1 -1
  34. package/dist/components/select/types.d.ts +1 -1
  35. package/dist/components/slider/config.d.ts +1 -1
  36. package/dist/components/slider/features/axis.d.ts +1 -1
  37. package/dist/components/slider/features/controller.d.ts +14 -14
  38. package/dist/components/slider/types.d.ts +1 -1
  39. package/dist/components/snackbar/types.d.ts +1 -1
  40. package/dist/components/switch/features.d.ts +1 -1
  41. package/dist/components/switch/types.d.ts +5 -5
  42. package/dist/components/tabs/features.d.ts +1 -1
  43. package/dist/components/tabs/responsive.d.ts +1 -1
  44. package/dist/components/tabs/types.d.ts +7 -8
  45. package/dist/components/tabs/utils.d.ts +5 -5
  46. package/dist/components/text-field/constants.d.ts +1 -1
  47. package/dist/components/text-field/features/counter.d.ts +1 -1
  48. package/dist/components/text-field/features/field.d.ts +1 -1
  49. package/dist/components/text-field/features/required.d.ts +1 -1
  50. package/dist/components/text-field/features/trailing-icon.d.ts +2 -2
  51. package/dist/components/text-field/types.d.ts +8 -8
  52. package/dist/components/timepicker/dial.d.ts +2 -2
  53. package/dist/components/timepicker/types.d.ts +9 -9
  54. package/dist/components/timepicker/utils.d.ts +2 -2
  55. package/dist/core/compose/features/constants.d.ts +1 -1
  56. package/dist/core/compose/features/events.d.ts +1 -1
  57. package/dist/core/config/component.d.ts +1 -1
  58. package/dist/core/dom/create.d.ts +2 -2
  59. package/dist/core/dom/layer.d.ts +1 -1
  60. package/dist/core/state/emitter.d.ts +1 -1
  61. package/dist/core/theme/shape.d.ts +1 -1
  62. package/dist/core/theme/tokens.d.ts +1 -1
  63. package/dist/core/utils/attributes.d.ts +2 -2
  64. package/dist/core/utils/theme.d.ts +1 -1
  65. package/dist/elements/adapter.d.ts +12 -1
  66. package/dist/elements/button.d.ts +1 -1
  67. package/dist/elements/css/icon-button.css +1 -1
  68. package/dist/elements/css/icon-button.js +1 -1
  69. package/dist/elements/css/toolbar.css +1 -1
  70. package/dist/elements/css/toolbar.js +1 -1
  71. package/dist/elements/css/tooltip.css +1 -1
  72. package/dist/elements/css/tooltip.js +1 -1
  73. package/dist/elements/define.d.ts +20 -4
  74. package/dist/elements/define.js +2 -0
  75. package/dist/elements/icon-button.d.ts +6 -1
  76. package/dist/elements/icon-button.js +1 -0
  77. package/dist/elements/navigation-bar.d.ts +1 -1
  78. package/dist/elements/navigation-rail.d.ts +1 -1
  79. package/dist/elements/preupgrade/badge.css +1 -1
  80. package/dist/elements/preupgrade/bottom-app-bar.css +1 -1
  81. package/dist/elements/preupgrade/bottom-sheet.css +1 -1
  82. package/dist/elements/preupgrade/button-group.css +1 -1
  83. package/dist/elements/preupgrade/button.css +1 -1
  84. package/dist/elements/preupgrade/card.css +1 -1
  85. package/dist/elements/preupgrade/carousel.css +1 -1
  86. package/dist/elements/preupgrade/checkbox.css +1 -1
  87. package/dist/elements/preupgrade/chips.css +1 -1
  88. package/dist/elements/preupgrade/datepicker.css +1 -1
  89. package/dist/elements/preupgrade/dialog.css +1 -1
  90. package/dist/elements/preupgrade/divider.css +1 -1
  91. package/dist/elements/preupgrade/drawer.css +1 -1
  92. package/dist/elements/preupgrade/extended-fab.css +1 -1
  93. package/dist/elements/preupgrade/fab-menu.css +1 -1
  94. package/dist/elements/preupgrade/fab.css +1 -1
  95. package/dist/elements/preupgrade/icon-button.css +1 -1
  96. package/dist/elements/preupgrade/list.css +1 -1
  97. package/dist/elements/preupgrade/loading-indicator.css +1 -1
  98. package/dist/elements/preupgrade/menu.css +1 -1
  99. package/dist/elements/preupgrade/navigation-bar.css +1 -1
  100. package/dist/elements/preupgrade/navigation-rail.css +1 -1
  101. package/dist/elements/preupgrade/progress.css +1 -1
  102. package/dist/elements/preupgrade/radios.css +1 -1
  103. package/dist/elements/preupgrade/search.css +1 -1
  104. package/dist/elements/preupgrade/select.css +1 -1
  105. package/dist/elements/preupgrade/side-sheet.css +1 -1
  106. package/dist/elements/preupgrade/slider.css +1 -1
  107. package/dist/elements/preupgrade/snackbar.css +1 -1
  108. package/dist/elements/preupgrade/split-button.css +1 -1
  109. package/dist/elements/preupgrade/switch.css +1 -1
  110. package/dist/elements/preupgrade/tabs.css +1 -1
  111. package/dist/elements/preupgrade/text-field.css +1 -1
  112. package/dist/elements/preupgrade/timepicker.css +1 -1
  113. package/dist/elements/preupgrade/toolbar.css +1 -1
  114. package/dist/elements/preupgrade/tooltip.css +1 -1
  115. package/dist/elements/preupgrade/top-app-bar.css +1 -1
  116. package/dist/elements/preupgrade.css +1 -1
  117. package/dist/elements/styles.d.ts +5 -4
  118. package/dist/elements/timepicker.d.ts +1 -1
  119. package/dist/index.d.ts +1 -1
  120. package/dist/package.json +1 -1
  121. package/dist/react/create.d.ts +1 -1
  122. package/dist/react/create.js +4 -1
  123. package/dist/solid/create.d.ts +2 -2
  124. package/dist/solid/create.js +6 -4
  125. package/dist/ssr/index.js +13 -13
  126. package/dist/ssr/react.js +1 -1
  127. package/dist/styles/badge.css +1 -1
  128. package/dist/styles/base.css +1 -1
  129. package/dist/styles/bottom-app-bar.css +1 -1
  130. package/dist/styles/bottom-sheet.css +1 -1
  131. package/dist/styles/button-group.css +1 -1
  132. package/dist/styles/button.css +1 -1
  133. package/dist/styles/card.css +1 -1
  134. package/dist/styles/carousel.css +1 -1
  135. package/dist/styles/checkbox.css +1 -1
  136. package/dist/styles/chips.css +1 -1
  137. package/dist/styles/contrast.css +1 -1
  138. package/dist/styles/datepicker.css +1 -1
  139. package/dist/styles/dialog.css +1 -1
  140. package/dist/styles/divider.css +1 -1
  141. package/dist/styles/drawer.css +1 -1
  142. package/dist/styles/extended-fab.css +1 -1
  143. package/dist/styles/fab-menu.css +1 -1
  144. package/dist/styles/fab.css +1 -1
  145. package/dist/styles/icon-button.css +2 -2
  146. package/dist/styles/list.css +1 -1
  147. package/dist/styles/loading-indicator.css +1 -1
  148. package/dist/styles/menu.css +1 -1
  149. package/dist/styles/navigation-bar.css +1 -1
  150. package/dist/styles/navigation-rail.css +1 -1
  151. package/dist/styles/progress.css +1 -1
  152. package/dist/styles/radios.css +1 -1
  153. package/dist/styles/search.css +1 -1
  154. package/dist/styles/select.css +1 -1
  155. package/dist/styles/side-sheet.css +1 -1
  156. package/dist/styles/slider.css +1 -1
  157. package/dist/styles/snackbar.css +1 -1
  158. package/dist/styles/split-button.css +1 -1
  159. package/dist/styles/switch.css +1 -1
  160. package/dist/styles/tabs.css +1 -1
  161. package/dist/styles/text-field.css +1 -1
  162. package/dist/styles/timepicker.css +1 -1
  163. package/dist/styles/toolbar.css +2 -2
  164. package/dist/styles/tooltip.css +2 -2
  165. package/dist/styles/top-app-bar.css +1 -1
  166. package/dist/styles/typography.css +1 -1
  167. package/dist/styles/utilities.css +1 -1
  168. package/dist/styles.css +2 -2
  169. package/dist/svelte/Badge.svelte +1 -1
  170. package/dist/svelte/BottomAppBar.svelte +1 -1
  171. package/dist/svelte/BottomSheet.svelte +1 -1
  172. package/dist/svelte/Button.svelte +1 -1
  173. package/dist/svelte/ButtonGroup.svelte +1 -1
  174. package/dist/svelte/Card.svelte +1 -1
  175. package/dist/svelte/Carousel.svelte +1 -1
  176. package/dist/svelte/Checkbox.svelte +1 -1
  177. package/dist/svelte/Chips.svelte +1 -1
  178. package/dist/svelte/Datepicker.svelte +1 -1
  179. package/dist/svelte/Dialog.svelte +1 -1
  180. package/dist/svelte/Divider.svelte +1 -1
  181. package/dist/svelte/Drawer.svelte +1 -1
  182. package/dist/svelte/ExtendedFab.svelte +1 -1
  183. package/dist/svelte/Fab.svelte +1 -1
  184. package/dist/svelte/FabMenu.svelte +1 -1
  185. package/dist/svelte/IconButton.svelte +1 -1
  186. package/dist/svelte/List.svelte +1 -1
  187. package/dist/svelte/LoadingIndicator.svelte +1 -1
  188. package/dist/svelte/Menu.svelte +1 -1
  189. package/dist/svelte/NavigationBar.svelte +1 -1
  190. package/dist/svelte/NavigationRail.svelte +1 -1
  191. package/dist/svelte/Progress.svelte +1 -1
  192. package/dist/svelte/Radios.svelte +1 -1
  193. package/dist/svelte/Search.svelte +1 -1
  194. package/dist/svelte/Select.svelte +1 -1
  195. package/dist/svelte/SideSheet.svelte +1 -1
  196. package/dist/svelte/Slider.svelte +1 -1
  197. package/dist/svelte/Snackbar.svelte +1 -1
  198. package/dist/svelte/SplitButton.svelte +1 -1
  199. package/dist/svelte/Switch.svelte +1 -1
  200. package/dist/svelte/Tabs.svelte +1 -1
  201. package/dist/svelte/TextField.svelte +1 -1
  202. package/dist/svelte/Timepicker.svelte +1 -1
  203. package/dist/svelte/Toolbar.svelte +1 -1
  204. package/dist/svelte/Tooltip.svelte +1 -1
  205. package/dist/svelte/TopAppBar.svelte +1 -1
  206. package/dist/svelte/runtime.d.ts +2 -2
  207. package/dist/svelte/runtime.js +4 -1
  208. package/dist/themes/autumn-contrast.css +1 -1
  209. package/dist/themes/autumn.css +1 -1
  210. package/dist/themes/baseline-contrast.css +1 -1
  211. package/dist/themes/baseline.css +1 -1
  212. package/dist/themes/brownbeige-contrast.css +1 -1
  213. package/dist/themes/brownbeige.css +1 -1
  214. package/dist/themes/content-contrast.css +1 -1
  215. package/dist/themes/content.css +1 -1
  216. package/dist/themes/desert-contrast.css +1 -1
  217. package/dist/themes/desert.css +1 -1
  218. package/dist/themes/expressive-contrast.css +1 -1
  219. package/dist/themes/expressive.css +1 -1
  220. package/dist/themes/fidelity-contrast.css +1 -1
  221. package/dist/themes/fidelity.css +1 -1
  222. package/dist/themes/forest-contrast.css +1 -1
  223. package/dist/themes/forest.css +1 -1
  224. package/dist/themes/fruit-salad-contrast.css +1 -1
  225. package/dist/themes/fruit-salad.css +1 -1
  226. package/dist/themes/highcontrast-contrast.css +1 -1
  227. package/dist/themes/highcontrast.css +1 -1
  228. package/dist/themes/monochrome-contrast.css +1 -1
  229. package/dist/themes/monochrome.css +1 -1
  230. package/dist/themes/neutral-contrast.css +1 -1
  231. package/dist/themes/neutral.css +1 -1
  232. package/dist/themes/ocean-contrast.css +1 -1
  233. package/dist/themes/ocean.css +1 -1
  234. package/dist/themes/rainbow-contrast.css +1 -1
  235. package/dist/themes/rainbow.css +1 -1
  236. package/dist/themes/sageivory-contrast.css +1 -1
  237. package/dist/themes/sageivory.css +1 -1
  238. package/dist/themes/spring-contrast.css +1 -1
  239. package/dist/themes/spring.css +1 -1
  240. package/dist/themes/summer-contrast.css +1 -1
  241. package/dist/themes/summer.css +1 -1
  242. package/dist/themes/sunset-contrast.css +1 -1
  243. package/dist/themes/sunset.css +1 -1
  244. package/dist/themes/tealcaramel-contrast.css +1 -1
  245. package/dist/themes/tealcaramel.css +1 -1
  246. package/dist/themes/vibrant-contrast.css +1 -1
  247. package/dist/themes/vibrant.css +1 -1
  248. package/dist/vue/create.d.ts +2 -2
  249. package/dist/vue/create.js +4 -1
  250. package/package.json +1 -1
  251. package/src/styles/abstract/_mixins.scss +4 -4
  252. package/src/styles/abstract/_theme.scss +1 -1
  253. package/src/styles/abstract/_variables.scss +7 -7
  254. package/src/styles/base/_foundation.scss +1 -1
  255. package/src/styles/base/_typescale-tokens.scss +1 -1
  256. package/src/styles/base/_typography.scss +1 -1
  257. package/src/styles/components/_bottom-sheet.scss +1 -1
  258. package/src/styles/components/_button.scss +1 -1
  259. package/src/styles/components/_checkbox.scss +5 -5
  260. package/src/styles/components/_chips.scss +9 -9
  261. package/src/styles/components/_datepicker.scss +8 -9
  262. package/src/styles/components/_dialog.scss +1 -1
  263. package/src/styles/components/_drawer.scss +1 -1
  264. package/src/styles/components/_fab-menu.scss +1 -1
  265. package/src/styles/components/_icon-button.scss +50 -13
  266. package/src/styles/components/_menu.scss +0 -1
  267. package/src/styles/components/_navigation-bar.scss +1 -1
  268. package/src/styles/components/_radios.scss +3 -3
  269. package/src/styles/components/_search.scss +7 -7
  270. package/src/styles/components/_select.scss +2 -2
  271. package/src/styles/components/_side-sheet.scss +2 -2
  272. package/src/styles/components/_slider.scss +6 -6
  273. package/src/styles/components/_switch.scss +5 -5
  274. package/src/styles/components/_tabs.scss +15 -15
  275. package/src/styles/components/_text-field.scss +20 -21
  276. package/src/styles/components/_timepicker.scss +6 -6
  277. package/src/styles/components/_toolbar.scss +48 -0
  278. package/src/styles/components/_tooltip.scss +35 -74
  279. package/src/styles/elements/_field.scss +2 -2
  280. package/src/styles/themes/_autumn.scss +3 -3
  281. package/src/styles/themes/_base-theme.scss +2 -2
  282. package/src/styles/themes/_baseline.scss +5 -5
  283. package/src/styles/themes/_forest.scss +3 -3
  284. package/src/styles/themes/_ocean.scss +3 -3
  285. package/src/styles/themes/_spring.scss +3 -3
  286. package/src/styles/themes/_sunset.scss +3 -3
  287. package/src/styles/utilities/_ripple.scss +1 -1
@@ -139,7 +139,7 @@ $component: '#{base.$prefix}-radios';
139
139
 
140
140
  // The 20dp icon: a 2dp ring (RadioStrokeWidth; it was 1.5px, which Chromium
141
141
  // paints as 1px) in on-surface-variant, and a 10dp dot (Compose and material-web;
142
- // it was 12px) that springs in on the fast spatial spring. FLO-266.
142
+ // it was 12px) that springs in on the fast spatial spring.
143
143
  &__circle {
144
144
  position: relative;
145
145
  width: 20px;
@@ -167,7 +167,7 @@ $component: '#{base.$prefix}-radios';
167
167
  // The state layer (md-comp-radio-button): unselected on-surface on hover and
168
168
  // focus, selected primary; a press takes the colour of the state it leads to. The
169
169
  // unselected ring turns on-surface. Hover was primary even when unselected, a
170
- // plain :focus showed on mouse clicks, and there was no press. FLO-266.
170
+ // plain :focus showed on mouse clicks, and there was no press.
171
171
  &__ripple {
172
172
  position: absolute;
173
173
  inset: 0;
@@ -201,7 +201,7 @@ $component: '#{base.$prefix}-radios';
201
201
  }
202
202
 
203
203
  // Radio text: the gap follows the reading direction (it was a physical
204
- // margin-left, 0px in right-to-left layouts). FLO-266.
204
+ // margin-left, 0px in right-to-left layouts).
205
205
  &__text {
206
206
  margin-inline-start: 8px;
207
207
 
@@ -16,7 +16,7 @@ $component: "#{base.$prefix}-search";
16
16
  $bar-height: 56px;
17
17
  // SearchBarTokens.ContainerShape is CornerFull. Half the height, so the
18
18
  // radius animates to the view's corners; min() keeps a theme's full corner
19
- // in charge when it is smaller (FLO-345).
19
+ // in charge when it is smaller.
20
20
  $bar-shape: min(var(--#{base.$prefix}-sys-shape-corner-full, 9999px), calc(#{$bar-height} / 2));
21
21
  $bar-min-width: 360px;
22
22
  $bar-max-width: 720px;
@@ -59,7 +59,7 @@ $transition-easing: cubic-bezier(0.2, 0, 0, 1);
59
59
 
60
60
  // The root keeps the bar's place in the page. While the view is open, the bar
61
61
  // and its results show in the top layer as one surface, placed over it
62
- // (FLO-285): a docked view no longer pushes the page down, and a full-screen
62
+ // A docked view no longer pushes the page down, and a full-screen
63
63
  // search no longer covers the page while it is a bar.
64
64
  .#{$component} {
65
65
  position: relative;
@@ -187,7 +187,7 @@ $transition-easing: cubic-bezier(0.2, 0, 0, 1);
187
187
 
188
188
 
189
189
  // ============================================================================
190
- // Styles (FLO-287)
190
+ // Styles
191
191
  // ============================================================================
192
192
 
193
193
  // The rules above draw the divided style, the baseline: the bar squares off
@@ -237,7 +237,7 @@ $transition-easing: cubic-bezier(0.2, 0, 0, 1);
237
237
  @include contained-fullscreen;
238
238
  }
239
239
 
240
- // The results reveal on the emphasized decelerate curve (FLO-287: the
240
+ // The results reveal on the emphasized decelerate curve (the
241
241
  // --expanding and --collapsing classes were never driven, and are gone).
242
242
  .#{$component}--view .#{$component}__content {
243
243
  animation: #{$component}-reveal v.motion("duration-medium2") v.motion("easing-emphasized-decelerate");
@@ -284,7 +284,7 @@ $transition-easing: cubic-bezier(0.2, 0, 0, 1);
284
284
  // Icon buttons: leading, clear, trailing
285
285
  // ============================================================================
286
286
 
287
- // 48dp tap targets around 24dp icons (FLO-286: they were 24dp buttons), with
287
+ // 48dp tap targets around 24dp icons (they were 24dp buttons), with
288
288
  // state layers in their icon colour and md.comp.focus-ring.
289
289
  .#{$component}__leading-icon,
290
290
  .#{$component}__clear-button,
@@ -300,7 +300,7 @@ $transition-easing: cubic-bezier(0.2, 0, 0, 1);
300
300
  padding: 0;
301
301
  border: none;
302
302
  border-radius: 50%;
303
- // A shadow root does not get the page's font reset (FLO-291).
303
+ // A shadow root does not get the page's font reset.
304
304
  font: inherit;
305
305
  background-color: color-mix(in srgb, currentColor var(--#{$component}-layer), transparent);
306
306
  cursor: pointer;
@@ -442,7 +442,7 @@ $transition-easing: cubic-bezier(0.2, 0, 0, 1);
442
442
  flex: 1;
443
443
  overflow-y: auto;
444
444
  overflow-x: hidden;
445
- // The arrows name no behaviour, so that reduced motion can stop it (FLO-553)
445
+ // The arrows name no behaviour, so that reduced motion can stop it
446
446
  scroll-behavior: smooth;
447
447
  }
448
448
 
@@ -63,7 +63,7 @@ $component: "#{base.$prefix}-select";
63
63
  // No viewport scrim: the old `::before` one shared the root's
64
64
  // pseudo-element with the filled indicator (height 2px), so it was a
65
65
  // 2px strip and never blocked anything; a click outside closes the
66
- // menu (FLO-300 moved the indicator to the field, which revived it).
66
+ // menu (the indicator moved to the field, which revived it).
67
67
 
68
68
  // These styles handle the focused state when the menu is open
69
69
  .#{base.$prefix}-text-field--filled {
@@ -188,7 +188,7 @@ $component: "#{base.$prefix}-select";
188
188
 
189
189
  }
190
190
 
191
- // `.mtrl-select__menu` marks the select's menu (FLO-295: the class was unprefixed,
191
+ // `.mtrl-select__menu` marks the select's menu (the class was unprefixed,
192
192
  // so nothing here ever applied). Its never-applied rules are gone: a 460px max
193
193
  // width fought the menu's field width, a 4px margin its top-layer placement, and
194
194
  // the fade classes were never set; the menu's own motion and size apply.
@@ -115,7 +115,7 @@ $component: "#{base.$prefix}-side-sheet";
115
115
  outline-offset: 2px;
116
116
  }
117
117
 
118
- // FLO-579: the 40px button carries a 48px target, the icon button's own
118
+ // The 40px button carries a 48px target, the icon button's own
119
119
  // mechanism (its --xs/--s ::after): the box reaches 4px past each edge.
120
120
  // The `position: relative` above is the button's own, so the box anchors
121
121
  // to the button whatever the page does to buttons.
@@ -170,7 +170,7 @@ $component: "#{base.$prefix}-side-sheet";
170
170
 
171
171
  // Only the modal sheet rounds, on its inner edge: CornerLarge where it
172
172
  // faces the page. The standard one is square (MDC
173
- // Sheet.Side.Docked.Container.Shape = Corner.None), FLO-324.
173
+ // Sheet.Side.Docked.Container.Shape = Corner.None),
174
174
  &.#{$component}--end .#{$component}__container {
175
175
  box-shadow: f.get-elevation(1), m.$sheet-overshoot-guard 0 0 0 t.color("surface-container-low");
176
176
  border-start-start-radius: v.shape("large");
@@ -5,14 +5,14 @@
5
5
  @use '../../styles/abstract/mixins' as m;
6
6
  @use '../../styles/abstract/theme' as t;
7
7
 
8
- // Motion (FLO-250). A value change that does not follow a pointer -- a tap on the
8
+ // Motion. A value change that does not follow a pointer -- a tap on the
9
9
  // track, a key, setValue() -- carries the handle, the value indicator and the track
10
10
  // to the new value on the default spatial spring, as the m3.material.io sliders
11
11
  // video shows: a tap slides the handle over, peaking about 300ms in with a 3-5%
12
12
  // overshoot and settled by 450ms. The default spatial spring peaks at about 270ms
13
13
  // with 1.5% and settles in 450ms; the fast one (140ms, 9%) was visibly too strong. The controller sets
14
14
  // `--settling` for those changes alone, so a drag follows the pointer and a layout
15
- // render (the first one, a resize) never moves anything (FLO-249).
15
+ // render (the first one, a resize) never moves anything.
16
16
  //
17
17
  // The value indicator grows out of the handle and shrinks back into it: in on
18
18
  // motionDurationMedium4 emphasized decelerate, out on motionDurationShort3
@@ -39,7 +39,7 @@ $component: '#{base.$prefix}-slider';
39
39
  // inactive track and the ticks on the active track take its container colour
40
40
  // (secondaryContainer). A stylesheet overrides them per slider with
41
41
  // --<prefix>-slider-color, --<prefix>-slider-container-color and, for the ticks on
42
- // the active track alone, --<prefix>-slider-on-color. FLO-250.
42
+ // the active track alone, --<prefix>-slider-on-color.
43
43
  --#{base.$prefix}-slider-track-color: var(--#{base.$prefix}-slider-color, #{t.color('primary')});
44
44
  --#{base.$prefix}-slider-inactive-track-color: var(--#{base.$prefix}-slider-container-color, #{t.color('secondary-container')});
45
45
  --#{base.$prefix}-slider-tick-color: var(--#{base.$prefix}-slider-on-color, var(--#{base.$prefix}-slider-inactive-track-color));
@@ -55,7 +55,7 @@ $component: '#{base.$prefix}-slider';
55
55
  }
56
56
 
57
57
  // Label
58
- // Body Large, as the checkbox, radio and switch labels (FLO-587).
58
+ // Body Large, as the checkbox, radio and switch labels.
59
59
  &__label {
60
60
  display: block;
61
61
  @include m.typography('body-large');
@@ -84,7 +84,7 @@ $component: '#{base.$prefix}-slider';
84
84
  // An icon outside the track sits level with it, before or after it (the M3
85
85
  // guidelines' icons at either end); the label spans the track's column, above or
86
86
  // below. It used to be absolutely placed at a fixed top on the start side, so
87
- // iconPosition and labelPosition changed nothing on screen. FLO-107.
87
+ // iconPosition and labelPosition changed nothing on screen.
88
88
  &--icon {
89
89
  display: grid;
90
90
  grid-template-columns: 40px minmax(0, 1fr);
@@ -327,7 +327,7 @@ $component: '#{base.$prefix}-slider';
327
327
  .#{$component}__value--visible { transition: $settle-position, $bubble-transition-visible; }
328
328
  }
329
329
 
330
- // Vertical (FLO-252): the same parts turned a quarter. withTracks and the
330
+ // Vertical: the same parts turned a quarter. withTracks and the
331
331
  // controller write positions along the axis -- to bottom, or to top with
332
332
  // topToBottom -- and thicknesses across it; the length is the slider's height.
333
333
  &--vertical {
@@ -56,7 +56,7 @@ $component: '#{base.$prefix}-switch';
56
56
  flex-grow: 1;
57
57
  }
58
58
 
59
- // labelPosition 'end' only added this class, and the label stayed first. FLO-267.
59
+ // labelPosition 'end' only added this class, and the label stayed first.
60
60
  &--label-end &__container {
61
61
  flex-direction: row-reverse;
62
62
  }
@@ -83,7 +83,7 @@ $component: '#{base.$prefix}-switch';
83
83
  }
84
84
 
85
85
  // md.comp.focus-ring around the track (material-web's switch ring), 3dp
86
- // secondary at a 2dp offset. FLO-267.
86
+ // secondary at a 2dp offset.
87
87
  &:focus-visible ~ .#{$component}__track {
88
88
  outline: 3px solid t.color('secondary');
89
89
  outline-offset: 2px;
@@ -92,7 +92,7 @@ $component: '#{base.$prefix}-switch';
92
92
 
93
93
  // The track (52 x 32dp, a 2dp outline). The handle and its state layer are
94
94
  // placed with inset-inline-start, so both mirror in right-to-left layouts: a
95
- // physical left plus translateX put the selected handle off the track. FLO-267.
95
+ // physical left plus translateX put the selected handle off the track.
96
96
  &__track {
97
97
  position: relative;
98
98
  flex-shrink: 0;
@@ -140,7 +140,7 @@ $component: '#{base.$prefix}-switch';
140
140
  pointer-events: none;
141
141
 
142
142
  // Icons: 16dp. The selected one is on-primary-container, the unselected one
143
- // surface-container-highest (SwitchTokens). FLO-267.
143
+ // surface-container-highest (SwitchTokens).
144
144
  &-icon {
145
145
  position: absolute;
146
146
  display: flex;
@@ -270,7 +270,7 @@ $component: '#{base.$prefix}-switch';
270
270
 
271
271
  // Interaction states. The handle takes on-surface-variant (unselected) or
272
272
  // primary-container (selected) on hover, focus and press, over an on-surface or
273
- // primary layer at the hover, focus and pressed opacities. FLO-267.
273
+ // primary layer at the hover, focus and pressed opacities.
274
274
  &:not(.#{$component}--disabled) {
275
275
  .#{$component}__input:is(:hover, :focus-visible, :active) ~ .#{$component}__track .#{$component}__thumb {
276
276
  background-color: t.color('on-surface-variant');
@@ -28,7 +28,7 @@ $container: "#{base.$prefix}-tabs";
28
28
  }
29
29
 
30
30
  // Primary indicator: m3.material.io tabs specs, shape "3, 3, 0, 0" (the top
31
- // corners only; Compose rounds all four) at 3dp, set by indicator.ts. FLO-262.
31
+ // corners only; Compose rounds all four) at 3dp, set by indicator.ts.
32
32
  .#{$container}__indicator {
33
33
  border-radius: 3px 3px 0 0;
34
34
  background-color: t.color("primary");
@@ -40,7 +40,7 @@ $container: "#{base.$prefix}-tabs";
40
40
  // Tab indicator styling for secondary variant
41
41
  .#{$container}__indicator {
42
42
  // 2dp, set by indicator.ts: the site's secondary indicator height (Compose's
43
- // SecondaryIndicator takes the primary 3dp; the site wins). FLO-262.
43
+ // SecondaryIndicator takes the primary 3dp; the site wins).
44
44
  border-radius: 0;
45
45
  background-color: t.color("primary");
46
46
  }
@@ -62,7 +62,7 @@ $container: "#{base.$prefix}-tabs";
62
62
  // container the tabs inherited that and stacked vertically -- `flex: 1`
63
63
  // below was dividing the height rather than the row the comment above
64
64
  // describes. The divider and the indicator are both absolutely
65
- // positioned, so neither depends on the container's direction. FLO-241.
65
+ // positioned, so neither depends on the container's direction.
66
66
  &:not(&--scrollable) {
67
67
  flex-direction: row;
68
68
  }
@@ -82,7 +82,7 @@ $container: "#{base.$prefix}-tabs";
82
82
  // tabs inside the row.
83
83
  padding-inline: 52px;
84
84
  overflow-x: auto;
85
- // The scroll buttons name no behaviour, so that reduced motion can stop it (FLO-553)
85
+ // The scroll buttons name no behaviour, so that reduced motion can stop it
86
86
  scroll-behavior: smooth;
87
87
  scrollbar-width: none; // Firefox
88
88
  -ms-overflow-style: none; // IE and Edge
@@ -108,7 +108,7 @@ $container: "#{base.$prefix}-tabs";
108
108
  // Tab indicator styling - base styles
109
109
  &__indicator {
110
110
  position: absolute;
111
- // On the row's bottom edge, over the divider, as the site draws it. FLO-262.
111
+ // On the row's bottom edge, over the divider, as the site draws it.
112
112
  bottom: 0;
113
113
  // indicator.ts measures from the scroll container's left edge and moves the
114
114
  // indicator with translateX, so it has to start there. Without `left` an
@@ -117,7 +117,7 @@ $container: "#{base.$prefix}-tabs";
117
117
  left: 0;
118
118
  // Compose springs the indicator's offset and width (damping 0.9, stiffness
119
119
  // 700): the default spatial spring. indicator.ts moves it without motion on
120
- // the first render and on resize. FLO-262.
120
+ // the first render and on resize.
121
121
  transition: m.spring(transform, default-spatial), m.spring(width, default-spatial);
122
122
  z-index: 1; // Ensure indicator appears above divider
123
123
  }
@@ -125,7 +125,7 @@ $container: "#{base.$prefix}-tabs";
125
125
  // Resting position where anchor positioning exists (Baseline 2026). `left: 0`
126
126
  // above stays the fallback, and older browsers keep the transform spring.
127
127
  // The name is scoped to this component. The active tab carries it; a primary
128
- // label replaces it so the indicator insets that text. FLO-369.
128
+ // label replaces it so the indicator insets that text.
129
129
  @supports (#{string.unquote("anchor-name: --a")}) {
130
130
  anchor-scope: string.unquote("--#{base.$prefix}-tabs-indicator");
131
131
  $anchor: string.unquote("--#{base.$prefix}-tabs-indicator");
@@ -228,7 +228,7 @@ $container: "#{base.$prefix}-tabs";
228
228
  }
229
229
 
230
230
  // A tab with an icon is a button with an icon, whose text-button padding is
231
- // 12dp on the icon side: the stacked icon sat 2px off-centre. FLO-262.
231
+ // 12dp on the icon side: the stacked icon sat 2px off-centre.
232
232
  &.#{base.$prefix}-button--icon {
233
233
  padding: 0 16px;
234
234
  }
@@ -239,7 +239,7 @@ $container: "#{base.$prefix}-tabs";
239
239
  }
240
240
 
241
241
  // md.comp.focus-ring: 3dp in secondary, drawn inward because a tab sits at the
242
- // row's edge and inside a scroll container that would clip it. FLO-262.
242
+ // row's edge and inside a scroll container that would clip it.
243
243
  &:focus-visible {
244
244
  outline: 3px solid t.color("secondary");
245
245
  outline-offset: -3px;
@@ -331,7 +331,7 @@ $container: "#{base.$prefix}-tabs";
331
331
  }
332
332
 
333
333
  // Pressed state for active tabs
334
- // A rippled tab leaves the press to its ripple (FLO-260).
334
+ // A rippled tab leaves the press to its ripple.
335
335
  &:active:not(:has(> .#{base.$prefix}-ripple)),
336
336
  &.#{$component}--pressed {
337
337
  background-color: t.alpha("primary", v.state("pressed-state-layer-opacity"));
@@ -346,7 +346,7 @@ $container: "#{base.$prefix}-tabs";
346
346
 
347
347
  // An inactive tab's label and icon turn on-surface in every interaction
348
348
  // state (InactiveHover/Focus/PressedLabelTextColor = OnSurface), over an
349
- // on-surface layer; FLO-262.
349
+ // on-surface layer;
350
350
  &:hover,
351
351
  &.#{$component}--hover {
352
352
  color: t.color("on-surface");
@@ -360,7 +360,7 @@ $container: "#{base.$prefix}-tabs";
360
360
  }
361
361
 
362
362
  // The press is primary: "tapping a non-selected tab will select it"
363
- // (MDC inactive_pressed_state_layer_color). The ripple draws it (FLO-260).
363
+ // (MDC inactive_pressed_state_layer_color). The ripple draws it.
364
364
  &:active,
365
365
  &.#{$component}--pressed {
366
366
  color: t.color("on-surface");
@@ -400,7 +400,7 @@ $container: "#{base.$prefix}-tabs";
400
400
  }
401
401
 
402
402
  // Pressed state for active tabs - secondary
403
- // A rippled tab leaves the press to its ripple (FLO-260).
403
+ // A rippled tab leaves the press to its ripple.
404
404
  &:active:not(:has(> .#{base.$prefix}-ripple)),
405
405
  &.#{$component}--pressed {
406
406
  background-color: t.alpha("on-surface", v.state("pressed-state-layer-opacity"));
@@ -414,7 +414,7 @@ $container: "#{base.$prefix}-tabs";
414
414
  color: t.color("on-surface-variant");
415
415
 
416
416
  // Secondary tabs: label, icon and layer on-surface in every interaction
417
- // state, active or not (SecondaryNavigationTabTokens). FLO-262.
417
+ // state, active or not (SecondaryNavigationTabTokens).
418
418
  &:hover,
419
419
  &.#{$component}--hover {
420
420
  color: t.color("on-surface");
@@ -432,7 +432,7 @@ $container: "#{base.$prefix}-tabs";
432
432
  color: t.color("on-surface");
433
433
  }
434
434
 
435
- // A rippled tab leaves the press to its ripple (FLO-260).
435
+ // A rippled tab leaves the press to its ripple.
436
436
  &:active:not(:has(> .#{base.$prefix}-ripple)),
437
437
  &.#{$component}--pressed {
438
438
  background-color: t.alpha("on-surface", v.state("pressed-state-layer-opacity"));
@@ -8,7 +8,7 @@
8
8
  // Define the component once
9
9
  $component: "#{base.$prefix}-text-field";
10
10
 
11
- // Right to left (FLO-562). Every horizontal inset is a custom property, set
11
+ // Right to left. Every horizontal inset is a custom property, set
12
12
  // once whatever the direction, and the rules in this mixin, at the end of the
13
13
  // component's block, are the whole mirror. Two selectors: an ancestor's `dir`,
14
14
  // which needs no script, and --rtl, which placement.ts sets from the computed
@@ -49,13 +49,13 @@ $component: "#{base.$prefix}-text-field";
49
49
  // Unsized, the field is 280px wide (TextFieldDefaults.MinWidth), not as
50
50
  // wide as its input's 20 average characters, which Chrome measures
51
51
  // differently per platform for the same font: 167px on macOS, 220px on
52
- // Linux (FLO-293). A width from the page still applies.
52
+ // Linux. A width from the page still applies.
53
53
  contain: inline-size;
54
54
  contain-intrinsic-inline-size: v.text-field('width');
55
55
  // align-self: flex-start; // Prevents growing to fill the container's height
56
56
  flex: 0 0 auto; // Don't grow or shrink; keep natural size
57
57
  // The container: the label, input, outline, icons and affixes are placed
58
- // against it, so the supporting text row under it never moves them (FLO-300)
58
+ // against it, so the supporting text row under it never moves them
59
59
  &__field {
60
60
  position: relative;
61
61
  display: flex;
@@ -100,7 +100,7 @@ $component: "#{base.$prefix}-text-field";
100
100
  transition: background-color 0s ease-out 50000000s;
101
101
 
102
102
  // InputPlaceholderColor, shown while the field is focused or has no
103
- // label: under a resting label it would collide with it (FLO-298)
103
+ // label: under a resting label it would collide with it
104
104
  &::placeholder {
105
105
  color: t.color("on-surface-variant");
106
106
  opacity: 1;
@@ -114,7 +114,7 @@ $component: "#{base.$prefix}-text-field";
114
114
  transition: background-color 5000s ease-in-out 0s; // Long transition to keep the background
115
115
  }
116
116
 
117
- // Firefox autofill; the animation reports it as on WebKit (FLO-335)
117
+ // Firefox autofill; the animation reports it as on WebKit
118
118
  &:autofill {
119
119
  animation-name: onAutoFillStart;
120
120
  animation-duration: 10ms;
@@ -123,14 +123,14 @@ $component: "#{base.$prefix}-text-field";
123
123
  }
124
124
 
125
125
  // The disabled input's -webkit-text-fill-color is inherited by its
126
- // placeholder and paints over color, so both are cleared (FLO-354)
126
+ // placeholder and paints over color, so both are cleared
127
127
  &:has(> .#{$component}__field > .#{$component}__label):not(.#{$component}--focused) .#{$component}__input::placeholder {
128
128
  color: transparent;
129
129
  -webkit-text-fill-color: transparent;
130
130
  }
131
131
 
132
132
  // While the label rests in the input area it is all that area shows: the
133
- // prefix and suffix appear as it floats, like the placeholder (FLO-355).
133
+ // prefix and suffix appear as it floats, like the placeholder.
134
134
  // Resting is the float rules' complement: empty to the script and to the
135
135
  // input itself, and not focused.
136
136
  &--empty:has(> .#{$component}__field > .#{$component}__label):not(.#{$component}--focused):not(:has(.#{$component}__input:is(:not(:placeholder-shown), :autofill, :-webkit-autofill))) {
@@ -153,7 +153,7 @@ $component: "#{base.$prefix}-text-field";
153
153
  max-width: 40%; // Prevent extreme overflow
154
154
  overflow: hidden;
155
155
  text-overflow: ellipsis;
156
- // opacity as the label floats (FLO-355); top where a label is added
156
+ // opacity as the label floats; top where a label is added
157
157
  // or removed
158
158
  transition:
159
159
  top v.motion("duration-short4") v.motion("easing-emphasized"),
@@ -196,7 +196,7 @@ $component: "#{base.$prefix}-text-field";
196
196
  transition: top v.motion("duration-short4")
197
197
  v.motion("easing-emphasized"); // Add transition for top position
198
198
 
199
- // LeadingIconSize / TrailingIconSize: 24dp, the whole box (FLO-298)
199
+ // LeadingIconSize / TrailingIconSize: 24dp, the whole box
200
200
  svg {
201
201
  width: 24px;
202
202
  height: 24px;
@@ -219,7 +219,7 @@ $component: "#{base.$prefix}-text-field";
219
219
  transition: top v.motion("duration-short4")
220
220
  v.motion("easing-emphasized"); // Add transition for top position
221
221
 
222
- // LeadingIconSize / TrailingIconSize: 24dp, the whole box (FLO-298)
222
+ // LeadingIconSize / TrailingIconSize: 24dp, the whole box
223
223
  svg {
224
224
  width: 24px;
225
225
  height: 24px;
@@ -266,7 +266,7 @@ $component: "#{base.$prefix}-text-field";
266
266
 
267
267
  // What a prefix or a suffix adds before the text: its width, which
268
268
  // placement.ts measures into a custom property (32px until it has), and
269
- // the 2dp to the text (PrefixSuffixTextPadding) (FLO-299)
269
+ // the 2dp to the text (PrefixSuffixTextPadding)
270
270
  &--with-prefix {
271
271
  --#{$component}-prefix-space: calc(var(--#{$component}-prefix-width, 32px) + 2px);
272
272
  }
@@ -291,7 +291,7 @@ $component: "#{base.$prefix}-text-field";
291
291
 
292
292
  // Disabled state
293
293
  // Disabled: the roles at 38%, not the element faded, which also faded
294
- // the filled container's 4% (FLO-298). The fill is the filled variant's.
294
+ // the filled container's 4%. The fill is the filled variant's.
295
295
  &--disabled {
296
296
  .#{$component}__input {
297
297
  color: t.alpha("on-surface", 0.38);
@@ -319,7 +319,7 @@ $component: "#{base.$prefix}-text-field";
319
319
  }
320
320
 
321
321
  // The label comes before the input, so no sibling selector reaches it:
322
- // the root reads the input's state instead (FLO-303).
322
+ // the root reads the input's state instead.
323
323
  &:has(.#{$component}__input:disabled) {
324
324
  .#{$component}__label,
325
325
  .#{$component}__supporting {
@@ -347,7 +347,6 @@ $component: "#{base.$prefix}-text-field";
347
347
  // the start, the counter at the end, 4dp below the field and 16dp in from
348
348
  // each side (TextFieldDefaults.supportingTextPadding). It was absolute,
349
349
  // 18px under the field, so it overlapped what followed and never wrapped
350
- // (FLO-300).
351
350
  &__supporting {
352
351
  @include m.typography("body-small");
353
352
  display: flex;
@@ -376,7 +375,7 @@ $component: "#{base.$prefix}-text-field";
376
375
  color: t.color("error");
377
376
  }
378
377
 
379
- // The required asterisk (FLO-301): part of the label, in its colour and
378
+ // The required asterisk: part of the label, in its colour and
380
379
  // straight after its text, as Material Web appends it. It was the error
381
380
  // colour with a 4px gap, a style no element carried until now.
382
381
  &__required {
@@ -439,7 +438,7 @@ $component: "#{base.$prefix}-text-field";
439
438
  transition: opacity v.motion("duration-short4") v.motion("easing-standard");
440
439
 
441
440
  // Here, not in the block above with the label and the outline:
442
- // this rule comes later and would win over it (FLO-299)
441
+ // this rule comes later and would win over it
443
442
  @include m.reduced-motion {
444
443
  transition: none;
445
444
  }
@@ -455,7 +454,7 @@ $component: "#{base.$prefix}-text-field";
455
454
 
456
455
  // Floated from the input's own state too: a value, or autofill before
457
456
  // the script has seen it. The label precedes the input, so the root
458
- // reads it (FLO-303).
457
+ // reads it.
459
458
  &:has(.#{$component}__input:is(:not(:placeholder-shown), :autofill, :-webkit-autofill)) .#{$component}__label {
460
459
  transform: translateY(calc(-12px - 37.5%)) scale(0.75);
461
460
  }
@@ -650,7 +649,7 @@ $component: "#{base.$prefix}-text-field";
650
649
  }
651
650
  }
652
651
 
653
- // LabelColor at full strength: faded to 0.5 it failed 4.5:1 (FLO-298)
652
+ // LabelColor at full strength: faded to 0.5 it failed 4.5:1
654
653
  .#{$component}__label {
655
654
  top: 50%;
656
655
  }
@@ -723,7 +722,7 @@ $component: "#{base.$prefix}-text-field";
723
722
 
724
723
  // Multiline styles
725
724
  // The first line and the label are where a single-line field has them
726
- // (FLO-299): Compose places the text with no singleLine branch,
725
+ // Compose places the text with no singleLine branch,
727
726
  // `textPosition = topPaddingValue + labelPlaceable.height`. The textarea's
728
727
  // own 12px put the first line under the filled field's floated label.
729
728
  &--multiline {
@@ -939,7 +938,7 @@ $component: "#{base.$prefix}-text-field";
939
938
  }
940
939
 
941
940
  // ============================================================================
942
- // An interactive trailing icon (FLO-301)
941
+ // An interactive trailing icon
943
942
  // ============================================================================
944
943
  // With `trailingIconLabel` the trailing icon is a button: M3 draws an
945
944
  // interactive trailing icon as an icon button, as Compose's trailing slot holds
@@ -990,7 +989,7 @@ $component: "#{base.$prefix}-text-field";
990
989
  }
991
990
 
992
991
  // The field's mirror, for the button: an ancestor's `dir`, or the
993
- // field's --rtl inside a shadow root (FLO-562)
992
+ // field's --rtl inside a shadow root
994
993
  [dir='rtl'] &,
995
994
  .#{$component}--rtl & {
996
995
  right: auto;
@@ -13,7 +13,7 @@ $component: '#{base.$prefix}-time-picker';
13
13
  position: relative;
14
14
  display: inline-block;
15
15
 
16
- // A native modal <dialog> (FLO-278): the browser centres it in the top layer and
16
+ // A native modal <dialog>: the browser centres it in the top layer and
17
17
  // draws ::backdrop; the scrim is scrim at 0.32, as for every M3 dialog.
18
18
  &__dialog {
19
19
  box-sizing: border-box;
@@ -160,7 +160,7 @@ $component: '#{base.$prefix}-time-picker';
160
160
  }
161
161
  }
162
162
 
163
- // Dial mode: the boxes are radios (FLO-283). TimeSelector tokens: an 8dp
163
+ // Dial mode: the boxes are radios. TimeSelector tokens: an 8dp
164
164
  // surface-container-highest container with an on-surface label, filled
165
165
  // primary-container when selected; state layers in the label colour.
166
166
  &:not([type="number"]) {
@@ -242,7 +242,7 @@ $component: '#{base.$prefix}-time-picker';
242
242
  background-color: t.alpha('on-surface-variant', v.state('pressed-state-layer-opacity'));
243
243
  }
244
244
 
245
- // No time in this half of the day is inside minTime/maxTime (FLO-281).
245
+ // No time in this half of the day is inside minTime/maxTime.
246
246
  &[aria-disabled="true"] {
247
247
  opacity: 0.38;
248
248
  cursor: default;
@@ -279,7 +279,7 @@ $component: '#{base.$prefix}-time-picker';
279
279
 
280
280
  }
281
281
 
282
- // The DOM dial (FLO-279), m3.material.io's clock dial: a 256dp surface-container-
282
+ // The DOM dial, m3.material.io's clock dial: a 256dp surface-container-
283
283
  // highest face with Body Large numbers, a 2dp primary track, an 8dp centre dot and
284
284
  // a 48dp primary handle; under the handle the numbers read on-primary. One
285
285
  // animated angle and radius place the track, the handle and that clipped copy, so
@@ -334,7 +334,7 @@ $component: '#{base.$prefix}-time-picker';
334
334
  // md.comp.focus-ring on the focused number.
335
335
  &:focus-visible { outline: 3px solid t.color('secondary'); outline-offset: 2px; }
336
336
 
337
- // Outside minTime/maxTime or off the step (FLO-281): M3's disabled content,
337
+ // Outside minTime/maxTime or off the step: M3's disabled content,
338
338
  // at 38%.
339
339
  &[aria-disabled="true"] { opacity: 0.38; cursor: default; }
340
340
  }
@@ -518,7 +518,7 @@ $component: '#{base.$prefix}-time-picker';
518
518
 
519
519
 
520
520
  // The dial's angle and radius animate as values, so the hand, the handle and the
521
- // clipped labels move together on one spring (FLO-279).
521
+ // clipped labels move together on one spring.
522
522
  @property --#{$component}-angle { syntax: '<angle>'; inherits: true; initial-value: 0deg; }
523
523
  @property --#{$component}-radius { syntax: '<length>'; inherits: true; initial-value: 101px; }
524
524
 
@@ -201,3 +201,51 @@ $component: '#{base.$prefix}-toolbar';
201
201
  }
202
202
  }
203
203
  }
204
+
205
+ // A toolbar shows a selected item through its colour alone: the m3 toolbars
206
+ // specs give a selected toggle item colour roles and the toolbar token set
207
+ // has no item shape tokens, while a standalone toggle icon button morphs
208
+ // round to square when selected (icon buttons specs) and "their square
209
+ // shape conflicts with the fully-rounded shape of the floating toolbar
210
+ // container". So the morph targets of a round item are pinned to its round
211
+ // radius, selected and pressed. (Pressed is this library's reading of the
212
+ // report — round stays round — not something the toolbars spec asks for.)
213
+ // The pins are each item's own resting round radius, half the container
214
+ // height per size (styles/components/_icon-button.scss, which owns them),
215
+ // and they reach only the bar's direct items:
216
+ // - a round icon button that is a child of the bar in the same tree (a
217
+ // factory toolbar's items and overflow button, and the <m-toolbar>
218
+ // element's own overflow button): a size changed later swaps the size
219
+ // class, and the selector follows;
220
+ // - an icon-button host assigned to the bar's default slot (an
221
+ // <m-icon-button> slotted into an <m-toolbar>), behind its own shadow
222
+ // root where no descendant selector reaches: ::slotted() matches it where
223
+ // it is assigned, by the marker attribute every icon-button host of this
224
+ // library carries whatever its tag prefix (src/elements/icon-button.ts,
225
+ // src/elements/define.ts — the sheet cannot spell a tag the page chose),
226
+ // and [size=…] follows a size changed after insertion, the size attribute
227
+ // being the host's public size (the element exposes no size property to
228
+ // drift from it). The default tag is matched as well, so markup that
229
+ // reaches the browser without the marker by any path — an adapter not
230
+ // writing it, hand-written HTML, a cached page from an older server
231
+ // render — still pins under the default prefix, as before the marker; a
232
+ // custom prefix cannot be spelled and needs the marker. :is() weighs its
233
+ // most specific argument, so the compound keeps the bare attribute's
234
+ // (0,1,0). Another library's icon button keeps the standalone
235
+ // morphs.
236
+ // Anything deeper — an icon button in the overflow menu's content, a dialog
237
+ // or menu opened from the bar, a composite child — matches neither selector
238
+ // and keeps the standalone morphs.
239
+ .#{base.$prefix}-toolbar .#{base.$prefix}-toolbar__bar > .#{base.$prefix}-icon-button--round,
240
+ slot:not([name])::slotted(:is([data-mtrl-icon-button], m-icon-button)) {
241
+ --#{base.$prefix}-icon-button-shape-selected: 20px;
242
+ --#{base.$prefix}-icon-button-shape-pressed: 20px;
243
+ }
244
+
245
+ @each $size, $radius in ("xs": 16px, "m": 28px, "l": 48px, "xl": 68px) {
246
+ .#{base.$prefix}-toolbar .#{base.$prefix}-toolbar__bar > .#{base.$prefix}-icon-button--round.#{base.$prefix}-icon-button--#{$size},
247
+ slot:not([name])::slotted(:is([data-mtrl-icon-button], m-icon-button)[size=#{$size}]) {
248
+ --#{base.$prefix}-icon-button-shape-selected: #{$radius};
249
+ --#{base.$prefix}-icon-button-shape-pressed: #{$radius};
250
+ }
251
+ }