@shortfuse/materialdesignweb 0.0.9 → 0.4.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 (392) hide show
  1. package/.browserslistrc +3 -0
  2. package/.eslintrc.json +146 -27
  3. package/.stylelintrc.json +598 -2
  4. package/.vscode/launch.json +20 -5
  5. package/.vscode/settings.json +3 -0
  6. package/.vscode/tasks.json +19 -10
  7. package/CHANGELOG.md +24 -0
  8. package/README.md +84 -2
  9. package/adapters/datatable/column.js +203 -0
  10. package/adapters/datatable/index.js +972 -0
  11. package/adapters/dom/index.js +601 -0
  12. package/adapters/list/index.js +69 -0
  13. package/adapters/search/index.js +521 -0
  14. package/components/appbar/_spec.scss +225 -0
  15. package/components/appbar/_theme.scss +0 -0
  16. package/components/appbar/index.scss +2 -0
  17. package/components/banner/_spec.scss +118 -0
  18. package/components/banner/_theme.scss +0 -0
  19. package/components/banner/index.scss +2 -0
  20. package/components/bottomnav/README.md +85 -0
  21. package/components/bottomnav/_spec.scss +157 -0
  22. package/components/bottomnav/_theme.scss +0 -0
  23. package/components/bottomnav/index.js +122 -0
  24. package/components/bottomnav/index.scss +2 -0
  25. package/components/bottomnav/item.js +89 -0
  26. package/components/{core/button → button}/README.md +16 -22
  27. package/components/button/_spec.scss +161 -0
  28. package/components/button/_theme.scss +65 -0
  29. package/components/button/index.eta +32 -0
  30. package/components/button/index.js +43 -0
  31. package/components/button/index.pug +18 -0
  32. package/components/button/index.scss +2 -0
  33. package/components/card/_spec.scss +249 -0
  34. package/components/card/_theme.scss +0 -0
  35. package/components/card/index.scss +2 -0
  36. package/components/chip/_spec.scss +134 -0
  37. package/components/chip/_theme.scss +177 -0
  38. package/components/chip/index.js +21 -0
  39. package/components/chip/index.scss +2 -0
  40. package/components/chip/item.js +20 -0
  41. package/components/datatable/_spec.scss +288 -0
  42. package/components/datatable/_theme.scss +154 -0
  43. package/components/datatable/cell.js +45 -0
  44. package/components/datatable/columnheader.js +47 -0
  45. package/components/datatable/index.js +388 -0
  46. package/components/datatable/index.scss +2 -0
  47. package/components/datatable/row.js +49 -0
  48. package/components/datatable/rowheader.js +18 -0
  49. package/components/dialog/_spec.scss +213 -0
  50. package/components/dialog/_theme.scss +0 -0
  51. package/components/dialog/index.js +627 -0
  52. package/components/dialog/index.scss +2 -0
  53. package/components/divider/_spec.scss +13 -0
  54. package/components/divider/_theme.scss +0 -0
  55. package/components/divider/index.scss +2 -0
  56. package/components/elevation/_spec.scss +9 -0
  57. package/components/elevation/_theme.scss +0 -0
  58. package/components/elevation/index.scss +2 -0
  59. package/components/fab/_spec.scss +222 -0
  60. package/components/fab/_theme.scss +0 -0
  61. package/components/fab/index.js +103 -0
  62. package/components/fab/index.scss +2 -0
  63. package/components/grid/_spec.scss +312 -0
  64. package/components/grid/_theme.scss +0 -0
  65. package/components/grid/index.scss +2 -0
  66. package/components/layout/_mixins.scss +33 -0
  67. package/components/layout/_spec.scss +1012 -0
  68. package/components/layout/_theme.scss +44 -0
  69. package/components/layout/index.js +464 -0
  70. package/components/layout/index.scss +2 -0
  71. package/components/list/_spec.scss +397 -0
  72. package/components/list/_theme.scss +111 -0
  73. package/components/list/content.js +110 -0
  74. package/components/list/index.js +260 -0
  75. package/components/list/index.scss +2 -0
  76. package/components/list/item.js +170 -0
  77. package/components/list/secondary.js +46 -0
  78. package/components/menu/_spec.scss +362 -0
  79. package/components/menu/_theme.scss +0 -0
  80. package/components/menu/index.js +721 -0
  81. package/components/menu/index.scss +2 -0
  82. package/components/menu/item.js +239 -0
  83. package/components/{core/progress/style.scss → progress/_spec.scss} +36 -25
  84. package/components/progress/_theme.scss +0 -0
  85. package/components/progress/index.js +36 -0
  86. package/components/progress/index.scss +2 -0
  87. package/components/selection/_spec.scss +386 -0
  88. package/components/selection/_theme.scss +166 -0
  89. package/components/selection/index.eta +60 -0
  90. package/components/selection/index.js +76 -0
  91. package/components/selection/index.pug +30 -0
  92. package/components/selection/index.scss +2 -0
  93. package/components/selection/input.js +56 -0
  94. package/components/selection/radiogroup.js +47 -0
  95. package/components/slider/_spec.scss +64 -0
  96. package/components/slider/_theme.scss +0 -0
  97. package/components/slider/index.scss +2 -0
  98. package/components/snackbar/_spec.scss +195 -0
  99. package/components/snackbar/_theme.scss +0 -0
  100. package/components/snackbar/index.js +344 -0
  101. package/components/snackbar/index.scss +2 -0
  102. package/components/tab/_spec.scss +235 -0
  103. package/components/tab/_theme.scss +0 -0
  104. package/components/tab/content.js +205 -0
  105. package/components/tab/index.js +260 -0
  106. package/components/tab/index.scss +2 -0
  107. package/components/tab/item.js +89 -0
  108. package/components/tab/list.js +210 -0
  109. package/components/tab/panel.js +54 -0
  110. package/components/template/_theme.scss +27 -0
  111. package/components/{core/textfield → textfield}/README.md +70 -50
  112. package/components/textfield/_mixins.scss +52 -0
  113. package/components/textfield/_spec.scss +809 -0
  114. package/components/textfield/_theme.scss +299 -0
  115. package/components/textfield/index.eta +74 -0
  116. package/components/textfield/index.js +168 -0
  117. package/components/textfield/index.pug +30 -0
  118. package/components/textfield/index.scss +2 -0
  119. package/components/tooltip/_spec.scss +188 -0
  120. package/components/tooltip/_theme.scss +0 -0
  121. package/components/tooltip/index.scss +2 -0
  122. package/components/type/_spec.scss +224 -0
  123. package/components/type/_theme.scss +0 -0
  124. package/components/type/index.scss +2 -0
  125. package/core/_breakpoint.scss +189 -0
  126. package/core/_elevation.scss +38 -0
  127. package/core/_length.scss +9 -0
  128. package/core/_motion.scss +31 -0
  129. package/core/_platform.scss +34 -0
  130. package/core/_type.scss +127 -0
  131. package/core/aria/attributes.js +141 -0
  132. package/core/aria/button.js +50 -0
  133. package/core/aria/keyboard.js +93 -0
  134. package/core/aria/rovingtabindex.js +178 -0
  135. package/core/aria/tab.js +60 -0
  136. package/core/color/_spec.scss +0 -0
  137. package/core/color/_theme.scss +390 -0
  138. package/core/color/index.scss +2 -0
  139. package/core/document/index.js +39 -0
  140. package/core/dom.js +271 -0
  141. package/core/overlay/_spec.scss +31 -0
  142. package/core/overlay/_theme.scss +171 -0
  143. package/core/overlay/index.js +108 -0
  144. package/core/overlay/index.scss +2 -0
  145. package/core/ripple/_spec.scss +197 -0
  146. package/core/ripple/_theme.scss +40 -0
  147. package/core/ripple/index.js +294 -0
  148. package/core/ripple/index.scss +2 -0
  149. package/core/theme/_config.scss +2 -0
  150. package/core/theme/_mixins.scss +172 -0
  151. package/{components/theming/palettes.scss → core/theme/_palettes.scss} +173 -150
  152. package/core/theme/_variables.scss +24 -0
  153. package/core/theme/index.js +50 -0
  154. package/core/throttler.js +42 -0
  155. package/core/transition/index.js +468 -0
  156. package/docs/_flex.scss +22 -0
  157. package/docs/_menuoptions.js +183 -0
  158. package/docs/_mixins.pug +155 -0
  159. package/docs/_partials/_androidnavbar.eta +5 -0
  160. package/docs/_partials/_androidstatusbar.eta +13 -0
  161. package/docs/_partials/_appbar.eta +29 -0
  162. package/docs/_partials/_buttontest.eta +31 -0
  163. package/docs/_partials/_header.eta +149 -0
  164. package/docs/_partials/_navlistitem.eta +16 -0
  165. package/docs/_partials/_target.eta +1 -0
  166. package/docs/_sample-utils.js +93 -0
  167. package/docs/_storage.js +33 -0
  168. package/docs/docs.scss +295 -0
  169. package/docs/index.eta +16 -0
  170. package/docs/index.js +0 -0
  171. package/docs/pages/appbar.eta +114 -0
  172. package/docs/pages/appbar.js +0 -0
  173. package/docs/pages/appbar.pug +78 -0
  174. package/docs/pages/bottomnav.eta +188 -0
  175. package/docs/pages/bottomnav.js +115 -0
  176. package/docs/pages/bottomnav.pug +137 -0
  177. package/docs/pages/button.eta +124 -0
  178. package/docs/pages/button.js +224 -0
  179. package/docs/pages/button.pug +121 -0
  180. package/docs/pages/card.eta +90 -0
  181. package/docs/pages/card.js +177 -0
  182. package/docs/pages/card.pug +74 -0
  183. package/docs/pages/chip.eta +122 -0
  184. package/docs/pages/chip.js +82 -0
  185. package/docs/pages/chip.pug +91 -0
  186. package/docs/pages/color.eta +143 -0
  187. package/docs/pages/color.js +262 -0
  188. package/docs/pages/color.pug +121 -0
  189. package/docs/pages/datatable.eta +323 -0
  190. package/docs/pages/datatable.js +164 -0
  191. package/docs/pages/datatable.pug +283 -0
  192. package/docs/pages/dialog.eta +186 -0
  193. package/docs/pages/dialog.js +177 -0
  194. package/docs/pages/dialog.pug +132 -0
  195. package/docs/pages/dom.eta +26 -0
  196. package/docs/pages/dom.js +143 -0
  197. package/docs/pages/dom.pug +22 -0
  198. package/docs/pages/elevation.eta +35 -0
  199. package/docs/pages/elevation.js +0 -0
  200. package/docs/pages/elevation.pug +25 -0
  201. package/docs/pages/fab.eta +99 -0
  202. package/docs/pages/fab.js +44 -0
  203. package/docs/pages/fab.pug +66 -0
  204. package/docs/pages/grid.eta +135 -0
  205. package/docs/pages/grid.js +128 -0
  206. package/docs/pages/grid.pug +95 -0
  207. package/docs/pages/layout.eta +8 -0
  208. package/docs/pages/layout.js +0 -0
  209. package/docs/pages/layout.pug +7 -0
  210. package/docs/pages/list.eta +465 -0
  211. package/docs/pages/list.js +9 -0
  212. package/docs/pages/list.pug +326 -0
  213. package/docs/pages/menu.eta +276 -0
  214. package/docs/pages/menu.js +217 -0
  215. package/docs/pages/menu.pug +205 -0
  216. package/docs/pages/overlay.eta +69 -0
  217. package/docs/pages/overlay.js +4 -0
  218. package/docs/pages/overlay.pug +55 -0
  219. package/docs/pages/progress.eta +23 -0
  220. package/docs/pages/progress.js +12 -0
  221. package/docs/pages/progress.pug +16 -0
  222. package/docs/pages/ripple.eta +27 -0
  223. package/docs/pages/ripple.js +4 -0
  224. package/docs/pages/ripple.pug +21 -0
  225. package/docs/pages/search.eta +246 -0
  226. package/docs/pages/search.js +243 -0
  227. package/docs/pages/search.pug +165 -0
  228. package/docs/pages/selection.eta +111 -0
  229. package/docs/pages/selection.js +13 -0
  230. package/docs/pages/selection.pug +74 -0
  231. package/docs/pages/slider.eta +23 -0
  232. package/docs/pages/slider.js +0 -0
  233. package/docs/pages/slider.pug +17 -0
  234. package/docs/pages/snackbar.eta +83 -0
  235. package/docs/pages/snackbar.js +158 -0
  236. package/docs/pages/snackbar.pug +60 -0
  237. package/docs/pages/tab.eta +421 -0
  238. package/docs/pages/tab.js +151 -0
  239. package/docs/pages/tab.pug +304 -0
  240. package/docs/pages/textfield.eta +486 -0
  241. package/docs/pages/textfield.js +254 -0
  242. package/docs/pages/textfield.pug +360 -0
  243. package/docs/pages/tooltip.eta +94 -0
  244. package/docs/pages/tooltip.js +0 -0
  245. package/docs/pages/tooltip.pug +78 -0
  246. package/docs/pages/transition.eta +117 -0
  247. package/docs/pages/transition.js +54 -0
  248. package/docs/pages/transition.pug +76 -0
  249. package/docs/pages/type.eta +31 -0
  250. package/docs/pages/type.js +0 -0
  251. package/docs/pages/type.pug +29 -0
  252. package/docs/postrender.js +39 -0
  253. package/docs/prerender.js +16 -0
  254. package/docs/pwa/_dialogs.eta +143 -0
  255. package/docs/pwa/_dialogs.pug +96 -0
  256. package/docs/pwa/_menus.eta +16 -0
  257. package/docs/pwa/_menus.pug +11 -0
  258. package/docs/pwa/pwa-prerender.js +3 -0
  259. package/docs/pwa/pwa.eta +480 -0
  260. package/docs/pwa/pwa.js +306 -0
  261. package/docs/pwa/pwa.pug +325 -0
  262. package/docs/pwa/pwa.scss +26 -0
  263. package/docs/spec.scss +26 -0
  264. package/docs/themes/_component-themes.scss +26 -0
  265. package/docs/themes/theme-colored-fallbacks.scss +17 -0
  266. package/docs/themes/theme-colored.scss +17 -0
  267. package/docs/themes/theme-default-fallbacks.scss +17 -0
  268. package/docs/themes/theme-default.scss +17 -0
  269. package/jsconfig.json +4 -2
  270. package/package.json +43 -28
  271. package/scripts/deploy-docs.sh +9 -0
  272. package/templates/index.eta +2 -0
  273. package/templates/index.pug +3 -0
  274. package/utils/function.js +3 -0
  275. package/webpack.config.cjs +257 -0
  276. package/components/_index.scss +0 -4
  277. package/components/all-components.scss +0 -14
  278. package/components/common/functions.scss +0 -173
  279. package/components/common/mixins.scss +0 -107
  280. package/components/common/motion.scss +0 -36
  281. package/components/common/ripple.scss +0 -92
  282. package/components/common/variables.scss +0 -48
  283. package/components/complex/dialog/style.scss +0 -159
  284. package/components/complex/dialog/theming.scss +0 -29
  285. package/components/complex/navdrawer/style.scss +0 -477
  286. package/components/complex/navdrawer/theming.scss +0 -58
  287. package/components/complex/search/index.js +0 -492
  288. package/components/core/bottomnav/README.md +0 -85
  289. package/components/core/bottomnav/index.js +0 -140
  290. package/components/core/bottomnav/style.scss +0 -173
  291. package/components/core/bottomnav/theming.scss +0 -42
  292. package/components/core/button/index.js +0 -52
  293. package/components/core/button/style.scss +0 -283
  294. package/components/core/button/theming.scss +0 -131
  295. package/components/core/list/index.js +0 -94
  296. package/components/core/list/style.scss +0 -269
  297. package/components/core/list/theming.scss +0 -74
  298. package/components/core/menu/index.js +0 -127
  299. package/components/core/menu/style.scss +0 -239
  300. package/components/core/menu/theming.scss +0 -55
  301. package/components/core/progress/index.js +0 -33
  302. package/components/core/selection/style.scss +0 -249
  303. package/components/core/selection/theming.scss +0 -49
  304. package/components/core/switch/style.scss +0 -3
  305. package/components/core/tab/index.js +0 -174
  306. package/components/core/tab/style.scss +0 -202
  307. package/components/core/tab/theming.scss +0 -43
  308. package/components/core/textfield/index.js +0 -169
  309. package/components/core/textfield/style.scss +0 -672
  310. package/components/core/textfield/theming.scss +0 -262
  311. package/components/core/toolbar/style.scss +0 -109
  312. package/components/core/toolbar/theming.scss +0 -28
  313. package/components/core/tooltip/style.scss +0 -127
  314. package/components/core/type/style.scss +0 -133
  315. package/components/core/type/theming.scss +0 -25
  316. package/components/index.js +0 -24
  317. package/components/template/theming.scss +0 -31
  318. package/components/theming/theming.scss +0 -504
  319. package/docs/bottomnav.html +0 -171
  320. package/docs/bottomnav.min.js +0 -383
  321. package/docs/button.html +0 -322
  322. package/docs/button.min.js +0 -251
  323. package/docs/components.min.css +0 -1
  324. package/docs/components.min.js +0 -83
  325. package/docs/dialog.html +0 -103
  326. package/docs/dialog.min.js +0 -160
  327. package/docs/docs.min.css +0 -1
  328. package/docs/docs.min.js +0 -83
  329. package/docs/index.html +0 -55
  330. package/docs/index.min.js +0 -83
  331. package/docs/list.html +0 -442
  332. package/docs/list.min.js +0 -312
  333. package/docs/menu.html +0 -185
  334. package/docs/menu.min.js +0 -370
  335. package/docs/navdrawer.html +0 -199
  336. package/docs/navdrawer.min.js +0 -244
  337. package/docs/progress.html +0 -75
  338. package/docs/progress.min.js +0 -162
  339. package/docs/search.html +0 -230
  340. package/docs/search.min.js +0 -1202
  341. package/docs/selection.html +0 -188
  342. package/docs/selection.min.js +0 -160
  343. package/docs/src/complex/dialog.js +0 -3
  344. package/docs/src/complex/dialog.pug +0 -44
  345. package/docs/src/complex/navdrawer.js +0 -82
  346. package/docs/src/complex/navdrawer.pug +0 -109
  347. package/docs/src/complex/search.js +0 -207
  348. package/docs/src/complex/search.pug +0 -143
  349. package/docs/src/components.scss +0 -1
  350. package/docs/src/core/bottomnav.js +0 -22
  351. package/docs/src/core/bottomnav.pug +0 -93
  352. package/docs/src/core/button.js +0 -16
  353. package/docs/src/core/button.pug +0 -73
  354. package/docs/src/core/list.js +0 -21
  355. package/docs/src/core/list.pug +0 -246
  356. package/docs/src/core/menu.js +0 -33
  357. package/docs/src/core/menu.pug +0 -108
  358. package/docs/src/core/progress.js +0 -11
  359. package/docs/src/core/progress.pug +0 -17
  360. package/docs/src/core/selection.js +0 -4
  361. package/docs/src/core/selection.pug +0 -92
  362. package/docs/src/core/tab.js +0 -21
  363. package/docs/src/core/tab.pug +0 -180
  364. package/docs/src/core/textfield.js +0 -15
  365. package/docs/src/core/textfield.pug +0 -274
  366. package/docs/src/core/toolbar.js +0 -4
  367. package/docs/src/core/toolbar.pug +0 -79
  368. package/docs/src/core/tooltip.js +0 -4
  369. package/docs/src/core/tooltip.pug +0 -76
  370. package/docs/src/core/type.js +0 -4
  371. package/docs/src/core/type.pug +0 -36
  372. package/docs/src/docs.scss +0 -200
  373. package/docs/src/index.pug +0 -5
  374. package/docs/src/mixins.pug +0 -72
  375. package/docs/src/targetHandler.js +0 -50
  376. package/docs/src/theming.ie11.scss +0 -35
  377. package/docs/src/theming.scss +0 -36
  378. package/docs/tab.html +0 -301
  379. package/docs/tab.min.js +0 -397
  380. package/docs/textfield.html +0 -476
  381. package/docs/textfield.min.js +0 -381
  382. package/docs/theming.ie11.min.css +0 -1
  383. package/docs/theming.ie11.min.js +0 -83
  384. package/docs/theming.min.css +0 -1
  385. package/docs/theming.min.js +0 -83
  386. package/docs/toolbar.html +0 -213
  387. package/docs/toolbar.min.js +0 -160
  388. package/docs/tooltip.html +0 -138
  389. package/docs/tooltip.min.js +0 -160
  390. package/docs/type.html +0 -94
  391. package/docs/type.min.js +0 -160
  392. package/webpack.config.js +0 -176
package/CHANGELOG.md ADDED
@@ -0,0 +1,24 @@
1
+ v0.4.0
2
+ ------
3
+
4
+ * Use passive listener for DOMAdapter scrolling
5
+ * Workaround Safari 12 negative vertical-align bug
6
+ * Add `"aria-hidden"` attributes for `.mdw-layout__appbar` and `.mdw-layout__bottomnav`
7
+ * Add `"aria-hidden"` attributes for `.mdw-menu__check` and `.mdw-menu__radio`
8
+ * Create `.mdw-menu__item-group` CSS
9
+ * Ignore case on user agent detection (`Document.onPrerender`)
10
+ * Add `core/theme` helper functions
11
+
12
+ * Deprecate IE11 support
13
+ * Deprecate `.pug`
14
+
15
+ * Refactor SCSS for proper `@use` support
16
+ * Refactor SCSS with `math.div`
17
+ * Add `.eta` templates
18
+ * Target ES2020 for `.js`
19
+ * Proper ES Module support
20
+ * Upgrade dev dependencies
21
+ * `webpack` from `4.x` to `5.x`
22
+ * `webpack-dev-server` from `3.x` to `4.x`
23
+ * `typescript` from `3.9.x` to `4.5.x`
24
+
package/README.md CHANGED
@@ -1,6 +1,88 @@
1
+ *Notice: This project is currently being maintained in an private fork. Changes will be pushed at a later date.*
2
+
1
3
  # materialdesignweb
2
4
  Material Design for Web
3
5
 
4
- Demo: https://clshortfuse.github.io/materialdesignweb/
6
+ # Demo
7
+
8
+ https://clshortfuse.github.io/materialdesignweb/
9
+
10
+ # Getting started
11
+
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
5
87
 
6
- npm: `npm install @shortfuse/materialdesignweb`
88
+ * - Apply manually
@@ -0,0 +1,203 @@
1
+ import * as DataTableColumnHeader from '../../components/datatable/columnheader.js';
2
+ import * as Selection from '../../components/selection/index.js';
3
+ import * as Attributes from '../../core/aria/attributes.js';
4
+ import { setTextNode } from '../../core/dom.js';
5
+
6
+ /**
7
+ * @template {Record<string, any>} T
8
+ * @template {keyof T & string} K
9
+ * @callback DataTableAdapterColumnFormatter<T,K>
10
+ * @param {T[K]} value
11
+ * @param {T} [object]
12
+ * @return {any}
13
+ */
14
+
15
+ /**
16
+ * @template {Record<string, any>} T
17
+ * @callback DataTableAdapterColumnSorter<T>
18
+ * @param {T} a
19
+ * @param {T} b
20
+ * @return {number}
21
+ */
22
+
23
+ /**
24
+ * @template {Record<string, any>} T
25
+ * @template {keyof T & string} K
26
+ * @callback DataTableAdapterColumnRenderer<T,K>
27
+ * @param {HTMLTableCellElement} cell
28
+ * @param {T[K]} value
29
+ * @param {T} data
30
+ * @return {void}
31
+ */
32
+
33
+ /**
34
+ * Constructor options for DataTableAdapterColumn
35
+ * @template {Record<string, any>} T
36
+ * @template {keyof T & string} K
37
+ * @typedef DataTableAdapterColumnOptions<T,K>
38
+ * @prop {K} key
39
+ * @prop {(string|DocumentFragment)} [name='']
40
+ * @prop {'number'|'text'|'checkbox'} [type]
41
+ * @prop {boolean} [rowSelector]
42
+ * @prop {string} [tooltip]
43
+ * @prop {boolean} [sortable]
44
+ * @prop {boolean} [primaryColumn]
45
+ * @prop {HTMLElement} [customSortIcon]
46
+ * @prop {string} [innerHTML]
47
+ * @prop {DocumentFragment} [fragment]
48
+ * @prop {DataTableAdapterColumnRenderer<T,K>} [renderer]
49
+ * @prop {DataTableAdapterColumnFormatter<T,K>} [formatter]
50
+ * @prop {DataTableAdapterColumnSorter<T>} [sorter]
51
+ */
52
+
53
+ /** @return {HTMLElement} */
54
+ function constructTableCheckbox() {
55
+ const element = document.createElement('div');
56
+ element.className = 'mdw-selection';
57
+ element.setAttribute('aria-checked', 'false');
58
+ const input = document.createElement('div');
59
+ input.className = 'mdw-selection__input mdw-datatable__widget';
60
+ const icon = document.createElement('div');
61
+ icon.className = 'mdw-selection__icon';
62
+ icon.setAttribute('mdw-checkbox', '');
63
+ element.appendChild(input);
64
+ element.appendChild(icon);
65
+ Selection.attach(element);
66
+ return element;
67
+ }
68
+
69
+ /**
70
+ * @template {Record<string, any>} T
71
+ * @template {keyof T & string} K
72
+ */
73
+ export default class DataTableAdapterColumn {
74
+ /** @param {DataTableAdapterColumnOptions<T,K>} options */
75
+ constructor(options) {
76
+ this.element = document.createElement('th');
77
+ if (options.innerHTML != null) {
78
+ this.element.innerHTML = options.innerHTML;
79
+ } else if (options.fragment) {
80
+ this.element.appendChild(options.fragment);
81
+ }
82
+ this.key = options.key;
83
+ this.element.dataset.key = options.key;
84
+
85
+ if (options.sortable) {
86
+ this.element.setAttribute('aria-sort', 'none');
87
+ let sortIcon = options.customSortIcon;
88
+ if (!sortIcon) {
89
+ sortIcon = document.createElement('span');
90
+ sortIcon.classList.add('mdw-datatable__sort-icon');
91
+ sortIcon.classList.add('material-icons');
92
+ sortIcon.textContent = 'arrow_downward';
93
+ }
94
+ if (this.element.hasChildNodes()) {
95
+ this.element.insertBefore(this.element.firstChild, options.customSortIcon);
96
+ } else {
97
+ this.element.appendChild(sortIcon);
98
+ }
99
+ }
100
+ if (options.tooltip) {
101
+ const wrapper = document.createElement('span');
102
+ wrapper.classList.add('mdw-tooltip__wrapper');
103
+ const target = document.createElement('span');
104
+ target.classList.add('mdw-tooltip__target');
105
+ if (!options.name) {
106
+ target.textContent = '';
107
+ } else if (typeof options.name === 'string') {
108
+ target.textContent = options.name;
109
+ } else {
110
+ target.appendChild(options.name);
111
+ }
112
+ const tooltip = document.createElement('div');
113
+ tooltip.className = 'mdw-tooltip mdw-theme';
114
+ tooltip.setAttribute('mdw-surface', 'background 700');
115
+ tooltip.setAttribute('mdw-dark', '');
116
+ tooltip.textContent = options.tooltip;
117
+ wrapper.appendChild(target);
118
+ wrapper.appendChild(tooltip);
119
+ this.element.appendChild(wrapper);
120
+ } else if (options.name) {
121
+ let node;
122
+ if (typeof options.name === 'string') {
123
+ node = document.createTextNode(options.name);
124
+ } else {
125
+ node = options.name;
126
+ }
127
+ this.element.appendChild(node);
128
+ }
129
+
130
+ this.primaryColumn = options.primaryColumn;
131
+ if (options.primaryColumn) {
132
+ this.element.setAttribute('mdw-primary-column', '');
133
+ }
134
+
135
+ this.rowSelector = options.rowSelector;
136
+
137
+ if (this.rowSelector) {
138
+ this.element.setAttribute('mdw-selector', '');
139
+ }
140
+
141
+ this.type = options.type;
142
+ switch (options.type) {
143
+ case 'number':
144
+ this.element.setAttribute('mdw-number', '');
145
+ break;
146
+ case 'text':
147
+ this.element.setAttribute('mdw-text', '');
148
+ break;
149
+ case 'checkbox':
150
+ default:
151
+ }
152
+
153
+ if (this.rowSelector && this.type === 'checkbox') {
154
+ const checkboxLabel = constructTableCheckbox();
155
+ this.element.appendChild(checkboxLabel);
156
+ this.element.classList.add('mdw-autofocus-widget');
157
+ }
158
+
159
+ if (options.renderer) {
160
+ this.renderer = options.renderer;
161
+ } else if (options.type === 'checkbox') {
162
+ this.renderer = DataTableAdapterColumn.defaultCheckboxRenderer;
163
+ } else {
164
+ this.renderer = DataTableAdapterColumn.defaultCellRenderer;
165
+ }
166
+ this.formatter = options.formatter || ((/** @type {any} */ value) => value);
167
+ this.sorter = options.sorter;
168
+ DataTableColumnHeader.attach(this.element);
169
+ }
170
+
171
+ /**
172
+ * @param {HTMLTableCellElement} cell
173
+ * @param {any} value
174
+ * @return {void}
175
+ */
176
+ static defaultCheckboxRenderer(cell, value) {
177
+ if (!cell.classList.contains('mdw-autofocus-widget')) {
178
+ cell.classList.add('mdw-autofocus-widget');
179
+ }
180
+ let selectionElement = cell.getElementsByClassName('mdw-selection')[0];
181
+ const checked = !!value;
182
+ if (!selectionElement) {
183
+ selectionElement = constructTableCheckbox();
184
+ cell.appendChild(selectionElement);
185
+ }
186
+ Attributes.setChecked(selectionElement, checked);
187
+ }
188
+
189
+ /**
190
+ * @param {HTMLTableCellElement} cell
191
+ * @param {any} value
192
+ * @return {void}
193
+ */
194
+ static defaultCellRenderer(cell, value) {
195
+ let stringValue;
196
+ if (value == null) {
197
+ stringValue = '';
198
+ } else {
199
+ stringValue = value.toString();
200
+ }
201
+ setTextNode(cell, stringValue);
202
+ }
203
+ }