@shortfuse/materialdesignweb 0.5.0 → 0.7.1-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 (419) hide show
  1. package/README.md +155 -77
  2. package/bin/generate-css.js +12 -0
  3. package/components/Badge.css +38 -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 +147 -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 +89 -0
  17. package/components/Checkbox.js +59 -0
  18. package/components/CheckboxIcon.css +90 -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 +150 -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 +75 -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 +95 -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 +307 -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 +64 -0
  101. package/components/Switch.js +127 -0
  102. package/components/SwitchIcon.css +178 -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 -154
  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/index.js +77 -0
  132. package/mixins/AriaReflectorMixin.js +42 -0
  133. package/mixins/AriaToolbarMixin.js +13 -0
  134. package/mixins/ControlMixin.css +57 -0
  135. package/mixins/ControlMixin.js +212 -0
  136. package/mixins/DensityMixin.css +40 -0
  137. package/mixins/DensityMixin.js +11 -0
  138. package/mixins/FlexableMixin.css +79 -0
  139. package/mixins/FlexableMixin.js +32 -0
  140. package/mixins/FormAssociatedMixin.js +170 -0
  141. package/mixins/InputMixin.js +335 -0
  142. package/mixins/KeyboardNavMixin.js +244 -0
  143. package/mixins/RTLObserverMixin.js +35 -0
  144. package/mixins/ResizeObserverMixin.js +38 -0
  145. package/mixins/RippleMixin.css +12 -0
  146. package/mixins/RippleMixin.js +115 -0
  147. package/mixins/ScrollListenerMixin.js +100 -0
  148. package/mixins/ShapeMixin.css +135 -0
  149. package/mixins/ShapeMixin.js +31 -0
  150. package/mixins/StateMixin.css +82 -0
  151. package/mixins/StateMixin.js +114 -0
  152. package/mixins/SurfaceMixin.css +150 -0
  153. package/mixins/SurfaceMixin.js +32 -0
  154. package/mixins/TextFieldMixin.css +657 -0
  155. package/mixins/TextFieldMixin.js +121 -0
  156. package/mixins/ThemableMixin.css +204 -0
  157. package/mixins/ThemableMixin.js +16 -0
  158. package/mixins/TooltipTriggerMixin.css +27 -0
  159. package/mixins/TooltipTriggerMixin.js +366 -0
  160. package/mixins/TouchTargetMixin.css +26 -0
  161. package/mixins/TouchTargetMixin.js +9 -0
  162. package/package.json +55 -49
  163. package/theming/index.js +473 -0
  164. package/theming/loader.js +24 -0
  165. package/utils/cli.js +11 -0
  166. package/utils/color_keywords.js +151 -0
  167. package/utils/hct/Cam16.js +298 -0
  168. package/utils/hct/CorePalette.js +84 -0
  169. package/utils/hct/Hct.js +172 -0
  170. package/utils/hct/Scheme.js +587 -0
  171. package/utils/hct/TonalPalette.js +68 -0
  172. package/utils/hct/ViewingConditions.js +136 -0
  173. package/utils/hct/blend.js +93 -0
  174. package/utils/hct/colorUtils.js +302 -0
  175. package/utils/hct/hctSolver.js +559 -0
  176. package/utils/hct/helper.js +182 -0
  177. package/utils/hct/mathUtils.js +153 -0
  178. package/utils/jsonMergePatch.js +100 -0
  179. package/utils/jsx-runtime.js +101 -0
  180. package/utils/popup.js +117 -0
  181. package/utils/svg.js +12 -0
  182. package/.browserslistrc +0 -4
  183. package/.eslintrc.json +0 -204
  184. package/.stylelintrc.json +0 -645
  185. package/.vscode/launch.json +0 -31
  186. package/.vscode/settings.json +0 -3
  187. package/.vscode/tasks.json +0 -32
  188. package/CHANGELOG.md +0 -36
  189. package/CODE_OF_CONDUCT.md +0 -46
  190. package/adapters/datatable/column.js +0 -176
  191. package/adapters/datatable/index.js +0 -960
  192. package/adapters/dom/index.js +0 -586
  193. package/adapters/list/index.js +0 -69
  194. package/adapters/search/index.js +0 -495
  195. package/components/appbar/_spec.scss +0 -165
  196. package/components/appbar/_theme.scss +0 -0
  197. package/components/appbar/index.scss +0 -2
  198. package/components/banner/_spec.scss +0 -83
  199. package/components/banner/_theme.scss +0 -0
  200. package/components/banner/index.scss +0 -2
  201. package/components/bottomnav/README.md +0 -85
  202. package/components/bottomnav/_spec.scss +0 -149
  203. package/components/bottomnav/_theme.scss +0 -0
  204. package/components/bottomnav/index.js +0 -117
  205. package/components/bottomnav/index.scss +0 -2
  206. package/components/bottomnav/item.js +0 -88
  207. package/components/button/README.md +0 -61
  208. package/components/button/_spec.scss +0 -162
  209. package/components/button/_theme.scss +0 -42
  210. package/components/button/index.eta +0 -32
  211. package/components/button/index.js +0 -43
  212. package/components/button/index.pug +0 -18
  213. package/components/button/index.scss +0 -2
  214. package/components/card/_spec.scss +0 -241
  215. package/components/card/_theme.scss +0 -0
  216. package/components/card/index.scss +0 -2
  217. package/components/chip/_spec.scss +0 -111
  218. package/components/chip/_theme.scss +0 -105
  219. package/components/chip/index.js +0 -23
  220. package/components/chip/index.scss +0 -2
  221. package/components/chip/item.js +0 -20
  222. package/components/datatable/_spec.scss +0 -225
  223. package/components/datatable/_theme.scss +0 -128
  224. package/components/datatable/cell.js +0 -44
  225. package/components/datatable/columnheader.js +0 -46
  226. package/components/datatable/index.js +0 -374
  227. package/components/datatable/index.scss +0 -2
  228. package/components/datatable/row.js +0 -48
  229. package/components/datatable/rowheader.js +0 -18
  230. package/components/dialog/_spec.scss +0 -203
  231. package/components/dialog/_theme.scss +0 -7
  232. package/components/dialog/index.js +0 -601
  233. package/components/dialog/index.scss +0 -2
  234. package/components/divider/_spec.scss +0 -11
  235. package/components/divider/_theme.scss +0 -0
  236. package/components/divider/index.scss +0 -2
  237. package/components/elevation/_spec.scss +0 -9
  238. package/components/elevation/_theme.scss +0 -0
  239. package/components/elevation/index.scss +0 -2
  240. package/components/fab/_spec.scss +0 -210
  241. package/components/fab/_theme.scss +0 -0
  242. package/components/fab/index.js +0 -99
  243. package/components/fab/index.scss +0 -2
  244. package/components/grid/_spec.scss +0 -169
  245. package/components/grid/_theme.scss +0 -0
  246. package/components/grid/index.scss +0 -2
  247. package/components/layout/_mixins.scss +0 -11
  248. package/components/layout/_spec.scss +0 -916
  249. package/components/layout/_theme.scss +0 -19
  250. package/components/layout/index.js +0 -454
  251. package/components/layout/index.scss +0 -2
  252. package/components/list/_spec.scss +0 -363
  253. package/components/list/_theme.scss +0 -102
  254. package/components/list/content.js +0 -106
  255. package/components/list/index.js +0 -256
  256. package/components/list/index.scss +0 -2
  257. package/components/list/item.js +0 -167
  258. package/components/list/secondary.js +0 -45
  259. package/components/menu/_spec.scss +0 -329
  260. package/components/menu/_theme.scss +0 -0
  261. package/components/menu/index.js +0 -705
  262. package/components/menu/index.scss +0 -2
  263. package/components/menu/item.js +0 -231
  264. package/components/progress/_spec.scss +0 -156
  265. package/components/progress/_theme.scss +0 -0
  266. package/components/progress/index.js +0 -36
  267. package/components/progress/index.scss +0 -2
  268. package/components/selection/_spec.scss +0 -376
  269. package/components/selection/_theme.scss +0 -134
  270. package/components/selection/index.eta +0 -60
  271. package/components/selection/index.js +0 -70
  272. package/components/selection/index.pug +0 -30
  273. package/components/selection/index.scss +0 -2
  274. package/components/selection/input.js +0 -54
  275. package/components/selection/radiogroup.js +0 -40
  276. package/components/slider/_spec.scss +0 -59
  277. package/components/slider/_theme.scss +0 -0
  278. package/components/slider/index.scss +0 -2
  279. package/components/snackbar/_spec.scss +0 -150
  280. package/components/snackbar/_theme.scss +0 -0
  281. package/components/snackbar/index.js +0 -338
  282. package/components/snackbar/index.scss +0 -2
  283. package/components/tab/_spec.scss +0 -220
  284. package/components/tab/_theme.scss +0 -0
  285. package/components/tab/content.js +0 -210
  286. package/components/tab/index.js +0 -257
  287. package/components/tab/index.scss +0 -2
  288. package/components/tab/item.js +0 -88
  289. package/components/tab/list.js +0 -196
  290. package/components/tab/panel.js +0 -54
  291. package/components/textfield/README.md +0 -179
  292. package/components/textfield/_spec.scss +0 -763
  293. package/components/textfield/_theme.scss +0 -264
  294. package/components/textfield/index.eta +0 -74
  295. package/components/textfield/index.js +0 -160
  296. package/components/textfield/index.pug +0 -30
  297. package/components/textfield/index.scss +0 -2
  298. package/components/tooltip/_spec.scss +0 -185
  299. package/components/tooltip/_theme.scss +0 -0
  300. package/components/tooltip/index.scss +0 -2
  301. package/components/type/_spec.scss +0 -227
  302. package/components/type/_theme.scss +0 -0
  303. package/components/type/index.scss +0 -2
  304. package/core/_breakpoint.scss +0 -189
  305. package/core/_elevation.scss +0 -78
  306. package/core/_length.scss +0 -8
  307. package/core/_motion.scss +0 -31
  308. package/core/_platform.scss +0 -12
  309. package/core/_type.scss +0 -128
  310. package/core/aria/attributes.js +0 -141
  311. package/core/aria/button.js +0 -49
  312. package/core/aria/keyboard.js +0 -92
  313. package/core/aria/rovingtabindex.js +0 -175
  314. package/core/aria/tab.js +0 -59
  315. package/core/document/index.js +0 -39
  316. package/core/overlay/_spec.scss +0 -28
  317. package/core/overlay/_theme.scss +0 -147
  318. package/core/overlay/index.js +0 -95
  319. package/core/overlay/index.scss +0 -2
  320. package/core/ripple/_spec.scss +0 -196
  321. package/core/ripple/_theme.scss +0 -20
  322. package/core/ripple/index.js +0 -286
  323. package/core/ripple/index.scss +0 -2
  324. package/core/theme/_aliases.scss +0 -15
  325. package/core/theme/_config.scss +0 -8
  326. package/core/theme/_functions.scss +0 -22
  327. package/core/theme/_palettes.scss +0 -405
  328. package/core/theme/_spec.scss +0 -0
  329. package/core/theme/_theme.scss +0 -268
  330. package/core/theme/index.js +0 -50
  331. package/core/theme/index.scss +0 -4
  332. package/core/throttler.js +0 -42
  333. package/core/transition/index.js +0 -465
  334. package/docs/_flex.scss +0 -28
  335. package/docs/_menuoptions.js +0 -183
  336. package/docs/_partials/_androidnavbar.eta +0 -5
  337. package/docs/_partials/_androidstatusbar.eta +0 -13
  338. package/docs/_partials/_appbar.eta +0 -27
  339. package/docs/_partials/_buttontest.eta +0 -31
  340. package/docs/_partials/_header.eta +0 -146
  341. package/docs/_partials/_navlistitem.eta +0 -16
  342. package/docs/_partials/_target.eta +0 -1
  343. package/docs/_sample-utils.js +0 -88
  344. package/docs/_storage.js +0 -33
  345. package/docs/docs.scss +0 -331
  346. package/docs/framework.scss +0 -26
  347. package/docs/index.eta +0 -12
  348. package/docs/index.js +0 -7
  349. package/docs/pages/appbar.eta +0 -108
  350. package/docs/pages/appbar.js +0 -0
  351. package/docs/pages/bottomnav.eta +0 -188
  352. package/docs/pages/bottomnav.js +0 -118
  353. package/docs/pages/button.eta +0 -124
  354. package/docs/pages/button.js +0 -224
  355. package/docs/pages/card.eta +0 -90
  356. package/docs/pages/card.js +0 -175
  357. package/docs/pages/chip.eta +0 -122
  358. package/docs/pages/chip.js +0 -80
  359. package/docs/pages/color.eta +0 -143
  360. package/docs/pages/color.js +0 -261
  361. package/docs/pages/datatable.eta +0 -323
  362. package/docs/pages/datatable.js +0 -160
  363. package/docs/pages/dialog.eta +0 -184
  364. package/docs/pages/dialog.js +0 -174
  365. package/docs/pages/dom.eta +0 -26
  366. package/docs/pages/dom.js +0 -140
  367. package/docs/pages/elevation.eta +0 -35
  368. package/docs/pages/elevation.js +0 -0
  369. package/docs/pages/fab.eta +0 -99
  370. package/docs/pages/fab.js +0 -43
  371. package/docs/pages/grid.eta +0 -135
  372. package/docs/pages/grid.js +0 -128
  373. package/docs/pages/layout.eta +0 -8
  374. package/docs/pages/layout.js +0 -0
  375. package/docs/pages/list.eta +0 -465
  376. package/docs/pages/list.js +0 -8
  377. package/docs/pages/menu.eta +0 -274
  378. package/docs/pages/menu.js +0 -213
  379. package/docs/pages/overlay.eta +0 -69
  380. package/docs/pages/overlay.js +0 -3
  381. package/docs/pages/progress.eta +0 -23
  382. package/docs/pages/progress.js +0 -12
  383. package/docs/pages/ripple.eta +0 -27
  384. package/docs/pages/ripple.js +0 -3
  385. package/docs/pages/search.eta +0 -242
  386. package/docs/pages/search.js +0 -226
  387. package/docs/pages/selection.eta +0 -107
  388. package/docs/pages/selection.js +0 -12
  389. package/docs/pages/slider.eta +0 -23
  390. package/docs/pages/slider.js +0 -0
  391. package/docs/pages/snackbar.eta +0 -83
  392. package/docs/pages/snackbar.js +0 -157
  393. package/docs/pages/tab.eta +0 -407
  394. package/docs/pages/tab.js +0 -152
  395. package/docs/pages/textfield.eta +0 -487
  396. package/docs/pages/textfield.js +0 -257
  397. package/docs/pages/tooltip.eta +0 -92
  398. package/docs/pages/tooltip.js +0 -0
  399. package/docs/pages/transition.eta +0 -117
  400. package/docs/pages/transition.js +0 -52
  401. package/docs/pages/type.eta +0 -31
  402. package/docs/pages/type.js +0 -0
  403. package/docs/postrender.js +0 -41
  404. package/docs/prerender.js +0 -16
  405. package/docs/pwa/_dialogs.eta +0 -143
  406. package/docs/pwa/_menus.eta +0 -16
  407. package/docs/pwa/pwa-prerender.js +0 -3
  408. package/docs/pwa/pwa.eta +0 -478
  409. package/docs/pwa/pwa.js +0 -298
  410. package/docs/pwa/pwa.scss +0 -31
  411. package/docs/themes/theme-colored.scss +0 -15
  412. package/docs/themes/theme-default.scss +0 -3
  413. package/index.scss +0 -27
  414. package/jsconfig.json +0 -16
  415. package/scripts/deploy-docs.sh +0 -9
  416. package/templates/index.eta +0 -2
  417. package/templates/index.pug +0 -3
  418. package/tsconfig.json +0 -16
  419. package/webpack.config.js +0 -304
package/README.md CHANGED
@@ -1,86 +1,164 @@
1
1
  # materialdesignweb
2
2
  Material Design for Web
3
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
+
4
17
  # Demo
5
18
 
6
19
  https://clshortfuse.github.io/materialdesignweb/
7
20
 
8
21
  # Getting started
9
22
 
10
- npm: `npm install @shortfuse/materialdesignweb`
11
-
12
- # Core modules
13
-
14
- | Module | CSS-Only Support | Description | status
15
- | :-------- | :-: | :- | :- |
16
- | [aria](core/aria/) | :x: | Handles ARIA attributes, ARIA roles, tabindexes, and keyboard interaction | preRC
17
- | [document](core/document/) | :white_check_mark: | Applies color-scheme, standalone-window, and user agents detection | RC
18
- | [overlay](core/overlay/) | :white_check_mark: | Applies overlay states to components | RC
19
- | [ripple](core/ripple/) | :white_check_mark: | Applies press ripple on interactions | preRC
20
- | [theme](core/theme/) | :white_check_mark: | Applies ink and surface colors based on light/dark context | preRC
21
- | [transition](core/transition/) | :x: | Transitions shape and content between elements | preRC
22
-
23
- # Component Modules
24
-
25
- | Component | Integrations | CSS-Only Support | Keyboard Support | ARIA Role | ARIA Attributes | Status
26
- | :-------- | :----------: | :--------------: | :--------------: | :------: | :-------------: | :-----
27
- | [appbar](components/appbar/) | button | :white_check_mark: | N/A | :x: | :x: | beta
28
- | backdrop | | | | | | *planned*
29
- | [banner](components/banner/) | button | :white_check_mark: | N/A | :x: | :x: | beta
30
- | [bottomnav](components/bottomnav/) | bottomnavitem† overlay | :x: | :white_check_mark: | tablist | aria-multiselectable aria-orientation | RC
31
- | [bottomnavitem](components/bottomnav/item.js) | overlay ripple | :x: | :white_check_mark: | [tab](utils/aria/tab.js) | aria-selected | RC
32
- | [button](components/button/) | overlay ripple | :white_check_mark: | :white_check_mark: | [button](utils/aria/button.js) | aria-disabled‡ aria-pressed‡ | stable
33
- | [card](components/card/) | button divider | :white_check_mark: | N/A | :x: | :x: | preRC
34
- | [chip](components/chip/) | chipitem | :white_check_mark: | :x: | :x: | :x: | alpha
35
- | [chipitem](components/chip/item.js) | :x: | :x: | :x: | :x: | :x: | alpha
36
- | [datatable](components/datatable/) | button | :white_check_mark: | :white_check_mark: | grid | aria-selected | preRC
37
- | [dialog](components/dialog/) | button | :white_check_mark: | :white_check_mark: | dialog | aria-modal | preRC
38
- | [divider](components/divider/) | | :white_check_mark:| | separator‡ | | preRC
39
- | [elevation](components/elevation/) | | :white_check_mark: | | | | RC
40
- | [fab](components/fab/) | button† | :white_check_mark:| :x: |:x: | :x: | beta
41
- | [grid](components/grid/) | | :white_check_mark:| | :x: | :x: | preRC
42
- | imagelist | | | | | | *use grid*
43
- | [layout](components/layout/) | | :white_check_mark: | :x: |:x: | :x: | beta
44
- | [list](components/list/) | listitem† listexpander | :white_check_mark: | :white_check_mark: | group list listbox radiogroup tree | aria-orientation | preRC
45
- | [listcontent](components/list/content.js) | overlay ripple | :white_check_mark: | :white_check_mark: | listitem link option radio treeitem | aria-checked aria-selected | preRC
46
- | [listitem](components/list/item.js) | | :white_check_mark: | :white_check_mark: | treeitem none | aria-expanded aria-hidden | preRC
47
- | [listsecondary](components/list/secondary.js) | | :white_check_mark: | :white_check_mark: | none‡ | | preRC
48
- | [menu](components/menu/) | divider menuitem† | :white_check_mark: | :white_check_mark: | menu | aria-hidden | preRC
49
- | [menuitem](components/menu/item.js) | overlay ripple | :white_check_mark: | :white_check_mark:| menuitem menuitemradio menuitemcheckbox | aria-disabled aria-checked | stable
50
- | navdrawer | | | | | | *use layout*
51
- | [progress](components/progress/) | | :white_check_mark:| | :x: | :x: | beta
52
- | [selection](components/selection/) | | :white_check_mark: | :white_check_mark: | checkbox‡ radio‡ | aria-checked aria-disabled | preRC
53
- | sidesheet | | | | | | *use layout*
54
- | [slider](components/slider/) | | :white_check_mark: | :x: | :x: | :x: | alpha
55
- | [snackbar](components/snackbar/) | button | :white_check_mark: | :white_check_mark: | alert | aria-hidden | RC
56
- | [tab](components/tab/) | tablist tabcontent | :x: | | | | RC
57
- | [tabcontent](components/tab/content.js) | tabpanel† | :x: | :white_check_mark: | | | RC
58
- | [tabitem](components/tab/item.js) | overlay ripple | :x: | :white_check_mark: | [tab](utils/aria/tab.js) | aria-selected | RC
59
- | [tablist](components/tab/list.js) | tabitem† overlay | :x: | :white_check_mark: | tablist | aria-multiselectable aria-orientation | RC
60
- | [tabpanel](components/tab/panel.js) | | :x: | :white_check_mark: | tabpanel | aria-expanded aria-hidden | RC
61
- | [textfield](components/textfield/) | list | :white_check_mark: | :white_check_mark: | :x: | :x: | preRC
62
- | [tooltip](components/tooltip/) | | :white_check_mark: | | :x: | :x: | beta
63
- | [type](components/type/) | | :white_check_mark: | | | | RC
64
-
65
- # Adapter classes
66
- | Adapter | Components | Status
67
- | :-------- | :-- | :-
68
- | [datatable](adapters/datatable/) | button datatable† | preRC
69
- | [dom](adapters/dom/) | | preRC
70
- | [list](adapters/list/) | domadapter† listitem† | preRC
71
- | [search](adapters/search/) | list† textfield† | preRC
72
-
73
- ## Legend
74
-
75
- * planned - Planned for later
76
- * draft - Not yet functional
77
- * alpha - Partially working
78
- * beta - Working but incomplete
79
- * preRC - Needs minor changes
80
- * RC - Needs testing as-is
81
- * stable - Production-ready
82
-
83
-
84
- * † - Required
85
-
86
- * ‡ - 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,38 @@
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
+ display: inline-block;
10
+ vertical-align: middle;
11
+
12
+ box-sizing: border-box;
13
+ min-block-size: var(--mdw-typescale__label-small__line-height);
14
+ min-inline-size: var(--mdw-typescale__label-small__line-height);
15
+ padding-inline: max(4px, calc(4px + (var(--mdw-density) * 2px)));
16
+
17
+ color: rgb(var(--mdw-ink));
18
+
19
+ font: var(--mdw-type__font);
20
+ letter-spacing: var(--mdw-type__letter-spacing);
21
+ text-align: center;
22
+ }
23
+
24
+ @supports (width: 1lh) {
25
+ :host {
26
+ min-block-size: 1lh; /* Clamps to 1:1 */
27
+ min-inline-size: 1lh; /* Clamps to 1:1 */
28
+ padding-inline: max(0.25lh, calc(0.25lh + (var(--mdw-density) * 2px)));
29
+ }
30
+ }
31
+
32
+ :host(:empty) {
33
+ vertical-align: middle;
34
+ }
35
+
36
+ :host(:empty) #shape {
37
+ inset: 5px;
38
+ }
@@ -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,147 @@
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
+ vertical-align: middle;
16
+
17
+ /* box-sizing: border-box; */
18
+ min-block-size: 24px;
19
+ min-inline-size: 24px;
20
+
21
+ padding-block: calc(8px + (var(--mdw-density) * 2px));
22
+ padding-inline: calc(12px + (var(--mdw-density) * 2px));
23
+
24
+ -webkit-tap-highlight-color: transparent;
25
+ -webkit-user-select: none;
26
+ user-select: none;
27
+
28
+ color: rgb(var(--mdw-ink));
29
+
30
+ font: var(--mdw-type__font);
31
+ letter-spacing: var(--mdw-type__letter-spacing);
32
+ }
33
+
34
+ :host(:where([elevated],[filled])) {
35
+ will-change: filter;
36
+ }
37
+
38
+ /** Elevated Color Defaults */
39
+ :host(:where([elevated])) {
40
+ --mdw-bg: var(--mdw-color__surface);
41
+ --mdw-ink: var(--mdw-color__primary);
42
+ --mdw-surface__shadow__resting: var(--mdw-surface__shadow__1);
43
+ --mdw-surface__shadow__raised: var(--mdw-surface__shadow__2);
44
+ --mdw-surface__tint: var(--mdw-surface__tint__1);
45
+ --mdw-surface__tint__raised: var(--mdw-surface__tint__2);
46
+ }
47
+ /** Filled Color Defaults */
48
+ :host(:where([filled])) {
49
+ --mdw-bg: var(--mdw-color__primary);
50
+ --mdw-ink: var(--mdw-color__on-primary);
51
+ --mdw-surface__shadow__resting: var(--mdw-surface__shadow__0);
52
+ --mdw-surface__shadow__raised: var(--mdw-surface__shadow__1);
53
+ --mdw-surface__tint: 0;
54
+ --mdw-surface__tint__raised: var(--mdw-surface__tint__1);
55
+ }
56
+ /** Filled Tonal Color Defaults */
57
+ :host(:where([filled="tonal"])) {
58
+ --mdw-bg: var(--mdw-color__secondary-container);
59
+ --mdw-ink: var(--mdw-color__on-secondary-container);
60
+ }
61
+ /** Outlined Color Defaults */
62
+ :host(:where([outlined])) {
63
+ --mdw-ink: var(--mdw-color__primary);
64
+ }
65
+
66
+ :host(:where([icon])) {
67
+ gap: 8px;
68
+
69
+ padding-inline: calc(12px + (var(--mdw-density) * 2px)) calc(16px + (var(--mdw-density) * 2px));
70
+ }
71
+
72
+ :host(:where([outlined], [elevated], [filled])) {
73
+ padding-inline: calc(24px + (var(--mdw-density) * 2px));
74
+ }
75
+
76
+ :host(:where([icon]):where([outlined], [elevated], [filled])) {
77
+ gap: 8px;
78
+
79
+ padding-inline: calc(16px + (var(--mdw-density) * 2px)) calc(24px + (var(--mdw-density) * 2px));
80
+ }
81
+
82
+ #shape:where([elevated],[filled],[color]) {
83
+ background-color: rgb(var(--mdw-bg));
84
+ }
85
+
86
+ #slot {
87
+ text-align: center;
88
+ text-decoration: none;
89
+ white-space: nowrap;
90
+ }
91
+
92
+ #control {
93
+ cursor: inherit;
94
+ }
95
+
96
+ :host([disabled]) {
97
+ /* cursor: not-allowed; */
98
+
99
+ color: rgba(var(--mdw-color__on-surface), 0.38);
100
+ }
101
+
102
+ #shape[disabled]:is([elevated], [filled]) {
103
+ background-color: rgba(var(--mdw-color__on-surface), 0.12);
104
+ color: rgba(var(--mdw-color__on-surface), 0.38);
105
+ }
106
+
107
+ #slot[disabled] {
108
+ color: rgba(var(--mdw-color__on-surface), 0.38);
109
+ }
110
+
111
+ #icon {
112
+ font-size: calc(18/14 * 1em);
113
+ font-variation-settings: 'FILL' 1;
114
+ }
115
+
116
+ #icon[outlined] {
117
+ font-variation-settings: 'FILL' 0;
118
+ }
119
+
120
+ #icon[disabled] {
121
+ opacity: 0.38;
122
+
123
+ color: rgba(var(--mdw-color__on-surface));
124
+ }
125
+
126
+ #label {
127
+ cursor: pointer;
128
+ }
129
+
130
+ #label[disabled] {
131
+ cursor: not-allowed;
132
+ }
133
+
134
+ /*
135
+ @media screen and (max-resolution: 0.75dppx) { #touch-target { --mdw-device-pixel-ratio: 0.75; } }
136
+ @media screen and (max-resolution: 0.85dppx) { #touch-target { --mdw-device-pixel-ratio: 0.90; } }
137
+ @media screen and (max-resolution: 0.90dppx) { #touch-target { --mdw-device-pixel-ratio: 0.90; } }
138
+ @media screen and (min-resolution: 1.5dppx) { #touch-target { --mdw-device-pixel-ratio: 1.5; } }
139
+ @media screen and (min-resolution: 1.75dppx) { #touch-target { --mdw-device-pixel-ratio: 1.75; } }
140
+ @media screen and (min-resolution: 2dppx) { #touch-target { --mdw-device-pixel-ratio: 2; } }
141
+ */
142
+
143
+ @media (any-pointer: coarse) {
144
+ #touch-target {
145
+ visibility: visible;
146
+ }
147
+ }