@editora/ui-core 0.1.25 → 0.2.1

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 (349) hide show
  1. package/README.md +132 -0
  2. package/dist/accordion.cjs.js +13 -12
  3. package/dist/accordion.esm.js +13 -12
  4. package/dist/alert-dialog.cjs.js +92 -53
  5. package/dist/alert-dialog.esm.js +211 -159
  6. package/dist/alert.cjs.js +42 -33
  7. package/dist/alert.esm.js +80 -71
  8. package/dist/animated-beam.cjs.js +42 -50
  9. package/dist/animated-beam.esm.js +47 -55
  10. package/dist/animated-list.cjs.js +11 -27
  11. package/dist/animated-list.esm.js +12 -28
  12. package/dist/animated-text.cjs.js +9 -9
  13. package/dist/animated-text.esm.js +9 -9
  14. package/dist/app-header.cjs.js +17 -12
  15. package/dist/app-header.esm.js +18 -13
  16. package/dist/aspect-ratio.cjs.js +10 -12
  17. package/dist/aspect-ratio.esm.js +11 -13
  18. package/dist/avatar.cjs.js +16 -20
  19. package/dist/avatar.esm.js +16 -20
  20. package/dist/badge.cjs.js +27 -22
  21. package/dist/badge.esm.js +32 -27
  22. package/dist/block-controls.cjs.js +11 -12
  23. package/dist/block-controls.esm.js +8 -9
  24. package/dist/box.cjs.js +2 -3
  25. package/dist/box.esm.js +2 -3
  26. package/dist/breadcrumb.cjs.js +12 -18
  27. package/dist/breadcrumb.esm.js +11 -17
  28. package/dist/button.cjs.js +1 -1
  29. package/dist/button.esm.js +1 -1
  30. package/dist/{calendar-D-mXMgqc.js → calendar-CzpWDxLc.js} +56 -46
  31. package/dist/{calendar-B3PUKHQm.mjs → calendar-DkSDFg33.mjs} +127 -117
  32. package/dist/calendar.cjs.js +1 -1
  33. package/dist/calendar.esm.js +1 -1
  34. package/dist/card.cjs.js +6 -7
  35. package/dist/card.esm.js +5 -6
  36. package/dist/chart.cjs.js +58 -52
  37. package/dist/chart.esm.js +101 -95
  38. package/dist/checkbox.cjs.js +19 -15
  39. package/dist/checkbox.esm.js +19 -15
  40. package/dist/collapsible.cjs.js +9 -13
  41. package/dist/collapsible.esm.js +9 -13
  42. package/dist/color-picker.cjs.js +38 -19
  43. package/dist/color-picker.esm.js +134 -115
  44. package/dist/combobox.cjs.js +60 -57
  45. package/dist/combobox.esm.js +96 -92
  46. package/dist/command-palette.cjs.js +1 -0
  47. package/dist/command-palette.esm.js +1 -0
  48. package/dist/command.cjs.js +32 -14
  49. package/dist/command.esm.js +46 -28
  50. package/dist/components/date-time-utils.d.ts.map +1 -1
  51. package/dist/components/ui-accordion.d.ts.map +1 -1
  52. package/dist/components/ui-alert-dialog.d.ts +2 -0
  53. package/dist/components/ui-alert-dialog.d.ts.map +1 -1
  54. package/dist/components/ui-alert.d.ts.map +1 -1
  55. package/dist/components/ui-animated-beam.d.ts.map +1 -1
  56. package/dist/components/ui-animated-list.d.ts.map +1 -1
  57. package/dist/components/ui-app-header.d.ts.map +1 -1
  58. package/dist/components/ui-aspect-ratio.d.ts.map +1 -1
  59. package/dist/components/ui-avatar.d.ts.map +1 -1
  60. package/dist/components/ui-badge.d.ts.map +1 -1
  61. package/dist/components/ui-block-controls.d.ts.map +1 -1
  62. package/dist/components/ui-box.d.ts.map +1 -1
  63. package/dist/components/ui-breadcrumb.d.ts.map +1 -1
  64. package/dist/components/ui-button.d.ts.map +1 -1
  65. package/dist/components/ui-calendar.d.ts.map +1 -1
  66. package/dist/components/ui-card.d.ts.map +1 -1
  67. package/dist/components/ui-chart.d.ts.map +1 -1
  68. package/dist/components/ui-checkbox.d.ts.map +1 -1
  69. package/dist/components/ui-collapsible.d.ts.map +1 -1
  70. package/dist/components/ui-color-picker.d.ts.map +1 -1
  71. package/dist/components/ui-combobox.d.ts.map +1 -1
  72. package/dist/components/ui-command-palette.d.ts.map +1 -1
  73. package/dist/components/ui-command.d.ts.map +1 -1
  74. package/dist/components/ui-container.d.ts.map +1 -1
  75. package/dist/components/ui-context-menu.d.ts.map +1 -1
  76. package/dist/components/ui-data-table.d.ts +7 -0
  77. package/dist/components/ui-data-table.d.ts.map +1 -1
  78. package/dist/components/ui-date-picker.d.ts.map +1 -1
  79. package/dist/components/ui-date-range-picker.d.ts.map +1 -1
  80. package/dist/components/ui-date-range-time-picker.d.ts.map +1 -1
  81. package/dist/components/ui-date-time-picker.d.ts.map +1 -1
  82. package/dist/components/ui-dialog.d.ts +2 -0
  83. package/dist/components/ui-dialog.d.ts.map +1 -1
  84. package/dist/components/ui-dock.d.ts.map +1 -1
  85. package/dist/components/ui-drawer.d.ts.map +1 -1
  86. package/dist/components/ui-dropdown.d.ts.map +1 -1
  87. package/dist/components/ui-empty-state.d.ts.map +1 -1
  88. package/dist/components/ui-field.d.ts.map +1 -1
  89. package/dist/components/ui-fieldset.d.ts.map +1 -1
  90. package/dist/components/ui-file-upload.d.ts.map +1 -1
  91. package/dist/components/ui-floating-toolbar.d.ts.map +1 -1
  92. package/dist/components/ui-form.d.ts.map +1 -1
  93. package/dist/components/ui-gantt.d.ts.map +1 -1
  94. package/dist/components/ui-hover-card.d.ts.map +1 -1
  95. package/dist/components/ui-icon-cloud.d.ts.map +1 -1
  96. package/dist/components/ui-inline-edit.d.ts.map +1 -1
  97. package/dist/components/ui-input.d.ts.map +1 -1
  98. package/dist/components/ui-marquee.d.ts.map +1 -1
  99. package/dist/components/ui-menu.d.ts.map +1 -1
  100. package/dist/components/ui-menubar.d.ts.map +1 -1
  101. package/dist/components/ui-meter.d.ts.map +1 -1
  102. package/dist/components/ui-multi-select.d.ts.map +1 -1
  103. package/dist/components/ui-number-field.d.ts.map +1 -1
  104. package/dist/components/ui-orbiter.d.ts.map +1 -1
  105. package/dist/components/ui-pagination.d.ts.map +1 -1
  106. package/dist/components/ui-password-field.d.ts.map +1 -1
  107. package/dist/components/ui-pin-input.d.ts.map +1 -1
  108. package/dist/components/ui-popover.d.ts.map +1 -1
  109. package/dist/components/ui-progress.d.ts.map +1 -1
  110. package/dist/components/ui-radio-group.d.ts.map +1 -1
  111. package/dist/components/ui-radio.d.ts.map +1 -1
  112. package/dist/components/ui-rating.d.ts +1 -0
  113. package/dist/components/ui-rating.d.ts.map +1 -1
  114. package/dist/components/ui-scroll-area.d.ts.map +1 -1
  115. package/dist/components/ui-section.d.ts.map +1 -1
  116. package/dist/components/ui-select.d.ts.map +1 -1
  117. package/dist/components/ui-selection-popup.d.ts.map +1 -1
  118. package/dist/components/ui-sidebar.d.ts.map +1 -1
  119. package/dist/components/ui-slider.d.ts.map +1 -1
  120. package/dist/components/ui-sortable.d.ts.map +1 -1
  121. package/dist/components/ui-spinning-text.d.ts.map +1 -1
  122. package/dist/components/ui-split-button.d.ts.map +1 -1
  123. package/dist/components/ui-splitter.d.ts.map +1 -1
  124. package/dist/components/ui-stepper.d.ts.map +1 -1
  125. package/dist/components/ui-switch.d.ts.map +1 -1
  126. package/dist/components/ui-tabs.d.ts.map +1 -1
  127. package/dist/components/ui-tags-input.d.ts.map +1 -1
  128. package/dist/components/ui-textarea.d.ts.map +1 -1
  129. package/dist/components/ui-time-picker.d.ts.map +1 -1
  130. package/dist/components/ui-toggle-group.d.ts +2 -0
  131. package/dist/components/ui-toggle-group.d.ts.map +1 -1
  132. package/dist/components/ui-toggle.d.ts.map +1 -1
  133. package/dist/components/ui-toolbar.d.ts +2 -0
  134. package/dist/components/ui-toolbar.d.ts.map +1 -1
  135. package/dist/components/ui-tooltip.d.ts.map +1 -1
  136. package/dist/components/ui-transfer-list.d.ts.map +1 -1
  137. package/dist/components/ui-tree-item.d.ts.map +1 -1
  138. package/dist/components/ui-tree.d.ts.map +1 -1
  139. package/dist/components/ui-wizard.d.ts.map +1 -1
  140. package/dist/container.cjs.js +6 -12
  141. package/dist/container.esm.js +8 -14
  142. package/dist/context-menu.cjs.js +8 -8
  143. package/dist/context-menu.esm.js +42 -41
  144. package/dist/data-table.cjs.js +21 -18
  145. package/dist/data-table.esm.js +210 -190
  146. package/dist/date-field.cjs.js +9 -9
  147. package/dist/date-field.esm.js +19 -19
  148. package/dist/date-picker.cjs.js +29 -20
  149. package/dist/date-picker.esm.js +59 -50
  150. package/dist/date-range-picker.cjs.js +24 -19
  151. package/dist/date-range-picker.esm.js +86 -81
  152. package/dist/date-range-time-picker.cjs.js +27 -20
  153. package/dist/date-range-time-picker.esm.js +24 -17
  154. package/dist/date-time-picker.cjs.js +24 -17
  155. package/dist/date-time-picker.esm.js +89 -82
  156. package/dist/date-time-utils-C-4eHTyy.js +1 -0
  157. package/dist/{date-time-utils-BTlxnz5j.mjs → date-time-utils-zAx4ghvC.mjs} +75 -68
  158. package/dist/description.cjs.js +4 -4
  159. package/dist/description.esm.js +4 -4
  160. package/dist/dialog.cjs.js +59 -43
  161. package/dist/dialog.esm.js +86 -53
  162. package/dist/direction-provider.cjs.js +1 -1
  163. package/dist/direction-provider.esm.js +1 -1
  164. package/dist/dock.cjs.js +16 -30
  165. package/dist/dock.esm.js +26 -40
  166. package/dist/drawer.cjs.js +8 -12
  167. package/dist/drawer.esm.js +6 -10
  168. package/dist/dropdown.cjs.js +8 -6
  169. package/dist/dropdown.esm.js +33 -30
  170. package/dist/empty-state.cjs.js +17 -15
  171. package/dist/empty-state.esm.js +13 -11
  172. package/dist/field-error.cjs.js +1 -1
  173. package/dist/field-error.esm.js +7 -7
  174. package/dist/field.cjs.js +23 -14
  175. package/dist/field.esm.js +30 -21
  176. package/dist/fieldset.cjs.js +16 -9
  177. package/dist/fieldset.esm.js +19 -12
  178. package/dist/file-upload.cjs.js +79 -37
  179. package/dist/file-upload.esm.js +154 -112
  180. package/dist/flex.cjs.js +2 -2
  181. package/dist/flex.esm.js +8 -8
  182. package/dist/floating-toolbar.cjs.js +6 -7
  183. package/dist/floating-toolbar.esm.js +8 -9
  184. package/dist/form.cjs.js +24 -27
  185. package/dist/form.esm.js +24 -27
  186. package/dist/gantt.cjs.js +13 -11
  187. package/dist/gantt.esm.js +13 -11
  188. package/dist/grid.cjs.js +1 -1
  189. package/dist/grid.esm.js +1 -1
  190. package/dist/hover-card.cjs.js +8 -8
  191. package/dist/hover-card.esm.js +18 -15
  192. package/dist/icon-cloud.cjs.js +19 -36
  193. package/dist/icon-cloud.esm.js +41 -58
  194. package/dist/index.cjs.js +1 -1
  195. package/dist/index.d.ts +2 -0
  196. package/dist/index.d.ts.map +1 -1
  197. package/dist/index.esm.js +108 -104
  198. package/dist/inline-edit.cjs.js +50 -22
  199. package/dist/inline-edit.esm.js +77 -49
  200. package/dist/input.cjs.js +45 -38
  201. package/dist/input.esm.js +60 -53
  202. package/dist/label.cjs.js +6 -6
  203. package/dist/label.esm.js +6 -6
  204. package/dist/layout.cjs.js +3 -3
  205. package/dist/layout.esm.js +3 -3
  206. package/dist/marquee.cjs.js +7 -10
  207. package/dist/marquee.esm.js +7 -10
  208. package/dist/masonry-grid.cjs.js +2 -2
  209. package/dist/masonry-grid.esm.js +11 -11
  210. package/dist/{menu-item-styles-IGSFLAHu.mjs → menu-item-styles-CdqxPUuw.mjs} +15 -15
  211. package/dist/{menu-item-styles-B4onAr4C.js → menu-item-styles-DUdyjQ7i.js} +10 -10
  212. package/dist/menu.cjs.js +8 -24
  213. package/dist/menu.esm.js +52 -72
  214. package/dist/menubar.cjs.js +9 -31
  215. package/dist/menubar.esm.js +127 -153
  216. package/dist/meter.cjs.js +4 -9
  217. package/dist/meter.esm.js +6 -11
  218. package/dist/multi-select.cjs.js +53 -40
  219. package/dist/multi-select.esm.js +87 -73
  220. package/dist/navigation-menu.cjs.js +10 -10
  221. package/dist/navigation-menu.esm.js +33 -33
  222. package/dist/number-field.cjs.js +28 -17
  223. package/dist/number-field.esm.js +37 -26
  224. package/dist/number-ticker.cjs.js +4 -4
  225. package/dist/number-ticker.esm.js +10 -10
  226. package/dist/odometer.cjs.js +9 -9
  227. package/dist/odometer.esm.js +17 -17
  228. package/dist/orbiter.cjs.js +11 -28
  229. package/dist/orbiter.esm.js +28 -45
  230. package/dist/overlay-motion-B56x1GoY.js +49 -0
  231. package/dist/overlay-motion-BX3dPLay.mjs +120 -0
  232. package/dist/pagination.cjs.js +28 -25
  233. package/dist/pagination.esm.js +54 -51
  234. package/dist/password-field.cjs.js +39 -34
  235. package/dist/password-field.esm.js +63 -58
  236. package/dist/pin-input.cjs.js +18 -14
  237. package/dist/pin-input.esm.js +24 -20
  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 +16 -28
  243. package/dist/popover.esm.js +29 -45
  244. package/dist/portal-DeaM1tYY.mjs +121 -0
  245. package/dist/portal-XbYR3m_q.js +1 -0
  246. package/dist/portal.cjs.js +1 -1
  247. package/dist/portal.d.ts +3 -1
  248. package/dist/portal.d.ts.map +1 -1
  249. package/dist/portal.esm.js +1 -1
  250. package/dist/{positioner-D0VGxtYU.mjs → positioner-BE8Nbho2.mjs} +5 -3
  251. package/dist/{positioner-D_fqyx_j.js → positioner-DZ1FW6A9.js} +1 -1
  252. package/dist/positioner.cjs.js +1 -1
  253. package/dist/positioner.esm.js +1 -1
  254. package/dist/presence.cjs.js +1 -1
  255. package/dist/presence.esm.js +1 -1
  256. package/dist/primitives/overlay-motion.d.ts +47 -0
  257. package/dist/primitives/overlay-motion.d.ts.map +1 -0
  258. package/dist/primitives/positioner.d.ts.map +1 -1
  259. package/dist/progress.cjs.js +11 -16
  260. package/dist/progress.esm.js +37 -42
  261. package/dist/quick-actions.cjs.js +14 -14
  262. package/dist/quick-actions.esm.js +12 -12
  263. package/dist/radio-group.cjs.js +50 -26
  264. package/dist/radio-group.esm.js +53 -29
  265. package/dist/radio.cjs.js +16 -13
  266. package/dist/radio.esm.js +16 -13
  267. package/dist/rating.cjs.js +11 -15
  268. package/dist/rating.esm.js +48 -50
  269. package/dist/{runtime-CFnK53iC.mjs → runtime-BRT7E4A8.mjs} +563 -531
  270. package/dist/runtime-CXw4SGV9.js +5 -0
  271. package/dist/runtime.cjs.js +1 -1
  272. package/dist/runtime.d.ts +3 -2
  273. package/dist/runtime.d.ts.map +1 -1
  274. package/dist/runtime.esm.js +36 -32
  275. package/dist/scroll-area.cjs.js +3 -4
  276. package/dist/scroll-area.esm.js +3 -4
  277. package/dist/section.cjs.js +2 -4
  278. package/dist/section.esm.js +2 -4
  279. package/dist/select.cjs.js +42 -75
  280. package/dist/select.esm.js +57 -89
  281. package/dist/selection-popup.cjs.js +3 -4
  282. package/dist/selection-popup.esm.js +3 -4
  283. package/dist/semantic-tokens.d.ts +17 -0
  284. package/dist/semantic-tokens.d.ts.map +1 -0
  285. package/dist/separator.cjs.js +6 -6
  286. package/dist/separator.esm.js +7 -7
  287. package/dist/sidebar.cjs.js +29 -28
  288. package/dist/sidebar.esm.js +32 -31
  289. package/dist/skeleton.cjs.js +2 -2
  290. package/dist/skeleton.esm.js +2 -2
  291. package/dist/slider.cjs.js +22 -26
  292. package/dist/slider.esm.js +25 -29
  293. package/dist/slot.cjs.js +1 -1
  294. package/dist/slot.esm.js +1 -1
  295. package/dist/sortable.cjs.js +10 -11
  296. package/dist/sortable.esm.js +10 -11
  297. package/dist/spinning-text.cjs.js +4 -13
  298. package/dist/spinning-text.esm.js +4 -13
  299. package/dist/split-button.cjs.js +7 -7
  300. package/dist/split-button.esm.js +17 -16
  301. package/dist/splitter.cjs.js +52 -10
  302. package/dist/splitter.esm.js +55 -13
  303. package/dist/stepper.cjs.js +31 -65
  304. package/dist/stepper.esm.js +32 -66
  305. package/dist/switch.cjs.js +20 -22
  306. package/dist/switch.esm.js +20 -22
  307. package/dist/table.cjs.js +5 -5
  308. package/dist/table.esm.js +20 -20
  309. package/dist/tabs.cjs.js +101 -26
  310. package/dist/tabs.esm.js +187 -112
  311. package/dist/tags-input.cjs.js +43 -17
  312. package/dist/tags-input.esm.js +75 -49
  313. package/dist/textarea.cjs.js +34 -35
  314. package/dist/textarea.esm.js +50 -51
  315. package/dist/theme.d.ts +25 -1
  316. package/dist/theme.d.ts.map +1 -1
  317. package/dist/time-field.cjs.js +8 -8
  318. package/dist/time-field.esm.js +29 -29
  319. package/dist/time-picker.cjs.js +17 -14
  320. package/dist/time-picker.esm.js +28 -25
  321. package/dist/timeline.cjs.js +10 -10
  322. package/dist/timeline.esm.js +7 -7
  323. package/dist/toast.cjs.js +2 -2
  324. package/dist/toast.esm.js +2 -2
  325. package/dist/toggle-group.cjs.js +13 -13
  326. package/dist/toggle-group.esm.js +66 -61
  327. package/dist/toggle.cjs.js +52 -34
  328. package/dist/toggle.esm.js +80 -62
  329. package/dist/toolbar.cjs.js +14 -14
  330. package/dist/toolbar.esm.js +41 -33
  331. package/dist/tooltip.cjs.js +3 -3
  332. package/dist/tooltip.esm.js +39 -33
  333. package/dist/transfer-list.cjs.js +37 -38
  334. package/dist/transfer-list.esm.js +32 -33
  335. package/dist/{tree-B_oQput6.mjs → tree-33fVNnaf.mjs} +6 -5
  336. package/dist/{tree-SivHxcAy.js → tree-Dc02MChE.js} +6 -5
  337. package/dist/tree-item.cjs.js +9 -8
  338. package/dist/tree-item.esm.js +13 -12
  339. package/dist/tree.cjs.js +1 -1
  340. package/dist/tree.esm.js +1 -1
  341. package/dist/{ui-button-Co8Sid6t.mjs → ui-button-C3OmI7Sn.mjs} +152 -154
  342. package/dist/{ui-button-BPrzJScZ.js → ui-button-CnLwXBnx.js} +107 -109
  343. package/dist/wizard.cjs.js +51 -39
  344. package/dist/wizard.esm.js +51 -39
  345. package/package.json +1 -1
  346. package/dist/date-time-utils-y3AvNvGe.js +0 -1
  347. package/dist/portal-DgpQ3Jo1.js +0 -1
  348. package/dist/portal-bR42gHvG.mjs +0 -118
  349. package/dist/runtime-DwE-tizc.js +0 -1
@@ -2,18 +2,19 @@
2
2
  :host {
3
3
  display: inline-flex;
4
4
  max-width: 100%;
5
- --ui-pagination-gap: 6px;
6
- --ui-pagination-radius: 10px;
7
- --ui-pagination-bg: color-mix(in srgb, var(--ui-color-surface, #ffffff) 96%, transparent);
8
- --ui-pagination-item-bg: color-mix(in srgb, var(--ui-color-surface, #ffffff) 95%, transparent);
9
- --ui-pagination-item-bg-hover: color-mix(in srgb, var(--ui-color-primary, #2563eb) 12%, transparent);
5
+ --ui-pagination-gap: 2px;
6
+ --ui-pagination-radius: var(--ui-control-radius-2, var(--ui-radius, 6px));
7
+ --ui-pagination-bg: transparent;
8
+ --ui-pagination-item-bg: transparent;
9
+ --ui-pagination-item-bg-hover: var(--ui-color-fill, color-mix(in srgb, var(--ui-color-primary, #2563eb) 12%, transparent));
10
10
  --ui-pagination-active-bg: var(--ui-color-primary, #2563eb);
11
- --ui-pagination-active-color: #ffffff;
12
- --ui-pagination-border: color-mix(in srgb, var(--ui-color-border, #cbd5e1) 78%, transparent);
13
- --ui-pagination-color: var(--ui-color-text, #0f172a);
14
- --ui-pagination-muted: var(--ui-color-muted, #526175);
15
- --ui-pagination-padding: 6px 11px;
16
- --ui-pagination-font-size: 13px;
11
+ --ui-pagination-active-color: var(--ui-color-foreground-on-primary, #ffffff);
12
+ --ui-pagination-border: transparent;
13
+ --ui-pagination-color: var(--ui-color-text-strong, var(--ui-color-text, #0f172a));
14
+ --ui-pagination-muted: var(--ui-color-text-secondary, var(--ui-color-muted, #526175));
15
+ --ui-pagination-h: var(--ui-control-height-2, 32px);
16
+ --ui-pagination-padding: 0 8px;
17
+ --ui-pagination-font-size: var(--ui-control-font-size-2, 14px);
17
18
  --ui-pagination-shadow: none;
18
19
  color-scheme: light dark;
19
20
  }
@@ -24,9 +25,9 @@
24
25
  flex-wrap: wrap;
25
26
  align-items: center;
26
27
  gap: var(--ui-pagination-gap);
27
- padding: 6px;
28
- border: 1px solid var(--ui-pagination-border);
29
- border-radius: calc(var(--ui-pagination-radius) + 2px);
28
+ padding: 0;
29
+ border: 0;
30
+ border-radius: var(--ui-pagination-radius);
30
31
  background: var(--ui-pagination-bg);
31
32
  box-shadow: var(--ui-pagination-shadow);
32
33
  }
@@ -45,22 +46,22 @@
45
46
  background: var(--ui-pagination-item-bg);
46
47
  color: var(--ui-pagination-color);
47
48
  font-size: var(--ui-pagination-font-size);
48
- font-weight: 600;
49
+ font-weight: 500;
49
50
  line-height: 1.2;
50
51
  box-sizing: border-box;
51
- min-width: 34px;
52
+ min-width: var(--ui-pagination-h);
53
+ min-height: var(--ui-pagination-h);
52
54
  cursor: pointer;
53
55
  transition: border-color 130ms ease, background-color 130ms ease, color 130ms ease, transform 130ms ease;
54
56
  }
55
57
 
56
58
  button:hover:not(:disabled) {
57
59
  background: var(--ui-pagination-item-bg-hover);
58
- border-color: color-mix(in srgb, var(--ui-color-primary, #2563eb) 34%, var(--ui-pagination-border));
59
60
  }
60
61
 
61
62
  button:focus-visible {
62
- outline: 2px solid var(--ui-color-focus-ring, #2563eb);
63
- outline-offset: 1px;
63
+ outline: var(--ui-ring-width, 2px) solid var(--ui-ring-color, var(--ui-color-focus-ring, #2563eb));
64
+ outline-offset: var(--ui-ring-offset, 2px);
64
65
  }
65
66
 
66
67
  button[aria-current="page"] {
@@ -77,15 +78,17 @@
77
78
  :host([size="sm"]) {
78
79
  --ui-pagination-gap: 4px;
79
80
  --ui-pagination-radius: 8px;
80
- --ui-pagination-padding: 4px 8px;
81
- --ui-pagination-font-size: 12px;
81
+ --ui-pagination-h: var(--ui-control-height-1, 24px);
82
+ --ui-pagination-padding: 0 6px;
83
+ --ui-pagination-font-size: var(--ui-control-font-size-1, 12px);
82
84
  }
83
85
 
84
86
  :host([size="lg"]) {
85
87
  --ui-pagination-gap: 8px;
86
88
  --ui-pagination-radius: 12px;
87
- --ui-pagination-padding: 7px 13px;
88
- --ui-pagination-font-size: 14px;
89
+ --ui-pagination-h: var(--ui-control-height-3, 40px);
90
+ --ui-pagination-padding: 0 12px;
91
+ --ui-pagination-font-size: var(--ui-control-font-size-3, 16px);
89
92
  }
90
93
 
91
94
  :host([variant="classic"]) .pagination {
@@ -193,9 +196,9 @@
193
196
  --ui-pagination-shadow: none;
194
197
  }
195
198
  }
196
- `;class e extends r.ElementBase{constructor(){super(),this._page=1,this._count=1,this._headless=!1,this._onClick=this._onClick.bind(this),this._onKeyDown=this._onKeyDown.bind(this)}static get observedAttributes(){return["page","count","headless","variant","size","aria-label"]}get page(){return this._page}set page(t){this.goToPage(t)}get count(){return this._count}set count(t){const a=Math.max(1,Number(t)||1);this.setAttribute("count",String(a)),this._page>a&&this.setAttribute("page",String(a))}attributeChangedCallback(t,a,i){(t==="page"||t==="count"||t==="headless")&&(this._page=Math.max(1,Number(this.getAttribute("page"))||1),this._count=Math.max(1,Number(this.getAttribute("count"))||1),this._headless=this.hasAttribute("headless"),this._page>this._count&&(this._page=this._count)),this.requestRender()}render(){if(this._headless){this.setContent("");return}let t="";t+=`<button type="button" data-page="1" aria-label="First" ${this._page===1?"disabled":""}>&laquo;</button>`,t+=`<button type="button" data-page="${this._page-1}" aria-label="Previous" ${this._page===1?"disabled":""}>&lsaquo;</button>`;const a=this._getPageRange(this._page,this._count);a[0]>1&&(t+='<button type="button" data-page="1">1</button>',a[0]>2&&(t+='<span class="ellipsis" aria-hidden="true">…</span>'));for(let n=a[0];n<=a[1];n++)t+=`<button type="button" data-page="${n}" ${n===this._page?'aria-current="page"':""}>${n}</button>`;a[1]<this._count&&(a[1]<this._count-1&&(t+='<span class="ellipsis" aria-hidden="true">…</span>'),t+=`<button type="button" data-page="${this._count}">${this._count}</button>`),t+=`<button type="button" data-page="${this._page+1}" aria-label="Next" ${this._page===this._count?"disabled":""}>&rsaquo;</button>`,t+=`<button type="button" data-page="${this._count}" aria-label="Last" ${this._page===this._count?"disabled":""}>&raquo;</button>`,this.setContent(`
199
+ `;class e extends r.ElementBase{constructor(){super(),this._page=1,this._count=1,this._headless=!1,this._onClick=this._onClick.bind(this),this._onKeyDown=this._onKeyDown.bind(this)}static get observedAttributes(){return["page","count","headless","variant","size","aria-label"]}get page(){return this._page}set page(t){this.goToPage(t)}get count(){return this._count}set count(t){const i=Math.max(1,Number(t)||1);this.setAttribute("count",String(i)),this._page>i&&this.setAttribute("page",String(i))}attributeChangedCallback(t,i,a){(t==="page"||t==="count"||t==="headless")&&(this._page=Math.max(1,Number(this.getAttribute("page"))||1),this._count=Math.max(1,Number(this.getAttribute("count"))||1),this._headless=this.hasAttribute("headless"),this._page>this._count&&(this._page=this._count)),this.requestRender()}render(){if(this._headless){this.setContent("");return}let t="";t+=`<button type="button" data-page="1" aria-label="First" ${this._page===1?"disabled":""}>&laquo;</button>`,t+=`<button type="button" data-page="${this._page-1}" aria-label="Previous" ${this._page===1?"disabled":""}>&lsaquo;</button>`;const i=this._getPageRange(this._page,this._count);i[0]>1&&(t+='<button type="button" data-page="1">1</button>',i[0]>2&&(t+='<span class="ellipsis" aria-hidden="true">…</span>'));for(let n=i[0];n<=i[1];n++)t+=`<button type="button" data-page="${n}" ${n===this._page?'aria-current="page"':""}>${n}</button>`;i[1]<this._count&&(i[1]<this._count-1&&(t+='<span class="ellipsis" aria-hidden="true">…</span>'),t+=`<button type="button" data-page="${this._count}">${this._count}</button>`),t+=`<button type="button" data-page="${this._page+1}" aria-label="Next" ${this._page===this._count?"disabled":""}>&rsaquo;</button>`,t+=`<button type="button" data-page="${this._count}" aria-label="Last" ${this._page===this._count?"disabled":""}>&raquo;</button>`,this.setContent(`
197
200
  <style>${s}</style>
198
201
  <nav class="pagination" role="navigation" aria-label="${this.getAttribute("aria-label")||"Pagination"}" tabindex="0">
199
202
  ${t}
200
203
  </nav>
201
- `);const i=this.root.querySelector(".pagination");i&&(i.removeEventListener("click",this._onClick),i.addEventListener("click",this._onClick),i.removeEventListener("keydown",this._onKeyDown),i.addEventListener("keydown",this._onKeyDown))}goToPage(t){const a=Math.max(1,Math.min(this._count,Number(t)||1));a!==this._page&&this._applyPageChange(a)}nextPage(){this.goToPage(this._page+1)}prevPage(){this.goToPage(this._page-1)}firstPage(){this.goToPage(1)}lastPage(){this.goToPage(this._count)}focusCurrent(){this.root.querySelector('button[aria-current="page"]')?.focus()}_getPageRange(t,a){return a<=5?[1,a]:t<=3?[1,5]:t>=a-2?[a-4,a]:[t-2,t+2]}_onClick(t){const a=t.target.closest("button[data-page]");if(!a||a.hasAttribute("disabled"))return;const i=Number(a.getAttribute("data-page"));isNaN(i)||i<1||i>this._count||i===this._page||this._applyPageChange(i)}_onKeyDown(t){const a=this.root.querySelector(".pagination");if(!a)return;const i=Array.from(a.querySelectorAll("button:not(:disabled)")),n=this.root.activeElement;let o=i.indexOf(n);t.key==="ArrowRight"||t.key==="ArrowDown"?(o=(o+1)%i.length,i[o].focus(),t.preventDefault()):t.key==="ArrowLeft"||t.key==="ArrowUp"?(o=(o-1+i.length)%i.length,i[o].focus(),t.preventDefault()):t.key==="Home"?(i[0].focus(),t.preventDefault()):t.key==="End"&&(i[i.length-1].focus(),t.preventDefault())}_applyPageChange(t){const a=this._page,i=Math.max(1,Math.min(this._count,Number(t)||1));if(i===a)return;const n=i===1&&a!==1?"first":i===this._count&&a!==this._count?"last":i===a-1?"prev":i===a+1?"next":"change";this.setAttribute("page",String(i));const o={page:i,previousPage:a,count:this._count,reason:n};this.dispatchEvent(new CustomEvent(n,{detail:o,bubbles:!0,composed:!0})),this.dispatchEvent(new CustomEvent("change",{detail:o,bubbles:!0,composed:!0}))}}typeof customElements<"u"&&!customElements.get("ui-pagination")&&customElements.define("ui-pagination",e);exports.UIPagination=e;
204
+ `);const a=this.root.querySelector(".pagination");a&&(a.removeEventListener("click",this._onClick),a.addEventListener("click",this._onClick),a.removeEventListener("keydown",this._onKeyDown),a.addEventListener("keydown",this._onKeyDown))}goToPage(t){const i=Math.max(1,Math.min(this._count,Number(t)||1));i!==this._page&&this._applyPageChange(i)}nextPage(){this.goToPage(this._page+1)}prevPage(){this.goToPage(this._page-1)}firstPage(){this.goToPage(1)}lastPage(){this.goToPage(this._count)}focusCurrent(){this.root.querySelector('button[aria-current="page"]')?.focus()}_getPageRange(t,i){return i<=5?[1,i]:t<=3?[1,5]:t>=i-2?[i-4,i]:[t-2,t+2]}_onClick(t){const i=t.target.closest("button[data-page]");if(!i||i.hasAttribute("disabled"))return;const a=Number(i.getAttribute("data-page"));isNaN(a)||a<1||a>this._count||a===this._page||this._applyPageChange(a)}_onKeyDown(t){const i=this.root.querySelector(".pagination");if(!i)return;const a=Array.from(i.querySelectorAll("button:not(:disabled)")),n=this.root.activeElement;let o=a.indexOf(n);t.key==="ArrowRight"||t.key==="ArrowDown"?(o=(o+1)%a.length,a[o].focus(),t.preventDefault()):t.key==="ArrowLeft"||t.key==="ArrowUp"?(o=(o-1+a.length)%a.length,a[o].focus(),t.preventDefault()):t.key==="Home"?(a[0].focus(),t.preventDefault()):t.key==="End"&&(a[a.length-1].focus(),t.preventDefault())}_applyPageChange(t){const i=this._page,a=Math.max(1,Math.min(this._count,Number(t)||1));if(a===i)return;const n=a===1&&i!==1?"first":a===this._count&&i!==this._count?"last":a===i-1?"prev":a===i+1?"next":"change";this.setAttribute("page",String(a));const o={page:a,previousPage:i,count:this._count,reason:n};this.dispatchEvent(new CustomEvent(n,{detail:o,bubbles:!0,composed:!0})),this.dispatchEvent(new CustomEvent("change",{detail:o,bubbles:!0,composed:!0}))}}typeof customElements<"u"&&!customElements.get("ui-pagination")&&customElements.define("ui-pagination",e);exports.UIPagination=e;
@@ -3,18 +3,19 @@ const r = `
3
3
  :host {
4
4
  display: inline-flex;
5
5
  max-width: 100%;
6
- --ui-pagination-gap: 6px;
7
- --ui-pagination-radius: 10px;
8
- --ui-pagination-bg: color-mix(in srgb, var(--ui-color-surface, #ffffff) 96%, transparent);
9
- --ui-pagination-item-bg: color-mix(in srgb, var(--ui-color-surface, #ffffff) 95%, transparent);
10
- --ui-pagination-item-bg-hover: color-mix(in srgb, var(--ui-color-primary, #2563eb) 12%, transparent);
6
+ --ui-pagination-gap: 2px;
7
+ --ui-pagination-radius: var(--ui-control-radius-2, var(--ui-radius, 6px));
8
+ --ui-pagination-bg: transparent;
9
+ --ui-pagination-item-bg: transparent;
10
+ --ui-pagination-item-bg-hover: var(--ui-color-fill, color-mix(in srgb, var(--ui-color-primary, #2563eb) 12%, transparent));
11
11
  --ui-pagination-active-bg: var(--ui-color-primary, #2563eb);
12
- --ui-pagination-active-color: #ffffff;
13
- --ui-pagination-border: color-mix(in srgb, var(--ui-color-border, #cbd5e1) 78%, transparent);
14
- --ui-pagination-color: var(--ui-color-text, #0f172a);
15
- --ui-pagination-muted: var(--ui-color-muted, #526175);
16
- --ui-pagination-padding: 6px 11px;
17
- --ui-pagination-font-size: 13px;
12
+ --ui-pagination-active-color: var(--ui-color-foreground-on-primary, #ffffff);
13
+ --ui-pagination-border: transparent;
14
+ --ui-pagination-color: var(--ui-color-text-strong, var(--ui-color-text, #0f172a));
15
+ --ui-pagination-muted: var(--ui-color-text-secondary, var(--ui-color-muted, #526175));
16
+ --ui-pagination-h: var(--ui-control-height-2, 32px);
17
+ --ui-pagination-padding: 0 8px;
18
+ --ui-pagination-font-size: var(--ui-control-font-size-2, 14px);
18
19
  --ui-pagination-shadow: none;
19
20
  color-scheme: light dark;
20
21
  }
@@ -25,9 +26,9 @@ const r = `
25
26
  flex-wrap: wrap;
26
27
  align-items: center;
27
28
  gap: var(--ui-pagination-gap);
28
- padding: 6px;
29
- border: 1px solid var(--ui-pagination-border);
30
- border-radius: calc(var(--ui-pagination-radius) + 2px);
29
+ padding: 0;
30
+ border: 0;
31
+ border-radius: var(--ui-pagination-radius);
31
32
  background: var(--ui-pagination-bg);
32
33
  box-shadow: var(--ui-pagination-shadow);
33
34
  }
@@ -46,22 +47,22 @@ const r = `
46
47
  background: var(--ui-pagination-item-bg);
47
48
  color: var(--ui-pagination-color);
48
49
  font-size: var(--ui-pagination-font-size);
49
- font-weight: 600;
50
+ font-weight: 500;
50
51
  line-height: 1.2;
51
52
  box-sizing: border-box;
52
- min-width: 34px;
53
+ min-width: var(--ui-pagination-h);
54
+ min-height: var(--ui-pagination-h);
53
55
  cursor: pointer;
54
56
  transition: border-color 130ms ease, background-color 130ms ease, color 130ms ease, transform 130ms ease;
55
57
  }
56
58
 
57
59
  button:hover:not(:disabled) {
58
60
  background: var(--ui-pagination-item-bg-hover);
59
- border-color: color-mix(in srgb, var(--ui-color-primary, #2563eb) 34%, var(--ui-pagination-border));
60
61
  }
61
62
 
62
63
  button:focus-visible {
63
- outline: 2px solid var(--ui-color-focus-ring, #2563eb);
64
- outline-offset: 1px;
64
+ outline: var(--ui-ring-width, 2px) solid var(--ui-ring-color, var(--ui-color-focus-ring, #2563eb));
65
+ outline-offset: var(--ui-ring-offset, 2px);
65
66
  }
66
67
 
67
68
  button[aria-current="page"] {
@@ -78,15 +79,17 @@ const r = `
78
79
  :host([size="sm"]) {
79
80
  --ui-pagination-gap: 4px;
80
81
  --ui-pagination-radius: 8px;
81
- --ui-pagination-padding: 4px 8px;
82
- --ui-pagination-font-size: 12px;
82
+ --ui-pagination-h: var(--ui-control-height-1, 24px);
83
+ --ui-pagination-padding: 0 6px;
84
+ --ui-pagination-font-size: var(--ui-control-font-size-1, 12px);
83
85
  }
84
86
 
85
87
  :host([size="lg"]) {
86
88
  --ui-pagination-gap: 8px;
87
89
  --ui-pagination-radius: 12px;
88
- --ui-pagination-padding: 7px 13px;
89
- --ui-pagination-font-size: 14px;
90
+ --ui-pagination-h: var(--ui-control-height-3, 40px);
91
+ --ui-pagination-padding: 0 12px;
92
+ --ui-pagination-font-size: var(--ui-control-font-size-3, 16px);
90
93
  }
91
94
 
92
95
  :host([variant="classic"]) .pagination {
@@ -212,10 +215,10 @@ class s extends e {
212
215
  return this._count;
213
216
  }
214
217
  set count(t) {
215
- const a = Math.max(1, Number(t) || 1);
216
- this.setAttribute("count", String(a)), this._page > a && this.setAttribute("page", String(a));
218
+ const i = Math.max(1, Number(t) || 1);
219
+ this.setAttribute("count", String(i)), this._page > i && this.setAttribute("page", String(i));
217
220
  }
218
- attributeChangedCallback(t, a, i) {
221
+ attributeChangedCallback(t, i, a) {
219
222
  (t === "page" || t === "count" || t === "headless") && (this._page = Math.max(1, Number(this.getAttribute("page")) || 1), this._count = Math.max(1, Number(this.getAttribute("count")) || 1), this._headless = this.hasAttribute("headless"), this._page > this._count && (this._page = this._count)), this.requestRender();
220
223
  }
221
224
  render() {
@@ -225,22 +228,22 @@ class s extends e {
225
228
  }
226
229
  let t = "";
227
230
  t += `<button type="button" data-page="1" aria-label="First" ${this._page === 1 ? "disabled" : ""}>&laquo;</button>`, t += `<button type="button" data-page="${this._page - 1}" aria-label="Previous" ${this._page === 1 ? "disabled" : ""}>&lsaquo;</button>`;
228
- const a = this._getPageRange(this._page, this._count);
229
- a[0] > 1 && (t += '<button type="button" data-page="1">1</button>', a[0] > 2 && (t += '<span class="ellipsis" aria-hidden="true">…</span>'));
230
- for (let n = a[0]; n <= a[1]; n++)
231
+ const i = this._getPageRange(this._page, this._count);
232
+ i[0] > 1 && (t += '<button type="button" data-page="1">1</button>', i[0] > 2 && (t += '<span class="ellipsis" aria-hidden="true">…</span>'));
233
+ for (let n = i[0]; n <= i[1]; n++)
231
234
  t += `<button type="button" data-page="${n}" ${n === this._page ? 'aria-current="page"' : ""}>${n}</button>`;
232
- a[1] < this._count && (a[1] < this._count - 1 && (t += '<span class="ellipsis" aria-hidden="true">…</span>'), t += `<button type="button" data-page="${this._count}">${this._count}</button>`), t += `<button type="button" data-page="${this._page + 1}" aria-label="Next" ${this._page === this._count ? "disabled" : ""}>&rsaquo;</button>`, t += `<button type="button" data-page="${this._count}" aria-label="Last" ${this._page === this._count ? "disabled" : ""}>&raquo;</button>`, this.setContent(`
235
+ i[1] < this._count && (i[1] < this._count - 1 && (t += '<span class="ellipsis" aria-hidden="true">…</span>'), t += `<button type="button" data-page="${this._count}">${this._count}</button>`), t += `<button type="button" data-page="${this._page + 1}" aria-label="Next" ${this._page === this._count ? "disabled" : ""}>&rsaquo;</button>`, t += `<button type="button" data-page="${this._count}" aria-label="Last" ${this._page === this._count ? "disabled" : ""}>&raquo;</button>`, this.setContent(`
233
236
  <style>${r}</style>
234
237
  <nav class="pagination" role="navigation" aria-label="${this.getAttribute("aria-label") || "Pagination"}" tabindex="0">
235
238
  ${t}
236
239
  </nav>
237
240
  `);
238
- const i = this.root.querySelector(".pagination");
239
- i && (i.removeEventListener("click", this._onClick), i.addEventListener("click", this._onClick), i.removeEventListener("keydown", this._onKeyDown), i.addEventListener("keydown", this._onKeyDown));
241
+ const a = this.root.querySelector(".pagination");
242
+ a && (a.removeEventListener("click", this._onClick), a.addEventListener("click", this._onClick), a.removeEventListener("keydown", this._onKeyDown), a.addEventListener("keydown", this._onKeyDown));
240
243
  }
241
244
  goToPage(t) {
242
- const a = Math.max(1, Math.min(this._count, Number(t) || 1));
243
- a !== this._page && this._applyPageChange(a);
245
+ const i = Math.max(1, Math.min(this._count, Number(t) || 1));
246
+ i !== this._page && this._applyPageChange(i);
244
247
  }
245
248
  nextPage() {
246
249
  this.goToPage(this._page + 1);
@@ -257,30 +260,30 @@ class s extends e {
257
260
  focusCurrent() {
258
261
  this.root.querySelector('button[aria-current="page"]')?.focus();
259
262
  }
260
- _getPageRange(t, a) {
261
- return a <= 5 ? [1, a] : t <= 3 ? [1, 5] : t >= a - 2 ? [a - 4, a] : [t - 2, t + 2];
263
+ _getPageRange(t, i) {
264
+ return i <= 5 ? [1, i] : t <= 3 ? [1, 5] : t >= i - 2 ? [i - 4, i] : [t - 2, t + 2];
262
265
  }
263
266
  _onClick(t) {
264
- const a = t.target.closest("button[data-page]");
265
- if (!a || a.hasAttribute("disabled")) return;
266
- const i = Number(a.getAttribute("data-page"));
267
- isNaN(i) || i < 1 || i > this._count || i === this._page || this._applyPageChange(i);
267
+ const i = t.target.closest("button[data-page]");
268
+ if (!i || i.hasAttribute("disabled")) return;
269
+ const a = Number(i.getAttribute("data-page"));
270
+ isNaN(a) || a < 1 || a > this._count || a === this._page || this._applyPageChange(a);
268
271
  }
269
272
  _onKeyDown(t) {
270
- const a = this.root.querySelector(".pagination");
271
- if (!a) return;
272
- const i = Array.from(a.querySelectorAll("button:not(:disabled)")), n = this.root.activeElement;
273
- let o = i.indexOf(n);
274
- t.key === "ArrowRight" || t.key === "ArrowDown" ? (o = (o + 1) % i.length, i[o].focus(), t.preventDefault()) : t.key === "ArrowLeft" || t.key === "ArrowUp" ? (o = (o - 1 + i.length) % i.length, i[o].focus(), t.preventDefault()) : t.key === "Home" ? (i[0].focus(), t.preventDefault()) : t.key === "End" && (i[i.length - 1].focus(), t.preventDefault());
273
+ const i = this.root.querySelector(".pagination");
274
+ if (!i) return;
275
+ const a = Array.from(i.querySelectorAll("button:not(:disabled)")), n = this.root.activeElement;
276
+ let o = a.indexOf(n);
277
+ t.key === "ArrowRight" || t.key === "ArrowDown" ? (o = (o + 1) % a.length, a[o].focus(), t.preventDefault()) : t.key === "ArrowLeft" || t.key === "ArrowUp" ? (o = (o - 1 + a.length) % a.length, a[o].focus(), t.preventDefault()) : t.key === "Home" ? (a[0].focus(), t.preventDefault()) : t.key === "End" && (a[a.length - 1].focus(), t.preventDefault());
275
278
  }
276
279
  _applyPageChange(t) {
277
- const a = this._page, i = Math.max(1, Math.min(this._count, Number(t) || 1));
278
- if (i === a) return;
279
- const n = i === 1 && a !== 1 ? "first" : i === this._count && a !== this._count ? "last" : i === a - 1 ? "prev" : i === a + 1 ? "next" : "change";
280
- this.setAttribute("page", String(i));
280
+ const i = this._page, a = Math.max(1, Math.min(this._count, Number(t) || 1));
281
+ if (a === i) return;
282
+ const n = a === 1 && i !== 1 ? "first" : a === this._count && i !== this._count ? "last" : a === i - 1 ? "prev" : a === i + 1 ? "next" : "change";
283
+ this.setAttribute("page", String(a));
281
284
  const o = {
282
- page: i,
283
- previousPage: a,
285
+ page: a,
286
+ previousPage: i,
284
287
  count: this._count,
285
288
  reason: n
286
289
  };
@@ -15,20 +15,23 @@
15
15
  </svg>
16
16
  `,M=`
17
17
  :host {
18
- --ui-input-padding: var(--ui-padding, 10px 12px);
19
- --ui-input-border-color: var(--ui-color-border, var(--ui-border-color, #cbd5e1));
18
+ --ui-input-action-size: 24px;
19
+ --ui-input-padding: var(--ui-padding, 0);
20
+ --ui-input-pad-x: calc(var(--ui-control-padding-inline-2, 12px) - 1px);
21
+ --ui-input-font-size: var(--ui-control-font-size-2, 14px);
22
+ --ui-input-border-color: var(--ui-color-line, var(--ui-color-border, var(--ui-border-color, #cbd5e1)));
20
23
  --ui-input-border-width: 1px;
21
24
  --ui-input-border-style: solid;
22
25
  --ui-input-border: var(--ui-input-border-width) var(--ui-input-border-style) var(--ui-input-border-color);
23
- --ui-input-border-radius: var(--ui-radius, 10px);
24
- --ui-input-min-height: var(--ui-min-height, 40px);
26
+ --ui-input-border-radius: var(--ui-control-radius-2, var(--ui-radius, 6px));
27
+ --ui-input-min-height: var(--ui-min-height, var(--base-input-height-md, var(--ui-control-height-2, 32px)));
25
28
  --ui-input-width: 100%;
26
29
  --ui-input-bg: var(--ui-color-surface, var(--ui-surface, #ffffff));
27
30
  --ui-input-color: var(--ui-color-text, var(--ui-text, #0f172a));
28
31
  --ui-label-color: var(--ui-color-muted, var(--ui-muted, #526175));
29
32
  --ui-description-color: var(--ui-color-muted, var(--ui-muted, #526175));
30
33
  --ui-input-focus-ring: var(--ui-color-focus-ring, var(--ui-focus-ring, #2563eb));
31
- --ui-input-error: var(--ui-color-danger, var(--ui-error, #dc2626));
34
+ --ui-input-error: var(--ui-color-danger-text, var(--ui-color-danger, var(--ui-error, #dc2626)));
32
35
  --ui-input-success: var(--ui-color-success, var(--ui-success, #15803d));
33
36
  --ui-input-warning: var(--ui-color-warning, var(--ui-warning, #b45309));
34
37
  --ui-input-accent: var(--ui-color-primary, var(--ui-primary, #2563eb));
@@ -36,7 +39,7 @@
36
39
  --ui-input-gap: 8px;
37
40
  --ui-input-meta-gap: 4px;
38
41
  --ui-input-shell-gap: 8px;
39
- --ui-input-placeholder: color-mix(in srgb, var(--ui-input-color) 40%, transparent);
42
+ --ui-input-placeholder: var(--ui-color-placeholder, color-mix(in srgb, var(--ui-input-color) 62%, transparent));
40
43
  --ui-password-field-strength-gap: 8px;
41
44
  --ui-password-field-track-bg: color-mix(in srgb, var(--ui-color-text, #0f172a) 10%, transparent);
42
45
  --ui-password-field-strength-weak: var(--ui-color-danger, #dc2626);
@@ -115,7 +118,7 @@
115
118
  gap: var(--ui-input-shell-gap);
116
119
  box-sizing: border-box;
117
120
  min-block-size: var(--ui-input-min-height);
118
- padding-inline: 10px;
121
+ padding-inline: var(--ui-input-pad-x);
119
122
  border: var(--ui-input-border);
120
123
  border-radius: var(--ui-input-border-radius);
121
124
  background: var(--ui-input-bg);
@@ -124,8 +127,13 @@
124
127
  }
125
128
 
126
129
  .shell:focus-within {
127
- border-color: color-mix(in srgb, var(--ui-input-focus-ring) 56%, var(--ui-input-border-color));
128
- box-shadow: 0 0 0 3px color-mix(in srgb, var(--ui-input-focus-ring) 24%, transparent);
130
+ border-color: var(--ui-ring-color, var(--ui-input-focus-ring));
131
+ outline: var(--ui-ring-width, 2px) solid var(--ui-ring-color, var(--ui-input-focus-ring));
132
+ outline-offset: -1px;
133
+ }
134
+
135
+ .shell:hover:not(:focus-within) {
136
+ border-color: var(--ui-color-line-strong, var(--ui-input-border-color));
129
137
  }
130
138
 
131
139
  .prefix,
@@ -189,7 +197,7 @@
189
197
  border: none;
190
198
  background: transparent;
191
199
  color: inherit;
192
- font: 500 14px/1.4 "Inter", "IBM Plex Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
200
+ font: 500 var(--ui-input-font-size)/1.4 "Inter", "IBM Plex Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
193
201
  padding: var(--ui-input-padding);
194
202
  min-block-size: calc(var(--ui-input-min-height) - 2px);
195
203
  margin: 0;
@@ -213,8 +221,9 @@
213
221
  border: none;
214
222
  outline: none;
215
223
  cursor: pointer;
216
- inline-size: 28px;
217
- block-size: 28px;
224
+ inline-size: var(--ui-input-action-size);
225
+ block-size: var(--ui-input-action-size);
226
+ margin-block: var(--ui-input-action-bleed, 0px);
218
227
  border-radius: 8px;
219
228
  display: inline-grid;
220
229
  place-items: center;
@@ -252,7 +261,6 @@
252
261
  }
253
262
 
254
263
  .toggle-btn:hover {
255
- transform: translateY(-1px);
256
264
  }
257
265
 
258
266
  .clear-btn:focus-visible,
@@ -366,30 +374,27 @@
366
374
  pointer-events: none;
367
375
  }
368
376
 
369
- :host([size="sm"]),
377
+ :host([size="sm"]),
370
378
  :host([size="1"]) {
371
- --ui-input-min-height: 34px;
372
- --ui-input-padding: 7px 8px;
379
+ --ui-input-min-height: var(--ui-min-height, var(--base-input-height-sm, var(--ui-control-height-1, 24px)));
380
+ --ui-input-pad-x: calc(var(--ui-control-padding-inline-1, 8px) - 1px);
381
+ --ui-input-font-size: var(--ui-control-font-size-1, 12px);
382
+ --ui-input-border-radius: var(--ui-control-radius-1, var(--ui-radius, 6px));
383
+ --ui-input-action-size: 24px;
384
+ --ui-input-action-bleed: -1px;
373
385
  --ui-input-shell-gap: 6px;
374
386
  }
375
387
 
376
- :host([size="sm"]) input,
377
- :host([size="1"]) input {
378
- font-size: 12px;
379
- }
380
-
381
388
  :host([size="lg"]),
382
389
  :host([size="3"]) {
383
- --ui-input-min-height: 46px;
384
- --ui-input-padding: 11px 14px;
390
+ --ui-input-min-height: var(--ui-min-height, var(--base-input-height-lg, var(--ui-control-height-3, 40px)));
391
+ --ui-input-pad-x: calc(var(--ui-control-padding-inline-3, 16px) - 1px);
392
+ --ui-input-font-size: var(--ui-control-font-size-3, 16px);
393
+ --ui-input-border-radius: var(--ui-control-radius-3, var(--ui-radius, 6px));
394
+ --ui-input-action-size: 28px;
385
395
  --ui-input-shell-gap: 10px;
386
396
  }
387
397
 
388
- :host([size="lg"]) input,
389
- :host([size="3"]) input {
390
- font-size: 16px;
391
- }
392
-
393
398
  :host([variant="classic"]),
394
399
  :host([variant="outlined"]) {
395
400
  --ui-input-bg: var(--ui-color-surface, var(--ui-surface, #ffffff));
@@ -491,7 +496,7 @@
491
496
  }
492
497
 
493
498
  :host([validation="error"]) .shell {
494
- box-shadow: 0 0 0 3px color-mix(in srgb, var(--ui-input-error) 20%, transparent);
499
+ box-shadow: 0 0 0 1px var(--ui-input-error);
495
500
  }
496
501
 
497
502
  :host([radius="none"]) {
@@ -573,13 +578,13 @@
573
578
  box-shadow: none;
574
579
  }
575
580
  }
576
- `,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 E 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 n=this._input;if(n){try{n.focus({preventScroll:!0})}catch{n.focus()}if(i!=null&&r!=null&&typeof n.setSelectionRange=="function")try{n.setSelectionRange(i,r)}catch{}}})}render(){const t=this.value,e=this.getAttribute("label")||"",i=this.getAttribute("description")||"",r=this.getAttribute("data-error")||"",n=this.getAttribute("placeholder")||"",s=this.hasAttribute("required")?'<span class="required" aria-hidden="true">*</span>':"",a=this.hasAttribute("floating-label");this.setContent(`
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(`
577
582
  <style>${M}</style>
578
583
  <div class="root" part="root">
579
584
  <div class="meta" part="meta">
580
585
  <label class="label" id="${this._uid}-label" part="label">
581
586
  <slot name="label">${u(e)}</slot>
582
- ${s}
587
+ ${n}
583
588
  </label>
584
589
  <p class="description" id="${this._uid}-description" part="description">
585
590
  <slot name="description">${u(i)}</slot>
@@ -594,9 +599,9 @@
594
599
  part="input"
595
600
  type="password"
596
601
  value="${u(t)}"
597
- placeholder="${u(n)}"
602
+ placeholder="${u(s)}"
598
603
  />
599
- ${a?`<span class="floating-label" part="floating-label">${u(e||n||"Password")}</span>`:""}
604
+ ${a?`<span class="floating-label" part="floating-label">${u(e||s||"Password")}</span>`:""}
600
605
  </div>
601
606
 
602
607
  <div class="actions" part="actions">
@@ -623,4 +628,4 @@
623
628
  </div>
624
629
  </div>
625
630
  </div>
626
- `),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")||"",n=this.getAttribute("minlength")||"",s=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),s?this._input.setAttribute("pattern",s):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"),n&&Number.isFinite(Number(n))?this._input.setAttribute("minlength",n):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,n=this.hasAttribute("show-strength")&&r.length>0;if(t.hidden=!n,!n){delete t.dataset.score,e.textContent="",i.textContent="",this._lastStrengthKey="";return}const s=(this.strengthEvaluator||L)(r);t.dataset.score=String(s.score),e.textContent=s.label,i.textContent=s.caption;const a=`${r}|${s.score}|${s.label}|${s.caption}`;a!==this._lastStrengthKey&&(this._lastStrengthKey=a,this.dispatchEvent(new CustomEvent("strength-change",{detail:{value:r,score:s.score,label:s.label,caption:s.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"]'),n=this.root.querySelector('slot[name="suffix"]'),s=(this.getAttribute("label")||"").trim(),a=(this.getAttribute("description")||"").trim(),l=(this.getAttribute("data-error")||"").trim(),h=!!s||g(t),d=!!a||g(e),b=!!l||g(i),z=g(r),T=g(n),v=this.root.querySelector(".label"),m=this.root.querySelector(".description"),_=this.root.querySelector(".prefix"),x=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,s),p.syncSlotFallbackText(e,a),p.syncSlotFallbackText(i,l),v&&v.toggleAttribute("hidden",!h),m&&m.toggleAttribute("hidden",!d),_&&_.toggleAttribute("hidden",!z),x&&x.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"),n=this.getAttribute("name");r&&typeof r.registerField=="function"&&n&&(this._formUnregister=r.registerField(n,{name:n,getValue:()=>this.value,setValue:s=>{this.value=String(s??"")},validate:async()=>this._input?{valid:this._input.checkValidity(),message:this._input.validationMessage||void 0}:{valid:!0},setError:s=>{s?(this.setAttribute("validation","error"),this.setAttribute("data-error",s)):(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",E);exports.UIPasswordField=E;
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;