material-inspired-component-library 8.1.0 → 9.0.0

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 (284) hide show
  1. package/README.md +106 -18
  2. package/components/README.md +1 -1
  3. package/components/accordion/README.md +6 -6
  4. package/components/alert/README.md +10 -10
  5. package/components/alert/index.scss +27 -52
  6. package/components/appbar/README.md +19 -6
  7. package/components/appbar/index.scss +40 -44
  8. package/components/badge/README.md +12 -10
  9. package/components/badge/index.scss +21 -25
  10. package/components/bottomsheet/README.md +26 -1
  11. package/components/bottomsheet/index.scss +58 -44
  12. package/components/button/README.md +70 -10
  13. package/components/button/_shared.scss +210 -0
  14. package/components/button/index.scss +75 -389
  15. package/components/card/README.md +97 -85
  16. package/components/card/index.scss +46 -65
  17. package/components/checkbox/README.md +25 -14
  18. package/{tools/shapes/check.mjs → components/checkbox/_label.scss} +37 -42
  19. package/components/checkbox/index.scss +66 -66
  20. package/components/chip/README.md +186 -0
  21. package/components/chip/index.scss +285 -0
  22. package/components/datepicker/README.md +79 -0
  23. package/components/datepicker/index.scss +346 -315
  24. package/components/dialog/README.md +20 -10
  25. package/components/dialog/index.scss +55 -66
  26. package/components/divider/README.md +16 -15
  27. package/components/divider/index.scss +9 -25
  28. package/components/iconbutton/README.md +63 -12
  29. package/components/iconbutton/index.scss +142 -303
  30. package/components/list/README.md +89 -156
  31. package/components/list/index.scss +34 -36
  32. package/components/menu/README.md +81 -155
  33. package/components/menu/index.scss +52 -58
  34. package/components/navigationbar/README.md +108 -0
  35. package/components/navigationbar/index.scss +185 -0
  36. package/components/navigationrail/README.md +62 -37
  37. package/components/navigationrail/_navitem.scss +96 -0
  38. package/components/navigationrail/index.scss +78 -132
  39. package/components/progressindicator/README.md +83 -47
  40. package/components/progressindicator/index.scss +622 -172
  41. package/components/radio/README.md +11 -9
  42. package/components/radio/index.scss +36 -33
  43. package/components/select/README.md +12 -7
  44. package/components/select/index.scss +26 -34
  45. package/components/shapes/README.md +3 -3
  46. package/components/shapes/index.scss +0 -1
  47. package/components/sidesheet/README.md +21 -9
  48. package/components/sidesheet/index.scss +38 -46
  49. package/components/slider/README.md +21 -0
  50. package/components/slider/index.scss +108 -139
  51. package/components/snackbar/README.md +32 -35
  52. package/components/snackbar/index.scss +10 -22
  53. package/components/stepper/README.md +14 -7
  54. package/components/stepper/index.scss +58 -39
  55. package/components/switch/README.md +22 -15
  56. package/components/switch/index.scss +68 -60
  57. package/components/textfield/README.md +48 -5
  58. package/components/textfield/index.scss +192 -248
  59. package/components/timepicker/README.md +53 -23
  60. package/components/timepicker/index.scss +110 -128
  61. package/dist/alert.css +1 -1
  62. package/dist/alert.js +1 -1
  63. package/dist/appbar.css +1 -1
  64. package/dist/appbar.js +1 -1
  65. package/dist/badge.css +1 -1
  66. package/dist/badge.js +1 -1
  67. package/dist/base.css +1 -0
  68. package/dist/base.js +1 -0
  69. package/dist/bottomsheet.css +1 -1
  70. package/dist/bottomsheet.js +1 -1
  71. package/dist/button.css +1 -1
  72. package/dist/button.js +1 -1
  73. package/dist/card.css +1 -1
  74. package/dist/card.js +1 -1
  75. package/dist/checkbox.css +1 -1
  76. package/dist/checkbox.js +1 -1
  77. package/dist/chip.css +1 -0
  78. package/dist/chip.js +1 -0
  79. package/dist/components/button/index.d.ts +1 -1
  80. package/dist/components/iconbutton/index.d.ts +2 -7
  81. package/dist/components/slider/index.d.ts +1 -1
  82. package/dist/components/textfield/index.d.ts +2 -2
  83. package/dist/datepicker.css +1 -1
  84. package/dist/datepicker.js +1 -1
  85. package/dist/dialog.css +1 -1
  86. package/dist/dialog.js +1 -1
  87. package/dist/divider.css +1 -1
  88. package/dist/divider.js +1 -1
  89. package/dist/field.css +1 -0
  90. package/dist/field.js +1 -0
  91. package/dist/foundations/form/index.js +1 -1
  92. package/dist/foundations/runtime.d.ts +15 -0
  93. package/dist/foundations/runtime.js +1 -0
  94. package/dist/iconbutton.css +1 -1
  95. package/dist/iconbutton.js +1 -1
  96. package/dist/layout.css +1 -1
  97. package/dist/layout.js +1 -1
  98. package/dist/list.css +1 -1
  99. package/dist/list.js +1 -1
  100. package/dist/menu.css +1 -1
  101. package/dist/menu.js +1 -1
  102. package/dist/micl.css +1 -1
  103. package/dist/micl.d.ts +14 -5
  104. package/dist/micl.js +1 -1
  105. package/dist/navigationbar.css +1 -0
  106. package/dist/navigationbar.js +1 -0
  107. package/dist/navigationrail.css +1 -1
  108. package/dist/navigationrail.js +1 -1
  109. package/dist/progressindicator.css +1 -1
  110. package/dist/progressindicator.js +1 -1
  111. package/dist/radio.css +1 -1
  112. package/dist/radio.js +1 -1
  113. package/dist/scrollbar.js +1 -1
  114. package/dist/select.css +1 -1
  115. package/dist/select.js +1 -1
  116. package/dist/shapes.css +1 -1
  117. package/dist/shapes.js +1 -1
  118. package/dist/sidesheet.css +1 -1
  119. package/dist/sidesheet.js +1 -1
  120. package/dist/slider.css +1 -1
  121. package/dist/slider.js +1 -1
  122. package/dist/snackbar.css +1 -1
  123. package/dist/snackbar.js +1 -1
  124. package/dist/stepper.css +1 -1
  125. package/dist/stepper.js +1 -1
  126. package/dist/switch.css +1 -1
  127. package/dist/switch.js +1 -1
  128. package/dist/textfield.css +1 -1
  129. package/dist/textfield.js +1 -1
  130. package/dist/timepicker.css +1 -1
  131. package/dist/timepicker.js +1 -1
  132. package/foundations/_index.scss +35 -0
  133. package/foundations/{index.scss → base/index.scss} +21 -56
  134. package/foundations/field/index.scss +37 -0
  135. package/foundations/layout/index.scss +64 -65
  136. package/package.json +23 -9
  137. package/styles/statelayer.scss +20 -5
  138. package/styles.scss +5 -2
  139. package/.claude/settings.local.json +0 -14
  140. package/.editorconfig +0 -12
  141. package/.gitattributes +0 -9
  142. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -35
  143. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -20
  144. package/CLAUDE.md +0 -53
  145. package/CODE_OF_CONDUCT.md +0 -128
  146. package/components/bottomsheet/index.ts +0 -153
  147. package/components/button/index.ts +0 -79
  148. package/components/checkbox/index.ts +0 -148
  149. package/components/datepicker/index.ts +0 -693
  150. package/components/iconbutton/index.ts +0 -77
  151. package/components/list/index.ts +0 -138
  152. package/components/menu/index.ts +0 -145
  153. package/components/navigationrail/index.ts +0 -87
  154. package/components/progressindicator/index.ts +0 -77
  155. package/components/slider/index.ts +0 -149
  156. package/components/snackbar/index.ts +0 -118
  157. package/components/stepper/index.ts +0 -248
  158. package/components/textfield/index.ts +0 -188
  159. package/components/timepicker/index.ts +0 -413
  160. package/dist/components/progressindicator/index.d.ts +0 -6
  161. package/dist/foundations.css +0 -1
  162. package/dist/foundations.js +0 -1
  163. package/docs/accordion.html +0 -344
  164. package/docs/alert.html +0 -177
  165. package/docs/bottomsheet.html +0 -240
  166. package/docs/button.html +0 -290
  167. package/docs/card-awards.webp +0 -0
  168. package/docs/card-cabinet.webp +0 -0
  169. package/docs/card-city.webp +0 -0
  170. package/docs/card-fingerprint.webp +0 -0
  171. package/docs/card-holiday.webp +0 -0
  172. package/docs/card-names.webp +0 -0
  173. package/docs/card.html +0 -159
  174. package/docs/checkbox.html +0 -147
  175. package/docs/datepicker.html +0 -274
  176. package/docs/dialog.html +0 -195
  177. package/docs/divider.html +0 -139
  178. package/docs/docs.css +0 -26
  179. package/docs/docs.js +0 -139
  180. package/docs/iconbutton.html +0 -329
  181. package/docs/index.html +0 -431
  182. package/docs/list.html +0 -310
  183. package/docs/menu.html +0 -574
  184. package/docs/micl.css +0 -1
  185. package/docs/micl.js +0 -1
  186. package/docs/navigationrail.html +0 -138
  187. package/docs/progressindicator.html +0 -288
  188. package/docs/radio.html +0 -123
  189. package/docs/select.html +0 -337
  190. package/docs/shapes.css +0 -1
  191. package/docs/shapes.html +0 -159
  192. package/docs/shapes.js +0 -1
  193. package/docs/sidesheet.html +0 -149
  194. package/docs/slider.html +0 -141
  195. package/docs/snackbar.html +0 -102
  196. package/docs/stepper.html +0 -319
  197. package/docs/switch.html +0 -196
  198. package/docs/textfield.html +0 -208
  199. package/docs/themes/airblue/dark-hc.css +0 -51
  200. package/docs/themes/airblue/dark-mc.css +0 -51
  201. package/docs/themes/airblue/dark.css +0 -51
  202. package/docs/themes/airblue/light-hc.css +0 -51
  203. package/docs/themes/airblue/light-mc.css +0 -51
  204. package/docs/themes/airblue/light.css +0 -51
  205. package/docs/themes/airblue/theme.css +0 -306
  206. package/docs/themes/barnred/dark-hc.css +0 -51
  207. package/docs/themes/barnred/dark-mc.css +0 -51
  208. package/docs/themes/barnred/dark.css +0 -51
  209. package/docs/themes/barnred/light-hc.css +0 -51
  210. package/docs/themes/barnred/light-mc.css +0 -51
  211. package/docs/themes/barnred/light.css +0 -51
  212. package/docs/themes/barnred/theme.css +0 -306
  213. package/docs/themes/citrine/dark-hc.css +0 -51
  214. package/docs/themes/citrine/dark-mc.css +0 -51
  215. package/docs/themes/citrine/dark.css +0 -51
  216. package/docs/themes/citrine/light-hc.css +0 -51
  217. package/docs/themes/citrine/light-mc.css +0 -51
  218. package/docs/themes/citrine/light.css +0 -51
  219. package/docs/themes/citrine/theme.css +0 -306
  220. package/docs/themes/gray/dark-hc.css +0 -51
  221. package/docs/themes/gray/dark-mc.css +0 -51
  222. package/docs/themes/gray/dark.css +0 -51
  223. package/docs/themes/gray/light-hc.css +0 -51
  224. package/docs/themes/gray/light-mc.css +0 -51
  225. package/docs/themes/gray/light.css +0 -51
  226. package/docs/themes/gray/theme.css +0 -306
  227. package/docs/themes/greenery/dark-hc.css +0 -51
  228. package/docs/themes/greenery/dark-mc.css +0 -51
  229. package/docs/themes/greenery/dark.css +0 -51
  230. package/docs/themes/greenery/light-hc.css +0 -51
  231. package/docs/themes/greenery/light-mc.css +0 -51
  232. package/docs/themes/greenery/light.css +0 -51
  233. package/docs/themes/greenery/theme.css +0 -306
  234. package/docs/themes/hermana/dark-hc.css +0 -51
  235. package/docs/themes/hermana/dark-mc.css +0 -51
  236. package/docs/themes/hermana/dark.css +0 -51
  237. package/docs/themes/hermana/light-hc.css +0 -51
  238. package/docs/themes/hermana/light-mc.css +0 -51
  239. package/docs/themes/hermana/light.css +0 -51
  240. package/docs/themes/hermana/theme.css +0 -306
  241. package/docs/themes/illuminating/dark-hc.css +0 -51
  242. package/docs/themes/illuminating/dark-mc.css +0 -51
  243. package/docs/themes/illuminating/dark.css +0 -51
  244. package/docs/themes/illuminating/light-hc.css +0 -51
  245. package/docs/themes/illuminating/light-mc.css +0 -51
  246. package/docs/themes/illuminating/light.css +0 -51
  247. package/docs/themes/illuminating/theme.css +0 -306
  248. package/docs/themes/magenta/dark-hc.css +0 -51
  249. package/docs/themes/magenta/dark-mc.css +0 -51
  250. package/docs/themes/magenta/dark.css +0 -51
  251. package/docs/themes/magenta/light-hc.css +0 -51
  252. package/docs/themes/magenta/light-mc.css +0 -51
  253. package/docs/themes/magenta/light.css +0 -51
  254. package/docs/themes/magenta/theme.css +0 -306
  255. package/docs/themes/mocha/dark-hc.css +0 -51
  256. package/docs/themes/mocha/dark-mc.css +0 -51
  257. package/docs/themes/mocha/dark.css +0 -51
  258. package/docs/themes/mocha/light-hc.css +0 -51
  259. package/docs/themes/mocha/light-mc.css +0 -51
  260. package/docs/themes/mocha/light.css +0 -51
  261. package/docs/themes/mocha/theme.css +0 -306
  262. package/docs/themes/olivegreen/dark-hc.css +0 -51
  263. package/docs/themes/olivegreen/dark-mc.css +0 -51
  264. package/docs/themes/olivegreen/dark.css +0 -51
  265. package/docs/themes/olivegreen/light-hc.css +0 -51
  266. package/docs/themes/olivegreen/light-mc.css +0 -51
  267. package/docs/themes/olivegreen/light.css +0 -51
  268. package/docs/themes/olivegreen/theme.css +0 -306
  269. package/docs/themes/peri/dark-hc.css +0 -51
  270. package/docs/themes/peri/dark-mc.css +0 -51
  271. package/docs/themes/peri/dark.css +0 -51
  272. package/docs/themes/peri/light-hc.css +0 -51
  273. package/docs/themes/peri/light-mc.css +0 -51
  274. package/docs/themes/peri/light.css +0 -51
  275. package/docs/themes/peri/theme.css +0 -306
  276. package/docs/timepicker.html +0 -160
  277. package/foundations/form/index.ts +0 -174
  278. package/foundations/layout/README.md +0 -127
  279. package/intl.d.ts +0 -9
  280. package/micl.ts +0 -221
  281. package/styles/README.md +0 -196
  282. package/tools/shapes/generate.mjs +0 -828
  283. package/tsconfig.json +0 -116
  284. package/webpack.config.js +0 -104
@@ -209,162 +209,95 @@ To enable selection of list items, integrate a Checkbox or Switch component with
209
209
 
210
210
  - The `role="listbox"` and `role="option"` are used for accessibility, indicating a selectable list. They are added automatically when a list contains a selectable item (an item with `tabindex="0"`. The example above shows these roles for clarity.
211
211
 
212
- ## Customizations
213
- The List component supports the following CSS variables, as defined in the [Material Design 3 Expressive List Specification](https://m3.material.io/components/lists/specs):
214
-
215
- | Variable name |
216
- | ------------- |
217
- | --md-comp-list-container-color |
218
- | --md-comp-list-container-shape |
219
- | --md-comp-list-container-space |
220
- | --md-comp-list-segment-gap |
221
- | |
222
- | --md-comp-list-item-container-color |
223
- | --md-comp-list-item-container-expressive-shape |
224
- | --md-comp-list-item-container-disabled-expressive-shape |
225
- | --md-comp-list-item-container-dragged-expressive-shape |
226
- | --md-comp-list-item-container-focused-expressive-shape |
227
- | --md-comp-list-item-container-hovered-expressive-shape |
228
- | --md-comp-list-item-container-pressed-expressive-shape |
229
- | --md-comp-list-item-container-selected-expressive-shape |
230
- | --md-comp-list-item-container-selected-disabled-expressive-shape |
231
- | --md-comp-list-item-container-selected-dragged-expressive-shape |
232
- | --md-comp-list-item-container-selected-focused-expressive-shape |
233
- | --md-comp-list-item-container-selected-hovered-expressive-shape |
234
- | --md-comp-list-item-container-selected-pressed-expressive-shape |
235
- | |
236
- | --md-comp-list-item-between-space |
237
- | --md-comp-list-item-bottom-space |
238
- | --md-comp-list-item-label-text-color |
239
- | --md-comp-list-item-one-line-container-height |
240
- | --md-comp-list-item-overline-color |
241
- | --md-comp-list-item-segmented-container-color |
242
- | --md-comp-list-item-supporting-text-color |
243
- | --md-comp-list-item-three-line-container-height |
244
- | --md-comp-list-item-top-space |
245
- | --md-comp-list-item-two-line-container-height |
246
- | |
247
- | --md-comp-list-item-disabled-label-text-color |
248
- | --md-comp-list-item-disabled-label-text-opacity |
249
- | --md-comp-list-item-disabled-leading-icon-color |
250
- | --md-comp-list-item-disabled-leading-icon-opacity |
251
- | --md-comp-list-item-disabled-overline-color |
252
- | --md-comp-list-item-disabled-overline-opacity |
253
- | --md-comp-list-item-disabled-state-layer-color |
254
- | --md-comp-list-item-disabled-state-layer-opacity |
255
- | --md-comp-list-item-disabled-supporting-text-color |
256
- | --md-comp-list-item-disabled-supporting-text-opacity |
257
- | --md-comp-list-item-disabled-trailing-icon-color |
258
- | --md-comp-list-item-disabled-trailing-icon-opacity |
259
- | --md-comp-list-item-disabled-trailing-supporting-text-color |
260
- | --md-comp-list-item-disabled-trailing-supporting-text-opacity |
261
- | |
262
- | --md-comp-list-item-dragged-container-elevation |
263
- | --md-comp-list-item-dragged-label-text-color |
264
- | --md-comp-list-item-dragged-leading-icon-color |
265
- | --md-comp-list-item-dragged-state-layer-color |
266
- | --md-comp-list-item-dragged-state-layer-opacity |
267
- | --md-comp-list-item-dragged-supporting-text-color |
268
- | --md-comp-list-item-dragged-trailing-icon-color |
269
- | --md-comp-list-item-dragged-trailing-supporting-text-color |
270
- | --md-comp-list-item-focus-indicator-color |
271
- | --md-comp-list-item-focus-indicator-offset |
272
- | --md-comp-list-item-focus-indicator-thickness |
273
- | --md-comp-list-item-focus-label-text-color |
274
- | --md-comp-list-item-focus-leading-icon-color |
275
- | --md-comp-list-item-focus-state-layer-color |
276
- | --md-comp-list-item-focus-state-layer-opacity |
277
- | --md-comp-list-item-focus-supporting-text-color |
278
- | --md-comp-list-item-focus-trailing-icon-color |
279
- | --md-comp-list-item-focus-trailing-supporting-text-color |
280
- | --md-comp-list-item-hover-label-text-color |
281
- | --md-comp-list-item-hover-leading-icon-color |
282
- | --md-comp-list-item-hover-state-layer-color |
283
- | --md-comp-list-item-hover-state-layer-opacity |
284
- | --md-comp-list-item-hover-supporting-text-color |
285
- | --md-comp-list-item-hover-trailing-icon-color |
286
- | --md-comp-list-item-hover-trailing-supporting-text-color |
287
- | --md-comp-list-item-pressed-label-text-color |
288
- | --md-comp-list-item-pressed-leading-icon-color |
289
- | --md-comp-list-item-pressed-state-layer-color |
290
- | --md-comp-list-item-pressed-state-layer-opacity |
291
- | --md-comp-list-item-pressed-supporting-text-color |
292
- | --md-comp-list-item-pressed-trailing-icon-color |
293
- | --md-comp-list-item-pressed-trailing-supporting-text-color |
294
- | |
295
- | --md-comp-list-item-leading-avatar-color |
296
- | --md-comp-list-item-leading-avatar-label-color |
297
- | --md-comp-list-item-leading-avatar-shape |
298
- | --md-comp-list-item-leading-avatar-size |
299
- | --md-comp-list-item-leading-icon-color |
300
- | --md-comp-list-item-leading-icon-expressive-size |
301
- | --md-comp-list-item-leading-image-height |
302
- | --md-comp-list-item-leading-image-expressive-shape |
303
- | --md-comp-list-item-leading-image-width |
304
- | --md-comp-list-item-leading-space |
305
- | --md-comp-list-item-leading-video-height |
306
- | --md-comp-list-item-leading-video-shape |
307
- | --md-comp-list-item-leading-video-width |
308
- | |
309
- | --md-comp-list-item-trailing-icon-color |
310
- | --md-comp-list-item-trailing-icon-expressive-size |
311
- | --md-comp-list-item-trailing-space |
312
- | --md-comp-list-item-trailing-supporting-text-color |
313
- | |
314
- | --md-comp-list-item-selected-container-color |
315
- | --md-comp-list-item-selected-label-text-color |
316
- | --md-comp-list-item-selected-leading-icon-color |
317
- | --md-comp-list-item-selected-overline-color |
318
- | --md-comp-list-item-selected-supporting-text-color |
319
- | --md-comp-list-item-selected-trailing-icon-color |
320
- | --md-comp-list-item-selected-trailing-supporting-text-color |
321
- | |
322
- | --md-comp-list-item-selected-disabled-container-color |
323
- | --md-comp-list-item-selected-disabled-container-opacity |
324
- | --md-comp-list-item-selected-disabled-label-text-color |
325
- | --md-comp-list-item-selected-disabled-label-text-opacity |
326
- | --md-comp-list-item-selected-disabled-leading-icon-color |
327
- | --md-comp-list-item-selected-disabled-leading-icon-opacity |
328
- | --md-comp-list-item-selected-disabled-overline-color |
329
- | --md-comp-list-item-selected-disabled-overline-opacity |
330
- | --md-comp-list-item-selected-disabled-state-layer-color |
331
- | --md-comp-list-item-selected-disabled-state-layer-opacity |
332
- | --md-comp-list-item-selected-disabled-supporting-text-color |
333
- | --md-comp-list-item-selected-disabled-supporting-text-opacity |
334
- | --md-comp-list-item-selected-disabled-trailing-icon-color |
335
- | --md-comp-list-item-selected-disabled-trailing-icon-opacity |
336
- | --md-comp-list-item-selected-disabled-trailing-supporting-text-color |
337
- | --md-comp-list-item-selected-disabled-trailing-supporting-text-opacity |
338
- | |
339
- | --md-comp-list-item-selected-dragged-container-elevation |
340
- | --md-comp-list-item-selected-dragged-label-text-color |
341
- | --md-comp-list-item-selected-dragged-leading-icon-color |
342
- | --md-comp-list-item-selected-dragged-state-layer-color |
343
- | --md-comp-list-item-selected-dragged-state-layer-opacity |
344
- | --md-comp-list-item-selected-dragged-supporting-text-color |
345
- | --md-comp-list-item-selected-dragged-trailing-icon-color |
346
- | --md-comp-list-item-selected-dragged-trailing-supporting-text-color |
347
- | --md-comp-list-item-selected-focus-label-text-color |
348
- | --md-comp-list-item-selected-focus-leading-icon-color |
349
- | --md-comp-list-item-selected-focus-state-layer-color |
350
- | --md-comp-list-item-selected-focus-state-layer-opacity |
351
- | --md-comp-list-item-selected-focus-supporting-text-color |
352
- | --md-comp-list-item-selected-focus-trailing-icon-color |
353
- | --md-comp-list-item-selected-focus-trailing-supporting-text-color |
354
- | --md-comp-list-item-selected-hover-label-text-color |
355
- | --md-comp-list-item-selected-hover-leading-icon-color |
356
- | --md-comp-list-item-selected-hover-state-layer-color |
357
- | --md-comp-list-item-selected-hover-state-layer-opacity |
358
- | --md-comp-list-item-selected-hover-supporting-text-color |
359
- | --md-comp-list-item-selected-hover-trailing-icon-color |
360
- | --md-comp-list-item-selected-hover-trailing-supporting-text-color |
361
- | --md-comp-list-item-selected-pressed-label-text-color |
362
- | --md-comp-list-item-selected-pressed-leading-icon-color |
363
- | --md-comp-list-item-selected-pressed-state-layer-color |
364
- | --md-comp-list-item-selected-pressed-state-layer-opacity |
365
- | --md-comp-list-item-selected-pressed-supporting-text-color |
366
- | --md-comp-list-item-selected-pressed-trailing-icon-color |
367
- | --md-comp-list-item-selected-pressed-trailing-supporting-text-color |
212
+ ## Theming
213
+ Each list style can be themed with CSS custom properties that follow the Material Design 3 component-token naming convention, as defined in the [Material Design 3 Expressive List Specification](https://m3.material.io/components/lists/specs). Set them on any appropriate parent element to affect its child lists.
214
+
215
+ ### Container
216
+
217
+ | Custom property | Meaning | Default |
218
+ |---|---|---|
219
+ | `--md-comp-list-container-color` | The background color of the list | `transparent` |
220
+ | `--md-comp-list-container-shape` | The corner rounding of the list, shared by its first and last items | `--md-sys-shape-corner-large` |
221
+ | `--md-comp-list-container-space` | The vertical margin around the list | `0px` |
222
+ | `--md-comp-list-segment-gap` | The gap between the items of a segmented list | `2px` |
223
+ | `--md-comp-list-item-segmented-container-color` | The background color of the items of a segmented list | `--md-sys-color-surface` |
224
+
225
+ ### Item layout
226
+
227
+ | Custom property | Meaning | Default |
228
+ |---|---|---|
229
+ | `--md-comp-list-item-one-line-container-height` | The minimum height of a single-line item | `56px` |
230
+ | `--md-comp-list-item-two-line-container-height` | The minimum height of a two-line item | `72px` |
231
+ | `--md-comp-list-item-three-line-container-height` | The minimum height of a three-line item | `88px` |
232
+ | `--md-comp-list-item-top-space` | The padding above the item content | `10px` |
233
+ | `--md-comp-list-item-bottom-space` | The padding below the item content | `10px` |
234
+ | `--md-comp-list-item-leading-space` | The padding before the item content | `16px` |
235
+ | `--md-comp-list-item-trailing-space` | The padding after the item content | `16px` |
236
+ | `--md-comp-list-item-between-space` | The gap between the elements of an item | `12px` |
237
+
238
+ ### Item shapes
239
+ The expressive corner rounding of an item follows its interaction state:
240
+
241
+ | Custom property | Item state | Default |
242
+ |---|---|---|
243
+ | `--md-comp-list-item-container-expressive-shape` | Resting | `--md-sys-shape-corner-extra-small` |
244
+ | `--md-comp-list-item-container-hovered-expressive-shape` | Hovered | `--md-sys-shape-corner-medium` |
245
+ | `--md-comp-list-item-container-focused-expressive-shape` | Focused | `--md-sys-shape-corner-large` |
246
+ | `--md-comp-list-item-container-pressed-expressive-shape` | Pressed | `--md-sys-shape-corner-large` |
247
+ | `--md-comp-list-item-container-dragged-expressive-shape` | Dragged | `--md-sys-shape-corner-large` |
248
+ | `--md-comp-list-item-container-disabled-expressive-shape` | Disabled | `--md-sys-shape-corner-extra-small` |
249
+ | `--md-comp-list-item-container-selected-expressive-shape` | Selected | `--md-sys-shape-corner-large` |
250
+
251
+ For selected items, every state also has its own token — `--md-comp-list-item-container-selected-<state>-expressive-shape` with `<state>` one of `hovered`, `focused`, `pressed`, `dragged` or `disabled` — all defaulting to `--md-sys-shape-corner-large`.
252
+
253
+ ### Leading and trailing media
254
+
255
+ | Custom property | Meaning | Default |
256
+ |---|---|---|
257
+ | `--md-comp-list-item-leading-icon-color` | The color of a leading icon | `--md-sys-color-on-surface-variant` |
258
+ | `--md-comp-list-item-leading-icon-expressive-size` | The size of a leading icon | `20px` |
259
+ | `--md-comp-list-item-trailing-icon-color` | The color of a trailing icon | `--md-sys-color-on-surface-variant` |
260
+ | `--md-comp-list-item-trailing-icon-expressive-size` | The size of a trailing icon | `20px` |
261
+ | `--md-comp-list-item-leading-avatar-color` | The background color of an avatar | `--md-sys-color-primary-container` |
262
+ | `--md-comp-list-item-leading-avatar-label-color` | The text color of an avatar | `--md-sys-color-on-primary-container` |
263
+ | `--md-comp-list-item-leading-avatar-shape` | The corner rounding of an avatar | `--md-sys-shape-corner-full` |
264
+ | `--md-comp-list-item-leading-avatar-size` | The size of an avatar | `40px` |
265
+ | `--md-comp-list-item-leading-image-width` | The width of an image | `56px` |
266
+ | `--md-comp-list-item-leading-image-height` | The maximum height of an image | `56px` |
267
+ | `--md-comp-list-item-leading-image-expressive-shape` | The corner rounding of an image | `--md-sys-shape-corner-small` |
268
+ | `--md-comp-list-item-leading-video-width` | The width of a video thumbnail | `100px` |
269
+ | `--md-comp-list-item-leading-video-height` | The maximum height of a video thumbnail | `56px` |
270
+ | `--md-comp-list-item-leading-video-shape` | The corner rounding of a video thumbnail | `--md-sys-shape-corner-small` |
271
+
272
+ ### Focus indicator
273
+
274
+ | Custom property | Meaning | Default |
275
+ |---|---|---|
276
+ | `--md-comp-list-item-focus-indicator-color` | The color of the keyboard focus indicator | `--md-sys-color-secondary` |
277
+ | `--md-comp-list-item-focus-indicator-thickness` | The thickness of the keyboard focus indicator | `3px` |
278
+ | `--md-comp-list-item-focus-indicator-offset` | The offset of the keyboard focus indicator | `-3px` |
279
+
280
+ ### Item colors
281
+ The colors of list items follow a naming pattern that combines the item's selection and interaction state with the colored part:
282
+
283
+ ```
284
+ --md-comp-list-item[-selected][-<state>]-<part>-color
285
+ ```
286
+
287
+ - `selected` targets items that are checked options, contain a checked checkbox or switch, or are the summary of an open accordion.
288
+ - `<state>` is one of `hover`, `focus`, `pressed`, `dragged` or `disabled`; omit it for the resting state.
289
+ - `<part>` is one of `container`, `overline`, `label-text`, `supporting-text`, `leading-icon`, `trailing-icon`, `trailing-supporting-text` or `state-layer`.
290
+
291
+ Every `state-layer` color has an `-opacity` companion (defaults: hover 8%, focus 10%, pressed 10%, dragged 16%, disabled 0%), and so does every color of a `disabled` state (default: --md-sys-state-disabled-state-layer-opacity, 38%). The `container` part exists for the resting, `selected` and `selected-disabled` combinations only, and the `overline` part has no interaction-state tokens. While an item is dragged, its elevation can be set with `--md-comp-list-item-dragged-container-elevation` and `--md-comp-list-item-selected-dragged-container-elevation` (default: --md-sys-elevation-level4). The defaults per part:
292
+
293
+ | Part | Resting | Hover, focus, pressed, dragged | Selected | Selected + state | Disabled |
294
+ |---|---|---|---|---|---|
295
+ | container | transparent | | --md-sys-color-secondary-container | | selected: --md-sys-color-on-surface at 38% |
296
+ | overline | --md-sys-color-on-surface-variant | | --md-sys-color-on-secondary-container | | --md-sys-color-on-surface at 38% |
297
+ | label-text | --md-sys-color-on-surface | --md-sys-color-on-surface | --md-sys-color-on-secondary-container | --md-sys-color-on-secondary-container | --md-sys-color-on-surface at 38% |
298
+ | supporting-text, trailing-supporting-text | --md-sys-color-on-surface-variant | --md-sys-color-on-surface-variant | --md-sys-color-on-secondary-container | --md-sys-color-on-surface | --md-sys-color-on-surface at 38% |
299
+ | leading-icon, trailing-icon | --md-sys-color-on-surface-variant | --md-sys-color-on-surface-variant | --md-sys-color-on-secondary-container | --md-sys-color-on-surface | --md-sys-color-on-surface at 38% |
300
+ | state-layer | | --md-sys-color-on-surface | | --md-sys-color-on-surface | --md-sys-color-on-surface at 0% |
368
301
 
369
302
  **Example: Changing the height of single-line list items**
370
303
 
@@ -19,7 +19,6 @@
19
19
  // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20
20
  // SOFTWARE.
21
21
 
22
- @use '../../foundations';
23
22
  @use '../../styles/elevation';
24
23
  @use '../../styles/motion';
25
24
  @use '../../styles/shape';
@@ -51,19 +50,27 @@
51
50
  @include typography.scale('body-medium');
52
51
  @include typography.scale('label-small');
53
52
 
54
- :root {
55
- --md-comp-accordion-item-space: 0px;
56
- }
57
-
58
53
  $item-padding-block: var(--md-comp-list-item-top-space, 10px) var(--md-comp-list-item-bottom-space, 10px);
59
54
  $item-padding-inline: var(--md-comp-list-item-leading-space, 16px) var(--md-comp-list-item-trailing-space, 16px);
60
55
 
61
56
  $open-accordion: ':where(details[open] > *)';
62
57
 
58
+ // Each selector group compiles to a single selector.
59
+ $items: ':is(.micl-list-item-one, .micl-list-item-two, .micl-list-item-three)';
60
+
61
+ // An item is selected when it is a checked option, contains a checked checkbox/switch,
62
+ // or is the summary of an open accordion.
63
+ $selected: ':is(:checked, :has(input[type=checkbox]:checked), #{$open-accordion})';
64
+ $unselected: ':not(:checked, :has(input[type=checkbox]:checked), #{$open-accordion})';
65
+
63
66
  %shared-interactive-states {
64
67
  cursor: pointer;
65
68
 
66
- &:not(:has(input[type=checkbox]:checked)):not(#{$open-accordion}) {
69
+ &:focus-visible {
70
+ outline: var(--md-comp-list-item-focus-indicator-thickness, var(--md-sys-state-focus-indicator-thickness, 3px)) solid var(--md-comp-list-item-focus-indicator-color, var(--md-sys-color-secondary));
71
+ outline-offset: var(--md-comp-list-item-focus-indicator-offset, var(--md-sys-state-focus-indicator-inner-offset, -3px));
72
+ }
73
+ &#{$unselected} {
67
74
  &:hover {
68
75
  --_list-item-shape: var(--md-comp-list-item-container-hovered-expressive-shape, var(--md-sys-shape-corner-medium, 12px));
69
76
  --_headline-color: var(--md-comp-list-item-hover-label-text-color, var(--md-sys-color-on-surface));
@@ -83,9 +90,6 @@ $open-accordion: ':where(details[open] > *)';
83
90
  --_trailing-text-color: var(--md-comp-list-item-focus-trailing-supporting-text-color, var(--md-sys-color-on-surface-variant));
84
91
  --statelayer-color: var(--md-comp-list-item-focus-state-layer-color, var(--md-sys-color-on-surface));
85
92
  --statelayer-opacity: var(--md-comp-list-item-focus-state-layer-opacity, var(--md-sys-state-focus-state-layer-opacity, 10%));
86
-
87
- outline: var(--md-comp-list-item-focus-indicator-thickness, var(--md-sys-state-focus-indicator-thickness, 3px)) solid var(--md-comp-list-item-focus-indicator-color, var(--md-sys-color-secondary));
88
- outline-offset: var(--md-comp-list-item-focus-indicator-offset, var(--md-sys-state-focus-indicator-inner-offset, -3px));
89
93
  }
90
94
  &:active {
91
95
  --_list-item-shape: var(--md-comp-list-item-container-pressed-expressive-shape, var(--md-sys-shape-corner-large, 16px));
@@ -111,7 +115,7 @@ $open-accordion: ':where(details[open] > *)';
111
115
  cursor: grabbing;
112
116
  }
113
117
  }
114
- &:is(:has(input[type=checkbox]:checked), #{$open-accordion}) {
118
+ &#{$selected} {
115
119
  &:hover {
116
120
  --_list-item-shape: var(--md-comp-list-item-container-selected-hovered-expressive-shape, var(--md-sys-shape-corner-large, 16px));
117
121
  --_headline-color: var(--md-comp-list-item-selected-hover-label-text-color, var(--md-sys-color-on-secondary-container));
@@ -131,9 +135,6 @@ $open-accordion: ':where(details[open] > *)';
131
135
  --_trailing-text-color: var(--md-comp-list-item-selected-focus-trailing-supporting-text-color, var(--md-sys-color-on-surface));
132
136
  --statelayer-color: var(--md-comp-list-item-selected-focus-state-layer-color, var(--md-sys-color-on-surface));
133
137
  --statelayer-opacity: var(--md-comp-list-item-selected-focus-state-layer-opacity, var(--md-sys-state-focus-state-layer-opacity, 10%));
134
-
135
- outline: var(--md-comp-list-item-focus-indicator-thickness, var(--md-sys-state-focus-indicator-thickness, 3px)) solid var(--md-comp-list-item-focus-indicator-color, var(--md-sys-color-secondary));
136
- outline-offset: var(--md-comp-list-item-focus-indicator-offset, var(--md-sys-state-focus-indicator-inner-offset, -3px));
137
138
  }
138
139
  &:active {
139
140
  --_list-item-shape: var(--md-comp-list-item-container-selected-pressed-expressive-shape, var(--md-sys-shape-corner-large, 16px));
@@ -159,7 +160,7 @@ $open-accordion: ':where(details[open] > *)';
159
160
  }
160
161
  }
161
162
  &.micl-rippling {
162
- animation: micl-ripple var(--md-sys-state-ripple-duration) motion.$md-sys-motion-easing-standard;
163
+ animation: micl-ripple calc(var(--md-sys-state-ripple-duration) * 1.333);
163
164
  }
164
165
  }
165
166
 
@@ -168,7 +169,7 @@ $open-accordion: ':where(details[open] > *)';
168
169
  --md-comp-list-motion-duration: #{motion.$md-sys-motion-expressive-default-effects-duration};
169
170
  --md-comp-accordion-motion-spatial: #{motion.$md-sys-motion-expressive-default-spatial};
170
171
  --md-comp-accordion-motion-duration: #{motion.$md-sys-motion-expressive-default-spatial-duration};
171
- --md-sys-divider-space: 0.5px;
172
+ --md-comp-divider-space: 0.5px;
172
173
  --_list-shape: var(--md-comp-list-container-shape, var(--md-sys-shape-corner-large, 16px));
173
174
  --_list-item-background-color: var(--md-comp-list-item-container-color, transparent);
174
175
  --_list-item-background-opacity: 0%;
@@ -205,9 +206,7 @@ $open-accordion: ':where(details[open] > *)';
205
206
  transform: rotate(180deg);
206
207
  }
207
208
 
208
- &> summary.micl-list-item-one,
209
- &> summary.micl-list-item-two,
210
- &> summary.micl-list-item-three {
209
+ &> summary#{$items} {
211
210
  position: relative;
212
211
 
213
212
  &::-webkit-details-marker {
@@ -216,9 +215,6 @@ $open-accordion: ':where(details[open] > *)';
216
215
  &.micl-list-item--disabled {
217
216
  pointer-events: none;
218
217
  }
219
- &:not(.micl-list-item--disabled) {
220
- @extend %shared-interactive-states;
221
- }
222
218
  }
223
219
  .micl-list-item__content {
224
220
  box-sizing: border-box;
@@ -229,17 +225,18 @@ $open-accordion: ':where(details[open] > *)';
229
225
  }
230
226
  }
231
227
 
232
- .micl-list:has(.micl-list-item-one[tabindex], .micl-list-item-two[tabindex], .micl-list-item-three[tabindex]), select {
233
- .micl-list-item-one, .micl-list-item-two, .micl-list-item-three {
234
- &:not(:disabled):not(.micl-list-item--disabled) {
235
- @extend %shared-interactive-states;
236
- }
237
- }
228
+ // This single extend site keeps every interactive-state rule at one compiled selector.
229
+ // Interactive items are the summaries of accordions, the children of a list that holds a
230
+ // tabindex-marked item (see the README), and the options of a select — with `optgroup`
231
+ // covering grouped options, which are not direct children of their select.
232
+ :is(
233
+ .micl-list > details > summary#{$items},
234
+ :is(.micl-list:has(> #{$items}[tabindex]), select, optgroup) > #{$items}
235
+ ):not(:disabled, .micl-list-item--disabled) {
236
+ @extend %shared-interactive-states;
238
237
  }
239
238
 
240
- .micl-list-item-one,
241
- .micl-list-item-two,
242
- .micl-list-item-three {
239
+ #{$items} {
243
240
  --statelayer-color: var(--md-sys-color-on-surface);
244
241
  --_list-item-shape: var(--md-comp-list-item-container-expressive-shape, var(--md-sys-shape-corner-extra-small, 4px));
245
242
  --_overline-color: var(--md-comp-list-item-overline-color, var(--md-sys-color-on-surface-variant));
@@ -268,6 +265,7 @@ $open-accordion: ':where(details[open] > *)';
268
265
  ),
269
266
  linear-gradient(rgb(from var(--statelayer-color) r g b / var(--statelayer-opacity)));
270
267
  background-repeat: no-repeat;
268
+ background-position: var(--micl-x, center) var(--micl-y, center), 0 0;
271
269
  background-size: 0%, 100%;
272
270
  list-style: none;
273
271
  transition:
@@ -329,7 +327,7 @@ $open-accordion: ':where(details[open] > *)';
329
327
  opacity: var(--md-sys-state-disabled-state-layer-opacity, 38%);
330
328
  }
331
329
 
332
- &:checked, &:has(input[type=checkbox]:checked), &#{$open-accordion} {
330
+ &#{$selected} {
333
331
  --_list-item-background-color: var(--md-comp-list-item-selected-disabled-container-color, var(--md-sys-color-on-surface));
334
332
  --_list-item-background-opacity: var(--md-comp-list-item-selected-disabled-container-opacity, var(--md-sys-state-disabled-state-layer-opacity, 38%));
335
333
  --_list-item-shape: var(--md-comp-list-item-container-selected-disabled-expressive-shape, var(--md-sys-shape-corner-large, 16px));
@@ -343,7 +341,7 @@ $open-accordion: ':where(details[open] > *)';
343
341
  --statelayer-opacity: var(--md-comp-list-item-selected-disabled-state-layer-opacity, 0%);
344
342
  }
345
343
  }
346
- &:checked, &:has(input[type=checkbox]:checked), &#{$open-accordion} {
344
+ &#{$selected} {
347
345
  --_list-item-background-color: var(--md-comp-list-item-selected-container-color, var(--md-sys-color-secondary-container));
348
346
  --_list-item-background-opacity: 100%;
349
347
  --_overline-color: var(--md-comp-list-item-selected-overline-color, var(--md-sys-color-on-secondary-container));
@@ -353,8 +351,8 @@ $open-accordion: ':where(details[open] > *)';
353
351
  --_trailing-text-color: var(--md-comp-list-item-selected-trailing-supporting-text-color, var(--md-sys-color-on-secondary-container));
354
352
  --_trailing-icon-color: var(--md-comp-list-item-selected-trailing-icon-color, var(--md-sys-color-on-secondary-container));
355
353
  }
356
- &:not(:disabled):not(.micl-list-item--disabled) {
357
- &:checked, &:has(input[type=checkbox]:checked), &#{$open-accordion} {
354
+ &:not(:disabled, .micl-list-item--disabled) {
355
+ &#{$selected} {
358
356
  --_list-item-shape: var(--md-comp-list-item-container-selected-expressive-shape, var(--md-sys-shape-corner-large, 16px));
359
357
  }
360
358
  input[type=checkbox]:not(:disabled):hover,
@@ -391,7 +389,7 @@ $open-accordion: ':where(details[open] > *)';
391
389
  -webkit-line-clamp: 2;
392
390
  }
393
391
  }
394
- .micl-list-item-one, .micl-list-item-two, .micl-list-item-three {
392
+ #{$items} {
395
393
  input[type=checkbox].micl-checkbox {
396
394
  block-size: 24px;
397
395
  min-block-size: 24px;
@@ -483,6 +481,6 @@ $open-accordion: ':where(details[open] > *)';
483
481
  color: var(--_trailing-text-color);
484
482
  }
485
483
 
486
- [dir=rtl] .micl-list details[open] .micl-list-item__icon--expander {
484
+ .micl-list details[open] .micl-list-item__icon--expander:dir(rtl) {
487
485
  transform: rotate(-180deg);
488
486
  }