mtrl 0.9.6 → 0.10.0-next.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 (399) hide show
  1. package/README.md +20 -0
  2. package/dist/README.md +20 -0
  3. package/dist/components/badge/api.d.ts +14 -20
  4. package/dist/components/badge/api.js +4 -5
  5. package/dist/components/badge/config.d.ts +549 -17
  6. package/dist/components/badge/config.js +7 -0
  7. package/dist/components/badge/features.d.ts +9 -7
  8. package/dist/components/badge/features.js +13 -12
  9. package/dist/components/badge/types.d.ts +38 -0
  10. package/dist/components/bottom-app-bar/bottom-app-bar.js +8 -4
  11. package/dist/components/bottom-app-bar/constants.d.ts +2 -2
  12. package/dist/components/bottom-app-bar/constants.js +2 -2
  13. package/dist/components/bottom-app-bar/types.d.ts +4 -4
  14. package/dist/components/bottom-sheet/config.d.ts +531 -17
  15. package/dist/components/bottom-sheet/constants.d.ts +6 -6
  16. package/dist/components/bottom-sheet/constants.js +6 -6
  17. package/dist/components/bottom-sheet/features/structure.d.ts +3 -3
  18. package/dist/components/bottom-sheet/features/structure.js +4 -3
  19. package/dist/components/button/api.d.ts +3 -2
  20. package/dist/components/button/api.js +4 -3
  21. package/dist/components/button/button.d.ts +2 -2
  22. package/dist/components/button/config.d.ts +531 -17
  23. package/dist/components/button/constants.d.ts +2 -2
  24. package/dist/components/button/constants.js +2 -2
  25. package/dist/components/button/features/progress.js +28 -25
  26. package/dist/components/button/types.d.ts +50 -6
  27. package/dist/components/button-group/button-group.js +5 -5
  28. package/dist/components/button-group/config.d.ts +75 -28
  29. package/dist/components/button-group/config.js +1 -1
  30. package/dist/components/button-group/types.d.ts +24 -2
  31. package/dist/components/card/config.d.ts +532 -18
  32. package/dist/components/card/content.js +5 -4
  33. package/dist/components/card/features.js +10 -8
  34. package/dist/components/card/types.d.ts +10 -0
  35. package/dist/components/carousel/config.d.ts +531 -17
  36. package/dist/components/carousel/features/slides.js +2 -1
  37. package/dist/components/checkbox/checkbox.js +22 -0
  38. package/dist/components/checkbox/config.d.ts +534 -20
  39. package/dist/components/checkbox/config.js +11 -10
  40. package/dist/components/checkbox/constants.d.ts +3 -3
  41. package/dist/components/checkbox/constants.js +3 -3
  42. package/dist/components/checkbox/types.d.ts +29 -4
  43. package/dist/components/chips/api.d.ts +12 -3
  44. package/dist/components/chips/api.js +3 -1
  45. package/dist/components/chips/chip/api.js +3 -2
  46. package/dist/components/chips/chip/chip.js +6 -4
  47. package/dist/components/chips/chip/config.d.ts +534 -20
  48. package/dist/components/chips/config.d.ts +562 -53
  49. package/dist/components/chips/config.js +11 -9
  50. package/dist/components/chips/features/chip-items.d.ts +33 -2
  51. package/dist/components/chips/features/container.d.ts +68 -1
  52. package/dist/components/chips/features/container.js +1 -1
  53. package/dist/components/chips/features/controller.d.ts +53 -2
  54. package/dist/components/chips/features/controller.js +2 -6
  55. package/dist/components/chips/features/dom.js +2 -2
  56. package/dist/components/chips/features/label.d.ts +69 -1
  57. package/dist/components/chips/features/label.js +2 -2
  58. package/dist/components/chips/schema.d.ts +8 -6
  59. package/dist/components/chips/schema.js +2 -2
  60. package/dist/components/chips/types.d.ts +49 -0
  61. package/dist/components/datepicker/api.d.ts +8 -2
  62. package/dist/components/datepicker/api.js +1 -0
  63. package/dist/components/datepicker/config.d.ts +1610 -58
  64. package/dist/components/datepicker/datepicker.js +11 -7
  65. package/dist/components/datepicker/types.d.ts +14 -0
  66. package/dist/components/datepicker/utils.js +4 -6
  67. package/dist/components/dialog/api.d.ts +6 -1
  68. package/dist/components/dialog/api.js +1 -1
  69. package/dist/components/dialog/config.d.ts +549 -63
  70. package/dist/components/dialog/constants.d.ts +9 -9
  71. package/dist/components/dialog/constants.js +9 -9
  72. package/dist/components/dialog/features.d.ts +18 -8
  73. package/dist/components/dialog/features.js +49 -46
  74. package/dist/components/dialog/types.d.ts +77 -0
  75. package/dist/components/divider/features.d.ts +4 -4
  76. package/dist/components/divider/types.d.ts +31 -13
  77. package/dist/components/drawer/config.d.ts +533 -19
  78. package/dist/components/drawer/drawer.d.ts +2 -2
  79. package/dist/components/drawer/features/items.js +3 -2
  80. package/dist/components/extended-fab/config.d.ts +531 -17
  81. package/dist/components/extended-fab/constants.d.ts +2 -2
  82. package/dist/components/extended-fab/constants.js +2 -2
  83. package/dist/components/fab/config.d.ts +533 -19
  84. package/dist/components/fab/config.js +7 -6
  85. package/dist/components/fab/constants.d.ts +1 -1
  86. package/dist/components/fab/constants.js +1 -1
  87. package/dist/components/fab/fab.d.ts +1 -1
  88. package/dist/components/fab/fab.js +1 -1
  89. package/dist/components/fab/types.d.ts +6 -1
  90. package/dist/components/icon-button/config.d.ts +534 -20
  91. package/dist/components/icon-button/config.js +8 -7
  92. package/dist/components/icon-button/icon-button.d.ts +1 -1
  93. package/dist/components/icon-button/icon-button.js +1 -1
  94. package/dist/components/icon-button/types.d.ts +6 -1
  95. package/dist/components/index.d.ts +0 -2
  96. package/dist/components/index.js +0 -2
  97. package/dist/components/list/api.d.ts +865 -13
  98. package/dist/components/list/api.js +18 -18
  99. package/dist/components/list/config.d.ts +589 -42
  100. package/dist/components/list/config.js +3 -2
  101. package/dist/components/list/features/renderer.d.ts +4 -1
  102. package/dist/components/list/features/renderer.js +7 -11
  103. package/dist/components/list/features/selection.d.ts +2 -1
  104. package/dist/components/list/features/selection.js +42 -32
  105. package/dist/components/list/list.d.ts +4 -22
  106. package/dist/components/list/list.js +0 -1
  107. package/dist/components/list/types.d.ts +103 -0
  108. package/dist/components/loading-indicator/config.d.ts +531 -17
  109. package/dist/components/menu/api.d.ts +6 -2
  110. package/dist/components/menu/config.d.ts +535 -47
  111. package/dist/components/menu/config.js +9 -11
  112. package/dist/components/menu/features/controller.d.ts +4 -2
  113. package/dist/components/menu/features/controller.js +30 -49
  114. package/dist/components/menu/features/keyboard.d.ts +3 -19
  115. package/dist/components/menu/features/keyboard.js +17 -15
  116. package/dist/components/menu/features/opener.d.ts +8 -2
  117. package/dist/components/menu/features/opener.js +16 -15
  118. package/dist/components/menu/features/position.d.ts +3 -3
  119. package/dist/components/menu/features/position.js +1 -1
  120. package/dist/components/menu/features/submenu.d.ts +20 -2
  121. package/dist/components/menu/features/submenu.js +11 -12
  122. package/dist/components/menu/features/tasks.d.ts +1 -1
  123. package/dist/components/menu/types.d.ts +132 -1
  124. package/dist/components/navigation-rail/navigation-rail.js +5 -3
  125. package/dist/components/navigation-rail/types.d.ts +10 -0
  126. package/dist/components/progress/api.js +3 -2
  127. package/dist/components/progress/config.d.ts +567 -29
  128. package/dist/components/progress/config.js +9 -15
  129. package/dist/components/progress/features/canvas.js +1 -3
  130. package/dist/components/progress/features/state.d.ts +2 -3
  131. package/dist/components/progress/features/state.js +2 -1
  132. package/dist/components/radios/config.d.ts +537 -21
  133. package/dist/components/radios/radio.d.ts +19 -2
  134. package/dist/components/radios/radio.js +18 -13
  135. package/dist/components/search/config.d.ts +548 -34
  136. package/dist/components/search/features/input.d.ts +85 -2
  137. package/dist/components/search/features/states.d.ts +99 -2
  138. package/dist/components/search/features/states.js +3 -3
  139. package/dist/components/search/features/structure.d.ts +10 -2
  140. package/dist/components/search/features/structure.js +3 -0
  141. package/dist/components/search/features/suggestions.d.ts +53 -1
  142. package/dist/components/search/features/suggestions.js +2 -2
  143. package/dist/components/search/types.d.ts +6 -0
  144. package/dist/components/segmented-button/config.d.ts +9 -6
  145. package/dist/components/segmented-button/config.js +1 -1
  146. package/dist/components/segmented-button/segment.d.ts +2 -5
  147. package/dist/components/segmented-button/segment.js +8 -4
  148. package/dist/components/segmented-button/segmented-button.js +20 -7
  149. package/dist/components/select/features.js +55 -31
  150. package/dist/components/select/types.d.ts +2 -2
  151. package/dist/components/side-sheet/config.d.ts +531 -17
  152. package/dist/components/side-sheet/constants.d.ts +8 -8
  153. package/dist/components/side-sheet/constants.js +8 -8
  154. package/dist/components/side-sheet/features/structure.d.ts +3 -3
  155. package/dist/components/side-sheet/features/structure.js +5 -4
  156. package/dist/components/slider/api.d.ts +10 -6
  157. package/dist/components/slider/config.d.ts +570 -56
  158. package/dist/components/slider/config.js +7 -6
  159. package/dist/components/slider/features/controller.d.ts +520 -2
  160. package/dist/components/slider/features/controller.js +16 -11
  161. package/dist/components/slider/features/dom.d.ts +1 -0
  162. package/dist/components/slider/features/dom.js +16 -5
  163. package/dist/components/slider/features/handlers.d.ts +11 -20
  164. package/dist/components/slider/features/handlers.js +28 -20
  165. package/dist/components/slider/features/range.d.ts +7 -1
  166. package/dist/components/slider/features/range.js +3 -3
  167. package/dist/components/slider/features/states.d.ts +71 -1
  168. package/dist/components/slider/features/states.js +8 -0
  169. package/dist/components/slider/features/tracks.d.ts +28 -2
  170. package/dist/components/slider/features/tracks.js +9 -9
  171. package/dist/components/slider/types.d.ts +142 -0
  172. package/dist/components/snackbar/config.d.ts +531 -17
  173. package/dist/components/snackbar/constants.d.ts +3 -3
  174. package/dist/components/snackbar/constants.js +3 -3
  175. package/dist/components/snackbar/index.d.ts +1 -1
  176. package/dist/components/snackbar/types.d.ts +27 -4
  177. package/dist/components/split-button/api.js +2 -2
  178. package/dist/components/split-button/config.d.ts +531 -17
  179. package/dist/components/switch/config.d.ts +534 -20
  180. package/dist/components/switch/config.js +7 -7
  181. package/dist/components/switch/constants.d.ts +8 -8
  182. package/dist/components/switch/constants.js +8 -8
  183. package/dist/components/switch/features.js +12 -12
  184. package/dist/components/switch/types.d.ts +20 -0
  185. package/dist/components/tabs/api.d.ts +6 -9
  186. package/dist/components/tabs/api.js +14 -3
  187. package/dist/components/tabs/config.d.ts +3 -18
  188. package/dist/components/tabs/config.js +1 -12
  189. package/dist/components/tabs/constants.d.ts +3 -3
  190. package/dist/components/tabs/constants.js +3 -3
  191. package/dist/components/tabs/features.d.ts +5 -2
  192. package/dist/components/tabs/features.js +5 -3
  193. package/dist/components/tabs/indicator.js +4 -4
  194. package/dist/components/tabs/scroll-indicators.js +14 -13
  195. package/dist/components/tabs/tab.d.ts +8 -0
  196. package/dist/components/tabs/tab.js +6 -5
  197. package/dist/components/tabs/types.d.ts +20 -6
  198. package/dist/components/tabs/utils.d.ts +31 -1
  199. package/dist/components/tabs/utils.js +46 -11
  200. package/dist/components/textfield/api.js +12 -4
  201. package/dist/components/textfield/config.d.ts +536 -20
  202. package/dist/components/textfield/config.js +3 -3
  203. package/dist/components/textfield/constants.d.ts +5 -5
  204. package/dist/components/textfield/constants.js +5 -5
  205. package/dist/components/textfield/features/density.d.ts +1 -1
  206. package/dist/components/textfield/features/leading-icon.d.ts +16 -2
  207. package/dist/components/textfield/features/leading-icon.js +32 -33
  208. package/dist/components/textfield/features/placement.js +3 -3
  209. package/dist/components/textfield/features/prefix-text.d.ts +16 -2
  210. package/dist/components/textfield/features/prefix-text.js +30 -18
  211. package/dist/components/textfield/features/suffix-text.d.ts +16 -2
  212. package/dist/components/textfield/features/suffix-text.js +30 -14
  213. package/dist/components/textfield/features/supporting-text.js +2 -2
  214. package/dist/components/textfield/features/trailing-icon.d.ts +16 -2
  215. package/dist/components/textfield/features/trailing-icon.js +36 -19
  216. package/dist/components/textfield/types.d.ts +10 -0
  217. package/dist/components/timepicker/api.d.ts +2 -2
  218. package/dist/components/timepicker/api.js +19 -12
  219. package/dist/components/timepicker/clockdial.js +7 -8
  220. package/dist/components/timepicker/config.d.ts +1602 -60
  221. package/dist/components/timepicker/render.d.ts +2 -2
  222. package/dist/components/timepicker/render.js +65 -47
  223. package/dist/components/timepicker/timepicker.js +4 -2
  224. package/dist/components/timepicker/types.d.ts +18 -0
  225. package/dist/components/timepicker/utils.d.ts +14 -0
  226. package/dist/components/timepicker/utils.js +4 -0
  227. package/dist/components/tooltip/api.js +8 -2
  228. package/dist/components/tooltip/config.d.ts +534 -19
  229. package/dist/components/tooltip/constants.d.ts +1 -1
  230. package/dist/components/tooltip/constants.js +1 -1
  231. package/dist/components/tooltip/tooltip.d.ts +2 -2
  232. package/dist/components/top-app-bar/constants.d.ts +6 -6
  233. package/dist/components/top-app-bar/constants.js +6 -6
  234. package/dist/components/top-app-bar/top-app-bar.js +14 -9
  235. package/dist/components/top-app-bar/types.d.ts +5 -5
  236. package/dist/core/compose/component.d.ts +6 -4
  237. package/dist/core/compose/component.js +2 -2
  238. package/dist/core/compose/features/events.d.ts +3 -3
  239. package/dist/core/compose/features/icon.js +4 -3
  240. package/dist/core/compose/features/input.d.ts +18 -5
  241. package/dist/core/compose/features/input.js +2 -1
  242. package/dist/core/compose/features/lifecycle.js +10 -11
  243. package/dist/core/compose/features/text.js +1 -1
  244. package/dist/core/compose/features/textinput.d.ts +22 -8
  245. package/dist/core/compose/features/textinput.js +2 -1
  246. package/dist/core/compose/features/textlabel.js +1 -1
  247. package/dist/core/compose/features/track.js +5 -4
  248. package/dist/core/compose/features/withEvents.d.ts +2 -2
  249. package/dist/core/compose/features/withEvents.js +8 -2
  250. package/dist/core/config/component.d.ts +547 -43
  251. package/dist/core/config/component.js +4 -12
  252. package/dist/core/config/global.d.ts +0 -22
  253. package/dist/core/config.d.ts +0 -33
  254. package/dist/core/config.js +1 -58
  255. package/dist/core/dom/attributes.js +9 -3
  256. package/dist/core/dom/classes.js +8 -26
  257. package/dist/core/dom/create.d.ts +11 -1
  258. package/dist/core/dom/create.js +8 -11
  259. package/dist/core/dom/form-value.d.ts +24 -0
  260. package/dist/core/dom/form-value.js +14 -0
  261. package/dist/core/dom/html.d.ts +34 -0
  262. package/dist/core/dom/html.js +13 -0
  263. package/dist/core/dom/index.d.ts +2 -0
  264. package/dist/core/dom/index.js +1 -0
  265. package/dist/core/dom/utils.js +3 -2
  266. package/dist/core/index.d.ts +1 -5
  267. package/dist/core/index.js +1 -3
  268. package/dist/core/state/emitter.js +8 -1
  269. package/dist/core/state/index.d.ts +1 -5
  270. package/dist/core/state/index.js +0 -2
  271. package/dist/core/state/store.d.ts +10 -2
  272. package/dist/core/state/store.js +2 -1
  273. package/dist/core/utils/attributes.d.ts +29 -0
  274. package/dist/core/utils/attributes.js +11 -0
  275. package/dist/core/utils/warn.d.ts +8 -0
  276. package/dist/core/utils/warn.js +15 -0
  277. package/dist/index.cjs +0 -0
  278. package/dist/package.json +5 -2
  279. package/dist/styles/badge.css +2 -2
  280. package/dist/styles/base.css +2 -2
  281. package/dist/styles/bottom-app-bar.css +2 -2
  282. package/dist/styles/bottom-sheet.css +2 -2
  283. package/dist/styles/button-group.css +2 -2
  284. package/dist/styles/button.css +2 -2
  285. package/dist/styles/card.css +2 -2
  286. package/dist/styles/carousel.css +2 -2
  287. package/dist/styles/checkbox.css +2 -2
  288. package/dist/styles/chips.css +2 -2
  289. package/dist/styles/dialog.css +2 -2
  290. package/dist/styles/divider.css +2 -2
  291. package/dist/styles/drawer.css +2 -2
  292. package/dist/styles/extended-fab.css +2 -2
  293. package/dist/styles/fab.css +2 -2
  294. package/dist/styles/icon-button.css +2 -2
  295. package/dist/styles/list.css +2 -2
  296. package/dist/styles/loading-indicator.css +2 -2
  297. package/dist/styles/menu.css +2 -2
  298. package/dist/styles/navigation-rail.css +2 -2
  299. package/dist/styles/progress.css +2 -2
  300. package/dist/styles/radios.css +2 -2
  301. package/dist/styles/search.css +2 -2
  302. package/dist/styles/segmented-button.css +2 -2
  303. package/dist/styles/select.css +2 -2
  304. package/dist/styles/side-sheet.css +2 -2
  305. package/dist/styles/slider.css +2 -2
  306. package/dist/styles/snackbar.css +2 -2
  307. package/dist/styles/split-button.css +2 -2
  308. package/dist/styles/switch.css +2 -2
  309. package/dist/styles/tabs.css +2 -2
  310. package/dist/styles/textfield.css +2 -2
  311. package/dist/styles/timepicker.css +2 -2
  312. package/dist/styles/tooltip.css +2 -2
  313. package/dist/styles/top-app-bar.css +2 -2
  314. package/dist/styles/utilities.css +2 -2
  315. package/dist/styles.css +2 -2
  316. package/dist/themes/autumn.css +1 -1
  317. package/dist/themes/baseline.css +1 -1
  318. package/dist/themes/brownbeige.css +1 -1
  319. package/dist/themes/browngreen.css +1 -1
  320. package/dist/themes/desert.css +1 -1
  321. package/dist/themes/forest.css +1 -1
  322. package/dist/themes/highcontrast.css +1 -1
  323. package/dist/themes/legacy.css +1 -1
  324. package/dist/themes/material.css +1 -1
  325. package/dist/themes/ocean.css +1 -1
  326. package/dist/themes/sageivory.css +1 -1
  327. package/dist/themes/spring.css +1 -1
  328. package/dist/themes/summer.css +1 -1
  329. package/dist/themes/sunset.css +1 -1
  330. package/dist/themes/tealcaramel.css +1 -1
  331. package/dist/themes/winter.css +1 -1
  332. package/package.json +11 -3
  333. package/src/styles/base/_reset.scss +9 -2
  334. package/src/styles/components/_badge.scss +1 -1
  335. package/src/styles/components/_bottom-app-bar.scss +5 -5
  336. package/src/styles/components/_bottom-sheet.scss +17 -17
  337. package/src/styles/components/_button-group.scss +2 -2
  338. package/src/styles/components/_button.scss +13 -24
  339. package/src/styles/components/_checkbox.scss +25 -25
  340. package/src/styles/components/_chips.scss +5 -5
  341. package/src/styles/components/_dialog.scss +36 -36
  342. package/src/styles/components/_extended-fab.scss +7 -7
  343. package/src/styles/components/_fab.scss +4 -4
  344. package/src/styles/components/_icon-button.scss +5 -5
  345. package/src/styles/components/_menu.scss +25 -25
  346. package/src/styles/components/_progress.scss +1 -1
  347. package/src/styles/components/_radios.scss +18 -18
  348. package/src/styles/components/_segmented-button.scss +6 -6
  349. package/src/styles/components/_select.scss +22 -22
  350. package/src/styles/components/_side-sheet.scss +20 -20
  351. package/src/styles/components/_slider.scss +20 -20
  352. package/src/styles/components/_snackbar.scss +7 -7
  353. package/src/styles/components/_split-button.scss +1 -1
  354. package/src/styles/components/_switch.scss +36 -36
  355. package/src/styles/components/_tabs.scss +31 -20
  356. package/src/styles/components/_textfield.scss +153 -153
  357. package/src/styles/components/_timepicker.scss +24 -8
  358. package/src/styles/components/_top-app-bar.scss +20 -20
  359. package/src/styles/main.scss +0 -1
  360. package/dist/components/navigation/api.d.ts +0 -8
  361. package/dist/components/navigation/api.js +0 -117
  362. package/dist/components/navigation/config.d.ts +0 -45
  363. package/dist/components/navigation/config.js +0 -39
  364. package/dist/components/navigation/constants.d.ts +0 -137
  365. package/dist/components/navigation/constants.js +0 -65
  366. package/dist/components/navigation/features/controller.d.ts +0 -28
  367. package/dist/components/navigation/features/controller.js +0 -173
  368. package/dist/components/navigation/features/items.d.ts +0 -32
  369. package/dist/components/navigation/features/items.js +0 -236
  370. package/dist/components/navigation/index.d.ts +0 -3
  371. package/dist/components/navigation/index.js +0 -2
  372. package/dist/components/navigation/nav-item.d.ts +0 -30
  373. package/dist/components/navigation/nav-item.js +0 -118
  374. package/dist/components/navigation/navigation.d.ts +0 -8
  375. package/dist/components/navigation/navigation.js +0 -52
  376. package/dist/components/navigation/system/core.d.ts +0 -72
  377. package/dist/components/navigation/system/core.js +0 -148
  378. package/dist/components/navigation/system/events.d.ts +0 -35
  379. package/dist/components/navigation/system/events.js +0 -126
  380. package/dist/components/navigation/system/index.d.ts +0 -10
  381. package/dist/components/navigation/system/index.js +0 -92
  382. package/dist/components/navigation/system/mobile.d.ts +0 -52
  383. package/dist/components/navigation/system/mobile.js +0 -139
  384. package/dist/components/navigation/system/state.d.ts +0 -22
  385. package/dist/components/navigation/system/state.js +0 -44
  386. package/dist/components/navigation/system/types.d.ts +0 -337
  387. package/dist/components/navigation/types.d.ts +0 -225
  388. package/dist/components/navigation/types.js +0 -33
  389. package/dist/core/state/disabled.d.ts +0 -32
  390. package/dist/core/state/disabled.js +0 -26
  391. package/dist/core/state/lifecycle.d.ts +0 -56
  392. package/dist/core/state/lifecycle.js +0 -51
  393. package/dist/styles/navigation.css +0 -2
  394. package/dist/styles/navigation.d.ts +0 -1
  395. package/dist/styles/navigation.js +0 -2
  396. package/src/styles/components/_navigation-mobile.scss +0 -244
  397. package/src/styles/components/_navigation-system.scss +0 -153
  398. package/src/styles/components/_navigation.scss +0 -407
  399. /package/dist/{components/navigation/system/types.js → styles.d.ts} +0 -0
package/README.md CHANGED
@@ -167,6 +167,26 @@ const createNote = (config: NoteConfig): NoteComponent =>
167
167
 
168
168
  The element gets the `mtrl-note` class, `withEvents` adds `on`, `off` and `emit`, and `destroy()` removes the element. Add `withLifecycle()` from `mtrl/core/compose/features` when features need to register cleanup.
169
169
 
170
+ ## Markup and sanitizing
171
+
172
+ Icons and `content` options are markup strings, written with `innerHTML`. Every such write goes through one sink, so you can decide once how markup is treated. Set a policy when the strings can come from users or a CMS, or when your page enforces Trusted Types:
173
+
174
+ ```typescript
175
+ import { configureHTML } from 'mtrl';
176
+
177
+ // A sanitizer
178
+ configureHTML({ sanitize: (html) => DOMPurify.sanitize(html) });
179
+
180
+ // Trusted Types: under `require-trusted-types-for 'script'` a plain string
181
+ // assignment throws, so return a TrustedHTML from a policy your CSP allows
182
+ const policy = window.trustedTypes.createPolicy('mtrl', {
183
+ createHTML: (html) => DOMPurify.sanitize(html),
184
+ });
185
+ configureHTML({ sanitize: (html) => policy.createHTML(html) });
186
+ ```
187
+
188
+ The policy sees every string, the library's own icons included; a `TrustedHTML` value passed as an icon or content skips it. With no policy set, markup is written as it is. Text options (`text`, a card's `text`) never go through `innerHTML`.
189
+
170
190
  ## Upgrading from 0.7
171
191
 
172
192
  0.8.0 aligns the components with Material 3 expressive, and some of that changes the API or the styles:
package/dist/README.md CHANGED
@@ -167,6 +167,26 @@ const createNote = (config: NoteConfig): NoteComponent =>
167
167
 
168
168
  The element gets the `mtrl-note` class, `withEvents` adds `on`, `off` and `emit`, and `destroy()` removes the element. Add `withLifecycle()` from `mtrl/core/compose/features` when features need to register cleanup.
169
169
 
170
+ ## Markup and sanitizing
171
+
172
+ Icons and `content` options are markup strings, written with `innerHTML`. Every such write goes through one sink, so you can decide once how markup is treated. Set a policy when the strings can come from users or a CMS, or when your page enforces Trusted Types:
173
+
174
+ ```typescript
175
+ import { configureHTML } from 'mtrl';
176
+
177
+ // A sanitizer
178
+ configureHTML({ sanitize: (html) => DOMPurify.sanitize(html) });
179
+
180
+ // Trusted Types: under `require-trusted-types-for 'script'` a plain string
181
+ // assignment throws, so return a TrustedHTML from a policy your CSP allows
182
+ const policy = window.trustedTypes.createPolicy('mtrl', {
183
+ createHTML: (html) => DOMPurify.sanitize(html),
184
+ });
185
+ configureHTML({ sanitize: (html) => policy.createHTML(html) });
186
+ ```
187
+
188
+ The policy sees every string, the library's own icons included; a `TrustedHTML` value passed as an icon or content skips it. With no policy set, markup is written as it is. Text options (`text`, a card's `text`) never go through `innerHTML`.
189
+
170
190
  ## Upgrading from 0.7
171
191
 
172
192
  0.8.0 aligns the components with Material 3 expressive, and some of that changes the API or the styles:
@@ -1,37 +1,31 @@
1
- import { BadgeComponent } from "./types.js";
1
+ import { BadgeComponent, BadgeFeatureHost, BadgeVisibility } from "./types.js";
2
2
  /**
3
3
  * API configuration options for badge component
4
4
  * @category Components
5
5
  * @internal
6
6
  */
7
7
  interface ApiOptions {
8
- visibility: {
9
- show: () => void;
10
- hide: () => void;
11
- toggle: (visible?: boolean) => void;
12
- isVisible: () => boolean;
13
- };
8
+ visibility: BadgeVisibility;
14
9
  lifecycle: {
15
10
  destroy: () => void;
16
11
  };
17
12
  }
18
13
  /**
19
- * Component with required elements and methods for API enhancement
14
+ * What withAPI needs from the component it wraps: everything a badge feature
15
+ * needs, plus the events withEvents installs.
16
+ *
17
+ * This was a hand-written interface that described `config` as three optional
18
+ * properties. All-optional made it a weak type, so the real component -- whose
19
+ * config is the badge's own -- had "no properties in common" with it, and
20
+ * `addClass` was declared as returning the interface itself, which is the
21
+ * narrowing #120 removed from the source.
22
+ *
20
23
  * @category Components
21
24
  * @internal
22
25
  */
23
- interface ComponentWithElements {
24
- element: HTMLElement;
25
- wrapper?: HTMLElement;
26
- config: {
27
- max?: number;
28
- label?: string | number;
29
- variant?: string;
30
- };
31
- getClass: (name: string) => string;
32
- addClass: (...classes: string[]) => ComponentWithElements;
33
- on: (event: string, handler: Function) => ComponentWithElements;
34
- off: (event: string, handler: Function) => ComponentWithElements;
26
+ interface ComponentWithElements extends BadgeFeatureHost {
27
+ on(event: string, handler: Function): this;
28
+ off(event: string, handler: Function): this;
35
29
  }
36
30
  /**
37
31
  * Enhances a badge component with API methods.
@@ -1,3 +1,4 @@
1
+ import { isBadgeOverflow, isEmptyBadgeLabel } from "./config.js";
1
2
  import { formatBadgeLabel } from "./config.js";
2
3
  const VARIANT_SMALL = "small";
3
4
  const ALL_COLORS = [
@@ -25,12 +26,10 @@ export const withAPI = ({ visibility, lifecycle }) => (component) => {
25
26
  const formattedLabel = formatBadgeLabel(label, component.config.max);
26
27
  component.element.textContent = formattedLabel;
27
28
  component.element.classList.remove(`${component.getClass("badge")}--overflow`);
28
- if (typeof label === "number" &&
29
- component.config.max !== undefined &&
30
- label > component.config.max) {
29
+ if (isBadgeOverflow(label, component.config.max)) {
31
30
  component.element.classList.add(`${component.getClass("badge")}--overflow`);
32
31
  }
33
- if (formattedLabel === "" || formattedLabel === "0") {
32
+ if (isEmptyBadgeLabel(formattedLabel)) {
34
33
  badgeComponent.hide();
35
34
  }
36
35
  else {
@@ -109,7 +108,7 @@ export const withAPI = ({ visibility, lifecycle }) => (component) => {
109
108
  component.wrapper.removeChild(component.element);
110
109
  }
111
110
  const wrapper = document.createElement("div");
112
- wrapper.classList.add(component.getClass("badge-wrapper"));
111
+ wrapper.classList.add(component.getClass("badge__wrapper"));
113
112
  wrapper.style.position = "relative";
114
113
  const parent = target.parentNode;
115
114
  if (parent) {