@shortfuse/materialdesignweb 0.8.0 → 0.9.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 (394) hide show
  1. package/README.md +32 -24
  2. package/bin/mdw-css.js +1 -1
  3. package/components/Badge.js +12 -5
  4. package/components/Body.js +3 -0
  5. package/components/BottomAppBar.js +1 -8
  6. package/components/BottomSheet.js +424 -0
  7. package/components/Box.js +11 -49
  8. package/components/Button.js +61 -82
  9. package/components/Card.js +56 -61
  10. package/components/Checkbox.js +7 -25
  11. package/components/CheckboxIcon.js +10 -28
  12. package/components/Chip.js +13 -11
  13. package/components/Dialog.js +49 -98
  14. package/components/Display.js +55 -0
  15. package/components/Fab.js +83 -17
  16. package/components/FabContainer.js +48 -0
  17. package/components/FilterChip.js +34 -32
  18. package/components/Grid.js +176 -0
  19. package/components/Headline.js +5 -28
  20. package/components/Icon.js +54 -69
  21. package/components/IconButton.js +71 -120
  22. package/components/Input.js +669 -83
  23. package/components/InputChip.js +161 -0
  24. package/components/Label.js +3 -0
  25. package/components/List.js +1 -5
  26. package/components/ListItem.js +39 -23
  27. package/components/ListOption.js +79 -62
  28. package/components/Listbox.js +19 -10
  29. package/components/Menu.js +8 -18
  30. package/components/MenuItem.js +25 -26
  31. package/components/NavBar.js +53 -19
  32. package/components/NavDrawer.js +15 -15
  33. package/components/NavDrawerItem.js +2 -4
  34. package/components/NavItem.js +40 -33
  35. package/components/NavRail.js +23 -21
  36. package/components/NavRailItem.js +5 -2
  37. package/components/Page.js +105 -0
  38. package/components/Pane.js +18 -0
  39. package/components/Popup.js +17 -8
  40. package/components/Radio.js +2 -5
  41. package/components/RadioIcon.js +10 -14
  42. package/components/Ripple.js +11 -7
  43. package/components/Root.js +209 -0
  44. package/components/Scrim.js +87 -0
  45. package/components/Search.js +12 -20
  46. package/components/SegmentedButton.js +33 -36
  47. package/components/SegmentedButtonGroup.js +9 -3
  48. package/components/Select.js +6 -7
  49. package/components/Shape.js +5 -65
  50. package/components/SideSheet.js +308 -0
  51. package/components/Slider.js +71 -34
  52. package/components/Snackbar.js +22 -16
  53. package/components/SnackbarContainer.js +42 -0
  54. package/components/Surface.js +15 -10
  55. package/components/Switch.js +3 -16
  56. package/components/SwitchIcon.js +40 -32
  57. package/components/Tab.js +57 -38
  58. package/components/TabContent.js +1 -0
  59. package/components/TabList.js +60 -32
  60. package/components/TabPanel.js +1 -1
  61. package/components/Table.js +116 -0
  62. package/components/TextArea.js +16 -15
  63. package/components/Title.js +4 -9
  64. package/components/Tooltip.js +43 -21
  65. package/components/TopAppBar.js +56 -78
  66. package/constants/shapes.js +36 -0
  67. package/constants/typography.js +127 -0
  68. package/core/Composition.js +354 -192
  69. package/core/CompositionAdapter.js +11 -12
  70. package/core/CustomElement.js +588 -236
  71. package/core/css.js +117 -12
  72. package/core/customTypes.js +120 -25
  73. package/core/dom.js +17 -11
  74. package/core/jsonMergePatch.js +12 -10
  75. package/core/observe.js +298 -253
  76. package/core/optimizations.js +9 -9
  77. package/core/template.js +14 -57
  78. package/dist/index.min.js +85 -115
  79. package/dist/index.min.js.map +4 -4
  80. package/dist/meta.json +1 -1
  81. package/dom/HTMLOptionsCollectionProxy.js +106 -0
  82. package/{theming/themableMixinLoader.js → loaders/palette.js} +4 -3
  83. package/loaders/theme.js +12 -0
  84. package/mixins/AriaReflectorMixin.js +53 -13
  85. package/mixins/AriaToolbarMixin.js +3 -0
  86. package/mixins/ControlMixin.js +76 -33
  87. package/mixins/DelegatesFocusMixin.js +54 -0
  88. package/mixins/DensityMixin.js +2 -2
  89. package/mixins/ElevationMixin.js +62 -0
  90. package/mixins/FlexableMixin.js +66 -37
  91. package/mixins/FormAssociatedMixin.js +60 -8
  92. package/mixins/HyperlinkMixin.js +66 -0
  93. package/mixins/InputMixin.js +205 -32
  94. package/mixins/KeyboardNavMixin.js +8 -6
  95. package/mixins/NavigationListenerMixin.js +33 -0
  96. package/mixins/PopupMixin.js +176 -208
  97. package/mixins/ResizeObserverMixin.js +16 -4
  98. package/mixins/RippleMixin.js +8 -6
  99. package/mixins/ScrollListenerMixin.js +1 -1
  100. package/mixins/SemiStickyMixin.js +44 -98
  101. package/mixins/ShapeMaskedMixin.js +117 -0
  102. package/mixins/ShapeMixin.js +22 -204
  103. package/mixins/StateMixin.js +70 -34
  104. package/mixins/TextFieldMixin.js +107 -143
  105. package/mixins/ThemableMixin.js +44 -56
  106. package/mixins/TooltipTriggerMixin.js +291 -359
  107. package/mixins/TouchTargetMixin.js +1 -1
  108. package/mixins/TypographyMixin.js +121 -0
  109. package/package.json +110 -74
  110. package/services/rtl.js +10 -0
  111. package/services/svgAlias.js +17 -0
  112. package/{theming/index.js → services/theme.js} +24 -174
  113. package/types/bin/mdw-css.d.ts +3 -0
  114. package/types/bin/mdw-css.d.ts.map +1 -0
  115. package/types/components/Badge.d.ts +39 -0
  116. package/types/components/Badge.d.ts.map +1 -0
  117. package/types/components/Body.d.ts +29 -0
  118. package/types/components/Body.d.ts.map +1 -0
  119. package/types/components/BottomAppBar.d.ts +73 -0
  120. package/types/components/BottomAppBar.d.ts.map +1 -0
  121. package/types/components/BottomSheet.d.ts +109 -0
  122. package/types/components/BottomSheet.d.ts.map +1 -0
  123. package/types/components/Box.d.ts +16 -0
  124. package/types/components/Box.d.ts.map +1 -0
  125. package/types/components/Button.d.ts +714 -0
  126. package/types/components/Button.d.ts.map +1 -0
  127. package/types/components/Card.d.ts +412 -0
  128. package/types/components/Card.d.ts.map +1 -0
  129. package/types/components/Checkbox.d.ts +205 -0
  130. package/types/components/Checkbox.d.ts.map +1 -0
  131. package/types/components/CheckboxIcon.d.ts +44 -0
  132. package/types/components/CheckboxIcon.d.ts.map +1 -0
  133. package/types/components/Chip.d.ts +1425 -0
  134. package/types/components/Chip.d.ts.map +1 -0
  135. package/types/components/Dialog.d.ts +286 -0
  136. package/types/components/Dialog.d.ts.map +1 -0
  137. package/types/components/DialogActions.d.ts +4 -0
  138. package/types/components/DialogActions.d.ts.map +1 -0
  139. package/types/components/Display.d.ts +45 -0
  140. package/types/components/Display.d.ts.map +1 -0
  141. package/types/components/Divider.d.ts +10 -0
  142. package/types/components/Divider.d.ts.map +1 -0
  143. package/types/components/Fab.d.ts +741 -0
  144. package/types/components/Fab.d.ts.map +1 -0
  145. package/types/components/FabContainer.d.ts +10 -0
  146. package/types/components/FabContainer.d.ts.map +1 -0
  147. package/types/components/FilterChip.d.ts +4283 -0
  148. package/types/components/FilterChip.d.ts.map +1 -0
  149. package/types/components/Grid.d.ts +37 -0
  150. package/types/components/Grid.d.ts.map +1 -0
  151. package/types/components/Headline.d.ts +47 -0
  152. package/types/components/Headline.d.ts.map +1 -0
  153. package/types/components/Icon.d.ts +103 -0
  154. package/types/components/Icon.d.ts.map +1 -0
  155. package/types/components/IconButton.d.ts +1486 -0
  156. package/types/components/IconButton.d.ts.map +1 -0
  157. package/types/components/Input.d.ts +51288 -0
  158. package/types/components/Input.d.ts.map +1 -0
  159. package/types/components/InputChip.d.ts +243 -0
  160. package/types/components/InputChip.d.ts.map +1 -0
  161. package/types/components/Label.d.ts +29 -0
  162. package/types/components/Label.d.ts.map +1 -0
  163. package/types/components/List.d.ts +31 -0
  164. package/types/components/List.d.ts.map +1 -0
  165. package/types/components/ListItem.d.ts +349 -0
  166. package/types/components/ListItem.d.ts.map +1 -0
  167. package/types/components/ListOption.d.ts +1493 -0
  168. package/types/components/ListOption.d.ts.map +1 -0
  169. package/types/components/Listbox.d.ts +12012 -0
  170. package/types/components/Listbox.d.ts.map +1 -0
  171. package/types/components/Menu.d.ts +119 -0
  172. package/types/components/Menu.d.ts.map +1 -0
  173. package/types/components/MenuItem.d.ts +3109 -0
  174. package/types/components/MenuItem.d.ts.map +1 -0
  175. package/types/components/NavBar.d.ts +18 -0
  176. package/types/components/NavBar.d.ts.map +1 -0
  177. package/types/components/NavBarItem.d.ts +186 -0
  178. package/types/components/NavBarItem.d.ts.map +1 -0
  179. package/types/components/NavDrawer.d.ts +108 -0
  180. package/types/components/NavDrawer.d.ts.map +1 -0
  181. package/types/components/NavDrawerItem.d.ts +186 -0
  182. package/types/components/NavDrawerItem.d.ts.map +1 -0
  183. package/types/components/NavItem.d.ts +190 -0
  184. package/types/components/NavItem.d.ts.map +1 -0
  185. package/types/components/NavRail.d.ts +109 -0
  186. package/types/components/NavRail.d.ts.map +1 -0
  187. package/types/components/NavRailItem.d.ts +186 -0
  188. package/types/components/NavRailItem.d.ts.map +1 -0
  189. package/types/components/Page.d.ts +24 -0
  190. package/types/components/Page.d.ts.map +1 -0
  191. package/types/components/Pane.d.ts +44 -0
  192. package/types/components/Pane.d.ts.map +1 -0
  193. package/types/components/Popup.d.ts +76 -0
  194. package/types/components/Popup.d.ts.map +1 -0
  195. package/types/components/Progress.d.ts +19 -0
  196. package/types/components/Progress.d.ts.map +1 -0
  197. package/types/components/Radio.d.ts +199 -0
  198. package/types/components/Radio.d.ts.map +1 -0
  199. package/types/components/RadioIcon.d.ts +46 -0
  200. package/types/components/RadioIcon.d.ts.map +1 -0
  201. package/types/components/Ripple.d.ts +34 -0
  202. package/types/components/Ripple.d.ts.map +1 -0
  203. package/types/components/Root.d.ts +68 -0
  204. package/types/components/Root.d.ts.map +1 -0
  205. package/types/components/Scrim.d.ts +6 -0
  206. package/types/components/Scrim.d.ts.map +1 -0
  207. package/types/components/Search.d.ts +16 -0
  208. package/types/components/Search.d.ts.map +1 -0
  209. package/types/components/SegmentedButton.d.ts +718 -0
  210. package/types/components/SegmentedButton.d.ts.map +1 -0
  211. package/types/components/SegmentedButtonGroup.d.ts +44 -0
  212. package/types/components/SegmentedButtonGroup.d.ts.map +1 -0
  213. package/types/components/Select.d.ts +1361 -0
  214. package/types/components/Select.d.ts.map +1 -0
  215. package/types/components/Shape.d.ts +10 -0
  216. package/types/components/Shape.d.ts.map +1 -0
  217. package/types/components/SideSheet.d.ts +106 -0
  218. package/types/components/SideSheet.d.ts.map +1 -0
  219. package/types/components/Slider.d.ts +382 -0
  220. package/types/components/Slider.d.ts.map +1 -0
  221. package/types/components/Snackbar.d.ts +65 -0
  222. package/types/components/Snackbar.d.ts.map +1 -0
  223. package/types/components/SnackbarContainer.d.ts +6 -0
  224. package/types/components/SnackbarContainer.d.ts.map +1 -0
  225. package/types/components/Surface.d.ts +45 -0
  226. package/types/components/Surface.d.ts.map +1 -0
  227. package/types/components/Switch.d.ts +183 -0
  228. package/types/components/Switch.d.ts.map +1 -0
  229. package/types/components/SwitchIcon.d.ts +169 -0
  230. package/types/components/SwitchIcon.d.ts.map +1 -0
  231. package/types/components/Tab.d.ts +879 -0
  232. package/types/components/Tab.d.ts.map +1 -0
  233. package/types/components/TabContent.d.ts +122 -0
  234. package/types/components/TabContent.d.ts.map +1 -0
  235. package/types/components/TabList.d.ts +6266 -0
  236. package/types/components/TabList.d.ts.map +1 -0
  237. package/types/components/TabPanel.d.ts +28 -0
  238. package/types/components/TabPanel.d.ts.map +1 -0
  239. package/types/components/Table.d.ts +2 -0
  240. package/types/components/Table.d.ts.map +1 -0
  241. package/types/components/TextArea.d.ts +1394 -0
  242. package/types/components/TextArea.d.ts.map +1 -0
  243. package/types/components/Title.d.ts +47 -0
  244. package/types/components/Title.d.ts.map +1 -0
  245. package/types/components/Tooltip.d.ts +49 -0
  246. package/types/components/Tooltip.d.ts.map +1 -0
  247. package/types/components/TopAppBar.d.ts +130 -0
  248. package/types/components/TopAppBar.d.ts.map +1 -0
  249. package/types/constants/colorKeywords.d.ts +2 -0
  250. package/types/constants/colorKeywords.d.ts.map +1 -0
  251. package/types/constants/shapes.d.ts +38 -0
  252. package/types/constants/shapes.d.ts.map +1 -0
  253. package/types/constants/typography.d.ts +212 -0
  254. package/types/constants/typography.d.ts.map +1 -0
  255. package/types/core/Composition.d.ts +252 -0
  256. package/types/core/Composition.d.ts.map +1 -0
  257. package/types/core/CompositionAdapter.d.ts +92 -0
  258. package/types/core/CompositionAdapter.d.ts.map +1 -0
  259. package/types/core/CustomElement.d.ts +302 -0
  260. package/types/core/CustomElement.d.ts.map +1 -0
  261. package/types/core/css.d.ts +44 -0
  262. package/types/core/css.d.ts.map +1 -0
  263. package/types/core/customTypes.d.ts +26 -0
  264. package/types/core/customTypes.d.ts.map +1 -0
  265. package/types/core/dom.d.ts +32 -0
  266. package/types/core/dom.d.ts.map +1 -0
  267. package/types/core/jsonMergePatch.d.ts +31 -0
  268. package/types/core/jsonMergePatch.d.ts.map +1 -0
  269. package/types/core/observe.d.ts +113 -0
  270. package/types/core/observe.d.ts.map +1 -0
  271. package/types/core/optimizations.d.ts +7 -0
  272. package/types/core/optimizations.d.ts.map +1 -0
  273. package/types/core/template.d.ts +47 -0
  274. package/types/core/template.d.ts.map +1 -0
  275. package/types/core/uid.d.ts +6 -0
  276. package/types/core/uid.d.ts.map +1 -0
  277. package/types/dom/HTMLOptionsCollectionProxy.d.ts +18 -0
  278. package/types/dom/HTMLOptionsCollectionProxy.d.ts.map +1 -0
  279. package/types/index.d.ts +88 -0
  280. package/types/index.d.ts.map +1 -0
  281. package/types/loaders/palette.d.ts +2 -0
  282. package/types/loaders/palette.d.ts.map +1 -0
  283. package/types/loaders/theme.d.ts +2 -0
  284. package/types/loaders/theme.d.ts.map +1 -0
  285. package/types/mixins/AriaReflectorMixin.d.ts +23 -0
  286. package/types/mixins/AriaReflectorMixin.d.ts.map +1 -0
  287. package/types/mixins/AriaToolbarMixin.d.ts +32 -0
  288. package/types/mixins/AriaToolbarMixin.d.ts.map +1 -0
  289. package/types/mixins/ControlMixin.d.ts +124 -0
  290. package/types/mixins/ControlMixin.d.ts.map +1 -0
  291. package/types/mixins/DelegatesFocusMixin.d.ts +5 -0
  292. package/types/mixins/DelegatesFocusMixin.d.ts.map +1 -0
  293. package/types/mixins/DensityMixin.d.ts +5 -0
  294. package/types/mixins/DensityMixin.d.ts.map +1 -0
  295. package/types/mixins/ElevationMixin.d.ts +33 -0
  296. package/types/mixins/ElevationMixin.d.ts.map +1 -0
  297. package/types/mixins/FlexableMixin.d.ts +13 -0
  298. package/types/mixins/FlexableMixin.d.ts.map +1 -0
  299. package/types/mixins/FormAssociatedMixin.d.ts +122 -0
  300. package/types/mixins/FormAssociatedMixin.d.ts.map +1 -0
  301. package/types/mixins/HyperlinkMixin.d.ts +22 -0
  302. package/types/mixins/HyperlinkMixin.d.ts.map +1 -0
  303. package/types/mixins/InputMixin.d.ts +179 -0
  304. package/types/mixins/InputMixin.d.ts.map +1 -0
  305. package/types/mixins/KeyboardNavMixin.d.ts +47 -0
  306. package/types/mixins/KeyboardNavMixin.d.ts.map +1 -0
  307. package/types/mixins/NavigationListenerMixin.d.ts +8 -0
  308. package/types/mixins/NavigationListenerMixin.d.ts.map +1 -0
  309. package/types/mixins/PopupMixin.d.ts +82 -0
  310. package/types/mixins/PopupMixin.d.ts.map +1 -0
  311. package/types/mixins/RTLObserverMixin.d.ts +7 -0
  312. package/types/mixins/RTLObserverMixin.d.ts.map +1 -0
  313. package/types/mixins/ResizeObserverMixin.d.ts +12 -0
  314. package/types/mixins/ResizeObserverMixin.d.ts.map +1 -0
  315. package/types/mixins/RippleMixin.d.ts +92 -0
  316. package/types/mixins/RippleMixin.d.ts.map +1 -0
  317. package/types/mixins/ScrollListenerMixin.d.ts +41 -0
  318. package/types/mixins/ScrollListenerMixin.d.ts.map +1 -0
  319. package/types/mixins/SemiStickyMixin.d.ts +50 -0
  320. package/types/mixins/SemiStickyMixin.d.ts.map +1 -0
  321. package/types/mixins/ShapeMaskedMixin.d.ts +9 -0
  322. package/types/mixins/ShapeMaskedMixin.d.ts.map +1 -0
  323. package/types/mixins/ShapeMixin.d.ts +38 -0
  324. package/types/mixins/ShapeMixin.d.ts.map +1 -0
  325. package/types/mixins/StateMixin.d.ts +27 -0
  326. package/types/mixins/StateMixin.d.ts.map +1 -0
  327. package/types/mixins/TextFieldMixin.d.ts +1354 -0
  328. package/types/mixins/TextFieldMixin.d.ts.map +1 -0
  329. package/types/mixins/ThemableMixin.d.ts +9 -0
  330. package/types/mixins/ThemableMixin.d.ts.map +1 -0
  331. package/types/mixins/TooltipTriggerMixin.d.ts +106 -0
  332. package/types/mixins/TooltipTriggerMixin.d.ts.map +1 -0
  333. package/types/mixins/TouchTargetMixin.d.ts +3 -0
  334. package/types/mixins/TouchTargetMixin.d.ts.map +1 -0
  335. package/types/mixins/TypographyMixin.d.ts +17 -0
  336. package/types/mixins/TypographyMixin.d.ts.map +1 -0
  337. package/types/services/rtl.d.ts +3 -0
  338. package/types/services/rtl.d.ts.map +1 -0
  339. package/types/services/svgAlias.d.ts +13 -0
  340. package/types/services/svgAlias.d.ts.map +1 -0
  341. package/types/services/theme.d.ts +45 -0
  342. package/types/services/theme.d.ts.map +1 -0
  343. package/types/utils/cli.d.ts +3 -0
  344. package/types/utils/cli.d.ts.map +1 -0
  345. package/types/utils/function.d.ts +3 -0
  346. package/types/utils/function.d.ts.map +1 -0
  347. package/types/utils/jsx-runtime.d.ts +20 -0
  348. package/types/utils/jsx-runtime.d.ts.map +1 -0
  349. package/types/utils/material-color/blend.d.ts +34 -0
  350. package/types/utils/material-color/blend.d.ts.map +1 -0
  351. package/types/utils/material-color/hct/Cam16.d.ts +142 -0
  352. package/types/utils/material-color/hct/Cam16.d.ts.map +1 -0
  353. package/types/utils/material-color/hct/Hct.d.ts +93 -0
  354. package/types/utils/material-color/hct/Hct.d.ts.map +1 -0
  355. package/types/utils/material-color/hct/ViewingConditions.d.ts +69 -0
  356. package/types/utils/material-color/hct/ViewingConditions.d.ts.map +1 -0
  357. package/types/utils/material-color/hct/hctSolver.d.ts +30 -0
  358. package/types/utils/material-color/hct/hctSolver.d.ts.map +1 -0
  359. package/types/utils/material-color/helper.d.ts +8 -0
  360. package/types/utils/material-color/helper.d.ts.map +1 -0
  361. package/types/utils/material-color/palettes/CorePalette.d.ts +75 -0
  362. package/types/utils/material-color/palettes/CorePalette.d.ts.map +1 -0
  363. package/types/utils/material-color/palettes/TonalPalette.d.ts +38 -0
  364. package/types/utils/material-color/palettes/TonalPalette.d.ts.map +1 -0
  365. package/types/utils/material-color/scheme/Scheme.d.ts +264 -0
  366. package/types/utils/material-color/scheme/Scheme.d.ts.map +1 -0
  367. package/types/utils/material-color/utils/color.d.ts +172 -0
  368. package/types/utils/material-color/utils/color.d.ts.map +1 -0
  369. package/types/utils/material-color/utils/math.d.ts +94 -0
  370. package/types/utils/material-color/utils/math.d.ts.map +1 -0
  371. package/types/utils/pixelmatch.d.ts +22 -0
  372. package/types/utils/pixelmatch.d.ts.map +1 -0
  373. package/types/utils/popup.d.ts +106 -0
  374. package/types/utils/popup.d.ts.map +1 -0
  375. package/types/utils/searchParams.d.ts +3 -0
  376. package/types/utils/searchParams.d.ts.map +1 -0
  377. package/types/utils/svg.d.ts +7 -0
  378. package/types/utils/svg.d.ts.map +1 -0
  379. package/utils/material-color/scheme/Scheme.js +1 -1
  380. package/utils/pixelmatch.js +360 -0
  381. package/utils/popup.js +86 -10
  382. package/utils/searchParams.js +19 -0
  383. package/components/ExtendedFab.js +0 -32
  384. package/components/Layout.js +0 -504
  385. package/components/Nav.js +0 -38
  386. package/core/DomAdapter.js +0 -586
  387. package/core/ICustomElement.d.ts +0 -291
  388. package/core/ICustomElement.js +0 -1
  389. package/core/test.js +0 -126
  390. package/core/typings.d.ts +0 -142
  391. package/core/typings.js +0 -1
  392. package/mixins/SurfaceMixin.js +0 -127
  393. package/theming/loader.js +0 -22
  394. /package/{utils/color_keywords.js → constants/colorKeywords.js} +0 -0
@@ -1,8 +1,11 @@
1
1
  import CustomElement from '../core/CustomElement.js';
2
- import { isRtl } from '../core/dom.js';
2
+ import { SAFARI_VERSION, isFocused, isRtl } from '../core/dom.js';
3
3
  import InputMixin from '../mixins/InputMixin.js';
4
4
  import StateMixin from '../mixins/StateMixin.js';
5
5
  import ThemableMixin from '../mixins/ThemableMixin.js';
6
+ import { loadGlobalStyles } from '../services/rtl.js';
7
+
8
+ loadGlobalStyles();
6
9
 
7
10
  /**
8
11
  * @param {string} value
@@ -40,8 +43,11 @@ export default CustomElement
40
43
  })
41
44
  .observe({
42
45
  ticks: 'string',
43
- showLabel: { type: 'boolean', reflect: false },
44
- _previewValue: { nullable: false },
46
+ _valueAsText: { nullable: false },
47
+ thumbLabel: {
48
+ type: 'string',
49
+ reflect: 'read',
50
+ },
45
51
  _roundedValue: 'float',
46
52
  _isHoveringThumb: 'boolean',
47
53
  _lastDispatchedChangeValue: 'string',
@@ -120,7 +126,20 @@ export default CustomElement
120
126
  }
121
127
 
122
128
  this._roundedValue = roundedValue;
123
- this._previewValue = roundedValue.toString(10);
129
+ this._valueAsText = roundedValue.toString(10);
130
+ if (isTouch && SAFARI_VERSION) {
131
+ // Safari does not update input when drag wasn't initiated at thumb
132
+ if (event.type === 'touchstart') {
133
+ // Default touch action on Safari is to magnify when on track
134
+ event.preventDefault();
135
+ }
136
+ const { _input } = this;
137
+ if (_input.valueAsNumber !== roundedValue) {
138
+ _input.valueAsNumber = roundedValue;
139
+ this.dispatchEvent(new Event('input', { bubbles: true, composed: true }));
140
+ }
141
+ }
142
+
124
143
  return;
125
144
  }
126
145
 
@@ -138,7 +157,7 @@ export default CustomElement
138
157
 
139
158
  /** @param {Event} event */
140
159
  onLeaveEvent({ currentTarget }) {
141
- if (document.activeElement === currentTarget) return;
160
+ if (isFocused(/** @type {Element} */ (currentTarget))) return;
142
161
  this._isHoveringThumb = false;
143
162
  },
144
163
 
@@ -149,12 +168,14 @@ export default CustomElement
149
168
  onControlFinish(event) {
150
169
  const input = event.currentTarget;
151
170
  if (input.disabled) return;
152
- event.preventDefault();
171
+ if (event.type === 'click') {
172
+ event.preventDefault();
173
+ }
153
174
  input.valueAsNumber = this._roundedValue;
154
175
  this._value = input.value;
155
176
  if (this._lastDispatchedChangeValue !== this._value) {
156
177
  this._lastDispatchedChangeValue = this._value;
157
- input.dispatchEvent(new Event('change', { bubbles: true }));
178
+ this.dispatchEvent(new Event('change', { bubbles: true }));
158
179
  }
159
180
  },
160
181
  })
@@ -167,26 +188,36 @@ export default CustomElement
167
188
  '~mousedown': 'onControlMouseOrTouch',
168
189
  '~mousemove': 'onControlMouseOrTouch',
169
190
  '~mouseout': 'onControlMouseOrTouch',
191
+ touchstart: 'onControlMouseOrTouch',
170
192
  '~touchmove': 'onControlMouseOrTouch',
171
- '~touchstart': 'onControlMouseOrTouch',
172
- // @ts-expect-error Old spec
173
193
  '~touchleave': 'onControlMouseOrTouch',
174
194
  '~touchcancel': 'onControlMouseOrTouch',
175
195
  '~touchend': 'onControlMouseOrTouch',
176
196
  touchend: 'onControlFinish',
177
197
  click: 'onControlFinish',
198
+ '~change'(event) {
199
+ // Change event will be rethrown by ControlMixin
200
+ // Track value to avoid double dispatch
201
+ if (this._lastDispatchedChangeValue === this._value) {
202
+ event.stopPropagation();
203
+ }
204
+ this._lastDispatchedChangeValue = this._value;
205
+ },
178
206
  },
179
207
  })
180
208
  .expressions({
181
- computeTrackStyle({ ticks, _previewValue, min, max }) {
209
+ computeTrackStyle({ ticks, _valueAsText, min, max }) {
182
210
  return [
183
211
  ticks ? `--ticks:${ticks}` : null,
184
- `--value:${valueAsFraction(_previewValue, min, max)}`,
212
+ `--value:${valueAsFraction(_valueAsText, min, max)}`,
185
213
  ].filter(Boolean).join(';') || null;
186
214
  },
187
215
  _thumbLabelHidden({ _isHoveringThumb, focusedState }) {
188
216
  return (!_isHoveringThumb && !focusedState);
189
217
  },
218
+ _computedThumbLabel({ thumbLabel, _valueAsText }) {
219
+ return thumbLabel ?? _valueAsText;
220
+ },
190
221
  })
191
222
  .html`
192
223
  <div id=track style={computeTrackStyle} aria-hidden=true disabled={disabledState}>
@@ -196,18 +227,17 @@ export default CustomElement
196
227
  <div id=thumb></div>
197
228
  <div id=thumb-label
198
229
  hidden={_thumbLabelHidden}
199
- text={_previewValue}></div>
230
+ text={_computedThumbLabel}></div>
200
231
  </div>
201
232
  </div>
202
233
  `
234
+ .recompose(({ refs: { thumb, state, control } }) => {
235
+ thumb.append(state);
236
+ control.removeAttribute('aria-labelledby');
237
+ })
203
238
  .on({
204
- composed() {
205
- const { thumb, state, control } = this.refs;
206
- thumb.append(state);
207
- control.removeAttribute('aria-labelledby');
208
- },
209
239
  valueChanged(oldValue, newValue) {
210
- this._previewValue = newValue;
240
+ this._valueAsText = newValue;
211
241
  },
212
242
  })
213
243
  .css`
@@ -307,6 +337,10 @@ export default CustomElement
307
337
  border-radius: 50%;
308
338
  }
309
339
 
340
+ #control[disabled] {
341
+ cursor: not-allowed;
342
+ }
343
+
310
344
  #track {
311
345
  --value: 0.5;
312
346
  position: absolute;
@@ -321,6 +355,7 @@ export default CustomElement
321
355
 
322
356
  background-color: rgb(var(--mdw-color__surface-container-highest));
323
357
  border-radius: inherit;
358
+ color: rgb(var(--mdw-bg));
324
359
  }
325
360
 
326
361
  #thumb {
@@ -340,7 +375,7 @@ export default CustomElement
340
375
 
341
376
  border-radius: 50%;
342
377
 
343
- color: rgb(var(--mdw-bg));
378
+ color: currentColor;
344
379
  }
345
380
 
346
381
  #thumb::before {
@@ -354,7 +389,7 @@ export default CustomElement
354
389
  background-color: currentColor;
355
390
  border-radius: 50%;
356
391
 
357
- transition: background-color 100ms;
392
+ transition: color 100ms, background-color 100ms;
358
393
  }
359
394
 
360
395
  /* Inactive ticks */
@@ -366,28 +401,27 @@ export default CustomElement
366
401
  position: absolute;
367
402
  inset: 0;
368
403
 
369
- padding-inline: 10px;
404
+ padding-inline: 2px;
370
405
 
371
406
  background-clip: content-box;
372
- /* stylelint-disable-next-line plugin/no-unsupported-browser-features */
373
- background-image: radial-gradient(circle at center, var(--tick-color) 0, var(--tick-color) 1px, transparent 0);
374
- background-position: center center;
407
+ background-image: radial-gradient(circle at 1px, currentColor 0, currentColor 1px, transparent 0);
408
+ background-position: -1px 50%;
375
409
  background-repeat: repeat-x;
376
- background-size: 0 100%;
377
- background-size: calc(100% / var(--ticks, 0)) 2px;
410
+ background-size: calc(100% / (var(--ticks, 0) + 1)) 2px;
378
411
  }
379
412
 
380
413
  #ticks::before {
381
- --tick-color: rgb(var(--mdw-color__on-surface-variant));
414
+ color: rgb(var(--mdw-color__on-surface-variant));
382
415
  }
383
416
 
384
417
  #ticks::after {
385
- --tick-color: rgb(var(--mdw-ink));
386
418
  /* TODO: Use single-paint implementation */
387
419
  padding-inline-end: calc(100% - (100% * var(--value)) + 10px);
388
420
 
389
421
  z-index: 1;
390
422
 
423
+ color: rgb(var(--mdw-ink));
424
+
391
425
  will-change: padding-inline-end;
392
426
  }
393
427
  /* Active Indicator */
@@ -409,7 +443,7 @@ export default CustomElement
409
443
  transform: scaleX(var(--value));
410
444
  transform-origin: calc(100% * calc(-0.5 * var(--mdw-dir, 1) + 0.5)) 0;
411
445
 
412
- background-color: rgb(var(--mdw-bg));
446
+ background-color: currentColor;
413
447
 
414
448
  will-change: transform;
415
449
  }
@@ -465,21 +499,24 @@ export default CustomElement
465
499
  align-items: center;
466
500
  justify-content: center;
467
501
 
502
+ box-sizing: border-box;
503
+
468
504
  min-block-size: 28px;
469
505
  min-inline-size: 28px;
506
+ padding: 4px;
470
507
 
471
508
  z-index: 1;
472
509
 
473
510
  background-color: rgb(var(--mdw-bg));
474
- border-radius: 50%;
511
+ border-radius: 14px;
475
512
  color: rgb(var(--mdw-ink));
476
513
  }
477
514
 
478
515
  #thumb-label::after {
479
516
  /* Values from Figma SVG */
480
- --x-start: 14.6446%; /*4.1005px*/
481
- --x-end: 85.3554%;
482
- --y: 70.7106%; /*24.0416px*/
517
+ --x-start: 4.1005px; /*4.1005px*/
518
+ --x-end: calc(100% - 4.1005px);
519
+ --y: calc(100% - 9.9584px); /*24.0416px*/
483
520
 
484
521
  content: "";
485
522
 
@@ -489,7 +526,7 @@ export default CustomElement
489
526
 
490
527
  clip-path: polygon(var(--x-start) var(--y), var(--x-end) var(--y), 50% 100%, var(--x-start) var(--y));
491
528
 
492
- background-color: rgb(var(--mdw-bg));
529
+ background-color: currentColor;
493
530
  }
494
531
 
495
532
  #track[disabled] {
@@ -1,18 +1,23 @@
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
+ export default CustomElement
13
15
  .extend()
16
+ .mixin(ThemableMixin)
17
+ .mixin(ShapeMixin)
14
18
  .mixin(DensityMixin)
15
19
  .mixin(AriaReflectorMixin)
20
+ .mixin(ElevationMixin)
16
21
  .set({
17
22
  _ariaRole: 'status',
18
23
  elevated: true,
@@ -47,16 +52,10 @@ export default Surface
47
52
  },
48
53
  })
49
54
  .html`
50
- <div id=content></div>
55
+ <div id=content><slot id=slot></div>
51
56
  <mdw-button mdw-if={action} id=action class=button ink={actionInk} type-style={actionTypeStyle}>{action}</mdw-button>
52
57
  <mdw-icon-button mdw-if={closeButton} id=close class=button icon={closeIcon} ink={closeInk}>Close</mdw-button>
53
58
  `
54
- .on({
55
- composed() {
56
- const { content, slot } = this.refs;
57
- content.append(slot);
58
- },
59
- })
60
59
  .childEvents({
61
60
  action: {
62
61
  '~click'() {
@@ -75,21 +74,28 @@ export default Surface
75
74
 
76
75
  :host {
77
76
  --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));
77
+ --mdw-bg: var(--mdw-color__inverse-surface);
80
78
  --mdw-ink: var(--mdw-color__inverse-on-surface);
81
-
82
79
  --mdw-type__line-height: var(--mdw-typescale__body-medium__line-height);
80
+
83
81
  display: flex;
84
82
  align-items: center;
85
83
 
86
- padding-inline: 16px;
84
+ grid-area: snackbar;
85
+
86
+ padding-inline: 16px;
87
87
 
88
+ pointer-events: auto;
89
+
90
+ filter: var(--mdw-elevation__drop-shadow__3);
88
91
  opacity: 0;
89
92
  transform: translateY(25%) scaleY(0.25);
90
93
  transform-origin: bottom center;
91
94
  visibility: hidden; /* Remove from tab order */
92
- z-index: 24;
95
+ z-index: 22;
96
+
97
+ background-color: rgb(var(--mdw-bg));
98
+ color: rgb(var(--mdw-ink));
93
99
 
94
100
  font: var(--mdw-typescale__body-medium__font);
95
101
  letter-spacing: var(--mdw-typescale__body-medium__letter-spacing);
@@ -112,7 +118,7 @@ export default Surface
112
118
  :host([open]) {
113
119
  opacity: 1;
114
120
  transform: scale(1);
115
- visibility: visible;
121
+ visibility: inherit;
116
122
  }
117
123
 
118
124
  #content {
@@ -0,0 +1,42 @@
1
+ import CustomElement from '../core/CustomElement.js';
2
+ import DelegatesFocusMixin from '../mixins/DelegatesFocusMixin.js';
3
+
4
+ export default CustomElement
5
+ .extend()
6
+ .mixin(DelegatesFocusMixin)
7
+ .html`
8
+ <slot id=slot></slot>
9
+ `
10
+ .css`
11
+ :host {
12
+ display: grid;
13
+ align-items: flex-end;
14
+ grid-template:
15
+ "snackbar" auto
16
+ / minmax(auto, 60ch);
17
+
18
+ justify-content: center;
19
+
20
+ margin: 16px;
21
+
22
+ pointer-events: none;
23
+
24
+ }
25
+
26
+ @media (min-width: 648px) {
27
+ :host {
28
+ grid-template-columns: minmax(auto, 1fr);
29
+
30
+ margin: 24px;
31
+ }
32
+ }
33
+
34
+ @media (min-width: 1248px) {
35
+ :host {
36
+ grid-template-columns: minmax(auto, 60ch);
37
+ justify-content: flex-start;
38
+ }
39
+ }
40
+
41
+ `
42
+ .autoRegister('mdw-snackbar-container');
@@ -1,32 +1,37 @@
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
7
  export default CustomElement
8
8
  .extend()
9
9
  .mixin(ThemableMixin)
10
10
  .mixin(FlexableMixin)
11
- .mixin(SurfaceMixin)
11
+ .mixin(ElevationMixin)
12
12
  .mixin(ShapeMixin)
13
13
  .html`<slot id=slot></slot>`
14
- .on({
15
- composed() {
16
- const { surface, shape } = this.refs;
17
- surface.append(shape);
18
- },
19
- })
20
14
  .css`
21
15
  :host {
22
- --mdw-shape__bg: rgb(var(--mdw-color__surface));
16
+ --mdw-bg: var(--mdw-color__surface);
23
17
  --mdw-ink: var(--mdw-color__on-surface);
24
18
  position: relative;
19
+
20
+ filter: var(--mdw-elevation__drop-shadow__0);
25
21
 
22
+ background-color: rgb(var(--mdw-bg));
26
23
  color: rgb(var(--mdw-ink));
27
24
 
28
25
  font: var(--mdw-type__font);
29
26
  letter-spacing: var(--mdw-type__letter-spacing);
30
- }
27
+
28
+ transition: filter 200ms;
29
+ }
30
+
31
+ :host(:where([elevation="1"])) { filter: var(--mdw-elevation__drop-shadow__1); }
32
+ :host(:where([elevation="2"])) { filter: var(--mdw-elevation__drop-shadow__2); }
33
+ :host(:where([elevation="3"])) { filter: var(--mdw-elevation__drop-shadow__3); }
34
+ :host(:where([elevation="4"])) { filter: var(--mdw-elevation__drop-shadow__4); }
35
+ :host(:where([elevation="5"])) { filter: var(--mdw-elevation__drop-shadow__5); }
31
36
  `
32
37
  .autoRegister('mdw-surface');
@@ -38,22 +38,9 @@ export default CustomElement
38
38
  </mdw-switch-icon>
39
39
  <slot id=slot></slot>
40
40
  `
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
- },
41
+ .recompose(({ refs: { switch: switchEl, state, control } }) => {
42
+ switchEl.append(state, control);
43
+ control.setAttribute('role', 'switch');
57
44
  })
58
45
  .methods({
59
46
  /**
@@ -3,6 +3,9 @@ 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';
7
+
8
+ loadGlobalStyles();
6
9
 
7
10
  export default CustomElement
8
11
  .extend()
@@ -50,28 +53,29 @@ export default CustomElement
50
53
  hasIcon({ icon, src, unselectedIcon, unselectedSrc }) {
51
54
  return Boolean(icon || src || unselectedIcon || unselectedSrc);
52
55
  },
56
+ iconVariation({ selected }) {
57
+ return selected ? 'filled' : null;
58
+ },
53
59
  })
54
60
  .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>
61
+ <div id=track selected={checked} disabled={disabled}>
62
+ <div id=thumb selected={checked} pressed={pressed} disabled={disabled}>
63
+ <mdw-box block id=thumb-shape selected={checked} pressed={pressed} hovered={hovered} focused={focused} icon={hasIcon}
64
+ color={_thumbColor} active={_active} ink={_thumbInk} disabled={disabled}></mdw-box>
65
+ <mdw-icon ink={_iconInk} class=icon id=icon src={src} selected={checked} icon={icon} variation={iconVariation}></mdw-icon>
66
+ <mdw-icon ink={_iconInk} class=icon id=selected-icon src={selectedIconSrc} selected={checked} icon={selectedIcon} variation=filled></mdw-icon>
67
+ <mdw-icon ink={_iconInk} class=icon id=unselected-icon src={unselectedIconSrc} selected={checked} icon={unselectedIcon}></mdw-icon>
68
+ <slot id=slot selected={checked}></slot>
69
+ </div>
62
70
  </div>
63
71
  `
72
+ .recompose(({ refs: { outline } }) => {
73
+ outline.removeAttribute('mdw-if');
74
+ outline.setAttribute('selected', '{checked}');
75
+ outline.setAttribute('errored', '{errored}');
76
+ outline.setAttribute('disabled', '{disabled}');
77
+ })
64
78
  .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
79
  dragValueChanged(oldValue, newValue) {
76
80
  if (newValue == null) {
77
81
  this.refs.thumb.style.removeProperty('--mdw-switch__value');
@@ -116,6 +120,7 @@ export default CustomElement
116
120
  inset: 0;
117
121
 
118
122
  background-color: rgb(var(--mdw-color__surface-container-highest));
123
+ border-radius: inherit;
119
124
  }
120
125
 
121
126
  #track[selected] {
@@ -123,19 +128,17 @@ export default CustomElement
123
128
  }
124
129
 
125
130
  #track[disabled] {
126
- opacity: calc(0.12/0.38);
131
+ background-color: rgba(var(--mdw-color__surface-container-highest), calc(0.12/0.38));
127
132
  }
128
133
 
129
134
  #track[disabled][selected] {
130
- background-color: rgb(var(--mdw-color__on-surface));
135
+ background-color: rgba(var(--mdw-color__on-surface), calc(0.12/0.38));
131
136
  }
132
137
 
133
138
  #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);
139
+ border-width: 2px;
140
+
141
+ z-index: 1;
139
142
 
140
143
  color: rgb(var(--mdw-color__outline));
141
144
  }
@@ -145,7 +148,7 @@ export default CustomElement
145
148
  }
146
149
 
147
150
  #outline[disabled] {
148
- color: rgb(var(--mdw-color__on-surface));
151
+ color: rgba(var(--mdw-color__on-surface), calc(0.12/0.38));
149
152
  }
150
153
 
151
154
  #outline[selected] {
@@ -166,6 +169,7 @@ export default CustomElement
166
169
 
167
170
  transform: translateX(calc(var(--mdw-dir, 1) * var(--mdw-switch__value) * (52px - 100%)));
168
171
 
172
+ border-radius: inherit;
169
173
  aspect-ratio: 1/1;
170
174
  }
171
175
 
@@ -198,6 +202,8 @@ export default CustomElement
198
202
 
199
203
  transform: scale(calc(16/28));
200
204
  z-index: 0;
205
+
206
+ border-radius:inherit;
201
207
  }
202
208
 
203
209
  #thumb-shape[icon] {
@@ -221,6 +227,14 @@ export default CustomElement
221
227
  transform: scale(1);
222
228
  }
223
229
 
230
+ #thumb-shape[disabled] {
231
+ background-color: rgb(var(--mdw-color__on-surface));
232
+ }
233
+
234
+ #thumb-shape[disabled][selected] {
235
+ background-color: rgb(var(--mdw-color__surface));
236
+ }
237
+
224
238
  /** Thumb Icons **/
225
239
 
226
240
  .icon {
@@ -239,13 +253,11 @@ export default CustomElement
239
253
  }
240
254
 
241
255
  .icon:not([src]):empty {
242
- display: none;
256
+ /* display: none; */
243
257
  }
244
258
 
245
259
  #icon, #unselected-icon {
246
260
  opacity: 1;
247
-
248
- font-variation-settings: 'FILL' 0;
249
261
  }
250
262
 
251
263
  #unselected-icon[selected] {
@@ -256,10 +268,6 @@ export default CustomElement
256
268
  opacity: 1;
257
269
  }
258
270
 
259
- #icon[selected] {
260
- font-variation-settings: 'FILL' 1;
261
- }
262
-
263
271
  #thumb[disabled] {
264
272
  color: rgb(var(--mdw-color__on-surface));
265
273
  }