@editora/ui-core 0.2.1 → 0.3.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 (365) hide show
  1. package/dist/{ElementBase-DxbvhLJs.js → ElementBase-CbUsP3D6.js} +1 -1
  2. package/dist/{ElementBase-BeZT54Hj.mjs → ElementBase-D5QsC5Vw.mjs} +10 -1
  3. package/dist/ElementBase.d.ts +7 -0
  4. package/dist/ElementBase.d.ts.map +1 -1
  5. package/dist/accordion.cjs.js +1 -1
  6. package/dist/accordion.esm.js +1 -1
  7. package/dist/add-icons-CVeHOsWl.js +1 -0
  8. package/dist/add-icons-DBUZJ0g7.mjs +14 -0
  9. package/dist/add-icons.cjs.js +1 -0
  10. package/dist/add-icons.d.ts +16 -0
  11. package/dist/add-icons.d.ts.map +1 -0
  12. package/dist/add-icons.esm.js +4 -0
  13. package/dist/alert-dialog.cjs.js +24 -24
  14. package/dist/alert-dialog.esm.js +112 -107
  15. package/dist/alert.cjs.js +8 -8
  16. package/dist/alert.esm.js +22 -22
  17. package/dist/animated-beam.cjs.js +1 -1
  18. package/dist/animated-beam.esm.js +1 -1
  19. package/dist/animated-list.cjs.js +1 -1
  20. package/dist/animated-list.esm.js +1 -1
  21. package/dist/animated-text.cjs.js +1 -1
  22. package/dist/animated-text.esm.js +1 -1
  23. package/dist/app-header.cjs.js +15 -3
  24. package/dist/app-header.esm.js +31 -4
  25. package/dist/aspect-ratio.cjs.js +1 -1
  26. package/dist/aspect-ratio.esm.js +1 -1
  27. package/dist/avatar.cjs.js +1 -1
  28. package/dist/avatar.esm.js +1 -1
  29. package/dist/badge.cjs.js +1 -1
  30. package/dist/badge.esm.js +1 -1
  31. package/dist/block-controls.cjs.js +1 -1
  32. package/dist/block-controls.esm.js +1 -1
  33. package/dist/box.cjs.js +1 -1
  34. package/dist/box.esm.js +1 -1
  35. package/dist/breadcrumb.cjs.js +4 -4
  36. package/dist/breadcrumb.esm.js +93 -84
  37. package/dist/button.cjs.js +520 -1
  38. package/dist/button.esm.js +682 -2
  39. package/dist/{calendar-CzpWDxLc.js → calendar-BsVqtpjM.js} +6 -6
  40. package/dist/{calendar-DkSDFg33.mjs → calendar-CFafqZVA.mjs} +6 -6
  41. package/dist/calendar.cjs.js +1 -1
  42. package/dist/calendar.esm.js +1 -1
  43. package/dist/card.cjs.js +6 -5
  44. package/dist/card.esm.js +52 -39
  45. package/dist/chart.cjs.js +2 -2
  46. package/dist/chart.esm.js +2 -2
  47. package/dist/checkbox.cjs.js +4 -4
  48. package/dist/checkbox.esm.js +36 -15
  49. package/dist/clone-source-BxK2pEVw.mjs +11 -0
  50. package/dist/clone-source-C7E_ri5f.js +1 -0
  51. package/dist/collapsible.cjs.js +1 -1
  52. package/dist/collapsible.esm.js +1 -1
  53. package/dist/color-picker.cjs.js +2 -2
  54. package/dist/color-picker.esm.js +3 -3
  55. package/dist/combobox.cjs.js +4 -4
  56. package/dist/combobox.esm.js +22 -19
  57. package/dist/command-palette.cjs.js +1 -1
  58. package/dist/command-palette.esm.js +1 -1
  59. package/dist/command.cjs.js +1 -1
  60. package/dist/command.esm.js +1 -1
  61. package/dist/components/ui-alert-dialog.d.ts.map +1 -1
  62. package/dist/components/ui-alert.d.ts.map +1 -1
  63. package/dist/components/ui-app-header.d.ts +1 -0
  64. package/dist/components/ui-app-header.d.ts.map +1 -1
  65. package/dist/components/ui-breadcrumb.d.ts.map +1 -1
  66. package/dist/components/ui-card.d.ts +7 -0
  67. package/dist/components/ui-card.d.ts.map +1 -1
  68. package/dist/components/ui-checkbox.d.ts +6 -0
  69. package/dist/components/ui-checkbox.d.ts.map +1 -1
  70. package/dist/components/ui-combobox.d.ts.map +1 -1
  71. package/dist/components/ui-date-time-picker.d.ts.map +1 -1
  72. package/dist/components/ui-dialog.d.ts +1 -0
  73. package/dist/components/ui-dialog.d.ts.map +1 -1
  74. package/dist/components/ui-drawer.d.ts.map +1 -1
  75. package/dist/components/ui-dropdown.d.ts.map +1 -1
  76. package/dist/components/ui-empty-state.d.ts.map +1 -1
  77. package/dist/components/ui-hover-card.d.ts.map +1 -1
  78. package/dist/components/ui-icon.d.ts +1 -0
  79. package/dist/components/ui-icon.d.ts.map +1 -1
  80. package/dist/components/ui-input.d.ts +16 -0
  81. package/dist/components/ui-input.d.ts.map +1 -1
  82. package/dist/components/ui-layout.d.ts +20 -0
  83. package/dist/components/ui-layout.d.ts.map +1 -1
  84. package/dist/components/ui-menu.d.ts +1 -0
  85. package/dist/components/ui-menu.d.ts.map +1 -1
  86. package/dist/components/ui-menubar.d.ts.map +1 -1
  87. package/dist/components/ui-multi-select.d.ts +6 -0
  88. package/dist/components/ui-multi-select.d.ts.map +1 -1
  89. package/dist/components/ui-number-field.d.ts +6 -0
  90. package/dist/components/ui-number-field.d.ts.map +1 -1
  91. package/dist/components/ui-pagination.d.ts.map +1 -1
  92. package/dist/components/ui-password-field.d.ts +11 -0
  93. package/dist/components/ui-password-field.d.ts.map +1 -1
  94. package/dist/components/ui-popover.d.ts.map +1 -1
  95. package/dist/components/ui-positioner.d.ts.map +1 -1
  96. package/dist/components/ui-radio-group.d.ts +6 -0
  97. package/dist/components/ui-radio-group.d.ts.map +1 -1
  98. package/dist/components/ui-rating.d.ts +1 -0
  99. package/dist/components/ui-rating.d.ts.map +1 -1
  100. package/dist/components/ui-select.d.ts +7 -0
  101. package/dist/components/ui-select.d.ts.map +1 -1
  102. package/dist/components/ui-sidebar.d.ts +1 -0
  103. package/dist/components/ui-sidebar.d.ts.map +1 -1
  104. package/dist/components/ui-slider.d.ts +6 -0
  105. package/dist/components/ui-slider.d.ts.map +1 -1
  106. package/dist/components/ui-sortable.d.ts +1 -0
  107. package/dist/components/ui-sortable.d.ts.map +1 -1
  108. package/dist/components/ui-switch.d.ts +6 -0
  109. package/dist/components/ui-switch.d.ts.map +1 -1
  110. package/dist/components/ui-tabs.d.ts +2 -0
  111. package/dist/components/ui-tabs.d.ts.map +1 -1
  112. package/dist/components/ui-textarea.d.ts +6 -0
  113. package/dist/components/ui-textarea.d.ts.map +1 -1
  114. package/dist/components/ui-toast.d.ts.map +1 -1
  115. package/dist/components/ui-tooltip.d.ts.map +1 -1
  116. package/dist/container.cjs.js +1 -1
  117. package/dist/container.esm.js +1 -1
  118. package/dist/context-menu.cjs.js +2 -2
  119. package/dist/context-menu.esm.js +2 -2
  120. package/dist/control-group.cjs.js +1 -1
  121. package/dist/control-group.esm.js +1 -1
  122. package/dist/data-table.cjs.js +5 -5
  123. package/dist/data-table.esm.js +7 -7
  124. package/dist/date-field.cjs.js +1 -1
  125. package/dist/date-field.esm.js +3 -3
  126. package/dist/date-picker.cjs.js +2 -2
  127. package/dist/date-picker.esm.js +17 -17
  128. package/dist/date-range-picker.cjs.js +2 -2
  129. package/dist/date-range-picker.esm.js +4 -4
  130. package/dist/date-range-time-picker.cjs.js +3 -3
  131. package/dist/date-range-time-picker.esm.js +16 -16
  132. package/dist/date-time-picker.cjs.js +26 -23
  133. package/dist/date-time-picker.esm.js +49 -46
  134. package/dist/{date-time-utils-zAx4ghvC.mjs → date-time-utils-CJUksWj3.mjs} +1 -1
  135. package/dist/{date-time-utils-C-4eHTyy.js → date-time-utils-D3hQQ5Om.js} +1 -1
  136. package/dist/description.cjs.js +1 -1
  137. package/dist/description.esm.js +1 -1
  138. package/dist/dialog.cjs.js +7 -7
  139. package/dist/dialog.esm.js +51 -47
  140. package/dist/direction-provider.cjs.js +1 -1
  141. package/dist/direction-provider.esm.js +1 -1
  142. package/dist/dismissable-layer.cjs.js +1 -1
  143. package/dist/dismissable-layer.esm.js +1 -1
  144. package/dist/dock.cjs.js +1 -1
  145. package/dist/dock.esm.js +1 -1
  146. package/dist/drawer.cjs.js +5 -5
  147. package/dist/drawer.esm.js +18 -17
  148. package/dist/dropdown.cjs.js +7 -7
  149. package/dist/dropdown.esm.js +39 -38
  150. package/dist/empty-state.cjs.js +12 -2
  151. package/dist/empty-state.esm.js +17 -7
  152. package/dist/field-error.cjs.js +1 -1
  153. package/dist/field-error.esm.js +1 -1
  154. package/dist/field.cjs.js +2 -2
  155. package/dist/field.esm.js +2 -2
  156. package/dist/fieldset.cjs.js +1 -1
  157. package/dist/fieldset.esm.js +1 -1
  158. package/dist/file-upload.cjs.js +1 -1
  159. package/dist/file-upload.esm.js +1 -1
  160. package/dist/flex.cjs.js +1 -1
  161. package/dist/flex.esm.js +1 -1
  162. package/dist/floating-toolbar.cjs.js +2 -2
  163. package/dist/floating-toolbar.esm.js +2 -2
  164. package/dist/focus-scope-Dl0qk5GP.mjs +177 -0
  165. package/dist/focus-scope-Doz0bnE1.js +1 -0
  166. package/dist/focus-scope.cjs.js +1 -1
  167. package/dist/focus-scope.esm.js +2 -2
  168. package/dist/form-control-B90_3kYN.js +1 -0
  169. package/dist/form-control-D9wWUMBl.mjs +86 -0
  170. package/dist/form.cjs.js +2 -2
  171. package/dist/form.esm.js +2 -2
  172. package/dist/gantt.cjs.js +2 -2
  173. package/dist/gantt.esm.js +2 -2
  174. package/dist/grid.cjs.js +1 -1
  175. package/dist/grid.esm.js +1 -1
  176. package/dist/hover-card.cjs.js +5 -5
  177. package/dist/hover-card.esm.js +19 -18
  178. package/dist/icon-cloud.cjs.js +1 -1
  179. package/dist/icon-cloud.esm.js +1 -1
  180. package/dist/icon.cjs.js +207 -1
  181. package/dist/icon.esm.js +294 -2
  182. package/dist/icons-CpCpPXV5.js +1 -0
  183. package/dist/icons-DWYbbhb0.mjs +115 -0
  184. package/dist/icons.d.ts +11 -1
  185. package/dist/icons.d.ts.map +1 -1
  186. package/dist/implicit-submit-B6M5Uc56.js +1 -0
  187. package/dist/implicit-submit-Lr0-q2LR.mjs +44 -0
  188. package/dist/index.cjs.js +1 -1
  189. package/dist/index.d.ts +1 -0
  190. package/dist/index.d.ts.map +1 -1
  191. package/dist/index.esm.js +309 -299
  192. package/dist/inline-edit.cjs.js +1 -1
  193. package/dist/inline-edit.esm.js +1 -1
  194. package/dist/input.cjs.js +62 -20
  195. package/dist/input.esm.js +164 -58
  196. package/dist/label.cjs.js +1 -1
  197. package/dist/label.esm.js +1 -1
  198. package/dist/layout.cjs.js +145 -4
  199. package/dist/layout.esm.js +278 -40
  200. package/dist/marquee.cjs.js +1 -1
  201. package/dist/marquee.esm.js +1 -1
  202. package/dist/masonry-grid.cjs.js +1 -1
  203. package/dist/masonry-grid.esm.js +1 -1
  204. package/dist/menu.cjs.js +8 -8
  205. package/dist/menu.esm.js +51 -47
  206. package/dist/menubar.cjs.js +9 -9
  207. package/dist/menubar.esm.js +41 -40
  208. package/dist/meter.cjs.js +1 -1
  209. package/dist/meter.esm.js +1 -1
  210. package/dist/multi-select.cjs.js +7 -7
  211. package/dist/multi-select.esm.js +55 -34
  212. package/dist/navigate-CXebafwF.mjs +18 -0
  213. package/dist/navigate-ChJVIIuS.js +1 -0
  214. package/dist/navigation-menu.cjs.js +1 -1
  215. package/dist/navigation-menu.esm.js +1 -1
  216. package/dist/number-attribute-BAF07JrU.mjs +8 -0
  217. package/dist/number-attribute-C4Rrl7d3.js +1 -0
  218. package/dist/number-field.cjs.js +8 -8
  219. package/dist/number-field.esm.js +90 -69
  220. package/dist/number-ticker.cjs.js +1 -1
  221. package/dist/number-ticker.esm.js +1 -1
  222. package/dist/odometer.cjs.js +1 -1
  223. package/dist/odometer.esm.js +1 -1
  224. package/dist/orbiter.cjs.js +1 -1
  225. package/dist/orbiter.esm.js +1 -1
  226. package/dist/pagination.cjs.js +24 -23
  227. package/dist/pagination.esm.js +61 -46
  228. package/dist/{panel-group-BVHJEdfx.js → panel-group-BIzzpQ5i.js} +1 -1
  229. package/dist/{panel-group-BxO_eNW6.mjs → panel-group-CFLjzRWI.mjs} +1 -1
  230. package/dist/panel-group.cjs.js +1 -1
  231. package/dist/panel-group.esm.js +1 -1
  232. package/dist/panel.cjs.js +1 -1
  233. package/dist/panel.esm.js +1 -1
  234. package/dist/password-field.cjs.js +36 -16
  235. package/dist/password-field.esm.js +113 -44
  236. package/dist/pin-input.cjs.js +1 -1
  237. package/dist/pin-input.esm.js +1 -1
  238. package/dist/placement-grid.cjs.js +1 -1
  239. package/dist/placement-grid.esm.js +1 -1
  240. package/dist/plugin-panel.cjs.js +1 -1
  241. package/dist/plugin-panel.esm.js +1 -1
  242. package/dist/popover.cjs.js +2 -2
  243. package/dist/popover.esm.js +28 -26
  244. package/dist/portal.cjs.js +1 -1
  245. package/dist/portal.esm.js +1 -1
  246. package/dist/positioner.cjs.js +2 -2
  247. package/dist/positioner.esm.js +35 -38
  248. package/dist/preload.cjs.js +221 -0
  249. package/dist/preload.css +220 -0
  250. package/dist/preload.d.ts +17 -0
  251. package/dist/preload.d.ts.map +1 -0
  252. package/dist/preload.esm.js +224 -0
  253. package/dist/presence.cjs.js +1 -1
  254. package/dist/presence.esm.js +1 -1
  255. package/dist/primitives/clone-source.d.ts +3 -0
  256. package/dist/primitives/clone-source.d.ts.map +1 -0
  257. package/dist/primitives/focus-scope.d.ts +6 -0
  258. package/dist/primitives/focus-scope.d.ts.map +1 -1
  259. package/dist/primitives/form-control.d.ts +68 -0
  260. package/dist/primitives/form-control.d.ts.map +1 -0
  261. package/dist/primitives/implicit-submit.d.ts +17 -0
  262. package/dist/primitives/implicit-submit.d.ts.map +1 -0
  263. package/dist/primitives/navigate.d.ts +27 -0
  264. package/dist/primitives/navigate.d.ts.map +1 -0
  265. package/dist/primitives/number-attribute.d.ts +7 -0
  266. package/dist/primitives/number-attribute.d.ts.map +1 -0
  267. package/dist/primitives/slotted-input.d.ts +19 -0
  268. package/dist/primitives/slotted-input.d.ts.map +1 -0
  269. package/dist/progress.cjs.js +3 -3
  270. package/dist/progress.esm.js +3 -3
  271. package/dist/quick-actions.cjs.js +5 -5
  272. package/dist/quick-actions.esm.js +3 -3
  273. package/dist/radio-group.cjs.js +9 -9
  274. package/dist/radio-group.esm.js +47 -24
  275. package/dist/radio.cjs.js +1 -1
  276. package/dist/radio.esm.js +1 -1
  277. package/dist/rating.cjs.js +6 -6
  278. package/dist/rating.esm.js +21 -10
  279. package/dist/{runtime-BRT7E4A8.mjs → runtime-CORXjP7e.mjs} +379 -357
  280. package/dist/runtime-uCly3ECd.js +5 -0
  281. package/dist/runtime.cjs.js +1 -1
  282. package/dist/runtime.esm.js +1 -1
  283. package/dist/scroll-area.cjs.js +1 -1
  284. package/dist/scroll-area.esm.js +1 -1
  285. package/dist/section.cjs.js +1 -1
  286. package/dist/section.esm.js +1 -1
  287. package/dist/select.cjs.js +21 -21
  288. package/dist/select.esm.js +111 -71
  289. package/dist/selection-popup.cjs.js +2 -2
  290. package/dist/selection-popup.esm.js +2 -2
  291. package/dist/semantic-tokens.d.ts.map +1 -1
  292. package/dist/separator.cjs.js +1 -1
  293. package/dist/separator.esm.js +1 -1
  294. package/dist/sidebar.cjs.js +15 -15
  295. package/dist/sidebar.esm.js +48 -42
  296. package/dist/skeleton.cjs.js +1 -1
  297. package/dist/skeleton.esm.js +1 -1
  298. package/dist/slider.cjs.js +11 -11
  299. package/dist/slider.esm.js +40 -23
  300. package/dist/slot.cjs.js +1 -1
  301. package/dist/slot.esm.js +1 -1
  302. package/dist/slotted-input-BVq2QQg2.js +1 -0
  303. package/dist/slotted-input-atWznLfm.mjs +13 -0
  304. package/dist/sortable.cjs.js +25 -25
  305. package/dist/sortable.esm.js +29 -21
  306. package/dist/spinning-text.cjs.js +1 -1
  307. package/dist/spinning-text.esm.js +1 -1
  308. package/dist/split-button.cjs.js +1 -1
  309. package/dist/split-button.esm.js +1 -1
  310. package/dist/splitter.cjs.js +1 -1
  311. package/dist/splitter.esm.js +1 -1
  312. package/dist/standalone/add-icons.d.ts +2 -0
  313. package/dist/standalone/add-icons.d.ts.map +1 -0
  314. package/dist/standalone/preload.d.ts +2 -0
  315. package/dist/standalone/preload.d.ts.map +1 -0
  316. package/dist/stepper.cjs.js +3 -3
  317. package/dist/stepper.esm.js +3 -3
  318. package/dist/switch.cjs.js +9 -9
  319. package/dist/switch.esm.js +56 -35
  320. package/dist/table.cjs.js +1 -1
  321. package/dist/table.esm.js +1 -1
  322. package/dist/tabs.cjs.js +14 -14
  323. package/dist/tabs.esm.js +129 -115
  324. package/dist/tags-input.cjs.js +1 -1
  325. package/dist/tags-input.esm.js +1 -1
  326. package/dist/textarea.cjs.js +33 -11
  327. package/dist/textarea.esm.js +74 -35
  328. package/dist/theme.d.ts +6 -0
  329. package/dist/theme.d.ts.map +1 -1
  330. package/dist/time-field.cjs.js +1 -1
  331. package/dist/time-field.esm.js +2 -2
  332. package/dist/time-picker.cjs.js +1 -1
  333. package/dist/time-picker.esm.js +3 -3
  334. package/dist/timeline.cjs.js +2 -2
  335. package/dist/timeline.esm.js +2 -2
  336. package/dist/toast.cjs.js +4 -4
  337. package/dist/toast.esm.js +17 -16
  338. package/dist/toggle-group.cjs.js +1 -1
  339. package/dist/toggle-group.esm.js +1 -1
  340. package/dist/toggle.cjs.js +3 -3
  341. package/dist/toggle.esm.js +9 -9
  342. package/dist/toolbar.cjs.js +1 -1
  343. package/dist/toolbar.esm.js +1 -1
  344. package/dist/tooltip.cjs.js +2 -2
  345. package/dist/tooltip.esm.js +12 -14
  346. package/dist/transfer-list.cjs.js +1 -1
  347. package/dist/transfer-list.esm.js +1 -1
  348. package/dist/{tree-33fVNnaf.mjs → tree-CD2k2lIC.mjs} +1 -1
  349. package/dist/{tree-Dc02MChE.js → tree-ChQfhxya.js} +1 -1
  350. package/dist/tree-item.cjs.js +1 -1
  351. package/dist/tree-item.esm.js +1 -1
  352. package/dist/tree.cjs.js +1 -1
  353. package/dist/tree.esm.js +1 -1
  354. package/dist/visually-hidden.cjs.js +1 -1
  355. package/dist/visually-hidden.esm.js +1 -1
  356. package/dist/wizard.cjs.js +4 -4
  357. package/dist/wizard.esm.js +4 -4
  358. package/package.json +3 -2
  359. package/dist/focus-scope-Bwug2gDv.js +0 -1
  360. package/dist/focus-scope-CmEsG5UZ.mjs +0 -138
  361. package/dist/runtime-CXw4SGV9.js +0 -5
  362. package/dist/ui-button-C3OmI7Sn.mjs +0 -684
  363. package/dist/ui-button-CnLwXBnx.js +0 -520
  364. package/dist/ui-icon-D3avtxX_.js +0 -207
  365. package/dist/ui-icon-DLhB08Fo.mjs +0 -361
@@ -1,19 +1,19 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const q=require("./ElementBase-DxbvhLJs.js"),p=require("./control-name-BmoI1m3a.js"),B=`
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const L=require("./ElementBase-CbUsP3D6.js"),E=require("./slotted-input-BVq2QQg2.js"),M=require("./form-control-B90_3kYN.js"),F=require("./implicit-submit-B6M5Uc56.js"),g=require("./control-name-BmoI1m3a.js"),$=`
2
2
  <svg viewBox="0 0 20 20" aria-hidden="true" focusable="false">
3
3
  <path d="m6 6 8 8M14 6l-8 8" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"/>
4
4
  </svg>
5
- `,C=`
5
+ `,q=`
6
6
  <svg viewBox="0 0 20 20" aria-hidden="true" focusable="false">
7
7
  <path d="M2.4 10c1.5-3 4.3-5 7.6-5s6.1 2 7.6 5c-1.5 3-4.3 5-7.6 5s-6.1-2-7.6-5Z" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/>
8
8
  <circle cx="10" cy="10" r="2.5" fill="none" stroke="currentColor" stroke-width="1.6"/>
9
9
  </svg>
10
- `,N=`
10
+ `,U=`
11
11
  <svg viewBox="0 0 20 20" aria-hidden="true" focusable="false">
12
12
  <path d="M3 3l14 14" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round"/>
13
13
  <path d="M6.1 6.1A9.3 9.3 0 0 1 10 5c3.3 0 6.1 2 7.6 5-.5 1-1.2 1.9-2 2.7M8.2 8.2A2.5 2.5 0 0 1 11.8 12" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/>
14
14
  <path d="M4.4 7.1C3.6 7.9 3 8.9 2.4 10c1.5 3 4.3 5 7.6 5 1.2 0 2.4-.3 3.4-.7" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/>
15
15
  </svg>
16
- `,M=`
16
+ `,D=`
17
17
  :host {
18
18
  --ui-input-action-size: 24px;
19
19
  --ui-input-padding: var(--ui-padding, 0);
@@ -208,6 +208,25 @@
208
208
  color: var(--ui-input-placeholder);
209
209
  }
210
210
 
211
+ /* <input slot="input">: the author's own input, so password managers can fill it. */
212
+ ::slotted(input[slot="input"]) {
213
+ inline-size: 100%;
214
+ min-inline-size: 0;
215
+ box-sizing: border-box;
216
+ border: none;
217
+ background: transparent;
218
+ color: inherit;
219
+ font: 500 var(--ui-input-font-size)/1.4 "Inter", "IBM Plex Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
220
+ padding: var(--ui-input-padding);
221
+ min-block-size: calc(var(--ui-input-min-height) - 2px);
222
+ margin: 0;
223
+ outline: none;
224
+ }
225
+
226
+ .control[data-slotted-input] > input {
227
+ display: none;
228
+ }
229
+
211
230
  .actions {
212
231
  flex: 0 0 auto;
213
232
  display: inline-flex;
@@ -451,7 +470,7 @@
451
470
  --ui-label-color: #cbd5e1;
452
471
  --ui-description-color: #93a4bd;
453
472
  --ui-input-border-color: #334155;
454
- --ui-input-focus-ring: #93c5fd;
473
+ --ui-input-focus-ring: var(--ui-color-accent-on-dark, #93c5fd);
455
474
  --ui-input-placeholder: color-mix(in srgb, #e2e8f0 46%, transparent);
456
475
  --ui-input-shadow: 0 2px 8px rgba(2, 6, 23, 0.24);
457
476
  --ui-password-field-toggle-hover-bg: color-mix(in srgb, #e2e8f0 12%, transparent);
@@ -578,16 +597,16 @@
578
597
  box-shadow: none;
579
598
  }
580
599
  }
581
- `,I=["value","placeholder","disabled","clearable","debounce","validation","size","minlength","maxlength","readonly","autofocus","counter","floating-label","name","required","pattern","autocomplete","spellcheck","variant","tone","density","shape","color","radius","label","description","data-error"];function u(o){return o.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function g(o){if(!o)return!1;const t=o.assignedNodes({flatten:!0});return t.length?t.some(e=>e.nodeType===Node.TEXT_NODE?!!e.textContent?.trim():e.nodeType===Node.ELEMENT_NODE):!1}function c(o,t){const e=o.getAttribute(t);if(e==null)return!1;const i=String(e).trim().toLowerCase();return i!=="false"&&i!=="0"}function U(o){return o==="none"||o==="large"||o==="full"}function L(o){let t=0;switch(o.length>=8&&(t+=1),/[a-z]/.test(o)&&/[A-Z]/.test(o)&&(t+=1),/\d/.test(o)&&(t+=1),(/[^A-Za-z0-9]/.test(o)||o.length>=14)&&(t+=1),Math.max(1,Math.min(4,t||1))){case 1:return{score:1,label:"Weak",caption:"Use more characters and mix case, numbers, or symbols."};case 2:return{score:2,label:"Fair",caption:"Add numbers or symbols to reduce guessability."};case 3:return{score:3,label:"Good",caption:"Solid baseline. Longer passphrases are even better."};default:return{score:4,label:"Strong",caption:"Strong password shape for production accounts."}}}class z extends q.ElementBase{constructor(){super(),this._input=null,this._clearBtn=null,this._toggleBtn=null,this._debounceTimer=null,this._formUnregister=null,this._uid=Math.random().toString(36).slice(2,9),this._autofocusApplied=!1,this._revealed=!1,this._lastStrengthKey="",this.strengthEvaluator=null,this._onNativeInput=this._onNativeInput.bind(this),this._onNativeChange=this._onNativeChange.bind(this),this._onClearClick=this._onClearClick.bind(this),this._onToggleClick=this._onToggleClick.bind(this),this._onSlotChange=this._onSlotChange.bind(this)}static get observedAttributes(){return[...I,"aria-label","aria-description","aria-describedby","show-strength","revealable"]}get value(){return this.getAttribute("value")||""}set value(t){t?this.setAttribute("value",t):this.removeAttribute("value")}get revealed(){return this._revealed}connectedCallback(){super.connectedCallback(),this.root.addEventListener("slotchange",this._onSlotChange),this._registerWithForm()}disconnectedCallback(){this.root.removeEventListener("slotchange",this._onSlotChange),this._detachListeners(),this._debounceTimer&&(clearTimeout(this._debounceTimer),this._debounceTimer=null),this._formUnregister&&(this._formUnregister(),this._formUnregister=null),this._autofocusApplied=!1,super.disconnectedCallback()}attributeChangedCallback(t,e,i){if(e!==i&&(t==="name"&&this.isConnected&&this._registerWithForm(),t==="autofocus"&&!this.hasAttribute("autofocus")&&(this._autofocusApplied=!1),!(!this.isConnected||!this._input))){if(t==="value"){this._syncInputValue(this.value),this._syncStrengthUi();return}this._syncUi(),t==="autofocus"&&this.hasAttribute("autofocus")&&!this._autofocusApplied&&(this._autofocusApplied=!0,queueMicrotask(()=>{if(this.isConnected)try{this._input?.focus({preventScroll:!0})}catch{this._input?.focus()}}))}}shouldRenderOnAttributeChange(){return!1}focus(t){if(this._input){this._input.focus(t);return}super.focus(t)}blur(){this._input?.blur()}select(){this._input?.select()}toggleVisibility(t){if(c(this,"disabled")||this.hasAttribute("readonly")||this.getAttribute("revealable")==="false")return;const e=typeof t=="boolean"?t:!this._revealed;if(e===this._revealed)return;const i=this._input?.selectionStart??null,r=this._input?.selectionEnd??null;this._revealed=e,this._syncToggleUi(),this.dispatchEvent(new CustomEvent("visibility-change",{detail:{revealed:this._revealed},bubbles:!0,composed:!0})),queueMicrotask(()=>{const s=this._input;if(s){try{s.focus({preventScroll:!0})}catch{s.focus()}if(i!=null&&r!=null&&typeof s.setSelectionRange=="function")try{s.setSelectionRange(i,r)}catch{}}})}render(){const t=this.value,e=this.getAttribute("label")||"",i=this.getAttribute("description")||"",r=this.getAttribute("data-error")||"",s=this.getAttribute("placeholder")||"",n=this.hasAttribute("required")?'<span class="required" aria-hidden="true">*</span>':"",a=this.hasAttribute("floating-label");this.setContent(`
582
- <style>${M}</style>
600
+ `,V=["value","placeholder","disabled","clearable","debounce","validation","size","minlength","maxlength","readonly","autofocus","counter","floating-label","name","required","pattern","autocomplete","spellcheck","variant","tone","density","shape","color","radius","label","description","data-error"];function h(o){return o.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function b(o){if(!o)return!1;const t=o.assignedNodes({flatten:!0});return t.length?t.some(e=>e.nodeType===Node.TEXT_NODE?!!e.textContent?.trim():e.nodeType===Node.ELEMENT_NODE):!1}function c(o,t){const e=o.getAttribute(t);if(e==null)return!1;const i=String(e).trim().toLowerCase();return i!=="false"&&i!=="0"}function K(o){return o==="none"||o==="large"||o==="full"}function O(o){let t=0;switch(o.length>=8&&(t+=1),/[a-z]/.test(o)&&/[A-Z]/.test(o)&&(t+=1),/\d/.test(o)&&(t+=1),(/[^A-Za-z0-9]/.test(o)||o.length>=14)&&(t+=1),Math.max(1,Math.min(4,t||1))){case 1:return{score:1,label:"Weak",caption:"Use more characters and mix case, numbers, or symbols."};case 2:return{score:2,label:"Fair",caption:"Add numbers or symbols to reduce guessability."};case 3:return{score:3,label:"Good",caption:"Solid baseline. Longer passphrases are even better."};default:return{score:4,label:"Strong",caption:"Strong password shape for production accounts."}}}const m=class m extends L.ElementBase{constructor(){super(),this._slottedInput=null,this._formControl=new M.FormControl(this,{getValue:()=>this._slottedInput?null:this.value,getValidity:()=>({control:this._slottedInput?null:this._input}),defaultAttribute:"value",onFormDisabled:t=>{this._input&&(this._input.disabled=t||this.hasAttribute("disabled"))}}),this._input=null,this._clearBtn=null,this._toggleBtn=null,this._debounceTimer=null,this._formUnregister=null,this._uid=Math.random().toString(36).slice(2,9),this._autofocusApplied=!1,this._revealed=!1,this._lastStrengthKey="",this.strengthEvaluator=null,this._onLabelClick=t=>{t.target?.closest?.(".label")&&this._input?.focus()},this._onNativeInput=this._onNativeInput.bind(this),this._onNativeChange=this._onNativeChange.bind(this),this._onNativeKeyDown=this._onNativeKeyDown.bind(this),this._onClearClick=this._onClearClick.bind(this),this._onToggleClick=this._onToggleClick.bind(this),this._onSlotChange=this._onSlotChange.bind(this)}static get observedAttributes(){return[...V,"aria-label","aria-description","aria-describedby","show-strength","revealable"]}get value(){return this.getAttribute("value")||""}set value(t){t?this.setAttribute("value",t):this.removeAttribute("value")}get revealed(){return this._revealed}formResetCallback(){this._formControl.formResetCallback()}formDisabledCallback(t){this._formControl.formDisabledCallback(t)}get form(){return this._formControl.form}connectedCallback(){super.connectedCallback(),this._formControl.connect(),this.root.addEventListener("slotchange",this._onSlotChange),this.root.addEventListener("click",this._onLabelClick),this._registerWithForm()}disconnectedCallback(){this._formControl.disconnect(),this.root.removeEventListener("slotchange",this._onSlotChange),this.root.removeEventListener("click",this._onLabelClick),this._detachListeners(),this._debounceTimer&&(clearTimeout(this._debounceTimer),this._debounceTimer=null),this._formUnregister&&(this._formUnregister(),this._formUnregister=null),this._autofocusApplied=!1,super.disconnectedCallback()}attributeChangedCallback(t,e,i){if(e!==i&&(t==="name"&&this.isConnected&&this._registerWithForm(),t==="autofocus"&&!this.hasAttribute("autofocus")&&(this._autofocusApplied=!1),!(!this.isConnected||!this._input))){if(t==="value"){this._syncInputValue(this.value),this._syncStrengthUi();return}this._syncUi(),t==="autofocus"&&this.hasAttribute("autofocus")&&!this._autofocusApplied&&(this._autofocusApplied=!0,queueMicrotask(()=>{if(this.isConnected)try{this._input?.focus({preventScroll:!0})}catch{this._input?.focus()}}))}}shouldRenderOnAttributeChange(){return!1}focus(t){if(this._input){this._input.focus(t);return}super.focus(t)}blur(){this._input?.blur()}select(){this._input?.select()}toggleVisibility(t){if(c(this,"disabled")||this.hasAttribute("readonly")||this.getAttribute("revealable")==="false")return;const e=typeof t=="boolean"?t:!this._revealed;if(e===this._revealed)return;const i=this._input?.selectionStart??null,r=this._input?.selectionEnd??null;this._revealed=e,this._syncToggleUi(),this.dispatchEvent(new CustomEvent("visibility-change",{detail:{revealed:this._revealed},bubbles:!0,composed:!0})),queueMicrotask(()=>{const s=this._input;if(s){try{s.focus({preventScroll:!0})}catch{s.focus()}if(i!=null&&r!=null&&typeof s.setSelectionRange=="function")try{s.setSelectionRange(i,r)}catch{}}})}render(){const t=this.value,e=this.getAttribute("label")||"",i=this.getAttribute("description")||"",r=this.getAttribute("data-error")||"",s=this.getAttribute("placeholder")||"",n=this.hasAttribute("required")?'<span class="required" aria-hidden="true">*</span>':"",a=this.hasAttribute("floating-label");this.setContent(`
601
+ <style>${D}</style>
583
602
  <div class="root" part="root">
584
603
  <div class="meta" part="meta">
585
604
  <label class="label" id="${this._uid}-label" part="label">
586
- <slot name="label">${u(e)}</slot>
605
+ <slot name="label">${h(e)}</slot>
587
606
  ${n}
588
607
  </label>
589
608
  <p class="description" id="${this._uid}-description" part="description">
590
- <slot name="description">${u(i)}</slot>
609
+ <slot name="description">${h(i)}</slot>
591
610
  </p>
592
611
  </div>
593
612
 
@@ -595,25 +614,26 @@
595
614
  <span class="prefix" part="prefix"><slot name="prefix"></slot></span>
596
615
 
597
616
  <div class="control" part="control">
617
+ <slot name="input"></slot>
598
618
  <input
599
619
  part="input"
600
620
  type="password"
601
- value="${u(t)}"
602
- placeholder="${u(s)}"
621
+ value="${h(t)}"
622
+ placeholder="${h(s)}"
603
623
  />
604
- ${a?`<span class="floating-label" part="floating-label">${u(e||s||"Password")}</span>`:""}
624
+ ${a?`<span class="floating-label" part="floating-label">${h(e||s||"Password")}</span>`:""}
605
625
  </div>
606
626
 
607
627
  <div class="actions" part="actions">
608
- <button class="clear-btn" part="clear" type="button" aria-label="Clear" hidden>${B}</button>
628
+ <button class="clear-btn" part="clear" type="button" aria-label="Clear" hidden>${$}</button>
609
629
  <span class="suffix-slot" part="suffix"><slot name="suffix"></slot></span>
610
- <button class="toggle-btn" part="toggle" type="button" aria-label="Show password">${C}</button>
630
+ <button class="toggle-btn" part="toggle" type="button" aria-label="Show password">${q}</button>
611
631
  </div>
612
632
  </div>
613
633
 
614
634
  <div class="footer" part="footer">
615
635
  <p class="error" id="${this._uid}-error" part="error" aria-live="polite">
616
- <slot name="error">${u(r)}</slot>
636
+ <slot name="error">${h(r)}</slot>
617
637
  </p>
618
638
  <p class="counter" part="counter"></p>
619
639
  </div>
@@ -628,4 +648,4 @@
628
648
  </div>
629
649
  </div>
630
650
  </div>
631
- `),this._detachListeners(),this._input=this.root.querySelector("input"),this._clearBtn=this.root.querySelector(".clear-btn"),this._toggleBtn=this.root.querySelector(".toggle-btn"),this._input?.addEventListener("input",this._onNativeInput),this._input?.addEventListener("change",this._onNativeChange),this._clearBtn?.addEventListener("click",this._onClearClick),this._toggleBtn?.addEventListener("click",this._onToggleClick),this._syncUi()}_detachListeners(){this._input?.removeEventListener("input",this._onNativeInput),this._input?.removeEventListener("change",this._onNativeChange),this._clearBtn?.removeEventListener("click",this._onClearClick),this._toggleBtn?.removeEventListener("click",this._onToggleClick),this._clearBtn=null,this._toggleBtn=null}_syncHostTokens(){const t=this.getAttribute("color");t?this.style.setProperty("--ui-input-accent",t):this.style.removeProperty("--ui-input-accent");const e=this.getAttribute("radius")||"";e&&!U(e)?this.style.setProperty("--ui-input-border-radius",e):this.style.removeProperty("--ui-input-border-radius")}_syncControlAttrs(){if(this._syncHostTokens(),!this._input)return;const t=c(this,"disabled"),e=this.hasAttribute("required"),i=this.hasAttribute("readonly"),r=this.getAttribute("maxlength")||"",s=this.getAttribute("minlength")||"",n=this.getAttribute("pattern")||"",a=this.getAttribute("autocomplete")||"current-password",l=this.getAttribute("spellcheck")||"",h=this.getAttribute("placeholder")||"",d=this.getAttribute("name")||"";this._input.disabled=t,this._input.required=e,this._input.readOnly=i,this._input.placeholder=h,this._input.name=d,this._input.type=this._revealed?"text":"password",this._input.setAttribute("autocomplete",a),n?this._input.setAttribute("pattern",n):this._input.removeAttribute("pattern"),l?this._input.setAttribute("spellcheck",l):this._input.removeAttribute("spellcheck"),r&&Number.isFinite(Number(r))?this._input.setAttribute("maxlength",r):this._input.removeAttribute("maxlength"),s&&Number.isFinite(Number(s))?this._input.setAttribute("minlength",s):this._input.removeAttribute("minlength")}_syncInputValue(t){this._input&&this._input.value!==t&&(this._input.value=t);const e=this.root.querySelector(".shell");e&&e.setAttribute("data-has-value",t?"true":"false"),this._clearBtn&&(c(this,"clearable")&&t.length>0&&!c(this,"disabled")&&!this.hasAttribute("readonly")?this._clearBtn.removeAttribute("hidden"):this._clearBtn.setAttribute("hidden",""));const i=this.root.querySelector(".counter");if(i&&this.hasAttribute("counter")){const r=this.getAttribute("maxlength");i.textContent=r?`${t.length}/${r}`:String(t.length)}else i&&(i.textContent="")}_syncToggleUi(){if(!this._toggleBtn||!this._input)return;this._input.type=this._revealed?"text":"password";const t=this.getAttribute("revealable")!=="false",e=c(this,"disabled")||this.hasAttribute("readonly");this._toggleBtn.hidden=!t,this._toggleBtn.disabled=e,this._toggleBtn.setAttribute("aria-pressed",this._revealed?"true":"false"),this._toggleBtn.setAttribute("aria-label",this._revealed?"Hide password":"Show password");const i=this._revealed?"revealed":"hidden";this._toggleBtn.dataset.iconState!==i&&(this._toggleBtn.dataset.iconState=i,this._toggleBtn.innerHTML=this._revealed?N:C)}_syncStrengthUi(){const t=this.root.querySelector(".strength"),e=this.root.querySelector(".strength-label"),i=this.root.querySelector(".strength-caption");if(!t||!e||!i)return;const r=this.value,s=this.hasAttribute("show-strength")&&r.length>0;if(t.hidden=!s,!s){delete t.dataset.score,e.textContent="",i.textContent="",this._lastStrengthKey="";return}const n=(this.strengthEvaluator||L)(r);t.dataset.score=String(n.score),e.textContent=n.label,i.textContent=n.caption;const a=`${r}|${n.score}|${n.label}|${n.caption}`;a!==this._lastStrengthKey&&(this._lastStrengthKey=a,this.dispatchEvent(new CustomEvent("strength-change",{detail:{value:r,score:n.score,label:n.label,caption:n.caption},bubbles:!0,composed:!0})))}_syncDerivedState(){const t=this.root.querySelector('slot[name="label"]'),e=this.root.querySelector('slot[name="description"]'),i=this.root.querySelector('slot[name="error"]'),r=this.root.querySelector('slot[name="prefix"]'),s=this.root.querySelector('slot[name="suffix"]'),n=(this.getAttribute("label")||"").trim(),a=(this.getAttribute("description")||"").trim(),l=(this.getAttribute("data-error")||"").trim(),h=!!n||g(t),d=!!a||g(e),b=!!l||g(i),E=g(r),T=g(s),v=this.root.querySelector(".label"),m=this.root.querySelector(".description"),x=this.root.querySelector(".prefix"),_=this.root.querySelector(".suffix-slot"),y=this.root.querySelector(".meta"),w=this.root.querySelector(".footer"),A=this.root.querySelector(".error"),k=this.root.querySelector(".counter");p.syncSlotFallbackText(t,n),p.syncSlotFallbackText(e,a),p.syncSlotFallbackText(i,l),v&&v.toggleAttribute("hidden",!h),m&&m.toggleAttribute("hidden",!d),x&&x.toggleAttribute("hidden",!E),_&&_.toggleAttribute("hidden",!T),y&&y.toggleAttribute("hidden",!h&&!d);const S=this.hasAttribute("counter");if(k&&k.toggleAttribute("hidden",!S),A&&A.toggleAttribute("hidden",!b),w&&w.toggleAttribute("hidden",!b&&!S),!this._input)return;p.syncControlName(this._input,this,h?`${this._uid}-label`:null);const f=[];d&&f.push(`${this._uid}-description`),b&&f.push(`${this._uid}-error`),p.syncControlDescription(this._input,this,this._uid,f),this.getAttribute("validation")==="error"||!!l?this._input.setAttribute("aria-invalid","true"):this._input.removeAttribute("aria-invalid"),this.hasAttribute("required")?this._input.setAttribute("aria-required","true"):this._input.removeAttribute("aria-required")}_syncUi(){this._syncControlAttrs(),this._syncInputValue(this.value),this._syncDerivedState(),this._syncToggleUi(),this._syncStrengthUi(),this.hasAttribute("autofocus")&&!this._autofocusApplied&&(this._autofocusApplied=!0,queueMicrotask(()=>{if(this.isConnected)try{this._input?.focus({preventScroll:!0})}catch{this._input?.focus()}}))}_emitValueEvent(t,e){this.dispatchEvent(new CustomEvent(t,{detail:{value:e},bubbles:!0,composed:!0}))}_registerWithForm(){this._formUnregister&&(this._formUnregister(),this._formUnregister=null);try{const r=this.getRootNode().host?.closest?.("ui-form")||null||this.closest("ui-form"),s=this.getAttribute("name");r&&typeof r.registerField=="function"&&s&&(this._formUnregister=r.registerField(s,{name:s,getValue:()=>this.value,setValue:n=>{this.value=String(n??"")},validate:async()=>this._input?{valid:this._input.checkValidity(),message:this._input.validationMessage||void 0}:{valid:!0},setError:n=>{n?(this.setAttribute("validation","error"),this.setAttribute("data-error",n)):(this.removeAttribute("validation"),this.removeAttribute("data-error")),this._syncUi()}}))}catch{}}_onSlotChange(){this._syncDerivedState()}_onNativeInput(t){const e=t.target.value;this.getAttribute("value")!==e?e?this.setAttribute("value",e):this.removeAttribute("value"):(this._syncInputValue(e),this._syncStrengthUi()),this._emitValueEvent("input",e);const i=Number(this.getAttribute("debounce")||0);i>0?(this._debounceTimer&&clearTimeout(this._debounceTimer),this._debounceTimer=setTimeout(()=>{this._emitValueEvent("debounced-input",e),this._debounceTimer=null},i)):this._emitValueEvent("debounced-input",e)}_onNativeChange(t){const e=t.target.value;this._emitValueEvent("change",e)}_onClearClick(t){if(t.preventDefault(),!(c(this,"disabled")||this.hasAttribute("readonly"))&&this._input){this.value="",this._input.value="",this._input.dispatchEvent(new Event("input",{bubbles:!0,composed:!0})),this._input.dispatchEvent(new Event("change",{bubbles:!0,composed:!0})),this.dispatchEvent(new CustomEvent("clear",{bubbles:!0,composed:!0}));try{this._input.focus({preventScroll:!0})}catch{this._input.focus()}}}_onToggleClick(t){t.preventDefault(),t.stopPropagation(),this.toggleVisibility()}}typeof customElements<"u"&&!customElements.get("ui-password-field")&&customElements.define("ui-password-field",z);exports.UIPasswordField=z;
651
+ `),this._detachListeners(),this._bindInput(),this._clearBtn=this.root.querySelector(".clear-btn"),this._toggleBtn=this.root.querySelector(".toggle-btn"),this._clearBtn?.addEventListener("click",this._onClearClick),this._toggleBtn?.addEventListener("click",this._onToggleClick),this._syncUi()}_bindInput(){this._input?.removeEventListener("input",this._onNativeInput),this._input?.removeEventListener("change",this._onNativeChange),this._input?.removeEventListener("keydown",this._onNativeKeyDown);const t=E.findSlottedInput(this);this._slottedInput=t;const e=this.root.querySelector(".control");t?e?.setAttribute("data-slotted-input",""):e?.removeAttribute("data-slotted-input"),this._input=t||this.root.querySelector(".control > input"),t&&!this.hasAttribute("value")&&t.value&&this.setAttribute("value",t.value),this._input?.addEventListener("input",this._onNativeInput),this._input?.addEventListener("change",this._onNativeChange),t||this._input?.addEventListener("keydown",this._onNativeKeyDown)}_detachListeners(){this._input?.removeEventListener("input",this._onNativeInput),this._input?.removeEventListener("change",this._onNativeChange),this._input?.removeEventListener("keydown",this._onNativeKeyDown),this._clearBtn?.removeEventListener("click",this._onClearClick),this._toggleBtn?.removeEventListener("click",this._onToggleClick),this._clearBtn=null,this._toggleBtn=null}_syncHostTokens(){const t=this.getAttribute("color");t?this.style.setProperty("--ui-input-accent",t):this.style.removeProperty("--ui-input-accent");const e=this.getAttribute("radius")||"";e&&!K(e)?this.style.setProperty("--ui-input-border-radius",e):this.style.removeProperty("--ui-input-border-radius")}_syncControlAttrs(){if(this._syncHostTokens(),!this._input)return;if(this._slottedInput){const l=this._slottedInput;(this.hasAttribute("disabled")||this._formControl.disabledByForm)&&(l.disabled=c(this,"disabled")||this._formControl.disabledByForm),this.hasAttribute("required")&&(l.required=!0),this.hasAttribute("readonly")&&(l.readOnly=!0),l.type=this._revealed?"text":"password";return}const t=c(this,"disabled"),e=this.hasAttribute("required"),i=this.hasAttribute("readonly"),r=this.getAttribute("maxlength")||"",s=this.getAttribute("minlength")||"",n=this.getAttribute("pattern")||"",a=this.getAttribute("autocomplete")||"current-password",u=this.getAttribute("spellcheck")||"",d=this.getAttribute("placeholder")||"",p=this.getAttribute("name")||"";this._input.disabled=t||this._formControl.disabledByForm,this._input.required=e,this._input.readOnly=i,this._input.placeholder=d,this._input.name=p,this._input.type=this._revealed?"text":"password",this._input.setAttribute("autocomplete",a),n?this._input.setAttribute("pattern",n):this._input.removeAttribute("pattern"),u?this._input.setAttribute("spellcheck",u):this._input.removeAttribute("spellcheck"),r&&Number.isFinite(Number(r))?this._input.setAttribute("maxlength",r):this._input.removeAttribute("maxlength"),s&&Number.isFinite(Number(s))?this._input.setAttribute("minlength",s):this._input.removeAttribute("minlength")}_syncInputValue(t){this._input&&this._input.value!==t&&(this._input.value=t);const e=this.root.querySelector(".shell");e&&e.setAttribute("data-has-value",t?"true":"false"),this._clearBtn&&(c(this,"clearable")&&t.length>0&&!c(this,"disabled")&&!this.hasAttribute("readonly")?this._clearBtn.removeAttribute("hidden"):this._clearBtn.setAttribute("hidden",""));const i=this.root.querySelector(".counter");if(i&&this.hasAttribute("counter")){const r=this.getAttribute("maxlength");i.textContent=r?`${t.length}/${r}`:String(t.length)}else i&&(i.textContent="")}_syncToggleUi(){if(!this._toggleBtn||!this._input)return;this._input.type=this._revealed?"text":"password";const t=this.getAttribute("revealable")!=="false",e=c(this,"disabled")||this.hasAttribute("readonly");this._toggleBtn.hidden=!t,this._toggleBtn.disabled=e,this._toggleBtn.setAttribute("aria-pressed",this._revealed?"true":"false"),this._toggleBtn.setAttribute("aria-label",this._revealed?"Hide password":"Show password");const i=this._revealed?"revealed":"hidden";this._toggleBtn.dataset.iconState!==i&&(this._toggleBtn.dataset.iconState=i,this._toggleBtn.innerHTML=this._revealed?U:q)}_syncStrengthUi(){const t=this.root.querySelector(".strength"),e=this.root.querySelector(".strength-label"),i=this.root.querySelector(".strength-caption");if(!t||!e||!i)return;const r=this.value,s=this.hasAttribute("show-strength")&&r.length>0;if(t.hidden=!s,!s){delete t.dataset.score,e.textContent="",i.textContent="",this._lastStrengthKey="";return}const n=(this.strengthEvaluator||O)(r);t.dataset.score=String(n.score),e.textContent=n.label,i.textContent=n.caption;const a=`${r}|${n.score}|${n.label}|${n.caption}`;a!==this._lastStrengthKey&&(this._lastStrengthKey=a,this.dispatchEvent(new CustomEvent("strength-change",{detail:{value:r,score:n.score,label:n.label,caption:n.caption},bubbles:!0,composed:!0})))}_syncDerivedState(){const t=this.root.querySelector('slot[name="label"]'),e=this.root.querySelector('slot[name="description"]'),i=this.root.querySelector('slot[name="error"]'),r=this.root.querySelector('slot[name="prefix"]'),s=this.root.querySelector('slot[name="suffix"]'),n=(this.getAttribute("label")||"").trim(),a=(this.getAttribute("description")||"").trim(),u=(this.getAttribute("data-error")||"").trim(),d=!!n||b(t),p=!!a||b(e),l=!!u||b(i),I=b(r),T=b(s),_=this.root.querySelector(".label"),x=this.root.querySelector(".description"),y=this.root.querySelector(".prefix"),A=this.root.querySelector(".suffix-slot"),w=this.root.querySelector(".meta"),k=this.root.querySelector(".footer"),C=this.root.querySelector(".error"),S=this.root.querySelector(".counter");g.syncSlotFallbackText(t,n),g.syncSlotFallbackText(e,a),g.syncSlotFallbackText(i,u),_&&_.toggleAttribute("hidden",!d),x&&x.toggleAttribute("hidden",!p),y&&y.toggleAttribute("hidden",!I),A&&A.toggleAttribute("hidden",!T),w&&w.toggleAttribute("hidden",!d&&!p);const z=this.hasAttribute("counter");if(S&&S.toggleAttribute("hidden",!z),C&&C.toggleAttribute("hidden",!l),k&&k.toggleAttribute("hidden",!l&&!z),!this._input)return;if(this._slottedInput){const B=(this.getAttribute("label")||this.getAttribute("aria-label")||"").trim();E.nameSlottedInput(this._slottedInput,B,(this.getAttribute("description")||"").trim());const N=this.getAttribute("validation")==="error"||!!u;this._slottedInput.toggleAttribute("aria-invalid",N);return}g.syncControlName(this._input,this,d?`${this._uid}-label`:null);const v=[];p&&v.push(`${this._uid}-description`),l&&v.push(`${this._uid}-error`),g.syncControlDescription(this._input,this,this._uid,v),this.getAttribute("validation")==="error"||!!u?this._input.setAttribute("aria-invalid","true"):this._input.removeAttribute("aria-invalid"),this.hasAttribute("required")?this._input.setAttribute("aria-required","true"):this._input.removeAttribute("aria-required")}_syncUi(){this._syncControlAttrs(),this._syncInputValue(this.value),this._syncDerivedState(),this._syncToggleUi(),this._syncStrengthUi(),this.hasAttribute("autofocus")&&!this._autofocusApplied&&(this._autofocusApplied=!0,queueMicrotask(()=>{if(this.isConnected)try{this._input?.focus({preventScroll:!0})}catch{this._input?.focus()}}))}_emitValueEvent(t,e){this.dispatchEvent(new CustomEvent(t,{detail:{value:e},bubbles:!0,composed:!0}))}_registerWithForm(){this._formUnregister&&(this._formUnregister(),this._formUnregister=null);try{const r=this.getRootNode().host?.closest?.("ui-form")||null||this.closest("ui-form"),s=this.getAttribute("name");r&&typeof r.registerField=="function"&&s&&(this._formUnregister=r.registerField(s,{name:s,getValue:()=>this.value,setValue:n=>{this.value=String(n??"")},validate:async()=>this._input?{valid:this._input.checkValidity(),message:this._input.validationMessage||void 0}:{valid:!0},setError:n=>{n?(this.setAttribute("validation","error"),this.setAttribute("data-error",n)):(this.removeAttribute("validation"),this.removeAttribute("data-error")),this._syncUi()}}))}catch{}}_onSlotChange(t){t?.target?.name==="input"&&(this._bindInput(),this._syncControlAttrs()),this._syncDerivedState()}_onNativeInput(t){const e=t.target.value;this.getAttribute("value")!==e?e?this.setAttribute("value",e):this.removeAttribute("value"):(this._syncInputValue(e),this._syncStrengthUi()),this._emitValueEvent("input",e);const i=Number(this.getAttribute("debounce")||0);i>0?(this._debounceTimer&&clearTimeout(this._debounceTimer),this._debounceTimer=setTimeout(()=>{this._emitValueEvent("debounced-input",e),this._debounceTimer=null},i)):this._emitValueEvent("debounced-input",e)}_onNativeKeyDown(t){F.scheduleImplicitSubmit(t,this)}_onNativeChange(t){const e=t.target.value;this._emitValueEvent("change",e)}_onClearClick(t){if(t.preventDefault(),!(c(this,"disabled")||this.hasAttribute("readonly"))&&this._input){this.value="",this._input.value="",this._input.dispatchEvent(new Event("input",{bubbles:!0,composed:!0})),this._input.dispatchEvent(new Event("change",{bubbles:!0,composed:!0})),this.dispatchEvent(new CustomEvent("clear",{bubbles:!0,composed:!0}));try{this._input.focus({preventScroll:!0})}catch{this._input.focus()}}}_onToggleClick(t){t.preventDefault(),t.stopPropagation(),this.toggleVisibility()}};m.formAssociated=!0;let f=m;typeof customElements<"u"&&!customElements.get("ui-password-field")&&customElements.define("ui-password-field",f);exports.UIPasswordField=f;
@@ -1,21 +1,24 @@
1
- import { E as T } from "./ElementBase-BeZT54Hj.mjs";
2
- import { b as f, s as q, a as B } from "./control-name-Bpj7F34X.mjs";
3
- const N = `
1
+ import { E as N } from "./ElementBase-D5QsC5Vw.mjs";
2
+ import { f as L, n as M } from "./slotted-input-atWznLfm.mjs";
3
+ import { F as $ } from "./form-control-D9wWUMBl.mjs";
4
+ import { s as F } from "./implicit-submit-Lr0-q2LR.mjs";
5
+ import { b as f, s as U, a as D } from "./control-name-Bpj7F34X.mjs";
6
+ const V = `
4
7
  <svg viewBox="0 0 20 20" aria-hidden="true" focusable="false">
5
8
  <path d="m6 6 8 8M14 6l-8 8" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"/>
6
9
  </svg>
7
- `, S = `
10
+ `, E = `
8
11
  <svg viewBox="0 0 20 20" aria-hidden="true" focusable="false">
9
12
  <path d="M2.4 10c1.5-3 4.3-5 7.6-5s6.1 2 7.6 5c-1.5 3-4.3 5-7.6 5s-6.1-2-7.6-5Z" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/>
10
13
  <circle cx="10" cy="10" r="2.5" fill="none" stroke="currentColor" stroke-width="1.6"/>
11
14
  </svg>
12
- `, M = `
15
+ `, K = `
13
16
  <svg viewBox="0 0 20 20" aria-hidden="true" focusable="false">
14
17
  <path d="M3 3l14 14" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round"/>
15
18
  <path d="M6.1 6.1A9.3 9.3 0 0 1 10 5c3.3 0 6.1 2 7.6 5-.5 1-1.2 1.9-2 2.7M8.2 8.2A2.5 2.5 0 0 1 11.8 12" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/>
16
19
  <path d="M4.4 7.1C3.6 7.9 3 8.9 2.4 10c1.5 3 4.3 5 7.6 5 1.2 0 2.4-.3 3.4-.7" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/>
17
20
  </svg>
18
- `, I = `
21
+ `, O = `
19
22
  :host {
20
23
  --ui-input-action-size: 24px;
21
24
  --ui-input-padding: var(--ui-padding, 0);
@@ -210,6 +213,25 @@ const N = `
210
213
  color: var(--ui-input-placeholder);
211
214
  }
212
215
 
216
+ /* <input slot="input">: the author's own input, so password managers can fill it. */
217
+ ::slotted(input[slot="input"]) {
218
+ inline-size: 100%;
219
+ min-inline-size: 0;
220
+ box-sizing: border-box;
221
+ border: none;
222
+ background: transparent;
223
+ color: inherit;
224
+ font: 500 var(--ui-input-font-size)/1.4 "Inter", "IBM Plex Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
225
+ padding: var(--ui-input-padding);
226
+ min-block-size: calc(var(--ui-input-min-height) - 2px);
227
+ margin: 0;
228
+ outline: none;
229
+ }
230
+
231
+ .control[data-slotted-input] > input {
232
+ display: none;
233
+ }
234
+
213
235
  .actions {
214
236
  flex: 0 0 auto;
215
237
  display: inline-flex;
@@ -453,7 +475,7 @@ const N = `
453
475
  --ui-label-color: #cbd5e1;
454
476
  --ui-description-color: #93a4bd;
455
477
  --ui-input-border-color: #334155;
456
- --ui-input-focus-ring: #93c5fd;
478
+ --ui-input-focus-ring: var(--ui-color-accent-on-dark, #93c5fd);
457
479
  --ui-input-placeholder: color-mix(in srgb, #e2e8f0 46%, transparent);
458
480
  --ui-input-shadow: 0 2px 8px rgba(2, 6, 23, 0.24);
459
481
  --ui-password-field-toggle-hover-bg: color-mix(in srgb, #e2e8f0 12%, transparent);
@@ -580,7 +602,7 @@ const N = `
580
602
  box-shadow: none;
581
603
  }
582
604
  }
583
- `, L = [
605
+ `, R = [
584
606
  "value",
585
607
  "placeholder",
586
608
  "disabled",
@@ -609,10 +631,10 @@ const N = `
609
631
  "description",
610
632
  "data-error"
611
633
  ];
612
- function u(o) {
634
+ function h(o) {
613
635
  return o.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#39;");
614
636
  }
615
- function p(o) {
637
+ function g(o) {
616
638
  if (!o) return !1;
617
639
  const t = o.assignedNodes({ flatten: !0 });
618
640
  return t.length ? t.some((e) => e.nodeType === Node.TEXT_NODE ? !!e.textContent?.trim() : e.nodeType === Node.ELEMENT_NODE) : !1;
@@ -623,10 +645,10 @@ function c(o, t) {
623
645
  const i = String(e).trim().toLowerCase();
624
646
  return i !== "false" && i !== "0";
625
647
  }
626
- function U(o) {
648
+ function P(o) {
627
649
  return o === "none" || o === "large" || o === "full";
628
650
  }
629
- function $(o) {
651
+ function H(o) {
630
652
  let t = 0;
631
653
  switch (o.length >= 8 && (t += 1), /[a-z]/.test(o) && /[A-Z]/.test(o) && (t += 1), /\d/.test(o) && (t += 1), (/[^A-Za-z0-9]/.test(o) || o.length >= 14) && (t += 1), Math.max(1, Math.min(4, t || 1))) {
632
654
  case 1:
@@ -639,12 +661,22 @@ function $(o) {
639
661
  return { score: 4, label: "Strong", caption: "Strong password shape for production accounts." };
640
662
  }
641
663
  }
642
- class F extends T {
664
+ const m = class m extends N {
643
665
  constructor() {
644
- super(), this._input = null, this._clearBtn = null, this._toggleBtn = null, this._debounceTimer = null, this._formUnregister = null, this._uid = Math.random().toString(36).slice(2, 9), this._autofocusApplied = !1, this._revealed = !1, this._lastStrengthKey = "", this.strengthEvaluator = null, this._onNativeInput = this._onNativeInput.bind(this), this._onNativeChange = this._onNativeChange.bind(this), this._onClearClick = this._onClearClick.bind(this), this._onToggleClick = this._onToggleClick.bind(this), this._onSlotChange = this._onSlotChange.bind(this);
666
+ super(), this._slottedInput = null, this._formControl = new $(this, {
667
+ // With the author's own input, that native input is the form field (no second entry).
668
+ getValue: () => this._slottedInput ? null : this.value,
669
+ getValidity: () => ({ control: this._slottedInput ? null : this._input }),
670
+ defaultAttribute: "value",
671
+ onFormDisabled: (t) => {
672
+ this._input && (this._input.disabled = t || this.hasAttribute("disabled"));
673
+ }
674
+ }), this._input = null, this._clearBtn = null, this._toggleBtn = null, this._debounceTimer = null, this._formUnregister = null, this._uid = Math.random().toString(36).slice(2, 9), this._autofocusApplied = !1, this._revealed = !1, this._lastStrengthKey = "", this.strengthEvaluator = null, this._onLabelClick = (t) => {
675
+ t.target?.closest?.(".label") && this._input?.focus();
676
+ }, this._onNativeInput = this._onNativeInput.bind(this), this._onNativeChange = this._onNativeChange.bind(this), this._onNativeKeyDown = this._onNativeKeyDown.bind(this), this._onClearClick = this._onClearClick.bind(this), this._onToggleClick = this._onToggleClick.bind(this), this._onSlotChange = this._onSlotChange.bind(this);
645
677
  }
646
678
  static get observedAttributes() {
647
- return [...L, "aria-label", "aria-description", "aria-describedby", "show-strength", "revealable"];
679
+ return [...R, "aria-label", "aria-description", "aria-describedby", "show-strength", "revealable"];
648
680
  }
649
681
  get value() {
650
682
  return this.getAttribute("value") || "";
@@ -655,11 +687,21 @@ class F extends T {
655
687
  get revealed() {
656
688
  return this._revealed;
657
689
  }
690
+ formResetCallback() {
691
+ this._formControl.formResetCallback();
692
+ }
693
+ formDisabledCallback(t) {
694
+ this._formControl.formDisabledCallback(t);
695
+ }
696
+ /** The `<form>` this field belongs to, if any. */
697
+ get form() {
698
+ return this._formControl.form;
699
+ }
658
700
  connectedCallback() {
659
- super.connectedCallback(), this.root.addEventListener("slotchange", this._onSlotChange), this._registerWithForm();
701
+ super.connectedCallback(), this._formControl.connect(), this.root.addEventListener("slotchange", this._onSlotChange), this.root.addEventListener("click", this._onLabelClick), this._registerWithForm();
660
702
  }
661
703
  disconnectedCallback() {
662
- this.root.removeEventListener("slotchange", this._onSlotChange), this._detachListeners(), this._debounceTimer && (clearTimeout(this._debounceTimer), this._debounceTimer = null), this._formUnregister && (this._formUnregister(), this._formUnregister = null), this._autofocusApplied = !1, super.disconnectedCallback();
704
+ this._formControl.disconnect(), this.root.removeEventListener("slotchange", this._onSlotChange), this.root.removeEventListener("click", this._onLabelClick), this._detachListeners(), this._debounceTimer && (clearTimeout(this._debounceTimer), this._debounceTimer = null), this._formUnregister && (this._formUnregister(), this._formUnregister = null), this._autofocusApplied = !1, super.disconnectedCallback();
663
705
  }
664
706
  attributeChangedCallback(t, e, i) {
665
707
  if (e !== i && (t === "name" && this.isConnected && this._registerWithForm(), t === "autofocus" && !this.hasAttribute("autofocus") && (this._autofocusApplied = !1), !(!this.isConnected || !this._input))) {
@@ -723,15 +765,15 @@ class F extends T {
723
765
  render() {
724
766
  const t = this.value, e = this.getAttribute("label") || "", i = this.getAttribute("description") || "", r = this.getAttribute("data-error") || "", s = this.getAttribute("placeholder") || "", n = this.hasAttribute("required") ? '<span class="required" aria-hidden="true">*</span>' : "", a = this.hasAttribute("floating-label");
725
767
  this.setContent(`
726
- <style>${I}</style>
768
+ <style>${O}</style>
727
769
  <div class="root" part="root">
728
770
  <div class="meta" part="meta">
729
771
  <label class="label" id="${this._uid}-label" part="label">
730
- <slot name="label">${u(e)}</slot>
772
+ <slot name="label">${h(e)}</slot>
731
773
  ${n}
732
774
  </label>
733
775
  <p class="description" id="${this._uid}-description" part="description">
734
- <slot name="description">${u(i)}</slot>
776
+ <slot name="description">${h(i)}</slot>
735
777
  </p>
736
778
  </div>
737
779
 
@@ -739,25 +781,26 @@ class F extends T {
739
781
  <span class="prefix" part="prefix"><slot name="prefix"></slot></span>
740
782
 
741
783
  <div class="control" part="control">
784
+ <slot name="input"></slot>
742
785
  <input
743
786
  part="input"
744
787
  type="password"
745
- value="${u(t)}"
746
- placeholder="${u(s)}"
788
+ value="${h(t)}"
789
+ placeholder="${h(s)}"
747
790
  />
748
- ${a ? `<span class="floating-label" part="floating-label">${u(e || s || "Password")}</span>` : ""}
791
+ ${a ? `<span class="floating-label" part="floating-label">${h(e || s || "Password")}</span>` : ""}
749
792
  </div>
750
793
 
751
794
  <div class="actions" part="actions">
752
- <button class="clear-btn" part="clear" type="button" aria-label="Clear" hidden>${N}</button>
795
+ <button class="clear-btn" part="clear" type="button" aria-label="Clear" hidden>${V}</button>
753
796
  <span class="suffix-slot" part="suffix"><slot name="suffix"></slot></span>
754
- <button class="toggle-btn" part="toggle" type="button" aria-label="Show password">${S}</button>
797
+ <button class="toggle-btn" part="toggle" type="button" aria-label="Show password">${E}</button>
755
798
  </div>
756
799
  </div>
757
800
 
758
801
  <div class="footer" part="footer">
759
802
  <p class="error" id="${this._uid}-error" part="error" aria-live="polite">
760
- <slot name="error">${u(r)}</slot>
803
+ <slot name="error">${h(r)}</slot>
761
804
  </p>
762
805
  <p class="counter" part="counter"></p>
763
806
  </div>
@@ -772,21 +815,34 @@ class F extends T {
772
815
  </div>
773
816
  </div>
774
817
  </div>
775
- `), this._detachListeners(), this._input = this.root.querySelector("input"), this._clearBtn = this.root.querySelector(".clear-btn"), this._toggleBtn = this.root.querySelector(".toggle-btn"), this._input?.addEventListener("input", this._onNativeInput), this._input?.addEventListener("change", this._onNativeChange), this._clearBtn?.addEventListener("click", this._onClearClick), this._toggleBtn?.addEventListener("click", this._onToggleClick), this._syncUi();
818
+ `), this._detachListeners(), this._bindInput(), this._clearBtn = this.root.querySelector(".clear-btn"), this._toggleBtn = this.root.querySelector(".toggle-btn"), this._clearBtn?.addEventListener("click", this._onClearClick), this._toggleBtn?.addEventListener("click", this._onToggleClick), this._syncUi();
819
+ }
820
+ /** The control: the author's <input slot="input"> when there is one, else the inner input. */
821
+ _bindInput() {
822
+ this._input?.removeEventListener("input", this._onNativeInput), this._input?.removeEventListener("change", this._onNativeChange), this._input?.removeEventListener("keydown", this._onNativeKeyDown);
823
+ const t = L(this);
824
+ this._slottedInput = t;
825
+ const e = this.root.querySelector(".control");
826
+ t ? e?.setAttribute("data-slotted-input", "") : e?.removeAttribute("data-slotted-input"), this._input = t || this.root.querySelector(".control > input"), t && !this.hasAttribute("value") && t.value && this.setAttribute("value", t.value), this._input?.addEventListener("input", this._onNativeInput), this._input?.addEventListener("change", this._onNativeChange), t || this._input?.addEventListener("keydown", this._onNativeKeyDown);
776
827
  }
777
828
  _detachListeners() {
778
- this._input?.removeEventListener("input", this._onNativeInput), this._input?.removeEventListener("change", this._onNativeChange), this._clearBtn?.removeEventListener("click", this._onClearClick), this._toggleBtn?.removeEventListener("click", this._onToggleClick), this._clearBtn = null, this._toggleBtn = null;
829
+ this._input?.removeEventListener("input", this._onNativeInput), this._input?.removeEventListener("change", this._onNativeChange), this._input?.removeEventListener("keydown", this._onNativeKeyDown), this._clearBtn?.removeEventListener("click", this._onClearClick), this._toggleBtn?.removeEventListener("click", this._onToggleClick), this._clearBtn = null, this._toggleBtn = null;
779
830
  }
780
831
  _syncHostTokens() {
781
832
  const t = this.getAttribute("color");
782
833
  t ? this.style.setProperty("--ui-input-accent", t) : this.style.removeProperty("--ui-input-accent");
783
834
  const e = this.getAttribute("radius") || "";
784
- e && !U(e) ? this.style.setProperty("--ui-input-border-radius", e) : this.style.removeProperty("--ui-input-border-radius");
835
+ e && !P(e) ? this.style.setProperty("--ui-input-border-radius", e) : this.style.removeProperty("--ui-input-border-radius");
785
836
  }
786
837
  _syncControlAttrs() {
787
838
  if (this._syncHostTokens(), !this._input) return;
788
- const t = c(this, "disabled"), e = this.hasAttribute("required"), i = this.hasAttribute("readonly"), r = this.getAttribute("maxlength") || "", s = this.getAttribute("minlength") || "", n = this.getAttribute("pattern") || "", a = this.getAttribute("autocomplete") || "current-password", l = this.getAttribute("spellcheck") || "", h = this.getAttribute("placeholder") || "", d = this.getAttribute("name") || "";
789
- this._input.disabled = t, this._input.required = e, this._input.readOnly = i, this._input.placeholder = h, this._input.name = d, this._input.type = this._revealed ? "text" : "password", this._input.setAttribute("autocomplete", a), n ? this._input.setAttribute("pattern", n) : this._input.removeAttribute("pattern"), l ? this._input.setAttribute("spellcheck", l) : this._input.removeAttribute("spellcheck"), r && Number.isFinite(Number(r)) ? this._input.setAttribute("maxlength", r) : this._input.removeAttribute("maxlength"), s && Number.isFinite(Number(s)) ? this._input.setAttribute("minlength", s) : this._input.removeAttribute("minlength");
839
+ if (this._slottedInput) {
840
+ const l = this._slottedInput;
841
+ (this.hasAttribute("disabled") || this._formControl.disabledByForm) && (l.disabled = c(this, "disabled") || this._formControl.disabledByForm), this.hasAttribute("required") && (l.required = !0), this.hasAttribute("readonly") && (l.readOnly = !0), l.type = this._revealed ? "text" : "password";
842
+ return;
843
+ }
844
+ const t = c(this, "disabled"), e = this.hasAttribute("required"), i = this.hasAttribute("readonly"), r = this.getAttribute("maxlength") || "", s = this.getAttribute("minlength") || "", n = this.getAttribute("pattern") || "", a = this.getAttribute("autocomplete") || "current-password", u = this.getAttribute("spellcheck") || "", d = this.getAttribute("placeholder") || "", p = this.getAttribute("name") || "";
845
+ this._input.disabled = t || this._formControl.disabledByForm, this._input.required = e, this._input.readOnly = i, this._input.placeholder = d, this._input.name = p, this._input.type = this._revealed ? "text" : "password", this._input.setAttribute("autocomplete", a), n ? this._input.setAttribute("pattern", n) : this._input.removeAttribute("pattern"), u ? this._input.setAttribute("spellcheck", u) : this._input.removeAttribute("spellcheck"), r && Number.isFinite(Number(r)) ? this._input.setAttribute("maxlength", r) : this._input.removeAttribute("maxlength"), s && Number.isFinite(Number(s)) ? this._input.setAttribute("minlength", s) : this._input.removeAttribute("minlength");
790
846
  }
791
847
  _syncInputValue(t) {
792
848
  this._input && this._input.value !== t && (this._input.value = t);
@@ -804,7 +860,7 @@ class F extends T {
804
860
  const t = this.getAttribute("revealable") !== "false", e = c(this, "disabled") || this.hasAttribute("readonly");
805
861
  this._toggleBtn.hidden = !t, this._toggleBtn.disabled = e, this._toggleBtn.setAttribute("aria-pressed", this._revealed ? "true" : "false"), this._toggleBtn.setAttribute("aria-label", this._revealed ? "Hide password" : "Show password");
806
862
  const i = this._revealed ? "revealed" : "hidden";
807
- this._toggleBtn.dataset.iconState !== i && (this._toggleBtn.dataset.iconState = i, this._toggleBtn.innerHTML = this._revealed ? M : S);
863
+ this._toggleBtn.dataset.iconState !== i && (this._toggleBtn.dataset.iconState = i, this._toggleBtn.innerHTML = this._revealed ? K : E);
808
864
  }
809
865
  _syncStrengthUi() {
810
866
  const t = this.root.querySelector(".strength"), e = this.root.querySelector(".strength-label"), i = this.root.querySelector(".strength-caption");
@@ -814,7 +870,7 @@ class F extends T {
814
870
  delete t.dataset.score, e.textContent = "", i.textContent = "", this._lastStrengthKey = "";
815
871
  return;
816
872
  }
817
- const n = (this.strengthEvaluator || $)(r);
873
+ const n = (this.strengthEvaluator || H)(r);
818
874
  t.dataset.score = String(n.score), e.textContent = n.label, i.textContent = n.caption;
819
875
  const a = `${r}|${n.score}|${n.label}|${n.caption}`;
820
876
  a !== this._lastStrengthKey && (this._lastStrengthKey = a, this.dispatchEvent(
@@ -831,13 +887,20 @@ class F extends T {
831
887
  ));
832
888
  }
833
889
  _syncDerivedState() {
834
- const t = this.root.querySelector('slot[name="label"]'), e = this.root.querySelector('slot[name="description"]'), i = this.root.querySelector('slot[name="error"]'), r = this.root.querySelector('slot[name="prefix"]'), s = this.root.querySelector('slot[name="suffix"]'), n = (this.getAttribute("label") || "").trim(), a = (this.getAttribute("description") || "").trim(), l = (this.getAttribute("data-error") || "").trim(), h = !!n || p(t), d = !!a || p(e), g = !!l || p(i), z = p(r), E = p(s), v = this.root.querySelector(".label"), m = this.root.querySelector(".description"), x = this.root.querySelector(".prefix"), _ = this.root.querySelector(".suffix-slot"), y = this.root.querySelector(".meta"), w = this.root.querySelector(".footer"), A = this.root.querySelector(".error"), k = this.root.querySelector(".counter");
835
- f(t, n), f(e, a), f(i, l), v && v.toggleAttribute("hidden", !h), m && m.toggleAttribute("hidden", !d), x && x.toggleAttribute("hidden", !z), _ && _.toggleAttribute("hidden", !E), y && y.toggleAttribute("hidden", !h && !d);
836
- const C = this.hasAttribute("counter");
837
- if (k && k.toggleAttribute("hidden", !C), A && A.toggleAttribute("hidden", !g), w && w.toggleAttribute("hidden", !g && !C), !this._input) return;
838
- q(this._input, this, h ? `${this._uid}-label` : null);
890
+ const t = this.root.querySelector('slot[name="label"]'), e = this.root.querySelector('slot[name="description"]'), i = this.root.querySelector('slot[name="error"]'), r = this.root.querySelector('slot[name="prefix"]'), s = this.root.querySelector('slot[name="suffix"]'), n = (this.getAttribute("label") || "").trim(), a = (this.getAttribute("description") || "").trim(), u = (this.getAttribute("data-error") || "").trim(), d = !!n || g(t), p = !!a || g(e), l = !!u || g(i), q = g(r), I = g(s), _ = this.root.querySelector(".label"), x = this.root.querySelector(".description"), y = this.root.querySelector(".prefix"), A = this.root.querySelector(".suffix-slot"), w = this.root.querySelector(".meta"), k = this.root.querySelector(".footer"), C = this.root.querySelector(".error"), S = this.root.querySelector(".counter");
891
+ f(t, n), f(e, a), f(i, u), _ && _.toggleAttribute("hidden", !d), x && x.toggleAttribute("hidden", !p), y && y.toggleAttribute("hidden", !q), A && A.toggleAttribute("hidden", !I), w && w.toggleAttribute("hidden", !d && !p);
892
+ const z = this.hasAttribute("counter");
893
+ if (S && S.toggleAttribute("hidden", !z), C && C.toggleAttribute("hidden", !l), k && k.toggleAttribute("hidden", !l && !z), !this._input) return;
894
+ if (this._slottedInput) {
895
+ const B = (this.getAttribute("label") || this.getAttribute("aria-label") || "").trim();
896
+ M(this._slottedInput, B, (this.getAttribute("description") || "").trim());
897
+ const T = this.getAttribute("validation") === "error" || !!u;
898
+ this._slottedInput.toggleAttribute("aria-invalid", T);
899
+ return;
900
+ }
901
+ U(this._input, this, d ? `${this._uid}-label` : null);
839
902
  const b = [];
840
- d && b.push(`${this._uid}-description`), g && b.push(`${this._uid}-error`), B(this._input, this, this._uid, b), this.getAttribute("validation") === "error" || !!l ? this._input.setAttribute("aria-invalid", "true") : this._input.removeAttribute("aria-invalid"), this.hasAttribute("required") ? this._input.setAttribute("aria-required", "true") : this._input.removeAttribute("aria-required");
903
+ p && b.push(`${this._uid}-description`), l && b.push(`${this._uid}-error`), D(this._input, this, this._uid, b), this.getAttribute("validation") === "error" || !!u ? this._input.setAttribute("aria-invalid", "true") : this._input.removeAttribute("aria-invalid"), this.hasAttribute("required") ? this._input.setAttribute("aria-required", "true") : this._input.removeAttribute("aria-required");
841
904
  }
842
905
  _syncUi() {
843
906
  this._syncControlAttrs(), this._syncInputValue(this.value), this._syncDerivedState(), this._syncToggleUi(), this._syncStrengthUi(), this.hasAttribute("autofocus") && !this._autofocusApplied && (this._autofocusApplied = !0, queueMicrotask(() => {
@@ -876,8 +939,8 @@ class F extends T {
876
939
  } catch {
877
940
  }
878
941
  }
879
- _onSlotChange() {
880
- this._syncDerivedState();
942
+ _onSlotChange(t) {
943
+ t?.target?.name === "input" && (this._bindInput(), this._syncControlAttrs()), this._syncDerivedState();
881
944
  }
882
945
  _onNativeInput(t) {
883
946
  const e = t.target.value;
@@ -887,6 +950,10 @@ class F extends T {
887
950
  this._emitValueEvent("debounced-input", e), this._debounceTimer = null;
888
951
  }, i)) : this._emitValueEvent("debounced-input", e);
889
952
  }
953
+ // Enter submits the surrounding form, as it would from a native password input.
954
+ _onNativeKeyDown(t) {
955
+ F(t, this);
956
+ }
890
957
  _onNativeChange(t) {
891
958
  const e = t.target.value;
892
959
  this._emitValueEvent("change", e);
@@ -904,8 +971,10 @@ class F extends T {
904
971
  _onToggleClick(t) {
905
972
  t.preventDefault(), t.stopPropagation(), this.toggleVisibility();
906
973
  }
907
- }
908
- typeof customElements < "u" && !customElements.get("ui-password-field") && customElements.define("ui-password-field", F);
974
+ };
975
+ m.formAssociated = !0;
976
+ let v = m;
977
+ typeof customElements < "u" && !customElements.get("ui-password-field") && customElements.define("ui-password-field", v);
909
978
  export {
910
- F as UIPasswordField
979
+ v as UIPasswordField
911
980
  };
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const A=require("./ElementBase-DxbvhLJs.js"),E=require("./control-name-BmoI1m3a.js");let I=0;const w=`
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const A=require("./ElementBase-CbUsP3D6.js"),E=require("./control-name-BmoI1m3a.js");let I=0;const w=`
2
2
  :host {
3
3
  --ui-pin-gap: 8px;
4
4
  --ui-pin-slot-width: 40px;
@@ -1,4 +1,4 @@
1
- import { E as x } from "./ElementBase-BeZT54Hj.mjs";
1
+ import { E as x } from "./ElementBase-D5QsC5Vw.mjs";
2
2
  import { c as A } from "./control-name-Bpj7F34X.mjs";
3
3
  let E = 0;
4
4
  const I = `
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const b=require("./ElementBase-DxbvhLJs.js"),v={sm:"var(--ui-breakpoint-sm, 640px)",md:"var(--ui-breakpoint-md, 768px)",lg:"var(--ui-breakpoint-lg, 1024px)",xl:"var(--ui-breakpoint-xl, 1280px)"},p=["display","columns","rows","gap","rowgap","columngap","autoflow","autorows","autocolumns","align","justify","place","aligncontent","justifycontent","placecontent"],w={xs:"var(--ui-space-xs, 4px)",sm:"var(--ui-space-sm, 8px)",md:"var(--ui-space-md, 12px)",lg:"var(--ui-space-lg, 20px)",xl:"var(--ui-space-xl, 28px)"},I=["data-row","data-column","data-row-span","data-column-span","data-value","data-selected","data-disabled","hidden"],A=`
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const b=require("./ElementBase-CbUsP3D6.js"),v={sm:"var(--ui-breakpoint-sm, 640px)",md:"var(--ui-breakpoint-md, 768px)",lg:"var(--ui-breakpoint-lg, 1024px)",xl:"var(--ui-breakpoint-xl, 1280px)"},p=["display","columns","rows","gap","rowgap","columngap","autoflow","autorows","autocolumns","align","justify","place","aligncontent","justifycontent","placecontent"],w={xs:"var(--ui-space-xs, 4px)",sm:"var(--ui-space-sm, 8px)",md:"var(--ui-space-md, 12px)",lg:"var(--ui-space-lg, 20px)",xl:"var(--ui-space-xl, 28px)"},I=["data-row","data-column","data-row-span","data-column-span","data-value","data-selected","data-disabled","hidden"],A=`
2
2
  :host {
3
3
  --ui-placement-display: grid;
4
4
  --ui-placement-columns: 1fr;
@@ -1,4 +1,4 @@
1
- import { E as _ } from "./ElementBase-BeZT54Hj.mjs";
1
+ import { E as _ } from "./ElementBase-D5QsC5Vw.mjs";
2
2
  const b = {
3
3
  sm: "var(--ui-breakpoint-sm, 640px)",
4
4
  md: "var(--ui-breakpoint-md, 768px)",
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const s=require("./ElementBase-DxbvhLJs.js"),o=`
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const s=require("./ElementBase-CbUsP3D6.js"),o=`
2
2
  :host {
3
3
  position: fixed;
4
4
  display: block;
@@ -1,4 +1,4 @@
1
- import { E as a } from "./ElementBase-BeZT54Hj.mjs";
1
+ import { E as a } from "./ElementBase-D5QsC5Vw.mjs";
2
2
  const s = `
3
3
  :host {
4
4
  position: fixed;