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