@universal-material/web 3.8.0 → 3.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (429) hide show
  1. package/.claude-plugin/plugin.json +12 -0
  2. package/README.md +12 -0
  3. package/app-bar/top-app-bar.d.ts +7 -6
  4. package/app-bar/top-app-bar.d.ts.map +1 -1
  5. package/app-bar/top-app-bar.js +71 -35
  6. package/app-bar/top-app-bar.js.map +1 -1
  7. package/app-bar/top-app-bar.styles.d.ts.map +1 -1
  8. package/app-bar/top-app-bar.styles.js +18 -1
  9. package/app-bar/top-app-bar.styles.js.map +1 -1
  10. package/badge/badge.d.ts +2 -2
  11. package/badge/badge.d.ts.map +1 -1
  12. package/badge/badge.js +6 -6
  13. package/badge/badge.js.map +1 -1
  14. package/badge/badge.styles.d.ts.map +1 -1
  15. package/badge/badge.styles.js +1 -0
  16. package/badge/badge.styles.js.map +1 -1
  17. package/bundle.min.js +4469 -1277
  18. package/button/button-base.d.ts +2 -2
  19. package/button/button-base.d.ts.map +1 -1
  20. package/button/button-base.js +5 -5
  21. package/button/button-base.js.map +1 -1
  22. package/button/button-set.d.ts +3 -3
  23. package/button/button-set.d.ts.map +1 -1
  24. package/button/button-set.js +7 -7
  25. package/button/button-set.js.map +1 -1
  26. package/button/button.d.ts +7 -7
  27. package/button/button.d.ts.map +1 -1
  28. package/button/button.js +14 -14
  29. package/button/button.js.map +1 -1
  30. package/button/fab-menu-color-context.d.ts +2 -2
  31. package/button/fab-menu-color-context.d.ts.map +1 -1
  32. package/button/fab-menu-color-context.js.map +1 -1
  33. package/button/fab-menu-item.d.ts +3 -3
  34. package/button/fab-menu-item.d.ts.map +1 -1
  35. package/button/fab-menu-item.js +11 -11
  36. package/button/fab-menu-item.js.map +1 -1
  37. package/button/fab-menu.d.ts +20 -5
  38. package/button/fab-menu.d.ts.map +1 -1
  39. package/button/fab-menu.js +48 -11
  40. package/button/fab-menu.js.map +1 -1
  41. package/button/fab.d.ts +22 -7
  42. package/button/fab.d.ts.map +1 -1
  43. package/button/fab.js +49 -11
  44. package/button/fab.js.map +1 -1
  45. package/button/icon-button.d.ts +7 -7
  46. package/button/icon-button.d.ts.map +1 -1
  47. package/button/icon-button.js +8 -8
  48. package/button/icon-button.js.map +1 -1
  49. package/button/toggle-button.d.ts +6 -6
  50. package/button/toggle-button.d.ts.map +1 -1
  51. package/button/toggle-button.js +10 -10
  52. package/button/toggle-button.js.map +1 -1
  53. package/button-field/button-field.d.ts +3 -3
  54. package/button-field/button-field.d.ts.map +1 -1
  55. package/button-field/button-field.js +9 -9
  56. package/button-field/button-field.js.map +1 -1
  57. package/calendar/calendar-base.d.ts +1 -1
  58. package/calendar/calendar-base.d.ts.map +1 -1
  59. package/calendar/calendar-base.js +10 -10
  60. package/calendar/calendar-base.js.map +1 -1
  61. package/calendar/calendar.d.ts +2 -2
  62. package/calendar/calendar.d.ts.map +1 -1
  63. package/calendar/calendar.js +8 -8
  64. package/calendar/calendar.js.map +1 -1
  65. package/calendar/range-calendar.d.ts +2 -2
  66. package/calendar/range-calendar.d.ts.map +1 -1
  67. package/calendar/range-calendar.js +9 -9
  68. package/calendar/range-calendar.js.map +1 -1
  69. package/card/card-content.d.ts +2 -2
  70. package/card/card-content.d.ts.map +1 -1
  71. package/card/card-content.js +5 -5
  72. package/card/card-content.js.map +1 -1
  73. package/card/card-media.d.ts +2 -2
  74. package/card/card-media.d.ts.map +1 -1
  75. package/card/card-media.js +5 -5
  76. package/card/card-media.js.map +1 -1
  77. package/card/card.d.ts +4 -4
  78. package/card/card.d.ts.map +1 -1
  79. package/card/card.js +5 -5
  80. package/card/card.js.map +1 -1
  81. package/checkbox/checkbox-list-item.d.ts +4 -4
  82. package/checkbox/checkbox-list-item.d.ts.map +1 -1
  83. package/checkbox/checkbox-list-item.js +5 -5
  84. package/checkbox/checkbox-list-item.js.map +1 -1
  85. package/checkbox/checkbox.d.ts +3 -3
  86. package/checkbox/checkbox.d.ts.map +1 -1
  87. package/checkbox/checkbox.js +7 -7
  88. package/checkbox/checkbox.js.map +1 -1
  89. package/chip/chip-set.d.ts +3 -3
  90. package/chip/chip-set.d.ts.map +1 -1
  91. package/chip/chip-set.js +6 -6
  92. package/chip/chip-set.js.map +1 -1
  93. package/chip/chip.d.ts +5 -5
  94. package/chip/chip.d.ts.map +1 -1
  95. package/chip/chip.js +20 -20
  96. package/chip/chip.js.map +1 -1
  97. package/chip-field/chip-field.d.ts +3 -3
  98. package/chip-field/chip-field.d.ts.map +1 -1
  99. package/chip-field/chip-field.js +9 -9
  100. package/chip-field/chip-field.js.map +1 -1
  101. package/collapse/collapse.d.ts +26 -0
  102. package/collapse/collapse.d.ts.map +1 -0
  103. package/collapse/collapse.js +62 -0
  104. package/collapse/collapse.js.map +1 -0
  105. package/collapse/collapse.styles.d.ts +2 -0
  106. package/collapse/collapse.styles.d.ts.map +1 -0
  107. package/collapse/collapse.styles.js +8 -0
  108. package/collapse/collapse.styles.js.map +1 -0
  109. package/config.js.map +1 -1
  110. package/css/universal-material.css +2 -1
  111. package/css/universal-material.min.css +2 -1
  112. package/custom-elements.json +16615 -12152
  113. package/datepicker/datepicker.d.ts +6 -4
  114. package/datepicker/datepicker.d.ts.map +1 -1
  115. package/datepicker/datepicker.js +33 -19
  116. package/datepicker/datepicker.js.map +1 -1
  117. package/datepicker/datepicker.styles.d.ts.map +1 -1
  118. package/datepicker/datepicker.styles.js +25 -0
  119. package/datepicker/datepicker.styles.js.map +1 -1
  120. package/datepicker/range-datepicker.d.ts +6 -4
  121. package/datepicker/range-datepicker.d.ts.map +1 -1
  122. package/datepicker/range-datepicker.js +33 -19
  123. package/datepicker/range-datepicker.js.map +1 -1
  124. package/dialog/confirm-dialog-builder.d.ts +3 -3
  125. package/dialog/confirm-dialog-builder.d.ts.map +1 -1
  126. package/dialog/confirm-dialog-builder.js.map +1 -1
  127. package/dialog/dialog-builder.d.ts +5 -4
  128. package/dialog/dialog-builder.d.ts.map +1 -1
  129. package/dialog/dialog-builder.js +10 -3
  130. package/dialog/dialog-builder.js.map +1 -1
  131. package/dialog/dialog-button-def.d.ts +3 -3
  132. package/dialog/dialog-button-def.d.ts.map +1 -1
  133. package/dialog/dialog-button-def.js.map +1 -1
  134. package/dialog/dialog.d.ts +2 -2
  135. package/dialog/dialog.d.ts.map +1 -1
  136. package/dialog/dialog.js +14 -14
  137. package/dialog/dialog.js.map +1 -1
  138. package/dialog/message-dialog-builder.d.ts +2 -2
  139. package/dialog/message-dialog-builder.d.ts.map +1 -1
  140. package/dialog/message-dialog-builder.js.map +1 -1
  141. package/elevation/elevation.d.ts +2 -2
  142. package/elevation/elevation.d.ts.map +1 -1
  143. package/elevation/elevation.js +4 -4
  144. package/elevation/elevation.js.map +1 -1
  145. package/expansion-panel/expansion-panel-container.d.ts +24 -0
  146. package/expansion-panel/expansion-panel-container.d.ts.map +1 -0
  147. package/expansion-panel/expansion-panel-container.js +54 -0
  148. package/expansion-panel/expansion-panel-container.js.map +1 -0
  149. package/expansion-panel/expansion-panel-container.styles.d.ts +2 -0
  150. package/expansion-panel/expansion-panel-container.styles.d.ts.map +1 -0
  151. package/expansion-panel/expansion-panel-container.styles.js +9 -0
  152. package/expansion-panel/expansion-panel-container.styles.js.map +1 -0
  153. package/expansion-panel/expansion-panel.d.ts +37 -0
  154. package/expansion-panel/expansion-panel.d.ts.map +1 -0
  155. package/expansion-panel/expansion-panel.js +89 -0
  156. package/expansion-panel/expansion-panel.js.map +1 -0
  157. package/expansion-panel/expansion-panel.styles.d.ts +2 -0
  158. package/expansion-panel/expansion-panel.styles.d.ts.map +1 -0
  159. package/expansion-panel/expansion-panel.styles.js +66 -0
  160. package/expansion-panel/expansion-panel.styles.js.map +1 -0
  161. package/field/field-base.d.ts +3 -3
  162. package/field/field-base.d.ts.map +1 -1
  163. package/field/field-base.js +20 -20
  164. package/field/field-base.js.map +1 -1
  165. package/field/field-defaults-context.d.ts +2 -2
  166. package/field/field-defaults-context.d.ts.map +1 -1
  167. package/field/field-defaults-context.js.map +1 -1
  168. package/field/field-defaults.d.ts +3 -3
  169. package/field/field-defaults.d.ts.map +1 -1
  170. package/field/field-defaults.js.map +1 -1
  171. package/field/field-variant.d.ts +1 -1
  172. package/field/field-variant.d.ts.map +1 -1
  173. package/field/field-variant.js.map +1 -1
  174. package/field/field.d.ts +3 -3
  175. package/field/field.d.ts.map +1 -1
  176. package/field/field.js +6 -6
  177. package/field/field.js.map +1 -1
  178. package/icon/icon.d.ts +2 -2
  179. package/icon/icon.d.ts.map +1 -1
  180. package/icon/icon.js +4 -4
  181. package/icon/icon.js.map +1 -1
  182. package/index.d.ts +24 -1
  183. package/index.d.ts.map +1 -1
  184. package/index.js +24 -1
  185. package/index.js.map +1 -1
  186. package/list/list-item.d.ts +16 -2
  187. package/list/list-item.d.ts.map +1 -1
  188. package/list/list-item.js +26 -6
  189. package/list/list-item.js.map +1 -1
  190. package/list/list-item.styles.d.ts.map +1 -1
  191. package/list/list-item.styles.js +13 -0
  192. package/list/list-item.styles.js.map +1 -1
  193. package/list/list.d.ts +2 -2
  194. package/list/list.d.ts.map +1 -1
  195. package/list/list.js +4 -4
  196. package/list/list.js.map +1 -1
  197. package/menu/menu-item.d.ts +3 -3
  198. package/menu/menu-item.d.ts.map +1 -1
  199. package/menu/menu-item.js +10 -10
  200. package/menu/menu-item.js.map +1 -1
  201. package/menu/menu.d.ts +2 -2
  202. package/menu/menu.d.ts.map +1 -1
  203. package/menu/menu.js +13 -13
  204. package/menu/menu.js.map +1 -1
  205. package/navigation/drawer-headline.d.ts +2 -2
  206. package/navigation/drawer-headline.d.ts.map +1 -1
  207. package/navigation/drawer-headline.js +6 -6
  208. package/navigation/drawer-headline.js.map +1 -1
  209. package/navigation/drawer-item.d.ts +3 -3
  210. package/navigation/drawer-item.d.ts.map +1 -1
  211. package/navigation/drawer-item.js +17 -12
  212. package/navigation/drawer-item.js.map +1 -1
  213. package/navigation/drawer.d.ts +2 -2
  214. package/navigation/drawer.d.ts.map +1 -1
  215. package/navigation/drawer.js +4 -4
  216. package/navigation/drawer.js.map +1 -1
  217. package/navigation/side-navigation.d.ts +9 -2
  218. package/navigation/side-navigation.d.ts.map +1 -1
  219. package/navigation/side-navigation.js +15 -8
  220. package/navigation/side-navigation.js.map +1 -1
  221. package/navigation-bar/navigation-bar-item.d.ts +40 -0
  222. package/navigation-bar/navigation-bar-item.d.ts.map +1 -0
  223. package/navigation-bar/navigation-bar-item.js +113 -0
  224. package/navigation-bar/navigation-bar-item.js.map +1 -0
  225. package/navigation-bar/navigation-bar-item.styles.d.ts +2 -0
  226. package/navigation-bar/navigation-bar-item.styles.d.ts.map +1 -0
  227. package/navigation-bar/navigation-bar-item.styles.js +101 -0
  228. package/navigation-bar/navigation-bar-item.styles.js.map +1 -0
  229. package/navigation-bar/navigation-bar.d.ts +40 -0
  230. package/navigation-bar/navigation-bar.d.ts.map +1 -0
  231. package/navigation-bar/navigation-bar.js +85 -0
  232. package/navigation-bar/navigation-bar.js.map +1 -0
  233. package/navigation-bar/navigation-bar.styles.d.ts +2 -0
  234. package/navigation-bar/navigation-bar.styles.d.ts.map +1 -0
  235. package/navigation-bar/navigation-bar.styles.js +44 -0
  236. package/navigation-bar/navigation-bar.styles.js.map +1 -0
  237. package/navigation-rail/navigation-rail-headline.d.ts +23 -0
  238. package/navigation-rail/navigation-rail-headline.d.ts.map +1 -0
  239. package/navigation-rail/navigation-rail-headline.js +28 -0
  240. package/navigation-rail/navigation-rail-headline.js.map +1 -0
  241. package/navigation-rail/navigation-rail-headline.styles.d.ts +2 -0
  242. package/navigation-rail/navigation-rail-headline.styles.d.ts.map +1 -0
  243. package/navigation-rail/navigation-rail-headline.styles.js +19 -0
  244. package/navigation-rail/navigation-rail-headline.styles.js.map +1 -0
  245. package/navigation-rail/navigation-rail-item.d.ts +58 -0
  246. package/navigation-rail/navigation-rail-item.d.ts.map +1 -0
  247. package/navigation-rail/navigation-rail-item.js +160 -0
  248. package/navigation-rail/navigation-rail-item.js.map +1 -0
  249. package/navigation-rail/navigation-rail-item.styles.d.ts +2 -0
  250. package/navigation-rail/navigation-rail-item.styles.d.ts.map +1 -0
  251. package/navigation-rail/navigation-rail-item.styles.js +182 -0
  252. package/navigation-rail/navigation-rail-item.styles.js.map +1 -0
  253. package/navigation-rail/navigation-rail.d.ts +66 -0
  254. package/navigation-rail/navigation-rail.d.ts.map +1 -0
  255. package/navigation-rail/navigation-rail.js +223 -0
  256. package/navigation-rail/navigation-rail.js.map +1 -0
  257. package/navigation-rail/navigation-rail.styles.d.ts +2 -0
  258. package/navigation-rail/navigation-rail.styles.d.ts.map +1 -0
  259. package/navigation-rail/navigation-rail.styles.js +220 -0
  260. package/navigation-rail/navigation-rail.styles.js.map +1 -0
  261. package/overflow-menu/overflow-menu.d.ts +8 -2
  262. package/overflow-menu/overflow-menu.d.ts.map +1 -1
  263. package/overflow-menu/overflow-menu.js +10 -1
  264. package/overflow-menu/overflow-menu.js.map +1 -1
  265. package/package.json +19 -3
  266. package/progress/circular-progress.d.ts +2 -2
  267. package/progress/circular-progress.d.ts.map +1 -1
  268. package/progress/circular-progress.js +6 -6
  269. package/progress/circular-progress.js.map +1 -1
  270. package/progress/progress-bar.d.ts +2 -2
  271. package/progress/progress-bar.d.ts.map +1 -1
  272. package/progress/progress-bar.js +6 -6
  273. package/progress/progress-bar.js.map +1 -1
  274. package/radio/radio-list-item.d.ts +4 -4
  275. package/radio/radio-list-item.d.ts.map +1 -1
  276. package/radio/radio-list-item.js +5 -5
  277. package/radio/radio-list-item.js.map +1 -1
  278. package/radio/radio.d.ts +3 -3
  279. package/radio/radio.d.ts.map +1 -1
  280. package/radio/radio.js +6 -6
  281. package/radio/radio.js.map +1 -1
  282. package/ripple/ripple.d.ts +2 -2
  283. package/ripple/ripple.d.ts.map +1 -1
  284. package/ripple/ripple.js +9 -9
  285. package/ripple/ripple.js.map +1 -1
  286. package/scaffold/pane.d.ts +127 -0
  287. package/scaffold/pane.d.ts.map +1 -0
  288. package/scaffold/pane.js +220 -0
  289. package/scaffold/pane.js.map +1 -0
  290. package/scaffold/pane.styles.d.ts +2 -0
  291. package/scaffold/pane.styles.d.ts.map +1 -0
  292. package/scaffold/pane.styles.js +1909 -0
  293. package/scaffold/pane.styles.js.map +1 -0
  294. package/scaffold/scaffold.d.ts +45 -0
  295. package/scaffold/scaffold.d.ts.map +1 -0
  296. package/scaffold/scaffold.js +170 -0
  297. package/scaffold/scaffold.js.map +1 -0
  298. package/scaffold/scaffold.styles.d.ts +2 -0
  299. package/scaffold/scaffold.styles.d.ts.map +1 -0
  300. package/scaffold/scaffold.styles.js +69 -0
  301. package/scaffold/scaffold.styles.js.map +1 -0
  302. package/scaffold/scroll-container-context.d.ts +4 -0
  303. package/scaffold/scroll-container-context.d.ts.map +1 -0
  304. package/scaffold/scroll-container-context.js +3 -0
  305. package/scaffold/scroll-container-context.js.map +1 -0
  306. package/scss/utilities/_divider.scss +4 -0
  307. package/search/search.d.ts +3 -3
  308. package/search/search.d.ts.map +1 -1
  309. package/search/search.js +7 -7
  310. package/search/search.js.map +1 -1
  311. package/search/search.styles.d.ts.map +1 -1
  312. package/search/search.styles.js +7 -2
  313. package/search/search.styles.js.map +1 -1
  314. package/select/option.d.ts +3 -3
  315. package/select/option.d.ts.map +1 -1
  316. package/select/option.js +8 -8
  317. package/select/option.js.map +1 -1
  318. package/select/select-navigation-controller.d.ts +4 -4
  319. package/select/select-navigation-controller.d.ts.map +1 -1
  320. package/select/select-navigation-controller.js.map +1 -1
  321. package/select/select.d.ts +18 -12
  322. package/select/select.d.ts.map +1 -1
  323. package/select/select.js +77 -31
  324. package/select/select.js.map +1 -1
  325. package/shared/button-wrapper.d.ts +1 -1
  326. package/shared/button-wrapper.d.ts.map +1 -1
  327. package/shared/button-wrapper.js +8 -8
  328. package/shared/button-wrapper.js.map +1 -1
  329. package/shared/char-count-text-field/native-text-field-wrapper.d.ts +2 -2
  330. package/shared/char-count-text-field/native-text-field-wrapper.d.ts.map +1 -1
  331. package/shared/char-count-text-field/native-text-field-wrapper.js +6 -6
  332. package/shared/char-count-text-field/native-text-field-wrapper.js.map +1 -1
  333. package/shared/menu-field/menu-field-navigation-controller.d.ts +3 -3
  334. package/shared/menu-field/menu-field-navigation-controller.d.ts.map +1 -1
  335. package/shared/menu-field/menu-field-navigation-controller.js.map +1 -1
  336. package/shared/menu-field/menu-field.d.ts +5 -5
  337. package/shared/menu-field/menu-field.d.ts.map +1 -1
  338. package/shared/menu-field/menu-field.js.map +1 -1
  339. package/shared/selection-control/selection-control-list-item.d.ts +2 -2
  340. package/shared/selection-control/selection-control-list-item.d.ts.map +1 -1
  341. package/shared/selection-control/selection-control-list-item.js +10 -1
  342. package/shared/selection-control/selection-control-list-item.js.map +1 -1
  343. package/shared/selection-control/selection-control.d.ts +1 -1
  344. package/shared/selection-control/selection-control.d.ts.map +1 -1
  345. package/shared/selection-control/selection-control.js +15 -7
  346. package/shared/selection-control/selection-control.js.map +1 -1
  347. package/shared/sets/set-base.d.ts +1 -1
  348. package/shared/sets/set-base.d.ts.map +1 -1
  349. package/shared/sets/set-base.js +2 -2
  350. package/shared/sets/set-base.js.map +1 -1
  351. package/shared/text-field-base/text-field-base.d.ts +34 -2
  352. package/shared/text-field-base/text-field-base.d.ts.map +1 -1
  353. package/shared/text-field-base/text-field-base.js +63 -4
  354. package/shared/text-field-base/text-field-base.js.map +1 -1
  355. package/skills/badge/SKILL.md +43 -0
  356. package/skills/buttons/SKILL.md +115 -0
  357. package/skills/card/SKILL.md +162 -0
  358. package/skills/chips/SKILL.md +95 -0
  359. package/skills/collapse/SKILL.md +37 -0
  360. package/skills/datepicker/SKILL.md +110 -0
  361. package/skills/dialog/SKILL.md +92 -0
  362. package/skills/drawer/SKILL.md +94 -0
  363. package/skills/expansion-panel/SKILL.md +65 -0
  364. package/skills/fab/SKILL.md +79 -0
  365. package/skills/list/SKILL.md +105 -0
  366. package/skills/menu/SKILL.md +120 -0
  367. package/skills/navigation-bar/SKILL.md +87 -0
  368. package/skills/navigation-rail/SKILL.md +127 -0
  369. package/skills/overview/SKILL.md +44 -0
  370. package/skills/progress/SKILL.md +63 -0
  371. package/skills/scaffold/SKILL.md +392 -0
  372. package/skills/search/SKILL.md +65 -0
  373. package/skills/select/SKILL.md +120 -0
  374. package/skills/selection-controls/SKILL.md +88 -0
  375. package/skills/setup/SKILL.md +58 -0
  376. package/skills/slider/SKILL.md +119 -0
  377. package/skills/snackbar/SKILL.md +70 -0
  378. package/skills/tab-bar/SKILL.md +55 -0
  379. package/skills/text-field/SKILL.md +114 -0
  380. package/skills/theming/SKILL.md +80 -0
  381. package/skills/top-app-bar/SKILL.md +64 -0
  382. package/skills/typeahead/SKILL.md +113 -0
  383. package/slider/slider.d.ts +73 -0
  384. package/slider/slider.d.ts.map +1 -0
  385. package/slider/slider.js +506 -0
  386. package/slider/slider.js.map +1 -0
  387. package/slider/slider.styles.d.ts +2 -0
  388. package/slider/slider.styles.d.ts.map +1 -0
  389. package/slider/slider.styles.js +292 -0
  390. package/slider/slider.styles.js.map +1 -0
  391. package/snackbar/snackbar.d.ts +4 -4
  392. package/snackbar/snackbar.d.ts.map +1 -1
  393. package/snackbar/snackbar.js +28 -28
  394. package/snackbar/snackbar.js.map +1 -1
  395. package/snackbar/snackbar.styles.js +1 -1
  396. package/snackbar/snackbar.styles.js.map +1 -1
  397. package/switch/switch-list-item.d.ts +4 -4
  398. package/switch/switch-list-item.d.ts.map +1 -1
  399. package/switch/switch-list-item.js +5 -5
  400. package/switch/switch-list-item.js.map +1 -1
  401. package/switch/switch.d.ts +3 -3
  402. package/switch/switch.d.ts.map +1 -1
  403. package/switch/switch.js +5 -5
  404. package/switch/switch.js.map +1 -1
  405. package/tab-bar/tab-bar.d.ts +6 -6
  406. package/tab-bar/tab-bar.d.ts.map +1 -1
  407. package/tab-bar/tab-bar.js +40 -23
  408. package/tab-bar/tab-bar.js.map +1 -1
  409. package/tab-bar/tab.d.ts +5 -5
  410. package/tab-bar/tab.d.ts.map +1 -1
  411. package/tab-bar/tab.js +9 -9
  412. package/tab-bar/tab.js.map +1 -1
  413. package/text-area/text-area.d.ts +3 -3
  414. package/text-area/text-area.d.ts.map +1 -1
  415. package/text-area/text-area.js +9 -9
  416. package/text-area/text-area.js.map +1 -1
  417. package/text-field/text-field.d.ts +15 -3
  418. package/text-field/text-field.d.ts.map +1 -1
  419. package/text-field/text-field.js +46 -13
  420. package/text-field/text-field.js.map +1 -1
  421. package/typeahead/highlight.d.ts +2 -2
  422. package/typeahead/highlight.d.ts.map +1 -1
  423. package/typeahead/highlight.js +7 -7
  424. package/typeahead/highlight.js.map +1 -1
  425. package/typeahead/typeahead.d.ts +7 -7
  426. package/typeahead/typeahead.d.ts.map +1 -1
  427. package/typeahead/typeahead.js +22 -18
  428. package/typeahead/typeahead.js.map +1 -1
  429. package/vscode.html-custom-data.json +870 -481
@@ -0,0 +1,92 @@
1
+ ---
2
+ description: Show modal dialogs — declarative u-dialog with slots, or imperative Dialog.message() / Dialog.confirm() builders.
3
+ ---
4
+
5
+ # Dialog
6
+
7
+ Two patterns: a declarative `<u-dialog>` you keep in markup and `show()`/`close()` programmatically, or one-shot imperative builders for the common alert/confirm flows.
8
+
9
+ ## Declarative
10
+
11
+ ```html
12
+ <u-button (click)="dialog.show()">Open dialog</u-button>
13
+
14
+ <u-dialog #dialog>
15
+ <span class="material-symbols-outlined" slot="icon">mobile_friendly</span>
16
+ <span slot="headline">Update available</span>
17
+ <span>A new version of the app is ready. Restart now to apply the update.</span>
18
+ <u-button slot="actions" variant="text" (click)="dialog.close('ok')">Restart</u-button>
19
+ <u-button slot="actions" variant="text" (click)="dialog.close('cancel')">Later</u-button>
20
+ </u-dialog>
21
+ ```
22
+
23
+ Slots: `icon`, `headline`, default (body), `actions`. Each is optional.
24
+
25
+ API:
26
+ - `show()` / `close(returnValue?)` — open / close. Closing with a value sets `dialog.returnValue`.
27
+ - `open` property mirrors `show()`/`close()`.
28
+ - `closed` and `cancel` events. Calling `event.preventDefault()` on `cancel` blocks dismissal.
29
+
30
+ ### `<form method="dialog">`
31
+
32
+ Buttons with `form="form-id" value="…"` inside a `method="dialog"` form close the dialog with the submitter's value:
33
+
34
+ ```html
35
+ <u-dialog #d>
36
+ <span slot="headline">Rename file</span>
37
+ <form id="rename" method="dialog">
38
+ <u-text-field label="File name" autofocus name="filename"></u-text-field>
39
+ </form>
40
+ <u-button slot="actions" variant="text" form="rename" value="save">Save</u-button>
41
+ <u-button slot="actions" variant="text" form="rename" value="cancel">Cancel</u-button>
42
+ </u-dialog>
43
+ ```
44
+
45
+ ### Long content
46
+
47
+ The dialog draws subtle dividers above the headline and below the actions when the body overflows. No extra setup needed — just put your content in the default slot.
48
+
49
+ ### Action button order
50
+
51
+ `.actions` uses `flex-direction: row-reverse`, so the **first child in DOM order renders on the right** (the confirming action, per M3). Always put the affirmative button first in markup.
52
+
53
+ ## Imperative — message
54
+
55
+ One-shot alert dialog with a single acknowledge button. Removes itself from the DOM on close.
56
+
57
+ ```ts
58
+ import { Dialog } from '@universal-material/web';
59
+
60
+ Dialog
61
+ .message('Your changes have been saved.')
62
+ .headline('Saved')
63
+ .acknowledgeButton({ label: 'Got it', variant: 'filled' })
64
+ .show();
65
+ ```
66
+
67
+ ## Imperative — confirm
68
+
69
+ One-shot confirm dialog. `show()` returns a `Promise<boolean>` that resolves `true` on confirm, `false` on cancel/dismiss.
70
+
71
+ ```ts
72
+ import { Dialog } from '@universal-material/web';
73
+
74
+ const ok = await Dialog
75
+ .confirm('This action cannot be undone. Continue?')
76
+ .headline('Delete item')
77
+ .confirmButton({ label: 'Delete', variant: 'filled', color: 'error' })
78
+ .cancelButton({ label: 'Keep it' })
79
+ .show();
80
+
81
+ if (ok) {
82
+ // …perform deletion
83
+ }
84
+ ```
85
+
86
+ `confirmButton` / `cancelButton` accept any `{ variant, color, label }` — omitted fields fall back to defaults from `config.dialog.confirmDefaults`.
87
+
88
+ ## Caveats
89
+
90
+ - The dialog opens via `<dialog>.showModal()` so it stacks above everything (no z-index gymnastics) and traps focus.
91
+ - The imperative builders run their lifecycle outside any framework's change-detection zone (the closed event fires from a transition listener). In Angular, call `ChangeDetectorRef.detectChanges()` after `await …show()` if the resolved value drives template bindings.
92
+ - Don't import `'@universal-material/web/dialog/dialog-builder.js'` directly — it doesn't register `u-button`; use the package root or the dialog entry which already pulls it in.
@@ -0,0 +1,94 @@
1
+ ---
2
+ description: Add a side navigation drawer to an app — sections with headlines, drawer items with icons and badges, toggleable on mobile.
3
+ ---
4
+
5
+ # Side navigation drawer
6
+
7
+ `<u-side-navigation>` wraps a page with a left-side drawer (`<u-drawer>`) that toggles open/closed. Inside the drawer, group items with `<u-drawer-headline>` and use `<u-drawer-item>` for each link.
8
+
9
+ ## Basic usage
10
+
11
+ ```html
12
+ <u-side-navigation #nav>
13
+ <u-top-app-bar headline="My app">
14
+ <u-icon-button slot="leading-icon" type="button"
15
+ (click)="nav.toggleDrawer = !nav.toggleDrawer">
16
+ <span class="material-symbols-outlined">menu</span>
17
+ </u-icon-button>
18
+ </u-top-app-bar>
19
+
20
+ <u-drawer slot="drawer">
21
+ <u-drawer-headline>Library</u-drawer-headline>
22
+ <u-drawer-item active>
23
+ <span class="material-symbols-outlined" slot="icon">home</span>
24
+ Home
25
+ </u-drawer-item>
26
+ <u-drawer-item>
27
+ <span class="material-symbols-outlined" slot="icon">favorite</span>
28
+ Favorites
29
+ <span slot="badge">12</span>
30
+ </u-drawer-item>
31
+
32
+ <u-drawer-headline>Account</u-drawer-headline>
33
+ <u-drawer-item>
34
+ <span class="material-symbols-outlined" slot="icon">settings</span>
35
+ Settings
36
+ </u-drawer-item>
37
+ </u-drawer>
38
+
39
+ <!-- the main page content goes here as light DOM -->
40
+ <div class="u-container">
41
+ Page body
42
+ </div>
43
+ </u-side-navigation>
44
+ ```
45
+
46
+ The side-navigation:
47
+ - responsively shows the drawer permanently on wide viewports and toggles it as an overlay on narrow ones,
48
+ - sets `--u-app-bar-offset` so the slotted top app bar slides with the drawer,
49
+ - exposes `.toggleDrawer` (boolean) for programmatic control.
50
+
51
+ ## Drawer items
52
+
53
+ `<u-drawer-item>` slots:
54
+ - default — the label,
55
+ - `icon` — leading icon (24dp),
56
+ - `badge` — trailing badge **content** (plain text in a `<span slot="badge">`, e.g. a count). The drawer item styles this itself — it pins the content to the trailing edge inline with the row.
57
+
58
+ **Don't put a `<u-badge>` in the `badge` slot.** `<u-badge>` is the *floating* badge used to dot the corner of an icon (notification bell, rail item); it's `position: absolute`. Dropped into a drawer item's inline `badge` slot it floats out of place instead of sitting at the row's trailing edge. Pass the value as a `<span slot="badge">12</span>` — the drawer item provides the badge treatment. (Note this differs from `<u-navigation-rail-item>`, whose collapsed state *does* take a `<u-badge>` because the badge floats over the icon there.)
59
+
60
+ Attributes:
61
+ - `active` — highlights the item with the secondary-container pill (M3 active state).
62
+ - `href` / `target` — renders as a link instead of a button.
63
+ - `keep-drawer-open` — by default, clicking an item auto-closes the drawer on mobile; set this to disable.
64
+
65
+ ## Routing
66
+
67
+ For framework routing, set `routerLink` (Angular) / `to` (Vue Router) / `href` on the item and let the framework's link directive handle navigation; the drawer item still emits a click and auto-closes the drawer.
68
+
69
+ ## Sections
70
+
71
+ Group items with `<u-drawer-headline>` between them. The headline renders a small label-style title above its section.
72
+
73
+ ## Background — and the trap when slotting a drawer into a pane
74
+
75
+ `<u-drawer>` paints its own background, and that color is **breakpoint-dependent**:
76
+ - below `lg`: `--u-modal-drawer-bg-color` (default `surface-container-low`) — the modal drawer surface;
77
+ - at `lg`+: `--u-standard-drawer-bg-color` (default `surface` / body) — a *standard* permanent drawer is meant to read as part of the page background, so it deliberately matches `surface`.
78
+
79
+ That default is correct for a drawer used directly inside `<u-side-navigation>`. **But if you slot a `<u-drawer>` into a `<u-pane variant="filled">` (e.g. a settings section-nav in a list-detail), the drawer's surface paints over the pane's filled background.** The visible bug: the nav column shows a background at small/medium widths, then goes flat/background-less on desktop — because at `lg`+ the drawer flips to `surface` (= the scaffold body) and erases the pane's fill. It looks like the pane "lost its background"; really the drawer is painting on top with body color.
80
+
81
+ Fix it at the drawer: when the pane is the surface, make the drawer transparent so the pane shows through at every breakpoint.
82
+
83
+ ```html
84
+ <u-pane variant="filled" style="--u-modal-drawer-bg-color: transparent; --u-standard-drawer-bg-color: transparent;">
85
+ <u-drawer>…</u-drawer>
86
+ </u-pane>
87
+ ```
88
+
89
+ (The two custom properties are inherited, so setting them on the pane reaches the drawer.) Don't try to fix it by raising the *pane's* `--u-pane-filled-bg-color` — the drawer still paints over it on desktop, so the column stays flat.
90
+
91
+ ## Caveats
92
+
93
+ - The drawer is a sibling of the page content inside `<u-side-navigation>`, not a child of the top bar. Don't nest it under the bar.
94
+ - On wide viewports the drawer is permanent; the toggle button still works but the drawer never closes. Use `keep-drawer-open` on items you'd otherwise want auto-closing only on mobile — it's safe either way.
@@ -0,0 +1,65 @@
1
+ ---
2
+ description: Use u-expansion-panel for collapsible sections; wrap in u-expansion-panel-container for accordion behavior.
3
+ ---
4
+
5
+ # Expansion panel
6
+
7
+ Collapsible surface with a clickable header (with ripple + chevron). Animates via the internal [[collapse]] component.
8
+
9
+ ## Single panel
10
+
11
+ ```html
12
+ <u-expansion-panel>
13
+ <span slot="header">What is Material 3 Expressive?</span>
14
+ <div style="padding: 0 1rem 1rem;">
15
+ Material 3 Expressive is the latest iteration of Material Design.
16
+ </div>
17
+ </u-expansion-panel>
18
+ ```
19
+
20
+ ## Accordion (exclusive)
21
+
22
+ Wrap multiple panels in `u-expansion-panel-container` — opening one closes the others.
23
+
24
+ ```html
25
+ <u-expansion-panel-container>
26
+ <u-expansion-panel>
27
+ <span slot="header">Account</span>
28
+ <div style="padding: 0 1rem 1rem;">Manage email, password, and connected services.</div>
29
+ </u-expansion-panel>
30
+ <u-expansion-panel>
31
+ <span slot="header">Notifications</span>
32
+ <div style="padding: 0 1rem 1rem;">Choose how and when you want to be notified.</div>
33
+ </u-expansion-panel>
34
+ </u-expansion-panel-container>
35
+ ```
36
+
37
+ ## Multi (independent panels)
38
+
39
+ Add `multi` to keep multiple panels open simultaneously.
40
+
41
+ ```html
42
+ <u-expansion-panel-container multi>
43
+ <u-expansion-panel expanded>
44
+ <span slot="header">Always-open</span>
45
+ <div style="padding: 0 1rem 1rem;">Set <code>expanded</code> for the initial state.</div>
46
+ </u-expansion-panel>
47
+ <u-expansion-panel>
48
+ <span slot="header">Independent</span>
49
+ <div style="padding: 0 1rem 1rem;">Stays open when others open.</div>
50
+ </u-expansion-panel>
51
+ </u-expansion-panel-container>
52
+ ```
53
+
54
+ ## Attributes
55
+
56
+ - `expanded` — current open state. Reflects to the attribute; dispatches `change` (bubbles, composed) when toggled.
57
+ - `disabled` — prevents toggling and silences the ripple.
58
+ - `hide-toggle` — hides the default chevron icon.
59
+ - `multi` (container) — allow multiple panels open at once.
60
+
61
+ ## Caveats
62
+
63
+ - Put the header content in `slot="header"`. The default slot is the panel body (wrapped internally in `u-collapse`).
64
+ - The container coordinates panels via the `change` event bubbling out of each panel — works with panels added/removed dynamically.
65
+ - Sibling-close logic uses `querySelectorAll('u-expansion-panel')` against direct descendants of the container only — nested containers operate independently.
@@ -0,0 +1,79 @@
1
+ ---
2
+ description: Add a floating action button — u-fab (single primary action), u-fab-menu (expandable speed-dial with multiple items).
3
+ ---
4
+
5
+ # FAB and FAB menu
6
+
7
+ ## `<u-fab>` — single primary action
8
+
9
+ ```html
10
+ <u-fab>
11
+ <span class="material-symbols-outlined">edit</span>
12
+ </u-fab>
13
+ ```
14
+
15
+ Colors: `primary` (default), `secondary`, `tertiary`, `surface`, `branded`.
16
+ Sizes: `small`, `medium` (default), `large`.
17
+
18
+ Extended FAB (with label):
19
+
20
+ ```html
21
+ <u-fab label="Compose">
22
+ <span class="material-symbols-outlined">edit</span>
23
+ </u-fab>
24
+ ```
25
+
26
+ Lowered elevation:
27
+
28
+ ```html
29
+ <u-fab lowered>
30
+ <span class="material-symbols-outlined">add</span>
31
+ </u-fab>
32
+ ```
33
+
34
+ ## Positioning
35
+
36
+ Inside a `<u-scaffold>`, drop the FAB in the `fab` slot — it's anchored to the scaffold's bottom-right with the correct M3 16dp gap, and offsets above the navigation bar automatically:
37
+
38
+ ```html
39
+ <u-scaffold>
40
+ <!-- … top-bar, content, bottom-bar … -->
41
+ <u-fab slot="fab" color="primary">
42
+ <span class="material-symbols-outlined">edit</span>
43
+ </u-fab>
44
+ </u-scaffold>
45
+ ```
46
+
47
+ For ad-hoc placement, wrap the FAB in a positioned container.
48
+
49
+ ## `<u-fab-menu>` — speed-dial
50
+
51
+ A FAB that toggles into multiple `<u-fab-menu-item>`s when clicked:
52
+
53
+ ```html
54
+ <u-fab-menu color="primary">
55
+ <span class="material-symbols-outlined" slot="icon">add</span>
56
+
57
+ <u-fab-menu-item label="New doc">
58
+ <span class="material-symbols-outlined">description</span>
59
+ </u-fab-menu-item>
60
+ <u-fab-menu-item label="New folder">
61
+ <span class="material-symbols-outlined">folder</span>
62
+ </u-fab-menu-item>
63
+ <u-fab-menu-item label="Upload">
64
+ <span class="material-symbols-outlined">upload</span>
65
+ </u-fab-menu-item>
66
+ </u-fab-menu>
67
+ ```
68
+
69
+ Slots on `<u-fab-menu>`:
70
+ - `icon` — the closed-state icon (e.g. `add`),
71
+ - `close-icon` — the open-state icon (defaults to an "×").
72
+
73
+ The toggle FAB animates between the two icons; menu items animate in/out around it.
74
+
75
+ ## Caveats
76
+
77
+ - `<u-fab-menu>` keeps `pointer-events: none` on its host so the invisible menu-items area (when closed) passes clicks through to whatever is behind it. Don't blanket-override slotted children with `pointer-events: auto`.
78
+ - When slotted into `<u-scaffold>` the scaffold neutralizes the FAB menu's internal `--u-fab-menu-toggle-margin` so the visible toggle aligns with the wrapper box (otherwise it would sit too close to the bottom bar).
79
+ - A FAB does not auto-react to scroll yet — the `scrollContainer` attribute is reserved for future hide-on-scroll behavior.
@@ -0,0 +1,105 @@
1
+ ---
2
+ description: Render Material 3 lists — u-list + u-list-item, with leading icons, supporting text, badges and trailing actions.
3
+ ---
4
+
5
+ # List
6
+
7
+ `<u-list>` is a vertical stack of `<u-list-item>`s. Each item supports leading and trailing slots, supporting text and selection states.
8
+
9
+ ## Basic
10
+
11
+ ```html
12
+ <u-list>
13
+ <u-list-item>Inbox</u-list-item>
14
+ <u-list-item>Drafts</u-list-item>
15
+ <u-list-item>Sent</u-list-item>
16
+ </u-list>
17
+ ```
18
+
19
+ ## Two-line items with icons
20
+
21
+ ```html
22
+ <u-list>
23
+ <u-list-item>
24
+ <span class="material-symbols-outlined" slot="leading-icon">person</span>
25
+ Maria Andrade
26
+ <span slot="supporting-text">maria@example.com</span>
27
+ </u-list-item>
28
+
29
+ <u-list-item>
30
+ <span class="material-symbols-outlined" slot="leading-icon">person</span>
31
+ Carlos Pereira
32
+ <span slot="supporting-text">carlos@example.com</span>
33
+ </u-list-item>
34
+ </u-list>
35
+ ```
36
+
37
+ ## Trailing content
38
+
39
+ ```html
40
+ <u-list-item>
41
+ <span class="material-symbols-outlined" slot="leading-icon">archive</span>
42
+ Archive
43
+ <u-icon-button slot="trailing-icon">
44
+ <span class="material-symbols-outlined">chevron_right</span>
45
+ </u-icon-button>
46
+ </u-list-item>
47
+ ```
48
+
49
+ ## Selectable rows
50
+
51
+ `selectable` adds the ripple + hover **state layer** so the row reads as interactive:
52
+
53
+ ```html
54
+ <u-list>
55
+ <u-list-item selectable onclick="…">One</u-list-item>
56
+ <u-list-item selectable onclick="…">Two</u-list-item>
57
+ </u-list>
58
+ ```
59
+
60
+ For a persistent **active / selected** highlight (e.g. the open row in a list-detail or mail list), use the **`selected`** attribute/property — it paints the M3 selected container (`secondary-container` / `on-secondary-container`):
61
+
62
+ ```html
63
+ <u-list>
64
+ <u-list-item selectable selected>One</u-list-item>
65
+ <u-list-item selectable>Two</u-list-item>
66
+ </u-list>
67
+ <script>
68
+ list.addEventListener('click', (e) => {
69
+ const item = e.target.closest('u-list-item');
70
+ if (!item) return;
71
+ list.querySelectorAll('u-list-item[selected]').forEach((i) => (i.selected = false));
72
+ item.selected = true;
73
+ });
74
+ </script>
75
+ ```
76
+
77
+ Override the selected colors per call site with `--u-list-item-selected-container-color` / `--u-list-item-selected-label-color`. For selection lists tied to a form value, use the dedicated `<u-checkbox-list-item>`, `<u-radio-list-item>`, or `<u-switch-list-item>` (see the **selection-controls** skill).
78
+
79
+ ## Aligning a row flush (`no-inset`)
80
+
81
+ List items carry a 16dp inline inset, so their content sits indented from adjacent non-list content (section headings, paragraph labels). Add **`no-inset`** to pull the row flush — it cancels the inline padding with an equal negative inline margin, so the content lines up with the surrounding labels (the state layer bleeds to the container edges):
82
+
83
+ ```html
84
+ <div class="u-title-s">Channels</div>
85
+ <u-list>
86
+ <u-list-item no-inset>Email</u-list-item>
87
+ <u-list-item no-inset>Push</u-list-item>
88
+ </u-list>
89
+ ```
90
+
91
+ The `*-list-item` selection variants accept `no-inset` too (it's forwarded to their inner list item) — handy in settings sections where the row should line up with the heading.
92
+
93
+ ## Three-line items
94
+
95
+ A second line of supporting text wraps automatically when content exceeds one line; for an explicitly tall three-line variant, use multiple `<span slot="supporting-text">` lines.
96
+
97
+ ## Dividers and sections
98
+
99
+ For grouped lists with headlines, mix `<u-drawer-headline>`-style elements between groups, or use the `card`/`outlined-card` containers around each section.
100
+
101
+ ## Caveats
102
+
103
+ - `<u-list-item>` slots accept any node — keep leading/trailing icons inside `<span class="material-symbols-outlined">` or `<u-icon-button>` for consistent sizing.
104
+ - `<u-list>` is unopinionated about scrolling. For long lists inside a constrained container, wrap the list in a `<div style="overflow:auto; max-height: …">`.
105
+ - For very long lists (1000+ items), the M3 list is fine but consider virtualization (`@lit-labs/virtualizer`).
@@ -0,0 +1,120 @@
1
+ ---
2
+ description: Open contextual menus — u-menu and u-menu-item for popovers anchored to a trigger, plus u-overflow-menu for action bars that auto-collapse on narrow widths.
3
+ ---
4
+
5
+ # Menus
6
+
7
+ ## `<u-menu>` + `<u-menu-item>` — popover
8
+
9
+ A floating surface anchored to a trigger. Open with `.show()`/`.toggle()`/`.close()` (or by setting `open`):
10
+
11
+ ```html
12
+ <u-icon-button (click)="menu.toggle()">
13
+ <span class="material-symbols-outlined">more_vert</span>
14
+ </u-icon-button>
15
+
16
+ <u-menu #menu>
17
+ <u-menu-item>
18
+ <span class="material-symbols-outlined" slot="leading-icon">edit</span>
19
+ Edit
20
+ </u-menu-item>
21
+ <u-menu-item>
22
+ <span class="material-symbols-outlined" slot="leading-icon">content_copy</span>
23
+ Duplicate
24
+ </u-menu-item>
25
+ <u-menu-item>
26
+ <span class="material-symbols-outlined" slot="leading-icon">delete</span>
27
+ Delete
28
+ </u-menu-item>
29
+ </u-menu>
30
+ ```
31
+
32
+ By default the menu anchors to its parent element. Set `anchorElement` explicitly when needed:
33
+
34
+ ```ts
35
+ menu.anchorElement = triggerButton;
36
+ ```
37
+
38
+ ## Positioning
39
+
40
+ - **`anchor-corner`** — which corner of the anchor the menu attaches to. Supports `start-start`, `start-end`, `end-start`, `end-end`, plus `auto-start` / `auto-end` (auto picks top vs bottom based on space).
41
+ - **`direction`** — which way the menu grows: `up-start`, `up-end`, `down-start`, `down-end` (default).
42
+
43
+ For a dropdown right under the trigger, the defaults work. For a "more" menu in a top app bar, use `anchor-corner="end-end"`:
44
+
45
+ ```html
46
+ <u-menu anchor-corner="end-end" direction="down-start">…</u-menu>
47
+ ```
48
+
49
+ ## Clipped containers
50
+
51
+ If the menu lives inside a `overflow: hidden` or scrollable wrapper, set `positioning="fixed"` so it escapes:
52
+
53
+ ```html
54
+ <u-menu positioning="fixed">…</u-menu>
55
+ ```
56
+
57
+ ## Auto-close
58
+
59
+ - `autoclose="outside"` (default-ish) — closes on outside clicks but not on clicks inside the menu.
60
+ - `autoclose="true"` — closes on any click anywhere.
61
+ - `autoclose="false"` — never auto-closes; you manage it.
62
+
63
+ ## `<u-overflow-menu>` — responsive action bar
64
+
65
+ A horizontal row of `<u-overflow-menu-item>`s that automatically collapses items into a "more" menu when there isn't enough horizontal space:
66
+
67
+ ```html
68
+ <u-overflow-menu>
69
+ <u-overflow-menu-item label="Bold">
70
+ <span class="material-symbols-outlined">format_bold</span>
71
+ </u-overflow-menu-item>
72
+ <u-overflow-menu-item label="Italic">
73
+ <span class="material-symbols-outlined">format_italic</span>
74
+ </u-overflow-menu-item>
75
+ <u-overflow-menu-item label="Underline">
76
+ <span class="material-symbols-outlined">format_underlined</span>
77
+ </u-overflow-menu-item>
78
+ <u-overflow-menu-item label="Strikethrough">
79
+ <span class="material-symbols-outlined">format_strikethrough</span>
80
+ </u-overflow-menu-item>
81
+
82
+ <!-- Items marked collapse="always" never render inline -->
83
+ <u-overflow-menu-item label="Delete" collapse="always">
84
+ <span class="material-symbols-outlined">delete</span>
85
+ </u-overflow-menu-item>
86
+ </u-overflow-menu>
87
+ ```
88
+
89
+ Inside a clipped wrapper (e.g. a card with `overflow: hidden`), set `menuPositioning="fixed"` so the popover can escape:
90
+
91
+ ```html
92
+ <u-overflow-menu menuPositioning="fixed">…</u-overflow-menu>
93
+ ```
94
+
95
+ ### Row "kebab" (all actions behind one trigger)
96
+
97
+ Mark every item `collapse="always"` so nothing renders inline and only the "more" trigger shows. Items render as **icon buttons** — the `label` is the tooltip/aria text, not visible — so give each an icon. Activation bubbles a `click` from the item; delegate and read it:
98
+
99
+ ```html
100
+ <u-overflow-menu menuPositioning="fixed">
101
+ <u-overflow-menu-item label="Ver" collapse="always"><span class="material-symbols-outlined">visibility</span></u-overflow-menu-item>
102
+ <u-overflow-menu-item label="Editar" collapse="always"><span class="material-symbols-outlined">edit</span></u-overflow-menu-item>
103
+ <u-overflow-menu-item label="Excluir" collapse="always"><span class="material-symbols-outlined">delete</span></u-overflow-menu-item>
104
+ </u-overflow-menu>
105
+
106
+ <script>
107
+ table.addEventListener('click', (e) => {
108
+ const item = e.target.closest('u-overflow-menu-item');
109
+ if (item) doAction(item.getAttribute('label'), e.target.closest('tr'));
110
+ });
111
+ </script>
112
+ ```
113
+
114
+ For a single-trigger row menu, `<u-icon-button>` + `<u-menu>` (with `menu.anchorElement = theButton`) is often simpler than `<u-overflow-menu>`.
115
+
116
+ ## Caveats
117
+
118
+ - A `<u-menu>` is not modal — it doesn't trap focus or scrim the background. Use `<u-dialog>` for modal flows.
119
+ - The overflow menu watches its anchor size with a `ResizeObserver`. If you swap the anchor or animate the container, it re-runs the layout pass automatically.
120
+ - `manualFocus` on `<u-menu>` disables the default auto-focus of the first item on open — useful when the menu wraps a calendar or other custom popover content.
@@ -0,0 +1,87 @@
1
+ ---
2
+ description: Build a Material 3 navigation bar — destinations with icon + label, vertical or horizontal layout, active indicator pill.
3
+ ---
4
+
5
+ # Navigation bar
6
+
7
+ `<u-navigation-bar>` hosts 3–5 top-level destinations at the bottom of a screen. Use `<u-navigation-bar-item>` for each destination — they render the active indicator pill, icon, and label per M3 expressive tokens.
8
+
9
+ ## Default (vertical) layout
10
+
11
+ ```html
12
+ <u-navigation-bar>
13
+ <u-navigation-bar-item active>
14
+ <span class="material-symbols-outlined" slot="icon">home</span>
15
+ Home
16
+ </u-navigation-bar-item>
17
+ <u-navigation-bar-item>
18
+ <span class="material-symbols-outlined" slot="icon">explore</span>
19
+ Browse
20
+ </u-navigation-bar-item>
21
+ <u-navigation-bar-item>
22
+ <span class="material-symbols-outlined" slot="icon">radio</span>
23
+ Radio
24
+ </u-navigation-bar-item>
25
+ <u-navigation-bar-item>
26
+ <span class="material-symbols-outlined" slot="icon">library_music</span>
27
+ Library
28
+ </u-navigation-bar-item>
29
+ </u-navigation-bar>
30
+ ```
31
+
32
+ M3 tokens applied automatically:
33
+ - container: 64dp height, `surface-container` color, level-2 elevation
34
+ - active indicator pill: 56×32dp, `secondary-container`
35
+ - icon: 24dp, `on-secondary-container` (active) / `on-surface-variant` (inactive)
36
+ - label: label-medium, `secondary` (active) / `on-surface-variant` (inactive)
37
+
38
+ ## Horizontal variant
39
+
40
+ For wider items where icon and label sit side-by-side inside a 40dp pill:
41
+
42
+ ```html
43
+ <u-navigation-bar>
44
+ <u-navigation-bar-item variant="horizontal" active>
45
+ <span class="material-symbols-outlined" slot="icon">home</span>
46
+ Home
47
+ </u-navigation-bar-item>
48
+ <u-navigation-bar-item variant="horizontal">
49
+ <span class="material-symbols-outlined" slot="icon">explore</span>
50
+ Browse
51
+ </u-navigation-bar-item>
52
+ </u-navigation-bar>
53
+ ```
54
+
55
+ ## Slots on `<u-navigation-bar-item>`
56
+
57
+ | Slot | Content |
58
+ | --- | --- |
59
+ | default | Destination label (text). |
60
+ | `icon` | 24dp icon (`<span class="material-symbols-outlined">…</span>`). |
61
+ | `badge` | Optional `<u-badge>` — auto-positions over the icon. |
62
+
63
+ ## Tracking selection
64
+
65
+ ```html
66
+ <u-navigation-bar id="nav">…</u-navigation-bar>
67
+
68
+ <script>
69
+ const nav = document.getElementById('nav');
70
+ nav.addEventListener('click', (e) => {
71
+ const item = e.target.closest('u-navigation-bar-item');
72
+ if (!item) return;
73
+ [...nav.children].forEach(i => i.active = i === item);
74
+ });
75
+ </script>
76
+ ```
77
+
78
+ In Angular/React, bind `[active]="route === 'home'"` on each item and switch the route on click.
79
+
80
+ ## Positioning
81
+
82
+ Same model as `<u-top-app-bar>`: `position="fixed"` by default (viewport bottom), or `position="absolute"` when slotted in a `<u-scaffold>` (auto-set). The internal `.spacing` filler reserves the bar's height in the scrolled flow so content isn't obscured.
83
+
84
+ ## Caveats
85
+
86
+ - Each item should have an icon AND a label per M3 spec; icon-only items look broken at 64dp.
87
+ - Don't use `<u-icon-button>` instead of `<u-navigation-bar-item>` — you'll lose the active indicator pill, label, and badge slot.