mtrl 0.10.0-next.2 → 0.10.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 (930) hide show
  1. package/README.md +130 -88
  2. package/dist/README.md +130 -88
  3. package/dist/components/badge/features.js +1 -1
  4. package/dist/components/bottom-sheet/api.d.ts +4 -3
  5. package/dist/components/bottom-sheet/config.js +11 -4
  6. package/dist/components/bottom-sheet/constants.d.ts +0 -2
  7. package/dist/components/bottom-sheet/constants.js +0 -1
  8. package/dist/components/bottom-sheet/features/drag.d.ts +3 -0
  9. package/dist/components/bottom-sheet/features/drag.js +23 -0
  10. package/dist/components/bottom-sheet/features/state.js +58 -2
  11. package/dist/components/bottom-sheet/features/structure.js +9 -4
  12. package/dist/components/bottom-sheet/types.d.ts +15 -2
  13. package/dist/components/button/features/progress.js +5 -3
  14. package/dist/components/button-group/button-group.js +3 -1
  15. package/dist/components/button-group/config.d.ts +8 -8
  16. package/dist/components/button-group/config.js +3 -2
  17. package/dist/components/button-group/constants.d.ts +7 -2
  18. package/dist/components/button-group/constants.js +5 -5
  19. package/dist/components/button-group/types.d.ts +5 -0
  20. package/dist/components/card/api.d.ts +4 -0
  21. package/dist/components/card/api.js +8 -0
  22. package/dist/components/card/card.js +1 -2
  23. package/dist/components/card/config.js +2 -14
  24. package/dist/components/card/content.js +1 -6
  25. package/dist/components/card/features.d.ts +5 -19
  26. package/dist/components/card/features.js +1 -11
  27. package/dist/components/card/index.d.ts +1 -1
  28. package/dist/components/card/types.d.ts +34 -3
  29. package/dist/components/carousel/features/scroll.js +7 -3
  30. package/dist/components/checkbox/config.js +18 -6
  31. package/dist/components/chips/api.js +1 -1
  32. package/dist/components/chips/config.js +1 -1
  33. package/dist/components/chips/features/controller.js +14 -7
  34. package/dist/components/chips/index.d.ts +1 -1
  35. package/dist/components/chips/types.d.ts +24 -5
  36. package/dist/components/datepicker/datepicker.d.ts +8 -2
  37. package/dist/components/datepicker/datepicker.js +71 -30
  38. package/dist/components/datepicker/index.d.ts +1 -1
  39. package/dist/components/datepicker/types.d.ts +63 -30
  40. package/dist/components/datepicker/utils.d.ts +5 -0
  41. package/dist/components/datepicker/utils.js +2 -0
  42. package/dist/components/dialog/api.js +5 -0
  43. package/dist/components/dialog/config.js +8 -2
  44. package/dist/components/dialog/features.js +94 -26
  45. package/dist/components/dialog/types.d.ts +15 -2
  46. package/dist/components/divider/features.js +3 -2
  47. package/dist/components/drawer/config.js +9 -2
  48. package/dist/components/drawer/features/items.js +3 -1
  49. package/dist/components/drawer/features/state.js +50 -9
  50. package/dist/components/drawer/types.d.ts +18 -0
  51. package/dist/components/extended-fab/api.d.ts +2 -0
  52. package/dist/components/extended-fab/api.js +2 -0
  53. package/dist/components/extended-fab/types.d.ts +6 -2
  54. package/dist/components/fab-menu/config.d.ts +11 -0
  55. package/dist/components/fab-menu/config.js +15 -0
  56. package/dist/components/fab-menu/constants.d.ts +59 -0
  57. package/dist/components/fab-menu/constants.js +30 -0
  58. package/dist/components/fab-menu/fab-menu.d.ts +40 -0
  59. package/dist/components/fab-menu/fab-menu.js +315 -0
  60. package/dist/components/fab-menu/index.d.ts +6 -0
  61. package/dist/components/fab-menu/index.js +4 -0
  62. package/dist/components/fab-menu/stagger.d.ts +10 -0
  63. package/dist/components/fab-menu/stagger.js +24 -0
  64. package/dist/components/fab-menu/types.d.ts +110 -0
  65. package/dist/components/fab-menu/types.js +1 -0
  66. package/dist/components/icon-button/features/toggle.d.ts +1 -0
  67. package/dist/components/icon-button/features/toggle.js +1 -0
  68. package/dist/components/icon-button/icon-button.d.ts +2 -2
  69. package/dist/components/icon-button/index.d.ts +2 -2
  70. package/dist/components/icon-button/types.d.ts +9 -2
  71. package/dist/components/index.d.ts +4 -0
  72. package/dist/components/index.js +2 -0
  73. package/dist/components/list/api.d.ts +2 -2
  74. package/dist/components/list/features/renderer.js +2 -1
  75. package/dist/components/list/features/selection.js +1 -1
  76. package/dist/components/list/types.d.ts +5 -0
  77. package/dist/components/menu/config.js +6 -1
  78. package/dist/components/menu/features/controller.d.ts +2 -0
  79. package/dist/components/menu/features/controller.js +58 -41
  80. package/dist/components/menu/features/index.d.ts +1 -2
  81. package/dist/components/menu/features/index.js +1 -2
  82. package/dist/components/menu/features/keyboard.js +3 -2
  83. package/dist/components/menu/features/layer.d.ts +15 -0
  84. package/dist/components/menu/features/layer.js +16 -0
  85. package/dist/components/menu/features/loader.d.ts +35 -0
  86. package/dist/components/menu/features/loader.js +64 -0
  87. package/dist/components/menu/features/opener.js +2 -1
  88. package/dist/components/menu/features/position.js +40 -38
  89. package/dist/components/menu/features/submenu.js +12 -4
  90. package/dist/components/menu/menu.js +2 -2
  91. package/dist/components/menu/types.d.ts +22 -2
  92. package/dist/components/navigation-rail/navigation-rail.js +5 -4
  93. package/dist/components/navigation-rail/types.d.ts +2 -0
  94. package/dist/components/progress/api.d.ts +4 -0
  95. package/dist/components/progress/api.js +17 -10
  96. package/dist/components/progress/config.js +3 -11
  97. package/dist/components/progress/features/canvas.d.ts +1 -0
  98. package/dist/components/progress/features/canvas.js +1 -1
  99. package/dist/components/progress/features/circular.js +7 -1
  100. package/dist/components/progress/features/state.js +5 -3
  101. package/dist/components/progress/index.d.ts +1 -1
  102. package/dist/components/progress/types.d.ts +21 -12
  103. package/dist/components/radios/radio.js +1 -3
  104. package/dist/components/search/api.d.ts +10 -2
  105. package/dist/components/search/api.js +18 -10
  106. package/dist/components/search/config.d.ts +19 -3
  107. package/dist/components/search/config.js +11 -2
  108. package/dist/components/search/constants.d.ts +11 -0
  109. package/dist/components/search/constants.js +9 -0
  110. package/dist/components/search/features/input.js +12 -3
  111. package/dist/components/search/features/states.d.ts +4 -2
  112. package/dist/components/search/features/states.js +98 -16
  113. package/dist/components/search/features/structure.d.ts +7 -20
  114. package/dist/components/search/features/structure.js +79 -29
  115. package/dist/components/search/features/suggestions.d.ts +2 -1
  116. package/dist/components/search/features/suggestions.js +22 -6
  117. package/dist/components/search/index.d.ts +1 -1
  118. package/dist/components/search/types.d.ts +25 -2
  119. package/dist/components/segmented-button/config.d.ts +1 -1
  120. package/dist/components/segmented-button/segmented-button.js +1 -43
  121. package/dist/components/segmented-button/types.d.ts +3 -3
  122. package/dist/components/select/features.js +8 -18
  123. package/dist/components/select/types.d.ts +7 -0
  124. package/dist/components/side-sheet/api.d.ts +4 -3
  125. package/dist/components/side-sheet/config.js +11 -3
  126. package/dist/components/side-sheet/features/state.js +57 -2
  127. package/dist/components/side-sheet/features/structure.js +1 -1
  128. package/dist/components/side-sheet/types.d.ts +12 -0
  129. package/dist/components/slider/api.js +2 -2
  130. package/dist/components/slider/features/controller.d.ts +14 -14
  131. package/dist/components/slider/features/controller.js +2 -2
  132. package/dist/components/slider/features/handlers.js +2 -1
  133. package/dist/components/slider/features/tracks.d.ts +0 -9
  134. package/dist/components/slider/features/tracks.js +3 -1
  135. package/dist/components/slider/types.d.ts +2 -2
  136. package/dist/components/snackbar/api.js +28 -4
  137. package/dist/components/snackbar/config.d.ts +1 -0
  138. package/dist/components/snackbar/config.js +8 -1
  139. package/dist/components/snackbar/layer.d.ts +23 -0
  140. package/dist/components/snackbar/layer.js +85 -0
  141. package/dist/components/snackbar/types.d.ts +12 -0
  142. package/dist/components/split-button/api.js +2 -1
  143. package/dist/components/split-button/features/menu.js +1 -0
  144. package/dist/components/split-button/types.d.ts +8 -0
  145. package/dist/components/switch/api.js +7 -0
  146. package/dist/components/switch/features.d.ts +4 -0
  147. package/dist/components/switch/features.js +9 -2
  148. package/dist/components/switch/types.d.ts +6 -0
  149. package/dist/components/tabs/api.js +0 -9
  150. package/dist/components/tabs/types.d.ts +1 -1
  151. package/dist/components/textfield/api.d.ts +1 -0
  152. package/dist/components/textfield/api.js +4 -1
  153. package/dist/components/textfield/constants.d.ts +5 -1
  154. package/dist/components/textfield/features/counter.d.ts +29 -0
  155. package/dist/components/textfield/features/counter.js +54 -0
  156. package/dist/components/textfield/features/field.d.ts +37 -0
  157. package/dist/components/textfield/features/field.js +39 -0
  158. package/dist/components/textfield/features/index.d.ts +4 -0
  159. package/dist/components/textfield/features/index.js +2 -0
  160. package/dist/components/textfield/features/leading-icon.js +2 -1
  161. package/dist/components/textfield/features/placement.js +65 -60
  162. package/dist/components/textfield/features/prefix-text.js +2 -1
  163. package/dist/components/textfield/features/suffix-text.js +2 -1
  164. package/dist/components/textfield/features/supporting-text.js +16 -33
  165. package/dist/components/textfield/features/trailing-icon.js +2 -1
  166. package/dist/components/textfield/textfield.js +2 -2
  167. package/dist/components/textfield/types.d.ts +7 -0
  168. package/dist/components/timepicker/api.js +67 -20
  169. package/dist/components/timepicker/config.d.ts +3 -1085
  170. package/dist/components/timepicker/config.js +3 -35
  171. package/dist/components/timepicker/constants.d.ts +21 -11
  172. package/dist/components/timepicker/constants.js +4 -3
  173. package/dist/components/timepicker/dial.d.ts +8 -3
  174. package/dist/components/timepicker/dial.js +8 -2
  175. package/dist/components/timepicker/index.d.ts +2 -1
  176. package/dist/components/timepicker/render.js +91 -103
  177. package/dist/components/timepicker/timepicker.js +2 -2
  178. package/dist/components/timepicker/types.d.ts +61 -18
  179. package/dist/components/timepicker/utils.d.ts +20 -53
  180. package/dist/components/timepicker/utils.js +36 -86
  181. package/dist/components/toolbar/config.d.ts +19 -0
  182. package/dist/components/toolbar/config.js +46 -0
  183. package/dist/components/toolbar/constants.d.ts +66 -0
  184. package/dist/components/toolbar/constants.js +32 -0
  185. package/dist/components/toolbar/index.d.ts +6 -0
  186. package/dist/components/toolbar/index.js +4 -0
  187. package/dist/components/toolbar/toolbar.d.ts +29 -0
  188. package/dist/components/toolbar/toolbar.js +204 -0
  189. package/dist/components/toolbar/types.d.ts +152 -0
  190. package/dist/components/toolbar/types.js +1 -0
  191. package/dist/components/tooltip/api.js +34 -3
  192. package/dist/components/tooltip/config.js +8 -1
  193. package/dist/components/tooltip/types.d.ts +15 -2
  194. package/dist/core/compose/features/checkable.d.ts +3 -6
  195. package/dist/core/compose/features/checkable.js +4 -20
  196. package/dist/core/compose/features/disabled.js +14 -14
  197. package/dist/core/compose/features/events.d.ts +16 -4
  198. package/dist/core/compose/features/input.js +1 -4
  199. package/dist/core/compose/features/textinput.js +18 -18
  200. package/dist/core/compose/features/textlabel.js +6 -7
  201. package/dist/core/dom/focus.d.ts +36 -0
  202. package/dist/core/dom/focus.js +47 -0
  203. package/dist/core/dom/index.d.ts +5 -0
  204. package/dist/core/dom/index.js +3 -0
  205. package/dist/core/dom/layer.d.ts +66 -0
  206. package/dist/core/dom/layer.js +78 -0
  207. package/dist/core/dom/roving.d.ts +30 -0
  208. package/dist/core/dom/roving.js +75 -0
  209. package/dist/core/index.d.ts +2 -0
  210. package/dist/core/index.js +1 -0
  211. package/dist/core/state/emitter.d.ts +8 -2
  212. package/dist/core/state/events.d.ts +4 -3
  213. package/dist/core/theme/index.d.ts +7 -0
  214. package/dist/core/theme/index.js +2 -0
  215. package/dist/core/theme/shape.d.ts +9 -0
  216. package/dist/core/theme/shape.js +1 -0
  217. package/dist/core/theme/tokens.d.ts +45 -0
  218. package/dist/core/theme/tokens.js +36 -0
  219. package/dist/core/utils/theme.d.ts +7 -2
  220. package/dist/core/utils/theme.js +21 -23
  221. package/dist/core/utils/warn.d.ts +8 -0
  222. package/dist/core/utils/warn.js +5 -0
  223. package/dist/elements/adapter.d.ts +3 -0
  224. package/dist/elements/adapter.js +3 -0
  225. package/dist/elements/badge.d.ts +8 -0
  226. package/dist/elements/bottom-app-bar.d.ts +55 -0
  227. package/dist/elements/bottom-app-bar.js +43 -0
  228. package/dist/elements/bottom-sheet.d.ts +130 -0
  229. package/dist/elements/bottom-sheet.js +96 -0
  230. package/dist/elements/button-group.d.ts +162 -0
  231. package/dist/elements/button-group.js +174 -0
  232. package/dist/elements/button.d.ts +8 -0
  233. package/dist/elements/card.d.ts +77 -0
  234. package/dist/elements/card.js +113 -0
  235. package/dist/elements/carousel.d.ts +132 -0
  236. package/dist/elements/carousel.js +117 -0
  237. package/dist/elements/checkbox.d.ts +8 -0
  238. package/dist/elements/chips.d.ts +146 -0
  239. package/dist/elements/chips.js +212 -0
  240. package/dist/elements/css/badge.js +3 -2
  241. package/dist/elements/css/bottom-app-bar.d.ts +1 -0
  242. package/dist/elements/css/bottom-app-bar.js +4 -0
  243. package/dist/elements/css/bottom-sheet.d.ts +1 -0
  244. package/dist/elements/css/bottom-sheet.js +4 -0
  245. package/dist/elements/css/button-group.d.ts +1 -0
  246. package/dist/elements/css/button-group.js +6 -0
  247. package/dist/elements/css/button.js +3 -2
  248. package/dist/elements/css/card.d.ts +1 -0
  249. package/dist/elements/css/card.js +5 -0
  250. package/dist/elements/css/carousel.d.ts +1 -0
  251. package/dist/elements/css/carousel.js +4 -0
  252. package/dist/elements/css/checkbox.js +3 -2
  253. package/dist/elements/css/chips.d.ts +1 -0
  254. package/dist/elements/css/chips.js +4 -0
  255. package/dist/elements/css/datepicker.d.ts +1 -0
  256. package/dist/elements/css/datepicker.js +4 -0
  257. package/dist/elements/css/dialog.d.ts +1 -0
  258. package/dist/elements/css/dialog.js +6 -0
  259. package/dist/elements/css/divider.js +2 -1
  260. package/dist/elements/css/drawer.d.ts +1 -0
  261. package/dist/elements/css/drawer.js +4 -0
  262. package/dist/elements/css/extended-fab.js +3 -2
  263. package/dist/elements/css/fab-menu.d.ts +1 -0
  264. package/dist/elements/css/fab-menu.js +6 -0
  265. package/dist/elements/css/fab.js +3 -2
  266. package/dist/elements/css/icon-button.js +3 -2
  267. package/dist/elements/css/index.js +22 -0
  268. package/dist/elements/css/list.d.ts +1 -0
  269. package/dist/elements/css/list.js +4 -0
  270. package/dist/elements/css/loading-indicator.js +3 -2
  271. package/dist/elements/css/menu.d.ts +1 -0
  272. package/dist/elements/css/menu.js +4 -0
  273. package/dist/elements/css/navigation-rail.d.ts +1 -0
  274. package/dist/elements/css/navigation-rail.js +4 -0
  275. package/dist/elements/css/progress.js +3 -2
  276. package/dist/elements/css/radios.js +3 -2
  277. package/dist/elements/css/search.d.ts +1 -0
  278. package/dist/elements/css/search.js +4 -0
  279. package/dist/elements/css/select.d.ts +1 -0
  280. package/dist/elements/css/select.js +6 -0
  281. package/dist/elements/css/side-sheet.d.ts +1 -0
  282. package/dist/elements/css/side-sheet.js +4 -0
  283. package/dist/elements/css/slider.js +3 -2
  284. package/dist/elements/css/snackbar.d.ts +1 -0
  285. package/dist/elements/css/snackbar.js +6 -0
  286. package/dist/elements/css/split-button.d.ts +1 -0
  287. package/dist/elements/css/split-button.js +6 -0
  288. package/dist/elements/css/switch.js +3 -2
  289. package/dist/elements/css/tabs.js +3 -2
  290. package/dist/elements/css/textfield.js +3 -2
  291. package/dist/elements/css/timepicker.d.ts +1 -0
  292. package/dist/elements/css/timepicker.js +4 -0
  293. package/dist/elements/css/toolbar.d.ts +1 -0
  294. package/dist/elements/css/toolbar.js +6 -0
  295. package/dist/elements/css/tooltip.d.ts +1 -0
  296. package/dist/elements/css/tooltip.js +4 -0
  297. package/dist/elements/css/top-app-bar.d.ts +1 -0
  298. package/dist/elements/css/top-app-bar.js +4 -0
  299. package/dist/elements/datepicker.d.ts +163 -0
  300. package/dist/elements/datepicker.js +120 -0
  301. package/dist/elements/define.d.ts +37 -2
  302. package/dist/elements/define.js +105 -18
  303. package/dist/elements/dialog.d.ts +127 -0
  304. package/dist/elements/dialog.js +156 -0
  305. package/dist/elements/divider.d.ts +8 -0
  306. package/dist/elements/drawer.d.ts +147 -0
  307. package/dist/elements/drawer.js +136 -0
  308. package/dist/elements/extended-fab.d.ts +16 -0
  309. package/dist/elements/extended-fab.js +4 -0
  310. package/dist/elements/fab-menu.d.ts +112 -0
  311. package/dist/elements/fab-menu.js +68 -0
  312. package/dist/elements/fab.d.ts +8 -0
  313. package/dist/elements/icon-button.d.ts +17 -1
  314. package/dist/elements/icon-button.js +6 -4
  315. package/dist/elements/index.d.ts +327 -1
  316. package/dist/elements/index.js +98 -0
  317. package/dist/elements/list.d.ts +144 -0
  318. package/dist/elements/list.js +191 -0
  319. package/dist/elements/loading-indicator.d.ts +8 -0
  320. package/dist/elements/menu.d.ts +174 -0
  321. package/dist/elements/menu.js +178 -0
  322. package/dist/elements/navigation-rail.d.ts +164 -0
  323. package/dist/elements/navigation-rail.js +130 -0
  324. package/dist/elements/preupgrade.css +2 -0
  325. package/dist/elements/preupgrade.css.d.ts +1 -0
  326. package/dist/elements/preupgrade.d.ts +2 -0
  327. package/dist/elements/preupgrade.js +4 -0
  328. package/dist/elements/progress.d.ts +8 -0
  329. package/dist/elements/radios.d.ts +9 -0
  330. package/dist/elements/search.d.ts +225 -0
  331. package/dist/elements/search.js +215 -0
  332. package/dist/elements/select.d.ts +143 -0
  333. package/dist/elements/select.js +149 -0
  334. package/dist/elements/sheet.d.ts +44 -0
  335. package/dist/elements/sheet.js +60 -0
  336. package/dist/elements/side-sheet.d.ts +100 -0
  337. package/dist/elements/side-sheet.js +64 -0
  338. package/dist/elements/slider.d.ts +9 -0
  339. package/dist/elements/snackbar.d.ts +107 -0
  340. package/dist/elements/snackbar.js +54 -0
  341. package/dist/elements/split-button.d.ts +90 -0
  342. package/dist/elements/split-button.js +77 -0
  343. package/dist/elements/styles.d.ts +18 -0
  344. package/dist/elements/styles.js +41 -0
  345. package/dist/elements/switch.d.ts +10 -0
  346. package/dist/elements/switch.js +2 -2
  347. package/dist/elements/tabs.d.ts +9 -0
  348. package/dist/elements/textfield.d.ts +11 -1
  349. package/dist/elements/textfield.js +1 -6
  350. package/dist/elements/timepicker.d.ts +167 -0
  351. package/dist/elements/timepicker.js +159 -0
  352. package/dist/elements/toolbar.d.ts +103 -0
  353. package/dist/elements/toolbar.js +77 -0
  354. package/dist/elements/tooltip.d.ts +97 -0
  355. package/dist/elements/tooltip.js +132 -0
  356. package/dist/elements/top-app-bar.d.ts +72 -0
  357. package/dist/elements/top-app-bar.js +95 -0
  358. package/dist/index.cjs +0 -0
  359. package/dist/package.json +16 -2
  360. package/dist/react/badge.d.ts +4 -0
  361. package/dist/react/badge.js +7 -0
  362. package/dist/react/bottom-app-bar.d.ts +4 -0
  363. package/dist/react/bottom-app-bar.js +7 -0
  364. package/dist/react/bottom-sheet.d.ts +4 -0
  365. package/dist/react/bottom-sheet.js +7 -0
  366. package/dist/react/button-group-item.d.ts +3 -0
  367. package/dist/react/button-group-item.js +6 -0
  368. package/dist/react/button-group.d.ts +7 -0
  369. package/dist/react/button-group.js +10 -0
  370. package/dist/react/button.d.ts +5 -0
  371. package/dist/react/button.js +8 -0
  372. package/dist/react/card.d.ts +4 -0
  373. package/dist/react/card.js +7 -0
  374. package/dist/react/carousel-item.d.ts +3 -0
  375. package/dist/react/carousel-item.js +6 -0
  376. package/dist/react/carousel.d.ts +4 -0
  377. package/dist/react/carousel.js +7 -0
  378. package/dist/react/checkbox.d.ts +4 -0
  379. package/dist/react/checkbox.js +7 -0
  380. package/dist/react/chip.d.ts +3 -0
  381. package/dist/react/chip.js +6 -0
  382. package/dist/react/chips.d.ts +4 -0
  383. package/dist/react/chips.js +7 -0
  384. package/dist/react/create.d.ts +11 -2
  385. package/dist/react/create.js +12 -2
  386. package/dist/react/datepicker.d.ts +4 -0
  387. package/dist/react/datepicker.js +7 -0
  388. package/dist/react/dialog.d.ts +4 -0
  389. package/dist/react/dialog.js +7 -0
  390. package/dist/react/divider.d.ts +4 -0
  391. package/dist/react/divider.js +7 -0
  392. package/dist/react/drawer-item.d.ts +3 -0
  393. package/dist/react/drawer-item.js +6 -0
  394. package/dist/react/drawer.d.ts +4 -0
  395. package/dist/react/drawer.js +7 -0
  396. package/dist/react/extended-fab.d.ts +4 -0
  397. package/dist/react/extended-fab.js +7 -0
  398. package/dist/react/fab-menu-item.d.ts +3 -0
  399. package/dist/react/fab-menu-item.js +6 -0
  400. package/dist/react/fab-menu.d.ts +6 -0
  401. package/dist/react/fab-menu.js +9 -0
  402. package/dist/react/fab.d.ts +4 -0
  403. package/dist/react/fab.js +7 -0
  404. package/dist/react/icon-button.d.ts +4 -0
  405. package/dist/react/icon-button.js +7 -0
  406. package/dist/react/index.d.ts +48 -32
  407. package/dist/react/index.js +48 -32
  408. package/dist/react/jsx.d.ts +74 -0
  409. package/dist/react/jsx.js +2 -0
  410. package/dist/react/list-item.d.ts +3 -0
  411. package/dist/react/list-item.js +6 -0
  412. package/dist/react/list.d.ts +4 -0
  413. package/dist/react/list.js +7 -0
  414. package/dist/react/loading-indicator.d.ts +4 -0
  415. package/dist/react/loading-indicator.js +7 -0
  416. package/dist/react/menu-item.d.ts +3 -0
  417. package/dist/react/menu-item.js +6 -0
  418. package/dist/react/menu.d.ts +4 -0
  419. package/dist/react/menu.js +7 -0
  420. package/dist/react/navigation-rail-item.d.ts +3 -0
  421. package/dist/react/navigation-rail-item.js +6 -0
  422. package/dist/react/navigation-rail.d.ts +4 -0
  423. package/dist/react/navigation-rail.js +7 -0
  424. package/dist/react/progress.d.ts +4 -0
  425. package/dist/react/progress.js +7 -0
  426. package/dist/react/radio.d.ts +3 -0
  427. package/dist/react/radio.js +6 -0
  428. package/dist/react/radios.d.ts +4 -0
  429. package/dist/react/radios.js +7 -0
  430. package/dist/react/search-suggestion.d.ts +3 -0
  431. package/dist/react/search-suggestion.js +6 -0
  432. package/dist/react/search.d.ts +4 -0
  433. package/dist/react/search.js +7 -0
  434. package/dist/react/select-option.d.ts +3 -0
  435. package/dist/react/select-option.js +6 -0
  436. package/dist/react/select.d.ts +6 -0
  437. package/dist/react/select.js +9 -0
  438. package/dist/react/side-sheet.d.ts +4 -0
  439. package/dist/react/side-sheet.js +7 -0
  440. package/dist/react/slider.d.ts +4 -0
  441. package/dist/react/slider.js +7 -0
  442. package/dist/react/snackbar.d.ts +7 -0
  443. package/dist/react/snackbar.js +10 -0
  444. package/dist/react/split-button.d.ts +7 -0
  445. package/dist/react/split-button.js +10 -0
  446. package/dist/react/switch.d.ts +4 -0
  447. package/dist/react/switch.js +7 -0
  448. package/dist/react/tab.d.ts +3 -0
  449. package/dist/react/tab.js +6 -0
  450. package/dist/react/tabs.d.ts +7 -0
  451. package/dist/react/tabs.js +10 -0
  452. package/dist/react/textfield.d.ts +4 -0
  453. package/dist/react/textfield.js +7 -0
  454. package/dist/react/timepicker.d.ts +4 -0
  455. package/dist/react/timepicker.js +7 -0
  456. package/dist/react/toolbar.d.ts +5 -0
  457. package/dist/react/toolbar.js +8 -0
  458. package/dist/react/tooltip.d.ts +4 -0
  459. package/dist/react/tooltip.js +7 -0
  460. package/dist/react/top-app-bar.d.ts +4 -0
  461. package/dist/react/top-app-bar.js +7 -0
  462. package/dist/solid/badge.d.ts +4 -0
  463. package/dist/solid/badge.js +6 -0
  464. package/dist/solid/bottom-app-bar.d.ts +4 -0
  465. package/dist/solid/bottom-app-bar.js +6 -0
  466. package/dist/solid/bottom-sheet.d.ts +4 -0
  467. package/dist/solid/bottom-sheet.js +6 -0
  468. package/dist/solid/button-group-item.d.ts +3 -0
  469. package/dist/solid/button-group-item.js +5 -0
  470. package/dist/solid/button-group.d.ts +7 -0
  471. package/dist/solid/button-group.js +9 -0
  472. package/dist/solid/button.d.ts +5 -0
  473. package/dist/solid/button.js +7 -0
  474. package/dist/solid/card.d.ts +4 -0
  475. package/dist/solid/card.js +6 -0
  476. package/dist/solid/carousel-item.d.ts +3 -0
  477. package/dist/solid/carousel-item.js +5 -0
  478. package/dist/solid/carousel.d.ts +4 -0
  479. package/dist/solid/carousel.js +6 -0
  480. package/dist/solid/checkbox.d.ts +4 -0
  481. package/dist/solid/checkbox.js +6 -0
  482. package/dist/solid/chip.d.ts +3 -0
  483. package/dist/solid/chip.js +5 -0
  484. package/dist/solid/chips.d.ts +4 -0
  485. package/dist/solid/chips.js +6 -0
  486. package/dist/solid/create.d.ts +11 -2
  487. package/dist/solid/create.js +22 -4
  488. package/dist/solid/datepicker.d.ts +4 -0
  489. package/dist/solid/datepicker.js +6 -0
  490. package/dist/solid/dialog.d.ts +4 -0
  491. package/dist/solid/dialog.js +6 -0
  492. package/dist/solid/divider.d.ts +4 -0
  493. package/dist/solid/divider.js +6 -0
  494. package/dist/solid/drawer-item.d.ts +3 -0
  495. package/dist/solid/drawer-item.js +5 -0
  496. package/dist/solid/drawer.d.ts +4 -0
  497. package/dist/solid/drawer.js +6 -0
  498. package/dist/solid/extended-fab.d.ts +4 -0
  499. package/dist/solid/extended-fab.js +6 -0
  500. package/dist/solid/fab-menu-item.d.ts +3 -0
  501. package/dist/solid/fab-menu-item.js +5 -0
  502. package/dist/solid/fab-menu.d.ts +6 -0
  503. package/dist/solid/fab-menu.js +8 -0
  504. package/dist/solid/fab.d.ts +4 -0
  505. package/dist/solid/fab.js +6 -0
  506. package/dist/solid/icon-button.d.ts +4 -0
  507. package/dist/solid/icon-button.js +6 -0
  508. package/dist/solid/index.d.ts +48 -32
  509. package/dist/solid/index.js +48 -32
  510. package/dist/solid/jsx.d.ts +96 -0
  511. package/dist/solid/jsx.js +1 -0
  512. package/dist/solid/list-item.d.ts +3 -0
  513. package/dist/solid/list-item.js +5 -0
  514. package/dist/solid/list.d.ts +4 -0
  515. package/dist/solid/list.js +6 -0
  516. package/dist/solid/loading-indicator.d.ts +4 -0
  517. package/dist/solid/loading-indicator.js +6 -0
  518. package/dist/solid/menu-item.d.ts +3 -0
  519. package/dist/solid/menu-item.js +5 -0
  520. package/dist/solid/menu.d.ts +4 -0
  521. package/dist/solid/menu.js +6 -0
  522. package/dist/solid/navigation-rail-item.d.ts +3 -0
  523. package/dist/solid/navigation-rail-item.js +5 -0
  524. package/dist/solid/navigation-rail.d.ts +4 -0
  525. package/dist/solid/navigation-rail.js +6 -0
  526. package/dist/solid/progress.d.ts +4 -0
  527. package/dist/solid/progress.js +6 -0
  528. package/dist/solid/radio.d.ts +3 -0
  529. package/dist/solid/radio.js +5 -0
  530. package/dist/solid/radios.d.ts +4 -0
  531. package/dist/solid/radios.js +6 -0
  532. package/dist/solid/search-suggestion.d.ts +3 -0
  533. package/dist/solid/search-suggestion.js +5 -0
  534. package/dist/solid/search.d.ts +4 -0
  535. package/dist/solid/search.js +6 -0
  536. package/dist/solid/select-option.d.ts +3 -0
  537. package/dist/solid/select-option.js +5 -0
  538. package/dist/solid/select.d.ts +6 -0
  539. package/dist/solid/select.js +8 -0
  540. package/dist/solid/side-sheet.d.ts +4 -0
  541. package/dist/solid/side-sheet.js +6 -0
  542. package/dist/solid/slider.d.ts +4 -0
  543. package/dist/solid/slider.js +6 -0
  544. package/dist/solid/snackbar.d.ts +7 -0
  545. package/dist/solid/snackbar.js +9 -0
  546. package/dist/solid/split-button.d.ts +7 -0
  547. package/dist/solid/split-button.js +9 -0
  548. package/dist/solid/switch.d.ts +4 -0
  549. package/dist/solid/switch.js +6 -0
  550. package/dist/solid/tab.d.ts +3 -0
  551. package/dist/solid/tab.js +5 -0
  552. package/dist/solid/tabs.d.ts +7 -0
  553. package/dist/solid/tabs.js +9 -0
  554. package/dist/solid/textfield.d.ts +4 -0
  555. package/dist/solid/textfield.js +6 -0
  556. package/dist/solid/timepicker.d.ts +4 -0
  557. package/dist/solid/timepicker.js +6 -0
  558. package/dist/solid/toolbar.d.ts +5 -0
  559. package/dist/solid/toolbar.js +7 -0
  560. package/dist/solid/tooltip.d.ts +4 -0
  561. package/dist/solid/tooltip.js +6 -0
  562. package/dist/solid/top-app-bar.d.ts +4 -0
  563. package/dist/solid/top-app-bar.js +6 -0
  564. package/dist/styles/badge.css +2 -2
  565. package/dist/styles/base.css +2 -2
  566. package/dist/styles/bottom-app-bar.css +2 -2
  567. package/dist/styles/bottom-sheet.css +2 -2
  568. package/dist/styles/button-group.css +2 -2
  569. package/dist/styles/button.css +2 -2
  570. package/dist/styles/card.css +2 -2
  571. package/dist/styles/carousel.css +2 -2
  572. package/dist/styles/checkbox.css +2 -2
  573. package/dist/styles/chips.css +2 -2
  574. package/dist/styles/datepicker.css +2 -2
  575. package/dist/styles/dialog.css +2 -2
  576. package/dist/styles/divider.css +2 -2
  577. package/dist/styles/drawer.css +2 -2
  578. package/dist/styles/extended-fab.css +2 -2
  579. package/dist/styles/fab-menu.css +2 -0
  580. package/dist/styles/fab-menu.d.ts +1 -0
  581. package/dist/styles/fab-menu.js +3 -0
  582. package/dist/styles/fab.css +2 -2
  583. package/dist/styles/icon-button.css +2 -2
  584. package/dist/styles/list.css +2 -2
  585. package/dist/styles/loading-indicator.css +2 -2
  586. package/dist/styles/menu.css +2 -2
  587. package/dist/styles/navigation-rail.css +2 -2
  588. package/dist/styles/progress.css +2 -2
  589. package/dist/styles/radios.css +2 -2
  590. package/dist/styles/search.css +2 -2
  591. package/dist/styles/segmented-button.css +2 -2
  592. package/dist/styles/select.css +2 -2
  593. package/dist/styles/side-sheet.css +2 -2
  594. package/dist/styles/slider.css +2 -2
  595. package/dist/styles/snackbar.css +2 -2
  596. package/dist/styles/split-button.css +2 -2
  597. package/dist/styles/switch.css +2 -2
  598. package/dist/styles/tabs.css +2 -2
  599. package/dist/styles/textfield.css +2 -2
  600. package/dist/styles/timepicker.css +2 -2
  601. package/dist/styles/toolbar.css +2 -0
  602. package/dist/styles/toolbar.d.ts +1 -0
  603. package/dist/styles/toolbar.js +3 -0
  604. package/dist/styles/tooltip.css +2 -2
  605. package/dist/styles/top-app-bar.css +2 -2
  606. package/dist/styles/utilities.css +2 -2
  607. package/dist/styles.css +2 -2
  608. package/dist/svelte/Badge.svelte +7 -2
  609. package/dist/svelte/Badge.svelte.d.ts +2 -2
  610. package/dist/svelte/BottomAppBar.svelte +24 -0
  611. package/dist/svelte/BottomAppBar.svelte.d.ts +5 -0
  612. package/dist/svelte/BottomSheet.svelte +24 -0
  613. package/dist/svelte/BottomSheet.svelte.d.ts +5 -0
  614. package/dist/svelte/Button.svelte +8 -2
  615. package/dist/svelte/Button.svelte.d.ts +2 -2
  616. package/dist/svelte/ButtonGroup.svelte +28 -0
  617. package/dist/svelte/ButtonGroup.svelte.d.ts +5 -0
  618. package/dist/svelte/ButtonGroupItem.svelte +11 -0
  619. package/dist/svelte/ButtonGroupItem.svelte.d.ts +5 -0
  620. package/dist/svelte/Card.svelte +24 -0
  621. package/dist/svelte/Card.svelte.d.ts +5 -0
  622. package/dist/svelte/Carousel.svelte +25 -0
  623. package/dist/svelte/Carousel.svelte.d.ts +5 -0
  624. package/dist/svelte/CarouselItem.svelte +11 -0
  625. package/dist/svelte/CarouselItem.svelte.d.ts +5 -0
  626. package/dist/svelte/Checkbox.svelte +7 -2
  627. package/dist/svelte/Checkbox.svelte.d.ts +2 -2
  628. package/dist/svelte/Chip.svelte +11 -0
  629. package/dist/svelte/Chip.svelte.d.ts +5 -0
  630. package/dist/svelte/Chips.svelte +25 -0
  631. package/dist/svelte/Chips.svelte.d.ts +5 -0
  632. package/dist/svelte/Datepicker.svelte +25 -0
  633. package/dist/svelte/Datepicker.svelte.d.ts +5 -0
  634. package/dist/svelte/Dialog.svelte +24 -0
  635. package/dist/svelte/Dialog.svelte.d.ts +5 -0
  636. package/dist/svelte/Divider.svelte +7 -2
  637. package/dist/svelte/Divider.svelte.d.ts +2 -2
  638. package/dist/svelte/Drawer.svelte +25 -0
  639. package/dist/svelte/Drawer.svelte.d.ts +5 -0
  640. package/dist/svelte/DrawerItem.svelte +11 -0
  641. package/dist/svelte/DrawerItem.svelte.d.ts +5 -0
  642. package/dist/svelte/ExtendedFab.svelte +7 -2
  643. package/dist/svelte/ExtendedFab.svelte.d.ts +2 -2
  644. package/dist/svelte/Fab.svelte +7 -2
  645. package/dist/svelte/Fab.svelte.d.ts +2 -2
  646. package/dist/svelte/FabMenu.svelte +26 -0
  647. package/dist/svelte/FabMenu.svelte.d.ts +5 -0
  648. package/dist/svelte/FabMenuItem.svelte +11 -0
  649. package/dist/svelte/FabMenuItem.svelte.d.ts +5 -0
  650. package/dist/svelte/IconButton.svelte +7 -2
  651. package/dist/svelte/IconButton.svelte.d.ts +2 -2
  652. package/dist/svelte/List.svelte +26 -0
  653. package/dist/svelte/List.svelte.d.ts +5 -0
  654. package/dist/svelte/ListItem.svelte +11 -0
  655. package/dist/svelte/ListItem.svelte.d.ts +5 -0
  656. package/dist/svelte/LoadingIndicator.svelte +7 -2
  657. package/dist/svelte/LoadingIndicator.svelte.d.ts +2 -2
  658. package/dist/svelte/Menu.svelte +25 -0
  659. package/dist/svelte/Menu.svelte.d.ts +5 -0
  660. package/dist/svelte/MenuItem.svelte +11 -0
  661. package/dist/svelte/MenuItem.svelte.d.ts +5 -0
  662. package/dist/svelte/NavigationRail.svelte +25 -0
  663. package/dist/svelte/NavigationRail.svelte.d.ts +5 -0
  664. package/dist/svelte/NavigationRailItem.svelte +11 -0
  665. package/dist/svelte/NavigationRailItem.svelte.d.ts +5 -0
  666. package/dist/svelte/Progress.svelte +7 -2
  667. package/dist/svelte/Progress.svelte.d.ts +2 -2
  668. package/dist/svelte/Radio.svelte +1 -1
  669. package/dist/svelte/Radios.svelte +7 -2
  670. package/dist/svelte/Radios.svelte.d.ts +2 -2
  671. package/dist/svelte/Search.svelte +25 -0
  672. package/dist/svelte/Search.svelte.d.ts +5 -0
  673. package/dist/svelte/SearchSuggestion.svelte +11 -0
  674. package/dist/svelte/SearchSuggestion.svelte.d.ts +5 -0
  675. package/dist/svelte/Select.svelte +27 -0
  676. package/dist/svelte/Select.svelte.d.ts +5 -0
  677. package/dist/svelte/SelectOption.svelte +11 -0
  678. package/dist/svelte/SelectOption.svelte.d.ts +5 -0
  679. package/dist/svelte/SideSheet.svelte +24 -0
  680. package/dist/svelte/SideSheet.svelte.d.ts +5 -0
  681. package/dist/svelte/Slider.svelte +7 -2
  682. package/dist/svelte/Slider.svelte.d.ts +2 -2
  683. package/dist/svelte/Snackbar.svelte +28 -0
  684. package/dist/svelte/Snackbar.svelte.d.ts +5 -0
  685. package/dist/svelte/SplitButton.svelte +27 -0
  686. package/dist/svelte/SplitButton.svelte.d.ts +5 -0
  687. package/dist/svelte/Switch.svelte +7 -2
  688. package/dist/svelte/Switch.svelte.d.ts +2 -2
  689. package/dist/svelte/Tab.svelte +1 -1
  690. package/dist/svelte/Tabs.svelte +10 -2
  691. package/dist/svelte/Tabs.svelte.d.ts +2 -2
  692. package/dist/svelte/Textfield.svelte +7 -2
  693. package/dist/svelte/Textfield.svelte.d.ts +2 -2
  694. package/dist/svelte/Timepicker.svelte +25 -0
  695. package/dist/svelte/Timepicker.svelte.d.ts +5 -0
  696. package/dist/svelte/Toolbar.svelte +25 -0
  697. package/dist/svelte/Toolbar.svelte.d.ts +5 -0
  698. package/dist/svelte/Tooltip.svelte +25 -0
  699. package/dist/svelte/Tooltip.svelte.d.ts +5 -0
  700. package/dist/svelte/TopAppBar.svelte +24 -0
  701. package/dist/svelte/TopAppBar.svelte.d.ts +5 -0
  702. package/dist/svelte/index.d.ts +32 -0
  703. package/dist/svelte/index.js +32 -14
  704. package/dist/svelte/runtime.d.ts +12 -2
  705. package/dist/svelte/runtime.js +11 -2
  706. package/dist/themes/autumn.css +2 -2
  707. package/dist/themes/baseline.css +2 -2
  708. package/dist/themes/brownbeige.css +2 -2
  709. package/dist/themes/browngreen.css +2 -2
  710. package/dist/themes/content.css +2 -0
  711. package/dist/themes/desert.css +2 -2
  712. package/dist/themes/expressive.css +2 -0
  713. package/dist/themes/fidelity.css +2 -0
  714. package/dist/themes/forest.css +2 -2
  715. package/dist/themes/fruit-salad.css +2 -0
  716. package/dist/themes/highcontrast.css +2 -2
  717. package/dist/themes/legacy.css +2 -2
  718. package/dist/themes/material.css +2 -2
  719. package/dist/themes/monochrome.css +2 -0
  720. package/dist/themes/neutral.css +2 -0
  721. package/dist/themes/ocean.css +2 -2
  722. package/dist/themes/rainbow.css +2 -0
  723. package/dist/themes/sageivory.css +2 -2
  724. package/dist/themes/spring.css +2 -2
  725. package/dist/themes/summer.css +2 -2
  726. package/dist/themes/sunset.css +2 -2
  727. package/dist/themes/tealcaramel.css +2 -2
  728. package/dist/themes/vibrant.css +2 -0
  729. package/dist/themes/winter.css +2 -2
  730. package/dist/vue/badge.d.ts +4 -0
  731. package/dist/vue/badge.js +6 -0
  732. package/dist/vue/bottom-app-bar.d.ts +4 -0
  733. package/dist/vue/bottom-app-bar.js +6 -0
  734. package/dist/vue/bottom-sheet.d.ts +4 -0
  735. package/dist/vue/bottom-sheet.js +6 -0
  736. package/dist/vue/button-group-item.d.ts +3 -0
  737. package/dist/vue/button-group-item.js +5 -0
  738. package/dist/vue/button-group.d.ts +7 -0
  739. package/dist/vue/button-group.js +9 -0
  740. package/dist/vue/button.d.ts +5 -0
  741. package/dist/vue/button.js +7 -0
  742. package/dist/vue/card.d.ts +4 -0
  743. package/dist/vue/card.js +6 -0
  744. package/dist/vue/carousel-item.d.ts +3 -0
  745. package/dist/vue/carousel-item.js +5 -0
  746. package/dist/vue/carousel.d.ts +4 -0
  747. package/dist/vue/carousel.js +6 -0
  748. package/dist/vue/checkbox.d.ts +4 -0
  749. package/dist/vue/checkbox.js +6 -0
  750. package/dist/vue/chip.d.ts +3 -0
  751. package/dist/vue/chip.js +5 -0
  752. package/dist/vue/chips.d.ts +4 -0
  753. package/dist/vue/chips.js +6 -0
  754. package/dist/vue/create.d.ts +9 -3
  755. package/dist/vue/create.js +15 -2
  756. package/dist/vue/datepicker.d.ts +4 -0
  757. package/dist/vue/datepicker.js +6 -0
  758. package/dist/vue/dialog.d.ts +4 -0
  759. package/dist/vue/dialog.js +6 -0
  760. package/dist/vue/divider.d.ts +4 -0
  761. package/dist/vue/divider.js +6 -0
  762. package/dist/vue/drawer-item.d.ts +3 -0
  763. package/dist/vue/drawer-item.js +5 -0
  764. package/dist/vue/drawer.d.ts +4 -0
  765. package/dist/vue/drawer.js +6 -0
  766. package/dist/vue/extended-fab.d.ts +4 -0
  767. package/dist/vue/extended-fab.js +6 -0
  768. package/dist/vue/fab-menu-item.d.ts +3 -0
  769. package/dist/vue/fab-menu-item.js +5 -0
  770. package/dist/vue/fab-menu.d.ts +6 -0
  771. package/dist/vue/fab-menu.js +8 -0
  772. package/dist/vue/fab.d.ts +4 -0
  773. package/dist/vue/fab.js +6 -0
  774. package/dist/vue/icon-button.d.ts +4 -0
  775. package/dist/vue/icon-button.js +6 -0
  776. package/dist/vue/index.d.ts +49 -33
  777. package/dist/vue/index.js +48 -32
  778. package/dist/vue/list-item.d.ts +3 -0
  779. package/dist/vue/list-item.js +5 -0
  780. package/dist/vue/list.d.ts +4 -0
  781. package/dist/vue/list.js +6 -0
  782. package/dist/vue/loading-indicator.d.ts +4 -0
  783. package/dist/vue/loading-indicator.js +6 -0
  784. package/dist/vue/menu-item.d.ts +3 -0
  785. package/dist/vue/menu-item.js +5 -0
  786. package/dist/vue/menu.d.ts +4 -0
  787. package/dist/vue/menu.js +6 -0
  788. package/dist/vue/navigation-rail-item.d.ts +3 -0
  789. package/dist/vue/navigation-rail-item.js +5 -0
  790. package/dist/vue/navigation-rail.d.ts +4 -0
  791. package/dist/vue/navigation-rail.js +6 -0
  792. package/dist/vue/progress.d.ts +4 -0
  793. package/dist/vue/progress.js +6 -0
  794. package/dist/vue/radio.d.ts +3 -0
  795. package/dist/vue/radio.js +5 -0
  796. package/dist/vue/radios.d.ts +4 -0
  797. package/dist/vue/radios.js +6 -0
  798. package/dist/vue/search-suggestion.d.ts +3 -0
  799. package/dist/vue/search-suggestion.js +5 -0
  800. package/dist/vue/search.d.ts +4 -0
  801. package/dist/vue/search.js +6 -0
  802. package/dist/vue/select-option.d.ts +3 -0
  803. package/dist/vue/select-option.js +5 -0
  804. package/dist/vue/select.d.ts +6 -0
  805. package/dist/vue/select.js +8 -0
  806. package/dist/vue/side-sheet.d.ts +4 -0
  807. package/dist/vue/side-sheet.js +6 -0
  808. package/dist/vue/slider.d.ts +4 -0
  809. package/dist/vue/slider.js +6 -0
  810. package/dist/vue/snackbar.d.ts +7 -0
  811. package/dist/vue/snackbar.js +9 -0
  812. package/dist/vue/split-button.d.ts +7 -0
  813. package/dist/vue/split-button.js +9 -0
  814. package/dist/vue/switch.d.ts +4 -0
  815. package/dist/vue/switch.js +6 -0
  816. package/dist/vue/tab.d.ts +3 -0
  817. package/dist/vue/tab.js +5 -0
  818. package/dist/vue/tabs.d.ts +7 -0
  819. package/dist/vue/tabs.js +9 -0
  820. package/dist/vue/textfield.d.ts +4 -0
  821. package/dist/vue/textfield.js +6 -0
  822. package/dist/vue/timepicker.d.ts +4 -0
  823. package/dist/vue/timepicker.js +6 -0
  824. package/dist/vue/toolbar.d.ts +5 -0
  825. package/dist/vue/toolbar.js +7 -0
  826. package/dist/vue/tooltip.d.ts +4 -0
  827. package/dist/vue/tooltip.js +6 -0
  828. package/dist/vue/top-app-bar.d.ts +4 -0
  829. package/dist/vue/top-app-bar.js +6 -0
  830. package/package.json +119 -20
  831. package/src/styles/abstract/_functions.scss +13 -1
  832. package/src/styles/abstract/_mixins.scss +16 -1
  833. package/src/styles/abstract/_theme.scss +4 -88
  834. package/src/styles/abstract/_variables.scss +20 -1
  835. package/src/styles/base/_tokens.scss +2 -13
  836. package/src/styles/base/_typography.scss +14 -70
  837. package/src/styles/components/_badge.scss +2 -2
  838. package/src/styles/components/_bottom-app-bar.scss +0 -4
  839. package/src/styles/components/_bottom-sheet.scss +68 -8
  840. package/src/styles/components/_button-group.scss +5 -2
  841. package/src/styles/components/_button.scss +29 -43
  842. package/src/styles/components/_card.scss +0 -2
  843. package/src/styles/components/_carousel.scss +2 -1
  844. package/src/styles/components/_datepicker.scss +4 -0
  845. package/src/styles/components/_dialog.scss +52 -0
  846. package/src/styles/components/_divider.scss +1 -1
  847. package/src/styles/components/_drawer.scss +53 -11
  848. package/src/styles/components/_fab-menu.scss +228 -0
  849. package/src/styles/components/_icon-button.scss +18 -14
  850. package/src/styles/components/_list.scss +3 -2
  851. package/src/styles/components/_menu.scss +22 -2
  852. package/src/styles/components/_navigation-rail.scss +5 -4
  853. package/src/styles/components/_search.scss +279 -273
  854. package/src/styles/components/_select.scss +9 -89
  855. package/src/styles/components/_side-sheet.scss +48 -4
  856. package/src/styles/components/_slider.scss +2 -2
  857. package/src/styles/components/_snackbar.scss +12 -0
  858. package/src/styles/components/_split-button.scss +5 -5
  859. package/src/styles/components/_switch.scss +1 -1
  860. package/src/styles/components/_textfield.scss +144 -93
  861. package/src/styles/components/_timepicker.scss +116 -139
  862. package/src/styles/components/_toolbar.scss +203 -0
  863. package/src/styles/components/_tooltip.scss +31 -12
  864. package/src/styles/elements/_badge.scss +12 -0
  865. package/src/styles/elements/_bottom-app-bar.scss +27 -0
  866. package/src/styles/elements/_bottom-sheet.scss +6 -0
  867. package/src/styles/elements/_button-group.scss +25 -0
  868. package/src/styles/elements/_button.scss +78 -0
  869. package/src/styles/elements/_card.scss +57 -0
  870. package/src/styles/elements/_carousel.scss +12 -0
  871. package/src/styles/elements/_checkbox.scss +38 -0
  872. package/src/styles/elements/_chips.scss +33 -0
  873. package/src/styles/elements/_config.scss +48 -0
  874. package/src/styles/elements/_datepicker.scss +31 -0
  875. package/src/styles/elements/_dialog.scss +6 -0
  876. package/src/styles/elements/_divider.scss +19 -0
  877. package/src/styles/elements/_drawer.scss +23 -0
  878. package/src/styles/elements/_extended-fab.scss +57 -0
  879. package/src/styles/elements/_fab-menu.scss +43 -0
  880. package/src/styles/elements/_fab.scss +33 -0
  881. package/src/styles/elements/_field.scss +111 -0
  882. package/src/styles/elements/_icon-button.scss +55 -0
  883. package/src/styles/elements/_index.scss +41 -0
  884. package/src/styles/elements/_list.scss +34 -0
  885. package/src/styles/elements/_loading-indicator.scss +13 -0
  886. package/src/styles/elements/_menu.scss +6 -0
  887. package/src/styles/elements/_navigation-rail.scss +24 -0
  888. package/src/styles/elements/_progress.scss +24 -0
  889. package/src/styles/elements/_radios.scss +23 -0
  890. package/src/styles/elements/_search.scss +36 -0
  891. package/src/styles/elements/_select.scss +15 -0
  892. package/src/styles/elements/_side-sheet.scss +6 -0
  893. package/src/styles/elements/_slider.scss +10 -0
  894. package/src/styles/elements/_snackbar.scss +6 -0
  895. package/src/styles/elements/_split-button.scss +53 -0
  896. package/src/styles/elements/_switch.scss +51 -0
  897. package/src/styles/elements/_tabs.scss +22 -0
  898. package/src/styles/elements/_textfield.scss +9 -0
  899. package/src/styles/elements/_timepicker.scss +6 -0
  900. package/src/styles/elements/_toolbar.scss +47 -0
  901. package/src/styles/elements/_tooltip.scss +6 -0
  902. package/src/styles/elements/_top-app-bar.scss +57 -0
  903. package/src/styles/main.scss +2 -0
  904. package/src/styles/themes/_autumn.scss +18 -17
  905. package/src/styles/themes/_base-theme.scss +29 -39
  906. package/src/styles/themes/_baseline.scss +58 -83
  907. package/src/styles/themes/_brownbeige.scss +95 -123
  908. package/src/styles/themes/_browngreen.scss +1 -49
  909. package/src/styles/themes/_content.scss +108 -0
  910. package/src/styles/themes/_desert.scss +94 -80
  911. package/src/styles/themes/_expressive.scss +108 -0
  912. package/src/styles/themes/_fidelity.scss +108 -0
  913. package/src/styles/themes/_forest.scss +19 -3
  914. package/src/styles/themes/_fruit-salad.scss +108 -0
  915. package/src/styles/themes/_highcontrast.scss +91 -149
  916. package/src/styles/themes/_legacy.scss +1 -2
  917. package/src/styles/themes/_material.scss +1 -50
  918. package/src/styles/themes/_monochrome.scss +108 -0
  919. package/src/styles/themes/_neutral.scss +108 -0
  920. package/src/styles/themes/_ocean.scss +19 -3
  921. package/src/styles/themes/_rainbow.scss +108 -0
  922. package/src/styles/themes/_sageivory.scss +95 -125
  923. package/src/styles/themes/_spring.scss +19 -3
  924. package/src/styles/themes/_summer.scss +95 -87
  925. package/src/styles/themes/_sunset.scss +19 -3
  926. package/src/styles/themes/_tealcaramel.scss +94 -124
  927. package/src/styles/themes/_vibrant.scss +108 -0
  928. package/src/styles/themes/_winter.scss +1 -3
  929. package/src/styles/themes/_bluekhaki.scss +0 -136
  930. package/src/styles/themes/_greenbeige.scss +0 -138
@@ -1,5 +1,6 @@
1
1
  import type { MenuComponent } from "../types.js";
2
2
  import { MenuConfig, MenuControllerApi, MenuFeatureHost } from "../types.js";
3
+ import { MenuSubmenuApi } from "./loader.js";
3
4
  /**
4
5
  * Adds controller functionality to the menu component
5
6
  * Manages state, rendering, positioning, and event handling
@@ -9,5 +10,6 @@ import { MenuConfig, MenuControllerApi, MenuFeatureHost } from "../types.js";
9
10
  */
10
11
  declare const withController: (config: MenuConfig, getComponent: () => MenuComponent) => <C extends MenuFeatureHost>(component: C) => C & {
11
12
  menu: MenuControllerApi;
13
+ submenu: MenuSubmenuApi;
12
14
  };
13
15
  export default withController;
@@ -1,8 +1,18 @@
1
1
  import { createMenuTasks } from "./tasks.js";
2
2
  import { menuOpened, menuClosed } from "./registry.js";
3
+ import { eventWithin } from "./layer.js";
4
+ import { createSubmenuLoader, hasNestedItems } from "./loader.js";
5
+ import { onTopLayerClose, showInTopLayer } from "../../../core/dom/layer.js";
3
6
  import { setHTML } from "../../../core/dom/html.js";
7
+ const SCROLL_LISTENER = { capture: true, passive: true };
4
8
  const withController = (config, getComponent) => (component) => {
5
9
  const tasks = createMenuTasks();
10
+ const loader = createSubmenuLoader(config, component);
11
+ const submenu = loader.api;
12
+ if (hasNestedItems(config.items))
13
+ loader.load();
14
+ const topLayer = config.layer === "top";
15
+ let closing = false;
6
16
  const listbox = config.listbox === true;
7
17
  const optionIdPrefix = `${component.getClass("menu")}-${Math.random().toString(36).slice(2, 9)}`;
8
18
  if (listbox) {
@@ -126,14 +136,10 @@ const withController = (config, getComponent) => (component) => {
126
136
  });
127
137
  if (item.hasSubmenu && config.openSubmenuOnHover) {
128
138
  itemElement.addEventListener("mouseenter", () => {
129
- if (component.submenu) {
130
- component.submenu.handleSubmenuHover(item, index, itemElement);
131
- }
139
+ submenu.handleSubmenuHover(item, index, itemElement);
132
140
  });
133
141
  itemElement.addEventListener("mouseleave", () => {
134
- if (component.submenu) {
135
- component.submenu.handleSubmenuLeave();
136
- }
142
+ submenu.handleSubmenuLeave();
137
143
  });
138
144
  }
139
145
  }
@@ -198,18 +204,24 @@ const withController = (config, getComponent) => (component) => {
198
204
  }
199
205
  return null;
200
206
  };
207
+ const submenuActions = {
208
+ closeSubmenu: submenu.closeSubmenu,
209
+ handleSubmenuClick: submenu.handleSubmenuClick,
210
+ handleNestedSubmenuClick: submenu.handleNestedSubmenuClick,
211
+ };
201
212
  const handleItemClick = (e, item, index) => {
202
213
  e.preventDefault();
203
214
  e.stopPropagation();
204
215
  if (item.disabled)
205
216
  return;
206
- if (item.hasSubmenu && component.submenu) {
207
- component.submenu.handleSubmenuClick(item, index, e.currentTarget);
217
+ if (item.hasSubmenu) {
218
+ submenu.handleSubmenuClick(item, index, e.currentTarget);
208
219
  return;
209
220
  }
210
221
  const selectEvent = eventHelpers.triggerEvent("select", {
211
222
  item,
212
223
  itemId: item.id,
224
+ value: item.id,
213
225
  itemData: item.data,
214
226
  }, e);
215
227
  if (config.closeOnSelect && !selectEvent.defaultPrevented) {
@@ -253,9 +265,14 @@ const withController = (config, getComponent) => (component) => {
253
265
  component.element.setAttribute("aria-hidden", "true");
254
266
  component.element.style.transform = "scaleY(0)";
255
267
  component.element.style.opacity = "0";
256
- const container = config.container || document.body;
257
- container.appendChild(component.element);
268
+ const opener = topLayer ? getOpenerElement() : null;
269
+ if (opener?.parentNode)
270
+ opener.after(component.element);
271
+ else
272
+ (config.container || document.body).appendChild(component.element);
258
273
  }
274
+ if (topLayer)
275
+ showInTopLayer(component.element, { kind: "popover-manual" });
259
276
  tasks.setTimeout(() => {
260
277
  const openerElement = getOpenerElement();
261
278
  if (openerElement && component.position) {
@@ -297,29 +314,27 @@ const withController = (config, getComponent) => (component) => {
297
314
  window.addEventListener("resize", handleWindowResize, {
298
315
  passive: true,
299
316
  });
300
- window.addEventListener("scroll", handleWindowScroll, {
301
- passive: true,
302
- });
317
+ window.addEventListener("scroll", handleWindowScroll, SCROLL_LISTENER);
303
318
  }, 0);
304
319
  }, 20);
305
320
  eventHelpers.triggerEvent("open", {}, event);
306
321
  };
307
322
  const closeMenu = (event, restoreFocus = true) => {
308
- if (!state.visible)
323
+ if (!state.visible || (topLayer && closing))
309
324
  return;
325
+ closing = true;
310
326
  menuClosed(registryEntry);
311
327
  component.emit("menu-closing", { event, restoreFocus });
312
- if (component.submenu) {
313
- component.submenu.closeAllSubmenus();
314
- }
328
+ submenu.closeAllSubmenus();
315
329
  tasks.setTimeout(() => {
316
330
  state.visible = false;
331
+ closing = false;
317
332
  component.element.setAttribute("aria-hidden", "true");
318
333
  component.element.classList.remove(`${component.getClass("menu--visible")}`);
319
334
  document.removeEventListener("click", handleDocumentClick);
320
335
  document.removeEventListener("keydown", handleDocumentKeydown);
321
336
  window.removeEventListener("resize", handleWindowResize);
322
- window.removeEventListener("scroll", handleWindowScroll);
337
+ window.removeEventListener("scroll", handleWindowScroll, SCROLL_LISTENER);
323
338
  eventHelpers.triggerEvent("close", {
324
339
  restoreFocus: restoreFocus,
325
340
  }, event);
@@ -347,17 +362,16 @@ const withController = (config, getComponent) => (component) => {
347
362
  }
348
363
  };
349
364
  const handleDocumentClick = (e) => {
350
- if (component.element.contains(e.target)) {
365
+ if (eventWithin(config, component.element, e)) {
351
366
  return;
352
367
  }
353
368
  const opener = getOpenerElement();
354
- if (opener && opener.contains(e.target)) {
369
+ if (opener && eventWithin(config, opener, e)) {
355
370
  return;
356
371
  }
357
- if (component.submenu && component.submenu.hasOpenSubmenu()) {
358
- const activeSubmenus = component.submenu.getActiveSubmenus();
359
- for (const submenu of activeSubmenus) {
360
- if (submenu.element.contains(e.target)) {
372
+ if (submenu.hasOpenSubmenu()) {
373
+ for (const open of submenu.getActiveSubmenus()) {
374
+ if (eventWithin(config, open.element, e)) {
361
375
  return;
362
376
  }
363
377
  }
@@ -365,12 +379,11 @@ const withController = (config, getComponent) => (component) => {
365
379
  closeMenu(e, false);
366
380
  };
367
381
  const handleDocumentKeydown = (e) => {
368
- const isTargetInsideMenu = component.element.contains(e.target);
369
- const isTargetInsideSubmenu = component.submenu &&
370
- component.submenu.hasOpenSubmenu() &&
371
- component.submenu
382
+ const isTargetInsideMenu = eventWithin(config, component.element, e);
383
+ const isTargetInsideSubmenu = submenu.hasOpenSubmenu() &&
384
+ submenu
372
385
  .getActiveSubmenus()
373
- .some((s) => s.element.contains(e.target));
386
+ .some((s) => eventWithin(config, s.element, e));
374
387
  if (state.visible) {
375
388
  if (isTargetInsideMenu) {
376
389
  if (e.key === "Escape") {
@@ -382,10 +395,8 @@ const withController = (config, getComponent) => (component) => {
382
395
  if (component.keyboard && component.keyboard.handleMenuKeydown) {
383
396
  component.keyboard.handleMenuKeydown(e, state, {
384
397
  closeMenu,
385
- closeSubmenu: component.submenu?.closeSubmenu,
386
398
  findItemById,
387
- handleSubmenuClick: component.submenu?.handleSubmenuClick,
388
- handleNestedSubmenuClick: component.submenu?.handleNestedSubmenuClick,
399
+ ...submenuActions,
389
400
  });
390
401
  }
391
402
  else if (e.key === "Escape") {
@@ -397,10 +408,8 @@ const withController = (config, getComponent) => (component) => {
397
408
  if (component.keyboard && component.keyboard.handleMenuKeydown) {
398
409
  component.keyboard.handleMenuKeydown(e, state, {
399
410
  closeMenu,
400
- closeSubmenu: component.submenu?.closeSubmenu,
401
411
  findItemById,
402
- handleSubmenuClick: component.submenu?.handleSubmenuClick,
403
- handleNestedSubmenuClick: component.submenu?.handleNestedSubmenuClick,
412
+ ...submenuActions,
404
413
  });
405
414
  }
406
415
  }
@@ -419,7 +428,9 @@ const withController = (config, getComponent) => (component) => {
419
428
  }
420
429
  }
421
430
  };
422
- const handleWindowScroll = () => {
431
+ const handleWindowScroll = (event) => {
432
+ if (event?.composedPath().includes(component.element))
433
+ return;
423
434
  if (state.visible) {
424
435
  tasks.requestAnimationFrame(() => {
425
436
  const openerElement = getOpenerElement();
@@ -434,10 +445,8 @@ const withController = (config, getComponent) => (component) => {
434
445
  if (!listbox && component.keyboard && component.keyboard.setupKeyboardHandlers) {
435
446
  component.keyboard.setupKeyboardHandlers(component.element, state, {
436
447
  closeMenu,
437
- closeSubmenu: component.submenu?.closeSubmenu,
438
448
  findItemById,
439
- handleSubmenuClick: component.submenu?.handleSubmenuClick,
440
- handleNestedSubmenuClick: component.submenu?.handleNestedSubmenuClick,
449
+ ...submenuActions,
441
450
  });
442
451
  }
443
452
  if (state.visible) {
@@ -453,7 +462,7 @@ const withController = (config, getComponent) => (component) => {
453
462
  document.addEventListener("keydown", handleDocumentKeydown);
454
463
  }
455
464
  window.addEventListener("resize", handleWindowResize);
456
- window.addEventListener("scroll", handleWindowScroll);
465
+ window.addEventListener("scroll", handleWindowScroll, SCROLL_LISTENER);
457
466
  }
458
467
  };
459
468
  component.on("create-menu-items", (event) => {
@@ -478,23 +487,29 @@ const withController = (config, getComponent) => (component) => {
478
487
  });
479
488
  });
480
489
  tasks.setTimeout(initMenu, 0);
490
+ const stopLayerClose = topLayer
491
+ ? onTopLayerClose(component.element, () => closeMenu(undefined, false))
492
+ : null;
481
493
  if (component.lifecycle) {
482
494
  const originalDestroy = component.lifecycle.destroy || (() => { });
483
495
  component.lifecycle.destroy = () => {
484
496
  if (tasks.destroyed)
485
497
  return;
486
498
  tasks.destroy();
499
+ stopLayerClose?.();
487
500
  state.visible = false;
488
501
  menuClosed(registryEntry);
489
502
  document.removeEventListener("click", handleDocumentClick);
490
503
  document.removeEventListener("keydown", handleDocumentKeydown);
491
504
  window.removeEventListener("resize", handleWindowResize);
492
- window.removeEventListener("scroll", handleWindowScroll);
505
+ window.removeEventListener("scroll", handleWindowScroll, SCROLL_LISTENER);
506
+ loader.destroy();
493
507
  originalDestroy.call(component.lifecycle);
494
508
  };
495
509
  }
496
510
  return {
497
511
  ...component,
512
+ submenu,
498
513
  menu: {
499
514
  open: (event, interactionType) => {
500
515
  openMenu(event, interactionType);
@@ -511,6 +526,8 @@ const withController = (config, getComponent) => (component) => {
511
526
  isOpen: () => state.visible,
512
527
  setItems: (items) => {
513
528
  state.items = items;
529
+ if (hasNestedItems(items))
530
+ loader.load();
514
531
  renderMenuItems();
515
532
  return component;
516
533
  },
@@ -2,5 +2,4 @@ import withController from "./controller.js";
2
2
  import withOpener from "./opener.js";
3
3
  import withPosition from "./position.js";
4
4
  import withKeyboard from "./keyboard.js";
5
- import withSubmenu from "./submenu.js";
6
- export { withController, withOpener, withPosition, withKeyboard, withSubmenu };
5
+ export { withController, withOpener, withPosition, withKeyboard };
@@ -2,5 +2,4 @@ import withController from "./controller.js";
2
2
  import withOpener from "./opener.js";
3
3
  import withPosition from "./position.js";
4
4
  import withKeyboard from "./keyboard.js";
5
- import withSubmenu from "./submenu.js";
6
- export { withController, withOpener, withPosition, withKeyboard, withSubmenu };
5
+ export { withController, withOpener, withPosition, withKeyboard };
@@ -1,4 +1,5 @@
1
1
  import { createMenuTasks } from "./tasks.js";
2
+ import { activeElementOf } from "../../../core/dom/focus.js";
2
3
  export const createKeyboardNavigation = (component) => {
3
4
  const tasks = createMenuTasks();
4
5
  let isTabNavigation = false;
@@ -43,7 +44,7 @@ export const createKeyboardNavigation = (component) => {
43
44
  const ownerFilter = owner ? `[data-owner="${owner}"]` : "";
44
45
  const scope = level <= 1
45
46
  ? component.element
46
- : document.querySelector(`.${component.getClass("menu--submenu")}${ownerFilter}[data-level="${level - 1}"]`);
47
+ : menuElement.getRootNode().querySelector(`.${component.getClass("menu--submenu")}${ownerFilter}[data-level="${level - 1}"]`);
47
48
  return ((scope ?? component.element).querySelector(`.${component.getClass("menu__item")}[data-id="${parentId}"]`) ?? null);
48
49
  };
49
50
  const menuItems = (menuElement) => Array.from(menuElement.querySelectorAll(`.${component.getClass("menu__item")}`));
@@ -77,7 +78,7 @@ export const createKeyboardNavigation = (component) => {
77
78
  const items = menuItems(menuElement);
78
79
  if (items.length === 0)
79
80
  return;
80
- const focusedElement = document.activeElement;
81
+ const focusedElement = activeElementOf(menuElement);
81
82
  let focusedItemIndex = -1;
82
83
  if (focusedElement && items.includes(focusedElement)) {
83
84
  focusedItemIndex = items.indexOf(focusedElement);
@@ -0,0 +1,15 @@
1
+ import { MenuConfig } from "../types.js";
2
+ /**
3
+ * Whether an event happened inside a node. A top-layer menu may render in a
4
+ * shadow root, and a document listener then sees the event retargeted to the
5
+ * host; the event's composed path still holds the node. The menu without a
6
+ * layer keeps the test it always had.
7
+ */
8
+ export declare const eventWithin: (config: MenuConfig, node: Node, event: Event) => boolean;
9
+ /**
10
+ * Whether focus moving to `target` moved into a node. A top-layer menu may
11
+ * render in a shadow root other than its opener's (a menu element anchored
12
+ * to a button of the page): a focus event at the opener then names the
13
+ * shadow host the node is inside, not the node.
14
+ */
15
+ export declare const focusWithin: (config: MenuConfig, node: Node, target: Node | null) => boolean;
@@ -0,0 +1,16 @@
1
+ export const eventWithin = (config, node, event) => config.layer === "top"
2
+ ? event.composedPath().includes(node)
3
+ : node.contains(event.target);
4
+ export const focusWithin = (config, node, target) => {
5
+ if (!target)
6
+ return false;
7
+ if (node.contains(target))
8
+ return true;
9
+ if (config.layer !== "top")
10
+ return false;
11
+ for (let root = node.getRootNode(); "host" in root; root = root.host.getRootNode()) {
12
+ if (root.host === target)
13
+ return true;
14
+ }
15
+ return false;
16
+ };
@@ -0,0 +1,35 @@
1
+ import type { MenuConfig, MenuContent, MenuFeatureHost } from "../types.js";
2
+ /** What the submenu feature installs, as the rest of the menu calls it. */
3
+ export type MenuSubmenuApi = NonNullable<MenuFeatureHost["submenu"]>;
4
+ /** What the controller holds: the facade it installs, and the load it starts. */
5
+ export interface SubmenuLoader {
6
+ /** Installed as `component.submenu`, before and after the feature arrives. */
7
+ api: MenuSubmenuApi;
8
+ /** Starts fetching the feature. Later calls share the first load. */
9
+ load: () => void;
10
+ /** Drops queued interactions, and destroys the feature if it arrived. */
11
+ destroy: () => void;
12
+ }
13
+ /** True when an item opens a submenu: the only case that needs the feature. */
14
+ export declare const hasNestedItems: (items: MenuContent[] | undefined) => boolean;
15
+ /**
16
+ * Loads the submenu feature on demand (FLO-310).
17
+ *
18
+ * The feature is most of what a menu with nested items adds, and a menu
19
+ * without them never uses it, so it is a chunk of its own rather than part of
20
+ * every menu. The controller starts the load as soon as it sees a nested item
21
+ * -- at creation, or in `setItems` -- so it has normally arrived before the
22
+ * menu is even opened.
23
+ *
24
+ * Until it has, `api` stands in for it. A click, hover or ArrowRight on a
25
+ * nested item is queued and replayed, in order, against the element the user
26
+ * acted on, once the feature is there. Closing the menu drops the queue, as
27
+ * does destroying it; a feature that arrives after `destroy` is not attached.
28
+ * The queries answer "nothing open", which is the truth before the feature
29
+ * exists.
30
+ *
31
+ * The feature gets a lifecycle of its own, destroyed from the controller's,
32
+ * so its cleanup runs where it did when it was composed in the pipe: after
33
+ * the controller's.
34
+ */
35
+ export declare const createSubmenuLoader: (config: MenuConfig, component: MenuFeatureHost) => SubmenuLoader;
@@ -0,0 +1,64 @@
1
+ export const hasNestedItems = (items) => !!items?.some((item) => "hasSubmenu" in item && item.hasSubmenu === true);
2
+ export const createSubmenuLoader = (config, component) => {
3
+ let feature = null;
4
+ let loading = false;
5
+ let destroyed = false;
6
+ let queue = [];
7
+ const lifecycle = { destroy: () => { } };
8
+ const load = () => {
9
+ if (feature || loading || destroyed)
10
+ return;
11
+ loading = true;
12
+ import("./submenu.js").then(({ default: withSubmenu }) => {
13
+ loading = false;
14
+ if (destroyed)
15
+ return;
16
+ const submenu = withSubmenu(config)({ ...component, lifecycle }).submenu;
17
+ feature = submenu;
18
+ const waiting = queue;
19
+ queue = [];
20
+ waiting.forEach((action) => action(submenu));
21
+ }, (error) => {
22
+ loading = false;
23
+ queue = [];
24
+ console.error("Menu submenu feature failed to load:", error);
25
+ });
26
+ };
27
+ const interact = (action, itemElement) => {
28
+ if (feature) {
29
+ action(feature);
30
+ return;
31
+ }
32
+ if (destroyed)
33
+ return;
34
+ queue.push((submenu) => {
35
+ if (!itemElement || itemElement.isConnected)
36
+ action(submenu);
37
+ });
38
+ load();
39
+ };
40
+ const close = (action) => {
41
+ if (feature)
42
+ action(feature);
43
+ else
44
+ queue = [];
45
+ };
46
+ const api = {
47
+ handleSubmenuClick: (item, index, itemElement) => interact((s) => s.handleSubmenuClick(item, index, itemElement), itemElement),
48
+ handleNestedSubmenuClick: (item, index, itemElement) => interact((s) => s.handleNestedSubmenuClick(item, index, itemElement), itemElement),
49
+ handleSubmenuHover: (item, index, itemElement) => interact((s) => s.handleSubmenuHover(item, index, itemElement), itemElement),
50
+ handleSubmenuLeave: () => interact((s) => s.handleSubmenuLeave()),
51
+ closeSubmenu: (level) => close((s) => s.closeSubmenu(level)),
52
+ closeAllSubmenus: () => close((s) => s.closeAllSubmenus()),
53
+ hasOpenSubmenu: () => feature?.hasOpenSubmenu() ?? false,
54
+ getActiveSubmenus: () => feature?.getActiveSubmenus() ?? [],
55
+ };
56
+ const destroy = () => {
57
+ if (destroyed)
58
+ return;
59
+ destroyed = true;
60
+ queue = [];
61
+ lifecycle.destroy();
62
+ };
63
+ return { api, load, destroy };
64
+ };
@@ -1,4 +1,5 @@
1
1
  import { createMenuTasks } from "./tasks.js";
2
+ import { focusWithin } from "./layer.js";
2
3
  const withOpener = (config) => (component) => {
3
4
  const tasks = createMenuTasks();
4
5
  let isTabNavigation = false;
@@ -211,7 +212,7 @@ const withOpener = (config) => (component) => {
211
212
  return;
212
213
  }
213
214
  if (relatedTarget) {
214
- if (component.element.contains(relatedTarget)) {
215
+ if (focusWithin(config, component.element, relatedTarget)) {
215
216
  return;
216
217
  }
217
218
  if (relatedTarget.getAttribute("aria-haspopup") === "true" ||
@@ -1,32 +1,35 @@
1
1
  export const createPositioner = (component, config) => {
2
+ const VIEWPORT_MARGIN = 48;
3
+ const MIN_MENU_HEIGHT = 100;
2
4
  const positionElement = (menuElement, openerElement, preferredPosition, isSubmenu = false) => {
3
5
  if (!menuElement || !openerElement)
4
6
  return;
5
- const hasContainer = config.container && config.container !== document.body;
6
- menuElement.style.position = "absolute";
7
- const scrollX = hasContainer
7
+ const topLayer = config.layer === "top";
8
+ const position = topLayer ? "fixed" : "absolute";
9
+ const hasContainer = !topLayer && config.container && config.container !== document.body;
10
+ menuElement.style.position = position;
11
+ const scrollX = hasContainer || topLayer
8
12
  ? 0
9
13
  : window.pageXOffset || document.documentElement.scrollLeft;
10
- const scrollY = hasContainer
14
+ const scrollY = hasContainer || topLayer
11
15
  ? 0
12
16
  : window.pageYOffset || document.documentElement.scrollTop;
13
17
  const openerRect = openerElement.getBoundingClientRect();
14
18
  const tempMenu = menuElement.cloneNode(true);
15
19
  tempMenu.style.visibility = "hidden";
16
20
  tempMenu.style.display = "block";
17
- tempMenu.style.position = "absolute";
21
+ tempMenu.style.position = position;
18
22
  tempMenu.style.top = "0";
19
23
  tempMenu.style.left = "0";
20
24
  tempMenu.style.transform = "none";
21
25
  tempMenu.style.opacity = "0";
22
26
  tempMenu.style.pointerEvents = "none";
23
- if (config.maxHeight)
24
- tempMenu.style.maxHeight = config.maxHeight;
27
+ tempMenu.style.maxHeight = config.maxHeight ?? "";
25
28
  tempMenu.classList.add(`${component.getClass("menu--visible")}`);
26
29
  if (config.width === "100%" && !isSubmenu) {
27
30
  tempMenu.style.width = `${openerRect.width}px`;
28
31
  }
29
- const measureContainer = config.container || document.body;
32
+ const measureContainer = (topLayer && menuElement.parentNode) || config.container || document.body;
30
33
  measureContainer.appendChild(tempMenu);
31
34
  const menuRect = tempMenu.getBoundingClientRect();
32
35
  const viewportWidth = window.innerWidth;
@@ -97,6 +100,21 @@ export const createPositioner = (component, config) => {
97
100
  break;
98
101
  }
99
102
  }
103
+ let height = menuRect.height;
104
+ let fitted = null;
105
+ if (!isSubmenu && /^(top|bottom)/.test(calculatedPosition)) {
106
+ const below = viewportHeight - openerRect.bottom - offset - VIEWPORT_MARGIN;
107
+ const above = openerRect.top - offset - VIEWPORT_MARGIN;
108
+ if (height > (calculatedPosition.startsWith("bottom") ? below : above)) {
109
+ calculatedPosition = calculatedPosition.replace(/^(top|bottom)/, below >= above ? "bottom" : "top");
110
+ }
111
+ const room = Math.max(calculatedPosition.startsWith("bottom") ? below : above, MIN_MENU_HEIGHT);
112
+ if (height > room) {
113
+ fitted = room;
114
+ height = room;
115
+ }
116
+ }
117
+ menuElement.style.maxHeight = fitted !== null ? `${fitted}px` : (config.maxHeight ?? "");
100
118
  const positionClasses = [
101
119
  "position-top",
102
120
  "position-bottom",
@@ -130,16 +148,16 @@ export const createPositioner = (component, config) => {
130
148
  const offsetY = hasContainer ? -containerRect.top : scrollY;
131
149
  switch (calculatedPosition) {
132
150
  case "top-start":
133
- top = openerRect.top + offsetY - menuRect.height - offset;
151
+ top = openerRect.top + offsetY - height - offset;
134
152
  left = openerRect.left + offsetX;
135
153
  break;
136
154
  case "top":
137
- top = openerRect.top + offsetY - menuRect.height - offset;
155
+ top = openerRect.top + offsetY - height - offset;
138
156
  left =
139
157
  openerRect.left + offsetX + openerRect.width / 2 - menuRect.width / 2;
140
158
  break;
141
159
  case "top-end":
142
- top = openerRect.top + offsetY - menuRect.height - offset;
160
+ top = openerRect.top + offsetY - height - offset;
143
161
  left = openerRect.right + offsetX - menuRect.width;
144
162
  break;
145
163
  case "right-start":
@@ -152,7 +170,7 @@ export const createPositioner = (component, config) => {
152
170
  openerRect.top +
153
171
  offsetY +
154
172
  openerRect.height / 2 -
155
- menuRect.height / 2;
173
+ height / 2;
156
174
  }
157
175
  else {
158
176
  top += offsetY;
@@ -160,7 +178,7 @@ export const createPositioner = (component, config) => {
160
178
  left = openerRect.right + offsetX + offset;
161
179
  break;
162
180
  case "right-end":
163
- top = openerRect.bottom + offsetY - menuRect.height;
181
+ top = openerRect.bottom + offsetY - height;
164
182
  left = openerRect.right + offsetX + offset;
165
183
  break;
166
184
  case "bottom-start":
@@ -186,7 +204,7 @@ export const createPositioner = (component, config) => {
186
204
  openerRect.top +
187
205
  offsetY +
188
206
  openerRect.height / 2 -
189
- menuRect.height / 2;
207
+ height / 2;
190
208
  }
191
209
  else {
192
210
  top += offsetY;
@@ -194,7 +212,7 @@ export const createPositioner = (component, config) => {
194
212
  left = openerRect.left + offsetX - menuRect.width - offset;
195
213
  break;
196
214
  case "left-end":
197
- top = openerRect.bottom + offsetY - menuRect.height;
215
+ top = openerRect.bottom + offsetY - height;
198
216
  left = openerRect.left + offsetX - menuRect.width - offset;
199
217
  break;
200
218
  }
@@ -204,34 +222,18 @@ export const createPositioner = (component, config) => {
204
222
  if (config.width === "100%" && !isSubmenu) {
205
223
  menuElement.style.width = `${openerRect.width}px`;
206
224
  }
207
- if (config.maxHeight) {
208
- menuElement.style.maxHeight = config.maxHeight;
209
- }
210
225
  return;
211
226
  }
212
227
  const minTopSpacing = 48;
213
228
  if (top - scrollY < minTopSpacing) {
214
229
  top = minTopSpacing + scrollY;
215
230
  }
216
- const viewportBottomMargin = 48;
217
- const bottomEdge = top - scrollY + menuRect.height;
218
- if (bottomEdge > viewportHeight - viewportBottomMargin) {
219
- const availableHeight = viewportHeight - (top - scrollY) - viewportBottomMargin;
220
- const minMenuHeight = Math.min(menuRect.height, 100);
221
- const newMaxHeight = Math.max(availableHeight, minMenuHeight);
222
- menuElement.style.maxHeight = `${newMaxHeight}px`;
223
- if (config.maxHeight) {
224
- const configMaxHeight = parseInt(config.maxHeight, 10);
225
- if (!isNaN(configMaxHeight) &&
226
- configMaxHeight < parseInt(menuElement.style.maxHeight || "0", 10)) {
227
- menuElement.style.maxHeight = config.maxHeight;
228
- }
229
- }
230
- }
231
- else {
232
- if (config.maxHeight) {
233
- menuElement.style.maxHeight = config.maxHeight;
234
- }
231
+ const bottomEdge = top - scrollY + height;
232
+ if (fitted === null && bottomEdge > viewportHeight - VIEWPORT_MARGIN) {
233
+ const available = viewportHeight - (top - scrollY) - VIEWPORT_MARGIN;
234
+ const shrunk = Math.max(available, Math.min(height, MIN_MENU_HEIGHT));
235
+ const configured = config.maxHeight ? parseInt(config.maxHeight, 10) : NaN;
236
+ menuElement.style.maxHeight = `${Number.isNaN(configured) ? shrunk : Math.min(shrunk, configured)}px`;
235
237
  }
236
238
  if (config.width === "100%" && !isSubmenu) {
237
239
  menuElement.style.width = `${openerRect.width}px`;
@@ -248,7 +250,7 @@ export const createPositioner = (component, config) => {
248
250
  const positionMenu = (openerElement) => {
249
251
  if (!openerElement || !component.element)
250
252
  return;
251
- positionElement(component.element, openerElement, config.position ?? "bottom-start", false);
253
+ positionElement(component.element, config.positionTarget ?? openerElement, config.position ?? "bottom-start", false);
252
254
  };
253
255
  const positionSubmenu = (submenuElement, parentItemElement, level = 1) => {
254
256
  if (!submenuElement || !parentItemElement)