@shortfuse/materialdesignweb 0.4.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (452) hide show
  1. package/README.md +155 -79
  2. package/bin/generate-css.js +12 -0
  3. package/components/Badge.css +30 -0
  4. package/components/Badge.js +15 -0
  5. package/components/Body.css +14 -0
  6. package/components/Body.js +7 -0
  7. package/components/BottomAppBar.css +23 -0
  8. package/components/BottomAppBar.js +25 -0
  9. package/components/Box.css +31 -0
  10. package/components/Box.js +24 -0
  11. package/components/Button.css +146 -0
  12. package/components/Button.js +95 -0
  13. package/components/Button.md +61 -0
  14. package/components/Card.css +109 -0
  15. package/components/Card.js +82 -0
  16. package/components/Checkbox.css +77 -0
  17. package/components/Checkbox.js +59 -0
  18. package/components/CheckboxIcon.css +89 -0
  19. package/components/CheckboxIcon.js +41 -0
  20. package/components/Chip.css +35 -0
  21. package/components/Chip.js +22 -0
  22. package/components/Dialog.css +235 -0
  23. package/components/Dialog.js +327 -0
  24. package/components/DialogActions.js +13 -0
  25. package/components/Divider.css +41 -0
  26. package/components/Divider.js +13 -0
  27. package/components/ExtendedFab.css +24 -0
  28. package/components/ExtendedFab.js +11 -0
  29. package/components/Fab.css +23 -0
  30. package/components/Fab.js +26 -0
  31. package/components/FilterChip.css +80 -0
  32. package/components/FilterChip.js +51 -0
  33. package/components/Headline.css +14 -0
  34. package/components/Headline.js +33 -0
  35. package/components/Icon.css +76 -0
  36. package/components/Icon.js +174 -0
  37. package/components/IconButton.css +151 -0
  38. package/components/IconButton.js +65 -0
  39. package/components/Input.js +16 -0
  40. package/components/Label.css +14 -0
  41. package/components/Label.js +7 -0
  42. package/components/Layout.css +19 -0
  43. package/components/Layout.js +12 -0
  44. package/components/List.css +12 -0
  45. package/components/List.js +17 -0
  46. package/components/ListItem.css +224 -0
  47. package/components/ListItem.js +112 -0
  48. package/components/ListOption.css +34 -0
  49. package/components/ListOption.js +122 -0
  50. package/components/ListSelect.css +9 -0
  51. package/components/ListSelect.js +206 -0
  52. package/components/Menu.css +171 -0
  53. package/components/Menu.js +470 -0
  54. package/components/MenuItem.css +53 -0
  55. package/components/MenuItem.js +215 -0
  56. package/components/Nav.css +17 -0
  57. package/components/Nav.js +23 -0
  58. package/components/NavBar.css +34 -0
  59. package/components/NavBar.js +88 -0
  60. package/components/NavBarItem.css +41 -0
  61. package/components/NavBarItem.js +7 -0
  62. package/components/NavDrawer.css +31 -0
  63. package/components/NavDrawer.js +13 -0
  64. package/components/NavDrawerItem.css +42 -0
  65. package/components/NavDrawerItem.js +12 -0
  66. package/components/NavItem.css +181 -0
  67. package/components/NavItem.js +83 -0
  68. package/components/NavRail.css +47 -0
  69. package/components/NavRail.js +17 -0
  70. package/components/NavRailItem.css +25 -0
  71. package/components/NavRailItem.js +7 -0
  72. package/components/Option.js +91 -0
  73. package/components/Outline.css +138 -0
  74. package/components/Pane.css +261 -0
  75. package/components/Pane.js +21 -0
  76. package/components/Progress.css +74 -0
  77. package/components/Progress.js +67 -0
  78. package/components/ProgressCircle.css +226 -0
  79. package/components/ProgressLine.css +155 -0
  80. package/components/Radio.css +83 -0
  81. package/components/Radio.js +42 -0
  82. package/components/RadioIcon.css +73 -0
  83. package/components/RadioIcon.js +37 -0
  84. package/components/Ripple.css +74 -0
  85. package/components/Ripple.js +114 -0
  86. package/components/SegmentedButton.css +94 -0
  87. package/components/SegmentedButton.js +49 -0
  88. package/components/SegmentedButtonGroup.css +12 -0
  89. package/components/SegmentedButtonGroup.js +44 -0
  90. package/components/Select.css +52 -0
  91. package/components/Select.js +71 -0
  92. package/components/Shape.css +132 -0
  93. package/components/Shape.js +25 -0
  94. package/components/Slider.css +306 -0
  95. package/components/Slider.js +206 -0
  96. package/components/Snackbar.css +80 -0
  97. package/components/Snackbar.js +75 -0
  98. package/components/Surface.css +10 -0
  99. package/components/Surface.js +23 -0
  100. package/components/Switch.css +63 -0
  101. package/components/Switch.js +127 -0
  102. package/components/SwitchIcon.css +177 -0
  103. package/components/SwitchIcon.js +89 -0
  104. package/components/SwitchIconAnimations.css +89 -0
  105. package/components/Tab.css +85 -0
  106. package/components/Tab.js +103 -0
  107. package/components/TabContent.js +151 -0
  108. package/components/TabList.css +129 -0
  109. package/components/TabList.js +309 -0
  110. package/components/TabPanel.js +37 -0
  111. package/components/TextArea.css +93 -0
  112. package/components/TextArea.js +229 -0
  113. package/components/Title.css +14 -0
  114. package/components/Title.js +15 -0
  115. package/components/Tooltip.css +40 -0
  116. package/components/Tooltip.js +22 -0
  117. package/components/TopAppBar.css +209 -0
  118. package/components/TopAppBar.js +201 -0
  119. package/core/Composition.js +988 -0
  120. package/core/CustomElement.js +844 -0
  121. package/core/ICustomElement.d.ts +288 -0
  122. package/core/ICustomElement.js +1 -0
  123. package/core/css.js +51 -0
  124. package/core/customTypes.js +125 -0
  125. package/core/dom.js +56 -245
  126. package/core/identify.js +40 -0
  127. package/core/observe.js +410 -0
  128. package/core/template.js +121 -0
  129. package/core/typings.d.ts +135 -0
  130. package/core/typings.js +1 -0
  131. package/mixins/AriaReflectorMixin.js +42 -0
  132. package/mixins/AriaToolbarMixin.js +13 -0
  133. package/mixins/ControlMixin.css +57 -0
  134. package/mixins/ControlMixin.js +212 -0
  135. package/mixins/DensityMixin.css +40 -0
  136. package/mixins/DensityMixin.js +11 -0
  137. package/mixins/FlexableMixin.css +79 -0
  138. package/mixins/FlexableMixin.js +32 -0
  139. package/mixins/FormAssociatedMixin.js +170 -0
  140. package/mixins/InputMixin.js +335 -0
  141. package/mixins/KeyboardNavMixin.js +244 -0
  142. package/mixins/RTLObserverMixin.js +35 -0
  143. package/mixins/ResizeObserverMixin.js +38 -0
  144. package/mixins/RippleMixin.css +12 -0
  145. package/mixins/RippleMixin.js +115 -0
  146. package/mixins/ScrollListenerMixin.js +100 -0
  147. package/mixins/ShapeMixin.css +135 -0
  148. package/mixins/ShapeMixin.js +31 -0
  149. package/mixins/StateMixin.css +82 -0
  150. package/mixins/StateMixin.js +114 -0
  151. package/mixins/SurfaceMixin.css +150 -0
  152. package/mixins/SurfaceMixin.js +32 -0
  153. package/mixins/TextFieldMixin.css +657 -0
  154. package/mixins/TextFieldMixin.js +121 -0
  155. package/mixins/ThemableMixin.css +204 -0
  156. package/mixins/ThemableMixin.js +16 -0
  157. package/mixins/TooltipTriggerMixin.css +27 -0
  158. package/mixins/TooltipTriggerMixin.js +366 -0
  159. package/mixins/TouchTargetMixin.css +26 -0
  160. package/mixins/TouchTargetMixin.js +9 -0
  161. package/package.json +57 -41
  162. package/theming/index.js +594 -0
  163. package/theming/loader.js +24 -0
  164. package/utils/cli.js +11 -0
  165. package/utils/color_keywords.js +151 -0
  166. package/utils/hct/Cam16.js +298 -0
  167. package/utils/hct/CorePalette.js +84 -0
  168. package/utils/hct/Hct.js +172 -0
  169. package/utils/hct/Scheme.js +587 -0
  170. package/utils/hct/TonalPalette.js +68 -0
  171. package/utils/hct/ViewingConditions.js +136 -0
  172. package/utils/hct/blend.js +93 -0
  173. package/utils/hct/colorUtils.js +302 -0
  174. package/utils/hct/hctSolver.js +559 -0
  175. package/utils/hct/helper.js +182 -0
  176. package/utils/hct/mathUtils.js +153 -0
  177. package/utils/jsonMergePatch.js +100 -0
  178. package/utils/jsx-runtime.js +101 -0
  179. package/utils/popup.js +117 -0
  180. package/utils/svg.js +129 -0
  181. package/.browserslistrc +0 -3
  182. package/.eslintrc.json +0 -153
  183. package/.stylelintrc.json +0 -600
  184. package/.vscode/launch.json +0 -31
  185. package/.vscode/settings.json +0 -3
  186. package/.vscode/tasks.json +0 -32
  187. package/CHANGELOG.md +0 -24
  188. package/CODE_OF_CONDUCT.md +0 -46
  189. package/adapters/datatable/column.js +0 -203
  190. package/adapters/datatable/index.js +0 -972
  191. package/adapters/dom/index.js +0 -601
  192. package/adapters/list/index.js +0 -69
  193. package/adapters/search/index.js +0 -521
  194. package/components/appbar/_spec.scss +0 -225
  195. package/components/appbar/_theme.scss +0 -0
  196. package/components/appbar/index.scss +0 -2
  197. package/components/banner/_spec.scss +0 -118
  198. package/components/banner/_theme.scss +0 -0
  199. package/components/banner/index.scss +0 -2
  200. package/components/bottomnav/README.md +0 -85
  201. package/components/bottomnav/_spec.scss +0 -157
  202. package/components/bottomnav/_theme.scss +0 -0
  203. package/components/bottomnav/index.js +0 -122
  204. package/components/bottomnav/index.scss +0 -2
  205. package/components/bottomnav/item.js +0 -89
  206. package/components/button/README.md +0 -61
  207. package/components/button/_spec.scss +0 -161
  208. package/components/button/_theme.scss +0 -65
  209. package/components/button/index.eta +0 -32
  210. package/components/button/index.js +0 -43
  211. package/components/button/index.pug +0 -18
  212. package/components/button/index.scss +0 -2
  213. package/components/card/_spec.scss +0 -249
  214. package/components/card/_theme.scss +0 -0
  215. package/components/card/index.scss +0 -2
  216. package/components/chip/_spec.scss +0 -134
  217. package/components/chip/_theme.scss +0 -177
  218. package/components/chip/index.js +0 -21
  219. package/components/chip/index.scss +0 -2
  220. package/components/chip/item.js +0 -20
  221. package/components/datatable/_spec.scss +0 -288
  222. package/components/datatable/_theme.scss +0 -154
  223. package/components/datatable/cell.js +0 -45
  224. package/components/datatable/columnheader.js +0 -47
  225. package/components/datatable/index.js +0 -388
  226. package/components/datatable/index.scss +0 -2
  227. package/components/datatable/row.js +0 -49
  228. package/components/datatable/rowheader.js +0 -18
  229. package/components/dialog/_spec.scss +0 -213
  230. package/components/dialog/_theme.scss +0 -0
  231. package/components/dialog/index.js +0 -627
  232. package/components/dialog/index.scss +0 -2
  233. package/components/divider/_spec.scss +0 -13
  234. package/components/divider/_theme.scss +0 -0
  235. package/components/divider/index.scss +0 -2
  236. package/components/elevation/_spec.scss +0 -9
  237. package/components/elevation/_theme.scss +0 -0
  238. package/components/elevation/index.scss +0 -2
  239. package/components/fab/_spec.scss +0 -222
  240. package/components/fab/_theme.scss +0 -0
  241. package/components/fab/index.js +0 -103
  242. package/components/fab/index.scss +0 -2
  243. package/components/grid/_spec.scss +0 -312
  244. package/components/grid/_theme.scss +0 -0
  245. package/components/grid/index.scss +0 -2
  246. package/components/layout/_mixins.scss +0 -33
  247. package/components/layout/_spec.scss +0 -1012
  248. package/components/layout/_theme.scss +0 -44
  249. package/components/layout/index.js +0 -464
  250. package/components/layout/index.scss +0 -2
  251. package/components/list/_spec.scss +0 -397
  252. package/components/list/_theme.scss +0 -111
  253. package/components/list/content.js +0 -110
  254. package/components/list/index.js +0 -260
  255. package/components/list/index.scss +0 -2
  256. package/components/list/item.js +0 -170
  257. package/components/list/secondary.js +0 -46
  258. package/components/menu/_spec.scss +0 -362
  259. package/components/menu/_theme.scss +0 -0
  260. package/components/menu/index.js +0 -721
  261. package/components/menu/index.scss +0 -2
  262. package/components/menu/item.js +0 -239
  263. package/components/progress/_spec.scss +0 -147
  264. package/components/progress/_theme.scss +0 -0
  265. package/components/progress/index.js +0 -36
  266. package/components/progress/index.scss +0 -2
  267. package/components/selection/_spec.scss +0 -386
  268. package/components/selection/_theme.scss +0 -166
  269. package/components/selection/index.eta +0 -60
  270. package/components/selection/index.js +0 -76
  271. package/components/selection/index.pug +0 -30
  272. package/components/selection/index.scss +0 -2
  273. package/components/selection/input.js +0 -56
  274. package/components/selection/radiogroup.js +0 -47
  275. package/components/slider/_spec.scss +0 -64
  276. package/components/slider/_theme.scss +0 -0
  277. package/components/slider/index.scss +0 -2
  278. package/components/snackbar/_spec.scss +0 -195
  279. package/components/snackbar/_theme.scss +0 -0
  280. package/components/snackbar/index.js +0 -344
  281. package/components/snackbar/index.scss +0 -2
  282. package/components/tab/_spec.scss +0 -235
  283. package/components/tab/_theme.scss +0 -0
  284. package/components/tab/content.js +0 -205
  285. package/components/tab/index.js +0 -260
  286. package/components/tab/index.scss +0 -2
  287. package/components/tab/item.js +0 -89
  288. package/components/tab/list.js +0 -210
  289. package/components/tab/panel.js +0 -54
  290. package/components/template/_theme.scss +0 -27
  291. package/components/textfield/README.md +0 -179
  292. package/components/textfield/_mixins.scss +0 -52
  293. package/components/textfield/_spec.scss +0 -809
  294. package/components/textfield/_theme.scss +0 -299
  295. package/components/textfield/index.eta +0 -74
  296. package/components/textfield/index.js +0 -168
  297. package/components/textfield/index.pug +0 -30
  298. package/components/textfield/index.scss +0 -2
  299. package/components/tooltip/_spec.scss +0 -188
  300. package/components/tooltip/_theme.scss +0 -0
  301. package/components/tooltip/index.scss +0 -2
  302. package/components/type/_spec.scss +0 -224
  303. package/components/type/_theme.scss +0 -0
  304. package/components/type/index.scss +0 -2
  305. package/core/_breakpoint.scss +0 -189
  306. package/core/_elevation.scss +0 -38
  307. package/core/_length.scss +0 -9
  308. package/core/_motion.scss +0 -31
  309. package/core/_platform.scss +0 -34
  310. package/core/_type.scss +0 -127
  311. package/core/aria/attributes.js +0 -141
  312. package/core/aria/button.js +0 -50
  313. package/core/aria/keyboard.js +0 -93
  314. package/core/aria/rovingtabindex.js +0 -178
  315. package/core/aria/tab.js +0 -60
  316. package/core/color/_spec.scss +0 -0
  317. package/core/color/_theme.scss +0 -390
  318. package/core/color/index.scss +0 -2
  319. package/core/document/index.js +0 -39
  320. package/core/overlay/_spec.scss +0 -31
  321. package/core/overlay/_theme.scss +0 -171
  322. package/core/overlay/index.js +0 -108
  323. package/core/overlay/index.scss +0 -2
  324. package/core/ripple/_spec.scss +0 -197
  325. package/core/ripple/_theme.scss +0 -40
  326. package/core/ripple/index.js +0 -294
  327. package/core/ripple/index.scss +0 -2
  328. package/core/theme/_config.scss +0 -2
  329. package/core/theme/_mixins.scss +0 -172
  330. package/core/theme/_palettes.scss +0 -406
  331. package/core/theme/_variables.scss +0 -24
  332. package/core/theme/index.js +0 -50
  333. package/core/throttler.js +0 -42
  334. package/core/transition/index.js +0 -468
  335. package/docs/_flex.scss +0 -22
  336. package/docs/_menuoptions.js +0 -183
  337. package/docs/_mixins.pug +0 -155
  338. package/docs/_partials/_androidnavbar.eta +0 -5
  339. package/docs/_partials/_androidstatusbar.eta +0 -13
  340. package/docs/_partials/_appbar.eta +0 -29
  341. package/docs/_partials/_buttontest.eta +0 -31
  342. package/docs/_partials/_header.eta +0 -149
  343. package/docs/_partials/_navlistitem.eta +0 -16
  344. package/docs/_partials/_target.eta +0 -1
  345. package/docs/_sample-utils.js +0 -93
  346. package/docs/_storage.js +0 -33
  347. package/docs/docs.scss +0 -295
  348. package/docs/index.eta +0 -16
  349. package/docs/index.js +0 -0
  350. package/docs/pages/appbar.eta +0 -114
  351. package/docs/pages/appbar.js +0 -0
  352. package/docs/pages/appbar.pug +0 -78
  353. package/docs/pages/bottomnav.eta +0 -188
  354. package/docs/pages/bottomnav.js +0 -115
  355. package/docs/pages/bottomnav.pug +0 -137
  356. package/docs/pages/button.eta +0 -124
  357. package/docs/pages/button.js +0 -224
  358. package/docs/pages/button.pug +0 -121
  359. package/docs/pages/card.eta +0 -90
  360. package/docs/pages/card.js +0 -177
  361. package/docs/pages/card.pug +0 -74
  362. package/docs/pages/chip.eta +0 -122
  363. package/docs/pages/chip.js +0 -82
  364. package/docs/pages/chip.pug +0 -91
  365. package/docs/pages/color.eta +0 -143
  366. package/docs/pages/color.js +0 -262
  367. package/docs/pages/color.pug +0 -121
  368. package/docs/pages/datatable.eta +0 -323
  369. package/docs/pages/datatable.js +0 -164
  370. package/docs/pages/datatable.pug +0 -283
  371. package/docs/pages/dialog.eta +0 -186
  372. package/docs/pages/dialog.js +0 -177
  373. package/docs/pages/dialog.pug +0 -132
  374. package/docs/pages/dom.eta +0 -26
  375. package/docs/pages/dom.js +0 -143
  376. package/docs/pages/dom.pug +0 -22
  377. package/docs/pages/elevation.eta +0 -35
  378. package/docs/pages/elevation.js +0 -0
  379. package/docs/pages/elevation.pug +0 -25
  380. package/docs/pages/fab.eta +0 -99
  381. package/docs/pages/fab.js +0 -44
  382. package/docs/pages/fab.pug +0 -66
  383. package/docs/pages/grid.eta +0 -135
  384. package/docs/pages/grid.js +0 -128
  385. package/docs/pages/grid.pug +0 -95
  386. package/docs/pages/layout.eta +0 -8
  387. package/docs/pages/layout.js +0 -0
  388. package/docs/pages/layout.pug +0 -7
  389. package/docs/pages/list.eta +0 -465
  390. package/docs/pages/list.js +0 -9
  391. package/docs/pages/list.pug +0 -326
  392. package/docs/pages/menu.eta +0 -276
  393. package/docs/pages/menu.js +0 -217
  394. package/docs/pages/menu.pug +0 -205
  395. package/docs/pages/overlay.eta +0 -69
  396. package/docs/pages/overlay.js +0 -4
  397. package/docs/pages/overlay.pug +0 -55
  398. package/docs/pages/progress.eta +0 -23
  399. package/docs/pages/progress.js +0 -12
  400. package/docs/pages/progress.pug +0 -16
  401. package/docs/pages/ripple.eta +0 -27
  402. package/docs/pages/ripple.js +0 -4
  403. package/docs/pages/ripple.pug +0 -21
  404. package/docs/pages/search.eta +0 -246
  405. package/docs/pages/search.js +0 -243
  406. package/docs/pages/search.pug +0 -165
  407. package/docs/pages/selection.eta +0 -111
  408. package/docs/pages/selection.js +0 -13
  409. package/docs/pages/selection.pug +0 -74
  410. package/docs/pages/slider.eta +0 -23
  411. package/docs/pages/slider.js +0 -0
  412. package/docs/pages/slider.pug +0 -17
  413. package/docs/pages/snackbar.eta +0 -83
  414. package/docs/pages/snackbar.js +0 -158
  415. package/docs/pages/snackbar.pug +0 -60
  416. package/docs/pages/tab.eta +0 -421
  417. package/docs/pages/tab.js +0 -151
  418. package/docs/pages/tab.pug +0 -304
  419. package/docs/pages/textfield.eta +0 -486
  420. package/docs/pages/textfield.js +0 -254
  421. package/docs/pages/textfield.pug +0 -360
  422. package/docs/pages/tooltip.eta +0 -94
  423. package/docs/pages/tooltip.js +0 -0
  424. package/docs/pages/tooltip.pug +0 -78
  425. package/docs/pages/transition.eta +0 -117
  426. package/docs/pages/transition.js +0 -54
  427. package/docs/pages/transition.pug +0 -76
  428. package/docs/pages/type.eta +0 -31
  429. package/docs/pages/type.js +0 -0
  430. package/docs/pages/type.pug +0 -29
  431. package/docs/postrender.js +0 -39
  432. package/docs/prerender.js +0 -16
  433. package/docs/pwa/_dialogs.eta +0 -143
  434. package/docs/pwa/_dialogs.pug +0 -96
  435. package/docs/pwa/_menus.eta +0 -16
  436. package/docs/pwa/_menus.pug +0 -11
  437. package/docs/pwa/pwa-prerender.js +0 -3
  438. package/docs/pwa/pwa.eta +0 -480
  439. package/docs/pwa/pwa.js +0 -306
  440. package/docs/pwa/pwa.pug +0 -325
  441. package/docs/pwa/pwa.scss +0 -26
  442. package/docs/spec.scss +0 -26
  443. package/docs/themes/_component-themes.scss +0 -26
  444. package/docs/themes/theme-colored-fallbacks.scss +0 -17
  445. package/docs/themes/theme-colored.scss +0 -17
  446. package/docs/themes/theme-default-fallbacks.scss +0 -17
  447. package/docs/themes/theme-default.scss +0 -17
  448. package/jsconfig.json +0 -12
  449. package/scripts/deploy-docs.sh +0 -9
  450. package/templates/index.eta +0 -2
  451. package/templates/index.pug +0 -3
  452. package/webpack.config.cjs +0 -257
@@ -1,205 +0,0 @@
1
- import {
2
- dispatchDomEvent,
3
- getPassiveEventListenerOption,
4
- isRtl,
5
- iterateArrayLike,
6
- iterateSomeOfArrayLike,
7
- scrollToElement,
8
- } from '../../core/dom.js';
9
-
10
- import * as TabPanel from './panel.js';
11
-
12
- export const SCROLL_EVENT = 'mdw:tabcontent-scroll';
13
-
14
- /**
15
- * Prevent scrolling with keyboard
16
- * @param {KeyboardEvent} event
17
- * @return {void}
18
- */
19
- function onKeyDown(event) {
20
- if (event.ctrlKey || event.shiftKey || event.altKey || event.metaKey) {
21
- return;
22
- }
23
- switch (event.key) {
24
- case 'ArrowLeft':
25
- case 'ArrowRight':
26
- case 'Left':
27
- case 'Right':
28
- event.preventDefault();
29
- break;
30
- default:
31
- }
32
- }
33
-
34
- /**
35
- * @param {Event} event
36
- * @return {void}
37
- */
38
- export function onTabContentScroll(event) {
39
- /** @type {HTMLElement} */
40
- const tabContentElement = (event.currentTarget);
41
- const isPageRtl = isRtl();
42
- const scrollPoint = tabContentElement.scrollLeft / tabContentElement.clientWidth;
43
- let visibleIndex = Math.floor(scrollPoint);
44
- let visibilityPercentage = scrollPoint - visibleIndex;
45
-
46
- // Percentage may be incorrect due to floating point rounding errors
47
- // Compare integer values provided by browser to check if within 1px
48
- iterateSomeOfArrayLike(tabContentElement.children, ((/** @type {HTMLElement} */ panel, index) => {
49
- if (Math.abs(tabContentElement.scrollLeft - panel.offsetLeft) <= 1) {
50
- visibleIndex = index;
51
- visibilityPercentage = 0;
52
- return true;
53
- }
54
- return false;
55
- }));
56
-
57
- const isResting = visibilityPercentage === 0;
58
- let rightPanel;
59
- let leftPeekPanel;
60
- let rightPeekPanel;
61
- let leftSelected = false;
62
- let rightSelected = false;
63
- let selectedIndex;
64
- let leftPanelIndex;
65
- if (isPageRtl) {
66
- const lastIndex = tabContentElement.children.length - 1;
67
- leftPanelIndex = lastIndex - visibleIndex;
68
- leftPeekPanel = tabContentElement.children.item(lastIndex - (visibleIndex - 1));
69
- rightPanel = tabContentElement.children.item(lastIndex - (visibleIndex + 1));
70
- rightPeekPanel = tabContentElement.children.item(lastIndex - (visibleIndex + 2));
71
- if (visibilityPercentage < 0.5) {
72
- leftSelected = true;
73
- selectedIndex = lastIndex - visibleIndex;
74
- } else {
75
- rightSelected = true;
76
- selectedIndex = lastIndex - (visibleIndex + 1);
77
- }
78
- } else {
79
- leftPanelIndex = visibleIndex;
80
- rightPanel = tabContentElement.children.item(visibleIndex + 1);
81
- leftPeekPanel = tabContentElement.children.item(visibleIndex - 1);
82
- rightPeekPanel = tabContentElement.children.item(visibleIndex + 2);
83
- if (visibilityPercentage < 0.5) {
84
- leftSelected = true;
85
- selectedIndex = visibleIndex;
86
- } else {
87
- rightSelected = true;
88
- selectedIndex = visibleIndex + 1;
89
- }
90
- }
91
- /** @type {HTMLElement} */
92
- const leftPanel = (tabContentElement.children.item(leftPanelIndex));
93
-
94
- const currentTargetIndexString = tabContentElement.getAttribute('mdw-target-index');
95
- const currentTargetIndex = currentTargetIndexString == null
96
- ? null : parseInt(currentTargetIndexString, 10);
97
-
98
- let updateSelected = false;
99
- let forceSelection = false;
100
- if (currentTargetIndex == null) {
101
- TabPanel.setExpanded(leftPanel, leftSelected);
102
- if (rightPanel) {
103
- TabPanel.setExpanded(rightPanel, rightSelected);
104
- }
105
- updateSelected = visibilityPercentage === 0;
106
- } else if (currentTargetIndex === selectedIndex) {
107
- if (visibilityPercentage === 0) {
108
- updateSelected = true;
109
- forceSelection = true;
110
- tabContentElement.removeAttribute('mdw-target-index');
111
- }
112
- }
113
-
114
- TabPanel.setHidden(leftPanel, false);
115
- if (leftPeekPanel) {
116
- TabPanel.setHidden(leftPeekPanel, isResting || !leftSelected);
117
- }
118
- if (rightPanel) {
119
- TabPanel.setHidden(rightPanel, isResting);
120
- }
121
- if (rightPeekPanel) {
122
- TabPanel.setHidden(rightPeekPanel, isResting || !rightSelected);
123
- }
124
-
125
- dispatchDomEvent(tabContentElement, SCROLL_EVENT, {
126
- leftPanelIndex,
127
- visibilityPercentage,
128
- updateSelected,
129
- forceSelection,
130
- });
131
- }
132
-
133
- /**
134
- * @param {HTMLElement} tabContentElement
135
- * @param {HTMLElement|number} panel element or index
136
- * @param {true|false|'smooth'} [scrollToPanel='smooth']
137
- * @return {void}
138
- */
139
- export function selectPanel(tabContentElement, panel, scrollToPanel = 'smooth') {
140
- /** @type {HTMLElement} */
141
- let panelElement;
142
- /** @type {number} */
143
- let currentSelectedIndex = null;
144
- /** @type {number} */
145
- let panelIndex = null;
146
- /** @type {Element[]} */
147
- const otherPanels = [];
148
- iterateArrayLike(tabContentElement.getElementsByClassName('mdw-tab__panel'), (el, index) => {
149
- if (currentSelectedIndex == null && TabPanel.isExpanded(el)) {
150
- currentSelectedIndex = index;
151
- }
152
- if (panel === el || panel === index) {
153
- TabPanel.setExpanded(el, true);
154
- TabPanel.setHidden(el, false);
155
- /** @type {HTMLElement} */
156
- panelElement = (el);
157
- panelIndex = index;
158
- } else {
159
- otherPanels.push(el);
160
- }
161
- });
162
- if (!panelElement) {
163
- // Invalid index or panel not in tabcontent
164
- return;
165
- }
166
- otherPanels.forEach((sibling) => TabPanel.setExpanded(sibling, false));
167
-
168
- const isPageRtl = isRtl();
169
- const targetScrollLeft = isPageRtl
170
- ? panelElement.parentElement.scrollWidth + panelElement.offsetLeft - panelElement.offsetWidth
171
- : panelElement.offsetLeft;
172
- if (!scrollToPanel || panelElement.parentElement.scrollLeft === targetScrollLeft) {
173
- // No scrolling, hide others
174
- otherPanels.forEach((sibling) => TabPanel.setHidden(sibling, true));
175
- return;
176
- }
177
- if (scrollToPanel && panelElement) {
178
- if (panelIndex == null) {
179
- tabContentElement.removeAttribute('mdw-target-index');
180
- } else {
181
- tabContentElement.setAttribute('mdw-target-index', panelIndex.toString(10));
182
- }
183
- scrollToElement(panelElement, scrollToPanel === 'smooth', isPageRtl);
184
- }
185
- }
186
-
187
- /**
188
- * @param {Element} tabContentElement
189
- * @return {void}
190
- */
191
- export function attach(tabContentElement) {
192
- tabContentElement.addEventListener('scroll', onTabContentScroll, getPassiveEventListenerOption());
193
- iterateArrayLike(tabContentElement.getElementsByClassName('mdw-tab__panel'), TabPanel.attach);
194
- tabContentElement.addEventListener('keydown', onKeyDown);
195
- }
196
-
197
- /**
198
- * @param {Element} tabContentElement
199
- * @return {void}
200
- */
201
- export function detach(tabContentElement) {
202
- tabContentElement.removeEventListener('keydown', onKeyDown);
203
- tabContentElement.removeEventListener('scroll', onTabContentScroll);
204
- iterateArrayLike(tabContentElement.getElementsByClassName('mdw-tab__panel'), TabPanel.detach);
205
- }
@@ -1,260 +0,0 @@
1
- import {
2
- dispatchDomEvent,
3
- getPassiveEventListenerOption,
4
- iterateSomeOfArrayLike,
5
- nextTick,
6
- } from '../../core/dom.js';
7
-
8
- import * as TabContent from './content.js';
9
- import * as TabItem from './item.js';
10
- import * as TabList from './list.js';
11
- import * as TabPanel from './panel.js';
12
-
13
- const RESIZE_WAIT_FRAMES = 5;
14
-
15
- export const SELECTED_INDEX_CHANGE_EVENT = 'mdw:tab-selectedindexchange';
16
-
17
- /**
18
- * @param {Element} tabElement
19
- * @return {void}
20
- */
21
- export function onResize(tabElement) {
22
- let stage = 0;
23
- tabElement.setAttribute('mdw-resize-stage', stage.toString());
24
- /** @return {void} */
25
- function performResize() {
26
- if (!tabElement.hasAttribute('mdw-resize-stage')) {
27
- // Skip resize
28
- return;
29
- }
30
- const attrStage = tabElement.getAttribute('mdw-resize-stage');
31
- if (attrStage !== stage.toString()) {
32
- // Off-sync due to another resize event
33
- return;
34
- }
35
- stage += 1;
36
- tabElement.setAttribute('mdw-resize-stage', stage.toString());
37
- if (stage === RESIZE_WAIT_FRAMES) {
38
- /** @type {HTMLElement} */
39
- const tabContentElement = (tabElement.getElementsByClassName('mdw-tab__content')[0]);
40
- if (tabContentElement) {
41
- /** @type {HTMLElement} */
42
- const relatedPanel = (tabContentElement.querySelector('.mdw-tab__panel[aria-expanded="true"]'));
43
- if (relatedPanel) {
44
- TabContent.selectPanel(tabContentElement, relatedPanel, true);
45
- }
46
- }
47
- } else if (stage === RESIZE_WAIT_FRAMES * 2) {
48
- /** @type {HTMLElement} */
49
- const tabListElement = (tabElement.getElementsByClassName('mdw-tab__list')[0]);
50
- if (tabListElement) {
51
- /** @type {HTMLElement} */
52
- const relatedItem = (tabListElement.querySelector('.mdw-tab__item[aria-selected="true"]'));
53
- if (relatedItem) {
54
- TabList.setIndicatorPosition(tabListElement, relatedItem, 0);
55
- }
56
- }
57
- tabElement.removeAttribute('mdw-resize-stage');
58
- return;
59
- }
60
-
61
- nextTick(performResize);
62
- }
63
- nextTick(performResize);
64
- }
65
-
66
- /**
67
- * @param {HTMLElement} tabElement
68
- * @param {number} index
69
- * @return {void}
70
- */
71
- function updateSelectedIndex(tabElement, index) {
72
- const currentIndex = tabElement.getAttribute('mdw-selected-index');
73
- if (currentIndex == null || currentIndex === index.toString()) {
74
- return;
75
- }
76
- tabElement.setAttribute('mdw-selected-index', index.toString());
77
- dispatchDomEvent(tabElement, SELECTED_INDEX_CHANGE_EVENT, { value: index });
78
- }
79
-
80
- /**
81
- * @param {CustomEvent} event
82
- * @return {void}
83
- */
84
- export function onTabItemSelectedChange(event) {
85
- if (event.detail.value !== 'true') {
86
- return;
87
- }
88
- /** @type {HTMLElement} */
89
- const tabElement = (event.currentTarget);
90
- /** @type {HTMLElement} */
91
- const tabItemElement = (event.target);
92
- /** @type {HTMLElement} */
93
- const tabListElement = (tabElement.getElementsByClassName('mdw-tab__list')[0]);
94
- if (!tabListElement) {
95
- return;
96
- }
97
-
98
- /** @type {HTMLElement} */
99
- const tabContentElement = (tabElement.getElementsByClassName('mdw-tab__content')[0]);
100
- const tabItemIndex = TabList.getTabItemIndex(tabListElement, tabItemElement);
101
- if (tabItemIndex === -1) {
102
- return;
103
- }
104
- if (tabContentElement) {
105
- const hasNoScroll = tabContentElement.hasAttribute('mdw-no-scroll');
106
- if (!hasNoScroll) {
107
- TabContent.selectPanel(tabContentElement, tabItemIndex, 'smooth');
108
- return;
109
- }
110
- TabContent.selectPanel(tabContentElement, tabItemIndex, true);
111
- }
112
- TabList.setIndicatorPosition(tabListElement, tabItemElement, 0, true);
113
- if (!tabContentElement) {
114
- updateSelectedIndex(tabElement, tabItemIndex);
115
- }
116
- }
117
-
118
- /**
119
- * @param {CustomEvent} event
120
- * @return {void}
121
- */
122
- export function onTabContentScroll(event) {
123
- /** @type {HTMLElement} */
124
- const tabElement = (event.currentTarget);
125
- const { detail } = event;
126
- if (!detail.forceSelection && tabElement.hasAttribute('mdw-resize-stage')) {
127
- return;
128
- }
129
- const tabListElement = tabElement.getElementsByClassName('mdw-tab__list')[0];
130
- if (tabListElement) {
131
- TabList.setIndicatorPosition(
132
- tabListElement,
133
- detail.leftPanelIndex,
134
- detail.visibilityPercentage,
135
- );
136
- }
137
- if (detail.updateSelected) {
138
- updateSelectedIndex(tabElement, detail.leftPanelIndex);
139
- }
140
- }
141
-
142
- /**
143
- * @param {CustomEvent} event
144
- * @return {void}
145
- */
146
- export function onTabPanelExpandedChange(event) {
147
- if (event.detail.value !== 'true') {
148
- return;
149
- }
150
- /** @type {HTMLElement} */
151
- const tabElement = (event.currentTarget);
152
- if (tabElement.hasAttribute('mdw-resize-stage')) {
153
- return;
154
- }
155
- let index = 0;
156
- /** @type {HTMLElement} */
157
- const tabPanelElement = (event.target);
158
- let sibling = tabPanelElement.previousElementSibling;
159
- while (sibling) {
160
- index += 1;
161
- sibling = sibling.previousElementSibling;
162
- }
163
- const tabListElement = tabElement.getElementsByClassName('mdw-tab__list')[0];
164
- if (tabListElement) {
165
- TabList.selectItemAtIndex(tabListElement, index, false);
166
- }
167
- }
168
-
169
- /**
170
- * @param {Element} tabElement
171
- * @return {void}
172
- */
173
- export function attach(tabElement) {
174
- const tabListElement = tabElement.getElementsByClassName('mdw-tab__list')[0];
175
- if (tabListElement) {
176
- TabList.attach(tabListElement);
177
- }
178
-
179
- const tabContentElement = tabElement.getElementsByClassName('mdw-tab__content')[0];
180
- if (tabContentElement) {
181
- TabContent.attach(tabContentElement);
182
- }
183
-
184
- tabElement.addEventListener(TabContent.SCROLL_EVENT, onTabContentScroll,
185
- getPassiveEventListenerOption());
186
- tabElement.addEventListener(TabItem.SELECTED_CHANGE_EVENT, onTabItemSelectedChange,
187
- getPassiveEventListenerOption());
188
- tabElement.addEventListener(TabPanel.EXPANDED_CHANGE_EVENT, onTabPanelExpandedChange,
189
- getPassiveEventListenerOption());
190
-
191
- /** @type {ArrayLike<Element>} */
192
- const items = (tabListElement && tabListElement.getElementsByClassName('mdw-tab__item')) || [];
193
- /** @type {ArrayLike<Element>} */
194
- const panels = (tabContentElement && tabContentElement.getElementsByClassName('mdw-tab__panel')) || [];
195
-
196
- let selectedItem;
197
- let selectedPanel;
198
- let selectedIndex;
199
- iterateSomeOfArrayLike(items, (itemElement, index) => {
200
- if (itemElement.getAttribute('aria-selected') === 'true') {
201
- selectedItem = itemElement;
202
- selectedPanel = panels[index];
203
- selectedIndex = index;
204
- return true;
205
- }
206
- return false;
207
- });
208
- if (selectedIndex == null) {
209
- iterateSomeOfArrayLike(panels, (panelElement, index) => {
210
- if (panelElement.getAttribute('aria-expanded') === 'true') {
211
- selectedPanel = panelElement;
212
- selectedItem = items[index];
213
- selectedIndex = index;
214
- return true;
215
- }
216
- return false;
217
- });
218
- }
219
- if (!selectedItem && items.length) {
220
- selectedItem = items[0];
221
- selectedIndex = 0;
222
- }
223
- if (!selectedPanel && panels.length) {
224
- selectedPanel = panels[0];
225
- selectedIndex = 0;
226
- }
227
- if (selectedItem) {
228
- TabItem.setSelected(selectedItem, true);
229
- }
230
- if (selectedPanel) {
231
- TabPanel.setHidden(selectedPanel, false);
232
- TabPanel.setExpanded(selectedPanel, true);
233
- }
234
- if (selectedIndex != null) {
235
- tabElement.setAttribute('mdw-selected-index', selectedIndex.toString());
236
- }
237
- onResize(tabElement);
238
- }
239
-
240
- /**
241
- * @param {Element} tabElement
242
- * @return {void}
243
- */
244
- export function detach(tabElement) {
245
- const tabListElement = tabElement.getElementsByClassName('mdw-tab__list')[0];
246
- if (tabListElement) {
247
- TabList.detach(tabListElement);
248
- }
249
-
250
- const tabContentElement = tabElement.getElementsByClassName('mdw-tab__content')[0];
251
- if (tabContentElement) {
252
- TabContent.detach(tabContentElement);
253
- }
254
-
255
- tabElement.removeEventListener(TabPanel.EXPANDED_CHANGE_EVENT, onTabPanelExpandedChange);
256
- tabElement.removeEventListener(TabContent.SCROLL_EVENT, onTabContentScroll);
257
- tabElement.removeEventListener(TabItem.SELECTED_CHANGE_EVENT, onTabItemSelectedChange);
258
- tabElement.removeAttribute('mdw-resize-stage');
259
- tabElement.removeAttribute('mdw-selected-index');
260
- }
@@ -1,2 +0,0 @@
1
- @forward './_spec.scss';
2
- @forward './_theme.scss';
@@ -1,89 +0,0 @@
1
- // https://www.w3.org/TR/wai-aria-1.1/#tab
2
-
3
- import * as AriaTab from '../../core/aria/tab.js';
4
- import { iterateArrayLike } from '../../core/dom.js';
5
- import * as Overlay from '../../core/overlay/index.js';
6
- import * as Ripple from '../../core/ripple/index.js';
7
-
8
- export const SELECTED_CHANGE_EVENT = 'mdw:tabitem-selectedchange';
9
-
10
- /**
11
- * @param {Element} element
12
- * @param {string|boolean} value
13
- * @param {boolean} [dispatchEvent=true]
14
- * @return {boolean} successful
15
- */
16
- export function setSelected(element, value, dispatchEvent = true) {
17
- return AriaTab.setSelected(element, value, dispatchEvent ? SELECTED_CHANGE_EVENT : null);
18
- }
19
-
20
- /**
21
- * @param {MouseEvent} event
22
- * @return {void}
23
- */
24
- function onClick(event) {
25
- /** @type {HTMLElement} */
26
- const element = (event.currentTarget);
27
- if (element.getAttribute('aria-disabled') === 'true') {
28
- return;
29
- }
30
- setSelected(element, true);
31
- }
32
-
33
- /**
34
- * @param {Element} element
35
- * @return {void}
36
- */
37
- export function attachAria(element) {
38
- AriaTab.attach(element);
39
- iterateArrayLike(element.getElementsByClassName('mdw-tab__icon'),
40
- (el) => el.setAttribute('aria-hidden', 'true'));
41
- }
42
-
43
- /**
44
- * @param {Element} element
45
- * @return {void}
46
- */
47
- export function attachCore(element) {
48
- attachAria(element);
49
- element.addEventListener('click', onClick);
50
- }
51
-
52
- /**
53
- * @param {Element} element
54
- * @return {void}
55
- */
56
- export function attach(element) {
57
- element.classList.add('mdw-overlay');
58
- if (!element.hasAttribute('mdw-overlay-off')) {
59
- element.setAttribute('mdw-overlay-off', 'selected activated');
60
- }
61
- if (!element.hasAttribute('mdw-overlay-default')) {
62
- element.setAttribute('mdw-overlay-default', 'medium');
63
- }
64
- Overlay.attach(element);
65
-
66
- element.classList.add('mdw-ripple');
67
- Ripple.attach(element);
68
-
69
- attachCore(element);
70
- }
71
-
72
- /**
73
- * @param {Element} element
74
- * @return {void}
75
- */
76
- export function detachCore(element) {
77
- AriaTab.detach(element);
78
- element.removeEventListener('click', onClick);
79
- }
80
-
81
- /**
82
- * @param {Element} element
83
- * @return {void}
84
- */
85
- export function detach(element) {
86
- detachCore(element);
87
- Ripple.detach(element);
88
- Overlay.detach(element);
89
- }