@shortfuse/materialdesignweb 0.4.0 → 0.7.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 (452) hide show
  1. package/README.md +155 -79
  2. package/bin/generate-css.js +12 -0
  3. package/components/Badge.css +30 -0
  4. package/components/Badge.js +15 -0
  5. package/components/Body.css +14 -0
  6. package/components/Body.js +7 -0
  7. package/components/BottomAppBar.css +23 -0
  8. package/components/BottomAppBar.js +25 -0
  9. package/components/Box.css +31 -0
  10. package/components/Box.js +24 -0
  11. package/components/Button.css +146 -0
  12. package/components/Button.js +95 -0
  13. package/components/Button.md +61 -0
  14. package/components/Card.css +109 -0
  15. package/components/Card.js +82 -0
  16. package/components/Checkbox.css +77 -0
  17. package/components/Checkbox.js +59 -0
  18. package/components/CheckboxIcon.css +89 -0
  19. package/components/CheckboxIcon.js +41 -0
  20. package/components/Chip.css +35 -0
  21. package/components/Chip.js +22 -0
  22. package/components/Dialog.css +235 -0
  23. package/components/Dialog.js +327 -0
  24. package/components/DialogActions.js +13 -0
  25. package/components/Divider.css +41 -0
  26. package/components/Divider.js +13 -0
  27. package/components/ExtendedFab.css +24 -0
  28. package/components/ExtendedFab.js +11 -0
  29. package/components/Fab.css +23 -0
  30. package/components/Fab.js +26 -0
  31. package/components/FilterChip.css +80 -0
  32. package/components/FilterChip.js +51 -0
  33. package/components/Headline.css +14 -0
  34. package/components/Headline.js +33 -0
  35. package/components/Icon.css +76 -0
  36. package/components/Icon.js +174 -0
  37. package/components/IconButton.css +151 -0
  38. package/components/IconButton.js +65 -0
  39. package/components/Input.js +16 -0
  40. package/components/Label.css +14 -0
  41. package/components/Label.js +7 -0
  42. package/components/Layout.css +19 -0
  43. package/components/Layout.js +12 -0
  44. package/components/List.css +12 -0
  45. package/components/List.js +17 -0
  46. package/components/ListItem.css +224 -0
  47. package/components/ListItem.js +112 -0
  48. package/components/ListOption.css +34 -0
  49. package/components/ListOption.js +122 -0
  50. package/components/ListSelect.css +9 -0
  51. package/components/ListSelect.js +206 -0
  52. package/components/Menu.css +171 -0
  53. package/components/Menu.js +470 -0
  54. package/components/MenuItem.css +53 -0
  55. package/components/MenuItem.js +215 -0
  56. package/components/Nav.css +17 -0
  57. package/components/Nav.js +23 -0
  58. package/components/NavBar.css +34 -0
  59. package/components/NavBar.js +88 -0
  60. package/components/NavBarItem.css +41 -0
  61. package/components/NavBarItem.js +7 -0
  62. package/components/NavDrawer.css +31 -0
  63. package/components/NavDrawer.js +13 -0
  64. package/components/NavDrawerItem.css +42 -0
  65. package/components/NavDrawerItem.js +12 -0
  66. package/components/NavItem.css +181 -0
  67. package/components/NavItem.js +83 -0
  68. package/components/NavRail.css +47 -0
  69. package/components/NavRail.js +17 -0
  70. package/components/NavRailItem.css +25 -0
  71. package/components/NavRailItem.js +7 -0
  72. package/components/Option.js +91 -0
  73. package/components/Outline.css +138 -0
  74. package/components/Pane.css +261 -0
  75. package/components/Pane.js +21 -0
  76. package/components/Progress.css +74 -0
  77. package/components/Progress.js +67 -0
  78. package/components/ProgressCircle.css +226 -0
  79. package/components/ProgressLine.css +155 -0
  80. package/components/Radio.css +83 -0
  81. package/components/Radio.js +42 -0
  82. package/components/RadioIcon.css +73 -0
  83. package/components/RadioIcon.js +37 -0
  84. package/components/Ripple.css +74 -0
  85. package/components/Ripple.js +114 -0
  86. package/components/SegmentedButton.css +94 -0
  87. package/components/SegmentedButton.js +49 -0
  88. package/components/SegmentedButtonGroup.css +12 -0
  89. package/components/SegmentedButtonGroup.js +44 -0
  90. package/components/Select.css +52 -0
  91. package/components/Select.js +71 -0
  92. package/components/Shape.css +132 -0
  93. package/components/Shape.js +25 -0
  94. package/components/Slider.css +306 -0
  95. package/components/Slider.js +206 -0
  96. package/components/Snackbar.css +80 -0
  97. package/components/Snackbar.js +75 -0
  98. package/components/Surface.css +10 -0
  99. package/components/Surface.js +23 -0
  100. package/components/Switch.css +63 -0
  101. package/components/Switch.js +127 -0
  102. package/components/SwitchIcon.css +177 -0
  103. package/components/SwitchIcon.js +89 -0
  104. package/components/SwitchIconAnimations.css +89 -0
  105. package/components/Tab.css +85 -0
  106. package/components/Tab.js +103 -0
  107. package/components/TabContent.js +151 -0
  108. package/components/TabList.css +129 -0
  109. package/components/TabList.js +309 -0
  110. package/components/TabPanel.js +37 -0
  111. package/components/TextArea.css +93 -0
  112. package/components/TextArea.js +229 -0
  113. package/components/Title.css +14 -0
  114. package/components/Title.js +15 -0
  115. package/components/Tooltip.css +40 -0
  116. package/components/Tooltip.js +22 -0
  117. package/components/TopAppBar.css +209 -0
  118. package/components/TopAppBar.js +201 -0
  119. package/core/Composition.js +988 -0
  120. package/core/CustomElement.js +844 -0
  121. package/core/ICustomElement.d.ts +288 -0
  122. package/core/ICustomElement.js +1 -0
  123. package/core/css.js +51 -0
  124. package/core/customTypes.js +125 -0
  125. package/core/dom.js +56 -245
  126. package/core/identify.js +40 -0
  127. package/core/observe.js +410 -0
  128. package/core/template.js +121 -0
  129. package/core/typings.d.ts +135 -0
  130. package/core/typings.js +1 -0
  131. package/mixins/AriaReflectorMixin.js +42 -0
  132. package/mixins/AriaToolbarMixin.js +13 -0
  133. package/mixins/ControlMixin.css +57 -0
  134. package/mixins/ControlMixin.js +212 -0
  135. package/mixins/DensityMixin.css +40 -0
  136. package/mixins/DensityMixin.js +11 -0
  137. package/mixins/FlexableMixin.css +79 -0
  138. package/mixins/FlexableMixin.js +32 -0
  139. package/mixins/FormAssociatedMixin.js +170 -0
  140. package/mixins/InputMixin.js +335 -0
  141. package/mixins/KeyboardNavMixin.js +244 -0
  142. package/mixins/RTLObserverMixin.js +35 -0
  143. package/mixins/ResizeObserverMixin.js +38 -0
  144. package/mixins/RippleMixin.css +12 -0
  145. package/mixins/RippleMixin.js +115 -0
  146. package/mixins/ScrollListenerMixin.js +100 -0
  147. package/mixins/ShapeMixin.css +135 -0
  148. package/mixins/ShapeMixin.js +31 -0
  149. package/mixins/StateMixin.css +82 -0
  150. package/mixins/StateMixin.js +114 -0
  151. package/mixins/SurfaceMixin.css +150 -0
  152. package/mixins/SurfaceMixin.js +32 -0
  153. package/mixins/TextFieldMixin.css +657 -0
  154. package/mixins/TextFieldMixin.js +121 -0
  155. package/mixins/ThemableMixin.css +204 -0
  156. package/mixins/ThemableMixin.js +16 -0
  157. package/mixins/TooltipTriggerMixin.css +27 -0
  158. package/mixins/TooltipTriggerMixin.js +366 -0
  159. package/mixins/TouchTargetMixin.css +26 -0
  160. package/mixins/TouchTargetMixin.js +9 -0
  161. package/package.json +57 -41
  162. package/theming/index.js +594 -0
  163. package/theming/loader.js +24 -0
  164. package/utils/cli.js +11 -0
  165. package/utils/color_keywords.js +151 -0
  166. package/utils/hct/Cam16.js +298 -0
  167. package/utils/hct/CorePalette.js +84 -0
  168. package/utils/hct/Hct.js +172 -0
  169. package/utils/hct/Scheme.js +587 -0
  170. package/utils/hct/TonalPalette.js +68 -0
  171. package/utils/hct/ViewingConditions.js +136 -0
  172. package/utils/hct/blend.js +93 -0
  173. package/utils/hct/colorUtils.js +302 -0
  174. package/utils/hct/hctSolver.js +559 -0
  175. package/utils/hct/helper.js +182 -0
  176. package/utils/hct/mathUtils.js +153 -0
  177. package/utils/jsonMergePatch.js +100 -0
  178. package/utils/jsx-runtime.js +101 -0
  179. package/utils/popup.js +117 -0
  180. package/utils/svg.js +129 -0
  181. package/.browserslistrc +0 -3
  182. package/.eslintrc.json +0 -153
  183. package/.stylelintrc.json +0 -600
  184. package/.vscode/launch.json +0 -31
  185. package/.vscode/settings.json +0 -3
  186. package/.vscode/tasks.json +0 -32
  187. package/CHANGELOG.md +0 -24
  188. package/CODE_OF_CONDUCT.md +0 -46
  189. package/adapters/datatable/column.js +0 -203
  190. package/adapters/datatable/index.js +0 -972
  191. package/adapters/dom/index.js +0 -601
  192. package/adapters/list/index.js +0 -69
  193. package/adapters/search/index.js +0 -521
  194. package/components/appbar/_spec.scss +0 -225
  195. package/components/appbar/_theme.scss +0 -0
  196. package/components/appbar/index.scss +0 -2
  197. package/components/banner/_spec.scss +0 -118
  198. package/components/banner/_theme.scss +0 -0
  199. package/components/banner/index.scss +0 -2
  200. package/components/bottomnav/README.md +0 -85
  201. package/components/bottomnav/_spec.scss +0 -157
  202. package/components/bottomnav/_theme.scss +0 -0
  203. package/components/bottomnav/index.js +0 -122
  204. package/components/bottomnav/index.scss +0 -2
  205. package/components/bottomnav/item.js +0 -89
  206. package/components/button/README.md +0 -61
  207. package/components/button/_spec.scss +0 -161
  208. package/components/button/_theme.scss +0 -65
  209. package/components/button/index.eta +0 -32
  210. package/components/button/index.js +0 -43
  211. package/components/button/index.pug +0 -18
  212. package/components/button/index.scss +0 -2
  213. package/components/card/_spec.scss +0 -249
  214. package/components/card/_theme.scss +0 -0
  215. package/components/card/index.scss +0 -2
  216. package/components/chip/_spec.scss +0 -134
  217. package/components/chip/_theme.scss +0 -177
  218. package/components/chip/index.js +0 -21
  219. package/components/chip/index.scss +0 -2
  220. package/components/chip/item.js +0 -20
  221. package/components/datatable/_spec.scss +0 -288
  222. package/components/datatable/_theme.scss +0 -154
  223. package/components/datatable/cell.js +0 -45
  224. package/components/datatable/columnheader.js +0 -47
  225. package/components/datatable/index.js +0 -388
  226. package/components/datatable/index.scss +0 -2
  227. package/components/datatable/row.js +0 -49
  228. package/components/datatable/rowheader.js +0 -18
  229. package/components/dialog/_spec.scss +0 -213
  230. package/components/dialog/_theme.scss +0 -0
  231. package/components/dialog/index.js +0 -627
  232. package/components/dialog/index.scss +0 -2
  233. package/components/divider/_spec.scss +0 -13
  234. package/components/divider/_theme.scss +0 -0
  235. package/components/divider/index.scss +0 -2
  236. package/components/elevation/_spec.scss +0 -9
  237. package/components/elevation/_theme.scss +0 -0
  238. package/components/elevation/index.scss +0 -2
  239. package/components/fab/_spec.scss +0 -222
  240. package/components/fab/_theme.scss +0 -0
  241. package/components/fab/index.js +0 -103
  242. package/components/fab/index.scss +0 -2
  243. package/components/grid/_spec.scss +0 -312
  244. package/components/grid/_theme.scss +0 -0
  245. package/components/grid/index.scss +0 -2
  246. package/components/layout/_mixins.scss +0 -33
  247. package/components/layout/_spec.scss +0 -1012
  248. package/components/layout/_theme.scss +0 -44
  249. package/components/layout/index.js +0 -464
  250. package/components/layout/index.scss +0 -2
  251. package/components/list/_spec.scss +0 -397
  252. package/components/list/_theme.scss +0 -111
  253. package/components/list/content.js +0 -110
  254. package/components/list/index.js +0 -260
  255. package/components/list/index.scss +0 -2
  256. package/components/list/item.js +0 -170
  257. package/components/list/secondary.js +0 -46
  258. package/components/menu/_spec.scss +0 -362
  259. package/components/menu/_theme.scss +0 -0
  260. package/components/menu/index.js +0 -721
  261. package/components/menu/index.scss +0 -2
  262. package/components/menu/item.js +0 -239
  263. package/components/progress/_spec.scss +0 -147
  264. package/components/progress/_theme.scss +0 -0
  265. package/components/progress/index.js +0 -36
  266. package/components/progress/index.scss +0 -2
  267. package/components/selection/_spec.scss +0 -386
  268. package/components/selection/_theme.scss +0 -166
  269. package/components/selection/index.eta +0 -60
  270. package/components/selection/index.js +0 -76
  271. package/components/selection/index.pug +0 -30
  272. package/components/selection/index.scss +0 -2
  273. package/components/selection/input.js +0 -56
  274. package/components/selection/radiogroup.js +0 -47
  275. package/components/slider/_spec.scss +0 -64
  276. package/components/slider/_theme.scss +0 -0
  277. package/components/slider/index.scss +0 -2
  278. package/components/snackbar/_spec.scss +0 -195
  279. package/components/snackbar/_theme.scss +0 -0
  280. package/components/snackbar/index.js +0 -344
  281. package/components/snackbar/index.scss +0 -2
  282. package/components/tab/_spec.scss +0 -235
  283. package/components/tab/_theme.scss +0 -0
  284. package/components/tab/content.js +0 -205
  285. package/components/tab/index.js +0 -260
  286. package/components/tab/index.scss +0 -2
  287. package/components/tab/item.js +0 -89
  288. package/components/tab/list.js +0 -210
  289. package/components/tab/panel.js +0 -54
  290. package/components/template/_theme.scss +0 -27
  291. package/components/textfield/README.md +0 -179
  292. package/components/textfield/_mixins.scss +0 -52
  293. package/components/textfield/_spec.scss +0 -809
  294. package/components/textfield/_theme.scss +0 -299
  295. package/components/textfield/index.eta +0 -74
  296. package/components/textfield/index.js +0 -168
  297. package/components/textfield/index.pug +0 -30
  298. package/components/textfield/index.scss +0 -2
  299. package/components/tooltip/_spec.scss +0 -188
  300. package/components/tooltip/_theme.scss +0 -0
  301. package/components/tooltip/index.scss +0 -2
  302. package/components/type/_spec.scss +0 -224
  303. package/components/type/_theme.scss +0 -0
  304. package/components/type/index.scss +0 -2
  305. package/core/_breakpoint.scss +0 -189
  306. package/core/_elevation.scss +0 -38
  307. package/core/_length.scss +0 -9
  308. package/core/_motion.scss +0 -31
  309. package/core/_platform.scss +0 -34
  310. package/core/_type.scss +0 -127
  311. package/core/aria/attributes.js +0 -141
  312. package/core/aria/button.js +0 -50
  313. package/core/aria/keyboard.js +0 -93
  314. package/core/aria/rovingtabindex.js +0 -178
  315. package/core/aria/tab.js +0 -60
  316. package/core/color/_spec.scss +0 -0
  317. package/core/color/_theme.scss +0 -390
  318. package/core/color/index.scss +0 -2
  319. package/core/document/index.js +0 -39
  320. package/core/overlay/_spec.scss +0 -31
  321. package/core/overlay/_theme.scss +0 -171
  322. package/core/overlay/index.js +0 -108
  323. package/core/overlay/index.scss +0 -2
  324. package/core/ripple/_spec.scss +0 -197
  325. package/core/ripple/_theme.scss +0 -40
  326. package/core/ripple/index.js +0 -294
  327. package/core/ripple/index.scss +0 -2
  328. package/core/theme/_config.scss +0 -2
  329. package/core/theme/_mixins.scss +0 -172
  330. package/core/theme/_palettes.scss +0 -406
  331. package/core/theme/_variables.scss +0 -24
  332. package/core/theme/index.js +0 -50
  333. package/core/throttler.js +0 -42
  334. package/core/transition/index.js +0 -468
  335. package/docs/_flex.scss +0 -22
  336. package/docs/_menuoptions.js +0 -183
  337. package/docs/_mixins.pug +0 -155
  338. package/docs/_partials/_androidnavbar.eta +0 -5
  339. package/docs/_partials/_androidstatusbar.eta +0 -13
  340. package/docs/_partials/_appbar.eta +0 -29
  341. package/docs/_partials/_buttontest.eta +0 -31
  342. package/docs/_partials/_header.eta +0 -149
  343. package/docs/_partials/_navlistitem.eta +0 -16
  344. package/docs/_partials/_target.eta +0 -1
  345. package/docs/_sample-utils.js +0 -93
  346. package/docs/_storage.js +0 -33
  347. package/docs/docs.scss +0 -295
  348. package/docs/index.eta +0 -16
  349. package/docs/index.js +0 -0
  350. package/docs/pages/appbar.eta +0 -114
  351. package/docs/pages/appbar.js +0 -0
  352. package/docs/pages/appbar.pug +0 -78
  353. package/docs/pages/bottomnav.eta +0 -188
  354. package/docs/pages/bottomnav.js +0 -115
  355. package/docs/pages/bottomnav.pug +0 -137
  356. package/docs/pages/button.eta +0 -124
  357. package/docs/pages/button.js +0 -224
  358. package/docs/pages/button.pug +0 -121
  359. package/docs/pages/card.eta +0 -90
  360. package/docs/pages/card.js +0 -177
  361. package/docs/pages/card.pug +0 -74
  362. package/docs/pages/chip.eta +0 -122
  363. package/docs/pages/chip.js +0 -82
  364. package/docs/pages/chip.pug +0 -91
  365. package/docs/pages/color.eta +0 -143
  366. package/docs/pages/color.js +0 -262
  367. package/docs/pages/color.pug +0 -121
  368. package/docs/pages/datatable.eta +0 -323
  369. package/docs/pages/datatable.js +0 -164
  370. package/docs/pages/datatable.pug +0 -283
  371. package/docs/pages/dialog.eta +0 -186
  372. package/docs/pages/dialog.js +0 -177
  373. package/docs/pages/dialog.pug +0 -132
  374. package/docs/pages/dom.eta +0 -26
  375. package/docs/pages/dom.js +0 -143
  376. package/docs/pages/dom.pug +0 -22
  377. package/docs/pages/elevation.eta +0 -35
  378. package/docs/pages/elevation.js +0 -0
  379. package/docs/pages/elevation.pug +0 -25
  380. package/docs/pages/fab.eta +0 -99
  381. package/docs/pages/fab.js +0 -44
  382. package/docs/pages/fab.pug +0 -66
  383. package/docs/pages/grid.eta +0 -135
  384. package/docs/pages/grid.js +0 -128
  385. package/docs/pages/grid.pug +0 -95
  386. package/docs/pages/layout.eta +0 -8
  387. package/docs/pages/layout.js +0 -0
  388. package/docs/pages/layout.pug +0 -7
  389. package/docs/pages/list.eta +0 -465
  390. package/docs/pages/list.js +0 -9
  391. package/docs/pages/list.pug +0 -326
  392. package/docs/pages/menu.eta +0 -276
  393. package/docs/pages/menu.js +0 -217
  394. package/docs/pages/menu.pug +0 -205
  395. package/docs/pages/overlay.eta +0 -69
  396. package/docs/pages/overlay.js +0 -4
  397. package/docs/pages/overlay.pug +0 -55
  398. package/docs/pages/progress.eta +0 -23
  399. package/docs/pages/progress.js +0 -12
  400. package/docs/pages/progress.pug +0 -16
  401. package/docs/pages/ripple.eta +0 -27
  402. package/docs/pages/ripple.js +0 -4
  403. package/docs/pages/ripple.pug +0 -21
  404. package/docs/pages/search.eta +0 -246
  405. package/docs/pages/search.js +0 -243
  406. package/docs/pages/search.pug +0 -165
  407. package/docs/pages/selection.eta +0 -111
  408. package/docs/pages/selection.js +0 -13
  409. package/docs/pages/selection.pug +0 -74
  410. package/docs/pages/slider.eta +0 -23
  411. package/docs/pages/slider.js +0 -0
  412. package/docs/pages/slider.pug +0 -17
  413. package/docs/pages/snackbar.eta +0 -83
  414. package/docs/pages/snackbar.js +0 -158
  415. package/docs/pages/snackbar.pug +0 -60
  416. package/docs/pages/tab.eta +0 -421
  417. package/docs/pages/tab.js +0 -151
  418. package/docs/pages/tab.pug +0 -304
  419. package/docs/pages/textfield.eta +0 -486
  420. package/docs/pages/textfield.js +0 -254
  421. package/docs/pages/textfield.pug +0 -360
  422. package/docs/pages/tooltip.eta +0 -94
  423. package/docs/pages/tooltip.js +0 -0
  424. package/docs/pages/tooltip.pug +0 -78
  425. package/docs/pages/transition.eta +0 -117
  426. package/docs/pages/transition.js +0 -54
  427. package/docs/pages/transition.pug +0 -76
  428. package/docs/pages/type.eta +0 -31
  429. package/docs/pages/type.js +0 -0
  430. package/docs/pages/type.pug +0 -29
  431. package/docs/postrender.js +0 -39
  432. package/docs/prerender.js +0 -16
  433. package/docs/pwa/_dialogs.eta +0 -143
  434. package/docs/pwa/_dialogs.pug +0 -96
  435. package/docs/pwa/_menus.eta +0 -16
  436. package/docs/pwa/_menus.pug +0 -11
  437. package/docs/pwa/pwa-prerender.js +0 -3
  438. package/docs/pwa/pwa.eta +0 -480
  439. package/docs/pwa/pwa.js +0 -306
  440. package/docs/pwa/pwa.pug +0 -325
  441. package/docs/pwa/pwa.scss +0 -26
  442. package/docs/spec.scss +0 -26
  443. package/docs/themes/_component-themes.scss +0 -26
  444. package/docs/themes/theme-colored-fallbacks.scss +0 -17
  445. package/docs/themes/theme-colored.scss +0 -17
  446. package/docs/themes/theme-default-fallbacks.scss +0 -17
  447. package/docs/themes/theme-default.scss +0 -17
  448. package/jsconfig.json +0 -12
  449. package/scripts/deploy-docs.sh +0 -9
  450. package/templates/index.eta +0 -2
  451. package/templates/index.pug +0 -3
  452. package/webpack.config.cjs +0 -257
package/README.md CHANGED
@@ -1,88 +1,164 @@
1
- *Notice: This project is currently being maintained in an private fork. Changes will be pushed at a later date.*
2
-
3
1
  # materialdesignweb
4
2
  Material Design for Web
5
3
 
4
+ # About
5
+
6
+ A standards-focused, zero-dependency implemention of Material Design 3 (Material You).
7
+
8
+ # Current status
9
+
10
+ Working on:
11
+ * Array rendering (sub templates)
12
+ * * Nav Drawer list population
13
+ * * Search results population
14
+ * * Text Field Dropdown population
15
+ * Cross-DOM-boundary custom colors
16
+
6
17
  # Demo
7
18
 
8
19
  https://clshortfuse.github.io/materialdesignweb/
9
20
 
10
21
  # Getting started
11
22
 
12
- npm: `npm install @shortfuse/materialdesignweb`
13
-
14
- # Core modules
15
-
16
- | Module | CSS-Only Support | Description | status
17
- | :-------- | :-: | :- | :- |
18
- | [aria](core/aria/) | :x: | Handles ARIA attributes, ARIA roles, tabindexes, and keyboard interaction | preRC
19
- | [document](core/document/) | :white_check_mark: | Applies color-scheme, standalone-window, and user agents detection | RC
20
- | [overlay](core/overlay/) | :white_check_mark: | Applies overlay states to components | RC
21
- | [ripple](core/ripple/) | :white_check_mark: | Applies press ripple on interactions | preRC
22
- | [theme](core/theme/) | :white_check_mark: | Applies ink and surface colors based on light/dark context | preRC
23
- | [transition](core/transition/) | :x: | Transitions shape and content between elements | preRC
24
-
25
- # Component Modules
26
-
27
- | Component | Integrations | CSS-Only Support | Keyboard Support | ARIA Role | ARIA Attributes | Status
28
- | :-------- | :----------: | :--------------: | :--------------: | :------: | :-------------: | :-----
29
- | [appbar](components/appbar/) | button | :white_check_mark: | N/A | :x: | :x: | beta
30
- | backdrop | | | | | | *planned*
31
- | [banner](components/banner/) | button | :white_check_mark: | N/A | :x: | :x: | beta
32
- | [bottomnav](components/bottomnav/) | bottomnavitem† overlay | :x: | :white_check_mark: | tablist | aria-multiselectable aria-orientation | RC
33
- | [bottomnavitem](components/bottomnav/item.js) | overlay ripple | :x: | :white_check_mark: | [tab](utils/aria/tab.js) | aria-selected | RC
34
- | [button](components/button/) | overlay ripple | :white_check_mark: | :white_check_mark: | [button](utils/aria/button.js) | aria-disabled‡ aria-pressed‡ | stable
35
- | [card](components/card/) | button divider | :white_check_mark: | N/A | :x: | :x: | preRC
36
- | [chip](components/chip/) | chipitem | :white_check_mark: | :x: | :x: | :x: | alpha
37
- | [chipitem](components/chip/item.js) | :x: | :x: | :x: | :x: | :x: | alpha
38
- | [datatable](components/datatable/) | button | :white_check_mark: | :white_check_mark: | grid | aria-selected | preRC
39
- | [dialog](components/dialog/) | button | :white_check_mark: | :white_check_mark: | dialog | aria-modal | preRC
40
- | [divider](components/divider/) | | :white_check_mark:| | separator‡ | | preRC
41
- | [elevation](components/elevation/) | | :white_check_mark: | | | | RC
42
- | [fab](components/fab/) | button† | :white_check_mark:| :x: |:x: | :x: | beta
43
- | [grid](components/grid/) | | :white_check_mark:| | :x: | :x: | preRC
44
- | imagelist | | | | | | *use grid*
45
- | [layout](components/layout/) | | :white_check_mark: | :x: |:x: | :x: | beta
46
- | [list](components/list/) | listitem† listexpander | :white_check_mark: | :white_check_mark: | group list listbox radiogroup tree | aria-orientation | preRC
47
- | [listcontent](components/list/content.js) | overlay ripple | :white_check_mark: | :white_check_mark: | listitem link option radio treeitem | aria-checked aria-selected | preRC
48
- | [listitem](components/list/item.js) | | :white_check_mark: | :white_check_mark: | treeitem none | aria-expanded aria-hidden | preRC
49
- | [listsecondary](components/list/secondary.js) | | :white_check_mark: | :white_check_mark: | none‡ | | preRC
50
- | [menu](components/menu/) | divider menuitem† | :white_check_mark: | :white_check_mark: | menu | aria-hidden | preRC
51
- | [menuitem](components/menu/item.js) | overlay ripple | :white_check_mark: | :white_check_mark:| menuitem menuitemradio menuitemcheckbox | aria-disabled aria-checked | stable
52
- | navdrawer | | | | | | *use layout*
53
- | [progress](components/progress/) | | :white_check_mark:| | :x: | :x: | beta
54
- | [selection](components/selection/) | | :white_check_mark: | :white_check_mark: | checkbox‡ radio‡ | aria-checked aria-disabled | preRC
55
- | sidesheet | | | | | | *use layout*
56
- | [slider](components/slider/) | | :white_check_mark: | :x: | :x: | :x: | alpha
57
- | [snackbar](components/snackbar/) | button | :white_check_mark: | :white_check_mark: | alert | aria-hidden | RC
58
- | [tab](components/tab/) | tablist tabcontent | :x: | | | | RC
59
- | [tabcontent](components/tab/content.js) | tabpanel† | :x: | :white_check_mark: | | | RC
60
- | [tabitem](components/tab/item.js) | overlay ripple | :x: | :white_check_mark: | [tab](utils/aria/tab.js) | aria-selected | RC
61
- | [tablist](components/tab/list.js) | tabitem† overlay | :x: | :white_check_mark: | tablist | aria-multiselectable aria-orientation | RC
62
- | [tabpanel](components/tab/panel.js) | | :x: | :white_check_mark: | tabpanel | aria-expanded aria-hidden | RC
63
- | [textfield](components/textfield/) | list | :white_check_mark: | :white_check_mark: | :x: | :x: | preRC
64
- | [tooltip](components/tooltip/) | | :white_check_mark: | | :x: | :x: | beta
65
- | [type](components/type/) | | :white_check_mark: | | | | RC
66
-
67
- # Adapter classes
68
- | Adapter | Components | Status
69
- | :-------- | :-- | :-
70
- | [datatable](adapters/datatable/) | button datatable† | preRC
71
- | [dom](adapters/dom/) | | preRC
72
- | [list](adapters/list/) | domadapter† listitem† | preRC
73
- | [search](adapters/search/) | list† textfield† | preRC
74
-
75
- ## Legend
76
-
77
- * planned - Planned for later
78
- * draft - Not yet functional
79
- * alpha - Partially working
80
- * beta - Working but incomplete
81
- * preRC - Needs minor changes
82
- * RC - Needs testing as-is
83
- * stable - Production-ready
84
-
85
-
86
- * † - Required
87
-
88
- * ‡ - Apply manually
23
+ ````html
24
+ <script type="module" src="https://unpkg.com/@shortfuse/materialdesignweb@0.7.0/theming/loader.js?color=6750A4&custom=yellow,orange:orange,green:0f0,alias:aqua&lightness=auto"></script>
25
+ <script type="module" src="https://unpkg.com/@shortfuse/materialdesignweb@0.7.0/components/Button.js"></script>
26
+
27
+ <mdw-button>Hello World!</mdw-button>
28
+ ````
29
+
30
+ # Support
31
+
32
+ * Unbundled: Chrome >=94
33
+ * Bundled: >1% browsers *(polyfills not included)*
34
+
35
+ # Legend
36
+
37
+ * [:paintbrush:](# "Background") - Background Theming
38
+ * [:crayon:](# "Ink") - Ink (Foreground) Theming
39
+ * [:o:](# "Outline") - Outline
40
+ * [:a:](# "Font") - Font Theming
41
+ * [:large_blue_diamond:](# "Shape") - Shape Size Theming
42
+ * [:signal_strength:](# "Density") - Density
43
+ * [:arrow_up_down:](# "Flexable") - Flexable layout
44
+ * [:wheelchair:](# "ARIA") - ARIA Role
45
+
46
+ * [:heavy_check_mark:](# "Ready") - Ready
47
+ * [:warning:](# "Issues") - Issues
48
+ * [:construction:](# "Under Construction") - Under Construction
49
+ * [:memo:](# "Planned") - Planned
50
+ * [:grey_question:](# "Unknown") - Unknown
51
+ * [:skull:](# "Not planned") - Not planned
52
+
53
+ # Components
54
+
55
+ | Component | Features | Status |
56
+ | :----------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------: |
57
+ | [Badge](components/Badge.js) | [:paintbrush:](# "Background") [:crayon:](# "Ink") [:o:](# "Outline") [:a:](# "Font") [:large_blue_diamond:](# "Shape") [:signal_strength:](# "Density") | [:heavy_check_mark:](# "Ready") |
58
+ | [Bottom App Bar](components/BottomAppBar.js) | [:paintbrush:](# "Background") [:crayon:](# "Ink") [:o:](# "Outline") [:a:](# "Font") [:large_blue_diamond:](# "Shape") [:wheelchair:](# "ARIA Toolbar") | [:heavy_check_mark:](# "Ready") |
59
+ | Bottom Sheet | | [:memo:](# "Planned") |
60
+ | [Button](components/Button.md) | [:paintbrush:](# "Background") [:crayon:](# "Ink") [:o:](# "Outline") [:a:](# "Font") [:large_blue_diamond:](# "Shape") [:signal_strength:](# "Density") [:wheelchair:](# "ARIA Button") | [:heavy_check_mark:](# "Ready") |
61
+ | [Card](components/Card.js) | [:paintbrush:](# "Background") [:crayon:](# "Ink") [:o:](# "Outline") [:a:](# "Font") [:large_blue_diamond:](# "Shape") [:arrow_up_down:](# "Flexable") [:wheelchair:](# "ARIA Figure") | [:heavy_check_mark:](# "Ready") |
62
+ | [Fab](components/Fab.js) | [:paintbrush:](# "Background") [:crayon:](# "Ink") [:o:](# "Outline") [:a:](# "Font") [:large_blue_diamond:](# "Shape") [:signal_strength:](# "Density") [:wheelchair:](# "ARIA Button") | [:heavy_check_mark:](# "Ready") |
63
+ | [Fab - Extended](components/ExtendedFab.js) | [:paintbrush:](# "Background") [:crayon:](# "Ink") [:o:](# "Outline") [:a:](# "Font") [:large_blue_diamond:](# "Shape") [:signal_strength:](# "Density") [:wheelchair:](# "ARIA Button") | [:heavy_check_mark:](# "Ready") |
64
+ | [Icon Button](components/IconButton.js) | [:paintbrush:](# "Background") [:crayon:](# "Ink") [:o:](# "Outline") [:a:](# "Font") [:large_blue_diamond:](# "Shape") [:signal_strength:](# "Density") [:wheelchair:](# "ARIA Button \| Checkbox") | [:heavy_check_mark:](# "Ready") |
65
+ | [Segmented Button](components/SegmentedButton.js) | [:paintbrush:](# "Background") [:crayon:](# "Ink") [:o:](# "Outline") [:a:](# "Font") [:large_blue_diamond:](# "Shape") [:signal_strength:](# "Density") [:wheelchair:](# "ARIA Option") | [:heavy_check_mark:](# "Ready") |
66
+ | [Segmented Button Group](components/SegmentedButtonGroup.js) | [:crayon:](# "Ink") [:wheelchair:](# "ARIA Listbox") | [:heavy_check_mark:](# "Ready") |
67
+ | [Checkbox](components/Checkbox.js) | [:paintbrush:](# "Background") [:crayon:](# "Ink") [:a:](# "Font") [:large_blue_diamond:](# "Shape") [:wheelchair:](# "ARIA Checkbox") | [:heavy_check_mark:](# "Ready") |
68
+ | [Chip](components/Chip.js) | [:paintbrush:](# "Background") [:crayon:](# "Ink") [:o:](# "Outline") [:a:](# "Font") [:large_blue_diamond:](# "Shape") [:signal_strength:](# "Density") [:wheelchair:](# "ARIA Button") | [:heavy_check_mark:](# "Ready") |
69
+ | [Chip - Filter](components/FilterChip.js) | [:paintbrush:](# "Background") [:crayon:](# "Ink") [:o:](# "Outline") [:a:](# "Font") [:large_blue_diamond:](# "Shape") [:signal_strength:](# "Density") [:wheelchair:](# "ARIA Checkbox \| Radio") | [:heavy_check_mark:](# "Ready") |
70
+ | Chip: Filter Dropdown | | [:construction:](# "Under Construction") |
71
+ | Chip: Input | | [:construction:](# "Under Construction") |
72
+ | Date Picker | | [:grey_question:](# "Unknown") |
73
+ | [Dialog](components/Dialog.js) | [:paintbrush:](# "Background") [:crayon:](# "Ink") [:o:](# "Outline") [:a:](# "Font") [:large_blue_diamond:](# "Shape") [:wheelchair:](# "ARIA Dialog") | [:heavy_check_mark:](# "Ready") |
74
+ | Dialog: Full-screen | | [:grey_question:](# "Unknown") |
75
+ | [Divider](components/Divider.js) | [:crayon:](# "Ink") | [:heavy_check_mark:](# "Ready") |
76
+ | [Icon](components/Icon.js) | [:crayon:](# "Ink") | [:heavy_check_mark:](# "Ready") |
77
+ | [List](components/List.js) | [:paintbrush:](# "Background") [:crayon:](# "Ink") [:signal_strength:](# "Density") [:wheelchair:](# "ARIA List") | [:heavy_check_mark:](# "Ready") |
78
+ | [List Select](components/ListSelect.js) | [:paintbrush:](# "Background") [:crayon:](# "Ink") [:signal_strength:](# "Density") [:wheelchair:](# "ARIA Option") | [:heavy_check_mark:](# "Ready") |
79
+ | [Menu](components/Menu.js) | [:paintbrush:](# "Background") [:crayon:](# "Ink") [:o:](# "Outline") [:signal_strength:](# "Density") [:wheelchair:](# "ARIA Menu") | [:heavy_check_mark:](# "Ready") |
80
+ | [Navigation Bar](components/NavBar.js) | [:paintbrush:](# "Background") [:crayon:](# "Ink") [:o:](# "Outline") [:large_blue_diamond:](# "Shape") [:wheelchair:](# "ARIA Nav") | [:heavy_check_mark:](# "Ready") |
81
+ | [Navigation Drawer](components/NavDrawer.js) | [:paintbrush:](# "Background") [:crayon:](# "Ink") [:o:](# "Outline") [:large_blue_diamond:](# "Shape") [:wheelchair:](# "ARIA Nav") | [:construction:](# "Under Construction") |
82
+ | [Navigation Rail](components/NavDrawer.js) | [:paintbrush:](# "Background") [:crayon:](# "Ink") [:o:](# "Outline") [:large_blue_diamond:](# "Shape") [:wheelchair:](# "ARIA Nav") | [:heavy_check_mark:](# "Ready") |
83
+ | [Progress Indicators](components/Progress.js) | [:crayon:](# "Ink") [:wheelchair:](# "ARIA Progress") | [:heavy_check_mark:](# "Ready") |
84
+ | Search | | [:memo:](# "Planned") |
85
+ | [Radio](components/Radio.js) | [:crayon:](# "Ink") [:a:](# "Font") [:large_blue_diamond:](# "Shape") [:wheelchair:](# "ARIA Radio") | [:heavy_check_mark:](# "Ready") |
86
+ | [Slider](components/Slider.js) | [:crayon:](# "Ink") [:wheelchair:](# "ARIA Slider") | [:warning:](# "Issues") |
87
+ | [Snackbar](components/Snackbar.js) | [:paintbrush:](# "Background") [:crayon:](# "Ink") [:o:](# "Outline") [:large_blue_diamond:](# "Shape") [:signal_strength:](# "Density") [:wheelchair:](# "ARIA Status") | [:heavy_check_mark:](# "Ready") |
88
+ | [Switch](components/Switch.js) | [:paintbrush:](# "Background") [:crayon:](# "Ink") [:a:](# "Font") [:wheelchair:](# "ARIA Switch") | [:heavy_check_mark:](# "Ready") |
89
+ | [Surface](components/Surface.js) | [:paintbrush:](# "Background") [:crayon:](# "Ink") [:o:](# "Outline") [:a:](# "Font") [:large_blue_diamond:](# "Shape") [:arrow_up_down:](# "Flexable") | [:heavy_check_mark:](# "Ready") |
90
+ | [Tab](components/Tab.js) | [:paintbrush:](# "Background") [:crayon:](# "Ink") [:o:](# "Outline") [:large_blue_diamond:](# "Shape") [:wheelchair:](# "ARIA Tab List \| Tab \| Tab Panel") | [:heavy_check_mark:](# "Ready") |
91
+ | [Text Input](components/Input.js) | [:paintbrush:](# "Background") [:crayon:](# "Ink") [:o:](# "Outline") [:a:](# "Font") [:large_blue_diamond:](# "Shape") [:signal_strength:](# "Density") [:wheelchair:](# "ARIA Textbox") | [:heavy_check_mark:](# "Ready") |
92
+ | [Text Area](components/TextArea.js) | [:paintbrush:](# "Background") [:crayon:](# "Ink") [:o:](# "Outline") [:a:](# "Font") [:large_blue_diamond:](# "Shape") [:signal_strength:](# "Density") [:wheelchair:](# "ARIA Textarea") | [:heavy_check_mark:](# "Ready") |
93
+ | [Text Select](components/Select.js) | [:paintbrush:](# "Background") [:crayon:](# "Ink") [:o:](# "Outline") [:a:](# "Font") [:large_blue_diamond:](# "Shape") [:signal_strength:](# "Density") [:wheelchair:](# "ARIA Combobox") | [:heavy_check_mark:](# "Ready") |
94
+ | Time Picker | | [:grey_question:](# "Unknown") |
95
+ | [Tooltip](components/Tooltip.js) | [:paintbrush:](# "Background") [:crayon:](# "Ink") [:o:](# "Outline") [:large_blue_diamond:](# "Shape") [:wheelchair:](# "ARIA Tooltip") | [:heavy_check_mark:](# "Ready") |
96
+ | [Top App Bar](components/TopAppBar.js) | [:paintbrush:](# "Background") [:crayon:](# "Ink") [:o:](# "Outline") [:a:](# "Font") [:large_blue_diamond:](# "Shape") [:signal_strength:](# "Density") [:arrow_up_down:](# "Flexable") [:wheelchair:](# "ARIA") | [:heavy_check_mark:](# "Ready") |
97
+
98
+ # Additional
99
+
100
+ | Component | Description | Status |
101
+ | :--------------------------------- | :-------------------------------------------------- | :--------------------------------------: |
102
+ | [Box](components/Box.js) | Simple themeable component with Flexbox options | [:heavy_check_mark:](# "Ready") |
103
+ | [Layout](components/Layout.js) | Manages page nav, and pane layouts | [:construction:](# "Under Construction") |
104
+ | [Pane](components/Pane.js) | 12-column pane layout | [:construction:](# "Under Construction") |
105
+ | [Icon](components/Icon.js) | Font-icon, SVG, and IMG support | [:construction:](# "Under Construction") |
106
+ | [Body](components/Body.js) | Box with Body typography | [:heavy_check_mark:](# "Ready") |
107
+ | [Label](components/Label.js) | Box with Label typography | [:heavy_check_mark:](# "Ready") |
108
+ | [Headline](components/Headline.js) | Box with Headline typography | [:heavy_check_mark:](# "Ready") |
109
+ | [Title](components/Title.js) | Box with Title typography | [:heavy_check_mark:](# "Ready") |
110
+ | [Ripple](components/Ripple.js) | Ripple effect | [:heavy_check_mark:](# "Ready") |
111
+ | [Surface](components/Surface.js) | Themeable, flexable, shapeable, elevateable element | [:heavy_check_mark:](# "Ready") |
112
+
113
+
114
+ # Mixins
115
+
116
+ | Component | Description | Status |
117
+ | :----------------------------------------------- | :----------------------------------------------- | :--------------------------------------: |
118
+ | [ARIA Reflector](mixins/AriaReflectorMixin.js) | Reflects ARIA Properties | [:heavy_check_mark:](# "Ready") |
119
+ | [ARIA Toolbar](mixins/AriaToolbarMixin.js) | Shared ARIA Toolbar functionality | [:heavy_check_mark:](# "Ready") |
120
+ | [Control](mixins/ControlMixin.js) | HTML Control wrapper | [:heavy_check_mark:](# "Ready") |
121
+ | [Density](mixins/DensityMixin.js) | Component density options | [:heavy_check_mark:](# "Ready") |
122
+ | [Flexable](mixins/FlexableMixin.js) | Add flexbox options as attributes | [:heavy_check_mark:](# "Ready") |
123
+ | [Form Associated](mixins/FormAssociatedMixin.js) | Form-associated custom element support | [:heavy_check_mark:](# "Ready") |
124
+ | [Input](mixins/InputMixin.js) | HTMLInputElement wrapper | [:heavy_check_mark:](# "Ready") |
125
+ | [Keyboard Nav](mixins/KeyboardNavMixin.js) | Adds arrow key navigation and roving tab index | [:warning:](# "Issues") |
126
+ | [Resize Observer](mixins/ResizeObserverMixin.js) | Shared Eelement resize observer | [:heavy_check_mark:](# "Ready") |
127
+ | [Ripple](mixins/RippleMixin.js) | Replaces pressed state with ripple effect | [:heavy_check_mark:](# "Ready") |
128
+ | [RTL Observer](mixins/RTLObserverMixin.js) | Shared RTL paoge observer | [:heavy_check_mark:](# "Ready") |
129
+ | [Scroll Listener](mixins/ScrollListenerMixin.js) | Listen for horizontal and vertical scroll events | [:heavy_check_mark:](# "Ready") |
130
+ | [Shape](mixins/ShapeMixin.js) | Adds shape and outline layer to elements | [:warning:](# "Issues") |
131
+ | [Surface](mixins/ShapeMixin.js) | Adds elevation tint and shadows to elements | [:warning:](# "Issues") |
132
+ | [Text Field](mixins/TextFieldMixin.js) | Shared text field functionality | [:heavy_check_mark:](# "Ready") |
133
+ | [Tooltip Trigger](mixins/TooltipTriggerMixin.js) | Triggers tooltips based on events | [:construction:](# "Under Construction") |
134
+ | [Touch Target](mixins/TouchTargetMixin.js) | Adds extended touch target to controls | [:construction:](# "Under Construction") |
135
+
136
+ # Core
137
+
138
+ | File | Description | Status |
139
+ | :------------------------------------- | :------------------------------------------------------------------------- | :--------------------------------------: |
140
+ | [Composition](core/Composition.js) | Composes templates based on styles, fragments, and watches. Renders data | [:construction:](# "Under Construction") |
141
+ | [CustomElement](core/CustomElement.js) | Handles ShadowDOM, ElementInternals, Property attributes, and compositions | [:construction:](# "Under Construction") |
142
+ | [css](core/css.js) | CSS, CSSStyleSheet, HTMLStyleElement functions | [:heavy_check_mark:](# "Ready") |
143
+ | [customTypes](core/customTypes.js) | Non-primitive observable types | [:construction:](# "Under Construction") |
144
+ | [dom](core/dom.js) | DOM functions | [:warning:](# "Issues") |
145
+ | [identify](core/identify.js) | Node identification functions | [:construction:](# "Under Construction") |
146
+ | [observe](core/observe.js) | Observable pattern for primitives and objects | [:construction:](# "Under Construction") |
147
+ | [template](core/template.js) | Template literals for CSS (CSSStyleSheet) and HTML (DocumentFragment) | [:heavy_check_mark:](# "Ready") |
148
+
149
+
150
+ # Other Components
151
+
152
+ These components do not have official M3 guidelines
153
+
154
+ | Component | Status |
155
+ | :----------- | :--------------------------------------: |
156
+ | ~~Backdrop~~ | [:skull:](# "Not planned") |
157
+ | Banner | [:construction:](# "Under Construction") |
158
+ | Data Table | [:memo:](# "Planned") |
159
+ | Image List | [:grey_question:](# "Unknown") |
160
+ | Side Sheet | [:grey_question:](# "Unknown") |
161
+
162
+ # Archive
163
+
164
+ The Material Design 1/2 version has been archived in the [`archive-md2`](https://github.com/clshortfuse/materialdesignweb/tree/archive-md2) branch.
@@ -0,0 +1,12 @@
1
+ import { generateLayoutGlobalCSS, generateThemeCSS, generateTypographyGlobalCSS, themeOptionsFromSearchParams } from '../theming/index.js';
2
+ import { getSearchParams } from '../utils/cli.js';
3
+
4
+ process.stdout.write(
5
+ generateThemeCSS(
6
+ themeOptionsFromSearchParams(
7
+ getSearchParams(),
8
+ ),
9
+ ),
10
+ );
11
+ process.stdout.write(generateTypographyGlobalCSS());
12
+ process.stdout.write(generateLayoutGlobalCSS());
@@ -0,0 +1,30 @@
1
+ :host {
2
+ --mdw-shape__size: 8px;
3
+ --mdw-ink: var(--mdw-color__on-error);
4
+ --mdw-shape__bg: rgb(var(--mdw-color__error));
5
+ --mdw-type__font: var(--mdw-typescale__label-small__font);
6
+ --mdw-type__letter-spacing: var(--mdw-typescale__label-small__letter-spacing);
7
+ position: relative;
8
+
9
+ box-sizing: border-box;
10
+ min-block-size: var(--mdw-typescale__label-small__line-height);
11
+ min-inline-size: var(--mdw-typescale__label-small__line-height);
12
+ padding-inline: max(4px, calc(4px + (var(--mdw-density) * 2px)));
13
+
14
+ color: rgb(var(--mdw-ink));
15
+
16
+ font: var(--mdw-type__font);
17
+ letter-spacing: var(--mdw-type__letter-spacing);
18
+ text-align: center;
19
+ }
20
+
21
+ @supports (width: 1lh) {
22
+ :host {
23
+ min-inline-size: 1lh; /* Clamps to 1:1 */
24
+ padding-inline: max(0.25lh, calc(0.25lh + (var(--mdw-density) * 2px)));
25
+ }
26
+ }
27
+
28
+ :host(:empty) #shape {
29
+ inset: 5px;
30
+ }
@@ -0,0 +1,15 @@
1
+ import CustomElement from '../core/CustomElement.js';
2
+ import DensityMixin from '../mixins/DensityMixin.js';
3
+ import ShapeMixin from '../mixins/ShapeMixin.js';
4
+ import ThemableMixin from '../mixins/ThemableMixin.js';
5
+
6
+ import styles from './Badge.css' assert { type: 'css'};
7
+
8
+ export default CustomElement
9
+ .mixin(ThemableMixin)
10
+ .mixin(DensityMixin)
11
+ .mixin(ShapeMixin)
12
+ .extend()
13
+ .css(styles)
14
+ .html/* html */`<slot id=slot></slot>`
15
+ .autoRegister('mdw-badge');
@@ -0,0 +1,14 @@
1
+ :host {
2
+ font: var(--mdw-typescale__body-large__font);
3
+ letter-spacing: var(--mdw-typescale__body-large__letter-spacing);
4
+ }
5
+
6
+ :host([size="medium"]) {
7
+ font: var(--mdw-typescale__body-medium__font);
8
+ letter-spacing: var(--mdw-typescale__body-medium__letter-spacing);
9
+ }
10
+
11
+ :host([size="small"]) {
12
+ font: var(--mdw-typescale__body-small__font);
13
+ letter-spacing: var(--mdw-typescale__body-small__letter-spacing);
14
+ }
@@ -0,0 +1,7 @@
1
+ import styles from './Body.css' assert { type: 'css' };
2
+ import Box from './Box.js';
3
+
4
+ export default Box
5
+ .extend()
6
+ .css(styles)
7
+ .autoRegister('mdw-body');
@@ -0,0 +1,23 @@
1
+ /* https://m3.material.io/components/bottom-app-bar/specs */
2
+
3
+ :host {
4
+ --mdw-surface__tint: var(--mdw-surface__tint__2);
5
+ --mdw-surface__tint__raised: var(--mdw-surface__tint__2);
6
+ --mdw-bg: var(--mdw-color__surface);
7
+ --mdw-ink: var(--mdw-color__on-surface);
8
+
9
+ display: flex;
10
+ align-items: center;
11
+ gap: 8px;
12
+ justify-content: flex-start;
13
+
14
+ box-sizing: content-box;
15
+ /* Don't apply density */
16
+ block-size: 56px;
17
+ padding-block: 12px;
18
+ padding-inline: 8px 16px;
19
+
20
+ box-shadow: none;
21
+
22
+ direction: ltr;
23
+ }
@@ -0,0 +1,25 @@
1
+ import AriaReflectorMixin from '../mixins/AriaReflectorMixin.js';
2
+ import AriaToolbarMixin from '../mixins/AriaToolbarMixin.js';
3
+
4
+ import styles from './BottomAppBar.css' assert { type: 'css' };
5
+ import Surface from './Surface.js';
6
+
7
+ /**
8
+ * Note: FAB does not exist inside because FABs can appear outside.
9
+ * Space will be maintained for the FAB to slide into position. FAB should be
10
+ * next on the DOM, so users can logically tab to it.
11
+ */
12
+
13
+ export default Surface
14
+ .mixin(AriaToolbarMixin)
15
+ .mixin(AriaReflectorMixin)
16
+ .extend()
17
+ .set({
18
+ elevated: true,
19
+ _ariaRole: 'toolbar',
20
+ })
21
+ .observe({
22
+ color: { empty: 'surface' },
23
+ })
24
+ .css(styles)
25
+ .autoRegister('mdw-bottom-app-bar');
@@ -0,0 +1,31 @@
1
+ :host {
2
+ display: block;
3
+ }
4
+
5
+ :host([inline]) {
6
+ display: inline-block;
7
+ }
8
+
9
+ :host([flex]:where([inline])) {
10
+ display: inline-flex;
11
+ }
12
+
13
+ :host([color]) {
14
+ background-color: rgb(var(--mdw-bg));
15
+ color: rgb(var(--mdw-ink));
16
+ }
17
+
18
+ :host([ink]) {
19
+ color: rgb(var(--mdw-ink));
20
+ }
21
+
22
+ :host([type-style]) {
23
+ font: var(--mdw-type__font);
24
+ letter-spacing: var(--mdw-type__letter-spacing);
25
+ }
26
+
27
+ #slot {
28
+ /* Passthrough from parent */
29
+ block-size: inherit;
30
+ inline-size: inherit;
31
+ }
@@ -0,0 +1,24 @@
1
+ import CustomElement from '../core/CustomElement.js';
2
+ import FlexableMixin from '../mixins/FlexableMixin.js';
3
+ import ThemableMixin from '../mixins/ThemableMixin.js';
4
+
5
+ import styles from './Box.css' assert { type: 'css' };
6
+
7
+ /**
8
+ * Containers are stateless elements that may have a color and ink.
9
+ * They should have simple geometry for rendering and layout.
10
+ */
11
+ export default CustomElement
12
+ .mixin(ThemableMixin)
13
+ .mixin(FlexableMixin)
14
+ .extend()
15
+ .observe({
16
+ inline: 'boolean',
17
+ block: {
18
+ type: 'boolean',
19
+ empty: true,
20
+ },
21
+ })
22
+ .css(styles)
23
+ .html/* html */`<slot id=slot type-style={typeStyle}></slot>`
24
+ .autoRegister('mdw-box');
@@ -0,0 +1,146 @@
1
+ /* https://m3.material.io/components/buttons/specs */
2
+
3
+ :host {
4
+ --mdw-shape__size: var(--mdw-shape__full);
5
+ --mdw-ink: var(--mdw-color__primary);
6
+
7
+ --mdw-type__font: var(--mdw-typescale__label-large__font);
8
+ --mdw-type__letter-spacing: var(--mdw-typescale__label-large__letter-spacing);
9
+
10
+ display: inline-flex;
11
+
12
+ align-items: center;
13
+ gap: 0;
14
+ justify-content: center;
15
+
16
+ /* box-sizing: border-box; */
17
+ min-block-size: 24px;
18
+ min-inline-size: 24px;
19
+
20
+ padding-block: calc(8px + (var(--mdw-density) * 2px));
21
+ padding-inline: calc(12px + (var(--mdw-density) * 2px));
22
+
23
+ -webkit-tap-highlight-color: transparent;
24
+ -webkit-user-select: none;
25
+ user-select: none;
26
+
27
+ color: rgb(var(--mdw-ink));
28
+
29
+ font: var(--mdw-type__font);
30
+ letter-spacing: var(--mdw-type__letter-spacing);
31
+ }
32
+
33
+ :host(:where([elevated],[filled])) {
34
+ will-change: filter;
35
+ }
36
+
37
+ /** Elevated Color Defaults */
38
+ :host(:where([elevated])) {
39
+ --mdw-bg: var(--mdw-color__surface);
40
+ --mdw-ink: var(--mdw-color__primary);
41
+ --mdw-surface__shadow__resting: var(--mdw-surface__shadow__1);
42
+ --mdw-surface__shadow__raised: var(--mdw-surface__shadow__2);
43
+ --mdw-surface__tint: var(--mdw-surface__tint__1);
44
+ --mdw-surface__tint__raised: var(--mdw-surface__tint__2);
45
+ }
46
+ /** Filled Color Defaults */
47
+ :host(:where([filled])) {
48
+ --mdw-bg: var(--mdw-color__primary);
49
+ --mdw-ink: var(--mdw-color__on-primary);
50
+ --mdw-surface__shadow__resting: var(--mdw-surface__shadow__0);
51
+ --mdw-surface__shadow__raised: var(--mdw-surface__shadow__1);
52
+ --mdw-surface__tint: 0;
53
+ --mdw-surface__tint__raised: var(--mdw-surface__tint__1);
54
+ }
55
+ /** Filled Tonal Color Defaults */
56
+ :host(:where([filled="tonal"])) {
57
+ --mdw-bg: var(--mdw-color__secondary-container);
58
+ --mdw-ink: var(--mdw-color__on-secondary-container);
59
+ }
60
+ /** Outlined Color Defaults */
61
+ :host(:where([outlined])) {
62
+ --mdw-ink: var(--mdw-color__primary);
63
+ }
64
+
65
+ :host(:where([icon])) {
66
+ gap: 8px;
67
+
68
+ padding-inline: calc(12px + (var(--mdw-density) * 2px)) calc(16px + (var(--mdw-density) * 2px));
69
+ }
70
+
71
+ :host(:where([outlined], [elevated], [filled])) {
72
+ padding-inline: calc(24px + (var(--mdw-density) * 2px));
73
+ }
74
+
75
+ :host(:where([icon]):where([outlined], [elevated], [filled])) {
76
+ gap: 8px;
77
+
78
+ padding-inline: calc(16px + (var(--mdw-density) * 2px)) calc(24px + (var(--mdw-density) * 2px));
79
+ }
80
+
81
+ #shape:where([elevated],[filled],[color]) {
82
+ background-color: rgb(var(--mdw-bg));
83
+ }
84
+
85
+ #slot {
86
+ text-align: center;
87
+ text-decoration: none;
88
+ white-space: nowrap;
89
+ }
90
+
91
+ #control {
92
+ cursor: inherit;
93
+ }
94
+
95
+ :host([disabled]) {
96
+ /* cursor: not-allowed; */
97
+
98
+ color: rgba(var(--mdw-color__on-surface), 0.38);
99
+ }
100
+
101
+ #shape[disabled]:is([elevated], [filled]) {
102
+ background-color: rgba(var(--mdw-color__on-surface), 0.12);
103
+ color: rgba(var(--mdw-color__on-surface), 0.38);
104
+ }
105
+
106
+ #slot[disabled] {
107
+ color: rgba(var(--mdw-color__on-surface), 0.38);
108
+ }
109
+
110
+ #icon {
111
+ font-size: calc(18/14 * 1em);
112
+ font-variation-settings: 'FILL' 1;
113
+ }
114
+
115
+ #icon[outlined] {
116
+ font-variation-settings: 'FILL' 0;
117
+ }
118
+
119
+ #icon[disabled] {
120
+ opacity: 0.38;
121
+
122
+ color: rgba(var(--mdw-color__on-surface));
123
+ }
124
+
125
+ #label {
126
+ cursor: pointer;
127
+ }
128
+
129
+ #label[disabled] {
130
+ cursor: not-allowed;
131
+ }
132
+
133
+ /*
134
+ @media screen and (max-resolution: 0.75dppx) { #touch-target { --mdw-device-pixel-ratio: 0.75; } }
135
+ @media screen and (max-resolution: 0.85dppx) { #touch-target { --mdw-device-pixel-ratio: 0.90; } }
136
+ @media screen and (max-resolution: 0.90dppx) { #touch-target { --mdw-device-pixel-ratio: 0.90; } }
137
+ @media screen and (min-resolution: 1.5dppx) { #touch-target { --mdw-device-pixel-ratio: 1.5; } }
138
+ @media screen and (min-resolution: 1.75dppx) { #touch-target { --mdw-device-pixel-ratio: 1.75; } }
139
+ @media screen and (min-resolution: 2dppx) { #touch-target { --mdw-device-pixel-ratio: 2; } }
140
+ */
141
+
142
+ @media (any-pointer: coarse) {
143
+ #touch-target {
144
+ visibility: visible;
145
+ }
146
+ }