@shortfuse/materialdesignweb 0.3.0 → 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 (398) hide show
  1. package/.eslintrc.json +136 -30
  2. package/.stylelintrc.json +6 -40
  3. package/.vscode/launch.json +20 -5
  4. package/CHANGELOG.md +24 -0
  5. package/README.md +12 -9
  6. package/adapters/datatable/column.js +82 -74
  7. package/adapters/datatable/index.js +173 -131
  8. package/adapters/dom/index.js +529 -75
  9. package/adapters/list/index.js +25 -12
  10. package/adapters/search/index.js +13 -13
  11. package/components/appbar/_spec.scss +87 -64
  12. package/components/appbar/index.scss +2 -2
  13. package/components/banner/_spec.scss +8 -8
  14. package/components/banner/index.scss +2 -2
  15. package/components/bottomnav/_spec.scss +22 -17
  16. package/components/bottomnav/index.js +61 -52
  17. package/components/bottomnav/index.scss +2 -2
  18. package/components/bottomnav/item.js +44 -25
  19. package/components/button/README.md +14 -14
  20. package/components/button/_spec.scss +23 -22
  21. package/components/button/_theme.scss +37 -21
  22. package/components/button/index.eta +32 -0
  23. package/components/button/index.js +12 -12
  24. package/components/button/index.scss +2 -2
  25. package/components/card/_spec.scss +40 -36
  26. package/components/card/index.scss +2 -2
  27. package/components/chip/_spec.scss +7 -8
  28. package/components/chip/_theme.scss +31 -31
  29. package/components/chip/index.js +3 -2
  30. package/components/chip/index.scss +2 -2
  31. package/components/chip/item.js +1 -16
  32. package/components/datatable/_spec.scss +71 -85
  33. package/components/datatable/_theme.scss +61 -156
  34. package/components/datatable/cell.js +45 -0
  35. package/components/datatable/columnheader.js +47 -0
  36. package/components/datatable/index.js +279 -366
  37. package/components/datatable/index.scss +2 -2
  38. package/components/datatable/row.js +49 -0
  39. package/components/datatable/rowheader.js +18 -0
  40. package/components/dialog/_spec.scss +61 -41
  41. package/components/dialog/index.js +325 -297
  42. package/components/dialog/index.scss +2 -2
  43. package/components/divider/_spec.scss +8 -6
  44. package/components/divider/index.scss +2 -2
  45. package/components/elevation/_spec.scss +2 -2
  46. package/components/elevation/index.scss +2 -2
  47. package/components/fab/_spec.scss +23 -24
  48. package/components/fab/index.js +50 -50
  49. package/components/fab/index.scss +2 -2
  50. package/components/grid/_spec.scss +33 -31
  51. package/components/grid/index.scss +2 -2
  52. package/components/layout/_mixins.scss +5 -5
  53. package/components/layout/_spec.scss +206 -176
  54. package/components/layout/_theme.scss +14 -16
  55. package/components/layout/index.js +181 -153
  56. package/components/layout/index.scss +2 -2
  57. package/components/list/_spec.scss +117 -104
  58. package/components/list/_theme.scss +31 -34
  59. package/components/list/content.js +68 -52
  60. package/components/list/index.js +194 -61
  61. package/components/list/index.scss +2 -2
  62. package/components/list/item.js +136 -12
  63. package/components/list/secondary.js +46 -0
  64. package/components/menu/_spec.scss +32 -19
  65. package/components/menu/index.js +242 -229
  66. package/components/menu/index.scss +2 -2
  67. package/components/menu/item.js +95 -110
  68. package/components/progress/_spec.scss +35 -27
  69. package/components/progress/index.js +21 -0
  70. package/components/progress/index.scss +2 -1
  71. package/components/selection/_spec.scss +242 -224
  72. package/components/selection/_theme.scss +100 -95
  73. package/components/selection/index.eta +60 -0
  74. package/components/selection/index.js +76 -0
  75. package/components/selection/index.pug +15 -8
  76. package/components/selection/index.scss +2 -2
  77. package/components/selection/input.js +56 -0
  78. package/components/selection/radiogroup.js +47 -0
  79. package/components/slider/_spec.scss +10 -8
  80. package/components/slider/index.scss +2 -2
  81. package/components/snackbar/_spec.scss +22 -21
  82. package/components/snackbar/index.js +102 -111
  83. package/components/snackbar/index.scss +2 -2
  84. package/components/tab/_spec.scss +20 -19
  85. package/components/tab/content.js +41 -40
  86. package/components/tab/index.js +192 -99
  87. package/components/tab/index.scss +2 -2
  88. package/components/tab/item.js +38 -55
  89. package/components/tab/list.js +96 -72
  90. package/components/tab/panel.js +12 -13
  91. package/components/template/_theme.scss +11 -11
  92. package/components/textfield/_mixins.scss +52 -0
  93. package/components/textfield/_spec.scss +215 -266
  94. package/components/textfield/_theme.scss +95 -72
  95. package/components/textfield/index.eta +74 -0
  96. package/components/textfield/index.js +63 -57
  97. package/components/textfield/index.scss +2 -2
  98. package/components/tooltip/_spec.scss +27 -25
  99. package/components/tooltip/index.scss +2 -2
  100. package/components/type/_spec.scss +51 -38
  101. package/components/type/index.scss +2 -2
  102. package/core/_breakpoint.scss +75 -91
  103. package/core/_elevation.scss +10 -10
  104. package/core/_length.scss +9 -0
  105. package/core/_motion.scss +14 -14
  106. package/core/_platform.scss +9 -15
  107. package/core/_type.scss +33 -32
  108. package/core/aria/attributes.js +125 -25
  109. package/core/aria/button.js +23 -23
  110. package/core/aria/keyboard.js +93 -0
  111. package/core/aria/rovingtabindex.js +69 -154
  112. package/core/aria/tab.js +31 -28
  113. package/core/color/_theme.scss +240 -280
  114. package/core/color/index.scss +2 -2
  115. package/core/document/index.js +39 -0
  116. package/core/dom.js +12 -12
  117. package/core/overlay/_spec.scss +0 -3
  118. package/core/overlay/_theme.scss +56 -74
  119. package/core/overlay/index.js +49 -18
  120. package/core/overlay/index.scss +2 -2
  121. package/core/ripple/_spec.scss +22 -39
  122. package/core/ripple/_theme.scss +13 -13
  123. package/core/ripple/index.js +137 -134
  124. package/core/ripple/index.scss +2 -2
  125. package/core/theme/_config.scss +2 -0
  126. package/core/theme/_mixins.scss +172 -0
  127. package/core/theme/_palettes.scss +155 -135
  128. package/core/theme/_variables.scss +24 -15
  129. package/core/theme/index.js +50 -0
  130. package/core/throttler.js +1 -1
  131. package/core/transition/index.js +36 -20
  132. package/{docs-src → docs}/_flex.scss +0 -0
  133. package/{docs-src → docs}/_menuoptions.js +21 -34
  134. package/{docs-src → docs}/_mixins.pug +39 -26
  135. package/docs/_partials/_androidnavbar.eta +5 -0
  136. package/docs/_partials/_androidstatusbar.eta +13 -0
  137. package/docs/_partials/_appbar.eta +29 -0
  138. package/docs/_partials/_buttontest.eta +31 -0
  139. package/docs/_partials/_header.eta +149 -0
  140. package/docs/_partials/_navlistitem.eta +16 -0
  141. package/docs/_partials/_target.eta +1 -0
  142. package/{docs-src → docs}/_sample-utils.js +8 -6
  143. package/{docs-src → docs}/_storage.js +0 -0
  144. package/{docs-src → docs}/docs.scss +5 -2
  145. package/docs/index.eta +16 -0
  146. package/{docs-src → docs}/index.js +0 -0
  147. package/docs/pages/appbar.eta +114 -0
  148. package/{docs-src/components → docs/pages}/appbar.js +0 -0
  149. package/{docs-src/components → docs/pages}/appbar.pug +15 -18
  150. package/docs/pages/bottomnav.eta +188 -0
  151. package/{docs-src/components → docs/pages}/bottomnav.js +23 -24
  152. package/{docs-src/components → docs/pages}/bottomnav.pug +4 -4
  153. package/docs/pages/button.eta +124 -0
  154. package/{docs-src/components → docs/pages}/button.js +19 -19
  155. package/{docs-src/components → docs/pages}/button.pug +15 -15
  156. package/docs/pages/card.eta +90 -0
  157. package/{docs-src/components → docs/pages}/card.js +3 -3
  158. package/{docs-src/components → docs/pages}/card.pug +7 -7
  159. package/docs/pages/chip.eta +122 -0
  160. package/{docs-src/components → docs/pages}/chip.js +3 -6
  161. package/{docs-src/components → docs/pages}/chip.pug +2 -2
  162. package/docs/pages/color.eta +143 -0
  163. package/{docs-src/core → docs/pages}/color.js +95 -20
  164. package/docs/pages/color.pug +121 -0
  165. package/docs/pages/datatable.eta +323 -0
  166. package/{docs-src/components → docs/pages}/datatable.js +26 -13
  167. package/docs/pages/datatable.pug +283 -0
  168. package/docs/pages/dialog.eta +186 -0
  169. package/{docs-src/components → docs/pages}/dialog.js +26 -13
  170. package/{docs-src/components → docs/pages}/dialog.pug +46 -28
  171. package/docs/pages/dom.eta +26 -0
  172. package/docs/pages/dom.js +143 -0
  173. package/docs/pages/dom.pug +22 -0
  174. package/docs/pages/elevation.eta +35 -0
  175. package/{docs-src/components → docs/pages}/elevation.js +0 -0
  176. package/{docs-src/components → docs/pages}/elevation.pug +0 -0
  177. package/docs/pages/fab.eta +99 -0
  178. package/{docs-src/components → docs/pages}/fab.js +3 -3
  179. package/{docs-src/components → docs/pages}/fab.pug +2 -2
  180. package/docs/pages/grid.eta +135 -0
  181. package/{docs-src/components → docs/pages}/grid.js +1 -1
  182. package/{docs-src/components → docs/pages}/grid.pug +3 -3
  183. package/docs/pages/layout.eta +8 -0
  184. package/{docs-src/components → docs/pages}/layout.js +0 -0
  185. package/{docs-src/components → docs/pages}/layout.pug +0 -0
  186. package/docs/pages/list.eta +465 -0
  187. package/{docs-src/components → docs/pages}/list.js +2 -2
  188. package/{docs-src/components → docs/pages}/list.pug +7 -14
  189. package/docs/pages/menu.eta +276 -0
  190. package/{docs-src/components → docs/pages}/menu.js +14 -10
  191. package/{docs-src/components → docs/pages}/menu.pug +0 -0
  192. package/docs/pages/overlay.eta +69 -0
  193. package/docs/pages/overlay.js +4 -0
  194. package/{docs-src/core → docs/pages}/overlay.pug +14 -11
  195. package/docs/pages/progress.eta +23 -0
  196. package/{docs-src/components → docs/pages}/progress.js +1 -1
  197. package/{docs-src/components → docs/pages}/progress.pug +1 -1
  198. package/docs/pages/ripple.eta +27 -0
  199. package/docs/pages/ripple.js +4 -0
  200. package/{docs-src/core → docs/pages}/ripple.pug +4 -4
  201. package/docs/pages/search.eta +246 -0
  202. package/{docs-src/components → docs/pages}/search.js +59 -42
  203. package/{docs-src/components → docs/pages}/search.pug +50 -51
  204. package/docs/pages/selection.eta +111 -0
  205. package/docs/pages/selection.js +13 -0
  206. package/docs/pages/selection.pug +74 -0
  207. package/docs/pages/slider.eta +23 -0
  208. package/{docs-src/components → docs/pages}/slider.js +0 -0
  209. package/{docs-src/components → docs/pages}/slider.pug +0 -0
  210. package/docs/pages/snackbar.eta +83 -0
  211. package/{docs-src/components → docs/pages}/snackbar.js +3 -3
  212. package/{docs-src/components → docs/pages}/snackbar.pug +0 -0
  213. package/docs/pages/tab.eta +421 -0
  214. package/{docs-src/components → docs/pages}/tab.js +18 -35
  215. package/{docs-src/components → docs/pages}/tab.pug +4 -4
  216. package/docs/pages/textfield.eta +486 -0
  217. package/{docs-src/components → docs/pages}/textfield.js +3 -4
  218. package/{docs-src/components → docs/pages}/textfield.pug +87 -35
  219. package/docs/pages/tooltip.eta +94 -0
  220. package/{docs-src/components → docs/pages}/tooltip.js +0 -0
  221. package/{docs-src/components → docs/pages}/tooltip.pug +0 -1
  222. package/docs/pages/transition.eta +117 -0
  223. package/{docs-src/core → docs/pages}/transition.js +7 -8
  224. package/{docs-src/core → docs/pages}/transition.pug +0 -0
  225. package/docs/pages/type.eta +31 -0
  226. package/{docs-src/components → docs/pages}/type.js +0 -0
  227. package/{docs-src/components → docs/pages}/type.pug +0 -1
  228. package/docs/postrender.js +39 -0
  229. package/{docs-src → docs}/prerender.js +3 -9
  230. package/docs/pwa/_dialogs.eta +143 -0
  231. package/docs/pwa/_dialogs.pug +96 -0
  232. package/docs/pwa/_menus.eta +16 -0
  233. package/{docs-src → docs}/pwa/_menus.pug +0 -0
  234. package/docs/pwa/pwa-prerender.js +3 -0
  235. package/docs/pwa/pwa.eta +480 -0
  236. package/docs/pwa/pwa.js +306 -0
  237. package/{docs-src → docs}/pwa/pwa.pug +166 -263
  238. package/docs/pwa/pwa.scss +26 -0
  239. package/docs/spec.scss +26 -0
  240. package/docs/themes/_component-themes.scss +26 -0
  241. package/docs/themes/theme-colored-fallbacks.scss +17 -0
  242. package/docs/themes/theme-colored.scss +17 -0
  243. package/docs/themes/theme-default-fallbacks.scss +17 -0
  244. package/docs/themes/theme-default.scss +17 -0
  245. package/jsconfig.json +4 -2
  246. package/package.json +40 -27
  247. package/scripts/deploy-docs.sh +9 -0
  248. package/templates/index.eta +2 -0
  249. package/utils/function.js +3 -0
  250. package/webpack.config.cjs +257 -0
  251. package/_spec.scss +0 -27
  252. package/_theme.scss +0 -27
  253. package/components/list/expander.js +0 -142
  254. package/components/list/itemgroup.js +0 -22
  255. package/core/theme/_builder.scss +0 -116
  256. package/core/theme/index.scss +0 -68
  257. package/docs/appbar.html +0 -1
  258. package/docs/appbar.min.js +0 -2
  259. package/docs/appbar.min.js.map +0 -1
  260. package/docs/bottomnav.html +0 -1
  261. package/docs/bottomnav.min.js +0 -2
  262. package/docs/bottomnav.min.js.map +0 -1
  263. package/docs/button.html +0 -1
  264. package/docs/button.min.js +0 -2
  265. package/docs/button.min.js.map +0 -1
  266. package/docs/card.html +0 -1
  267. package/docs/card.min.js +0 -2
  268. package/docs/card.min.js.map +0 -1
  269. package/docs/chip.html +0 -1
  270. package/docs/chip.min.js +0 -2
  271. package/docs/chip.min.js.map +0 -1
  272. package/docs/color.html +0 -1
  273. package/docs/color.min.js +0 -2
  274. package/docs/color.min.js.map +0 -1
  275. package/docs/datatable.html +0 -1
  276. package/docs/datatable.min.js +0 -2
  277. package/docs/datatable.min.js.map +0 -1
  278. package/docs/default.common.min.js +0 -2
  279. package/docs/default.common.min.js.map +0 -1
  280. package/docs/dialog.html +0 -1
  281. package/docs/dialog.min.js +0 -2
  282. package/docs/dialog.min.js.map +0 -1
  283. package/docs/docs.min.css +0 -1
  284. package/docs/docs.min.js +0 -2
  285. package/docs/docs.min.js.map +0 -1
  286. package/docs/elevation.html +0 -1
  287. package/docs/elevation.min.js +0 -2
  288. package/docs/elevation.min.js.map +0 -1
  289. package/docs/fab.html +0 -1
  290. package/docs/fab.min.js +0 -2
  291. package/docs/fab.min.js.map +0 -1
  292. package/docs/grid.html +0 -1
  293. package/docs/grid.min.js +0 -2
  294. package/docs/grid.min.js.map +0 -1
  295. package/docs/index.html +0 -1
  296. package/docs/index.min.js +0 -2
  297. package/docs/index.min.js.map +0 -1
  298. package/docs/ink.html +0 -1
  299. package/docs/ink.min.js +0 -2
  300. package/docs/ink.min.js.map +0 -1
  301. package/docs/layout.html +0 -1
  302. package/docs/layout.min.js +0 -2
  303. package/docs/layout.min.js.map +0 -1
  304. package/docs/list.html +0 -1
  305. package/docs/list.min.js +0 -2
  306. package/docs/list.min.js.map +0 -1
  307. package/docs/menu.html +0 -1
  308. package/docs/menu.min.js +0 -2
  309. package/docs/menu.min.js.map +0 -1
  310. package/docs/overlay.html +0 -1
  311. package/docs/overlay.min.js +0 -2
  312. package/docs/overlay.min.js.map +0 -1
  313. package/docs/prerender.common.min.js +0 -2
  314. package/docs/prerender.common.min.js.map +0 -1
  315. package/docs/prerender.min.js +0 -2
  316. package/docs/prerender.min.js.map +0 -1
  317. package/docs/progress.html +0 -1
  318. package/docs/progress.min.js +0 -2
  319. package/docs/progress.min.js.map +0 -1
  320. package/docs/pwa-prerender.min.js +0 -2
  321. package/docs/pwa-prerender.min.js.map +0 -1
  322. package/docs/pwa.html +0 -11
  323. package/docs/pwa.min.css +0 -1
  324. package/docs/pwa.min.js +0 -2
  325. package/docs/pwa.min.js.map +0 -1
  326. package/docs/ripple.html +0 -1
  327. package/docs/ripple.min.js +0 -2
  328. package/docs/ripple.min.js.map +0 -1
  329. package/docs/search.html +0 -1
  330. package/docs/search.min.js +0 -2
  331. package/docs/search.min.js.map +0 -1
  332. package/docs/selection.html +0 -1
  333. package/docs/selection.min.js +0 -2
  334. package/docs/selection.min.js.map +0 -1
  335. package/docs/slider.html +0 -1
  336. package/docs/slider.min.js +0 -2
  337. package/docs/slider.min.js.map +0 -1
  338. package/docs/snackbar.html +0 -1
  339. package/docs/snackbar.min.js +0 -2
  340. package/docs/snackbar.min.js.map +0 -1
  341. package/docs/spec.min.css +0 -1
  342. package/docs/spec.min.js +0 -2
  343. package/docs/spec.min.js.map +0 -1
  344. package/docs/surface.html +0 -1
  345. package/docs/surface.min.js +0 -2
  346. package/docs/surface.min.js.map +0 -1
  347. package/docs/tab.html +0 -1
  348. package/docs/tab.min.js +0 -2
  349. package/docs/tab.min.js.map +0 -1
  350. package/docs/textfield.html +0 -2
  351. package/docs/textfield.min.js +0 -2
  352. package/docs/textfield.min.js.map +0 -1
  353. package/docs/theme-colored-fallbacks.min.css +0 -1
  354. package/docs/theme-colored-fallbacks.min.js +0 -2
  355. package/docs/theme-colored-fallbacks.min.js.map +0 -1
  356. package/docs/theme-colored.min.css +0 -1
  357. package/docs/theme-colored.min.js +0 -2
  358. package/docs/theme-colored.min.js.map +0 -1
  359. package/docs/theme-default-fallbacks.min.css +0 -1
  360. package/docs/theme-default-fallbacks.min.js +0 -2
  361. package/docs/theme-default-fallbacks.min.js.map +0 -1
  362. package/docs/theme-default.min.css +0 -1
  363. package/docs/theme-default.min.js +0 -2
  364. package/docs/theme-default.min.js.map +0 -1
  365. package/docs/themes-fallbacks.min.css +0 -1
  366. package/docs/themes-fallbacks.min.js +0 -2
  367. package/docs/themes-fallbacks.min.js.map +0 -1
  368. package/docs/themes.min.css +0 -1
  369. package/docs/themes.min.js +0 -2
  370. package/docs/themes.min.js.map +0 -1
  371. package/docs/tooltip.html +0 -1
  372. package/docs/tooltip.min.js +0 -2
  373. package/docs/tooltip.min.js.map +0 -1
  374. package/docs/transition.html +0 -1
  375. package/docs/transition.min.js +0 -2
  376. package/docs/transition.min.js.map +0 -1
  377. package/docs/type.html +0 -1
  378. package/docs/type.min.js +0 -2
  379. package/docs/type.min.js.map +0 -1
  380. package/docs-src/components/datatable.pug +0 -327
  381. package/docs-src/components/selection.js +0 -9
  382. package/docs-src/components/selection.pug +0 -77
  383. package/docs-src/core/color.pug +0 -201
  384. package/docs-src/core/overlay.js +0 -4
  385. package/docs-src/core/ripple.js +0 -4
  386. package/docs-src/index.pug +0 -9
  387. package/docs-src/pwa/_dialogs.pug +0 -15
  388. package/docs-src/pwa/pwa-prerender.js +0 -3
  389. package/docs-src/pwa/pwa.js +0 -182
  390. package/docs-src/pwa/pwa.scss +0 -25
  391. package/docs-src/spec.scss +0 -1
  392. package/docs-src/themes/theme-colored-fallbacks.scss +0 -14
  393. package/docs-src/themes/theme-colored.scss +0 -14
  394. package/docs-src/themes/theme-default-fallbacks.scss +0 -14
  395. package/docs-src/themes/theme-default.scss +0 -14
  396. package/index.js +0 -51
  397. package/index.scss +0 -2
  398. package/webpack.config.js +0 -187
@@ -1,15 +1,13 @@
1
- @import '../../core/_breakpoint.scss';
2
- @import '../../core/theme/index.scss';
1
+ @use '../../core/_breakpoint.scss' as breakpoint;
2
+ @use '../../core/theme/_mixins.scss' as theme;
3
3
 
4
- $mdw-layout__theme-values: (
5
- divider-color: $mdw-theme__divider-ink,
6
- ) !default;
4
+ $themeValues: () !default;
7
5
 
8
- @function mdwLayoutThemeValue($key, $type) {
9
- @return mdwGetThemeValue('layout', $mdw-layout__theme-values, $key, $type);
6
+ @function getThemeValue($key, $type) {
7
+ @return theme.getThemeValue('layout', $themeValues, $key, $type);
10
8
  }
11
9
 
12
- @mixin mdw-layout__theme-rules($type: 'var') {
10
+ @mixin addThemeRules($type: 'var') {
13
11
  @if ($type == 'var') {
14
12
  .mdw-layout__appbar[mdw-fab-cut],
15
13
  .mdw-layout__appbar.mdw-theme[mdw-fab-cut] {
@@ -17,11 +15,11 @@ $mdw-layout__theme-values: (
17
15
  }
18
16
 
19
17
  .mdw-layout__appbar-shape {
20
- color: RGB(var(--surface-color));
18
+ color: RGB(var(--mdw-surface));
21
19
  }
22
20
  }
23
21
 
24
- @include mdw-breakpoint__medium-window__min {
22
+ @include breakpoint.minMediumWindow {
25
23
  .mdw-layout__body[mdw-navdrawer-style~="floating"]:not([mdw-navdrawer-style~="card"]) > .mdw-layout__navdrawer,
26
24
  .mdw-layout__body[mdw-sidesheet-style~="floating"]:not([mdw-sidesheet-style~="card"]) > .mdw-layout__sidesheet {
27
25
  & > .mdw-layout__sheet-content {
@@ -32,15 +30,15 @@ $mdw-layout__theme-values: (
32
30
  }
33
31
 
34
32
 
35
- @include mdw-theme__add-component-fallback-rules('light') {
36
- @include mdw-layout__theme-rules('light');
33
+ @include theme.addComponentFallbackRules('light') {
34
+ @include addThemeRules('light');
37
35
  }
38
- @include mdw-theme__add-component-fallback-rules('dark') {
39
- @include mdw-layout__theme-rules('dark');
36
+ @include theme.addComponentFallbackRules('dark') {
37
+ @include addThemeRules('dark');
40
38
  }
41
39
 
42
40
 
43
- @include mdw-theme__add-component-variable-rules('layout', $mdw-layout__theme-values) {
44
- @include mdw-layout__theme-rules();
41
+ @include theme.addComponentCSSVariableRules('layout', $themeValues) {
42
+ @include addThemeRules();
45
43
  }
46
44
 
@@ -1,5 +1,5 @@
1
- import { iterateArrayLike, getPassiveEventListenerOption } from '../../core/dom';
2
- import Throttler from '../../core/throttler';
1
+ import { getPassiveEventListenerOption, iterateArrayLike } from '../../core/dom.js';
2
+ import Throttler from '../../core/throttler.js';
3
3
 
4
4
  const MIN_SCROLL_DELTA = 24; // Avoid finger bounce
5
5
 
@@ -10,76 +10,20 @@ const TABLET_BREAKPOINT = 1024;
10
10
  // Smoother than using requestAnimationFrame
11
11
  const SCROLL_THROTTLE_TIME_MS = 20;
12
12
 
13
+ /** @type {number} */
13
14
  let lastScrollY = null;
15
+ /** @type {number} */
14
16
  let penultimateScrollY = null;
15
17
  let scrolledPastAppBar = false;
18
+ /** @type {HTMLElement} */
16
19
  let appBarElement = null;
20
+ /** @type {HTMLElement} */
17
21
  let layoutContentElement = null;
22
+ /** @type {number} */
18
23
  let lastScrollBottomDistance = null;
24
+ /** @type {Throttler} */
19
25
  let scrollThrottler = null;
20
26
 
21
- /** @return {void} */
22
- export function attach() {
23
- const appBar = getAppBarElement();
24
- if (appBar) {
25
- // Initialize with scroll up
26
- document.body.addEventListener('scroll', onBodyScroll, getPassiveEventListenerOption());
27
- const contentElement = getContentElement();
28
- if (contentElement) {
29
- contentElement.addEventListener('scroll', onContentScroll, getPassiveEventListenerOption());
30
- }
31
- resetScroll();
32
- }
33
-
34
- iterateArrayLike(document.getElementsByClassName('mdw-layout__navdrawer-toggle'),
35
- el => el.addEventListener('click', toggleNavDrawer));
36
- iterateArrayLike(document.getElementsByClassName('mdw-layout__navdrawer-show'),
37
- el => el.addEventListener('click', showNavDrawer));
38
- iterateArrayLike(document.getElementsByClassName('mdw-layout__navdrawer-hide'),
39
- el => el.addEventListener('click', hideNavDrawer));
40
- iterateArrayLike(document.getElementsByClassName('mdw-layout__sidesheet-toggle'),
41
- el => el.addEventListener('click', toggleSideSheet));
42
- iterateArrayLike(document.getElementsByClassName('mdw-layout__sidesheet-show'),
43
- el => el.addEventListener('click', showSideSheet));
44
- iterateArrayLike(document.getElementsByClassName('mdw-layout__sidesheet-hide'),
45
- el => el.addEventListener('click', hideSideSheet));
46
- const scrim = document.getElementsByClassName('mdw-layout__scrim')[0];
47
- if (scrim) {
48
- scrim.addEventListener('click', onScrimClick);
49
- scrim.addEventListener('scroll', onScrimScroll);
50
- scrim.addEventListener('touchmove', onScrimScroll);
51
- scrim.addEventListener('wheel', onScrimScroll);
52
- }
53
- }
54
-
55
- /**
56
- * Run before document has loaded
57
- * @return {void}
58
- */
59
- export function onPrerender() {
60
- if ('standalone' in navigator && navigator.standalone) {
61
- document.documentElement.setAttribute('mdw-standalone', '');
62
- }
63
-
64
- const ua = navigator.userAgent.toLowerCase();
65
- if (/iphone/.test(ua) || /ipad/.test(ua)) {
66
- document.documentElement.setAttribute('mdw-ios', '');
67
- }
68
-
69
- // Auto lightness and fill
70
- if (!document.documentElement.hasAttribute('mdw-surface')
71
- && !document.documentElement.hasAttribute('mdw-light')
72
- && !document.documentElement.hasAttribute('mdw-dark')) {
73
- if (window.matchMedia('(prefers-color-scheme:dark)').matches) {
74
- document.documentElement.setAttribute('mdw-dark', '');
75
- document.documentElement.setAttribute('mdw-surface', 'black');
76
- } else {
77
- document.documentElement.setAttribute('mdw-light', '');
78
- document.documentElement.setAttribute('mdw-surface', 'white');
79
- }
80
- }
81
- }
82
-
83
27
  /** @return {Throttler} */
84
28
  export function getScrollThrottler() {
85
29
  if (!scrollThrottler) {
@@ -94,9 +38,9 @@ export function getScrollThrottler() {
94
38
  */
95
39
  export function onScrimScroll(event) {
96
40
  // JS needed for Safari
97
- event.preventDefault();
98
41
  event.stopPropagation();
99
42
  if (event.type !== 'scroll') {
43
+ event.preventDefault();
100
44
  return;
101
45
  }
102
46
  /** @type {HTMLElement} */
@@ -109,81 +53,107 @@ export function onScrimScroll(event) {
109
53
  }
110
54
  }
111
55
 
112
-
113
- /** @return {void} */
114
- export function onScrimClick() {
115
- const navdrawer = document.getElementsByClassName('mdw-layout__navdrawer')[0];
116
- if (navdrawer && navdrawer.getAttribute('aria-hidden') === 'false') {
117
- if (window.innerWidth < TABLET_BREAKPOINT || document.body.getAttribute('mdw-navdrawer-style') === 'modal') {
118
- hideNavDrawer();
119
- }
56
+ /** @return {boolean} */
57
+ export function isNavDrawerModalShowing() {
58
+ const navDrawer = document.getElementsByClassName('mdw-layout__navdrawer')[0];
59
+ if (!navDrawer) {
60
+ return false;
120
61
  }
121
- const sidesheet = document.getElementsByClassName('mdw-layout__sidesheet')[0];
122
- if (sidesheet && sidesheet.getAttribute('aria-hidden') === 'false') {
123
- if (window.innerWidth < TABLET_BREAKPOINT || document.body.getAttribute('mdw-sidesheet-style') === 'modal') {
124
- hideSideSheet();
125
- }
62
+ if (window.location.hash !== `#${navDrawer.id}` && navDrawer.getAttribute('aria-hidden') !== 'false') {
63
+ return false;
126
64
  }
65
+ return (window.innerWidth < TABLET_BREAKPOINT || document.body.getAttribute('mdw-navdrawer-style') === 'modal');
127
66
  }
128
67
 
129
- /** @return {void} */
130
- export function showNavDrawer() {
68
+ /**
69
+ * @param {MouseEvent} [event]
70
+ * @return {void}
71
+ */
72
+ export function showNavDrawer(event) {
73
+ if (event && event.target instanceof HTMLAnchorElement) {
74
+ event.preventDefault();
75
+ }
131
76
  document.getElementsByClassName('mdw-layout__navdrawer')[0].setAttribute('aria-hidden', 'false');
132
77
  }
133
78
 
134
- /** @return {void} */
135
- export function hideNavDrawer() {
136
- document.getElementsByClassName('mdw-layout__navdrawer')[0].setAttribute('aria-hidden', 'true');
79
+ /**
80
+ * @param {MouseEvent} [event]
81
+ * @return {void}
82
+ */
83
+ export function hideNavDrawer(event) {
84
+ if (event && event.target instanceof HTMLAnchorElement) {
85
+ event.preventDefault();
86
+ }
87
+ const navDrawer = document.getElementsByClassName('mdw-layout__navdrawer')[0];
88
+ navDrawer.setAttribute('aria-hidden', 'true');
89
+ if (window.location.hash === `#${navDrawer.id}`) {
90
+ window.location.hash = '';
91
+ }
137
92
  }
138
93
 
139
- /** @return {void} */
140
- export function toggleNavDrawer() {
94
+ /**
95
+ * @param {MouseEvent} [event]
96
+ * @return {void}
97
+ */
98
+ export function toggleNavDrawer(event) {
141
99
  if (document.getElementsByClassName('mdw-layout__navdrawer')[0].getAttribute('aria-hidden') === 'false') {
142
- hideNavDrawer();
100
+ hideNavDrawer(event);
143
101
  } else {
144
- showNavDrawer();
102
+ showNavDrawer(event);
145
103
  }
146
104
  }
147
105
 
148
- /** @return {void} */
149
- export function showSideSheet() {
106
+ /**
107
+ * @param {MouseEvent} [event]
108
+ * @return {void}
109
+ */
110
+ export function showSideSheet(event) {
111
+ if (event && event.target instanceof HTMLAnchorElement) {
112
+ event.preventDefault();
113
+ }
150
114
  document.getElementsByClassName('mdw-layout__sidesheet')[0].setAttribute('aria-hidden', 'false');
151
115
  }
152
116
 
153
- /** @return {void} */
154
- export function hideSideSheet() {
117
+ /**
118
+ * @param {MouseEvent} [event]
119
+ * @return {void}
120
+ */
121
+ export function hideSideSheet(event) {
122
+ if (event && event.target instanceof HTMLAnchorElement) {
123
+ event.preventDefault();
124
+ }
155
125
  document.getElementsByClassName('mdw-layout__sidesheet')[0].setAttribute('aria-hidden', 'true');
156
126
  }
157
127
 
158
- /** @return {void} */
159
- export function toggleSideSheet() {
160
- if (document.getElementsByClassName('mdw-layout__sidesheet')[0].getAttribute('aria-hidden') === 'false') {
161
- hideSideSheet();
162
- } else {
163
- showSideSheet();
128
+ /**
129
+ * @param {MouseEvent} [event]
130
+ * @return {void}
131
+ */
132
+ export function onScrimClick(event) {
133
+ if (event && event.target instanceof HTMLAnchorElement) {
134
+ event.preventDefault();
164
135
  }
165
- }
166
-
167
- /** @return {void} */
168
- export function detach() {
169
- document.removeEventListener('scroll', onBodyScroll);
170
- const content = getContentElement();
171
- if (content) {
172
- content.removeEventListener('scroll', onContentScroll);
136
+ if (isNavDrawerModalShowing()) {
137
+ hideNavDrawer();
173
138
  }
174
- const scrim = document.getElementsByClassName('mdw-layout__scrim')[0];
175
- if (scrim) {
176
- scrim.removeEventListener('click', onScrimClick);
177
- scrim.removeEventListener('scroll', onScrimScroll);
178
- scrim.removeEventListener('touchmove', onScrimScroll);
179
- scrim.removeEventListener('wheel', onScrimScroll);
139
+ const sidesheet = document.getElementsByClassName('mdw-layout__sidesheet')[0];
140
+ if (sidesheet && sidesheet.getAttribute('aria-hidden') === 'false') {
141
+ if (window.innerWidth < TABLET_BREAKPOINT || document.body.getAttribute('mdw-sidesheet-style') === 'modal') {
142
+ hideSideSheet();
143
+ }
180
144
  }
181
145
  }
182
146
 
183
- /** @return {void} */
184
- export function onBodyScroll() {
185
- // position:sticky scrolling
186
- getScrollThrottler().run(() => onScroll(true));
147
+ /**
148
+ * @param {MouseEvent} [event]
149
+ * @return {void}
150
+ */
151
+ export function toggleSideSheet(event) {
152
+ if (document.getElementsByClassName('mdw-layout__sidesheet')[0].getAttribute('aria-hidden') === 'false') {
153
+ hideSideSheet(event);
154
+ } else {
155
+ showSideSheet(event);
156
+ }
187
157
  }
188
158
 
189
159
  /** @return {boolean} */
@@ -197,6 +167,15 @@ export function isTablet() {
197
167
  && window.innerWidth < TABLET_BREAKPOINT;
198
168
  }
199
169
 
170
+ /** @return {HTMLElement} */
171
+ export function getAppBarElement() {
172
+ if (!appBarElement) {
173
+ /** @type {HTMLElement} */
174
+ appBarElement = (document.getElementsByClassName('mdw-layout__appbar')[0]);
175
+ }
176
+ return appBarElement;
177
+ }
178
+
200
179
  /** @return {boolean} */
201
180
  export function shouldAutoHideAppBar() {
202
181
  const appBar = getAppBarElement();
@@ -220,16 +199,18 @@ export function shouldAutoHideAppBar() {
220
199
  }
221
200
 
222
201
  /** @return {void} */
223
- export function onContentScroll() {
224
- getScrollThrottler().run(() => onScroll(false));
225
- }
226
-
227
- /** @return {HTMLElement} */
228
- export function getAppBarElement() {
229
- if (!appBarElement) {
230
- appBarElement = document.getElementsByClassName('mdw-layout__appbar')[0];
202
+ export function openAppBarFabCut() {
203
+ const appBar = getAppBarElement();
204
+ if (!appBar) {
205
+ return;
206
+ }
207
+ const fabCutAttr = appBar.getAttribute('mdw-fab-cut');
208
+ if (fabCutAttr == null) {
209
+ return;
210
+ }
211
+ if (fabCutAttr.indexOf('open') === -1) {
212
+ appBar.setAttribute('mdw-fab-cut', `open ${fabCutAttr}`.trim());
231
213
  }
232
- return appBarElement;
233
214
  }
234
215
 
235
216
  /**
@@ -247,21 +228,6 @@ export function showFab(changeFabCut) {
247
228
  }
248
229
  }
249
230
 
250
- /** @return {void} */
251
- export function openAppBarFabCut() {
252
- const appBar = getAppBarElement();
253
- if (!appBar) {
254
- return;
255
- }
256
- const fabCutAttr = appBar.getAttribute('mdw-fab-cut');
257
- if (fabCutAttr == null) {
258
- return;
259
- }
260
- if (fabCutAttr.indexOf('open') === -1) {
261
- appBar.setAttribute('mdw-fab-cut', `open ${fabCutAttr}`.trim());
262
- }
263
- }
264
-
265
231
  /** @return {void} */
266
232
  export function closeAppBarFabCut() {
267
233
  const appBar = getAppBarElement();
@@ -304,24 +270,12 @@ export function isFabShown() {
304
270
  /** @return {HTMLElement} */
305
271
  export function getContentElement() {
306
272
  if (!layoutContentElement) {
307
- layoutContentElement = document.getElementsByClassName('mdw-layout__content')[0];
273
+ /** @type {HTMLElement} */
274
+ layoutContentElement = (document.getElementsByClassName('mdw-layout__content')[0]);
308
275
  }
309
276
  return layoutContentElement;
310
277
  }
311
278
 
312
- /** @return {void} */
313
- export function resetScroll() {
314
- const appBar = getAppBarElement();
315
- if (appBar) {
316
- appBar.removeAttribute('mdw-hide');
317
- appBar.removeAttribute('mdw-raise');
318
- }
319
- scrolledPastAppBar = false;
320
- lastScrollY = 0 + MIN_SCROLL_DELTA;
321
- penultimateScrollY = lastScrollY;
322
- onScroll(true);
323
- }
324
-
325
279
  /**
326
280
  * @param {boolean} isBody
327
281
  * @return {void}
@@ -434,3 +388,77 @@ export function onScroll(isBody) {
434
388
  }
435
389
  }
436
390
  }
391
+
392
+ /** @return {void} */
393
+ export function onContentScroll() {
394
+ getScrollThrottler().run(() => onScroll(false));
395
+ }
396
+
397
+ /** @return {void} */
398
+ export function onBodyScroll() {
399
+ // position:sticky scrolling
400
+ getScrollThrottler().run(() => onScroll(true));
401
+ }
402
+
403
+ /** @return {void} */
404
+ export function resetScroll() {
405
+ const appBar = getAppBarElement();
406
+ if (appBar) {
407
+ appBar.removeAttribute('mdw-hide');
408
+ appBar.removeAttribute('mdw-raise');
409
+ }
410
+ scrolledPastAppBar = false;
411
+ lastScrollY = 0 + MIN_SCROLL_DELTA;
412
+ penultimateScrollY = lastScrollY;
413
+ onScroll(true);
414
+ }
415
+
416
+ /** @return {void} */
417
+ export function attach() {
418
+ const appBar = getAppBarElement();
419
+ if (appBar) {
420
+ // Initialize with scroll up
421
+ document.body.addEventListener('scroll', onBodyScroll, getPassiveEventListenerOption());
422
+ const contentElement = getContentElement();
423
+ if (contentElement) {
424
+ contentElement.addEventListener('scroll', onContentScroll, getPassiveEventListenerOption());
425
+ }
426
+ resetScroll();
427
+ }
428
+
429
+ iterateArrayLike(document.getElementsByClassName('mdw-layout__navdrawer-toggle'),
430
+ (el) => el.addEventListener('click', toggleNavDrawer));
431
+ iterateArrayLike(document.getElementsByClassName('mdw-layout__navdrawer-show'),
432
+ (el) => el.addEventListener('click', showNavDrawer));
433
+ iterateArrayLike(document.getElementsByClassName('mdw-layout__navdrawer-hide'),
434
+ (el) => el.addEventListener('click', hideNavDrawer));
435
+ iterateArrayLike(document.getElementsByClassName('mdw-layout__sidesheet-toggle'),
436
+ (el) => el.addEventListener('click', toggleSideSheet));
437
+ iterateArrayLike(document.getElementsByClassName('mdw-layout__sidesheet-show'),
438
+ (el) => el.addEventListener('click', showSideSheet));
439
+ iterateArrayLike(document.getElementsByClassName('mdw-layout__sidesheet-hide'),
440
+ (el) => el.addEventListener('click', hideSideSheet));
441
+ const scrim = document.getElementsByClassName('mdw-layout__scrim')[0];
442
+ if (scrim) {
443
+ scrim.addEventListener('click', onScrimClick);
444
+ scrim.addEventListener('scroll', onScrimScroll);
445
+ scrim.addEventListener('touchmove', onScrimScroll);
446
+ scrim.addEventListener('wheel', onScrimScroll);
447
+ }
448
+ }
449
+
450
+ /** @return {void} */
451
+ export function detach() {
452
+ document.removeEventListener('scroll', onBodyScroll, getPassiveEventListenerOption());
453
+ const content = getContentElement();
454
+ if (content) {
455
+ content.removeEventListener('scroll', onContentScroll, getPassiveEventListenerOption());
456
+ }
457
+ const scrim = document.getElementsByClassName('mdw-layout__scrim')[0];
458
+ if (scrim) {
459
+ scrim.removeEventListener('click', onScrimClick);
460
+ scrim.removeEventListener('scroll', onScrimScroll);
461
+ scrim.removeEventListener('touchmove', onScrimScroll);
462
+ scrim.removeEventListener('wheel', onScrimScroll);
463
+ }
464
+ }
@@ -1,2 +1,2 @@
1
- @import './_spec.scss';
2
- @import './_theme.scss';
1
+ @forward './_spec.scss';
2
+ @forward './_theme.scss';