@universal-material/web 3.7.2 → 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 (453) 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 +20 -4
  4. package/app-bar/top-app-bar.d.ts.map +1 -1
  5. package/app-bar/top-app-bar.js +84 -33
  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 +5 -2
  11. package/badge/badge.d.ts.map +1 -1
  12. package/badge/badge.js +9 -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 +5480 -2170
  18. package/button/button-base.d.ts +9 -2
  19. package/button/button-base.d.ts.map +1 -1
  20. package/button/button-base.js +12 -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 +10 -7
  27. package/button/button.d.ts.map +1 -1
  28. package/button/button.js +17 -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 +13 -7
  46. package/button/icon-button.d.ts.map +1 -1
  47. package/button/icon-button.js +14 -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 +6 -3
  54. package/button-field/button-field.d.ts.map +1 -1
  55. package/button-field/button-field.js +12 -9
  56. package/button-field/button-field.js.map +1 -1
  57. package/calendar/calendar-adapter.d.ts +3 -0
  58. package/calendar/calendar-adapter.d.ts.map +1 -1
  59. package/calendar/calendar-adapter.js.map +1 -1
  60. package/calendar/calendar-base.d.ts +18 -1
  61. package/calendar/calendar-base.d.ts.map +1 -1
  62. package/calendar/calendar-base.js +188 -25
  63. package/calendar/calendar-base.js.map +1 -1
  64. package/calendar/calendar.d.ts +6 -2
  65. package/calendar/calendar.d.ts.map +1 -1
  66. package/calendar/calendar.js +12 -8
  67. package/calendar/calendar.js.map +1 -1
  68. package/calendar/default-calendar-adapter.d.ts +3 -0
  69. package/calendar/default-calendar-adapter.d.ts.map +1 -1
  70. package/calendar/default-calendar-adapter.js +17 -5
  71. package/calendar/default-calendar-adapter.js.map +1 -1
  72. package/calendar/range-calendar.d.ts +2 -2
  73. package/calendar/range-calendar.d.ts.map +1 -1
  74. package/calendar/range-calendar.js +9 -9
  75. package/calendar/range-calendar.js.map +1 -1
  76. package/card/card-content.d.ts +7 -2
  77. package/card/card-content.d.ts.map +1 -1
  78. package/card/card-content.js +10 -5
  79. package/card/card-content.js.map +1 -1
  80. package/card/card-media.d.ts +5 -2
  81. package/card/card-media.d.ts.map +1 -1
  82. package/card/card-media.js +8 -5
  83. package/card/card-media.js.map +1 -1
  84. package/card/card.d.ts +4 -4
  85. package/card/card.d.ts.map +1 -1
  86. package/card/card.js +5 -5
  87. package/card/card.js.map +1 -1
  88. package/checkbox/checkbox-list-item.d.ts +4 -4
  89. package/checkbox/checkbox-list-item.d.ts.map +1 -1
  90. package/checkbox/checkbox-list-item.js +5 -5
  91. package/checkbox/checkbox-list-item.js.map +1 -1
  92. package/checkbox/checkbox.d.ts +10 -3
  93. package/checkbox/checkbox.d.ts.map +1 -1
  94. package/checkbox/checkbox.js +14 -7
  95. package/checkbox/checkbox.js.map +1 -1
  96. package/chip/chip-set.d.ts +3 -3
  97. package/chip/chip-set.d.ts.map +1 -1
  98. package/chip/chip-set.js +6 -6
  99. package/chip/chip-set.js.map +1 -1
  100. package/chip/chip.d.ts +8 -5
  101. package/chip/chip.d.ts.map +1 -1
  102. package/chip/chip.js +23 -20
  103. package/chip/chip.js.map +1 -1
  104. package/chip-field/chip-field.d.ts +6 -3
  105. package/chip-field/chip-field.d.ts.map +1 -1
  106. package/chip-field/chip-field.js +9 -9
  107. package/chip-field/chip-field.js.map +1 -1
  108. package/collapse/collapse.d.ts +26 -0
  109. package/collapse/collapse.d.ts.map +1 -0
  110. package/collapse/collapse.js +62 -0
  111. package/collapse/collapse.js.map +1 -0
  112. package/collapse/collapse.styles.d.ts +2 -0
  113. package/collapse/collapse.styles.d.ts.map +1 -0
  114. package/collapse/collapse.styles.js +8 -0
  115. package/collapse/collapse.styles.js.map +1 -0
  116. package/config.js.map +1 -1
  117. package/css/universal-material.css +2 -1
  118. package/css/universal-material.min.css +2 -1
  119. package/custom-elements.json +17175 -9684
  120. package/datepicker/datepicker.d.ts +54 -3
  121. package/datepicker/datepicker.d.ts.map +1 -1
  122. package/datepicker/datepicker.js +202 -6
  123. package/datepicker/datepicker.js.map +1 -1
  124. package/datepicker/datepicker.styles.d.ts.map +1 -1
  125. package/datepicker/datepicker.styles.js +25 -0
  126. package/datepicker/datepicker.styles.js.map +1 -1
  127. package/datepicker/format.d.ts +19 -0
  128. package/datepicker/format.d.ts.map +1 -0
  129. package/datepicker/format.js +47 -0
  130. package/datepicker/format.js.map +1 -0
  131. package/datepicker/range-datepicker.d.ts +58 -0
  132. package/datepicker/range-datepicker.d.ts.map +1 -0
  133. package/datepicker/range-datepicker.js +212 -0
  134. package/datepicker/range-datepicker.js.map +1 -0
  135. package/dialog/confirm-dialog-builder.d.ts +3 -3
  136. package/dialog/confirm-dialog-builder.d.ts.map +1 -1
  137. package/dialog/confirm-dialog-builder.js.map +1 -1
  138. package/dialog/dialog-builder.d.ts +5 -4
  139. package/dialog/dialog-builder.d.ts.map +1 -1
  140. package/dialog/dialog-builder.js +10 -3
  141. package/dialog/dialog-builder.js.map +1 -1
  142. package/dialog/dialog-button-def.d.ts +3 -3
  143. package/dialog/dialog-button-def.d.ts.map +1 -1
  144. package/dialog/dialog-button-def.js.map +1 -1
  145. package/dialog/dialog.d.ts +10 -2
  146. package/dialog/dialog.d.ts.map +1 -1
  147. package/dialog/dialog.js +22 -14
  148. package/dialog/dialog.js.map +1 -1
  149. package/dialog/message-dialog-builder.d.ts +2 -2
  150. package/dialog/message-dialog-builder.d.ts.map +1 -1
  151. package/dialog/message-dialog-builder.js.map +1 -1
  152. package/elevation/elevation.d.ts +2 -2
  153. package/elevation/elevation.d.ts.map +1 -1
  154. package/elevation/elevation.js +4 -4
  155. package/elevation/elevation.js.map +1 -1
  156. package/expansion-panel/expansion-panel-container.d.ts +24 -0
  157. package/expansion-panel/expansion-panel-container.d.ts.map +1 -0
  158. package/expansion-panel/expansion-panel-container.js +54 -0
  159. package/expansion-panel/expansion-panel-container.js.map +1 -0
  160. package/expansion-panel/expansion-panel-container.styles.d.ts +2 -0
  161. package/expansion-panel/expansion-panel-container.styles.d.ts.map +1 -0
  162. package/expansion-panel/expansion-panel-container.styles.js +9 -0
  163. package/expansion-panel/expansion-panel-container.styles.js.map +1 -0
  164. package/expansion-panel/expansion-panel.d.ts +37 -0
  165. package/expansion-panel/expansion-panel.d.ts.map +1 -0
  166. package/expansion-panel/expansion-panel.js +89 -0
  167. package/expansion-panel/expansion-panel.js.map +1 -0
  168. package/expansion-panel/expansion-panel.styles.d.ts +2 -0
  169. package/expansion-panel/expansion-panel.styles.d.ts.map +1 -0
  170. package/expansion-panel/expansion-panel.styles.js +66 -0
  171. package/expansion-panel/expansion-panel.styles.js.map +1 -0
  172. package/field/field-base.d.ts +17 -3
  173. package/field/field-base.d.ts.map +1 -1
  174. package/field/field-base.js +30 -20
  175. package/field/field-base.js.map +1 -1
  176. package/field/field-defaults-context.d.ts +2 -2
  177. package/field/field-defaults-context.d.ts.map +1 -1
  178. package/field/field-defaults-context.js.map +1 -1
  179. package/field/field-defaults.d.ts +3 -3
  180. package/field/field-defaults.d.ts.map +1 -1
  181. package/field/field-defaults.js.map +1 -1
  182. package/field/field-variant.d.ts +1 -1
  183. package/field/field-variant.d.ts.map +1 -1
  184. package/field/field-variant.js.map +1 -1
  185. package/field/field.d.ts +7 -3
  186. package/field/field.d.ts.map +1 -1
  187. package/field/field.js +10 -6
  188. package/field/field.js.map +1 -1
  189. package/icon/icon.d.ts +2 -2
  190. package/icon/icon.d.ts.map +1 -1
  191. package/icon/icon.js +4 -4
  192. package/icon/icon.js.map +1 -1
  193. package/index.d.ts +29 -1
  194. package/index.d.ts.map +1 -1
  195. package/index.js +29 -1
  196. package/index.js.map +1 -1
  197. package/list/list-item.d.ts +19 -2
  198. package/list/list-item.d.ts.map +1 -1
  199. package/list/list-item.js +29 -6
  200. package/list/list-item.js.map +1 -1
  201. package/list/list-item.styles.d.ts.map +1 -1
  202. package/list/list-item.styles.js +13 -0
  203. package/list/list-item.styles.js.map +1 -1
  204. package/list/list.d.ts +2 -2
  205. package/list/list.d.ts.map +1 -1
  206. package/list/list.js +4 -4
  207. package/list/list.js.map +1 -1
  208. package/menu/menu-item.d.ts +9 -3
  209. package/menu/menu-item.d.ts.map +1 -1
  210. package/menu/menu-item.js +16 -10
  211. package/menu/menu-item.js.map +1 -1
  212. package/menu/menu.d.ts +18 -2
  213. package/menu/menu.d.ts.map +1 -1
  214. package/menu/menu.js +37 -18
  215. package/menu/menu.js.map +1 -1
  216. package/menu/menu.styles.d.ts.map +1 -1
  217. package/menu/menu.styles.js +5 -0
  218. package/menu/menu.styles.js.map +1 -1
  219. package/navigation/drawer-headline.d.ts +2 -2
  220. package/navigation/drawer-headline.d.ts.map +1 -1
  221. package/navigation/drawer-headline.js +6 -6
  222. package/navigation/drawer-headline.js.map +1 -1
  223. package/navigation/drawer-headline.styles.js +1 -1
  224. package/navigation/drawer-headline.styles.js.map +1 -1
  225. package/navigation/drawer-item.d.ts +3 -3
  226. package/navigation/drawer-item.d.ts.map +1 -1
  227. package/navigation/drawer-item.js +17 -12
  228. package/navigation/drawer-item.js.map +1 -1
  229. package/navigation/drawer.d.ts +2 -2
  230. package/navigation/drawer.d.ts.map +1 -1
  231. package/navigation/drawer.js +4 -4
  232. package/navigation/drawer.js.map +1 -1
  233. package/navigation/side-navigation.d.ts +9 -2
  234. package/navigation/side-navigation.d.ts.map +1 -1
  235. package/navigation/side-navigation.js +15 -8
  236. package/navigation/side-navigation.js.map +1 -1
  237. package/navigation-bar/navigation-bar-item.d.ts +40 -0
  238. package/navigation-bar/navigation-bar-item.d.ts.map +1 -0
  239. package/navigation-bar/navigation-bar-item.js +113 -0
  240. package/navigation-bar/navigation-bar-item.js.map +1 -0
  241. package/navigation-bar/navigation-bar-item.styles.d.ts +2 -0
  242. package/navigation-bar/navigation-bar-item.styles.d.ts.map +1 -0
  243. package/navigation-bar/navigation-bar-item.styles.js +101 -0
  244. package/navigation-bar/navigation-bar-item.styles.js.map +1 -0
  245. package/navigation-bar/navigation-bar.d.ts +40 -0
  246. package/navigation-bar/navigation-bar.d.ts.map +1 -0
  247. package/navigation-bar/navigation-bar.js +85 -0
  248. package/navigation-bar/navigation-bar.js.map +1 -0
  249. package/navigation-bar/navigation-bar.styles.d.ts +2 -0
  250. package/navigation-bar/navigation-bar.styles.d.ts.map +1 -0
  251. package/navigation-bar/navigation-bar.styles.js +44 -0
  252. package/navigation-bar/navigation-bar.styles.js.map +1 -0
  253. package/navigation-rail/navigation-rail-headline.d.ts +23 -0
  254. package/navigation-rail/navigation-rail-headline.d.ts.map +1 -0
  255. package/navigation-rail/navigation-rail-headline.js +28 -0
  256. package/navigation-rail/navigation-rail-headline.js.map +1 -0
  257. package/navigation-rail/navigation-rail-headline.styles.d.ts +2 -0
  258. package/navigation-rail/navigation-rail-headline.styles.d.ts.map +1 -0
  259. package/navigation-rail/navigation-rail-headline.styles.js +19 -0
  260. package/navigation-rail/navigation-rail-headline.styles.js.map +1 -0
  261. package/navigation-rail/navigation-rail-item.d.ts +58 -0
  262. package/navigation-rail/navigation-rail-item.d.ts.map +1 -0
  263. package/navigation-rail/navigation-rail-item.js +160 -0
  264. package/navigation-rail/navigation-rail-item.js.map +1 -0
  265. package/navigation-rail/navigation-rail-item.styles.d.ts +2 -0
  266. package/navigation-rail/navigation-rail-item.styles.d.ts.map +1 -0
  267. package/navigation-rail/navigation-rail-item.styles.js +182 -0
  268. package/navigation-rail/navigation-rail-item.styles.js.map +1 -0
  269. package/navigation-rail/navigation-rail.d.ts +66 -0
  270. package/navigation-rail/navigation-rail.d.ts.map +1 -0
  271. package/navigation-rail/navigation-rail.js +223 -0
  272. package/navigation-rail/navigation-rail.js.map +1 -0
  273. package/navigation-rail/navigation-rail.styles.d.ts +2 -0
  274. package/navigation-rail/navigation-rail.styles.d.ts.map +1 -0
  275. package/navigation-rail/navigation-rail.styles.js +220 -0
  276. package/navigation-rail/navigation-rail.styles.js.map +1 -0
  277. package/overflow-menu/overflow-menu-item.d.ts +8 -0
  278. package/overflow-menu/overflow-menu-item.d.ts.map +1 -1
  279. package/overflow-menu/overflow-menu-item.js +8 -0
  280. package/overflow-menu/overflow-menu-item.js.map +1 -1
  281. package/overflow-menu/overflow-menu.d.ts +8 -2
  282. package/overflow-menu/overflow-menu.d.ts.map +1 -1
  283. package/overflow-menu/overflow-menu.js +10 -1
  284. package/overflow-menu/overflow-menu.js.map +1 -1
  285. package/package.json +21 -5
  286. package/progress/circular-progress.d.ts +9 -2
  287. package/progress/circular-progress.d.ts.map +1 -1
  288. package/progress/circular-progress.js +9 -6
  289. package/progress/circular-progress.js.map +1 -1
  290. package/progress/progress-bar.d.ts +9 -2
  291. package/progress/progress-bar.d.ts.map +1 -1
  292. package/progress/progress-bar.js +9 -6
  293. package/progress/progress-bar.js.map +1 -1
  294. package/radio/radio-list-item.d.ts +4 -4
  295. package/radio/radio-list-item.d.ts.map +1 -1
  296. package/radio/radio-list-item.js +5 -5
  297. package/radio/radio-list-item.js.map +1 -1
  298. package/radio/radio.d.ts +6 -3
  299. package/radio/radio.d.ts.map +1 -1
  300. package/radio/radio.js +9 -6
  301. package/radio/radio.js.map +1 -1
  302. package/ripple/ripple.d.ts +2 -2
  303. package/ripple/ripple.d.ts.map +1 -1
  304. package/ripple/ripple.js +9 -9
  305. package/ripple/ripple.js.map +1 -1
  306. package/scaffold/pane.d.ts +127 -0
  307. package/scaffold/pane.d.ts.map +1 -0
  308. package/scaffold/pane.js +220 -0
  309. package/scaffold/pane.js.map +1 -0
  310. package/scaffold/pane.styles.d.ts +2 -0
  311. package/scaffold/pane.styles.d.ts.map +1 -0
  312. package/scaffold/pane.styles.js +1909 -0
  313. package/scaffold/pane.styles.js.map +1 -0
  314. package/scaffold/scaffold.d.ts +45 -0
  315. package/scaffold/scaffold.d.ts.map +1 -0
  316. package/scaffold/scaffold.js +170 -0
  317. package/scaffold/scaffold.js.map +1 -0
  318. package/scaffold/scaffold.styles.d.ts +2 -0
  319. package/scaffold/scaffold.styles.d.ts.map +1 -0
  320. package/scaffold/scaffold.styles.js +69 -0
  321. package/scaffold/scaffold.styles.js.map +1 -0
  322. package/scaffold/scroll-container-context.d.ts +4 -0
  323. package/scaffold/scroll-container-context.d.ts.map +1 -0
  324. package/scaffold/scroll-container-context.js +3 -0
  325. package/scaffold/scroll-container-context.js.map +1 -0
  326. package/scss/utilities/_divider.scss +4 -0
  327. package/search/search.d.ts +6 -3
  328. package/search/search.d.ts.map +1 -1
  329. package/search/search.js +10 -7
  330. package/search/search.js.map +1 -1
  331. package/search/search.styles.d.ts.map +1 -1
  332. package/search/search.styles.js +7 -2
  333. package/search/search.styles.js.map +1 -1
  334. package/select/option.d.ts +9 -3
  335. package/select/option.d.ts.map +1 -1
  336. package/select/option.js +14 -8
  337. package/select/option.js.map +1 -1
  338. package/select/select-navigation-controller.d.ts +4 -4
  339. package/select/select-navigation-controller.d.ts.map +1 -1
  340. package/select/select-navigation-controller.js.map +1 -1
  341. package/select/select.d.ts +22 -12
  342. package/select/select.d.ts.map +1 -1
  343. package/select/select.js +81 -31
  344. package/select/select.js.map +1 -1
  345. package/shared/button-wrapper.d.ts +4 -1
  346. package/shared/button-wrapper.d.ts.map +1 -1
  347. package/shared/button-wrapper.js +8 -8
  348. package/shared/button-wrapper.js.map +1 -1
  349. package/shared/char-count-text-field/native-text-field-wrapper.d.ts +15 -2
  350. package/shared/char-count-text-field/native-text-field-wrapper.d.ts.map +1 -1
  351. package/shared/char-count-text-field/native-text-field-wrapper.js +16 -6
  352. package/shared/char-count-text-field/native-text-field-wrapper.js.map +1 -1
  353. package/shared/menu-field/menu-field-navigation-controller.d.ts +3 -3
  354. package/shared/menu-field/menu-field-navigation-controller.d.ts.map +1 -1
  355. package/shared/menu-field/menu-field-navigation-controller.js.map +1 -1
  356. package/shared/menu-field/menu-field.d.ts +5 -5
  357. package/shared/menu-field/menu-field.d.ts.map +1 -1
  358. package/shared/menu-field/menu-field.js.map +1 -1
  359. package/shared/selection-control/selection-control-list-item.d.ts +2 -2
  360. package/shared/selection-control/selection-control-list-item.d.ts.map +1 -1
  361. package/shared/selection-control/selection-control-list-item.js +14 -1
  362. package/shared/selection-control/selection-control-list-item.js.map +1 -1
  363. package/shared/selection-control/selection-control.d.ts +10 -1
  364. package/shared/selection-control/selection-control.d.ts.map +1 -1
  365. package/shared/selection-control/selection-control.js +24 -7
  366. package/shared/selection-control/selection-control.js.map +1 -1
  367. package/shared/sets/set-base.d.ts +1 -1
  368. package/shared/sets/set-base.d.ts.map +1 -1
  369. package/shared/sets/set-base.js +2 -2
  370. package/shared/sets/set-base.js.map +1 -1
  371. package/shared/text-field-base/text-field-base.d.ts +37 -2
  372. package/shared/text-field-base/text-field-base.d.ts.map +1 -1
  373. package/shared/text-field-base/text-field-base.js +66 -4
  374. package/shared/text-field-base/text-field-base.js.map +1 -1
  375. package/skills/badge/SKILL.md +43 -0
  376. package/skills/buttons/SKILL.md +115 -0
  377. package/skills/card/SKILL.md +162 -0
  378. package/skills/chips/SKILL.md +95 -0
  379. package/skills/collapse/SKILL.md +37 -0
  380. package/skills/datepicker/SKILL.md +110 -0
  381. package/skills/dialog/SKILL.md +92 -0
  382. package/skills/drawer/SKILL.md +94 -0
  383. package/skills/expansion-panel/SKILL.md +65 -0
  384. package/skills/fab/SKILL.md +79 -0
  385. package/skills/list/SKILL.md +105 -0
  386. package/skills/menu/SKILL.md +120 -0
  387. package/skills/navigation-bar/SKILL.md +87 -0
  388. package/skills/navigation-rail/SKILL.md +127 -0
  389. package/skills/overview/SKILL.md +44 -0
  390. package/skills/progress/SKILL.md +63 -0
  391. package/skills/scaffold/SKILL.md +392 -0
  392. package/skills/search/SKILL.md +65 -0
  393. package/skills/select/SKILL.md +120 -0
  394. package/skills/selection-controls/SKILL.md +88 -0
  395. package/skills/setup/SKILL.md +58 -0
  396. package/skills/slider/SKILL.md +119 -0
  397. package/skills/snackbar/SKILL.md +70 -0
  398. package/skills/tab-bar/SKILL.md +55 -0
  399. package/skills/text-field/SKILL.md +114 -0
  400. package/skills/theming/SKILL.md +80 -0
  401. package/skills/top-app-bar/SKILL.md +64 -0
  402. package/skills/typeahead/SKILL.md +113 -0
  403. package/slider/slider.d.ts +73 -0
  404. package/slider/slider.d.ts.map +1 -0
  405. package/slider/slider.js +506 -0
  406. package/slider/slider.js.map +1 -0
  407. package/slider/slider.styles.d.ts +2 -0
  408. package/slider/slider.styles.d.ts.map +1 -0
  409. package/slider/slider.styles.js +292 -0
  410. package/slider/slider.styles.js.map +1 -0
  411. package/snackbar/snackbar.d.ts +13 -4
  412. package/snackbar/snackbar.d.ts.map +1 -1
  413. package/snackbar/snackbar.js +37 -28
  414. package/snackbar/snackbar.js.map +1 -1
  415. package/snackbar/snackbar.styles.js +1 -1
  416. package/snackbar/snackbar.styles.js.map +1 -1
  417. package/switch/switch-list-item.d.ts +4 -4
  418. package/switch/switch-list-item.d.ts.map +1 -1
  419. package/switch/switch-list-item.js +5 -5
  420. package/switch/switch-list-item.js.map +1 -1
  421. package/switch/switch.d.ts +3 -3
  422. package/switch/switch.d.ts.map +1 -1
  423. package/switch/switch.js +5 -5
  424. package/switch/switch.js.map +1 -1
  425. package/tab-bar/tab-bar.d.ts +9 -6
  426. package/tab-bar/tab-bar.d.ts.map +1 -1
  427. package/tab-bar/tab-bar.js +43 -23
  428. package/tab-bar/tab-bar.js.map +1 -1
  429. package/tab-bar/tab.d.ts +10 -5
  430. package/tab-bar/tab.d.ts.map +1 -1
  431. package/tab-bar/tab.js +14 -9
  432. package/tab-bar/tab.js.map +1 -1
  433. package/text-area/text-area.d.ts +6 -3
  434. package/text-area/text-area.d.ts.map +1 -1
  435. package/text-area/text-area.js +12 -9
  436. package/text-area/text-area.js.map +1 -1
  437. package/text-field/text-field.d.ts +31 -3
  438. package/text-field/text-field.d.ts.map +1 -1
  439. package/text-field/text-field.js +53 -13
  440. package/text-field/text-field.js.map +1 -1
  441. package/typeahead/highlight.d.ts +2 -2
  442. package/typeahead/highlight.d.ts.map +1 -1
  443. package/typeahead/highlight.js +7 -7
  444. package/typeahead/highlight.js.map +1 -1
  445. package/typeahead/typeahead-template-render.d.ts +4 -0
  446. package/typeahead/typeahead-template-render.d.ts.map +1 -1
  447. package/typeahead/typeahead-template-render.js +4 -0
  448. package/typeahead/typeahead-template-render.js.map +1 -1
  449. package/typeahead/typeahead.d.ts +14 -7
  450. package/typeahead/typeahead.d.ts.map +1 -1
  451. package/typeahead/typeahead.js +29 -18
  452. package/typeahead/typeahead.js.map +1 -1
  453. package/vscode.html-custom-data.json +1146 -326
package/switch/switch.js CHANGED
@@ -2,9 +2,9 @@ import { __decorate } from "tslib";
2
2
  import { html } from 'lit';
3
3
  import { customElement } from 'lit/decorators.js';
4
4
  import { styles as baseStyles } from '../shared/base.styles.js';
5
- import { UmSelectionControl } from '../shared/selection-control/selection-control.js';
5
+ import { SelectionControl } from '../shared/selection-control/selection-control.js';
6
6
  import { styles } from './switch.styles.js';
7
- let UmSwitch = class UmSwitch extends UmSelectionControl {
7
+ let Switch = class Switch extends SelectionControl {
8
8
  static { this.styles = [
9
9
  baseStyles,
10
10
  styles,
@@ -23,8 +23,8 @@ let UmSwitch = class UmSwitch extends UmSelectionControl {
23
23
  `;
24
24
  }
25
25
  };
26
- UmSwitch = __decorate([
26
+ Switch = __decorate([
27
27
  customElement('u-switch')
28
- ], UmSwitch);
29
- export { UmSwitch };
28
+ ], Switch);
29
+ export { Switch };
30
30
  //# sourceMappingURL=switch.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"switch.js","sourceRoot":"","sources":["../../src/switch/switch.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAsB,MAAM,KAAK,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kDAAkD,CAAC;AACtF,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAGrC,IAAM,QAAQ,GAAd,MAAM,QAAS,SAAQ,kBAAkB;aAC9B,WAAM,GAAG;QACvB,UAAU;QACV,MAAM;KACP,AAHqB,CAGpB;IAEF;QACE,KAAK,EAAE,CAAC;QAGS,iBAAY,GAAG,KAAK,CAAC;IAFxC,CAAC;IAIkB,eAAe;QAChC,OAAO,IAAI,CAAA;;;;;;KAMV,CAAC;IACJ,CAAC;;AApBU,QAAQ;IADpB,aAAa,CAAC,UAAU,CAAC;GACb,QAAQ,CAqBpB","sourcesContent":["import { html, HTMLTemplateResult } from 'lit';\nimport { customElement } from 'lit/decorators.js';\n\nimport { styles as baseStyles } from '../shared/base.styles.js';\nimport { UmSelectionControl } from '../shared/selection-control/selection-control.js';\nimport { styles } from './switch.styles.js';\n\n@customElement('u-switch')\nexport class UmSwitch extends UmSelectionControl {\n static override styles = [\n baseStyles,\n styles,\n ];\n\n constructor() {\n super();\n }\n\n protected override renderRipple = false;\n\n protected override renderIndicator(): HTMLTemplateResult {\n return html`\n <div class=\"indicator\">\n <div class=\"state-layer\">\n <div class=\"handle\"></div>\n </div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'u-switch': UmSwitch;\n }\n}\n"]}
1
+ {"version":3,"file":"switch.js","sourceRoot":"","sources":["../../src/switch/switch.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAsB,MAAM,KAAK,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kDAAkD,CAAC;AACpF,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAGrC,IAAM,MAAM,GAAZ,MAAM,MAAO,SAAQ,gBAAgB;aAC1B,WAAM,GAAG;QACvB,UAAU;QACV,MAAM;KACP,AAHqB,CAGpB;IAEF;QACE,KAAK,EAAE,CAAC;QAGS,iBAAY,GAAG,KAAK,CAAC;IAFxC,CAAC;IAIkB,eAAe;QAChC,OAAO,IAAI,CAAA;;;;;;KAMV,CAAC;IACJ,CAAC;;AApBU,MAAM;IADlB,aAAa,CAAC,UAAU,CAAC;GACb,MAAM,CAqBlB","sourcesContent":["import { html, HTMLTemplateResult } from 'lit';\nimport { customElement } from 'lit/decorators.js';\n\nimport { styles as baseStyles } from '../shared/base.styles.js';\nimport { SelectionControl } from '../shared/selection-control/selection-control.js';\nimport { styles } from './switch.styles.js';\n\n@customElement('u-switch')\nexport class Switch extends SelectionControl {\n static override styles = [\n baseStyles,\n styles,\n ];\n\n constructor() {\n super();\n }\n\n protected override renderRipple = false;\n\n protected override renderIndicator(): HTMLTemplateResult {\n return html`\n <div class=\"indicator\">\n <div class=\"state-layer\">\n <div class=\"handle\"></div>\n </div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'u-switch': Switch;\n }\n}\n"]}
@@ -1,8 +1,11 @@
1
1
  import { LitElement, TemplateResult } from 'lit';
2
- import { UmTab } from './tab.js';
3
- export declare class UmTabBar extends LitElement {
2
+ import { Tab } from './tab.js';
3
+ export declare class TabBar extends LitElement {
4
4
  #private;
5
5
  static styles: import("lit").CSSResult[];
6
+ /**
7
+ * The Tab Bar variant to render
8
+ */
6
9
  variant: 'primary' | 'secondary';
7
10
  private readonly _scrollLeft;
8
11
  private readonly _scrollRight;
@@ -11,9 +14,9 @@ export declare class UmTabBar extends LitElement {
11
14
  assignedElements: HTMLElement[];
12
15
  get activeTabIndex(): number;
13
16
  set activeTabIndex(index: number);
14
- get activeTab(): UmTab | null;
15
- set activeTab(activeTab: UmTab | null);
16
- attributeChangedCallback(name: string, _: string | null, __: string | null): void;
17
+ get activeTab(): Tab | null;
18
+ set activeTab(activeTab: Tab | null);
19
+ attributeChangedCallback(name: string, _old: string | null, _new: string | null): void;
17
20
  connectedCallback(): void;
18
21
  protected render(): TemplateResult;
19
22
  constructor();
@@ -22,7 +25,7 @@ export declare class UmTabBar extends LitElement {
22
25
  }
23
26
  declare global {
24
27
  interface HTMLElementTagNameMap {
25
- 'u-tab-bar': UmTabBar;
28
+ 'u-tab-bar': TabBar;
26
29
  }
27
30
  }
28
31
  //# sourceMappingURL=tab-bar.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tab-bar.d.ts","sourceRoot":"","sources":["../../src/tab-bar/tab-bar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,UAAU,EAAE,cAAc,EAAE,MAAM,KAAK,CAAC;AAWvD,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC,qBACa,QAAS,SAAQ,UAAU;;IACtC,OAAgB,MAAM,4BAAwB;IASjB,OAAO,EAAE,SAAS,GAAG,WAAW,CAAa;IAEnD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAe;IAC1C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC/C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAc;IAE5B,gBAAgB,EAAG,WAAW,EAAE,CAAC;IAE3E,IAAI,cAAc,IAAI,MAAM,CAM3B;IAED,IAAI,cAAc,CAAC,KAAK,EAAE,MAAM,EAE/B;IAED,IAAI,SAAS,IAAI,KAAK,GAAG,IAAI,CAE5B;IAED,IAAI,SAAS,CAAC,SAAS,EAAE,KAAK,GAAG,IAAI,EAuBpC;IAEQ,wBAAwB,CAC/B,IAAI,EAAE,MAAM,EACZ,CAAC,EAAE,MAAM,GAAG,IAAI,EAChB,EAAE,EAAE,MAAM,GAAG,IAAI;IAOV,iBAAiB;cAMP,MAAM,IAAI,cAAc;;IAsE3C,mBAAmB;IAmCnB,0BAA0B;CA8B3B;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,WAAW,EAAE,QAAQ,CAAC;KACvB;CACF"}
1
+ {"version":3,"file":"tab-bar.d.ts","sourceRoot":"","sources":["../../src/tab-bar/tab-bar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,UAAU,EAAE,cAAc,EAAE,MAAM,KAAK,CAAC;AAWvD,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,qBACa,MAAO,SAAQ,UAAU;;IACpC,OAAgB,MAAM,4BAAwB;IAS9C;;OAEG;IAC0B,OAAO,EAAE,SAAS,GAAG,WAAW,CAAa;IAEnD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAe;IAC1C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC/C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAc;IAE5B,gBAAgB,EAAG,WAAW,EAAE,CAAC;IAE3E,IAAI,cAAc,IAAI,MAAM,CAM3B;IAED,IAAI,cAAc,CAAC,KAAK,EAAE,MAAM,EAE/B;IAED,IAAI,SAAS,IAAI,GAAG,GAAG,IAAI,CAE1B;IAED,IAAI,SAAS,CAAC,SAAS,EAAE,GAAG,GAAG,IAAI,EAuBlC;IAEQ,wBAAwB,CAC/B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GAAG,IAAI,EACnB,IAAI,EAAE,MAAM,GAAG,IAAI;IASZ,iBAAiB;cAMP,MAAM,IAAI,cAAc;;IAwF3C,mBAAmB;IAmCnB,0BAA0B;CA+B3B;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,WAAW,EAAE,MAAM,CAAC;KACrB;CACF"}
@@ -4,8 +4,8 @@ import { customElement, property, query, queryAssignedElements, } from 'lit/deco
4
4
  import { classMap } from 'lit/directives/class-map.js';
5
5
  import { styles as baseStyles } from '../shared/base.styles.js';
6
6
  import { styles } from './tab-bar.styles.js';
7
- import { UmTab } from './tab.js';
8
- let UmTabBar = class UmTabBar extends LitElement {
7
+ import { Tab } from './tab.js';
8
+ let TabBar = class TabBar extends LitElement {
9
9
  static { this.styles = [baseStyles, styles]; }
10
10
  #tabs;
11
11
  #activeTab;
@@ -40,7 +40,8 @@ let UmTabBar = class UmTabBar extends LitElement {
40
40
  activeTab.requestUpdate();
41
41
  this._updateTabIndicator();
42
42
  }
43
- attributeChangedCallback(name, _, __) {
43
+ attributeChangedCallback(name, _old, _new) {
44
+ super.attributeChangedCallback(name, _old, _new);
44
45
  if (name === 'variant') {
45
46
  this._updateTabIndicator();
46
47
  }
@@ -100,18 +101,12 @@ let UmTabBar = class UmTabBar extends LitElement {
100
101
  this._setScrollIndicatorsActive();
101
102
  this._updateTabIndicator();
102
103
  });
104
+ /**
105
+ * The Tab Bar variant to render
106
+ */
103
107
  this.variant = 'primary';
104
- this.#handleSlotChange = (e) => {
105
- const slot = e.target;
106
- this.#tabs =
107
- slot.assignedElements({ flatten: true }).filter(element => element instanceof UmTab);
108
- for (const tab of this.#tabs) {
109
- tab._bar = this;
110
- }
111
- if (this.activeTabIndex > -1) {
112
- return;
113
- }
114
- this.activeTab = this.#tabs[0];
108
+ this.#handleSlotChange = () => {
109
+ this.#registerTabs();
115
110
  };
116
111
  this.#handleContainerScrollEnd = () => {
117
112
  this._setScrollIndicatorsActive();
@@ -131,6 +126,30 @@ let UmTabBar = class UmTabBar extends LitElement {
131
126
  this.#resizeObserver.observe(this);
132
127
  }
133
128
  #handleSlotChange;
129
+ // Re-acquire the slotted tabs and (re)bind their `_bar`. Tabs null their `_bar`
130
+ // on disconnect, and the default slot's `slotchange` does NOT re-fire when the
131
+ // bar is moved in the DOM as a unit — so without re-registering on connect, a
132
+ // moved tab-bar's tabs go inert (clicks no-op, active indicator lost).
133
+ #registerTabs() {
134
+ const tabs = this.assignedElements.filter((element) => element instanceof Tab);
135
+ if (!tabs.length) {
136
+ return;
137
+ }
138
+ this.#tabs = tabs;
139
+ for (const tab of tabs) {
140
+ tab._bar = this;
141
+ }
142
+ if (this.activeTabIndex < 0) {
143
+ // Honor a `<u-tab active>` in markup for the initial selection; fall back
144
+ // to the first tab. `tab.active` is derived from `bar.activeTab`, so the
145
+ // attribute is the only initial-state signal a tab can carry on its own.
146
+ this.activeTab = this.#tabs.find(tab => tab.hasAttribute('active')) ?? this.#tabs[0];
147
+ }
148
+ else {
149
+ this.activeTab?.requestUpdate();
150
+ this._updateTabIndicator();
151
+ }
152
+ }
134
153
  #handleContainerScrollEnd;
135
154
  _updateTabIndicator() {
136
155
  if (!this._tabIndicator) {
@@ -173,29 +192,30 @@ let UmTabBar = class UmTabBar extends LitElement {
173
192
  }
174
193
  async #attach() {
175
194
  await this.updateComplete;
195
+ this.#registerTabs();
176
196
  this._setScrollIndicatorsActive();
177
197
  }
178
198
  };
179
199
  __decorate([
180
200
  property({ reflect: true })
181
- ], UmTabBar.prototype, "variant", void 0);
201
+ ], TabBar.prototype, "variant", void 0);
182
202
  __decorate([
183
203
  query('.scroll-left')
184
- ], UmTabBar.prototype, "_scrollLeft", void 0);
204
+ ], TabBar.prototype, "_scrollLeft", void 0);
185
205
  __decorate([
186
206
  query('.scroll-right')
187
- ], UmTabBar.prototype, "_scrollRight", void 0);
207
+ ], TabBar.prototype, "_scrollRight", void 0);
188
208
  __decorate([
189
209
  query('.container')
190
- ], UmTabBar.prototype, "_container", void 0);
210
+ ], TabBar.prototype, "_container", void 0);
191
211
  __decorate([
192
212
  query('.tab-indicator')
193
- ], UmTabBar.prototype, "_tabIndicator", void 0);
213
+ ], TabBar.prototype, "_tabIndicator", void 0);
194
214
  __decorate([
195
215
  queryAssignedElements({ flatten: true })
196
- ], UmTabBar.prototype, "assignedElements", void 0);
197
- UmTabBar = __decorate([
216
+ ], TabBar.prototype, "assignedElements", void 0);
217
+ TabBar = __decorate([
198
218
  customElement('u-tab-bar')
199
- ], UmTabBar);
200
- export { UmTabBar };
219
+ ], TabBar);
220
+ export { TabBar };
201
221
  //# sourceMappingURL=tab-bar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tab-bar.js","sourceRoot":"","sources":["../../src/tab-bar/tab-bar.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, LitElement, TemplateResult } from 'lit';\nimport {\n customElement,\n property,\n query,\n queryAssignedElements,\n} from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\n\nimport { styles as baseStyles } from '../shared/base.styles.js';\nimport { styles } from './tab-bar.styles.js';\nimport { UmTab } from './tab.js';\n\n@customElement('u-tab-bar')\nexport class UmTabBar extends LitElement {\n static override styles = [baseStyles, styles];\n\n #tabs: UmTab[] = [];\n #activeTab: UmTab | null = null;\n readonly #resizeObserver: ResizeObserver = new ResizeObserver(() => {\n this._setScrollIndicatorsActive();\n this._updateTabIndicator();\n });\n\n @property({ reflect: true }) variant: 'primary' | 'secondary' = 'primary';\n\n @query('.scroll-left') private readonly _scrollLeft!: HTMLElement;\n @query('.scroll-right') private readonly _scrollRight!: HTMLElement;\n @query('.container') private readonly _container!: HTMLElement;\n @query('.tab-indicator') private readonly _tabIndicator?: HTMLElement;\n\n @queryAssignedElements({ flatten: true }) assignedElements!: HTMLElement[];\n\n get activeTabIndex(): number {\n if (!this.activeTab) {\n return -1;\n }\n\n return this.#tabs.indexOf(this.activeTab);\n }\n\n set activeTabIndex(index: number) {\n this.activeTab = this.#tabs[index];\n }\n\n get activeTab(): UmTab | null {\n return this.#activeTab;\n }\n\n set activeTab(activeTab: UmTab | null) {\n if (!this.#tabs.length) {\n this.#activeTab = null;\n this._updateTabIndicator();\n return;\n }\n\n if (\n !activeTab\n || this.#activeTab === activeTab\n || !this.#tabs.includes(activeTab)\n ) {\n return;\n }\n\n const previouslyActiveTab = this.#activeTab;\n this.#activeTab = activeTab;\n\n previouslyActiveTab?.requestUpdate();\n\n activeTab.scrollIntoView({ block: 'nearest', behavior: 'smooth' });\n activeTab.requestUpdate();\n this._updateTabIndicator();\n }\n\n override attributeChangedCallback(\n name: string,\n _: string | null,\n __: string | null,\n ) {\n if (name === 'variant') {\n this._updateTabIndicator();\n }\n }\n\n override connectedCallback() {\n super.connectedCallback();\n\n this.#attach();\n }\n\n protected override render(): TemplateResult {\n const classes = { secondary: this.variant === 'secondary' };\n\n return html`\n <div\n class=\"scroll-indicator scroll-left active\"\n @click=${this.#scrollToLeft}>\n <u-elevation></u-elevation>\n <u-ripple></u-ripple>\n <slot name=\"scroll-left\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"1em\"\n viewBox=\"0 -960 960 960\"\n width=\"1em\"\n fill=\"currentColor\">\n <path d=\"M560-240 320-480l240-240 56 56-184 184 184 184-56 56Z\" />\n </svg>\n </slot>\n </div>\n <div\n class=\"container ${classMap(classes)}\"\n @scrollend=${this.#handleContainerScrollEnd}>\n <slot @slotchange=${this.#handleSlotChange}></slot>\n <div class=\"tab-indicator\"></div>\n </div>\n <div\n class=\"scroll-indicator scroll-right active\"\n @click=${this.#scrollToRight}>\n <u-elevation></u-elevation>\n <u-ripple></u-ripple>\n <slot name=\"scroll-right\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"1em\"\n viewBox=\"0 -960 960 960\"\n width=\"1em\"\n fill=\"currentColor\">\n <path d=\"M504-480 320-664l56-56 240 240-240 240-56-56 184-184Z\" />\n </svg>\n </slot>\n </div>\n `;\n }\n\n constructor() {\n super();\n this.#resizeObserver.observe(this);\n }\n\n readonly #handleSlotChange = (e: Event) => {\n const slot = e.target as HTMLSlotElement;\n this.#tabs =\n slot.assignedElements({ flatten: true }).filter(element => element instanceof UmTab);\n\n for (const tab of this.#tabs) {\n tab._bar = this;\n }\n\n if (this.activeTabIndex > -1) {\n return;\n }\n\n this.activeTab = this.#tabs[0];\n };\n\n readonly #handleContainerScrollEnd = () => {\n this._setScrollIndicatorsActive();\n };\n\n _updateTabIndicator() {\n if (!this._tabIndicator) {\n return;\n }\n\n if (!this.activeTab) {\n this._tabIndicator.style.left = '0';\n this._tabIndicator.style.width = '0';\n return;\n }\n\n const padding = this.variant === 'primary'\n ? parseInt(this.activeTab._paddingInline, 10)\n : 0;\n\n this._tabIndicator.style.left = `${this.activeTab.offsetLeft + padding}px`;\n this._tabIndicator.style.width = `${\n this.activeTab.offsetWidth - padding * 2\n }px`;\n }\n\n readonly #scrollToLeft = () => {\n this._container.scrollBy({\n left: this._container.offsetWidth / -2,\n behavior: 'smooth',\n });\n };\n\n readonly #scrollToRight = () => {\n this._container.scrollBy({\n left: this._container.offsetWidth / 2,\n behavior: 'smooth',\n });\n };\n\n _setScrollIndicatorsActive() {\n const scrollSafeMargin = 1;\n\n const scrollLength =\n this._container.scrollWidth - this._container.offsetWidth;\n\n const isRtl = getComputedStyle(this._container).direction === 'rtl';\n const scrollStart = isRtl\n ? this._container.scrollLeft + scrollLength\n : this._container.scrollLeft;\n\n if (scrollStart - scrollSafeMargin <= 0) {\n this._container.scrollBy(-1, 0);\n this._scrollLeft.classList.remove('active');\n } else {\n this._scrollLeft.classList.add('active');\n }\n\n if (scrollStart >= scrollLength - scrollSafeMargin) {\n this._container.scrollBy(1, 0);\n this._scrollRight.classList.remove('active');\n } else {\n this._scrollRight.classList.add('active');\n }\n }\n\n async #attach(): Promise<void> {\n await this.updateComplete;\n this._setScrollIndicatorsActive();\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'u-tab-bar': UmTabBar;\n }\n}\n"]}
1
+ {"version":3,"file":"tab-bar.js","sourceRoot":"","sources":["../../src/tab-bar/tab-bar.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, LitElement, TemplateResult } from 'lit';\nimport {\n customElement,\n property,\n query,\n queryAssignedElements,\n} from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\n\nimport { styles as baseStyles } from '../shared/base.styles.js';\nimport { styles } from './tab-bar.styles.js';\nimport { Tab } from './tab.js';\n\n@customElement('u-tab-bar')\nexport class TabBar extends LitElement {\n static override styles = [baseStyles, styles];\n\n #tabs: Tab[] = [];\n #activeTab: Tab | null = null;\n readonly #resizeObserver: ResizeObserver = new ResizeObserver(() => {\n this._setScrollIndicatorsActive();\n this._updateTabIndicator();\n });\n\n /**\n * The Tab Bar variant to render\n */\n @property({ reflect: true }) variant: 'primary' | 'secondary' = 'primary';\n\n @query('.scroll-left') private readonly _scrollLeft!: HTMLElement;\n @query('.scroll-right') private readonly _scrollRight!: HTMLElement;\n @query('.container') private readonly _container!: HTMLElement;\n @query('.tab-indicator') private readonly _tabIndicator?: HTMLElement;\n\n @queryAssignedElements({ flatten: true }) assignedElements!: HTMLElement[];\n\n get activeTabIndex(): number {\n if (!this.activeTab) {\n return -1;\n }\n\n return this.#tabs.indexOf(this.activeTab);\n }\n\n set activeTabIndex(index: number) {\n this.activeTab = this.#tabs[index];\n }\n\n get activeTab(): Tab | null {\n return this.#activeTab;\n }\n\n set activeTab(activeTab: Tab | null) {\n if (!this.#tabs.length) {\n this.#activeTab = null;\n this._updateTabIndicator();\n return;\n }\n\n if (\n !activeTab\n || this.#activeTab === activeTab\n || !this.#tabs.includes(activeTab)\n ) {\n return;\n }\n\n const previouslyActiveTab = this.#activeTab;\n this.#activeTab = activeTab;\n\n previouslyActiveTab?.requestUpdate();\n\n activeTab.scrollIntoView({ block: 'nearest', behavior: 'smooth' });\n activeTab.requestUpdate();\n this._updateTabIndicator();\n }\n\n override attributeChangedCallback(\n name: string,\n _old: string | null,\n _new: string | null,\n ) {\n super.attributeChangedCallback(name, _old, _new);\n\n if (name === 'variant') {\n this._updateTabIndicator();\n }\n }\n\n override connectedCallback() {\n super.connectedCallback();\n\n this.#attach();\n }\n\n protected override render(): TemplateResult {\n const classes = { secondary: this.variant === 'secondary' };\n\n return html`\n <div\n class=\"scroll-indicator scroll-left active\"\n @click=${this.#scrollToLeft}>\n <u-elevation></u-elevation>\n <u-ripple></u-ripple>\n <slot name=\"scroll-left\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"1em\"\n viewBox=\"0 -960 960 960\"\n width=\"1em\"\n fill=\"currentColor\">\n <path d=\"M560-240 320-480l240-240 56 56-184 184 184 184-56 56Z\" />\n </svg>\n </slot>\n </div>\n <div\n class=\"container ${classMap(classes)}\"\n @scrollend=${this.#handleContainerScrollEnd}>\n <slot @slotchange=${this.#handleSlotChange}></slot>\n <div class=\"tab-indicator\"></div>\n </div>\n <div\n class=\"scroll-indicator scroll-right active\"\n @click=${this.#scrollToRight}>\n <u-elevation></u-elevation>\n <u-ripple></u-ripple>\n <slot name=\"scroll-right\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"1em\"\n viewBox=\"0 -960 960 960\"\n width=\"1em\"\n fill=\"currentColor\">\n <path d=\"M504-480 320-664l56-56 240 240-240 240-56-56 184-184Z\" />\n </svg>\n </slot>\n </div>\n `;\n }\n\n constructor() {\n super();\n this.#resizeObserver.observe(this);\n }\n\n readonly #handleSlotChange = () => {\n this.#registerTabs();\n };\n\n // Re-acquire the slotted tabs and (re)bind their `_bar`. Tabs null their `_bar`\n // on disconnect, and the default slot's `slotchange` does NOT re-fire when the\n // bar is moved in the DOM as a unit — so without re-registering on connect, a\n // moved tab-bar's tabs go inert (clicks no-op, active indicator lost).\n #registerTabs(): void {\n const tabs = this.assignedElements.filter(\n (element): element is Tab => element instanceof Tab,\n );\n\n if (!tabs.length) {\n return;\n }\n\n this.#tabs = tabs;\n\n for (const tab of tabs) {\n tab._bar = this;\n }\n\n if (this.activeTabIndex < 0) {\n // Honor a `<u-tab active>` in markup for the initial selection; fall back\n // to the first tab. `tab.active` is derived from `bar.activeTab`, so the\n // attribute is the only initial-state signal a tab can carry on its own.\n this.activeTab = this.#tabs.find(tab => tab.hasAttribute('active')) ?? this.#tabs[0];\n } else {\n this.activeTab?.requestUpdate();\n this._updateTabIndicator();\n }\n }\n\n readonly #handleContainerScrollEnd = () => {\n this._setScrollIndicatorsActive();\n };\n\n _updateTabIndicator() {\n if (!this._tabIndicator) {\n return;\n }\n\n if (!this.activeTab) {\n this._tabIndicator.style.left = '0';\n this._tabIndicator.style.width = '0';\n return;\n }\n\n const padding = this.variant === 'primary'\n ? parseInt(this.activeTab._paddingInline, 10)\n : 0;\n\n this._tabIndicator.style.left = `${this.activeTab.offsetLeft + padding}px`;\n this._tabIndicator.style.width = `${\n this.activeTab.offsetWidth - padding * 2\n }px`;\n }\n\n readonly #scrollToLeft = () => {\n this._container.scrollBy({\n left: this._container.offsetWidth / -2,\n behavior: 'smooth',\n });\n };\n\n readonly #scrollToRight = () => {\n this._container.scrollBy({\n left: this._container.offsetWidth / 2,\n behavior: 'smooth',\n });\n };\n\n _setScrollIndicatorsActive() {\n const scrollSafeMargin = 1;\n\n const scrollLength =\n this._container.scrollWidth - this._container.offsetWidth;\n\n const isRtl = getComputedStyle(this._container).direction === 'rtl';\n const scrollStart = isRtl\n ? this._container.scrollLeft + scrollLength\n : this._container.scrollLeft;\n\n if (scrollStart - scrollSafeMargin <= 0) {\n this._container.scrollBy(-1, 0);\n this._scrollLeft.classList.remove('active');\n } else {\n this._scrollLeft.classList.add('active');\n }\n\n if (scrollStart >= scrollLength - scrollSafeMargin) {\n this._container.scrollBy(1, 0);\n this._scrollRight.classList.remove('active');\n } else {\n this._scrollRight.classList.add('active');\n }\n }\n\n async #attach(): Promise<void> {\n await this.updateComplete;\n this.#registerTabs();\n this._setScrollIndicatorsActive();\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'u-tab-bar': TabBar;\n }\n}\n"]}
package/tab-bar/tab.d.ts CHANGED
@@ -1,12 +1,17 @@
1
1
  import { HTMLTemplateResult } from 'lit';
2
- import { UmButtonWrapper } from '../shared/button-wrapper.js';
3
- import { UmTabBar } from './tab-bar.js';
4
- export declare class UmTab extends UmButtonWrapper {
2
+ import { ButtonWrapper } from '../shared/button-wrapper.js';
3
+ import { TabBar } from './tab-bar.js';
4
+ export declare class Tab extends ButtonWrapper {
5
5
  #private;
6
6
  static styles: import("lit").CSSResultGroup[];
7
- _bar: UmTabBar | null;
7
+ _bar: TabBar | null;
8
8
  get active(): boolean;
9
9
  set active(active: boolean);
10
+ /**
11
+ * Whether the tab has an icon slotted in the `icon` slot
12
+ *
13
+ * _Note:_ Readonly
14
+ */
10
15
  hasIcon: boolean;
11
16
  private readonly _container;
12
17
  get _paddingInline(): string;
@@ -18,7 +23,7 @@ export declare class UmTab extends UmButtonWrapper {
18
23
  }
19
24
  declare global {
20
25
  interface HTMLElementTagNameMap {
21
- 'u-tab': UmTab;
26
+ 'u-tab': Tab;
22
27
  }
23
28
  }
24
29
  //# sourceMappingURL=tab.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tab.d.ts","sourceRoot":"","sources":["../../src/tab-bar/tab.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,kBAAkB,EAAE,MAAM,KAAK,CAAC;AAI/C,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAGxC,qBACa,KAAM,SAAQ,eAAe;;IACxC,OAAgB,MAAM,iCAAoC;IAE1D,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAQ;IAQ7B,IACI,MAAM,IAAI,OAAO,CAEpB;IAED,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,EAWzB;IAE4B,OAAO,UAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAe;IAE/D,IAAI,cAAc,IAAI,MAAM,CAE3B;;cAOkB,cAAc,IAAI,kBAAkB;IAe9C,iBAAiB;IAMjB,oBAAoB;cAiBV,YAAY,CAAC,CAAC,EAAE,OAAO;CAuB3C;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,OAAO,EAAE,KAAK,CAAC;KAChB;CACF"}
1
+ {"version":3,"file":"tab.d.ts","sourceRoot":"","sources":["../../src/tab-bar/tab.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,kBAAkB,EAAE,MAAM,KAAK,CAAC;AAI/C,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAGtC,qBACa,GAAI,SAAQ,aAAa;;IACpC,OAAgB,MAAM,iCAAkC;IAExD,IAAI,EAAE,MAAM,GAAG,IAAI,CAAQ;IAQ3B,IACI,MAAM,IAAI,OAAO,CAEpB;IAED,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,EAWzB;IAED;;;;OAIG;IAC0B,OAAO,UAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAe;IAE/D,IAAI,cAAc,IAAI,MAAM,CAE3B;;cAOkB,cAAc,IAAI,kBAAkB;IAe9C,iBAAiB;IAMjB,oBAAoB;cAiBV,YAAY,CAAC,CAAC,EAAE,OAAO;CAuB3C;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,OAAO,EAAE,GAAG,CAAC;KACd;CACF"}
package/tab-bar/tab.js CHANGED
@@ -2,10 +2,10 @@ import { __decorate } from "tslib";
2
2
  import { html } from 'lit';
3
3
  import { customElement, property, query, state } from 'lit/decorators.js';
4
4
  import { classMap } from 'lit/directives/class-map.js';
5
- import { UmButtonWrapper } from '../shared/button-wrapper.js';
5
+ import { ButtonWrapper } from '../shared/button-wrapper.js';
6
6
  import { styles } from './tab.styles.js';
7
- let UmTab = class UmTab extends UmButtonWrapper {
8
- static { this.styles = [UmButtonWrapper.styles, styles]; }
7
+ let Tab = class Tab extends ButtonWrapper {
8
+ static { this.styles = [ButtonWrapper.styles, styles]; }
9
9
  #resizeObserver;
10
10
  get active() {
11
11
  return this._bar?.activeTab === this;
@@ -31,6 +31,11 @@ let UmTab = class UmTab extends UmButtonWrapper {
31
31
  this._bar?._updateTabIndicator();
32
32
  }
33
33
  });
34
+ /**
35
+ * Whether the tab has an icon slotted in the `icon` slot
36
+ *
37
+ * _Note:_ Readonly
38
+ */
34
39
  this.hasIcon = false;
35
40
  this.#resizeObserver.observe(this);
36
41
  }
@@ -83,15 +88,15 @@ let UmTab = class UmTab extends UmButtonWrapper {
83
88
  };
84
89
  __decorate([
85
90
  state()
86
- ], UmTab.prototype, "active", null);
91
+ ], Tab.prototype, "active", null);
87
92
  __decorate([
88
93
  property({ type: Boolean })
89
- ], UmTab.prototype, "hasIcon", void 0);
94
+ ], Tab.prototype, "hasIcon", void 0);
90
95
  __decorate([
91
96
  query('.container')
92
- ], UmTab.prototype, "_container", void 0);
93
- UmTab = __decorate([
97
+ ], Tab.prototype, "_container", void 0);
98
+ Tab = __decorate([
94
99
  customElement('u-tab')
95
- ], UmTab);
96
- export { UmTab };
100
+ ], Tab);
101
+ export { Tab };
97
102
  //# sourceMappingURL=tab.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tab.js","sourceRoot":"","sources":["../../src/tab-bar/tab.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAsB,MAAM,KAAK,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAEvD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAGlC,IAAM,KAAK,GAAX,MAAM,KAAM,SAAQ,eAAe;aACxB,WAAM,GAAG,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,AAAnC,CAAoC;IAIjD,eAAe,CAIrB;IAGH,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;IACvC,CAAC;IAED,IAAI,MAAM,CAAC,MAAe;QACxB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,OAAO;QACT,CAAC;QAED,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YAC3B,OAAO;QACT,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;IAC/B,CAAC;IAKD,IAAI,cAAc;QAChB,OAAO,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,aAAa,CAAC;IACzD,CAAC;IAED;QACE,KAAK,EAAE,CAAC;QAlCV,SAAI,GAAoB,IAAI,CAAC;QAEpB,oBAAe,GAAmB,IAAI,cAAc,CAAC,GAAG,EAAE;YACjE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,IAAI,CAAC,IAAI,EAAE,mBAAmB,EAAE,CAAC;YACnC,CAAC;QACH,CAAC,CAAC,CAAC;QAoB0B,YAAO,GAAG,KAAK,CAAC;QAS3C,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAEkB,cAAc;QAC/B,MAAM,OAAO,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;QAEpE,OAAO,IAAI,CAAA;gCACiB,QAAQ,CAAC,OAAO,CAAC;;0CAEP,IAAI,CAAC,eAAe;;;;;;KAMzD,CAAC;IACJ,CAAC;IAEQ,iBAAiB;QACxB,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC1B,IAAI,CAAC,IAAI,EAAE,mBAAmB,EAAE,CAAC;QACjC,IAAI,CAAC,IAAI,EAAE,0BAA0B,EAAE,CAAC;IAC1C,CAAC;IAEQ,oBAAoB;QAC3B,KAAK,CAAC,oBAAoB,EAAE,CAAC;QAE7B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;YACjC,IAAI,CAAC,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QAC/B,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAChC,IAAI,CAAC,IAAI,CAAC,0BAA0B,EAAE,CAAC;QAEvC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAEkB,YAAY,CAAC,CAAU;QACxC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAEtB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,OAAO;QACT,CAAC;QAED,MAAM,eAAe,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAC9C,IAAI,KAAK,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAC3D,CAAC;QAEF,IAAI,eAAe,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,eAAe,CAAC,CAAQ;QACtB,MAAM,IAAI,GAAG,CAAC,CAAC,MAAyB,CAAC;QACzC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;IACnE,CAAC;;AAzFD;IADC,KAAK,EAAE;mCAGP;AAe4B;IAA5B,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;sCAAiB;AACP;IAArC,KAAK,CAAC,YAAY,CAAC;yCAA2C;AA9BpD,KAAK;IADjB,aAAa,CAAC,OAAO,CAAC;GACV,KAAK,CAsGjB","sourcesContent":["import { html, HTMLTemplateResult } from 'lit';\nimport { customElement, property, query, state } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\n\nimport { UmButtonWrapper } from '../shared/button-wrapper.js';\nimport { UmTabBar } from './tab-bar.js';\nimport { styles } from './tab.styles.js';\n\n@customElement('u-tab')\nexport class UmTab extends UmButtonWrapper {\n static override styles = [UmButtonWrapper.styles, styles];\n\n _bar: UmTabBar | null = null;\n\n readonly #resizeObserver: ResizeObserver = new ResizeObserver(() => {\n if (this.active) {\n this._bar?._updateTabIndicator();\n }\n });\n\n @state()\n get active(): boolean {\n return this._bar?.activeTab === this;\n }\n\n set active(active: boolean) {\n if (!this._bar) {\n return;\n }\n\n if (active) {\n this._bar.activeTab = this;\n return;\n }\n\n this._bar.activeTabIndex = 0;\n }\n\n @property({ type: Boolean }) hasIcon = false;\n @query('.container') private readonly _container!: HTMLElement;\n\n get _paddingInline(): string {\n return getComputedStyle(this._container).paddingInline;\n }\n\n constructor() {\n super();\n this.#resizeObserver.observe(this);\n }\n\n protected override _renderContent(): HTMLTemplateResult {\n const classes = { active: this.active, ['has-icon']: this.hasIcon };\n\n return html`\n <div class=\"tab-content ${classMap(classes)}\">\n <div class=\"icon\" part=\"icon\">\n <slot name=\"icon\" @slotchange=${this.#iconSlotChange}></slot>\n </div>\n <div class=\"label\" part=\"label\">\n <slot></slot>\n </div>\n </div>\n `;\n }\n\n override connectedCallback() {\n super.connectedCallback();\n this._bar?._updateTabIndicator();\n this._bar?._setScrollIndicatorsActive();\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n\n if (!this._bar) {\n return;\n }\n\n if (this._bar.activeTab === this) {\n this._bar.activeTabIndex = 0;\n }\n\n this._bar._updateTabIndicator();\n this._bar._setScrollIndicatorsActive();\n\n this._bar = null;\n }\n\n protected override _handleClick(_: UIEvent) {\n super._handleClick(_);\n\n if (!this._bar) {\n return;\n }\n\n const changePrevented = !this._bar.dispatchEvent(\n new Event('changing', { bubbles: true, cancelable: true }),\n );\n\n if (changePrevented) {\n return;\n }\n\n this._bar.activeTab = this;\n this._bar.dispatchEvent(new Event('change', { bubbles: true }));\n }\n\n #iconSlotChange(e: Event) {\n const slot = e.target as HTMLSlotElement;\n this.hasIcon = !!slot.assignedElements({ flatten: true }).length;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'u-tab': UmTab;\n }\n}\n"]}
1
+ {"version":3,"file":"tab.js","sourceRoot":"","sources":["../../src/tab-bar/tab.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, HTMLTemplateResult } from 'lit';\nimport { customElement, property, query, state } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\n\nimport { ButtonWrapper } from '../shared/button-wrapper.js';\nimport { TabBar } from './tab-bar.js';\nimport { styles } from './tab.styles.js';\n\n@customElement('u-tab')\nexport class Tab extends ButtonWrapper {\n static override styles = [ButtonWrapper.styles, styles];\n\n _bar: TabBar | null = null;\n\n readonly #resizeObserver: ResizeObserver = new ResizeObserver(() => {\n if (this.active) {\n this._bar?._updateTabIndicator();\n }\n });\n\n @state()\n get active(): boolean {\n return this._bar?.activeTab === this;\n }\n\n set active(active: boolean) {\n if (!this._bar) {\n return;\n }\n\n if (active) {\n this._bar.activeTab = this;\n return;\n }\n\n this._bar.activeTabIndex = 0;\n }\n\n /**\n * Whether the tab has an icon slotted in the `icon` slot\n *\n * _Note:_ Readonly\n */\n @property({ type: Boolean }) hasIcon = false;\n @query('.container') private readonly _container!: HTMLElement;\n\n get _paddingInline(): string {\n return getComputedStyle(this._container).paddingInline;\n }\n\n constructor() {\n super();\n this.#resizeObserver.observe(this);\n }\n\n protected override _renderContent(): HTMLTemplateResult {\n const classes = { active: this.active, ['has-icon']: this.hasIcon };\n\n return html`\n <div class=\"tab-content ${classMap(classes)}\">\n <div class=\"icon\" part=\"icon\">\n <slot name=\"icon\" @slotchange=${this.#iconSlotChange}></slot>\n </div>\n <div class=\"label\" part=\"label\">\n <slot></slot>\n </div>\n </div>\n `;\n }\n\n override connectedCallback() {\n super.connectedCallback();\n this._bar?._updateTabIndicator();\n this._bar?._setScrollIndicatorsActive();\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n\n if (!this._bar) {\n return;\n }\n\n if (this._bar.activeTab === this) {\n this._bar.activeTabIndex = 0;\n }\n\n this._bar._updateTabIndicator();\n this._bar._setScrollIndicatorsActive();\n\n this._bar = null;\n }\n\n protected override _handleClick(_: UIEvent) {\n super._handleClick(_);\n\n if (!this._bar) {\n return;\n }\n\n const changePrevented = !this._bar.dispatchEvent(\n new Event('changing', { bubbles: true, cancelable: true }),\n );\n\n if (changePrevented) {\n return;\n }\n\n this._bar.activeTab = this;\n this._bar.dispatchEvent(new Event('change', { bubbles: true }));\n }\n\n #iconSlotChange(e: Event) {\n const slot = e.target as HTMLSlotElement;\n this.hasIcon = !!slot.assignedElements({ flatten: true }).length;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'u-tab': Tab;\n }\n}\n"]}
@@ -1,15 +1,18 @@
1
1
  import { CSSResultGroup } from '@lit/reactive-element/css-tag';
2
2
  import { HTMLTemplateResult } from 'lit';
3
- import { UmNativeTextFieldWrapper } from '../shared/char-count-text-field/native-text-field-wrapper.js';
4
- export declare class UmTextArea extends UmNativeTextFieldWrapper {
3
+ import { NativeTextFieldWrapper } from '../shared/char-count-text-field/native-text-field-wrapper.js';
4
+ export declare class TextArea extends NativeTextFieldWrapper {
5
5
  static styles: CSSResultGroup;
6
+ /**
7
+ * The minimum number of visible text rows
8
+ */
6
9
  rows: number;
7
10
  input: HTMLTextAreaElement;
8
11
  protected renderControl(): HTMLTemplateResult;
9
12
  }
10
13
  declare global {
11
14
  interface HTMLElementTagNameMap {
12
- 'u-text-area': UmTextArea;
15
+ 'u-text-area': TextArea;
13
16
  }
14
17
  }
15
18
  //# sourceMappingURL=text-area.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"text-area.d.ts","sourceRoot":"","sources":["../../src/text-area/text-area.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,OAAO,EAAQ,kBAAkB,EAAW,MAAM,KAAK,CAAC;AAIxD,OAAO,EAAE,wBAAwB,EAAE,MAAM,8DAA8D,CAAC;AAIxG,qBACa,UAAW,SAAQ,wBAAwB;IACtD,OAAgB,MAAM,EAAE,cAAc,CAAoC;IAE9C,IAAI,SAAK;IAET,KAAK,EAAG,mBAAmB,CAAC;cAErC,aAAa,IAAI,kBAAkB;CAqBvD;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,aAAa,EAAE,UAAU,CAAC;KAC3B;CACF"}
1
+ {"version":3,"file":"text-area.d.ts","sourceRoot":"","sources":["../../src/text-area/text-area.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,OAAO,EAAQ,kBAAkB,EAAW,MAAM,KAAK,CAAC;AAIxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,8DAA8D,CAAC;AAItG,qBACa,QAAS,SAAQ,sBAAsB;IAClD,OAAgB,MAAM,EAAE,cAAc,CAAkC;IAExE;;OAEG;IACyB,IAAI,SAAK;IAET,KAAK,EAAG,mBAAmB,CAAC;cAErC,aAAa,IAAI,kBAAkB;CAqBvD;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,aAAa,EAAE,QAAQ,CAAC;KACzB;CACF"}
@@ -2,15 +2,18 @@ import { __decorate } from "tslib";
2
2
  import { html, nothing } from 'lit';
3
3
  import { customElement, property, query } from 'lit/decorators.js';
4
4
  import { live } from 'lit/directives/live.js';
5
- import { UmNativeTextFieldWrapper } from '../shared/char-count-text-field/native-text-field-wrapper.js';
6
- import { UmTextFieldBase } from '../shared/text-field-base/text-field-base.js';
5
+ import { NativeTextFieldWrapper } from '../shared/char-count-text-field/native-text-field-wrapper.js';
6
+ import { TextFieldBase } from '../shared/text-field-base/text-field-base.js';
7
7
  import { styles } from './text-area.styles.js';
8
- let UmTextArea = class UmTextArea extends UmNativeTextFieldWrapper {
8
+ let TextArea = class TextArea extends NativeTextFieldWrapper {
9
9
  constructor() {
10
10
  super(...arguments);
11
+ /**
12
+ * The minimum number of visible text rows
13
+ */
11
14
  this.rows = 2;
12
15
  }
13
- static { this.styles = [UmTextFieldBase.styles, styles]; }
16
+ static { this.styles = [TextFieldBase.styles, styles]; }
14
17
  renderControl() {
15
18
  return html `
16
19
  <div class="input">
@@ -35,12 +38,12 @@ let UmTextArea = class UmTextArea extends UmNativeTextFieldWrapper {
35
38
  };
36
39
  __decorate([
37
40
  property({ type: Number })
38
- ], UmTextArea.prototype, "rows", void 0);
41
+ ], TextArea.prototype, "rows", void 0);
39
42
  __decorate([
40
43
  query('textarea')
41
- ], UmTextArea.prototype, "input", void 0);
42
- UmTextArea = __decorate([
44
+ ], TextArea.prototype, "input", void 0);
45
+ TextArea = __decorate([
43
46
  customElement('u-text-area')
44
- ], UmTextArea);
45
- export { UmTextArea };
47
+ ], TextArea);
48
+ export { TextArea };
46
49
  //# sourceMappingURL=text-area.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"text-area.js","sourceRoot":"","sources":["../../src/text-area/text-area.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,IAAI,EAAsB,OAAO,EAAE,MAAM,KAAK,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAE9C,OAAO,EAAE,wBAAwB,EAAE,MAAM,8DAA8D,CAAC;AACxG,OAAO,EAAE,eAAe,EAAE,MAAM,8CAA8C,CAAC;AAC/E,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAGxC,IAAM,UAAU,GAAhB,MAAM,UAAW,SAAQ,wBAAwB;IAAjD;;QAGuB,SAAI,GAAG,CAAC,CAAC;IAyBvC,CAAC;aA3BiB,WAAM,GAAmB,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,AAAnD,CAAoD;IAMvD,aAAa;QAC9B,OAAO,IAAI,CAAA;;;;eAIA,IAAI,CAAC,EAAE,IAAI,OAAO;;;sBAGX,IAAI,CAAC,QAAQ;uBACZ,IAAI,CAAC,UAAU;yBACb,IAAI,CAAC,YAAY;2BACf,IAAI,CAAC,cAAc;iBAC7B,IAAI,CAAC,IAAI,IAAI,OAAO;sBACf,IAAI,CAAC,SAAS,IAAI,OAAO;kBAC7B,IAAI,CAAC,IAAI;yBACF,IAAI,CAAC,WAAW;mBACtB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;mBACjB,IAAI,CAAC,YAAY;;KAE/B,CAAC;IACJ,CAAC;;AAxB2B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;wCAAU;AAET;IAA3B,KAAK,CAAC,UAAU,CAAC;yCAAsC;AAL7C,UAAU;IADtB,aAAa,CAAC,aAAa,CAAC;GAChB,UAAU,CA4BtB","sourcesContent":["import { CSSResultGroup } from '@lit/reactive-element/css-tag';\n\nimport { html, HTMLTemplateResult, nothing } from 'lit';\nimport { customElement, property, query } from 'lit/decorators.js';\nimport { live } from 'lit/directives/live.js';\n\nimport { UmNativeTextFieldWrapper } from '../shared/char-count-text-field/native-text-field-wrapper.js';\nimport { UmTextFieldBase } from '../shared/text-field-base/text-field-base.js';\nimport { styles } from './text-area.styles.js';\n\n@customElement('u-text-area')\nexport class UmTextArea extends UmNativeTextFieldWrapper {\n static override styles: CSSResultGroup = [UmTextFieldBase.styles, styles];\n\n @property({ type: Number }) rows = 2;\n\n @query('textarea') override input!: HTMLTextAreaElement;\n\n protected override renderControl(): HTMLTemplateResult {\n return html`\n <div class=\"input\">\n <textarea\n part=\"input\"\n id=${this.id || nothing}\n aria-labelledby=\"label\"\n aria-describedBy=\"supporting-text\"\n ?disabled=${this.disabled}\n spellcheck=${this.spellcheck}\n autocomplete=${this.autocomplete}\n autocapitalize=${this.autocapitalize}\n role=${this.role ?? nothing}\n maxlength=${this.maxlength ?? nothing}\n .rows=${this.rows}\n .placeholder=${this.placeholder}\n .value=${live(this._value)}\n @input=${this._handleInput}></textarea>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'u-text-area': UmTextArea;\n }\n}\n"]}
1
+ {"version":3,"file":"text-area.js","sourceRoot":"","sources":["../../src/text-area/text-area.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,IAAI,EAAsB,OAAO,EAAE,MAAM,KAAK,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAE9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,8DAA8D,CAAC;AACtG,OAAO,EAAE,aAAa,EAAE,MAAM,8CAA8C,CAAC;AAC7E,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAGxC,IAAM,QAAQ,GAAd,MAAM,QAAS,SAAQ,sBAAsB;IAA7C;;QAGL;;WAEG;QACyB,SAAI,GAAG,CAAC,CAAC;IAyBvC,CAAC;aA9BiB,WAAM,GAAmB,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,AAAjD,CAAkD;IASrD,aAAa;QAC9B,OAAO,IAAI,CAAA;;;;eAIA,IAAI,CAAC,EAAE,IAAI,OAAO;;;sBAGX,IAAI,CAAC,QAAQ;uBACZ,IAAI,CAAC,UAAU;yBACb,IAAI,CAAC,YAAY;2BACf,IAAI,CAAC,cAAc;iBAC7B,IAAI,CAAC,IAAI,IAAI,OAAO;sBACf,IAAI,CAAC,SAAS,IAAI,OAAO;kBAC7B,IAAI,CAAC,IAAI;yBACF,IAAI,CAAC,WAAW;mBACtB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;mBACjB,IAAI,CAAC,YAAY;;KAE/B,CAAC;IACJ,CAAC;;AAxB2B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;sCAAU;AAET;IAA3B,KAAK,CAAC,UAAU,CAAC;uCAAsC;AAR7C,QAAQ;IADpB,aAAa,CAAC,aAAa,CAAC;GAChB,QAAQ,CA+BpB","sourcesContent":["import { CSSResultGroup } from '@lit/reactive-element/css-tag';\n\nimport { html, HTMLTemplateResult, nothing } from 'lit';\nimport { customElement, property, query } from 'lit/decorators.js';\nimport { live } from 'lit/directives/live.js';\n\nimport { NativeTextFieldWrapper } from '../shared/char-count-text-field/native-text-field-wrapper.js';\nimport { TextFieldBase } from '../shared/text-field-base/text-field-base.js';\nimport { styles } from './text-area.styles.js';\n\n@customElement('u-text-area')\nexport class TextArea extends NativeTextFieldWrapper {\n static override styles: CSSResultGroup = [TextFieldBase.styles, styles];\n\n /**\n * The minimum number of visible text rows\n */\n @property({ type: Number }) rows = 2;\n\n @query('textarea') override input!: HTMLTextAreaElement;\n\n protected override renderControl(): HTMLTemplateResult {\n return html`\n <div class=\"input\">\n <textarea\n part=\"input\"\n id=${this.id || nothing}\n aria-labelledby=\"label\"\n aria-describedBy=\"supporting-text\"\n ?disabled=${this.disabled}\n spellcheck=${this.spellcheck}\n autocomplete=${this.autocomplete}\n autocapitalize=${this.autocapitalize}\n role=${this.role ?? nothing}\n maxlength=${this.maxlength ?? nothing}\n .rows=${this.rows}\n .placeholder=${this.placeholder}\n .value=${live(this._value)}\n @input=${this._handleInput}></textarea>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'u-text-area': TextArea;\n }\n}\n"]}
@@ -1,19 +1,47 @@
1
1
  import { CSSResultGroup } from '@lit/reactive-element/css-tag';
2
2
  import { HTMLTemplateResult } from 'lit';
3
- import { UmNativeTextFieldWrapper } from '../shared/char-count-text-field/native-text-field-wrapper.js';
4
- export declare class UmTextField extends UmNativeTextFieldWrapper {
3
+ import { NativeTextFieldWrapper } from '../shared/char-count-text-field/native-text-field-wrapper.js';
4
+ import { FieldValidity } from '../shared/text-field-base/text-field-base.js';
5
+ export declare class TextField extends NativeTextFieldWrapper {
5
6
  static styles: CSSResultGroup;
7
+ /**
8
+ * The input type. Mirrors the native `input` element's `type` attribute
9
+ * (e.g. `text`, `email`, `password`, `number`).
10
+ */
6
11
  type: string;
12
+ /**
13
+ * Text rendered in the default `prefix` slot, shown before the input
14
+ */
7
15
  prefixText: string | undefined;
16
+ /**
17
+ * Text rendered in the default `suffix` slot, shown after the input
18
+ */
8
19
  suffixText: string | undefined;
20
+ /**
21
+ * Whether the field's value is read-only
22
+ */
9
23
  readOnly: boolean;
24
+ /**
25
+ * A regular expression the value must match for constraint validation
26
+ * (mirrors the native `input` `pattern` attribute)
27
+ */
28
+ pattern: string | undefined;
29
+ /**
30
+ * Minimum number of characters required for constraint validation
31
+ * (mirrors the native `input` `minlength` attribute)
32
+ */
33
+ minlength: number | undefined;
34
+ /**
35
+ * Mirrors the native `autocapitalize` attribute on the underlying input
36
+ */
10
37
  autocapitalize: string;
11
38
  input: HTMLInputElement;
12
39
  protected renderControl(): HTMLTemplateResult;
40
+ protected _getValidity(): FieldValidity;
13
41
  }
14
42
  declare global {
15
43
  interface HTMLElementTagNameMap {
16
- 'u-text-field': UmTextField;
44
+ 'u-text-field': TextField;
17
45
  }
18
46
  }
19
47
  //# sourceMappingURL=text-field.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"text-field.d.ts","sourceRoot":"","sources":["../../src/text-field/text-field.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,OAAO,EAAQ,kBAAkB,EAAW,MAAM,KAAK,CAAC;AAIxD,OAAO,EAAE,wBAAwB,EAAE,MAAM,8DAA8D,CAAC;AAIxG,qBACa,WAAY,SAAQ,wBAAwB;IACvD,OAAgB,MAAM,EAAE,cAAc,CAAoC;IAE9D,IAAI,SAAU;IACc,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,QAAQ,UAAS;IACvB,cAAc,EAAG,MAAM,CAAC;IAE9C,KAAK,EAAG,gBAAgB,CAAC;cAEtB,aAAa,IAAI,kBAAkB;CA8BvD;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,cAAc,EAAE,WAAW,CAAC;KAC7B;CACF"}
1
+ {"version":3,"file":"text-field.d.ts","sourceRoot":"","sources":["../../src/text-field/text-field.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,OAAO,EAAQ,kBAAkB,EAAW,MAAM,KAAK,CAAC;AAIxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,8DAA8D,CAAC;AACtG,OAAO,EAAE,aAAa,EAAiB,MAAM,8CAA8C,CAAC;AAG5F,qBACa,SAAU,SAAQ,sBAAsB;IACnD,OAAgB,MAAM,EAAE,cAAc,CAAkC;IAExE;;;OAGG;IACS,IAAI,SAAU;IAE1B;;OAEG;IACqC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAEvE;;OAEG;IACqC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAEvE;;OAEG;IACyC,QAAQ,UAAS;IAE7D;;;OAGG;IACS,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAExC;;;OAGG;IACyB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAE1D;;OAEG;IACmC,cAAc,EAAG,MAAM,CAAC;IAE9C,KAAK,EAAG,gBAAgB,CAAC;cAEtB,aAAa,IAAI,kBAAkB;cAkCnC,YAAY,IAAI,aAAa;CA0BjD;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,cAAc,EAAE,SAAS,CAAC;KAC3B;CACF"}
@@ -2,16 +2,23 @@ import { __decorate } from "tslib";
2
2
  import { html, nothing } from 'lit';
3
3
  import { customElement, property, query } from 'lit/decorators.js';
4
4
  import { live } from 'lit/directives/live.js';
5
- import { UmNativeTextFieldWrapper } from '../shared/char-count-text-field/native-text-field-wrapper.js';
6
- import { UmTextFieldBase } from '../shared/text-field-base/text-field-base.js';
5
+ import { NativeTextFieldWrapper } from '../shared/char-count-text-field/native-text-field-wrapper.js';
6
+ import { TextFieldBase } from '../shared/text-field-base/text-field-base.js';
7
7
  import { styles } from './text-field.styles.js';
8
- let UmTextField = class UmTextField extends UmNativeTextFieldWrapper {
8
+ let TextField = class TextField extends NativeTextFieldWrapper {
9
9
  constructor() {
10
10
  super(...arguments);
11
+ /**
12
+ * The input type. Mirrors the native `input` element's `type` attribute
13
+ * (e.g. `text`, `email`, `password`, `number`).
14
+ */
11
15
  this.type = 'text';
16
+ /**
17
+ * Whether the field's value is read-only
18
+ */
12
19
  this.readOnly = false;
13
20
  }
14
- static { this.styles = [UmTextFieldBase.styles, styles]; }
21
+ static { this.styles = [TextFieldBase.styles, styles]; }
15
22
  renderControl() {
16
23
  return html `
17
24
  <slot class="prefix" name="prefix">
@@ -26,12 +33,15 @@ let UmTextField = class UmTextField extends UmNativeTextFieldWrapper {
26
33
  aria-describedBy="supporting-text"
27
34
  ?readonly=${this.readOnly}
28
35
  ?disabled=${this.disabled}
36
+ ?required=${this.required}
29
37
  spellcheck=${this.spellcheck}
30
38
  autocomplete=${this.autocomplete ?? nothing}
31
39
  autocapitalize=${this.autocapitalize || nothing}
32
40
  ?autofocus=${this.autofocus}
33
41
  role=${this.role ?? nothing}
34
42
  maxlength=${this.maxlength ?? nothing}
43
+ minlength=${this.minlength ?? nothing}
44
+ pattern=${this.pattern ?? nothing}
35
45
  .placeholder=${this.placeholder ?? nothing}
36
46
  .value=${live(this._value)}
37
47
  @input=${this._handleInput}
@@ -42,27 +52,57 @@ let UmTextField = class UmTextField extends UmNativeTextFieldWrapper {
42
52
  </slot>
43
53
  `;
44
54
  }
55
+ _getValidity() {
56
+ // Delegate to the native input: `required`/`pattern`/`minlength`/`maxlength`
57
+ // are mirrored onto it, so its ValidityState is the single source of truth.
58
+ if (!this.input) {
59
+ return super._getValidity();
60
+ }
61
+ const v = this.input.validity;
62
+ return {
63
+ flags: {
64
+ valueMissing: v.valueMissing,
65
+ typeMismatch: v.typeMismatch,
66
+ patternMismatch: v.patternMismatch,
67
+ tooLong: v.tooLong,
68
+ tooShort: v.tooShort,
69
+ rangeUnderflow: v.rangeUnderflow,
70
+ rangeOverflow: v.rangeOverflow,
71
+ stepMismatch: v.stepMismatch,
72
+ badInput: v.badInput,
73
+ customError: v.customError,
74
+ },
75
+ message: this.input.validationMessage,
76
+ anchor: this.input,
77
+ };
78
+ }
45
79
  };
46
80
  __decorate([
47
81
  property()
48
- ], UmTextField.prototype, "type", void 0);
82
+ ], TextField.prototype, "type", void 0);
49
83
  __decorate([
50
84
  property({ attribute: 'prefix-text' })
51
- ], UmTextField.prototype, "prefixText", void 0);
85
+ ], TextField.prototype, "prefixText", void 0);
52
86
  __decorate([
53
87
  property({ attribute: 'suffix-text' })
54
- ], UmTextField.prototype, "suffixText", void 0);
88
+ ], TextField.prototype, "suffixText", void 0);
55
89
  __decorate([
56
90
  property({ type: Boolean, reflect: true })
57
- ], UmTextField.prototype, "readOnly", void 0);
91
+ ], TextField.prototype, "readOnly", void 0);
92
+ __decorate([
93
+ property()
94
+ ], TextField.prototype, "pattern", void 0);
95
+ __decorate([
96
+ property({ type: Number })
97
+ ], TextField.prototype, "minlength", void 0);
58
98
  __decorate([
59
99
  property({ reflect: true })
60
- ], UmTextField.prototype, "autocapitalize", void 0);
100
+ ], TextField.prototype, "autocapitalize", void 0);
61
101
  __decorate([
62
102
  query('input')
63
- ], UmTextField.prototype, "input", void 0);
64
- UmTextField = __decorate([
103
+ ], TextField.prototype, "input", void 0);
104
+ TextField = __decorate([
65
105
  customElement('u-text-field')
66
- ], UmTextField);
67
- export { UmTextField };
106
+ ], TextField);
107
+ export { TextField };
68
108
  //# sourceMappingURL=text-field.js.map