@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
@@ -2,12 +2,21 @@ import './Icon.js';
2
2
 
3
3
  import Chip from './Chip.js';
4
4
 
5
+ /**
6
+ * Filter chips use tags or descriptive words to filter content.
7
+ * They can be a good alternative to toggle buttons or checkboxes.
8
+ * @see https://m3.material.io/components/chips/specs
9
+ */
5
10
  export default Chip
6
11
  .extend()
7
12
  .observe({
13
+ /** Type of the chip; defaults to 'checkbox' for filter behavior. */
8
14
  type: { empty: 'checkbox' },
15
+ /** When true, shows a dropdown caret as the trailing icon. */
9
16
  dropdown: 'boolean',
17
+ /** Source URL for a trailing image/icon. */
10
18
  trailingSrc: 'string',
19
+ /** Name of the trailing icon to show. */
11
20
  trailingIcon: 'string',
12
21
  })
13
22
  .expressions({
@@ -17,33 +26,33 @@ export default Chip
17
26
  if (trailingSrc) return '';
18
27
  return null;
19
28
  },
29
+ iconVariation({ checked }) {
30
+ return checked ? 'filled' : null;
31
+ },
20
32
  })
21
33
  .html`
22
- <mdw-icon mdw-if={!icon} id=check-icon disabled={disabledState} selected={checked} aria-hidden=true>check</mdw-icon>
23
- <mdw-icon mdw-if={computedTrailingIcon} id=trailing-icon aria-hidden=true src={trailingSrc}>{computedTrailingIcon}</mdw-icon>
34
+ <mdw-icon mdw-if={!icon} id=check-icon disabled={disabledState} selected={checked} aria-hidden=true icon=check variation=filled></mdw-icon>
35
+ <mdw-icon mdw-if={computedTrailingIcon} id=trailing-icon aria-hidden=true src={trailingSrc} icon={computedTrailingIcon}></mdw-icon>
24
36
  `
25
- .on({
26
- composed() {
27
- const { shape, icon, control, outline, slot, trailingIcon, checkIcon } = this.refs;
28
-
29
- shape.setAttribute('selected', '{checked}');
30
- shape.setAttribute('icon', '');
31
- shape.setAttribute('trailing-icon', '{computedTrailingIcon}');
32
- icon.setAttribute('mdw-if', '{icon}');
33
- icon.setAttribute('ink', '{iconInk}');
37
+ .recompose(({ refs: { icon, control, outline, slot, trailingIcon, checkIcon } }) => {
38
+ icon.setAttribute('mdw-if', '{icon}');
39
+ icon.setAttribute('ink', '{iconInk}');
34
40
 
35
- control.removeAttribute('role');
41
+ control.removeAttribute('role');
36
42
 
37
- outline.removeAttribute('ink');
38
- outline.removeAttribute('color');
39
- outline.setAttribute('selected', '{checked}');
43
+ outline.removeAttribute('mdw-if');
44
+ outline.removeAttribute('ink');
45
+ outline.removeAttribute('color');
46
+ outline.setAttribute('selected', '{checked}');
47
+ outline.setAttribute('elevated', '{elevated}');
48
+ outline.setAttribute('icon', '');
49
+ outline.setAttribute('trailing-icon', '{computedTrailingIcon}');
40
50
 
41
- slot.removeAttribute('ink');
42
- slot.removeAttribute('color');
51
+ slot.removeAttribute('ink');
52
+ slot.removeAttribute('color');
43
53
 
44
- slot.before(checkIcon);
45
- slot.after(trailingIcon);
46
- },
54
+ slot.before(checkIcon);
55
+ slot.after(trailingIcon);
47
56
  })
48
57
  .css`
49
58
  /* https://m3.material.io/components/chips/specs */
@@ -58,6 +67,8 @@ export default Chip
58
67
  padding-inline-start: max(4px, calc(8px + (var(--mdw-density) * 2px)));
59
68
  padding-inline-end: max(12px, calc(16px + (var(--mdw-density) * 2px)));
60
69
 
70
+ background-color: transparent;
71
+
61
72
  color: rgb(var(--mdw-color__on-surface-variant));
62
73
 
63
74
  }
@@ -66,11 +77,9 @@ export default Chip
66
77
  --mdw-outline__rgb: var(--mdw-color__outline);
67
78
  }
68
79
 
69
- #icon[selected] {
70
- font-variation-settings: 'FILL' 1;
71
- }
80
+ #outline {
81
+ z-index: -1;
72
82
 
73
- #shape {
74
83
  background-color: transparent;
75
84
  }
76
85
 
@@ -78,22 +87,20 @@ export default Chip
78
87
  padding-inline-start: max(4px, calc(8px + (var(--mdw-density) * 2px)));
79
88
  }
80
89
 
81
- #shape[elevated] {
82
- background-color: rgb(var(--mdw-color__surface));
90
+ #outline[elevated] {
91
+ background-color: rgb(var(--mdw-color__surface-container-low));
92
+ border-color: transparent;
83
93
  }
84
94
 
85
- #shape[selected] {
95
+ #outline[selected] {
86
96
  background-color: rgb(var(--mdw-bg));
97
+ border-color: transparent;
87
98
  }
88
99
 
89
100
  :host([selected]) {
90
101
  color: rgb(var(--mdw-ink));
91
102
  }
92
103
 
93
- #outline[selected] {
94
- opacity: 0;
95
- }
96
-
97
104
  #trailing-icon {
98
105
  position: relative;
99
106
 
@@ -122,7 +129,11 @@ export default Chip
122
129
  color: rgba(var(--mdw-color__on-surface), 0.38);
123
130
  }
124
131
 
125
- #shape[disabled]:is([elevated],[selected]) {
132
+ :host([disabled]:is([elevated], [filled])) {
133
+ background-color: transparent;
134
+ }
135
+
136
+ #outline[disabled]:is([elevated],[selected]) {
126
137
  background-color: rgba(var(--mdw-color__on-surface), 0.12);
127
138
  /* color: rgba(var(--mdw-color__on-surface), 0.38); */
128
139
  }
@@ -0,0 +1,187 @@
1
+ import { ELEMENT_STYLE_TYPE } from '../core/customTypes.js';
2
+ import ResizeObserverMixin from '../mixins/ResizeObserverMixin.js';
3
+
4
+ import Box from './Box.js';
5
+
6
+ /**
7
+ * Grid layout for arranging content into responsive columns.
8
+ * @see https://m3.material.io/foundations/layout/understanding-layout/parts-of-layout
9
+ */
10
+ export default Box
11
+ .extend()
12
+ .mixin(ResizeObserverMixin)
13
+ .observe({
14
+ /** Enable CSS grid layout for children. */
15
+ grid: 'boolean',
16
+ /** Explicit number of columns; when set, disables auto column calculation. */
17
+ columns: 'integer',
18
+ /** Auto-calculated column count when `columns` is not provided. */
19
+ _autoColumns: {
20
+ type: 'integer',
21
+ empty: 4,
22
+ },
23
+ /** Last measured inline size (px) from ResizeObserver. */
24
+ _lastInlineSize: 'float',
25
+ })
26
+ .observe({
27
+ /** Whether resize observer should be active (disabled when explicit columns set). */
28
+ _resizeObserverEnabled: {
29
+ type: 'boolean',
30
+ get({ columns }) {
31
+ // Only use resize observer if using grid, not explicit columns
32
+ // and CSS containers are not supported.
33
+ return !columns;
34
+ },
35
+ },
36
+ /** Computed number of columns (either `columns` or `_autoColumns`). */
37
+ _computedColumns({ columns, _autoColumns }) {
38
+ if (columns) return columns;
39
+ if (_autoColumns) return _autoColumns;
40
+ return 4;
41
+ },
42
+ })
43
+ .overrides({
44
+ /** Update last observed inline size from ResizeObserver entry. */
45
+ onResizeObserved(entry) {
46
+ const { contentBoxSize } = entry;
47
+ if (!contentBoxSize.length) return;
48
+ const [{ inlineSize }] = contentBoxSize;
49
+ this._lastInlineSize = inlineSize;
50
+ },
51
+ })
52
+ .on({
53
+ _lastInlineSizeChanged(oldValue, inlineSize) {
54
+ if (inlineSize >= 840) {
55
+ this._autoColumns = 12;
56
+ } else if (inlineSize >= 600) {
57
+ this._autoColumns = 8;
58
+ } else {
59
+ this._autoColumns = 4;
60
+ }
61
+ },
62
+ connected() {
63
+ this._lastInlineSize = this.clientWidth;
64
+ },
65
+ })
66
+ .expressions({
67
+ _isFlex({ block, grid }) {
68
+ return !block && !grid;
69
+ },
70
+ })
71
+ .observe({
72
+ _styles: {
73
+ ...ELEMENT_STYLE_TYPE,
74
+ get({ _computedColumns }) {
75
+ if ((_computedColumns || 4) === 4) return '';
76
+ return { gridTemplateColumns: `repeat(${_computedColumns},1fr)` };
77
+ },
78
+ },
79
+ })
80
+ .recompose(({ refs: { slot } }) => {
81
+ slot.setAttribute('grid', '{grid}');
82
+ slot.setAttribute('flex', '{_isFlex}');
83
+ slot.setAttribute('columns', '{_computedColumns}');
84
+ })
85
+ .css`
86
+ :host {
87
+ display: grid;
88
+ column-gap: 16px; /* Gutters */
89
+ grid-auto-flow: row;
90
+ grid-template-columns: repeat(1fr, 4);
91
+ }
92
+
93
+ :host([y="start"]) { align-items: flex-start; }
94
+ :host([y="end"]) { align-items: flex-end; }
95
+ :host([y="center"]) { align-items: center; }
96
+ :host([y="between"]) { align-items: space-between; }
97
+ :host([y="around"]) { align-items: space-around; }
98
+ :host([y="stretch"]) { align-items: stretch; }
99
+ :host([x="start"]) { justify-content: flex-start; }
100
+ :host([x="end"]) { justify-content: flex-end; }
101
+ :host([x="center"]) { justify-content: center; }
102
+ :host([x="between"]) { justify-content: space-between; }
103
+ :host([x="stretch"]) { justify-content: stretch; }
104
+
105
+ #slot {
106
+ --mdw-grid__columns: 4;
107
+ --mdw-grid__columns__4: 1;
108
+ --mdw-grid__columns__8: 0;
109
+ --mdw-grid__columns__12: 0;
110
+ }
111
+
112
+ #slot[columns="4"] {
113
+ --mdw-grid__columns: 4;
114
+ --mdw-grid__columns__4: 1;
115
+ --mdw-grid__columns__8: 0;
116
+ --mdw-grid__columns__12: 0;
117
+ }
118
+
119
+ #slot[columns="8"] {
120
+ --mdw-grid__columns: 8;
121
+ --mdw-grid__columns__4: 0;
122
+ --mdw-grid__columns__8: 1;
123
+ --mdw-grid__columns__12: 0;
124
+ }
125
+
126
+ #slot[columns="12"] {
127
+ --mdw-grid__columns: 12;
128
+ --mdw-grid__columns__4: 0;
129
+ --mdw-grid__columns__8: 0;
130
+ --mdw-grid__columns__12: 1;
131
+ }
132
+
133
+ ::slotted(*) {
134
+ --mdw-grid__column-count: var(--mdw-grid__columns);
135
+ --mdw-grid__column-count__4: var(--mdw-grid__column-count);
136
+ --mdw-grid__column-count__8: var(--mdw-grid__column-count);
137
+ --mdw-grid__column-count__12: var(--mdw-grid__column-count);
138
+ grid-column: auto / span calc(
139
+ (min(var(--mdw-grid__column-count__4), 4) * var(--mdw-grid__columns__4))
140
+ + (min(var(--mdw-grid__column-count__8), 8) * var(--mdw-grid__columns__8))
141
+ + (min(var(--mdw-grid__column-count__12), 12) * var(--mdw-grid__columns__12))
142
+ );
143
+ }
144
+ ::slotted([col-span="1"]) { --mdw-grid__column-count: 1; }
145
+ ::slotted([col-span="2"]) { --mdw-grid__column-count: 2; }
146
+ ::slotted([col-span="3"]) { --mdw-grid__column-count: 3; }
147
+ ::slotted([col-span="4"]) { --mdw-grid__column-count: 4; }
148
+ ::slotted([col-span="5"]) { --mdw-grid__column-count: 5; }
149
+ ::slotted([col-span="6"]) { --mdw-grid__column-count: 6; }
150
+ ::slotted([col-span="7"]) { --mdw-grid__column-count: 7; }
151
+ ::slotted([col-span="8"]) { --mdw-grid__column-count: 8; }
152
+ ::slotted([col-span="9"]) { --mdw-grid__column-count: 9; }
153
+ ::slotted([col-span="10"]) { --mdw-grid__column-count: 10; }
154
+ ::slotted([col-span="11"]) { --mdw-grid__column-count: 11; }
155
+ ::slotted([col-span="12"]) { --mdw-grid__column-count: 12; }
156
+
157
+ ::slotted([col-span="25%"]) { --mdw-grid__column-count: calc(var(--mdw-grid__columns) / 4); }
158
+ ::slotted([col-span="50%"]) { --mdw-grid__column-count: calc(var(--mdw-grid__columns) / 2); }
159
+ ::slotted([col-span="100%"]) { --mdw-grid__column-count: calc(var(--mdw-grid__columns)); }
160
+
161
+ ::slotted([col-span-4="1"]) { --mdw-grid__column-count__4: 1; }
162
+ ::slotted([col-span-4="2"]) { --mdw-grid__column-count__4: 2; }
163
+ ::slotted([col-span-4="3"]) { --mdw-grid__column-count__4: 3; }
164
+ ::slotted([col-span-4="4"]) { --mdw-grid__column-count__4: 4; }
165
+ ::slotted([col-span-8="1"]) { --mdw-grid__column-count__8: 1; }
166
+ ::slotted([col-span-8="2"]) { --mdw-grid__column-count__8: 2; }
167
+ ::slotted([col-span-8="3"]) { --mdw-grid__column-count__8: 3; }
168
+ ::slotted([col-span-8="4"]) { --mdw-grid__column-count__8: 4; }
169
+ ::slotted([col-span-8="5"]) { --mdw-grid__column-count__8: 5; }
170
+ ::slotted([col-span-8="6"]) { --mdw-grid__column-count__8: 6; }
171
+ ::slotted([col-span-8="7"]) { --mdw-grid__column-count__8: 7; }
172
+ ::slotted([col-span-8="8"]) { --mdw-grid__column-count__8: 8; }
173
+ ::slotted([col-span-12="1"]) { --mdw-grid__column-count__12: 1; }
174
+ ::slotted([col-span-12="2"]) { --mdw-grid__column-count__12: 2; }
175
+ ::slotted([col-span-12="3"]) { --mdw-grid__column-count__12: 3; }
176
+ ::slotted([col-span-12="4"]) { --mdw-grid__column-count__12: 4; }
177
+ ::slotted([col-span-12="5"]) { --mdw-grid__column-count__12: 5; }
178
+ ::slotted([col-span-12="6"]) { --mdw-grid__column-count__12: 6; }
179
+ ::slotted([col-span-12="7"]) { --mdw-grid__column-count__12: 7; }
180
+ ::slotted([col-span-12="8"]) { --mdw-grid__column-count__12: 8; }
181
+ ::slotted([col-span-12="9"]) { --mdw-grid__column-count__12: 9; }
182
+ ::slotted([col-span-12="10"]) { --mdw-grid__column-count__12: 10; }
183
+ ::slotted([col-span-12="11"]) { --mdw-grid__column-count__12: 11; }
184
+ ::slotted([col-span-12="12"]) { --mdw-grid__column-count__12: 12; }
185
+
186
+ `
187
+ .autoRegister('mdw-grid');
@@ -1,32 +1,13 @@
1
- import ThemableMixin from '../mixins/ThemableMixin.js';
1
+ import Display from './Display.js';
2
2
 
3
- import Box from './Box.js';
4
-
5
- export default Box
3
+ /**
4
+ * Material Design Type scale: Headline.
5
+ * @see https://m3.material.io/styles/typography/type-scale-tokens
6
+ */
7
+ export default Display
6
8
  .extend()
7
- .mixin(ThemableMixin)
8
- .observe({
9
- ariaLevel: 'string',
10
- size: {
11
- type: 'string',
12
- /** @type {'large'|'medium'|'small'} */
13
- empty: 'large',
14
- },
15
- })
16
- .expressions({
17
- computeAriaLevel({ ariaLevel, size }) {
18
- if (ariaLevel) return ariaLevel;
19
- if (size === 'medium') return '2';
20
- if (size === 'small') return '3';
21
- return '1';
22
- },
23
- })
24
- .on({
25
- composed() {
26
- const { slot } = this.refs;
27
- slot.setAttribute('role', 'heading');
28
- slot.setAttribute('aria-level', '{computeAriaLevel}');
29
- },
9
+ .set({
10
+ _baseAriaLevel: 4,
30
11
  })
31
12
  .css`
32
13
  :host {
@@ -42,6 +23,6 @@ export default Box
42
23
  :host([size="small"]) {
43
24
  font: var(--mdw-typescale__headline-small__font);
44
25
  letter-spacing: var(--mdw-typescale__headline-small__letter-spacing);
45
- }
26
+ }
46
27
  `
47
28
  .autoRegister('mdw-headline');
@@ -1,11 +1,6 @@
1
- // import fontStyles from 'https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:FILL@0..1&display=block' assert { type: 'css'};
2
-
3
1
  import CustomElement from '../core/CustomElement.js';
4
2
  import ThemableMixin from '../mixins/ThemableMixin.js';
5
-
6
- /** @type {Map<string, {path:string, viewBox:string}>} */
7
- const svgAliasMap = new Map();
8
- const unaliased = new Set();
3
+ import { svgAliasMap, unaliased } from '../services/svgAlias.js';
9
4
 
10
5
  const documentLoadedStyleSheets = new Set();
11
6
 
@@ -13,8 +8,13 @@ const documentLoadedStyleSheets = new Set();
13
8
 
14
9
  // https://html.spec.whatwg.org/multipage/embedded-content.html#htmlimageelement
15
10
 
16
- /** @implements {Omit<HTMLImageElement,DeprecatedHTMLImageElementProperties>} */
17
- export default class Icon extends CustomElement
11
+ /**
12
+ * Material system icons represent actions, objects, and concepts; prefer
13
+ * the Material icon system (SVG or Material Symbols) for consistent visual language.
14
+ * implements {Omit<HTMLImageElement,DeprecatedHTMLImageElementProperties>}
15
+ * @see https://m3.material.io/styles/icons
16
+ */
17
+ export default CustomElement
18
18
  .extend()
19
19
  .mixin(ThemableMixin)
20
20
  .define({
@@ -30,39 +30,71 @@ export default class Icon extends CustomElement
30
30
  decode() { return this._img.decode; },
31
31
  })
32
32
  .observe({
33
- _slottedText: 'string',
33
+ /** Icon name used with SVG aliases or font glyphs. */
34
+ icon: 'string',
35
+ /** Whether the icon is disabled; affects image appearance. */
34
36
  disabled: 'boolean',
37
+ /** Alternative text for image-backed icons. */
35
38
  alt: 'string',
39
+ /** Image source URL for an icon. */
36
40
  src: 'string',
41
+ /** URL to an external SVG resource. */
37
42
  svg: 'string',
43
+ /** Inline SVG path data to render as the icon. */
38
44
  svgPath: 'string',
45
+ /** Image `srcset` attribute for responsive icon images. */
39
46
  srcset: 'string',
47
+ /** Image `sizes` attribute for responsive icon images. */
40
48
  sizes: 'string',
49
+ /** Variation suffix used when resolving icon aliases (e.g., 'filled'). */
50
+ variation: 'string',
51
+ /** `crossorigin` attribute for image requests. */
41
52
  crossOrigin: { attr: 'crossorigin' },
53
+ /** `usemap` attribute for image maps. */
42
54
  useMap: { attr: 'usemap' },
55
+ /** `ismap` boolean attribute for image maps. */
43
56
  isMap: { type: 'boolean', attr: 'ismap' },
57
+ /** `referrerpolicy` attribute for image requests. */
44
58
  referrerPolicy: { attr: 'referrerpolicy' },
59
+ /** Preferred image decoding mode: 'async' | 'sync' | 'auto'. */
45
60
  decoding: { value: /** @type {'async'|'sync'|'auto'} */ (null) },
61
+ /** Image loading hint: 'eager' | 'lazy'. */
46
62
  loading: { value: /** @type {'eager'|'lazy'} */ (null) },
63
+ /** Rendered width in CSS pixels. */
47
64
  width: 'integer',
65
+ /** Rendered height in CSS pixels. */
48
66
  height: 'integer',
67
+ /** Force using font glyphs instead of SVG when true. */
49
68
  forceFont: 'boolean',
50
69
  _linkLoaded: 'boolean',
70
+ /** viewBox used for SVG rendering. */
51
71
  viewBox: 'string',
72
+ /** CSS class applied to font-based icons. */
52
73
  fontClass: { empty: 'material-symbols-outlined' },
74
+ /** URL to Material Symbols CSS when using font-based icons. */
53
75
  fontLibrary: { empty: 'https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:FILL@0..1&display=block' },
76
+ _isConnected: 'boolean',
54
77
  })
55
78
  .observe({
56
79
  _svgAlias: {
57
80
  type: 'object',
58
- get({ _slottedText }) {
59
- if (!_slottedText) return null;
60
- const result = svgAliasMap.get(_slottedText.trim().toLowerCase());
61
- if (!result) {
62
- unaliased.add(_slottedText);
63
- console.warn(`Icon: No SVG alias for ${JSON.stringify([...unaliased])}`);
81
+ get({ icon, variation }) {
82
+ if (!icon) return null;
83
+ const iconName = icon.trim().toLowerCase();
84
+ const suffix = variation ? `#${variation}` : '';
85
+
86
+ const aliasName = `${iconName}${suffix}`;
87
+ if (svgAliasMap.has(aliasName)) {
88
+ return svgAliasMap.get(aliasName);
89
+ }
90
+ unaliased.add(aliasName);
91
+
92
+ // Fallback to base version
93
+ if (suffix && svgAliasMap.has(iconName)) {
94
+ return svgAliasMap.get(iconName);
64
95
  }
65
- return result;
96
+
97
+ return null;
66
98
  },
67
99
  },
68
100
  })
@@ -75,10 +107,10 @@ export default class Icon extends CustomElement
75
107
  },
76
108
  })
77
109
  .observe({
78
- _showSlot: {
110
+ _showFontIcon: {
79
111
  type: 'boolean',
80
- get({ _slottedText, svg, _computedSVGPath, src }) {
81
- return _slottedText && !svg && !_computedSVGPath && !src;
112
+ get({ icon, svg, _computedSVGPath, src }) {
113
+ return icon && !svg && !_computedSVGPath && !src;
82
114
  },
83
115
  },
84
116
  })
@@ -89,7 +121,7 @@ export default class Icon extends CustomElement
89
121
 
90
122
  })
91
123
  .html`
92
- <link mdw-if={_showSlot} id=link rel=stylesheet href={fontLibrary} />
124
+ <link mdw-if={_showFontIcon} id=link rel=stylesheet href={fontLibrary} />
93
125
  <svg mdw-if="{showSVG}" id="svg" viewBox="{_computedViewBox}">
94
126
  <use id="use" mdw-if="{svg}" href="{svg}" fill="currentColor"/>
95
127
  <path id="path" mdw-if="{_computedSVGPath}" d="{_computedSVGPath}"/>
@@ -101,13 +133,12 @@ export default class Icon extends CustomElement
101
133
  referrerpolicy={referrerPolicy} decoding={decoding} loading={loading}
102
134
  width={width} height={height}
103
135
  />
104
- <slot id=icon class={fontClass} hidden={!_showSlot} aria-hidden=true></slot>
136
+ <span id=icon class={fontClass} hidden={!_showFontIcon} aria-hidden=true>{icon}</span>
105
137
  `
106
138
  .css`
107
139
  /* https://material.io/design/iconography/system-icons.html */
108
140
 
109
141
  :host {
110
- display: inline-block;
111
142
  vertical-align: -11.5%;
112
143
 
113
144
  block-size: 1em;
@@ -116,20 +147,25 @@ export default class Icon extends CustomElement
116
147
  -webkit-user-select: none;
117
148
  user-select: none;
118
149
 
119
- font-variation-settings: 'FILL' 1;
150
+ line-height: 1;
151
+
152
+ font-variation-settings: 'FILL' 0;
120
153
 
121
154
  transition-duration: 200ms;
122
155
  /* stylelint-disable-next-line liberty/use-logical-spec -- Safari does not animate inline-size */
123
156
  transition-property: inline-size, width;
124
157
  }
125
158
 
159
+ :host([variation="fill"]) {
160
+ font-variation-settings: 'FILL' 1;
161
+ }
162
+
126
163
  :host(:is([color],[ink])) {
127
164
  color: rgb(var(--mdw-ink));
128
165
  }
129
166
 
130
167
  #icon {
131
168
  /* Clip bounds in case font is not ready */
132
- display: block;
133
169
  overflow: clip;
134
170
 
135
171
  block-size: 1em;
@@ -149,8 +185,6 @@ export default class Icon extends CustomElement
149
185
  }
150
186
 
151
187
  #svg {
152
- display: block;
153
-
154
188
  block-size: inherit;
155
189
  inline-size: inherit;
156
190
 
@@ -160,8 +194,6 @@ export default class Icon extends CustomElement
160
194
  }
161
195
 
162
196
  #img {
163
- display: block;
164
-
165
197
  block-size: inherit;
166
198
  inline-size: inherit;
167
199
 
@@ -183,11 +215,6 @@ export default class Icon extends CustomElement
183
215
 
184
216
  `
185
217
  .childEvents({
186
- icon: {
187
- slotchange() {
188
- this._slottedText = this.textContent;
189
- },
190
- },
191
218
  link: {
192
219
  /**
193
220
  * @param {{currentTarget: HTMLLinkElement}} event
@@ -199,52 +226,34 @@ export default class Icon extends CustomElement
199
226
  console.warn('Icon: parentNode is blank');
200
227
  }
201
228
  if (documentLoadedStyleSheets.has(href)) return;
202
- console.debug('Icon: Checking if link also in document', href);
229
+ // console.debug('Icon: Checking if link also in document', href);
203
230
  for (const link of document.head.getElementsByTagName('link')) {
204
231
  if (link.href === href) {
205
- console.debug(`Icon: Found ${href} in document.`);
232
+ // console.debug(`Icon: Found ${href} in document.`);
206
233
  documentLoadedStyleSheets.add(href);
207
234
  return;
208
235
  }
209
236
  }
210
- console.debug(`Icon: Adding ${href} to document.`);
237
+ // console.debug(`Icon: Adding ${href} to document.`);
211
238
  document.head.append(currentTarget.cloneNode());
212
239
  documentLoadedStyleSheets.add(href);
213
240
  },
214
241
  },
215
- }) {
216
- static get svgAliasMap() { return svgAliasMap; }
217
-
218
- static get svgUnaliased() { return unaliased; }
219
-
220
- /**
221
- * @param {string} name
222
- * @param {string} path
223
- * @param {string} [viewBox]
224
- */
225
- static addSVGAlias(name, path, viewBox = '0 0 24 24') {
226
- name = name.toLowerCase();
227
- if (path) {
228
- svgAliasMap.set(name, { path, viewBox });
229
- } else {
230
- svgAliasMap.delete(name);
231
- }
232
- }
233
-
234
- /**
235
- * @param {number} [width]
236
- * @param {number} [height]
237
- */
238
- constructor(width, height) {
239
- super();
240
-
241
- if (width != null) {
242
- this.width = width;
243
- }
244
- if (height != null) {
245
- this.height = height;
242
+ })
243
+ .extend((BaseClass) => class extends BaseClass {
244
+ /**
245
+ * @param {number} [width]
246
+ * @param {number} [height]
247
+ */
248
+ constructor(width, height) {
249
+ super();
250
+
251
+ if (width != null) {
252
+ this.width = width;
253
+ }
254
+ if (height != null) {
255
+ this.height = height;
256
+ }
246
257
  }
247
- }
248
- }
249
-
250
- Icon.autoRegister('mdw-icon');
258
+ })
259
+ .autoRegister('mdw-icon');