@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
@@ -1,6 +1,6 @@
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
6
  /**
@@ -14,9 +14,9 @@ export declare class UmTabBar extends LitElement {
14
14
  assignedElements: HTMLElement[];
15
15
  get activeTabIndex(): number;
16
16
  set activeTabIndex(index: number);
17
- get activeTab(): UmTab | null;
18
- set activeTab(activeTab: UmTab | null);
19
- 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;
20
20
  connectedCallback(): void;
21
21
  protected render(): TemplateResult;
22
22
  constructor();
@@ -25,7 +25,7 @@ export declare class UmTabBar extends LitElement {
25
25
  }
26
26
  declare global {
27
27
  interface HTMLElementTagNameMap {
28
- 'u-tab-bar': UmTabBar;
28
+ 'u-tab-bar': TabBar;
29
29
  }
30
30
  }
31
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;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,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
  }
@@ -104,17 +105,8 @@ let UmTabBar = class UmTabBar extends LitElement {
104
105
  * The Tab Bar variant to render
105
106
  */
106
107
  this.variant = 'primary';
107
- this.#handleSlotChange = (e) => {
108
- const slot = e.target;
109
- this.#tabs =
110
- slot.assignedElements({ flatten: true }).filter(element => element instanceof UmTab);
111
- for (const tab of this.#tabs) {
112
- tab._bar = this;
113
- }
114
- if (this.activeTabIndex > -1) {
115
- return;
116
- }
117
- this.activeTab = this.#tabs[0];
108
+ this.#handleSlotChange = () => {
109
+ this.#registerTabs();
118
110
  };
119
111
  this.#handleContainerScrollEnd = () => {
120
112
  this._setScrollIndicatorsActive();
@@ -134,6 +126,30 @@ let UmTabBar = class UmTabBar extends LitElement {
134
126
  this.#resizeObserver.observe(this);
135
127
  }
136
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
+ }
137
153
  #handleContainerScrollEnd;
138
154
  _updateTabIndicator() {
139
155
  if (!this._tabIndicator) {
@@ -176,29 +192,30 @@ let UmTabBar = class UmTabBar extends LitElement {
176
192
  }
177
193
  async #attach() {
178
194
  await this.updateComplete;
195
+ this.#registerTabs();
179
196
  this._setScrollIndicatorsActive();
180
197
  }
181
198
  };
182
199
  __decorate([
183
200
  property({ reflect: true })
184
- ], UmTabBar.prototype, "variant", void 0);
201
+ ], TabBar.prototype, "variant", void 0);
185
202
  __decorate([
186
203
  query('.scroll-left')
187
- ], UmTabBar.prototype, "_scrollLeft", void 0);
204
+ ], TabBar.prototype, "_scrollLeft", void 0);
188
205
  __decorate([
189
206
  query('.scroll-right')
190
- ], UmTabBar.prototype, "_scrollRight", void 0);
207
+ ], TabBar.prototype, "_scrollRight", void 0);
191
208
  __decorate([
192
209
  query('.container')
193
- ], UmTabBar.prototype, "_container", void 0);
210
+ ], TabBar.prototype, "_container", void 0);
194
211
  __decorate([
195
212
  query('.tab-indicator')
196
- ], UmTabBar.prototype, "_tabIndicator", void 0);
213
+ ], TabBar.prototype, "_tabIndicator", void 0);
197
214
  __decorate([
198
215
  queryAssignedElements({ flatten: true })
199
- ], UmTabBar.prototype, "assignedElements", void 0);
200
- UmTabBar = __decorate([
216
+ ], TabBar.prototype, "assignedElements", void 0);
217
+ TabBar = __decorate([
201
218
  customElement('u-tab-bar')
202
- ], UmTabBar);
203
- export { UmTabBar };
219
+ ], TabBar);
220
+ export { TabBar };
204
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 /**\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(): 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,10 +1,10 @@
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
10
  /**
@@ -23,7 +23,7 @@ export declare class UmTab extends UmButtonWrapper {
23
23
  }
24
24
  declare global {
25
25
  interface HTMLElementTagNameMap {
26
- 'u-tab': UmTab;
26
+ 'u-tab': Tab;
27
27
  }
28
28
  }
29
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;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,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;
@@ -88,15 +88,15 @@ let UmTab = class UmTab extends UmButtonWrapper {
88
88
  };
89
89
  __decorate([
90
90
  state()
91
- ], UmTab.prototype, "active", null);
91
+ ], Tab.prototype, "active", null);
92
92
  __decorate([
93
93
  property({ type: Boolean })
94
- ], UmTab.prototype, "hasIcon", void 0);
94
+ ], Tab.prototype, "hasIcon", void 0);
95
95
  __decorate([
96
96
  query('.container')
97
- ], UmTab.prototype, "_container", void 0);
98
- UmTab = __decorate([
97
+ ], Tab.prototype, "_container", void 0);
98
+ Tab = __decorate([
99
99
  customElement('u-tab')
100
- ], UmTab);
101
- export { UmTab };
100
+ ], Tab);
101
+ export { Tab };
102
102
  //# sourceMappingURL=tab.js.map
@@ -1 +1 @@
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 { 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 /**\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': UmTab;\n }\n}\n"]}
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,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAGlC,IAAM,GAAG,GAAT,MAAM,GAAI,SAAQ,aAAa;aACpB,WAAM,GAAG,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,AAAjC,CAAkC;IAI/C,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;IAUD,IAAI,cAAc;QAChB,OAAO,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,aAAa,CAAC;IACzD,CAAC;IAED;QACE,KAAK,EAAE,CAAC;QAvCV,SAAI,GAAkB,IAAI,CAAC;QAElB,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;QAoBH;;;;WAIG;QAC0B,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;;AA9FD;IADC,KAAK,EAAE;iCAGP;AAoB4B;IAA5B,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;oCAAiB;AACP;IAArC,KAAK,CAAC,YAAY,CAAC;uCAA2C;AAnCpD,GAAG;IADf,aAAa,CAAC,OAAO,CAAC;GACV,GAAG,CA2Gf","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,7 +1,7 @@
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
6
  /**
7
7
  * The minimum number of visible text rows
@@ -12,7 +12,7 @@ export declare class UmTextArea extends UmNativeTextFieldWrapper {
12
12
  }
13
13
  declare global {
14
14
  interface HTMLElementTagNameMap {
15
- 'u-text-area': UmTextArea;
15
+ 'u-text-area': TextArea;
16
16
  }
17
17
  }
18
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;IAE1E;;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,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,10 +2,10 @@ 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
11
  /**
@@ -13,7 +13,7 @@ let UmTextArea = class UmTextArea extends UmNativeTextFieldWrapper {
13
13
  */
14
14
  this.rows = 2;
15
15
  }
16
- static { this.styles = [UmTextFieldBase.styles, styles]; }
16
+ static { this.styles = [TextFieldBase.styles, styles]; }
17
17
  renderControl() {
18
18
  return html `
19
19
  <div class="input">
@@ -38,12 +38,12 @@ let UmTextArea = class UmTextArea extends UmNativeTextFieldWrapper {
38
38
  };
39
39
  __decorate([
40
40
  property({ type: Number })
41
- ], UmTextArea.prototype, "rows", void 0);
41
+ ], TextArea.prototype, "rows", void 0);
42
42
  __decorate([
43
43
  query('textarea')
44
- ], UmTextArea.prototype, "input", void 0);
45
- UmTextArea = __decorate([
44
+ ], TextArea.prototype, "input", void 0);
45
+ TextArea = __decorate([
46
46
  customElement('u-text-area')
47
- ], UmTextArea);
48
- export { UmTextArea };
47
+ ], TextArea);
48
+ export { TextArea };
49
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;;QAGL;;WAEG;QACyB,SAAI,GAAG,CAAC,CAAC;IAyBvC,CAAC;aA9BiB,WAAM,GAAmB,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,AAAnD,CAAoD;IASvD,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;AAR7C,UAAU;IADtB,aAAa,CAAC,aAAa,CAAC;GAChB,UAAU,CA+BtB","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 /**\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': 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,7 +1,8 @@
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;
6
7
  /**
7
8
  * The input type. Mirrors the native `input` element's `type` attribute
@@ -20,16 +21,27 @@ export declare class UmTextField extends UmNativeTextFieldWrapper {
20
21
  * Whether the field's value is read-only
21
22
  */
22
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;
23
34
  /**
24
35
  * Mirrors the native `autocapitalize` attribute on the underlying input
25
36
  */
26
37
  autocapitalize: string;
27
38
  input: HTMLInputElement;
28
39
  protected renderControl(): HTMLTemplateResult;
40
+ protected _getValidity(): FieldValidity;
29
41
  }
30
42
  declare global {
31
43
  interface HTMLElementTagNameMap {
32
- 'u-text-field': UmTextField;
44
+ 'u-text-field': TextField;
33
45
  }
34
46
  }
35
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;IAE1E;;;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;;OAEG;IACmC,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,10 +2,10 @@ 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
11
  /**
@@ -18,7 +18,7 @@ let UmTextField = class UmTextField extends UmNativeTextFieldWrapper {
18
18
  */
19
19
  this.readOnly = false;
20
20
  }
21
- static { this.styles = [UmTextFieldBase.styles, styles]; }
21
+ static { this.styles = [TextFieldBase.styles, styles]; }
22
22
  renderControl() {
23
23
  return html `
24
24
  <slot class="prefix" name="prefix">
@@ -33,12 +33,15 @@ let UmTextField = class UmTextField extends UmNativeTextFieldWrapper {
33
33
  aria-describedBy="supporting-text"
34
34
  ?readonly=${this.readOnly}
35
35
  ?disabled=${this.disabled}
36
+ ?required=${this.required}
36
37
  spellcheck=${this.spellcheck}
37
38
  autocomplete=${this.autocomplete ?? nothing}
38
39
  autocapitalize=${this.autocapitalize || nothing}
39
40
  ?autofocus=${this.autofocus}
40
41
  role=${this.role ?? nothing}
41
42
  maxlength=${this.maxlength ?? nothing}
43
+ minlength=${this.minlength ?? nothing}
44
+ pattern=${this.pattern ?? nothing}
42
45
  .placeholder=${this.placeholder ?? nothing}
43
46
  .value=${live(this._value)}
44
47
  @input=${this._handleInput}
@@ -49,27 +52,57 @@ let UmTextField = class UmTextField extends UmNativeTextFieldWrapper {
49
52
  </slot>
50
53
  `;
51
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
+ }
52
79
  };
53
80
  __decorate([
54
81
  property()
55
- ], UmTextField.prototype, "type", void 0);
82
+ ], TextField.prototype, "type", void 0);
56
83
  __decorate([
57
84
  property({ attribute: 'prefix-text' })
58
- ], UmTextField.prototype, "prefixText", void 0);
85
+ ], TextField.prototype, "prefixText", void 0);
59
86
  __decorate([
60
87
  property({ attribute: 'suffix-text' })
61
- ], UmTextField.prototype, "suffixText", void 0);
88
+ ], TextField.prototype, "suffixText", void 0);
62
89
  __decorate([
63
90
  property({ type: Boolean, reflect: true })
64
- ], 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);
65
98
  __decorate([
66
99
  property({ reflect: true })
67
- ], UmTextField.prototype, "autocapitalize", void 0);
100
+ ], TextField.prototype, "autocapitalize", void 0);
68
101
  __decorate([
69
102
  query('input')
70
- ], UmTextField.prototype, "input", void 0);
71
- UmTextField = __decorate([
103
+ ], TextField.prototype, "input", void 0);
104
+ TextField = __decorate([
72
105
  customElement('u-text-field')
73
- ], UmTextField);
74
- export { UmTextField };
106
+ ], TextField);
107
+ export { TextField };
75
108
  //# sourceMappingURL=text-field.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"text-field.js","sourceRoot":"","sources":["../../src/text-field/text-field.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,wBAAwB,CAAC;AAGzC,IAAM,WAAW,GAAjB,MAAM,WAAY,SAAQ,wBAAwB;IAAlD;;QAGL;;;WAGG;QACS,SAAI,GAAG,MAAM,CAAC;QAY1B;;WAEG;QACyC,aAAQ,GAAG,KAAK,CAAC;IAuC/D,CAAC;aA5DiB,WAAM,GAAmB,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,AAAnD,CAAoD;IA8BvD,aAAa;QAC9B,OAAO,IAAI,CAAA;;gBAEC,IAAI,CAAC,UAAU;;;;iBAId,IAAI,CAAC,IAAI;;eAEX,IAAI,CAAC,EAAE,IAAI,OAAO;;;sBAGX,IAAI,CAAC,QAAQ;sBACb,IAAI,CAAC,QAAQ;uBACZ,IAAI,CAAC,UAAU;yBACb,IAAI,CAAC,YAAY,IAAI,OAAO;2BAC1B,IAAI,CAAC,cAAc,IAAI,OAAO;uBAClC,IAAI,CAAC,SAAS;iBACpB,IAAI,CAAC,IAAI,IAAI,OAAO;sBACf,IAAI,CAAC,SAAS,IAAI,OAAO;yBACtB,IAAI,CAAC,WAAW,IAAI,OAAO;mBACjC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;mBACjB,IAAI,CAAC,YAAY;qBACf,IAAI,CAAC,cAAc;;;gBAGxB,IAAI,CAAC,UAAU;;KAE1B,CAAC;IACJ,CAAC;;AArDW;IAAX,QAAQ,EAAE;yCAAe;AAKc;IAAvC,QAAQ,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC;+CAAgC;AAK/B;IAAvC,QAAQ,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC;+CAAgC;AAK3B;IAA3C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;6CAAkB;AAKvB;IAArC,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;mDAAkC;AAE9C;IAAf,KAAK,CAAC,OAAO,CAAC;0CAA0B;AA7B9B,WAAW;IADvB,aAAa,CAAC,cAAc,CAAC;GACjB,WAAW,CA6DvB","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-field.styles.js';\n\n@customElement('u-text-field')\nexport class UmTextField extends UmNativeTextFieldWrapper {\n static override styles: CSSResultGroup = [UmTextFieldBase.styles, styles];\n\n /**\n * The input type. Mirrors the native `input` element's `type` attribute\n * (e.g. `text`, `email`, `password`, `number`).\n */\n @property() type = 'text';\n\n /**\n * Text rendered in the default `prefix` slot, shown before the input\n */\n @property({ attribute: 'prefix-text' }) prefixText: string | undefined;\n\n /**\n * Text rendered in the default `suffix` slot, shown after the input\n */\n @property({ attribute: 'suffix-text' }) suffixText: string | undefined;\n\n /**\n * Whether the field's value is read-only\n */\n @property({ type: Boolean, reflect: true }) readOnly = false;\n\n /**\n * Mirrors the native `autocapitalize` attribute on the underlying input\n */\n @property({ reflect: true }) override autocapitalize!: string;\n\n @query('input') input!: HTMLInputElement;\n\n protected override renderControl(): HTMLTemplateResult {\n return html`\n <slot class=\"prefix\" name=\"prefix\">\n <span>${this.prefixText}</span>\n </slot>\n <div class=\"input\">\n <input\n type=${this.type}\n part=\"input\"\n id=${this.id || nothing}\n aria-labelledby=\"label\"\n aria-describedBy=\"supporting-text\"\n ?readonly=${this.readOnly}\n ?disabled=${this.disabled}\n spellcheck=${this.spellcheck}\n autocomplete=${this.autocomplete ?? nothing}\n autocapitalize=${this.autocapitalize || nothing}\n ?autofocus=${this.autofocus}\n role=${this.role ?? nothing}\n maxlength=${this.maxlength ?? nothing}\n .placeholder=${this.placeholder ?? nothing}\n .value=${live(this._value)}\n @input=${this._handleInput}\n @keydown=${this._handleKeyDown} />\n </div>\n <slot class=\"suffix\" name=\"suffix\">\n <span>${this.suffixText}</span>\n </slot>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'u-text-field': UmTextField;\n }\n}\n"]}
1
+ {"version":3,"file":"text-field.js","sourceRoot":"","sources":["../../src/text-field/text-field.ts"],"names":[],"mappings":"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","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 { FieldValidity, TextFieldBase } from '../shared/text-field-base/text-field-base.js';\nimport { styles } from './text-field.styles.js';\n\n@customElement('u-text-field')\nexport class TextField extends NativeTextFieldWrapper {\n static override styles: CSSResultGroup = [TextFieldBase.styles, styles];\n\n /**\n * The input type. Mirrors the native `input` element's `type` attribute\n * (e.g. `text`, `email`, `password`, `number`).\n */\n @property() type = 'text';\n\n /**\n * Text rendered in the default `prefix` slot, shown before the input\n */\n @property({ attribute: 'prefix-text' }) prefixText: string | undefined;\n\n /**\n * Text rendered in the default `suffix` slot, shown after the input\n */\n @property({ attribute: 'suffix-text' }) suffixText: string | undefined;\n\n /**\n * Whether the field's value is read-only\n */\n @property({ type: Boolean, reflect: true }) readOnly = false;\n\n /**\n * A regular expression the value must match for constraint validation\n * (mirrors the native `input` `pattern` attribute)\n */\n @property() pattern: string | undefined;\n\n /**\n * Minimum number of characters required for constraint validation\n * (mirrors the native `input` `minlength` attribute)\n */\n @property({ type: Number }) minlength: number | undefined;\n\n /**\n * Mirrors the native `autocapitalize` attribute on the underlying input\n */\n @property({ reflect: true }) override autocapitalize!: string;\n\n @query('input') input!: HTMLInputElement;\n\n protected override renderControl(): HTMLTemplateResult {\n return html`\n <slot class=\"prefix\" name=\"prefix\">\n <span>${this.prefixText}</span>\n </slot>\n <div class=\"input\">\n <input\n type=${this.type}\n part=\"input\"\n id=${this.id || nothing}\n aria-labelledby=\"label\"\n aria-describedBy=\"supporting-text\"\n ?readonly=${this.readOnly}\n ?disabled=${this.disabled}\n ?required=${this.required}\n spellcheck=${this.spellcheck}\n autocomplete=${this.autocomplete ?? nothing}\n autocapitalize=${this.autocapitalize || nothing}\n ?autofocus=${this.autofocus}\n role=${this.role ?? nothing}\n maxlength=${this.maxlength ?? nothing}\n minlength=${this.minlength ?? nothing}\n pattern=${this.pattern ?? nothing}\n .placeholder=${this.placeholder ?? nothing}\n .value=${live(this._value)}\n @input=${this._handleInput}\n @keydown=${this._handleKeyDown} />\n </div>\n <slot class=\"suffix\" name=\"suffix\">\n <span>${this.suffixText}</span>\n </slot>\n `;\n }\n\n protected override _getValidity(): FieldValidity {\n // Delegate to the native input: `required`/`pattern`/`minlength`/`maxlength`\n // are mirrored onto it, so its ValidityState is the single source of truth.\n if (!this.input) {\n return super._getValidity();\n }\n\n const v = this.input.validity;\n\n return {\n flags: {\n valueMissing: v.valueMissing,\n typeMismatch: v.typeMismatch,\n patternMismatch: v.patternMismatch,\n tooLong: v.tooLong,\n tooShort: v.tooShort,\n rangeUnderflow: v.rangeUnderflow,\n rangeOverflow: v.rangeOverflow,\n stepMismatch: v.stepMismatch,\n badInput: v.badInput,\n customError: v.customError,\n },\n message: this.input.validationMessage,\n anchor: this.input,\n };\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'u-text-field': TextField;\n }\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import { HTMLTemplateResult, LitElement } from 'lit';
2
- export declare class UmHighlight extends LitElement {
2
+ export declare class Highlight extends LitElement {
3
3
  #private;
4
4
  static styles: import("lit").CSSResult;
5
5
  private parts;
@@ -18,7 +18,7 @@ export declare class UmHighlight extends LitElement {
18
18
  }
19
19
  declare global {
20
20
  interface HTMLElementTagNameMap {
21
- 'u-highlight': UmHighlight;
21
+ 'u-highlight': Highlight;
22
22
  }
23
23
  }
24
24
  //# sourceMappingURL=highlight.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"highlight.d.ts","sourceRoot":"","sources":["../../src/typeahead/highlight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,kBAAkB,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAS3D,qBACa,WAAY,SAAQ,UAAU;;IACzC,OAAgB,MAAM,0BAAU;IAIvB,OAAO,CAAC,KAAK,CAAuB;IAE7C;;OAEG;IACH,IACI,MAAM,IAAI,MAAM,GAAG,SAAS,CAE/B;IAED,IAAI,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAInC;IAED;;OAEG;IACH,IACI,IAAI,IAAI,MAAM,GAAG,SAAS,CAE7B;IAED,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAIjC;cAEkB,MAAM,IAAI,kBAAkB,GAAG,kBAAkB,EAAE;IAQtE,OAAO,CAAC,QAAQ;CAmBjB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,aAAa,EAAE,WAAW,CAAC;KAC5B;CACF"}
1
+ {"version":3,"file":"highlight.d.ts","sourceRoot":"","sources":["../../src/typeahead/highlight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,kBAAkB,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAS3D,qBACa,SAAU,SAAQ,UAAU;;IACvC,OAAgB,MAAM,0BAAU;IAIvB,OAAO,CAAC,KAAK,CAAuB;IAE7C;;OAEG;IACH,IACI,MAAM,IAAI,MAAM,GAAG,SAAS,CAE/B;IAED,IAAI,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAInC;IAED;;OAEG;IACH,IACI,IAAI,IAAI,MAAM,GAAG,SAAS,CAE7B;IAED,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAIjC;cAEkB,MAAM,IAAI,kBAAkB,GAAG,kBAAkB,EAAE;IAQtE,OAAO,CAAC,QAAQ;CAmBjB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,aAAa,EAAE,SAAS,CAAC;KAC1B;CACF"}