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