mtrl 0.10.0-next.2 → 0.10.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 (930) hide show
  1. package/README.md +130 -88
  2. package/dist/README.md +130 -88
  3. package/dist/components/badge/features.js +1 -1
  4. package/dist/components/bottom-sheet/api.d.ts +4 -3
  5. package/dist/components/bottom-sheet/config.js +11 -4
  6. package/dist/components/bottom-sheet/constants.d.ts +0 -2
  7. package/dist/components/bottom-sheet/constants.js +0 -1
  8. package/dist/components/bottom-sheet/features/drag.d.ts +3 -0
  9. package/dist/components/bottom-sheet/features/drag.js +23 -0
  10. package/dist/components/bottom-sheet/features/state.js +58 -2
  11. package/dist/components/bottom-sheet/features/structure.js +9 -4
  12. package/dist/components/bottom-sheet/types.d.ts +15 -2
  13. package/dist/components/button/features/progress.js +5 -3
  14. package/dist/components/button-group/button-group.js +3 -1
  15. package/dist/components/button-group/config.d.ts +8 -8
  16. package/dist/components/button-group/config.js +3 -2
  17. package/dist/components/button-group/constants.d.ts +7 -2
  18. package/dist/components/button-group/constants.js +5 -5
  19. package/dist/components/button-group/types.d.ts +5 -0
  20. package/dist/components/card/api.d.ts +4 -0
  21. package/dist/components/card/api.js +8 -0
  22. package/dist/components/card/card.js +1 -2
  23. package/dist/components/card/config.js +2 -14
  24. package/dist/components/card/content.js +1 -6
  25. package/dist/components/card/features.d.ts +5 -19
  26. package/dist/components/card/features.js +1 -11
  27. package/dist/components/card/index.d.ts +1 -1
  28. package/dist/components/card/types.d.ts +34 -3
  29. package/dist/components/carousel/features/scroll.js +7 -3
  30. package/dist/components/checkbox/config.js +18 -6
  31. package/dist/components/chips/api.js +1 -1
  32. package/dist/components/chips/config.js +1 -1
  33. package/dist/components/chips/features/controller.js +14 -7
  34. package/dist/components/chips/index.d.ts +1 -1
  35. package/dist/components/chips/types.d.ts +24 -5
  36. package/dist/components/datepicker/datepicker.d.ts +8 -2
  37. package/dist/components/datepicker/datepicker.js +71 -30
  38. package/dist/components/datepicker/index.d.ts +1 -1
  39. package/dist/components/datepicker/types.d.ts +63 -30
  40. package/dist/components/datepicker/utils.d.ts +5 -0
  41. package/dist/components/datepicker/utils.js +2 -0
  42. package/dist/components/dialog/api.js +5 -0
  43. package/dist/components/dialog/config.js +8 -2
  44. package/dist/components/dialog/features.js +94 -26
  45. package/dist/components/dialog/types.d.ts +15 -2
  46. package/dist/components/divider/features.js +3 -2
  47. package/dist/components/drawer/config.js +9 -2
  48. package/dist/components/drawer/features/items.js +3 -1
  49. package/dist/components/drawer/features/state.js +50 -9
  50. package/dist/components/drawer/types.d.ts +18 -0
  51. package/dist/components/extended-fab/api.d.ts +2 -0
  52. package/dist/components/extended-fab/api.js +2 -0
  53. package/dist/components/extended-fab/types.d.ts +6 -2
  54. package/dist/components/fab-menu/config.d.ts +11 -0
  55. package/dist/components/fab-menu/config.js +15 -0
  56. package/dist/components/fab-menu/constants.d.ts +59 -0
  57. package/dist/components/fab-menu/constants.js +30 -0
  58. package/dist/components/fab-menu/fab-menu.d.ts +40 -0
  59. package/dist/components/fab-menu/fab-menu.js +315 -0
  60. package/dist/components/fab-menu/index.d.ts +6 -0
  61. package/dist/components/fab-menu/index.js +4 -0
  62. package/dist/components/fab-menu/stagger.d.ts +10 -0
  63. package/dist/components/fab-menu/stagger.js +24 -0
  64. package/dist/components/fab-menu/types.d.ts +110 -0
  65. package/dist/components/fab-menu/types.js +1 -0
  66. package/dist/components/icon-button/features/toggle.d.ts +1 -0
  67. package/dist/components/icon-button/features/toggle.js +1 -0
  68. package/dist/components/icon-button/icon-button.d.ts +2 -2
  69. package/dist/components/icon-button/index.d.ts +2 -2
  70. package/dist/components/icon-button/types.d.ts +9 -2
  71. package/dist/components/index.d.ts +4 -0
  72. package/dist/components/index.js +2 -0
  73. package/dist/components/list/api.d.ts +2 -2
  74. package/dist/components/list/features/renderer.js +2 -1
  75. package/dist/components/list/features/selection.js +1 -1
  76. package/dist/components/list/types.d.ts +5 -0
  77. package/dist/components/menu/config.js +6 -1
  78. package/dist/components/menu/features/controller.d.ts +2 -0
  79. package/dist/components/menu/features/controller.js +58 -41
  80. package/dist/components/menu/features/index.d.ts +1 -2
  81. package/dist/components/menu/features/index.js +1 -2
  82. package/dist/components/menu/features/keyboard.js +3 -2
  83. package/dist/components/menu/features/layer.d.ts +15 -0
  84. package/dist/components/menu/features/layer.js +16 -0
  85. package/dist/components/menu/features/loader.d.ts +35 -0
  86. package/dist/components/menu/features/loader.js +64 -0
  87. package/dist/components/menu/features/opener.js +2 -1
  88. package/dist/components/menu/features/position.js +40 -38
  89. package/dist/components/menu/features/submenu.js +12 -4
  90. package/dist/components/menu/menu.js +2 -2
  91. package/dist/components/menu/types.d.ts +22 -2
  92. package/dist/components/navigation-rail/navigation-rail.js +5 -4
  93. package/dist/components/navigation-rail/types.d.ts +2 -0
  94. package/dist/components/progress/api.d.ts +4 -0
  95. package/dist/components/progress/api.js +17 -10
  96. package/dist/components/progress/config.js +3 -11
  97. package/dist/components/progress/features/canvas.d.ts +1 -0
  98. package/dist/components/progress/features/canvas.js +1 -1
  99. package/dist/components/progress/features/circular.js +7 -1
  100. package/dist/components/progress/features/state.js +5 -3
  101. package/dist/components/progress/index.d.ts +1 -1
  102. package/dist/components/progress/types.d.ts +21 -12
  103. package/dist/components/radios/radio.js +1 -3
  104. package/dist/components/search/api.d.ts +10 -2
  105. package/dist/components/search/api.js +18 -10
  106. package/dist/components/search/config.d.ts +19 -3
  107. package/dist/components/search/config.js +11 -2
  108. package/dist/components/search/constants.d.ts +11 -0
  109. package/dist/components/search/constants.js +9 -0
  110. package/dist/components/search/features/input.js +12 -3
  111. package/dist/components/search/features/states.d.ts +4 -2
  112. package/dist/components/search/features/states.js +98 -16
  113. package/dist/components/search/features/structure.d.ts +7 -20
  114. package/dist/components/search/features/structure.js +79 -29
  115. package/dist/components/search/features/suggestions.d.ts +2 -1
  116. package/dist/components/search/features/suggestions.js +22 -6
  117. package/dist/components/search/index.d.ts +1 -1
  118. package/dist/components/search/types.d.ts +25 -2
  119. package/dist/components/segmented-button/config.d.ts +1 -1
  120. package/dist/components/segmented-button/segmented-button.js +1 -43
  121. package/dist/components/segmented-button/types.d.ts +3 -3
  122. package/dist/components/select/features.js +8 -18
  123. package/dist/components/select/types.d.ts +7 -0
  124. package/dist/components/side-sheet/api.d.ts +4 -3
  125. package/dist/components/side-sheet/config.js +11 -3
  126. package/dist/components/side-sheet/features/state.js +57 -2
  127. package/dist/components/side-sheet/features/structure.js +1 -1
  128. package/dist/components/side-sheet/types.d.ts +12 -0
  129. package/dist/components/slider/api.js +2 -2
  130. package/dist/components/slider/features/controller.d.ts +14 -14
  131. package/dist/components/slider/features/controller.js +2 -2
  132. package/dist/components/slider/features/handlers.js +2 -1
  133. package/dist/components/slider/features/tracks.d.ts +0 -9
  134. package/dist/components/slider/features/tracks.js +3 -1
  135. package/dist/components/slider/types.d.ts +2 -2
  136. package/dist/components/snackbar/api.js +28 -4
  137. package/dist/components/snackbar/config.d.ts +1 -0
  138. package/dist/components/snackbar/config.js +8 -1
  139. package/dist/components/snackbar/layer.d.ts +23 -0
  140. package/dist/components/snackbar/layer.js +85 -0
  141. package/dist/components/snackbar/types.d.ts +12 -0
  142. package/dist/components/split-button/api.js +2 -1
  143. package/dist/components/split-button/features/menu.js +1 -0
  144. package/dist/components/split-button/types.d.ts +8 -0
  145. package/dist/components/switch/api.js +7 -0
  146. package/dist/components/switch/features.d.ts +4 -0
  147. package/dist/components/switch/features.js +9 -2
  148. package/dist/components/switch/types.d.ts +6 -0
  149. package/dist/components/tabs/api.js +0 -9
  150. package/dist/components/tabs/types.d.ts +1 -1
  151. package/dist/components/textfield/api.d.ts +1 -0
  152. package/dist/components/textfield/api.js +4 -1
  153. package/dist/components/textfield/constants.d.ts +5 -1
  154. package/dist/components/textfield/features/counter.d.ts +29 -0
  155. package/dist/components/textfield/features/counter.js +54 -0
  156. package/dist/components/textfield/features/field.d.ts +37 -0
  157. package/dist/components/textfield/features/field.js +39 -0
  158. package/dist/components/textfield/features/index.d.ts +4 -0
  159. package/dist/components/textfield/features/index.js +2 -0
  160. package/dist/components/textfield/features/leading-icon.js +2 -1
  161. package/dist/components/textfield/features/placement.js +65 -60
  162. package/dist/components/textfield/features/prefix-text.js +2 -1
  163. package/dist/components/textfield/features/suffix-text.js +2 -1
  164. package/dist/components/textfield/features/supporting-text.js +16 -33
  165. package/dist/components/textfield/features/trailing-icon.js +2 -1
  166. package/dist/components/textfield/textfield.js +2 -2
  167. package/dist/components/textfield/types.d.ts +7 -0
  168. package/dist/components/timepicker/api.js +67 -20
  169. package/dist/components/timepicker/config.d.ts +3 -1085
  170. package/dist/components/timepicker/config.js +3 -35
  171. package/dist/components/timepicker/constants.d.ts +21 -11
  172. package/dist/components/timepicker/constants.js +4 -3
  173. package/dist/components/timepicker/dial.d.ts +8 -3
  174. package/dist/components/timepicker/dial.js +8 -2
  175. package/dist/components/timepicker/index.d.ts +2 -1
  176. package/dist/components/timepicker/render.js +91 -103
  177. package/dist/components/timepicker/timepicker.js +2 -2
  178. package/dist/components/timepicker/types.d.ts +61 -18
  179. package/dist/components/timepicker/utils.d.ts +20 -53
  180. package/dist/components/timepicker/utils.js +36 -86
  181. package/dist/components/toolbar/config.d.ts +19 -0
  182. package/dist/components/toolbar/config.js +46 -0
  183. package/dist/components/toolbar/constants.d.ts +66 -0
  184. package/dist/components/toolbar/constants.js +32 -0
  185. package/dist/components/toolbar/index.d.ts +6 -0
  186. package/dist/components/toolbar/index.js +4 -0
  187. package/dist/components/toolbar/toolbar.d.ts +29 -0
  188. package/dist/components/toolbar/toolbar.js +204 -0
  189. package/dist/components/toolbar/types.d.ts +152 -0
  190. package/dist/components/toolbar/types.js +1 -0
  191. package/dist/components/tooltip/api.js +34 -3
  192. package/dist/components/tooltip/config.js +8 -1
  193. package/dist/components/tooltip/types.d.ts +15 -2
  194. package/dist/core/compose/features/checkable.d.ts +3 -6
  195. package/dist/core/compose/features/checkable.js +4 -20
  196. package/dist/core/compose/features/disabled.js +14 -14
  197. package/dist/core/compose/features/events.d.ts +16 -4
  198. package/dist/core/compose/features/input.js +1 -4
  199. package/dist/core/compose/features/textinput.js +18 -18
  200. package/dist/core/compose/features/textlabel.js +6 -7
  201. package/dist/core/dom/focus.d.ts +36 -0
  202. package/dist/core/dom/focus.js +47 -0
  203. package/dist/core/dom/index.d.ts +5 -0
  204. package/dist/core/dom/index.js +3 -0
  205. package/dist/core/dom/layer.d.ts +66 -0
  206. package/dist/core/dom/layer.js +78 -0
  207. package/dist/core/dom/roving.d.ts +30 -0
  208. package/dist/core/dom/roving.js +75 -0
  209. package/dist/core/index.d.ts +2 -0
  210. package/dist/core/index.js +1 -0
  211. package/dist/core/state/emitter.d.ts +8 -2
  212. package/dist/core/state/events.d.ts +4 -3
  213. package/dist/core/theme/index.d.ts +7 -0
  214. package/dist/core/theme/index.js +2 -0
  215. package/dist/core/theme/shape.d.ts +9 -0
  216. package/dist/core/theme/shape.js +1 -0
  217. package/dist/core/theme/tokens.d.ts +45 -0
  218. package/dist/core/theme/tokens.js +36 -0
  219. package/dist/core/utils/theme.d.ts +7 -2
  220. package/dist/core/utils/theme.js +21 -23
  221. package/dist/core/utils/warn.d.ts +8 -0
  222. package/dist/core/utils/warn.js +5 -0
  223. package/dist/elements/adapter.d.ts +3 -0
  224. package/dist/elements/adapter.js +3 -0
  225. package/dist/elements/badge.d.ts +8 -0
  226. package/dist/elements/bottom-app-bar.d.ts +55 -0
  227. package/dist/elements/bottom-app-bar.js +43 -0
  228. package/dist/elements/bottom-sheet.d.ts +130 -0
  229. package/dist/elements/bottom-sheet.js +96 -0
  230. package/dist/elements/button-group.d.ts +162 -0
  231. package/dist/elements/button-group.js +174 -0
  232. package/dist/elements/button.d.ts +8 -0
  233. package/dist/elements/card.d.ts +77 -0
  234. package/dist/elements/card.js +113 -0
  235. package/dist/elements/carousel.d.ts +132 -0
  236. package/dist/elements/carousel.js +117 -0
  237. package/dist/elements/checkbox.d.ts +8 -0
  238. package/dist/elements/chips.d.ts +146 -0
  239. package/dist/elements/chips.js +212 -0
  240. package/dist/elements/css/badge.js +3 -2
  241. package/dist/elements/css/bottom-app-bar.d.ts +1 -0
  242. package/dist/elements/css/bottom-app-bar.js +4 -0
  243. package/dist/elements/css/bottom-sheet.d.ts +1 -0
  244. package/dist/elements/css/bottom-sheet.js +4 -0
  245. package/dist/elements/css/button-group.d.ts +1 -0
  246. package/dist/elements/css/button-group.js +6 -0
  247. package/dist/elements/css/button.js +3 -2
  248. package/dist/elements/css/card.d.ts +1 -0
  249. package/dist/elements/css/card.js +5 -0
  250. package/dist/elements/css/carousel.d.ts +1 -0
  251. package/dist/elements/css/carousel.js +4 -0
  252. package/dist/elements/css/checkbox.js +3 -2
  253. package/dist/elements/css/chips.d.ts +1 -0
  254. package/dist/elements/css/chips.js +4 -0
  255. package/dist/elements/css/datepicker.d.ts +1 -0
  256. package/dist/elements/css/datepicker.js +4 -0
  257. package/dist/elements/css/dialog.d.ts +1 -0
  258. package/dist/elements/css/dialog.js +6 -0
  259. package/dist/elements/css/divider.js +2 -1
  260. package/dist/elements/css/drawer.d.ts +1 -0
  261. package/dist/elements/css/drawer.js +4 -0
  262. package/dist/elements/css/extended-fab.js +3 -2
  263. package/dist/elements/css/fab-menu.d.ts +1 -0
  264. package/dist/elements/css/fab-menu.js +6 -0
  265. package/dist/elements/css/fab.js +3 -2
  266. package/dist/elements/css/icon-button.js +3 -2
  267. package/dist/elements/css/index.js +22 -0
  268. package/dist/elements/css/list.d.ts +1 -0
  269. package/dist/elements/css/list.js +4 -0
  270. package/dist/elements/css/loading-indicator.js +3 -2
  271. package/dist/elements/css/menu.d.ts +1 -0
  272. package/dist/elements/css/menu.js +4 -0
  273. package/dist/elements/css/navigation-rail.d.ts +1 -0
  274. package/dist/elements/css/navigation-rail.js +4 -0
  275. package/dist/elements/css/progress.js +3 -2
  276. package/dist/elements/css/radios.js +3 -2
  277. package/dist/elements/css/search.d.ts +1 -0
  278. package/dist/elements/css/search.js +4 -0
  279. package/dist/elements/css/select.d.ts +1 -0
  280. package/dist/elements/css/select.js +6 -0
  281. package/dist/elements/css/side-sheet.d.ts +1 -0
  282. package/dist/elements/css/side-sheet.js +4 -0
  283. package/dist/elements/css/slider.js +3 -2
  284. package/dist/elements/css/snackbar.d.ts +1 -0
  285. package/dist/elements/css/snackbar.js +6 -0
  286. package/dist/elements/css/split-button.d.ts +1 -0
  287. package/dist/elements/css/split-button.js +6 -0
  288. package/dist/elements/css/switch.js +3 -2
  289. package/dist/elements/css/tabs.js +3 -2
  290. package/dist/elements/css/textfield.js +3 -2
  291. package/dist/elements/css/timepicker.d.ts +1 -0
  292. package/dist/elements/css/timepicker.js +4 -0
  293. package/dist/elements/css/toolbar.d.ts +1 -0
  294. package/dist/elements/css/toolbar.js +6 -0
  295. package/dist/elements/css/tooltip.d.ts +1 -0
  296. package/dist/elements/css/tooltip.js +4 -0
  297. package/dist/elements/css/top-app-bar.d.ts +1 -0
  298. package/dist/elements/css/top-app-bar.js +4 -0
  299. package/dist/elements/datepicker.d.ts +163 -0
  300. package/dist/elements/datepicker.js +120 -0
  301. package/dist/elements/define.d.ts +37 -2
  302. package/dist/elements/define.js +105 -18
  303. package/dist/elements/dialog.d.ts +127 -0
  304. package/dist/elements/dialog.js +156 -0
  305. package/dist/elements/divider.d.ts +8 -0
  306. package/dist/elements/drawer.d.ts +147 -0
  307. package/dist/elements/drawer.js +136 -0
  308. package/dist/elements/extended-fab.d.ts +16 -0
  309. package/dist/elements/extended-fab.js +4 -0
  310. package/dist/elements/fab-menu.d.ts +112 -0
  311. package/dist/elements/fab-menu.js +68 -0
  312. package/dist/elements/fab.d.ts +8 -0
  313. package/dist/elements/icon-button.d.ts +17 -1
  314. package/dist/elements/icon-button.js +6 -4
  315. package/dist/elements/index.d.ts +327 -1
  316. package/dist/elements/index.js +98 -0
  317. package/dist/elements/list.d.ts +144 -0
  318. package/dist/elements/list.js +191 -0
  319. package/dist/elements/loading-indicator.d.ts +8 -0
  320. package/dist/elements/menu.d.ts +174 -0
  321. package/dist/elements/menu.js +178 -0
  322. package/dist/elements/navigation-rail.d.ts +164 -0
  323. package/dist/elements/navigation-rail.js +130 -0
  324. package/dist/elements/preupgrade.css +2 -0
  325. package/dist/elements/preupgrade.css.d.ts +1 -0
  326. package/dist/elements/preupgrade.d.ts +2 -0
  327. package/dist/elements/preupgrade.js +4 -0
  328. package/dist/elements/progress.d.ts +8 -0
  329. package/dist/elements/radios.d.ts +9 -0
  330. package/dist/elements/search.d.ts +225 -0
  331. package/dist/elements/search.js +215 -0
  332. package/dist/elements/select.d.ts +143 -0
  333. package/dist/elements/select.js +149 -0
  334. package/dist/elements/sheet.d.ts +44 -0
  335. package/dist/elements/sheet.js +60 -0
  336. package/dist/elements/side-sheet.d.ts +100 -0
  337. package/dist/elements/side-sheet.js +64 -0
  338. package/dist/elements/slider.d.ts +9 -0
  339. package/dist/elements/snackbar.d.ts +107 -0
  340. package/dist/elements/snackbar.js +54 -0
  341. package/dist/elements/split-button.d.ts +90 -0
  342. package/dist/elements/split-button.js +77 -0
  343. package/dist/elements/styles.d.ts +18 -0
  344. package/dist/elements/styles.js +41 -0
  345. package/dist/elements/switch.d.ts +10 -0
  346. package/dist/elements/switch.js +2 -2
  347. package/dist/elements/tabs.d.ts +9 -0
  348. package/dist/elements/textfield.d.ts +11 -1
  349. package/dist/elements/textfield.js +1 -6
  350. package/dist/elements/timepicker.d.ts +167 -0
  351. package/dist/elements/timepicker.js +159 -0
  352. package/dist/elements/toolbar.d.ts +103 -0
  353. package/dist/elements/toolbar.js +77 -0
  354. package/dist/elements/tooltip.d.ts +97 -0
  355. package/dist/elements/tooltip.js +132 -0
  356. package/dist/elements/top-app-bar.d.ts +72 -0
  357. package/dist/elements/top-app-bar.js +95 -0
  358. package/dist/index.cjs +0 -0
  359. package/dist/package.json +16 -2
  360. package/dist/react/badge.d.ts +4 -0
  361. package/dist/react/badge.js +7 -0
  362. package/dist/react/bottom-app-bar.d.ts +4 -0
  363. package/dist/react/bottom-app-bar.js +7 -0
  364. package/dist/react/bottom-sheet.d.ts +4 -0
  365. package/dist/react/bottom-sheet.js +7 -0
  366. package/dist/react/button-group-item.d.ts +3 -0
  367. package/dist/react/button-group-item.js +6 -0
  368. package/dist/react/button-group.d.ts +7 -0
  369. package/dist/react/button-group.js +10 -0
  370. package/dist/react/button.d.ts +5 -0
  371. package/dist/react/button.js +8 -0
  372. package/dist/react/card.d.ts +4 -0
  373. package/dist/react/card.js +7 -0
  374. package/dist/react/carousel-item.d.ts +3 -0
  375. package/dist/react/carousel-item.js +6 -0
  376. package/dist/react/carousel.d.ts +4 -0
  377. package/dist/react/carousel.js +7 -0
  378. package/dist/react/checkbox.d.ts +4 -0
  379. package/dist/react/checkbox.js +7 -0
  380. package/dist/react/chip.d.ts +3 -0
  381. package/dist/react/chip.js +6 -0
  382. package/dist/react/chips.d.ts +4 -0
  383. package/dist/react/chips.js +7 -0
  384. package/dist/react/create.d.ts +11 -2
  385. package/dist/react/create.js +12 -2
  386. package/dist/react/datepicker.d.ts +4 -0
  387. package/dist/react/datepicker.js +7 -0
  388. package/dist/react/dialog.d.ts +4 -0
  389. package/dist/react/dialog.js +7 -0
  390. package/dist/react/divider.d.ts +4 -0
  391. package/dist/react/divider.js +7 -0
  392. package/dist/react/drawer-item.d.ts +3 -0
  393. package/dist/react/drawer-item.js +6 -0
  394. package/dist/react/drawer.d.ts +4 -0
  395. package/dist/react/drawer.js +7 -0
  396. package/dist/react/extended-fab.d.ts +4 -0
  397. package/dist/react/extended-fab.js +7 -0
  398. package/dist/react/fab-menu-item.d.ts +3 -0
  399. package/dist/react/fab-menu-item.js +6 -0
  400. package/dist/react/fab-menu.d.ts +6 -0
  401. package/dist/react/fab-menu.js +9 -0
  402. package/dist/react/fab.d.ts +4 -0
  403. package/dist/react/fab.js +7 -0
  404. package/dist/react/icon-button.d.ts +4 -0
  405. package/dist/react/icon-button.js +7 -0
  406. package/dist/react/index.d.ts +48 -32
  407. package/dist/react/index.js +48 -32
  408. package/dist/react/jsx.d.ts +74 -0
  409. package/dist/react/jsx.js +2 -0
  410. package/dist/react/list-item.d.ts +3 -0
  411. package/dist/react/list-item.js +6 -0
  412. package/dist/react/list.d.ts +4 -0
  413. package/dist/react/list.js +7 -0
  414. package/dist/react/loading-indicator.d.ts +4 -0
  415. package/dist/react/loading-indicator.js +7 -0
  416. package/dist/react/menu-item.d.ts +3 -0
  417. package/dist/react/menu-item.js +6 -0
  418. package/dist/react/menu.d.ts +4 -0
  419. package/dist/react/menu.js +7 -0
  420. package/dist/react/navigation-rail-item.d.ts +3 -0
  421. package/dist/react/navigation-rail-item.js +6 -0
  422. package/dist/react/navigation-rail.d.ts +4 -0
  423. package/dist/react/navigation-rail.js +7 -0
  424. package/dist/react/progress.d.ts +4 -0
  425. package/dist/react/progress.js +7 -0
  426. package/dist/react/radio.d.ts +3 -0
  427. package/dist/react/radio.js +6 -0
  428. package/dist/react/radios.d.ts +4 -0
  429. package/dist/react/radios.js +7 -0
  430. package/dist/react/search-suggestion.d.ts +3 -0
  431. package/dist/react/search-suggestion.js +6 -0
  432. package/dist/react/search.d.ts +4 -0
  433. package/dist/react/search.js +7 -0
  434. package/dist/react/select-option.d.ts +3 -0
  435. package/dist/react/select-option.js +6 -0
  436. package/dist/react/select.d.ts +6 -0
  437. package/dist/react/select.js +9 -0
  438. package/dist/react/side-sheet.d.ts +4 -0
  439. package/dist/react/side-sheet.js +7 -0
  440. package/dist/react/slider.d.ts +4 -0
  441. package/dist/react/slider.js +7 -0
  442. package/dist/react/snackbar.d.ts +7 -0
  443. package/dist/react/snackbar.js +10 -0
  444. package/dist/react/split-button.d.ts +7 -0
  445. package/dist/react/split-button.js +10 -0
  446. package/dist/react/switch.d.ts +4 -0
  447. package/dist/react/switch.js +7 -0
  448. package/dist/react/tab.d.ts +3 -0
  449. package/dist/react/tab.js +6 -0
  450. package/dist/react/tabs.d.ts +7 -0
  451. package/dist/react/tabs.js +10 -0
  452. package/dist/react/textfield.d.ts +4 -0
  453. package/dist/react/textfield.js +7 -0
  454. package/dist/react/timepicker.d.ts +4 -0
  455. package/dist/react/timepicker.js +7 -0
  456. package/dist/react/toolbar.d.ts +5 -0
  457. package/dist/react/toolbar.js +8 -0
  458. package/dist/react/tooltip.d.ts +4 -0
  459. package/dist/react/tooltip.js +7 -0
  460. package/dist/react/top-app-bar.d.ts +4 -0
  461. package/dist/react/top-app-bar.js +7 -0
  462. package/dist/solid/badge.d.ts +4 -0
  463. package/dist/solid/badge.js +6 -0
  464. package/dist/solid/bottom-app-bar.d.ts +4 -0
  465. package/dist/solid/bottom-app-bar.js +6 -0
  466. package/dist/solid/bottom-sheet.d.ts +4 -0
  467. package/dist/solid/bottom-sheet.js +6 -0
  468. package/dist/solid/button-group-item.d.ts +3 -0
  469. package/dist/solid/button-group-item.js +5 -0
  470. package/dist/solid/button-group.d.ts +7 -0
  471. package/dist/solid/button-group.js +9 -0
  472. package/dist/solid/button.d.ts +5 -0
  473. package/dist/solid/button.js +7 -0
  474. package/dist/solid/card.d.ts +4 -0
  475. package/dist/solid/card.js +6 -0
  476. package/dist/solid/carousel-item.d.ts +3 -0
  477. package/dist/solid/carousel-item.js +5 -0
  478. package/dist/solid/carousel.d.ts +4 -0
  479. package/dist/solid/carousel.js +6 -0
  480. package/dist/solid/checkbox.d.ts +4 -0
  481. package/dist/solid/checkbox.js +6 -0
  482. package/dist/solid/chip.d.ts +3 -0
  483. package/dist/solid/chip.js +5 -0
  484. package/dist/solid/chips.d.ts +4 -0
  485. package/dist/solid/chips.js +6 -0
  486. package/dist/solid/create.d.ts +11 -2
  487. package/dist/solid/create.js +22 -4
  488. package/dist/solid/datepicker.d.ts +4 -0
  489. package/dist/solid/datepicker.js +6 -0
  490. package/dist/solid/dialog.d.ts +4 -0
  491. package/dist/solid/dialog.js +6 -0
  492. package/dist/solid/divider.d.ts +4 -0
  493. package/dist/solid/divider.js +6 -0
  494. package/dist/solid/drawer-item.d.ts +3 -0
  495. package/dist/solid/drawer-item.js +5 -0
  496. package/dist/solid/drawer.d.ts +4 -0
  497. package/dist/solid/drawer.js +6 -0
  498. package/dist/solid/extended-fab.d.ts +4 -0
  499. package/dist/solid/extended-fab.js +6 -0
  500. package/dist/solid/fab-menu-item.d.ts +3 -0
  501. package/dist/solid/fab-menu-item.js +5 -0
  502. package/dist/solid/fab-menu.d.ts +6 -0
  503. package/dist/solid/fab-menu.js +8 -0
  504. package/dist/solid/fab.d.ts +4 -0
  505. package/dist/solid/fab.js +6 -0
  506. package/dist/solid/icon-button.d.ts +4 -0
  507. package/dist/solid/icon-button.js +6 -0
  508. package/dist/solid/index.d.ts +48 -32
  509. package/dist/solid/index.js +48 -32
  510. package/dist/solid/jsx.d.ts +96 -0
  511. package/dist/solid/jsx.js +1 -0
  512. package/dist/solid/list-item.d.ts +3 -0
  513. package/dist/solid/list-item.js +5 -0
  514. package/dist/solid/list.d.ts +4 -0
  515. package/dist/solid/list.js +6 -0
  516. package/dist/solid/loading-indicator.d.ts +4 -0
  517. package/dist/solid/loading-indicator.js +6 -0
  518. package/dist/solid/menu-item.d.ts +3 -0
  519. package/dist/solid/menu-item.js +5 -0
  520. package/dist/solid/menu.d.ts +4 -0
  521. package/dist/solid/menu.js +6 -0
  522. package/dist/solid/navigation-rail-item.d.ts +3 -0
  523. package/dist/solid/navigation-rail-item.js +5 -0
  524. package/dist/solid/navigation-rail.d.ts +4 -0
  525. package/dist/solid/navigation-rail.js +6 -0
  526. package/dist/solid/progress.d.ts +4 -0
  527. package/dist/solid/progress.js +6 -0
  528. package/dist/solid/radio.d.ts +3 -0
  529. package/dist/solid/radio.js +5 -0
  530. package/dist/solid/radios.d.ts +4 -0
  531. package/dist/solid/radios.js +6 -0
  532. package/dist/solid/search-suggestion.d.ts +3 -0
  533. package/dist/solid/search-suggestion.js +5 -0
  534. package/dist/solid/search.d.ts +4 -0
  535. package/dist/solid/search.js +6 -0
  536. package/dist/solid/select-option.d.ts +3 -0
  537. package/dist/solid/select-option.js +5 -0
  538. package/dist/solid/select.d.ts +6 -0
  539. package/dist/solid/select.js +8 -0
  540. package/dist/solid/side-sheet.d.ts +4 -0
  541. package/dist/solid/side-sheet.js +6 -0
  542. package/dist/solid/slider.d.ts +4 -0
  543. package/dist/solid/slider.js +6 -0
  544. package/dist/solid/snackbar.d.ts +7 -0
  545. package/dist/solid/snackbar.js +9 -0
  546. package/dist/solid/split-button.d.ts +7 -0
  547. package/dist/solid/split-button.js +9 -0
  548. package/dist/solid/switch.d.ts +4 -0
  549. package/dist/solid/switch.js +6 -0
  550. package/dist/solid/tab.d.ts +3 -0
  551. package/dist/solid/tab.js +5 -0
  552. package/dist/solid/tabs.d.ts +7 -0
  553. package/dist/solid/tabs.js +9 -0
  554. package/dist/solid/textfield.d.ts +4 -0
  555. package/dist/solid/textfield.js +6 -0
  556. package/dist/solid/timepicker.d.ts +4 -0
  557. package/dist/solid/timepicker.js +6 -0
  558. package/dist/solid/toolbar.d.ts +5 -0
  559. package/dist/solid/toolbar.js +7 -0
  560. package/dist/solid/tooltip.d.ts +4 -0
  561. package/dist/solid/tooltip.js +6 -0
  562. package/dist/solid/top-app-bar.d.ts +4 -0
  563. package/dist/solid/top-app-bar.js +6 -0
  564. package/dist/styles/badge.css +2 -2
  565. package/dist/styles/base.css +2 -2
  566. package/dist/styles/bottom-app-bar.css +2 -2
  567. package/dist/styles/bottom-sheet.css +2 -2
  568. package/dist/styles/button-group.css +2 -2
  569. package/dist/styles/button.css +2 -2
  570. package/dist/styles/card.css +2 -2
  571. package/dist/styles/carousel.css +2 -2
  572. package/dist/styles/checkbox.css +2 -2
  573. package/dist/styles/chips.css +2 -2
  574. package/dist/styles/datepicker.css +2 -2
  575. package/dist/styles/dialog.css +2 -2
  576. package/dist/styles/divider.css +2 -2
  577. package/dist/styles/drawer.css +2 -2
  578. package/dist/styles/extended-fab.css +2 -2
  579. package/dist/styles/fab-menu.css +2 -0
  580. package/dist/styles/fab-menu.d.ts +1 -0
  581. package/dist/styles/fab-menu.js +3 -0
  582. package/dist/styles/fab.css +2 -2
  583. package/dist/styles/icon-button.css +2 -2
  584. package/dist/styles/list.css +2 -2
  585. package/dist/styles/loading-indicator.css +2 -2
  586. package/dist/styles/menu.css +2 -2
  587. package/dist/styles/navigation-rail.css +2 -2
  588. package/dist/styles/progress.css +2 -2
  589. package/dist/styles/radios.css +2 -2
  590. package/dist/styles/search.css +2 -2
  591. package/dist/styles/segmented-button.css +2 -2
  592. package/dist/styles/select.css +2 -2
  593. package/dist/styles/side-sheet.css +2 -2
  594. package/dist/styles/slider.css +2 -2
  595. package/dist/styles/snackbar.css +2 -2
  596. package/dist/styles/split-button.css +2 -2
  597. package/dist/styles/switch.css +2 -2
  598. package/dist/styles/tabs.css +2 -2
  599. package/dist/styles/textfield.css +2 -2
  600. package/dist/styles/timepicker.css +2 -2
  601. package/dist/styles/toolbar.css +2 -0
  602. package/dist/styles/toolbar.d.ts +1 -0
  603. package/dist/styles/toolbar.js +3 -0
  604. package/dist/styles/tooltip.css +2 -2
  605. package/dist/styles/top-app-bar.css +2 -2
  606. package/dist/styles/utilities.css +2 -2
  607. package/dist/styles.css +2 -2
  608. package/dist/svelte/Badge.svelte +7 -2
  609. package/dist/svelte/Badge.svelte.d.ts +2 -2
  610. package/dist/svelte/BottomAppBar.svelte +24 -0
  611. package/dist/svelte/BottomAppBar.svelte.d.ts +5 -0
  612. package/dist/svelte/BottomSheet.svelte +24 -0
  613. package/dist/svelte/BottomSheet.svelte.d.ts +5 -0
  614. package/dist/svelte/Button.svelte +8 -2
  615. package/dist/svelte/Button.svelte.d.ts +2 -2
  616. package/dist/svelte/ButtonGroup.svelte +28 -0
  617. package/dist/svelte/ButtonGroup.svelte.d.ts +5 -0
  618. package/dist/svelte/ButtonGroupItem.svelte +11 -0
  619. package/dist/svelte/ButtonGroupItem.svelte.d.ts +5 -0
  620. package/dist/svelte/Card.svelte +24 -0
  621. package/dist/svelte/Card.svelte.d.ts +5 -0
  622. package/dist/svelte/Carousel.svelte +25 -0
  623. package/dist/svelte/Carousel.svelte.d.ts +5 -0
  624. package/dist/svelte/CarouselItem.svelte +11 -0
  625. package/dist/svelte/CarouselItem.svelte.d.ts +5 -0
  626. package/dist/svelte/Checkbox.svelte +7 -2
  627. package/dist/svelte/Checkbox.svelte.d.ts +2 -2
  628. package/dist/svelte/Chip.svelte +11 -0
  629. package/dist/svelte/Chip.svelte.d.ts +5 -0
  630. package/dist/svelte/Chips.svelte +25 -0
  631. package/dist/svelte/Chips.svelte.d.ts +5 -0
  632. package/dist/svelte/Datepicker.svelte +25 -0
  633. package/dist/svelte/Datepicker.svelte.d.ts +5 -0
  634. package/dist/svelte/Dialog.svelte +24 -0
  635. package/dist/svelte/Dialog.svelte.d.ts +5 -0
  636. package/dist/svelte/Divider.svelte +7 -2
  637. package/dist/svelte/Divider.svelte.d.ts +2 -2
  638. package/dist/svelte/Drawer.svelte +25 -0
  639. package/dist/svelte/Drawer.svelte.d.ts +5 -0
  640. package/dist/svelte/DrawerItem.svelte +11 -0
  641. package/dist/svelte/DrawerItem.svelte.d.ts +5 -0
  642. package/dist/svelte/ExtendedFab.svelte +7 -2
  643. package/dist/svelte/ExtendedFab.svelte.d.ts +2 -2
  644. package/dist/svelte/Fab.svelte +7 -2
  645. package/dist/svelte/Fab.svelte.d.ts +2 -2
  646. package/dist/svelte/FabMenu.svelte +26 -0
  647. package/dist/svelte/FabMenu.svelte.d.ts +5 -0
  648. package/dist/svelte/FabMenuItem.svelte +11 -0
  649. package/dist/svelte/FabMenuItem.svelte.d.ts +5 -0
  650. package/dist/svelte/IconButton.svelte +7 -2
  651. package/dist/svelte/IconButton.svelte.d.ts +2 -2
  652. package/dist/svelte/List.svelte +26 -0
  653. package/dist/svelte/List.svelte.d.ts +5 -0
  654. package/dist/svelte/ListItem.svelte +11 -0
  655. package/dist/svelte/ListItem.svelte.d.ts +5 -0
  656. package/dist/svelte/LoadingIndicator.svelte +7 -2
  657. package/dist/svelte/LoadingIndicator.svelte.d.ts +2 -2
  658. package/dist/svelte/Menu.svelte +25 -0
  659. package/dist/svelte/Menu.svelte.d.ts +5 -0
  660. package/dist/svelte/MenuItem.svelte +11 -0
  661. package/dist/svelte/MenuItem.svelte.d.ts +5 -0
  662. package/dist/svelte/NavigationRail.svelte +25 -0
  663. package/dist/svelte/NavigationRail.svelte.d.ts +5 -0
  664. package/dist/svelte/NavigationRailItem.svelte +11 -0
  665. package/dist/svelte/NavigationRailItem.svelte.d.ts +5 -0
  666. package/dist/svelte/Progress.svelte +7 -2
  667. package/dist/svelte/Progress.svelte.d.ts +2 -2
  668. package/dist/svelte/Radio.svelte +1 -1
  669. package/dist/svelte/Radios.svelte +7 -2
  670. package/dist/svelte/Radios.svelte.d.ts +2 -2
  671. package/dist/svelte/Search.svelte +25 -0
  672. package/dist/svelte/Search.svelte.d.ts +5 -0
  673. package/dist/svelte/SearchSuggestion.svelte +11 -0
  674. package/dist/svelte/SearchSuggestion.svelte.d.ts +5 -0
  675. package/dist/svelte/Select.svelte +27 -0
  676. package/dist/svelte/Select.svelte.d.ts +5 -0
  677. package/dist/svelte/SelectOption.svelte +11 -0
  678. package/dist/svelte/SelectOption.svelte.d.ts +5 -0
  679. package/dist/svelte/SideSheet.svelte +24 -0
  680. package/dist/svelte/SideSheet.svelte.d.ts +5 -0
  681. package/dist/svelte/Slider.svelte +7 -2
  682. package/dist/svelte/Slider.svelte.d.ts +2 -2
  683. package/dist/svelte/Snackbar.svelte +28 -0
  684. package/dist/svelte/Snackbar.svelte.d.ts +5 -0
  685. package/dist/svelte/SplitButton.svelte +27 -0
  686. package/dist/svelte/SplitButton.svelte.d.ts +5 -0
  687. package/dist/svelte/Switch.svelte +7 -2
  688. package/dist/svelte/Switch.svelte.d.ts +2 -2
  689. package/dist/svelte/Tab.svelte +1 -1
  690. package/dist/svelte/Tabs.svelte +10 -2
  691. package/dist/svelte/Tabs.svelte.d.ts +2 -2
  692. package/dist/svelte/Textfield.svelte +7 -2
  693. package/dist/svelte/Textfield.svelte.d.ts +2 -2
  694. package/dist/svelte/Timepicker.svelte +25 -0
  695. package/dist/svelte/Timepicker.svelte.d.ts +5 -0
  696. package/dist/svelte/Toolbar.svelte +25 -0
  697. package/dist/svelte/Toolbar.svelte.d.ts +5 -0
  698. package/dist/svelte/Tooltip.svelte +25 -0
  699. package/dist/svelte/Tooltip.svelte.d.ts +5 -0
  700. package/dist/svelte/TopAppBar.svelte +24 -0
  701. package/dist/svelte/TopAppBar.svelte.d.ts +5 -0
  702. package/dist/svelte/index.d.ts +32 -0
  703. package/dist/svelte/index.js +32 -14
  704. package/dist/svelte/runtime.d.ts +12 -2
  705. package/dist/svelte/runtime.js +11 -2
  706. package/dist/themes/autumn.css +2 -2
  707. package/dist/themes/baseline.css +2 -2
  708. package/dist/themes/brownbeige.css +2 -2
  709. package/dist/themes/browngreen.css +2 -2
  710. package/dist/themes/content.css +2 -0
  711. package/dist/themes/desert.css +2 -2
  712. package/dist/themes/expressive.css +2 -0
  713. package/dist/themes/fidelity.css +2 -0
  714. package/dist/themes/forest.css +2 -2
  715. package/dist/themes/fruit-salad.css +2 -0
  716. package/dist/themes/highcontrast.css +2 -2
  717. package/dist/themes/legacy.css +2 -2
  718. package/dist/themes/material.css +2 -2
  719. package/dist/themes/monochrome.css +2 -0
  720. package/dist/themes/neutral.css +2 -0
  721. package/dist/themes/ocean.css +2 -2
  722. package/dist/themes/rainbow.css +2 -0
  723. package/dist/themes/sageivory.css +2 -2
  724. package/dist/themes/spring.css +2 -2
  725. package/dist/themes/summer.css +2 -2
  726. package/dist/themes/sunset.css +2 -2
  727. package/dist/themes/tealcaramel.css +2 -2
  728. package/dist/themes/vibrant.css +2 -0
  729. package/dist/themes/winter.css +2 -2
  730. package/dist/vue/badge.d.ts +4 -0
  731. package/dist/vue/badge.js +6 -0
  732. package/dist/vue/bottom-app-bar.d.ts +4 -0
  733. package/dist/vue/bottom-app-bar.js +6 -0
  734. package/dist/vue/bottom-sheet.d.ts +4 -0
  735. package/dist/vue/bottom-sheet.js +6 -0
  736. package/dist/vue/button-group-item.d.ts +3 -0
  737. package/dist/vue/button-group-item.js +5 -0
  738. package/dist/vue/button-group.d.ts +7 -0
  739. package/dist/vue/button-group.js +9 -0
  740. package/dist/vue/button.d.ts +5 -0
  741. package/dist/vue/button.js +7 -0
  742. package/dist/vue/card.d.ts +4 -0
  743. package/dist/vue/card.js +6 -0
  744. package/dist/vue/carousel-item.d.ts +3 -0
  745. package/dist/vue/carousel-item.js +5 -0
  746. package/dist/vue/carousel.d.ts +4 -0
  747. package/dist/vue/carousel.js +6 -0
  748. package/dist/vue/checkbox.d.ts +4 -0
  749. package/dist/vue/checkbox.js +6 -0
  750. package/dist/vue/chip.d.ts +3 -0
  751. package/dist/vue/chip.js +5 -0
  752. package/dist/vue/chips.d.ts +4 -0
  753. package/dist/vue/chips.js +6 -0
  754. package/dist/vue/create.d.ts +9 -3
  755. package/dist/vue/create.js +15 -2
  756. package/dist/vue/datepicker.d.ts +4 -0
  757. package/dist/vue/datepicker.js +6 -0
  758. package/dist/vue/dialog.d.ts +4 -0
  759. package/dist/vue/dialog.js +6 -0
  760. package/dist/vue/divider.d.ts +4 -0
  761. package/dist/vue/divider.js +6 -0
  762. package/dist/vue/drawer-item.d.ts +3 -0
  763. package/dist/vue/drawer-item.js +5 -0
  764. package/dist/vue/drawer.d.ts +4 -0
  765. package/dist/vue/drawer.js +6 -0
  766. package/dist/vue/extended-fab.d.ts +4 -0
  767. package/dist/vue/extended-fab.js +6 -0
  768. package/dist/vue/fab-menu-item.d.ts +3 -0
  769. package/dist/vue/fab-menu-item.js +5 -0
  770. package/dist/vue/fab-menu.d.ts +6 -0
  771. package/dist/vue/fab-menu.js +8 -0
  772. package/dist/vue/fab.d.ts +4 -0
  773. package/dist/vue/fab.js +6 -0
  774. package/dist/vue/icon-button.d.ts +4 -0
  775. package/dist/vue/icon-button.js +6 -0
  776. package/dist/vue/index.d.ts +49 -33
  777. package/dist/vue/index.js +48 -32
  778. package/dist/vue/list-item.d.ts +3 -0
  779. package/dist/vue/list-item.js +5 -0
  780. package/dist/vue/list.d.ts +4 -0
  781. package/dist/vue/list.js +6 -0
  782. package/dist/vue/loading-indicator.d.ts +4 -0
  783. package/dist/vue/loading-indicator.js +6 -0
  784. package/dist/vue/menu-item.d.ts +3 -0
  785. package/dist/vue/menu-item.js +5 -0
  786. package/dist/vue/menu.d.ts +4 -0
  787. package/dist/vue/menu.js +6 -0
  788. package/dist/vue/navigation-rail-item.d.ts +3 -0
  789. package/dist/vue/navigation-rail-item.js +5 -0
  790. package/dist/vue/navigation-rail.d.ts +4 -0
  791. package/dist/vue/navigation-rail.js +6 -0
  792. package/dist/vue/progress.d.ts +4 -0
  793. package/dist/vue/progress.js +6 -0
  794. package/dist/vue/radio.d.ts +3 -0
  795. package/dist/vue/radio.js +5 -0
  796. package/dist/vue/radios.d.ts +4 -0
  797. package/dist/vue/radios.js +6 -0
  798. package/dist/vue/search-suggestion.d.ts +3 -0
  799. package/dist/vue/search-suggestion.js +5 -0
  800. package/dist/vue/search.d.ts +4 -0
  801. package/dist/vue/search.js +6 -0
  802. package/dist/vue/select-option.d.ts +3 -0
  803. package/dist/vue/select-option.js +5 -0
  804. package/dist/vue/select.d.ts +6 -0
  805. package/dist/vue/select.js +8 -0
  806. package/dist/vue/side-sheet.d.ts +4 -0
  807. package/dist/vue/side-sheet.js +6 -0
  808. package/dist/vue/slider.d.ts +4 -0
  809. package/dist/vue/slider.js +6 -0
  810. package/dist/vue/snackbar.d.ts +7 -0
  811. package/dist/vue/snackbar.js +9 -0
  812. package/dist/vue/split-button.d.ts +7 -0
  813. package/dist/vue/split-button.js +9 -0
  814. package/dist/vue/switch.d.ts +4 -0
  815. package/dist/vue/switch.js +6 -0
  816. package/dist/vue/tab.d.ts +3 -0
  817. package/dist/vue/tab.js +5 -0
  818. package/dist/vue/tabs.d.ts +7 -0
  819. package/dist/vue/tabs.js +9 -0
  820. package/dist/vue/textfield.d.ts +4 -0
  821. package/dist/vue/textfield.js +6 -0
  822. package/dist/vue/timepicker.d.ts +4 -0
  823. package/dist/vue/timepicker.js +6 -0
  824. package/dist/vue/toolbar.d.ts +5 -0
  825. package/dist/vue/toolbar.js +7 -0
  826. package/dist/vue/tooltip.d.ts +4 -0
  827. package/dist/vue/tooltip.js +6 -0
  828. package/dist/vue/top-app-bar.d.ts +4 -0
  829. package/dist/vue/top-app-bar.js +6 -0
  830. package/package.json +119 -20
  831. package/src/styles/abstract/_functions.scss +13 -1
  832. package/src/styles/abstract/_mixins.scss +16 -1
  833. package/src/styles/abstract/_theme.scss +4 -88
  834. package/src/styles/abstract/_variables.scss +20 -1
  835. package/src/styles/base/_tokens.scss +2 -13
  836. package/src/styles/base/_typography.scss +14 -70
  837. package/src/styles/components/_badge.scss +2 -2
  838. package/src/styles/components/_bottom-app-bar.scss +0 -4
  839. package/src/styles/components/_bottom-sheet.scss +68 -8
  840. package/src/styles/components/_button-group.scss +5 -2
  841. package/src/styles/components/_button.scss +29 -43
  842. package/src/styles/components/_card.scss +0 -2
  843. package/src/styles/components/_carousel.scss +2 -1
  844. package/src/styles/components/_datepicker.scss +4 -0
  845. package/src/styles/components/_dialog.scss +52 -0
  846. package/src/styles/components/_divider.scss +1 -1
  847. package/src/styles/components/_drawer.scss +53 -11
  848. package/src/styles/components/_fab-menu.scss +228 -0
  849. package/src/styles/components/_icon-button.scss +18 -14
  850. package/src/styles/components/_list.scss +3 -2
  851. package/src/styles/components/_menu.scss +22 -2
  852. package/src/styles/components/_navigation-rail.scss +5 -4
  853. package/src/styles/components/_search.scss +279 -273
  854. package/src/styles/components/_select.scss +9 -89
  855. package/src/styles/components/_side-sheet.scss +48 -4
  856. package/src/styles/components/_slider.scss +2 -2
  857. package/src/styles/components/_snackbar.scss +12 -0
  858. package/src/styles/components/_split-button.scss +5 -5
  859. package/src/styles/components/_switch.scss +1 -1
  860. package/src/styles/components/_textfield.scss +144 -93
  861. package/src/styles/components/_timepicker.scss +116 -139
  862. package/src/styles/components/_toolbar.scss +203 -0
  863. package/src/styles/components/_tooltip.scss +31 -12
  864. package/src/styles/elements/_badge.scss +12 -0
  865. package/src/styles/elements/_bottom-app-bar.scss +27 -0
  866. package/src/styles/elements/_bottom-sheet.scss +6 -0
  867. package/src/styles/elements/_button-group.scss +25 -0
  868. package/src/styles/elements/_button.scss +78 -0
  869. package/src/styles/elements/_card.scss +57 -0
  870. package/src/styles/elements/_carousel.scss +12 -0
  871. package/src/styles/elements/_checkbox.scss +38 -0
  872. package/src/styles/elements/_chips.scss +33 -0
  873. package/src/styles/elements/_config.scss +48 -0
  874. package/src/styles/elements/_datepicker.scss +31 -0
  875. package/src/styles/elements/_dialog.scss +6 -0
  876. package/src/styles/elements/_divider.scss +19 -0
  877. package/src/styles/elements/_drawer.scss +23 -0
  878. package/src/styles/elements/_extended-fab.scss +57 -0
  879. package/src/styles/elements/_fab-menu.scss +43 -0
  880. package/src/styles/elements/_fab.scss +33 -0
  881. package/src/styles/elements/_field.scss +111 -0
  882. package/src/styles/elements/_icon-button.scss +55 -0
  883. package/src/styles/elements/_index.scss +41 -0
  884. package/src/styles/elements/_list.scss +34 -0
  885. package/src/styles/elements/_loading-indicator.scss +13 -0
  886. package/src/styles/elements/_menu.scss +6 -0
  887. package/src/styles/elements/_navigation-rail.scss +24 -0
  888. package/src/styles/elements/_progress.scss +24 -0
  889. package/src/styles/elements/_radios.scss +23 -0
  890. package/src/styles/elements/_search.scss +36 -0
  891. package/src/styles/elements/_select.scss +15 -0
  892. package/src/styles/elements/_side-sheet.scss +6 -0
  893. package/src/styles/elements/_slider.scss +10 -0
  894. package/src/styles/elements/_snackbar.scss +6 -0
  895. package/src/styles/elements/_split-button.scss +53 -0
  896. package/src/styles/elements/_switch.scss +51 -0
  897. package/src/styles/elements/_tabs.scss +22 -0
  898. package/src/styles/elements/_textfield.scss +9 -0
  899. package/src/styles/elements/_timepicker.scss +6 -0
  900. package/src/styles/elements/_toolbar.scss +47 -0
  901. package/src/styles/elements/_tooltip.scss +6 -0
  902. package/src/styles/elements/_top-app-bar.scss +57 -0
  903. package/src/styles/main.scss +2 -0
  904. package/src/styles/themes/_autumn.scss +18 -17
  905. package/src/styles/themes/_base-theme.scss +29 -39
  906. package/src/styles/themes/_baseline.scss +58 -83
  907. package/src/styles/themes/_brownbeige.scss +95 -123
  908. package/src/styles/themes/_browngreen.scss +1 -49
  909. package/src/styles/themes/_content.scss +108 -0
  910. package/src/styles/themes/_desert.scss +94 -80
  911. package/src/styles/themes/_expressive.scss +108 -0
  912. package/src/styles/themes/_fidelity.scss +108 -0
  913. package/src/styles/themes/_forest.scss +19 -3
  914. package/src/styles/themes/_fruit-salad.scss +108 -0
  915. package/src/styles/themes/_highcontrast.scss +91 -149
  916. package/src/styles/themes/_legacy.scss +1 -2
  917. package/src/styles/themes/_material.scss +1 -50
  918. package/src/styles/themes/_monochrome.scss +108 -0
  919. package/src/styles/themes/_neutral.scss +108 -0
  920. package/src/styles/themes/_ocean.scss +19 -3
  921. package/src/styles/themes/_rainbow.scss +108 -0
  922. package/src/styles/themes/_sageivory.scss +95 -125
  923. package/src/styles/themes/_spring.scss +19 -3
  924. package/src/styles/themes/_summer.scss +95 -87
  925. package/src/styles/themes/_sunset.scss +19 -3
  926. package/src/styles/themes/_tealcaramel.scss +94 -124
  927. package/src/styles/themes/_vibrant.scss +108 -0
  928. package/src/styles/themes/_winter.scss +1 -3
  929. package/src/styles/themes/_bluekhaki.scss +0 -136
  930. package/src/styles/themes/_greenbeige.scss +0 -138
package/README.md CHANGED
@@ -1,15 +1,70 @@
1
1
  # mtrl
2
2
 
3
- Material Design 3 components for the web, written in TypeScript with zero dependencies.
3
+ Material Design 3 components for the web: as plain JavaScript, as web components, and as React, Vue, Svelte and Solid components. Written in TypeScript, with zero dependencies.
4
4
 
5
- mtrl implements the M3 expressive update: component sizes, shapes, colours and spring motion follow the Material 3 tokens. Each component is a plain function that returns a DOM element and a small API, so mtrl works with any framework or none. The documentation site, [mtrl.app](https://mtrl.app), shows every component with live examples.
5
+ mtrl implements the M3 Expressive update: component sizes, shapes, colours and spring motion follow the Material 3 tokens. One implementation serves every way of using it, so a button looks and behaves the same in each. The documentation site, [md3.io](https://md3.io), has a live playground and examples in every framework for each component.
6
6
 
7
- ## Quick start
7
+ ## Install
8
8
 
9
9
  ```bash
10
10
  npm install mtrl
11
11
  ```
12
12
 
13
+ React, Vue, Svelte and Solid are optional peer dependencies: mtrl uses the one your app has and installs none of them.
14
+
15
+ ## Use it your way
16
+
17
+ | Way | Import from | Good for |
18
+ |-----|-------------|----------|
19
+ | Web components | `mtrl/elements` | Plain HTML, server templates, Angular, any framework |
20
+ | React | `mtrl/react` | React 18 and 19, Next.js |
21
+ | Vue | `mtrl/vue` | Vue 3, Nuxt |
22
+ | Svelte | `mtrl/svelte` | Svelte 5, SvelteKit |
23
+ | Solid | `mtrl/solid` | SolidJS, SolidStart |
24
+ | Vanilla factories | `mtrl` | The smallest bundles and full control |
25
+
26
+ Every app imports the base stylesheet once: the theme, the tokens and the ripple.
27
+
28
+ ```typescript
29
+ import 'mtrl/styles/base';
30
+ ```
31
+
32
+ **Web components**: register them once, then write HTML.
33
+
34
+ ```html
35
+ <script type="module">
36
+ import 'mtrl/styles/base';
37
+ import 'mtrl/elements/css';
38
+ import { defineAll } from 'mtrl/elements';
39
+ defineAll();
40
+ </script>
41
+
42
+ <form>
43
+ <m-textfield name="email" type="email" label="Email" required></m-textfield>
44
+ <m-switch name="news" checked>Newsletter</m-switch>
45
+ <m-button type="submit">Sign up</m-button>
46
+ </form>
47
+ ```
48
+
49
+ **React** (Vue, Svelte and Solid work the same way, see [below](#react-vue-svelte-and-solid)):
50
+
51
+ ```tsx
52
+ import 'mtrl/styles/base';
53
+ import { Button, Switch, Textfield } from 'mtrl/react';
54
+
55
+ export function Signup() {
56
+ return (
57
+ <form>
58
+ <Textfield name="email" type="email" label="Email" required />
59
+ <Switch name="news" defaultChecked>Newsletter</Switch>
60
+ <Button type="submit">Sign up</Button>
61
+ </form>
62
+ );
63
+ }
64
+ ```
65
+
66
+ **Vanilla**: each component is a function that returns a DOM element and a small API.
67
+
13
68
  ```typescript
14
69
  import 'mtrl/styles';
15
70
  import { createButton, createTextfield } from 'mtrl';
@@ -22,10 +77,7 @@ name.on('input', ({ value }: { value: string }) => {
22
77
  if (value.trim()) save.disabled.enable();
23
78
  else save.disabled.disable();
24
79
  });
25
-
26
- save.on('click', () => {
27
- console.log('Saved', name.getValue());
28
- });
80
+ save.on('click', () => console.log('Saved', name.getValue()));
29
81
 
30
82
  document.body.append(name.element, save.element);
31
83
 
@@ -34,24 +86,25 @@ name.destroy();
34
86
  save.destroy();
35
87
  ```
36
88
 
37
- `mtrl/styles` loads every component and theme. For a smaller bundle, import only what you use (see [Styles](#styles)).
89
+ The factories are the fastest way to render hundreds of components at once, such as a long editable table; the elements style a shadow root each. `mtrl/styles` loads every component's styles; for a smaller bundle, import only what you use (see [Styles](#styles)).
38
90
 
39
91
  ## Components
40
92
 
41
- Every component is created by a `create*` function exported from `mtrl`, and renders with `mtrl-` prefixed classes.
93
+ Every component comes three ways: a factory (`createButton`), an element (`<m-button>`) and a framework component (`Button`; `MButton` in Vue).
42
94
 
43
- - **Actions:** `createButton`, `createButtonGroup`, `createSplitButton`, `createIconButton`, `createFab`, `createExtendedFab`
44
- - **Selection and input:** `createCheckbox`, `createChips` and `createChip`, `createRadios`, `createSwitch`, `createSlider`, `createSelect`, `createTextfield`, `createSearch`, `createDatePicker`, `createTimePicker`
45
- - **Navigation:** `createNavigationRail`, `createDrawer`, `createTabs` and `createTab`, `createTopAppBar`, `createBottomAppBar`, `createMenu`, `createNavigation`, `createNavigationSystem`
46
- - **Containment:** `createCard` with `createCardHeader`, `createCardContent`, `createCardMedia` and `createCardActions`, `createCarousel`, `createList`, `createDivider`, `createDialog`, `createBottomSheet`, `createSideSheet`
47
- - **Communication:** `createSnackbar`, `createTooltip`, `createBadge`, `createProgress`, `createLoadingIndicator`
48
- - **Deprecated:** `createSegmentedButton` and `createSegment`, replaced by `createButtonGroup` with `kind: 'connected'`
95
+ | Group | Components |
96
+ |-------|------------|
97
+ | Actions | Button, Icon button, Button group, Split button, FAB, Extended FAB, FAB menu, Toolbar |
98
+ | Selection and input | Checkbox, Switch, Radio buttons, Chips, Slider, Text field, Select, Search, Date picker, Time picker |
99
+ | Navigation | Navigation rail, Drawer, Tabs, Menu, Top app bar, Bottom app bar |
100
+ | Containment | Card, Carousel, List, Divider, Dialog, Bottom sheet, Side sheet |
101
+ | Communication | Badge, Progress, Loading indicator, Snackbar, Tooltip |
49
102
 
50
- Virtual scrolling and data-driven lists live in [mtrl-addons](https://github.com/floor/mtrl-addons).
103
+ The factories are exported from `mtrl`: `createButton`, `createIconButton`, `createButtonGroup`, `createSplitButton`, `createFab`, `createExtendedFab`, `createFabMenu`, `createToolbar`, `createCheckbox`, `createSwitch`, `createRadios`, `createChips` (with `createAssistChip`, `createFilterChip`, `createInputChip` and `createSuggestionChip`), `createSlider`, `createTextfield`, `createSelect`, `createSearch`, `createDatePicker`, `createTimePicker`, `createNavigationRail`, `createDrawer`, `createTabs` and `createTab`, `createMenu`, `createTopAppBar`, `createBottomAppBar`, `createCard` (with `createCardHeader`, `createCardContent`, `createCardMedia` and `createCardActions`), `createCarousel`, `createList`, `createDivider`, `createDialog`, `createBottomSheet`, `createSideSheet`, `createBadge`, `createProgress`, `createLoadingIndicator`, `createSnackbar` and `createTooltip`. Deprecated: `createSegmentedButton` and `createSegment`, replaced by `createButtonGroup` with `kind: 'connected'`.
51
104
 
52
105
  ## Styles
53
106
 
54
- Import the full stylesheet once:
107
+ The web components and the framework components carry their own styles in their shadow roots; they need only the base stylesheet, `mtrl/styles/base`, for the theme and its tokens. The factories render in the page, so they use the page's stylesheets. Import the full stylesheet once:
55
108
 
56
109
  ```typescript
57
110
  import 'mtrl/styles';
@@ -69,7 +122,7 @@ import 'mtrl/themes/ocean';
69
122
  import 'mtrl/styles/utilities';
70
123
  ```
71
124
 
72
- The base includes the baseline theme in light and dark, the tokens, a reset, typography and the ripple. Each selective entry imports what it depends on (the select brings the text field and the menu), so use a CSS-capable bundler to resolve and deduplicate them. Choose either the full stylesheet or selective imports, not both. The date picker has no selective entry yet; it is in the full stylesheet.
125
+ The base includes the baseline theme in light and dark, the tokens, a reset, typography and the ripple. Each selective entry imports what it depends on (the select brings the text field and the menu), so use a CSS-capable bundler to resolve and deduplicate them. Choose either the full stylesheet or selective imports, not both.
73
126
 
74
127
  Library styles sit in ordered `mtrl` cascade layers, so unlayered application CSS overrides them without specificity battles.
75
128
 
@@ -86,7 +139,11 @@ document.documentElement.dataset.theme = 'ocean';
86
139
  document.documentElement.dataset.themeMode = 'dark';
87
140
  ```
88
141
 
89
- Available themes: `baseline`, `ocean`, `desert`, `forest`, `sunset`, `spring`, `summer`, `autumn`, `winter`, `brownbeige`, `browngreen`, `sageivory`, `tealcaramel`, `material`, `legacy` and `highcontrast`. With selective styles, import the theme's entry, for example `mtrl/themes/ocean`.
142
+ Available themes: `baseline`, `ocean`, `desert`, `forest`, `sunset`, `spring`, `summer`, `autumn`, `brownbeige`, `sageivory`, `tealcaramel` and `highcontrast`. With selective styles, import the theme's entry, for example `mtrl/themes/ocean`.
143
+
144
+ M3's scheme variants, generated from the baseline seed, ship as their own entries only (not in the full stylesheet): `neutral`, `vibrant`, `expressive`, `fidelity`, `content`, `monochrome`, `rainbow` and `fruit-salad`, for example `mtrl/themes/vibrant`. `schemeToTokens` (`mtrl/core/theme`) turns any M3 scheme's role colours into these tokens.
145
+
146
+ Deprecated, removed in 1.0: `material` (use `baseline`), `winter` (use `ocean`), `browngreen` (use `brownbeige`) and `legacy`.
90
147
 
91
148
  ### Custom properties
92
149
 
@@ -99,7 +156,7 @@ Components read the theme's colour roles, so overriding a role restyles every co
99
156
  }
100
157
  ```
101
158
 
102
- The type scale and shape scale are custom properties too (`--mtrl-sys-typescale-*`, `--mtrl-sys-shape-*`). Component hooks follow one convention, `--mtrl-<component>-<name>`:
159
+ The type scale, the typefaces and the corner scale are custom properties too (`--mtrl-sys-typescale-*`, `--mtrl-ref-typeface-brand` and `--mtrl-ref-typeface-plain`, `--mtrl-sys-shape-corner-*`): setting a typeface or a corner step on `:root` restyles every component that uses it. Component hooks follow one convention, `--mtrl-<component>-<name>`:
103
160
 
104
161
  ```css
105
162
  .brand-slider {
@@ -108,6 +165,44 @@ The type scale and shape scale are custom properties too (`--mtrl-sys-typescale-
108
165
  }
109
166
  ```
110
167
 
168
+ ## Web components
169
+
170
+ Overlays open in the browser's top layer (`showModal()` or `popover`) from inside their own shadow root, so they keep their styles, trap focus and make the page inert where M3 says so. Form controls are form-associated: `name`, the form value, reset, validation, `<label for>` and back-navigation restore work as on native controls.
171
+
172
+ Declaration children describe a component's items, as native `<select>` and `<option>` do:
173
+
174
+ ```html
175
+ <m-tabs value="songs">
176
+ <m-tab value="songs">Songs</m-tab>
177
+ <m-tab value="albums">Albums</m-tab>
178
+ </m-tabs>
179
+ ```
180
+
181
+ The page still loads mtrl's base styles and a theme (see [Styles](#styles)); the elements render in shadow DOM and pick up the theme's tokens. Attributes are defaults and properties the live state, as on native controls: a `checked` or `value` attribute sets the state until the user or a script changes it, and `form.reset()` goes back to it. Form controls take part in forms (their host's `name`), reset, validation and back-navigation restore.
182
+
183
+ A server-rendered page sends each element as its tag and light DOM; the element takes its real look once its script defines it. So that nothing moves meanwhile, put the pre-upgrade stylesheet in `<head>`: it gives every element not defined yet the box it will have (and its label the final type style), hides what it declares (`<m-tab>`, `<m-menu-item>`, …) and overlays. Its rules match only `:not(:defined)`, in the `mtrl.preupgrade` cascade layer.
184
+
185
+ ```html
186
+ <link rel="stylesheet" href="/node_modules/mtrl/dist/elements/preupgrade.css">
187
+ ```
188
+
189
+ With another tag prefix, `preupgradeStyles('x')` from `mtrl/elements/preupgrade` returns the same stylesheet for `<x-*>`, to inline on the server. The CSS modules (`mtrl/elements/css`) also apply these rules until the elements are defined, for the default prefix and the one given to `configure()` or `define()`.
190
+
191
+ ## React, Vue, Svelte and Solid
192
+
193
+ The framework components render the elements, so everything above holds: forms, the top layer, the styling. `mtrl/react`, `mtrl/vue`, `mtrl/svelte` and `mtrl/solid` load the elements' CSS and register each element the first time it mounts.
194
+
195
+ | Framework | Import | Two-way binding |
196
+ |-----------|--------|-----------------|
197
+ | React 18 and 19 | `import { Switch } from 'mtrl/react'` | `checked` + `onChange`, or `defaultChecked` |
198
+ | Vue 3 | `import { MSwitch } from 'mtrl/vue'` | `v-model` |
199
+ | Svelte 5 | `import { Switch } from 'mtrl/svelte'` | `bind:checked` |
200
+ | Solid | `import { Switch } from 'mtrl/solid'` | `checked` + `onChange` |
201
+
202
+ Each framework is an optional peer dependency; mtrl installs none of them. All adapters render on the server and hydrate. Angular apps use the elements directly, with `CUSTOM_ELEMENTS_SCHEMA`.
203
+
204
+ Each framework has a guide on [md3.io](https://md3.io/docs/): props and events, controlled and uncontrolled state, named slots, refs and server rendering.
205
+
111
206
  ## Imports and tree-shaking
112
207
 
113
208
  mtrl publishes ESM with type declarations, so bundlers drop unused exports and split dynamic imports. CommonJS remains available through `require('mtrl')`.
@@ -132,61 +227,7 @@ const button = createButton({
132
227
  });
133
228
  ```
134
229
 
135
- Button progress and card actions load on demand; enable code splitting in your build to keep them out of the initial chunk.
136
-
137
- ## Web components and frameworks (experimental)
138
-
139
- From the 0.10.0 prereleases (`npm install mtrl@next`), components also ship as custom elements, with thin adapters for React, Vue, Svelte and Solid. The API may still change.
140
-
141
- | Element | Framework component (Vue: `M` prefix, e.g. `MTextfield`) | Kind |
142
- |---------|---------------------|------|
143
- | `<m-button>` | `Button` | action, submits or resets its form |
144
- | `<m-icon-button>` | `IconButton` | action or toggle (`selected`) |
145
- | `<m-fab>`, `<m-extended-fab>` | `Fab`, `ExtendedFab` | action |
146
- | `<m-checkbox>` | `Checkbox` | form control (`checked`, `indeterminate`) |
147
- | `<m-switch>` | `Switch` | form control (`checked`) |
148
- | `<m-radios>` with `<m-radio>` | `Radios`, `Radio` | form control (`value`) |
149
- | `<m-slider>` | `Slider` | form control (`value`, `secondValue` with `range`) |
150
- | `<m-textfield>` | `Textfield` | form control (`value`) |
151
- | `<m-tabs>` with `<m-tab>` | `Tabs`, `Tab` | selection (`value`) |
152
- | `<m-progress>`, `<m-loading-indicator>` | `Progress`, `LoadingIndicator` | indicator |
153
- | `<m-badge>`, `<m-divider>` | `Badge`, `Divider` | display |
154
-
155
- More components follow through 0.10.x; the others are available as factories today.
156
-
157
- ```html
158
- <script type="module">
159
- import 'mtrl/elements/css'; // the elements' styles
160
- import { defineAll } from 'mtrl/elements';
161
- defineAll(); // registers every element (<m-button>, <m-switch>, …)
162
- </script>
163
-
164
- <form>
165
- <m-textfield name="email" type="email" label="Email" required></m-textfield>
166
- <m-radios name="plan" value="free" aria-label="Plan">
167
- <m-radio value="free">Free</m-radio>
168
- <m-radio value="pro">Pro</m-radio>
169
- </m-radios>
170
- <m-switch name="news" checked>Newsletter</m-switch>
171
- <m-button type="submit">Sign up</m-button>
172
- </form>
173
-
174
- <m-tabs value="songs">
175
- <m-tab value="songs">Songs</m-tab>
176
- <m-tab value="albums">Albums</m-tab>
177
- </m-tabs>
178
- ```
179
-
180
- The page still loads mtrl's base styles and a theme (see [Styles](#styles)); the elements render in shadow DOM and pick up the theme's tokens. Attributes are defaults and properties the live state, as on native controls: a `checked` or `value` attribute sets the state until the user or a script changes it, and `form.reset()` goes back to it. Form controls take part in forms (their host's `name`), reset, validation and back-navigation restore.
181
-
182
- | Framework | Import | Two-way binding |
183
- |-----------|--------|-----------------|
184
- | React 18 and 19 | `import { Switch } from 'mtrl/react'` | `checked` + `onChange`, or `defaultChecked` |
185
- | Vue 3 | `import { MSwitch } from 'mtrl/vue'` | `v-model` |
186
- | Svelte 5 | `import { Switch } from 'mtrl/svelte'` | `bind:checked` |
187
- | Solid | `import { Switch } from 'mtrl/solid'` | `checked` + `onChange` |
188
-
189
- Each framework is an optional peer dependency; mtrl installs none of them. All adapters render on the server and hydrate. Angular apps use the elements directly, with `CUSTOM_ELEMENTS_SCHEMA`.
230
+ Some parts load on demand: a button's progress indicator, a card's action buttons, a menu's submenus and the FAB menu's desktop menu. Enable code splitting in your build to keep them out of the initial chunk.
190
231
 
191
232
  ## Building your own components
192
233
 
@@ -194,17 +235,8 @@ Components are composed from small features with `pipe`. The same building block
194
235
 
195
236
  ```typescript
196
237
  import { pipe, createBase, withEvents, withElement } from 'mtrl/core/compose';
197
- import type { ElementComponent } from 'mtrl/core/compose';
198
-
199
- interface NoteConfig {
200
- text?: string;
201
- }
202
238
 
203
- interface NoteComponent extends ElementComponent {
204
- setText: (text: string) => NoteComponent;
205
- }
206
-
207
- const createNote = (config: NoteConfig): NoteComponent =>
239
+ const createNote = (config: { text?: string } = {}) =>
208
240
  pipe(
209
241
  createBase,
210
242
  withEvents(),
@@ -213,10 +245,16 @@ const createNote = (config: NoteConfig): NoteComponent =>
213
245
  ...component,
214
246
  setText(text: string) {
215
247
  component.element.textContent = text;
216
- return this;
217
248
  },
218
249
  })
219
250
  )(config);
251
+
252
+ // The component's type is what the pipe builds
253
+ type NoteComponent = ReturnType<typeof createNote>;
254
+
255
+ const note: NoteComponent = createNote();
256
+ note.setText('Saved');
257
+ document.body.append(note.element);
220
258
  ```
221
259
 
222
260
  The element gets the `mtrl-note` class, `withEvents` adds `on`, `off` and `emit`, and `destroy()` removes the element. Add `withLifecycle()` from `mtrl/core/compose/features` when features need to register cleanup.
@@ -241,6 +279,10 @@ configureHTML({ sanitize: (html) => policy.createHTML(html) });
241
279
 
242
280
  The policy sees every string, the library's own icons included; a `TrustedHTML` value passed as an icon or content skips it. With no policy set, markup is written as it is. Text options (`text`, a card's `text`) never go through `innerHTML`.
243
281
 
282
+ ## Upgrading from 0.9
283
+
284
+ 0.10.0 adds the elements and framework components; for factory users, most apps need nothing. The changes to check are listed in the [0.10.0 changelog's migration section](CHANGELOG.md#migrating-from-09x): setters no longer emit `change`, the time picker's events pass `{ value }`, the `--mtrl-sys-color-*-rgb` properties are gone, disabled non-form roots use `aria-disabled`, cards are `article`s, and the text field's DOM gained a `__field` wrapper.
285
+
244
286
  ## Upgrading from 0.7
245
287
 
246
288
  0.8.0 aligns the components with Material 3 expressive, and some of that changes the API or the styles:
@@ -256,11 +298,11 @@ The full list, with every renamed property, is in the [0.8.0 changelog](CHANGELO
256
298
 
257
299
  ## Browser support
258
300
 
259
- Current Chrome, Edge, Firefox and Safari. The spring motion uses CSS `linear()` easing (Safari 17.2 or later); older browsers render every component but skip those transitions.
301
+ Current Chrome, Edge, Firefox and Safari. The spring motion uses CSS `linear()` easing (Safari 17.2 or later); older browsers render every component but skip those transitions. The elements use form-associated custom elements and the top layer (`popover` and `<dialog>`), both available in every current browser.
260
302
 
261
303
  ## Contributing
262
304
 
263
- Contributions are welcome. [CONTRIBUTING.md](CONTRIBUTING.md) covers the development setup, conventions and the distribution checks; [TESTING.md](TESTING.md) covers the test suite.
305
+ Contributions are welcome. [CONTRIBUTING.md](.github/CONTRIBUTING.md) covers the development setup, conventions and the distribution checks.
264
306
 
265
307
  ## License
266
308
 
package/dist/README.md CHANGED
@@ -1,15 +1,70 @@
1
1
  # mtrl
2
2
 
3
- Material Design 3 components for the web, written in TypeScript with zero dependencies.
3
+ Material Design 3 components for the web: as plain JavaScript, as web components, and as React, Vue, Svelte and Solid components. Written in TypeScript, with zero dependencies.
4
4
 
5
- mtrl implements the M3 expressive update: component sizes, shapes, colours and spring motion follow the Material 3 tokens. Each component is a plain function that returns a DOM element and a small API, so mtrl works with any framework or none. The documentation site, [mtrl.app](https://mtrl.app), shows every component with live examples.
5
+ mtrl implements the M3 Expressive update: component sizes, shapes, colours and spring motion follow the Material 3 tokens. One implementation serves every way of using it, so a button looks and behaves the same in each. The documentation site, [md3.io](https://md3.io), has a live playground and examples in every framework for each component.
6
6
 
7
- ## Quick start
7
+ ## Install
8
8
 
9
9
  ```bash
10
10
  npm install mtrl
11
11
  ```
12
12
 
13
+ React, Vue, Svelte and Solid are optional peer dependencies: mtrl uses the one your app has and installs none of them.
14
+
15
+ ## Use it your way
16
+
17
+ | Way | Import from | Good for |
18
+ |-----|-------------|----------|
19
+ | Web components | `mtrl/elements` | Plain HTML, server templates, Angular, any framework |
20
+ | React | `mtrl/react` | React 18 and 19, Next.js |
21
+ | Vue | `mtrl/vue` | Vue 3, Nuxt |
22
+ | Svelte | `mtrl/svelte` | Svelte 5, SvelteKit |
23
+ | Solid | `mtrl/solid` | SolidJS, SolidStart |
24
+ | Vanilla factories | `mtrl` | The smallest bundles and full control |
25
+
26
+ Every app imports the base stylesheet once: the theme, the tokens and the ripple.
27
+
28
+ ```typescript
29
+ import 'mtrl/styles/base';
30
+ ```
31
+
32
+ **Web components**: register them once, then write HTML.
33
+
34
+ ```html
35
+ <script type="module">
36
+ import 'mtrl/styles/base';
37
+ import 'mtrl/elements/css';
38
+ import { defineAll } from 'mtrl/elements';
39
+ defineAll();
40
+ </script>
41
+
42
+ <form>
43
+ <m-textfield name="email" type="email" label="Email" required></m-textfield>
44
+ <m-switch name="news" checked>Newsletter</m-switch>
45
+ <m-button type="submit">Sign up</m-button>
46
+ </form>
47
+ ```
48
+
49
+ **React** (Vue, Svelte and Solid work the same way, see [below](#react-vue-svelte-and-solid)):
50
+
51
+ ```tsx
52
+ import 'mtrl/styles/base';
53
+ import { Button, Switch, Textfield } from 'mtrl/react';
54
+
55
+ export function Signup() {
56
+ return (
57
+ <form>
58
+ <Textfield name="email" type="email" label="Email" required />
59
+ <Switch name="news" defaultChecked>Newsletter</Switch>
60
+ <Button type="submit">Sign up</Button>
61
+ </form>
62
+ );
63
+ }
64
+ ```
65
+
66
+ **Vanilla**: each component is a function that returns a DOM element and a small API.
67
+
13
68
  ```typescript
14
69
  import 'mtrl/styles';
15
70
  import { createButton, createTextfield } from 'mtrl';
@@ -22,10 +77,7 @@ name.on('input', ({ value }: { value: string }) => {
22
77
  if (value.trim()) save.disabled.enable();
23
78
  else save.disabled.disable();
24
79
  });
25
-
26
- save.on('click', () => {
27
- console.log('Saved', name.getValue());
28
- });
80
+ save.on('click', () => console.log('Saved', name.getValue()));
29
81
 
30
82
  document.body.append(name.element, save.element);
31
83
 
@@ -34,24 +86,25 @@ name.destroy();
34
86
  save.destroy();
35
87
  ```
36
88
 
37
- `mtrl/styles` loads every component and theme. For a smaller bundle, import only what you use (see [Styles](#styles)).
89
+ The factories are the fastest way to render hundreds of components at once, such as a long editable table; the elements style a shadow root each. `mtrl/styles` loads every component's styles; for a smaller bundle, import only what you use (see [Styles](#styles)).
38
90
 
39
91
  ## Components
40
92
 
41
- Every component is created by a `create*` function exported from `mtrl`, and renders with `mtrl-` prefixed classes.
93
+ Every component comes three ways: a factory (`createButton`), an element (`<m-button>`) and a framework component (`Button`; `MButton` in Vue).
42
94
 
43
- - **Actions:** `createButton`, `createButtonGroup`, `createSplitButton`, `createIconButton`, `createFab`, `createExtendedFab`
44
- - **Selection and input:** `createCheckbox`, `createChips` and `createChip`, `createRadios`, `createSwitch`, `createSlider`, `createSelect`, `createTextfield`, `createSearch`, `createDatePicker`, `createTimePicker`
45
- - **Navigation:** `createNavigationRail`, `createDrawer`, `createTabs` and `createTab`, `createTopAppBar`, `createBottomAppBar`, `createMenu`, `createNavigation`, `createNavigationSystem`
46
- - **Containment:** `createCard` with `createCardHeader`, `createCardContent`, `createCardMedia` and `createCardActions`, `createCarousel`, `createList`, `createDivider`, `createDialog`, `createBottomSheet`, `createSideSheet`
47
- - **Communication:** `createSnackbar`, `createTooltip`, `createBadge`, `createProgress`, `createLoadingIndicator`
48
- - **Deprecated:** `createSegmentedButton` and `createSegment`, replaced by `createButtonGroup` with `kind: 'connected'`
95
+ | Group | Components |
96
+ |-------|------------|
97
+ | Actions | Button, Icon button, Button group, Split button, FAB, Extended FAB, FAB menu, Toolbar |
98
+ | Selection and input | Checkbox, Switch, Radio buttons, Chips, Slider, Text field, Select, Search, Date picker, Time picker |
99
+ | Navigation | Navigation rail, Drawer, Tabs, Menu, Top app bar, Bottom app bar |
100
+ | Containment | Card, Carousel, List, Divider, Dialog, Bottom sheet, Side sheet |
101
+ | Communication | Badge, Progress, Loading indicator, Snackbar, Tooltip |
49
102
 
50
- Virtual scrolling and data-driven lists live in [mtrl-addons](https://github.com/floor/mtrl-addons).
103
+ The factories are exported from `mtrl`: `createButton`, `createIconButton`, `createButtonGroup`, `createSplitButton`, `createFab`, `createExtendedFab`, `createFabMenu`, `createToolbar`, `createCheckbox`, `createSwitch`, `createRadios`, `createChips` (with `createAssistChip`, `createFilterChip`, `createInputChip` and `createSuggestionChip`), `createSlider`, `createTextfield`, `createSelect`, `createSearch`, `createDatePicker`, `createTimePicker`, `createNavigationRail`, `createDrawer`, `createTabs` and `createTab`, `createMenu`, `createTopAppBar`, `createBottomAppBar`, `createCard` (with `createCardHeader`, `createCardContent`, `createCardMedia` and `createCardActions`), `createCarousel`, `createList`, `createDivider`, `createDialog`, `createBottomSheet`, `createSideSheet`, `createBadge`, `createProgress`, `createLoadingIndicator`, `createSnackbar` and `createTooltip`. Deprecated: `createSegmentedButton` and `createSegment`, replaced by `createButtonGroup` with `kind: 'connected'`.
51
104
 
52
105
  ## Styles
53
106
 
54
- Import the full stylesheet once:
107
+ The web components and the framework components carry their own styles in their shadow roots; they need only the base stylesheet, `mtrl/styles/base`, for the theme and its tokens. The factories render in the page, so they use the page's stylesheets. Import the full stylesheet once:
55
108
 
56
109
  ```typescript
57
110
  import 'mtrl/styles';
@@ -69,7 +122,7 @@ import 'mtrl/themes/ocean';
69
122
  import 'mtrl/styles/utilities';
70
123
  ```
71
124
 
72
- The base includes the baseline theme in light and dark, the tokens, a reset, typography and the ripple. Each selective entry imports what it depends on (the select brings the text field and the menu), so use a CSS-capable bundler to resolve and deduplicate them. Choose either the full stylesheet or selective imports, not both. The date picker has no selective entry yet; it is in the full stylesheet.
125
+ The base includes the baseline theme in light and dark, the tokens, a reset, typography and the ripple. Each selective entry imports what it depends on (the select brings the text field and the menu), so use a CSS-capable bundler to resolve and deduplicate them. Choose either the full stylesheet or selective imports, not both.
73
126
 
74
127
  Library styles sit in ordered `mtrl` cascade layers, so unlayered application CSS overrides them without specificity battles.
75
128
 
@@ -86,7 +139,11 @@ document.documentElement.dataset.theme = 'ocean';
86
139
  document.documentElement.dataset.themeMode = 'dark';
87
140
  ```
88
141
 
89
- Available themes: `baseline`, `ocean`, `desert`, `forest`, `sunset`, `spring`, `summer`, `autumn`, `winter`, `brownbeige`, `browngreen`, `sageivory`, `tealcaramel`, `material`, `legacy` and `highcontrast`. With selective styles, import the theme's entry, for example `mtrl/themes/ocean`.
142
+ Available themes: `baseline`, `ocean`, `desert`, `forest`, `sunset`, `spring`, `summer`, `autumn`, `brownbeige`, `sageivory`, `tealcaramel` and `highcontrast`. With selective styles, import the theme's entry, for example `mtrl/themes/ocean`.
143
+
144
+ M3's scheme variants, generated from the baseline seed, ship as their own entries only (not in the full stylesheet): `neutral`, `vibrant`, `expressive`, `fidelity`, `content`, `monochrome`, `rainbow` and `fruit-salad`, for example `mtrl/themes/vibrant`. `schemeToTokens` (`mtrl/core/theme`) turns any M3 scheme's role colours into these tokens.
145
+
146
+ Deprecated, removed in 1.0: `material` (use `baseline`), `winter` (use `ocean`), `browngreen` (use `brownbeige`) and `legacy`.
90
147
 
91
148
  ### Custom properties
92
149
 
@@ -99,7 +156,7 @@ Components read the theme's colour roles, so overriding a role restyles every co
99
156
  }
100
157
  ```
101
158
 
102
- The type scale and shape scale are custom properties too (`--mtrl-sys-typescale-*`, `--mtrl-sys-shape-*`). Component hooks follow one convention, `--mtrl-<component>-<name>`:
159
+ The type scale, the typefaces and the corner scale are custom properties too (`--mtrl-sys-typescale-*`, `--mtrl-ref-typeface-brand` and `--mtrl-ref-typeface-plain`, `--mtrl-sys-shape-corner-*`): setting a typeface or a corner step on `:root` restyles every component that uses it. Component hooks follow one convention, `--mtrl-<component>-<name>`:
103
160
 
104
161
  ```css
105
162
  .brand-slider {
@@ -108,6 +165,44 @@ The type scale and shape scale are custom properties too (`--mtrl-sys-typescale-
108
165
  }
109
166
  ```
110
167
 
168
+ ## Web components
169
+
170
+ Overlays open in the browser's top layer (`showModal()` or `popover`) from inside their own shadow root, so they keep their styles, trap focus and make the page inert where M3 says so. Form controls are form-associated: `name`, the form value, reset, validation, `<label for>` and back-navigation restore work as on native controls.
171
+
172
+ Declaration children describe a component's items, as native `<select>` and `<option>` do:
173
+
174
+ ```html
175
+ <m-tabs value="songs">
176
+ <m-tab value="songs">Songs</m-tab>
177
+ <m-tab value="albums">Albums</m-tab>
178
+ </m-tabs>
179
+ ```
180
+
181
+ The page still loads mtrl's base styles and a theme (see [Styles](#styles)); the elements render in shadow DOM and pick up the theme's tokens. Attributes are defaults and properties the live state, as on native controls: a `checked` or `value` attribute sets the state until the user or a script changes it, and `form.reset()` goes back to it. Form controls take part in forms (their host's `name`), reset, validation and back-navigation restore.
182
+
183
+ A server-rendered page sends each element as its tag and light DOM; the element takes its real look once its script defines it. So that nothing moves meanwhile, put the pre-upgrade stylesheet in `<head>`: it gives every element not defined yet the box it will have (and its label the final type style), hides what it declares (`<m-tab>`, `<m-menu-item>`, …) and overlays. Its rules match only `:not(:defined)`, in the `mtrl.preupgrade` cascade layer.
184
+
185
+ ```html
186
+ <link rel="stylesheet" href="/node_modules/mtrl/dist/elements/preupgrade.css">
187
+ ```
188
+
189
+ With another tag prefix, `preupgradeStyles('x')` from `mtrl/elements/preupgrade` returns the same stylesheet for `<x-*>`, to inline on the server. The CSS modules (`mtrl/elements/css`) also apply these rules until the elements are defined, for the default prefix and the one given to `configure()` or `define()`.
190
+
191
+ ## React, Vue, Svelte and Solid
192
+
193
+ The framework components render the elements, so everything above holds: forms, the top layer, the styling. `mtrl/react`, `mtrl/vue`, `mtrl/svelte` and `mtrl/solid` load the elements' CSS and register each element the first time it mounts.
194
+
195
+ | Framework | Import | Two-way binding |
196
+ |-----------|--------|-----------------|
197
+ | React 18 and 19 | `import { Switch } from 'mtrl/react'` | `checked` + `onChange`, or `defaultChecked` |
198
+ | Vue 3 | `import { MSwitch } from 'mtrl/vue'` | `v-model` |
199
+ | Svelte 5 | `import { Switch } from 'mtrl/svelte'` | `bind:checked` |
200
+ | Solid | `import { Switch } from 'mtrl/solid'` | `checked` + `onChange` |
201
+
202
+ Each framework is an optional peer dependency; mtrl installs none of them. All adapters render on the server and hydrate. Angular apps use the elements directly, with `CUSTOM_ELEMENTS_SCHEMA`.
203
+
204
+ Each framework has a guide on [md3.io](https://md3.io/docs/): props and events, controlled and uncontrolled state, named slots, refs and server rendering.
205
+
111
206
  ## Imports and tree-shaking
112
207
 
113
208
  mtrl publishes ESM with type declarations, so bundlers drop unused exports and split dynamic imports. CommonJS remains available through `require('mtrl')`.
@@ -132,61 +227,7 @@ const button = createButton({
132
227
  });
133
228
  ```
134
229
 
135
- Button progress and card actions load on demand; enable code splitting in your build to keep them out of the initial chunk.
136
-
137
- ## Web components and frameworks (experimental)
138
-
139
- From the 0.10.0 prereleases (`npm install mtrl@next`), components also ship as custom elements, with thin adapters for React, Vue, Svelte and Solid. The API may still change.
140
-
141
- | Element | Framework component (Vue: `M` prefix, e.g. `MTextfield`) | Kind |
142
- |---------|---------------------|------|
143
- | `<m-button>` | `Button` | action, submits or resets its form |
144
- | `<m-icon-button>` | `IconButton` | action or toggle (`selected`) |
145
- | `<m-fab>`, `<m-extended-fab>` | `Fab`, `ExtendedFab` | action |
146
- | `<m-checkbox>` | `Checkbox` | form control (`checked`, `indeterminate`) |
147
- | `<m-switch>` | `Switch` | form control (`checked`) |
148
- | `<m-radios>` with `<m-radio>` | `Radios`, `Radio` | form control (`value`) |
149
- | `<m-slider>` | `Slider` | form control (`value`, `secondValue` with `range`) |
150
- | `<m-textfield>` | `Textfield` | form control (`value`) |
151
- | `<m-tabs>` with `<m-tab>` | `Tabs`, `Tab` | selection (`value`) |
152
- | `<m-progress>`, `<m-loading-indicator>` | `Progress`, `LoadingIndicator` | indicator |
153
- | `<m-badge>`, `<m-divider>` | `Badge`, `Divider` | display |
154
-
155
- More components follow through 0.10.x; the others are available as factories today.
156
-
157
- ```html
158
- <script type="module">
159
- import 'mtrl/elements/css'; // the elements' styles
160
- import { defineAll } from 'mtrl/elements';
161
- defineAll(); // registers every element (<m-button>, <m-switch>, …)
162
- </script>
163
-
164
- <form>
165
- <m-textfield name="email" type="email" label="Email" required></m-textfield>
166
- <m-radios name="plan" value="free" aria-label="Plan">
167
- <m-radio value="free">Free</m-radio>
168
- <m-radio value="pro">Pro</m-radio>
169
- </m-radios>
170
- <m-switch name="news" checked>Newsletter</m-switch>
171
- <m-button type="submit">Sign up</m-button>
172
- </form>
173
-
174
- <m-tabs value="songs">
175
- <m-tab value="songs">Songs</m-tab>
176
- <m-tab value="albums">Albums</m-tab>
177
- </m-tabs>
178
- ```
179
-
180
- The page still loads mtrl's base styles and a theme (see [Styles](#styles)); the elements render in shadow DOM and pick up the theme's tokens. Attributes are defaults and properties the live state, as on native controls: a `checked` or `value` attribute sets the state until the user or a script changes it, and `form.reset()` goes back to it. Form controls take part in forms (their host's `name`), reset, validation and back-navigation restore.
181
-
182
- | Framework | Import | Two-way binding |
183
- |-----------|--------|-----------------|
184
- | React 18 and 19 | `import { Switch } from 'mtrl/react'` | `checked` + `onChange`, or `defaultChecked` |
185
- | Vue 3 | `import { MSwitch } from 'mtrl/vue'` | `v-model` |
186
- | Svelte 5 | `import { Switch } from 'mtrl/svelte'` | `bind:checked` |
187
- | Solid | `import { Switch } from 'mtrl/solid'` | `checked` + `onChange` |
188
-
189
- Each framework is an optional peer dependency; mtrl installs none of them. All adapters render on the server and hydrate. Angular apps use the elements directly, with `CUSTOM_ELEMENTS_SCHEMA`.
230
+ Some parts load on demand: a button's progress indicator, a card's action buttons, a menu's submenus and the FAB menu's desktop menu. Enable code splitting in your build to keep them out of the initial chunk.
190
231
 
191
232
  ## Building your own components
192
233
 
@@ -194,17 +235,8 @@ Components are composed from small features with `pipe`. The same building block
194
235
 
195
236
  ```typescript
196
237
  import { pipe, createBase, withEvents, withElement } from 'mtrl/core/compose';
197
- import type { ElementComponent } from 'mtrl/core/compose';
198
-
199
- interface NoteConfig {
200
- text?: string;
201
- }
202
238
 
203
- interface NoteComponent extends ElementComponent {
204
- setText: (text: string) => NoteComponent;
205
- }
206
-
207
- const createNote = (config: NoteConfig): NoteComponent =>
239
+ const createNote = (config: { text?: string } = {}) =>
208
240
  pipe(
209
241
  createBase,
210
242
  withEvents(),
@@ -213,10 +245,16 @@ const createNote = (config: NoteConfig): NoteComponent =>
213
245
  ...component,
214
246
  setText(text: string) {
215
247
  component.element.textContent = text;
216
- return this;
217
248
  },
218
249
  })
219
250
  )(config);
251
+
252
+ // The component's type is what the pipe builds
253
+ type NoteComponent = ReturnType<typeof createNote>;
254
+
255
+ const note: NoteComponent = createNote();
256
+ note.setText('Saved');
257
+ document.body.append(note.element);
220
258
  ```
221
259
 
222
260
  The element gets the `mtrl-note` class, `withEvents` adds `on`, `off` and `emit`, and `destroy()` removes the element. Add `withLifecycle()` from `mtrl/core/compose/features` when features need to register cleanup.
@@ -241,6 +279,10 @@ configureHTML({ sanitize: (html) => policy.createHTML(html) });
241
279
 
242
280
  The policy sees every string, the library's own icons included; a `TrustedHTML` value passed as an icon or content skips it. With no policy set, markup is written as it is. Text options (`text`, a card's `text`) never go through `innerHTML`.
243
281
 
282
+ ## Upgrading from 0.9
283
+
284
+ 0.10.0 adds the elements and framework components; for factory users, most apps need nothing. The changes to check are listed in the [0.10.0 changelog's migration section](CHANGELOG.md#migrating-from-09x): setters no longer emit `change`, the time picker's events pass `{ value }`, the `--mtrl-sys-color-*-rgb` properties are gone, disabled non-form roots use `aria-disabled`, cards are `article`s, and the text field's DOM gained a `__field` wrapper.
285
+
244
286
  ## Upgrading from 0.7
245
287
 
246
288
  0.8.0 aligns the components with Material 3 expressive, and some of that changes the API or the styles:
@@ -256,11 +298,11 @@ The full list, with every renamed property, is in the [0.8.0 changelog](CHANGELO
256
298
 
257
299
  ## Browser support
258
300
 
259
- Current Chrome, Edge, Firefox and Safari. The spring motion uses CSS `linear()` easing (Safari 17.2 or later); older browsers render every component but skip those transitions.
301
+ Current Chrome, Edge, Firefox and Safari. The spring motion uses CSS `linear()` easing (Safari 17.2 or later); older browsers render every component but skip those transitions. The elements use form-associated custom elements and the top layer (`popover` and `<dialog>`), both available in every current browser.
260
302
 
261
303
  ## Contributing
262
304
 
263
- Contributions are welcome. [CONTRIBUTING.md](CONTRIBUTING.md) covers the development setup, conventions and the distribution checks; [TESTING.md](TESTING.md) covers the test suite.
305
+ Contributions are welcome. [CONTRIBUTING.md](.github/CONTRIBUTING.md) covers the development setup, conventions and the distribution checks.
264
306
 
265
307
  ## License
266
308