@shortfuse/materialdesignweb 0.8.0 → 0.9.1

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 (405) hide show
  1. package/README.md +50 -198
  2. package/bin/mdw-css.js +1 -1
  3. package/components/Badge.js +15 -5
  4. package/components/Body.js +7 -0
  5. package/components/BottomAppBar.js +7 -10
  6. package/components/BottomSheet.js +472 -0
  7. package/components/Box.js +11 -49
  8. package/components/Button.js +81 -82
  9. package/components/Card.js +74 -62
  10. package/components/Checkbox.js +15 -25
  11. package/components/CheckboxIcon.js +19 -31
  12. package/components/Chip.js +18 -13
  13. package/components/Dialog.js +70 -100
  14. package/components/DialogActions.js +4 -0
  15. package/components/Display.js +64 -0
  16. package/components/Divider.js +5 -0
  17. package/components/Fab.js +94 -17
  18. package/components/FabContainer.js +57 -0
  19. package/components/FilterChip.js +43 -32
  20. package/components/Grid.js +187 -0
  21. package/components/Headline.js +9 -28
  22. package/components/Icon.js +80 -71
  23. package/components/IconButton.js +77 -120
  24. package/components/Input.js +745 -86
  25. package/components/InputChip.js +193 -0
  26. package/components/Label.js +7 -0
  27. package/components/List.js +11 -5
  28. package/components/ListItem.js +92 -23
  29. package/components/ListOption.js +143 -65
  30. package/components/Listbox.js +57 -17
  31. package/components/Menu.js +39 -27
  32. package/components/MenuItem.js +49 -36
  33. package/components/NavBar.js +66 -21
  34. package/components/NavBarItem.js +5 -0
  35. package/components/NavDrawer.js +33 -16
  36. package/components/NavDrawerItem.js +7 -4
  37. package/components/NavItem.js +61 -34
  38. package/components/NavRail.js +32 -21
  39. package/components/NavRailItem.js +10 -2
  40. package/components/Page.js +119 -0
  41. package/components/Pane.js +24 -0
  42. package/components/Popup.js +23 -8
  43. package/components/Progress.js +25 -5
  44. package/components/Radio.js +8 -7
  45. package/components/RadioIcon.js +24 -15
  46. package/components/Ripple.js +25 -7
  47. package/components/Root.js +225 -0
  48. package/components/Scrim.js +95 -0
  49. package/components/Search.js +30 -25
  50. package/components/SegmentedButton.js +53 -40
  51. package/components/SegmentedButtonGroup.js +15 -12
  52. package/components/Select.js +19 -10
  53. package/components/Shape.js +10 -66
  54. package/components/SideSheet.js +337 -0
  55. package/components/Slider.js +93 -36
  56. package/components/Snackbar.js +52 -20
  57. package/components/SnackbarContainer.js +51 -0
  58. package/components/Surface.js +20 -10
  59. package/components/Switch.js +21 -18
  60. package/components/SwitchIcon.js +62 -33
  61. package/components/Tab.js +78 -38
  62. package/components/TabContent.js +33 -12
  63. package/components/TabList.js +95 -34
  64. package/components/TabPanel.js +10 -1
  65. package/components/Table.js +151 -0
  66. package/components/TextArea.js +48 -16
  67. package/components/Title.js +8 -9
  68. package/components/Tooltip.js +51 -22
  69. package/components/TopAppBar.js +71 -78
  70. package/constants/shapes.js +36 -0
  71. package/constants/typography.js +127 -0
  72. package/core/Composition.js +391 -201
  73. package/core/CompositionAdapter.js +35 -18
  74. package/core/CustomElement.js +634 -254
  75. package/core/css.js +117 -12
  76. package/core/customTypes.js +161 -49
  77. package/core/dom.js +18 -11
  78. package/core/jsonMergePatch.js +27 -11
  79. package/core/observe.js +308 -256
  80. package/core/optimizations.js +9 -9
  81. package/core/template.js +14 -57
  82. package/dist/CustomElement.min.js +2 -0
  83. package/dist/CustomElement.min.js.map +7 -0
  84. package/dist/core/CustomElement.min.js +2 -0
  85. package/dist/core/CustomElement.min.js.map +7 -0
  86. package/dist/index.min.js +85 -115
  87. package/dist/index.min.js.map +4 -4
  88. package/dist/meta.json +1 -1
  89. package/dom/HTMLOptionsCollectionProxy.js +108 -0
  90. package/{theming/themableMixinLoader.js → loaders/palette.js} +4 -3
  91. package/loaders/theme.js +12 -0
  92. package/mixins/AriaReflectorMixin.js +64 -15
  93. package/mixins/AriaToolbarMixin.js +6 -0
  94. package/mixins/ControlMixin.js +79 -33
  95. package/mixins/DelegatesFocusMixin.js +62 -0
  96. package/mixins/DensityMixin.js +7 -3
  97. package/mixins/ElevationMixin.js +61 -0
  98. package/mixins/FlexableMixin.js +87 -39
  99. package/mixins/FormAssociatedMixin.js +76 -10
  100. package/mixins/HyperlinkMixin.js +76 -0
  101. package/mixins/InputMixin.js +227 -32
  102. package/mixins/KeyboardNavMixin.js +11 -7
  103. package/mixins/NavigationListenerMixin.js +33 -0
  104. package/mixins/PopupMixin.js +216 -219
  105. package/mixins/RTLObserverMixin.js +2 -0
  106. package/mixins/ResizeObserverMixin.js +18 -4
  107. package/mixins/RippleMixin.js +11 -7
  108. package/mixins/ScrollListenerMixin.js +14 -2
  109. package/mixins/SemiStickyMixin.js +51 -98
  110. package/mixins/ShapeMaskedMixin.js +125 -0
  111. package/mixins/ShapeMixin.js +30 -203
  112. package/mixins/StateMixin.js +74 -34
  113. package/mixins/TextFieldMixin.js +128 -145
  114. package/mixins/ThemableMixin.js +57 -56
  115. package/mixins/TooltipTriggerMixin.js +305 -359
  116. package/mixins/TouchTargetMixin.js +5 -2
  117. package/mixins/TypographyMixin.js +128 -0
  118. package/package.json +125 -81
  119. package/services/rtl.js +10 -0
  120. package/services/svgAlias.js +17 -0
  121. package/{theming/index.js → services/theme.js} +25 -176
  122. package/types/bin/mdw-css.d.ts +3 -0
  123. package/types/bin/mdw-css.d.ts.map +1 -0
  124. package/types/components/Badge.d.ts +39 -0
  125. package/types/components/Badge.d.ts.map +1 -0
  126. package/types/components/Body.d.ts +29 -0
  127. package/types/components/Body.d.ts.map +1 -0
  128. package/types/components/BottomAppBar.d.ts +72 -0
  129. package/types/components/BottomAppBar.d.ts.map +1 -0
  130. package/types/components/BottomSheet.d.ts +135 -0
  131. package/types/components/BottomSheet.d.ts.map +1 -0
  132. package/types/components/Box.d.ts +16 -0
  133. package/types/components/Box.d.ts.map +1 -0
  134. package/types/components/Button.d.ts +245 -0
  135. package/types/components/Button.d.ts.map +1 -0
  136. package/types/components/Card.d.ts +147 -0
  137. package/types/components/Card.d.ts.map +1 -0
  138. package/types/components/Checkbox.d.ts +207 -0
  139. package/types/components/Checkbox.d.ts.map +1 -0
  140. package/types/components/CheckboxIcon.d.ts +44 -0
  141. package/types/components/CheckboxIcon.d.ts.map +1 -0
  142. package/types/components/Chip.d.ts +248 -0
  143. package/types/components/Chip.d.ts.map +1 -0
  144. package/types/components/Dialog.d.ts +103 -0
  145. package/types/components/Dialog.d.ts.map +1 -0
  146. package/types/components/DialogActions.d.ts +4 -0
  147. package/types/components/DialogActions.d.ts.map +1 -0
  148. package/types/components/Display.d.ts +46 -0
  149. package/types/components/Display.d.ts.map +1 -0
  150. package/types/components/Divider.d.ts +10 -0
  151. package/types/components/Divider.d.ts.map +1 -0
  152. package/types/components/Fab.d.ts +273 -0
  153. package/types/components/Fab.d.ts.map +1 -0
  154. package/types/components/FabContainer.d.ts +10 -0
  155. package/types/components/FabContainer.d.ts.map +1 -0
  156. package/types/components/FilterChip.d.ts +256 -0
  157. package/types/components/FilterChip.d.ts.map +1 -0
  158. package/types/components/Grid.d.ts +38 -0
  159. package/types/components/Grid.d.ts.map +1 -0
  160. package/types/components/Headline.d.ts +46 -0
  161. package/types/components/Headline.d.ts.map +1 -0
  162. package/types/components/Icon.d.ts +55 -0
  163. package/types/components/Icon.d.ts.map +1 -0
  164. package/types/components/IconButton.d.ts +284 -0
  165. package/types/components/IconButton.d.ts.map +1 -0
  166. package/types/components/Input.d.ts +2528 -0
  167. package/types/components/Input.d.ts.map +1 -0
  168. package/types/components/InputChip.d.ts +85 -0
  169. package/types/components/InputChip.d.ts.map +1 -0
  170. package/types/components/Label.d.ts +29 -0
  171. package/types/components/Label.d.ts.map +1 -0
  172. package/types/components/List.d.ts +35 -0
  173. package/types/components/List.d.ts.map +1 -0
  174. package/types/components/ListItem.d.ts +124 -0
  175. package/types/components/ListItem.d.ts.map +1 -0
  176. package/types/components/ListOption.d.ts +158 -0
  177. package/types/components/ListOption.d.ts.map +1 -0
  178. package/types/components/Listbox.d.ts +763 -0
  179. package/types/components/Listbox.d.ts.map +1 -0
  180. package/types/components/Menu.d.ts +130 -0
  181. package/types/components/Menu.d.ts.map +1 -0
  182. package/types/components/MenuItem.d.ts +232 -0
  183. package/types/components/MenuItem.d.ts.map +1 -0
  184. package/types/components/NavBar.d.ts +20 -0
  185. package/types/components/NavBar.d.ts.map +1 -0
  186. package/types/components/NavBarItem.d.ts +97 -0
  187. package/types/components/NavBarItem.d.ts.map +1 -0
  188. package/types/components/NavDrawer.d.ts +107 -0
  189. package/types/components/NavDrawer.d.ts.map +1 -0
  190. package/types/components/NavDrawerItem.d.ts +97 -0
  191. package/types/components/NavDrawerItem.d.ts.map +1 -0
  192. package/types/components/NavItem.d.ts +99 -0
  193. package/types/components/NavItem.d.ts.map +1 -0
  194. package/types/components/NavRail.d.ts +108 -0
  195. package/types/components/NavRail.d.ts.map +1 -0
  196. package/types/components/NavRailItem.d.ts +97 -0
  197. package/types/components/NavRailItem.d.ts.map +1 -0
  198. package/types/components/Page.d.ts +25 -0
  199. package/types/components/Page.d.ts.map +1 -0
  200. package/types/components/Pane.d.ts +44 -0
  201. package/types/components/Pane.d.ts.map +1 -0
  202. package/types/components/Popup.d.ts +78 -0
  203. package/types/components/Popup.d.ts.map +1 -0
  204. package/types/components/Progress.d.ts +21 -0
  205. package/types/components/Progress.d.ts.map +1 -0
  206. package/types/components/Radio.d.ts +201 -0
  207. package/types/components/Radio.d.ts.map +1 -0
  208. package/types/components/RadioIcon.d.ts +46 -0
  209. package/types/components/RadioIcon.d.ts.map +1 -0
  210. package/types/components/Ripple.d.ts +35 -0
  211. package/types/components/Ripple.d.ts.map +1 -0
  212. package/types/components/Root.d.ts +68 -0
  213. package/types/components/Root.d.ts.map +1 -0
  214. package/types/components/Scrim.d.ts +6 -0
  215. package/types/components/Scrim.d.ts.map +1 -0
  216. package/types/components/Search.d.ts +516 -0
  217. package/types/components/Search.d.ts.map +1 -0
  218. package/types/components/SegmentedButton.d.ts +252 -0
  219. package/types/components/SegmentedButton.d.ts.map +1 -0
  220. package/types/components/SegmentedButtonGroup.d.ts +43 -0
  221. package/types/components/SegmentedButtonGroup.d.ts.map +1 -0
  222. package/types/components/Select.d.ts +158 -0
  223. package/types/components/Select.d.ts.map +1 -0
  224. package/types/components/Shape.d.ts +10 -0
  225. package/types/components/Shape.d.ts.map +1 -0
  226. package/types/components/SideSheet.d.ts +111 -0
  227. package/types/components/SideSheet.d.ts.map +1 -0
  228. package/types/components/Slider.d.ts +203 -0
  229. package/types/components/Slider.d.ts.map +1 -0
  230. package/types/components/Snackbar.d.ts +73 -0
  231. package/types/components/Snackbar.d.ts.map +1 -0
  232. package/types/components/SnackbarContainer.d.ts +6 -0
  233. package/types/components/SnackbarContainer.d.ts.map +1 -0
  234. package/types/components/Surface.d.ts +45 -0
  235. package/types/components/Surface.d.ts.map +1 -0
  236. package/types/components/Switch.d.ts +187 -0
  237. package/types/components/Switch.d.ts.map +1 -0
  238. package/types/components/SwitchIcon.d.ts +61 -0
  239. package/types/components/SwitchIcon.d.ts.map +1 -0
  240. package/types/components/Tab.d.ts +139 -0
  241. package/types/components/Tab.d.ts.map +1 -0
  242. package/types/components/TabContent.d.ts +124 -0
  243. package/types/components/TabContent.d.ts.map +1 -0
  244. package/types/components/TabList.d.ts +1111 -0
  245. package/types/components/TabList.d.ts.map +1 -0
  246. package/types/components/TabPanel.d.ts +28 -0
  247. package/types/components/TabPanel.d.ts.map +1 -0
  248. package/types/components/Table.d.ts +25 -0
  249. package/types/components/Table.d.ts.map +1 -0
  250. package/types/components/TextArea.d.ts +201 -0
  251. package/types/components/TextArea.d.ts.map +1 -0
  252. package/types/components/Title.d.ts +46 -0
  253. package/types/components/Title.d.ts.map +1 -0
  254. package/types/components/Tooltip.d.ts +49 -0
  255. package/types/components/Tooltip.d.ts.map +1 -0
  256. package/types/components/TopAppBar.d.ts +129 -0
  257. package/types/components/TopAppBar.d.ts.map +1 -0
  258. package/types/constants/colorKeywords.d.ts +2 -0
  259. package/types/constants/colorKeywords.d.ts.map +1 -0
  260. package/types/constants/shapes.d.ts +38 -0
  261. package/types/constants/shapes.d.ts.map +1 -0
  262. package/types/constants/typography.d.ts +212 -0
  263. package/types/constants/typography.d.ts.map +1 -0
  264. package/types/core/Composition.d.ts +260 -0
  265. package/types/core/Composition.d.ts.map +1 -0
  266. package/types/core/CompositionAdapter.d.ts +114 -0
  267. package/types/core/CompositionAdapter.d.ts.map +1 -0
  268. package/types/core/CustomElement.d.ts +304 -0
  269. package/types/core/CustomElement.d.ts.map +1 -0
  270. package/types/core/css.d.ts +44 -0
  271. package/types/core/css.d.ts.map +1 -0
  272. package/types/core/customTypes.d.ts +22 -0
  273. package/types/core/customTypes.d.ts.map +1 -0
  274. package/types/core/dom.d.ts +32 -0
  275. package/types/core/dom.d.ts.map +1 -0
  276. package/types/core/jsonMergePatch.d.ts +31 -0
  277. package/types/core/jsonMergePatch.d.ts.map +1 -0
  278. package/types/core/observe.d.ts +114 -0
  279. package/types/core/observe.d.ts.map +1 -0
  280. package/types/core/optimizations.d.ts +7 -0
  281. package/types/core/optimizations.d.ts.map +1 -0
  282. package/types/core/template.d.ts +47 -0
  283. package/types/core/template.d.ts.map +1 -0
  284. package/types/core/uid.d.ts +6 -0
  285. package/types/core/uid.d.ts.map +1 -0
  286. package/types/dom/HTMLOptionsCollectionProxy.d.ts +18 -0
  287. package/types/dom/HTMLOptionsCollectionProxy.d.ts.map +1 -0
  288. package/types/index.d.ts +88 -0
  289. package/types/index.d.ts.map +1 -0
  290. package/types/loaders/palette.d.ts +2 -0
  291. package/types/loaders/palette.d.ts.map +1 -0
  292. package/types/loaders/theme.d.ts +2 -0
  293. package/types/loaders/theme.d.ts.map +1 -0
  294. package/types/mixins/AriaReflectorMixin.d.ts +31 -0
  295. package/types/mixins/AriaReflectorMixin.d.ts.map +1 -0
  296. package/types/mixins/AriaToolbarMixin.d.ts +34 -0
  297. package/types/mixins/AriaToolbarMixin.d.ts.map +1 -0
  298. package/types/mixins/ControlMixin.d.ts +124 -0
  299. package/types/mixins/ControlMixin.d.ts.map +1 -0
  300. package/types/mixins/DelegatesFocusMixin.d.ts +13 -0
  301. package/types/mixins/DelegatesFocusMixin.d.ts.map +1 -0
  302. package/types/mixins/DensityMixin.d.ts +8 -0
  303. package/types/mixins/DensityMixin.d.ts.map +1 -0
  304. package/types/mixins/ElevationMixin.d.ts +32 -0
  305. package/types/mixins/ElevationMixin.d.ts.map +1 -0
  306. package/types/mixins/FlexableMixin.d.ts +14 -0
  307. package/types/mixins/FlexableMixin.d.ts.map +1 -0
  308. package/types/mixins/FormAssociatedMixin.d.ts +123 -0
  309. package/types/mixins/FormAssociatedMixin.d.ts.map +1 -0
  310. package/types/mixins/HyperlinkMixin.d.ts +25 -0
  311. package/types/mixins/HyperlinkMixin.d.ts.map +1 -0
  312. package/types/mixins/InputMixin.d.ts +173 -0
  313. package/types/mixins/InputMixin.d.ts.map +1 -0
  314. package/types/mixins/KeyboardNavMixin.d.ts +46 -0
  315. package/types/mixins/KeyboardNavMixin.d.ts.map +1 -0
  316. package/types/mixins/NavigationListenerMixin.d.ts +8 -0
  317. package/types/mixins/NavigationListenerMixin.d.ts.map +1 -0
  318. package/types/mixins/PopupMixin.d.ts +98 -0
  319. package/types/mixins/PopupMixin.d.ts.map +1 -0
  320. package/types/mixins/RTLObserverMixin.d.ts +8 -0
  321. package/types/mixins/RTLObserverMixin.d.ts.map +1 -0
  322. package/types/mixins/ResizeObserverMixin.d.ts +13 -0
  323. package/types/mixins/ResizeObserverMixin.d.ts.map +1 -0
  324. package/types/mixins/RippleMixin.d.ts +94 -0
  325. package/types/mixins/RippleMixin.d.ts.map +1 -0
  326. package/types/mixins/ScrollListenerMixin.d.ts +46 -0
  327. package/types/mixins/ScrollListenerMixin.d.ts.map +1 -0
  328. package/types/mixins/SemiStickyMixin.d.ts +50 -0
  329. package/types/mixins/SemiStickyMixin.d.ts.map +1 -0
  330. package/types/mixins/ShapeMaskedMixin.d.ts +12 -0
  331. package/types/mixins/ShapeMaskedMixin.d.ts.map +1 -0
  332. package/types/mixins/ShapeMixin.d.ts +39 -0
  333. package/types/mixins/ShapeMixin.d.ts.map +1 -0
  334. package/types/mixins/StateMixin.d.ts +29 -0
  335. package/types/mixins/StateMixin.d.ts.map +1 -0
  336. package/types/mixins/TextFieldMixin.d.ts +153 -0
  337. package/types/mixins/TextFieldMixin.d.ts.map +1 -0
  338. package/types/mixins/ThemableMixin.d.ts +10 -0
  339. package/types/mixins/ThemableMixin.d.ts.map +1 -0
  340. package/types/mixins/TooltipTriggerMixin.d.ts +114 -0
  341. package/types/mixins/TooltipTriggerMixin.d.ts.map +1 -0
  342. package/types/mixins/TouchTargetMixin.d.ts +6 -0
  343. package/types/mixins/TouchTargetMixin.d.ts.map +1 -0
  344. package/types/mixins/TypographyMixin.d.ts +20 -0
  345. package/types/mixins/TypographyMixin.d.ts.map +1 -0
  346. package/types/services/rtl.d.ts +3 -0
  347. package/types/services/rtl.d.ts.map +1 -0
  348. package/types/services/svgAlias.d.ts +13 -0
  349. package/types/services/svgAlias.d.ts.map +1 -0
  350. package/types/services/theme.d.ts +45 -0
  351. package/types/services/theme.d.ts.map +1 -0
  352. package/types/utils/cli.d.ts +3 -0
  353. package/types/utils/cli.d.ts.map +1 -0
  354. package/types/utils/function.d.ts +3 -0
  355. package/types/utils/function.d.ts.map +1 -0
  356. package/types/utils/jsx-runtime.d.ts +20 -0
  357. package/types/utils/jsx-runtime.d.ts.map +1 -0
  358. package/types/utils/material-color/blend.d.ts +34 -0
  359. package/types/utils/material-color/blend.d.ts.map +1 -0
  360. package/types/utils/material-color/hct/Cam16.d.ts +142 -0
  361. package/types/utils/material-color/hct/Cam16.d.ts.map +1 -0
  362. package/types/utils/material-color/hct/Hct.d.ts +93 -0
  363. package/types/utils/material-color/hct/Hct.d.ts.map +1 -0
  364. package/types/utils/material-color/hct/ViewingConditions.d.ts +69 -0
  365. package/types/utils/material-color/hct/ViewingConditions.d.ts.map +1 -0
  366. package/types/utils/material-color/hct/hctSolver.d.ts +30 -0
  367. package/types/utils/material-color/hct/hctSolver.d.ts.map +1 -0
  368. package/types/utils/material-color/helper.d.ts +8 -0
  369. package/types/utils/material-color/helper.d.ts.map +1 -0
  370. package/types/utils/material-color/palettes/CorePalette.d.ts +75 -0
  371. package/types/utils/material-color/palettes/CorePalette.d.ts.map +1 -0
  372. package/types/utils/material-color/palettes/TonalPalette.d.ts +38 -0
  373. package/types/utils/material-color/palettes/TonalPalette.d.ts.map +1 -0
  374. package/types/utils/material-color/scheme/Scheme.d.ts +264 -0
  375. package/types/utils/material-color/scheme/Scheme.d.ts.map +1 -0
  376. package/types/utils/material-color/utils/color.d.ts +172 -0
  377. package/types/utils/material-color/utils/color.d.ts.map +1 -0
  378. package/types/utils/material-color/utils/math.d.ts +94 -0
  379. package/types/utils/material-color/utils/math.d.ts.map +1 -0
  380. package/types/utils/pixelmatch.d.ts +22 -0
  381. package/types/utils/pixelmatch.d.ts.map +1 -0
  382. package/types/utils/popup.d.ts +106 -0
  383. package/types/utils/popup.d.ts.map +1 -0
  384. package/types/utils/searchParams.d.ts +3 -0
  385. package/types/utils/searchParams.d.ts.map +1 -0
  386. package/types/utils/svg.d.ts +7 -0
  387. package/types/utils/svg.d.ts.map +1 -0
  388. package/utils/jsx-runtime.js +9 -4
  389. package/utils/material-color/scheme/Scheme.js +1 -1
  390. package/utils/pixelmatch.js +363 -0
  391. package/utils/popup.js +86 -10
  392. package/utils/searchParams.js +22 -0
  393. package/components/Button.md +0 -61
  394. package/components/ExtendedFab.js +0 -32
  395. package/components/Layout.js +0 -504
  396. package/components/Nav.js +0 -38
  397. package/core/DomAdapter.js +0 -586
  398. package/core/ICustomElement.d.ts +0 -291
  399. package/core/ICustomElement.js +0 -1
  400. package/core/test.js +0 -126
  401. package/core/typings.d.ts +0 -142
  402. package/core/typings.js +0 -1
  403. package/mixins/SurfaceMixin.js +0 -127
  404. package/theming/loader.js +0 -22
  405. /package/{utils/color_keywords.js → constants/colorKeywords.js} +0 -0
@@ -1,34 +1,58 @@
1
1
  // https://w3c.github.io/aria/#status
2
2
 
3
+ import CustomElement from '../core/CustomElement.js';
3
4
  import { EVENT_HANDLER_TYPE } from '../core/customTypes.js';
4
5
  import AriaReflectorMixin from '../mixins/AriaReflectorMixin.js';
5
6
  import DensityMixin from '../mixins/DensityMixin.js';
7
+ import ElevationMixin from '../mixins/ElevationMixin.js';
8
+ import ShapeMixin from '../mixins/ShapeMixin.js';
9
+ import ThemableMixin from '../mixins/ThemableMixin.js';
6
10
 
7
11
  import './Button.js';
8
12
  import './IconButton.js';
9
13
 
10
- import Surface from './Surface.js';
11
-
12
- export default Surface
14
+ /**
15
+ * Snackbars provide brief messages about app processes and optional actions.
16
+ * @see https://m3.material.io/components/snackbar/specs
17
+ */
18
+ export default CustomElement
13
19
  .extend()
20
+ .mixin(ThemableMixin)
21
+ .mixin(ShapeMixin)
14
22
  .mixin(DensityMixin)
15
23
  .mixin(AriaReflectorMixin)
24
+ .mixin(ElevationMixin)
16
25
  .set({
17
26
  _ariaRole: 'status',
18
27
  elevated: true,
19
28
  })
20
29
  .observe({
30
+ /** Whether the snackbar is visible. */
21
31
  open: 'boolean',
32
+ /** When true the snackbar does not auto-dismiss. */
22
33
  persistent: 'boolean',
34
+ /** Optional action label to display as a button. */
23
35
  action: 'string',
36
+ /** Ink token used for the action button (defaults to inverse-primary). */
24
37
  actionInk: { empty: 'inverse-primary' },
38
+ /** Typographic style used for the action (e.g. 'label-large'). */
25
39
  actionTypeStyle: { empty: 'label-large' },
40
+ /** Render a close icon button when true. */
26
41
  closeButton: 'boolean',
42
+ /** Icon name used for the close button. */
27
43
  closeIcon: { empty: 'close' },
44
+ /** Ink token used for the close icon. */
28
45
  closeInk: { empty: 'inherit' },
46
+ /** Event handler invoked when the action is triggered. */
29
47
  onaction: EVENT_HANDLER_TYPE,
48
+ /** Event handler invoked when the snackbar toggles open/closed. */
49
+ ontoggle: EVENT_HANDLER_TYPE,
30
50
  })
31
51
  .methods({
52
+ /**
53
+ * Close the snackbar. Dispatches a cancelable `close` event; if not
54
+ * prevented the snackbar will hide and await the closing transition.
55
+ */
32
56
  async close() {
33
57
  if (!this.dispatchEvent(new Event('close', { cancelable: true }))) return;
34
58
  if (!this.open) return;
@@ -38,25 +62,23 @@ export default Surface
38
62
  this.addEventListener('transitionend', resolve, { once: true });
39
63
  });
40
64
  },
65
+ /** Show the snackbar (set `open` true). */
41
66
  show() {
42
67
  this.open = true;
43
68
  },
44
- /** @param {string} text */
69
+ /**
70
+ * Update the snackbar text content.
71
+ * @param {string} text
72
+ */
45
73
  update(text) {
46
74
  this.textContent = text;
47
75
  },
48
76
  })
49
77
  .html`
50
- <div id=content></div>
78
+ <div id=content><slot id=slot></div>
51
79
  <mdw-button mdw-if={action} id=action class=button ink={actionInk} type-style={actionTypeStyle}>{action}</mdw-button>
52
- <mdw-icon-button mdw-if={closeButton} id=close class=button icon={closeIcon} ink={closeInk}>Close</mdw-button>
80
+ <mdw-icon-button mdw-if={closeButton} id=close class=button icon={closeIcon} ink={closeInk}>Close</mdw-icon-button>
53
81
  `
54
- .on({
55
- composed() {
56
- const { content, slot } = this.refs;
57
- content.append(slot);
58
- },
59
- })
60
82
  .childEvents({
61
83
  action: {
62
84
  '~click'() {
@@ -70,26 +92,36 @@ export default Surface
70
92
  },
71
93
  },
72
94
  })
95
+ .on({
96
+ openChanged() {
97
+ this.dispatchEvent(new Event('toggle'));
98
+ },
99
+ })
73
100
  .css`
74
- /* https://m3.material.io/components/snackbar/specs */
75
-
76
101
  :host {
77
102
  --mdw-shape__size: var(--mdw-shape__small);
78
- --mdw-surface__shadow: var(--mdw-surface__shadow__3);
79
- --mdw-shape__bg: rgb(var(--mdw-color__inverse-surface));
103
+ --mdw-bg: var(--mdw-color__inverse-surface);
80
104
  --mdw-ink: var(--mdw-color__inverse-on-surface);
81
-
82
105
  --mdw-type__line-height: var(--mdw-typescale__body-medium__line-height);
106
+
83
107
  display: flex;
84
108
  align-items: center;
85
109
 
86
- padding-inline: 16px;
110
+ grid-area: snackbar;
87
111
 
112
+ padding-inline: 16px;
113
+
114
+ pointer-events: auto;
115
+
116
+ filter: var(--mdw-elevation__drop-shadow__3);
88
117
  opacity: 0;
89
118
  transform: translateY(25%) scaleY(0.25);
90
119
  transform-origin: bottom center;
91
120
  visibility: hidden; /* Remove from tab order */
92
- z-index: 24;
121
+ z-index: 22;
122
+
123
+ background-color: rgb(var(--mdw-bg));
124
+ color: rgb(var(--mdw-ink));
93
125
 
94
126
  font: var(--mdw-typescale__body-medium__font);
95
127
  letter-spacing: var(--mdw-typescale__body-medium__letter-spacing);
@@ -112,7 +144,7 @@ export default Surface
112
144
  :host([open]) {
113
145
  opacity: 1;
114
146
  transform: scale(1);
115
- visibility: visible;
147
+ visibility: inherit;
116
148
  }
117
149
 
118
150
  #content {
@@ -0,0 +1,51 @@
1
+ import CustomElement from '../core/CustomElement.js';
2
+ import DelegatesFocusMixin from '../mixins/DelegatesFocusMixin.js';
3
+
4
+ /**
5
+ * Snackbar container positions snackbars within the app window and manages
6
+ * layout and pointer-events for stacked snackbars.
7
+ * @see https://m3.material.io/components/snackbar/specs
8
+ */
9
+ export default CustomElement
10
+ .extend()
11
+ .mixin(DelegatesFocusMixin)
12
+ .html`
13
+ <slot id=slot></slot>
14
+ `
15
+ .css`
16
+ :host {
17
+ display: grid;
18
+ align-items: flex-end;
19
+ grid-template:
20
+ "snackbar" auto
21
+ / minmax(auto, 60ch);
22
+
23
+ justify-content: center;
24
+
25
+ margin: 16px;
26
+
27
+ pointer-events: none;
28
+
29
+ }
30
+
31
+ @media (min-width: 648px) {
32
+ :host {
33
+ grid-template-columns: minmax(auto, 1fr);
34
+
35
+ margin: 24px;
36
+ }
37
+ }
38
+
39
+ @media (min-width: 1248px) {
40
+ :host {
41
+ grid-template-columns: minmax(auto, 60ch);
42
+ justify-content: flex-start;
43
+ }
44
+ }
45
+
46
+ #slot {
47
+ pointer-events: auto;
48
+ }
49
+
50
+ `
51
+ .autoRegister('mdw-snackbar-container');
@@ -1,32 +1,42 @@
1
1
  import CustomElement from '../core/CustomElement.js';
2
+ import ElevationMixin from '../mixins/ElevationMixin.js';
2
3
  import FlexableMixin from '../mixins/FlexableMixin.js';
3
4
  import ShapeMixin from '../mixins/ShapeMixin.js';
4
- import SurfaceMixin from '../mixins/SurfaceMixin.js';
5
5
  import ThemableMixin from '../mixins/ThemableMixin.js';
6
6
 
7
+ /**
8
+ * Surface represents a themed elevated surface used to display content with
9
+ * elevation, shape, and color tokens applied.
10
+ * @see https://m3.material.io/styles/elevation/overview
11
+ */
7
12
  export default CustomElement
8
13
  .extend()
9
14
  .mixin(ThemableMixin)
10
15
  .mixin(FlexableMixin)
11
- .mixin(SurfaceMixin)
16
+ .mixin(ElevationMixin)
12
17
  .mixin(ShapeMixin)
13
18
  .html`<slot id=slot></slot>`
14
- .on({
15
- composed() {
16
- const { surface, shape } = this.refs;
17
- surface.append(shape);
18
- },
19
- })
20
19
  .css`
21
20
  :host {
22
- --mdw-shape__bg: rgb(var(--mdw-color__surface));
21
+ --mdw-bg: var(--mdw-color__surface);
23
22
  --mdw-ink: var(--mdw-color__on-surface);
24
23
  position: relative;
24
+
25
+ filter: var(--mdw-elevation__drop-shadow__0);
25
26
 
27
+ background-color: rgb(var(--mdw-bg));
26
28
  color: rgb(var(--mdw-ink));
27
29
 
28
30
  font: var(--mdw-type__font);
29
31
  letter-spacing: var(--mdw-type__letter-spacing);
30
- }
32
+
33
+ transition: filter 200ms;
34
+ }
35
+
36
+ :host(:where([elevation="1"])) { filter: var(--mdw-elevation__drop-shadow__1); }
37
+ :host(:where([elevation="2"])) { filter: var(--mdw-elevation__drop-shadow__2); }
38
+ :host(:where([elevation="3"])) { filter: var(--mdw-elevation__drop-shadow__3); }
39
+ :host(:where([elevation="4"])) { filter: var(--mdw-elevation__drop-shadow__4); }
40
+ :host(:where([elevation="5"])) { filter: var(--mdw-elevation__drop-shadow__5); }
31
41
  `
32
42
  .autoRegister('mdw-surface');
@@ -5,6 +5,10 @@ import StateMixin from '../mixins/StateMixin.js';
5
5
  import ThemableMixin from '../mixins/ThemableMixin.js';
6
6
  import TouchTargetMixin from '../mixins/TouchTargetMixin.js';
7
7
 
8
+ /**
9
+ * Switch is a binary control that toggles between on and off states.
10
+ * @see https://m3.material.io/components/switch/specs
11
+ */
8
12
  export default CustomElement
9
13
  .extend()
10
14
  .mixin(ThemableMixin)
@@ -13,15 +17,23 @@ export default CustomElement
13
17
  .mixin(TouchTargetMixin)
14
18
  // Switches have their own pressed animation (No ripple)
15
19
  .set({
20
+ /** The control `type` used for the underlying input element (always 'checkbox'). */
16
21
  type: 'checkbox',
22
+ /** Enables the state-layer visual treatment for pressed/hover states. */
17
23
  stateLayer: true,
18
24
  })
19
25
  .observe({
26
+ /** The icon name to show inside the thumb when provided. */
20
27
  icon: 'string',
28
+ /** The icon name to show when the switch is selected/on. */
21
29
  selectedIcon: 'string',
30
+ /** The icon name to show when the switch is unselected/off. */
22
31
  unselectedIcon: 'string',
32
+ /** The image `src` to show inside the thumb when provided. */
23
33
  src: 'string',
34
+ /** The image `src` to show when the switch is selected/on. */
24
35
  selectedSrc: 'string',
36
+ /** The image `src` to show when the switch is unselected/off. */
25
37
  unselectedSrc: 'string',
26
38
  })
27
39
  .html`
@@ -38,25 +50,14 @@ export default CustomElement
38
50
  </mdw-switch-icon>
39
51
  <slot id=slot></slot>
40
52
  `
41
- .rootEvents({
42
- click(event) {
43
- const { control } = this.refs;
44
- if (event.target !== control) {
45
- // Label-like click
46
- event.stopPropagation();
47
- control.click();
48
- }
49
- },
50
- })
51
- .on({
52
- composed() {
53
- const { switch: switchEl, state, control } = this.refs;
54
- switchEl.append(state, control);
55
- control.setAttribute('role', 'switch');
56
- },
53
+ .recompose(({ refs: { switch: switchEl, state, control } }) => {
54
+ switchEl.append(state, control);
55
+ control.setAttribute('role', 'switch');
57
56
  })
58
57
  .methods({
59
58
  /**
59
+ * Handle pointer/touch input on the native control to compute dragging
60
+ * position and update the thumb drag state.
60
61
  * @param {(MouseEvent|TouchEvent) & {currentTarget:HTMLInputElement}} event
61
62
  * @return {void}
62
63
  */
@@ -110,12 +111,14 @@ export default CustomElement
110
111
 
111
112
  // this._isHoveringThumb = true;
112
113
 
113
- let currentValue = this.refs.switch.dragValue;
114
+ const switchIcon = /** @type {InstanceType<import('./SwitchIcon.js').default>} */ (this.refs.switch);
115
+
116
+ let currentValue = switchIcon.dragValue;
114
117
  if (currentValue == null) {
115
118
  currentValue = this.checked ? 1 : 0;
116
119
  }
117
120
  const pixels = offsetX - (clientWidth / 2);
118
- const currentPixels = this.refs.switch.clientWidth - (this.refs.switch.clientHeight);
121
+ const currentPixels = switchIcon.clientWidth - (switchIcon.clientHeight);
119
122
  // console.log(pixels, currentPixels, currentPixels * currentValue, pixels / currentPixels);
120
123
  const newRatio = pixels / currentPixels;
121
124
  const newValue = Math.max(Math.min(currentValue + newRatio, 1), 0);
@@ -3,43 +3,67 @@ import './Shape.js';
3
3
  import CustomElement from '../core/CustomElement.js';
4
4
  import ShapeMixin from '../mixins/ShapeMixin.js';
5
5
  import ThemableMixin from '../mixins/ThemableMixin.js';
6
+ import { loadGlobalStyles } from '../services/rtl.js';
6
7
 
8
+ loadGlobalStyles();
9
+
10
+ /**
11
+ * Visual helper that renders the switch thumb and related visual states.
12
+ * @see https://m3.material.io/components/switch/specs
13
+ */
7
14
  export default CustomElement
8
15
  .extend()
9
16
  .mixin(ThemableMixin)
10
17
  .mixin(ShapeMixin)
11
18
  .observe({
19
+ /** Whether the switch is selected/on. */
12
20
  selected: 'boolean',
21
+ /** Named icon to render inside the thumb. */
13
22
  icon: 'string',
23
+ /** Whether the control is visually in an errored state. */
14
24
  errored: 'boolean',
25
+ /** Whether the control is disabled. */
15
26
  disabled: 'boolean',
27
+ /** Icon name to show when selected/on. */
16
28
  selectedIcon: 'string',
29
+ /** Icon name to show when unselected/off. */
17
30
  unselectedIcon: 'string',
31
+ /** Image `src` to render inside the thumb. */
18
32
  src: 'string',
33
+ /** Image `src` to render when selected/on. */
19
34
  selectedSrc: 'string',
35
+ /** Image `src` to render when unselected/off. */
20
36
  unselectedSrc: 'string',
37
+ /** Hover state for the thumb. */
21
38
  hovered: 'boolean',
39
+ /** Pressed state for the thumb. */
22
40
  pressed: 'boolean',
41
+ /** Focused state for the thumb. */
23
42
  focused: 'boolean',
43
+ /** Temporary drag position value (0..1) while the thumb is being dragged. */
24
44
  dragValue: 'float',
45
+ /** Color token to use for the thumb (defaults to primary). */
25
46
  color: { empty: 'primary' },
26
47
  })
27
48
  .observe({
28
- /** Alias for Selected (QoL) */
49
+ /** Alias for `selected` to match common control naming. */
29
50
  checked: {
30
51
  type: 'boolean',
31
52
  get({ selected }) { return selected; },
32
53
  /** @param {boolean} value */
33
54
  set(value) { this.selected = value; },
34
55
  },
56
+ /** Whether the thumb is in an active interactive state (not disabled). */
35
57
  _active({ disabled, pressed, focused, hovered }) {
36
58
  return !disabled && (pressed || focused || hovered);
37
59
  },
38
60
  })
39
61
  .observe({
62
+ /** Thumb fill token (e.g. "primary-container") when active. */
40
63
  _thumbColor({ color, _active }) {
41
64
  return _active ? `${color}-container` : '';
42
65
  },
66
+ /** Ink token used for icons inside the thumb based on state. */
43
67
  _iconInk({ disabled, selected, color }) {
44
68
  if (!selected) return 'surface-container-highest';
45
69
  if (disabled) return 'on-surface';
@@ -50,28 +74,29 @@ export default CustomElement
50
74
  hasIcon({ icon, src, unselectedIcon, unselectedSrc }) {
51
75
  return Boolean(icon || src || unselectedIcon || unselectedSrc);
52
76
  },
77
+ iconVariation({ selected }) {
78
+ return selected ? 'filled' : null;
79
+ },
53
80
  })
54
81
  .html`
55
- <div id=thumb selected={checked} pressed={pressed} disabled={disabled}>
56
- <mdw-shape id=thumb-shape shape-style=full selected={checked} pressed={pressed} hovered={hovered} focused={focused} icon={hasIcon}
57
- color={_thumbColor} active={_active} ink={_thumbInk} disabled={disabled}></mdw-shape>
58
- <mdw-icon ink={_iconInk} class=icon id=icon src={src} selected={checked}>{icon}</mdw-icon>
59
- <mdw-icon ink={_iconInk} class=icon id=selected-icon src={selectedIconSrc} selected={checked}>{selectedIcon}</mdw-icon>
60
- <mdw-icon ink={_iconInk} class=icon id=unselected-icon src={unselectedIconSrc} selected={checked}>{unselectedIcon}</mdw-icon>
61
- <slot id=slot selected={checked}></slot>
82
+ <div id=track selected={checked} disabled={disabled}>
83
+ <div id=thumb selected={checked} pressed={pressed} disabled={disabled}>
84
+ <mdw-box block id=thumb-shape selected={checked} pressed={pressed} hovered={hovered} focused={focused} icon={hasIcon}
85
+ color={_thumbColor} active={_active} ink={_thumbInk} disabled={disabled}></mdw-box>
86
+ <mdw-icon ink={_iconInk} class=icon id=icon src={src} selected={checked} icon={icon} variation={iconVariation}></mdw-icon>
87
+ <mdw-icon ink={_iconInk} class=icon id=selected-icon src={selectedIconSrc} selected={checked} icon={selectedIcon} variation=filled></mdw-icon>
88
+ <mdw-icon ink={_iconInk} class=icon id=unselected-icon src={unselectedIconSrc} selected={checked} icon={unselectedIcon}></mdw-icon>
89
+ <slot id=slot selected={checked}></slot>
90
+ </div>
62
91
  </div>
63
92
  `
93
+ .recompose(({ refs: { outline } }) => {
94
+ outline.removeAttribute('mdw-if');
95
+ outline.setAttribute('selected', '{checked}');
96
+ outline.setAttribute('errored', '{errored}');
97
+ outline.setAttribute('disabled', '{disabled}');
98
+ })
64
99
  .on({
65
- composed() {
66
- const { outline, shape: track } = this.refs;
67
- track.id = 'track';
68
- track.setAttribute('selected', '{checked}');
69
- track.setAttribute('disabled', '{disabled}');
70
- outline.removeAttribute('mdw-if');
71
- outline.setAttribute('selected', '{checked}');
72
- outline.setAttribute('errored', '{errored}');
73
- outline.setAttribute('disabled', '{disabled}');
74
- },
75
100
  dragValueChanged(oldValue, newValue) {
76
101
  if (newValue == null) {
77
102
  this.refs.thumb.style.removeProperty('--mdw-switch__value');
@@ -116,6 +141,7 @@ export default CustomElement
116
141
  inset: 0;
117
142
 
118
143
  background-color: rgb(var(--mdw-color__surface-container-highest));
144
+ border-radius: inherit;
119
145
  }
120
146
 
121
147
  #track[selected] {
@@ -123,19 +149,17 @@ export default CustomElement
123
149
  }
124
150
 
125
151
  #track[disabled] {
126
- opacity: calc(0.12/0.38);
152
+ background-color: rgba(var(--mdw-color__surface-container-highest), calc(0.12/0.38));
127
153
  }
128
154
 
129
155
  #track[disabled][selected] {
130
- background-color: rgb(var(--mdw-color__on-surface));
156
+ background-color: rgba(var(--mdw-color__on-surface), calc(0.12/0.38));
131
157
  }
132
158
 
133
159
  #outline {
134
- filter:
135
- drop-shadow(1px 0px 0px currentColor)
136
- drop-shadow(0px 1px 0px currentColor)
137
- drop-shadow(-1px 0px 0px currentColor)
138
- drop-shadow(0px -1px 0px currentColor);
160
+ border-width: 2px;
161
+
162
+ z-index: 1;
139
163
 
140
164
  color: rgb(var(--mdw-color__outline));
141
165
  }
@@ -145,7 +169,7 @@ export default CustomElement
145
169
  }
146
170
 
147
171
  #outline[disabled] {
148
- color: rgb(var(--mdw-color__on-surface));
172
+ color: rgba(var(--mdw-color__on-surface), calc(0.12/0.38));
149
173
  }
150
174
 
151
175
  #outline[selected] {
@@ -166,6 +190,7 @@ export default CustomElement
166
190
 
167
191
  transform: translateX(calc(var(--mdw-dir, 1) * var(--mdw-switch__value) * (52px - 100%)));
168
192
 
193
+ border-radius: inherit;
169
194
  aspect-ratio: 1/1;
170
195
  }
171
196
 
@@ -198,6 +223,8 @@ export default CustomElement
198
223
 
199
224
  transform: scale(calc(16/28));
200
225
  z-index: 0;
226
+
227
+ border-radius:inherit;
201
228
  }
202
229
 
203
230
  #thumb-shape[icon] {
@@ -221,6 +248,14 @@ export default CustomElement
221
248
  transform: scale(1);
222
249
  }
223
250
 
251
+ #thumb-shape[disabled] {
252
+ background-color: rgb(var(--mdw-color__on-surface));
253
+ }
254
+
255
+ #thumb-shape[disabled][selected] {
256
+ background-color: rgb(var(--mdw-color__surface));
257
+ }
258
+
224
259
  /** Thumb Icons **/
225
260
 
226
261
  .icon {
@@ -239,13 +274,11 @@ export default CustomElement
239
274
  }
240
275
 
241
276
  .icon:not([src]):empty {
242
- display: none;
277
+ /* display: none; */
243
278
  }
244
279
 
245
280
  #icon, #unselected-icon {
246
281
  opacity: 1;
247
-
248
- font-variation-settings: 'FILL' 0;
249
282
  }
250
283
 
251
284
  #unselected-icon[selected] {
@@ -256,10 +289,6 @@ export default CustomElement
256
289
  opacity: 1;
257
290
  }
258
291
 
259
- #icon[selected] {
260
- font-variation-settings: 'FILL' 1;
261
- }
262
-
263
292
  #thumb[disabled] {
264
293
  color: rgb(var(--mdw-color__on-surface));
265
294
  }