@xleddyl/443-components-vue 0.5.0 → 0.6.2

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 (315) hide show
  1. package/README.md +25 -6
  2. package/dist/chart/BarChart.vue +11 -4
  3. package/dist/chart/BarChart.vue.d.ts +2 -0
  4. package/dist/chart/ChartLegend.vue +43 -4
  5. package/dist/chart/ChartLegend.vue.d.ts +4 -2
  6. package/dist/chart/ChartPanel.vue +10 -10
  7. package/dist/chart/ChartPanel.vue.d.ts +11 -8
  8. package/dist/chart/ChartSummary.vue +8 -3
  9. package/dist/chart/ChartSummary.vue.d.ts +3 -1
  10. package/dist/chart/DoughnutChart.vue +11 -4
  11. package/dist/chart/LineChart.vue +8 -2
  12. package/dist/chart/LineChart.vue.d.ts +2 -0
  13. package/dist/chart/chart.css +19 -0
  14. package/dist/chart/patterns.d.ts +6 -0
  15. package/dist/chart/patterns.mjs +79 -0
  16. package/dist/chart/types.d.ts +5 -0
  17. package/dist/chart/useChartColors.mjs +1 -1
  18. package/dist/components/core/Button.vue +11 -1
  19. package/dist/components/core/Button.vue.d.ts +1 -1
  20. package/dist/components/core/FieldMessage.vue +6 -0
  21. package/dist/components/core/FieldMessage.vue.d.ts +1 -1
  22. package/dist/components/core/Form.vue +18 -1
  23. package/dist/components/core/FormAlerts.vue +41 -3
  24. package/dist/components/core/FormField.vue +43 -24
  25. package/dist/components/core/Input.vue.d.ts +6 -6
  26. package/dist/components/core/Root.vue +6 -1
  27. package/dist/components/core/Root.vue.d.ts +2 -2
  28. package/dist/components/core/Spinner.vue +6 -11
  29. package/dist/components/core/Spinner.vue.d.ts +2 -2
  30. package/dist/components/core/Textarea.vue.d.ts +2 -2
  31. package/dist/components/core/VisuallyHidden.vue.d.ts +2 -2
  32. package/dist/components/data/Avatar.vue +8 -5
  33. package/dist/components/data/AvatarGroup.vue +6 -3
  34. package/dist/components/data/Badge.vue.d.ts +1 -1
  35. package/dist/components/data/FilterPills.vue +18 -2
  36. package/dist/components/data/Pagination.vue +24 -18
  37. package/dist/components/data/Pagination.vue.d.ts +2 -2
  38. package/dist/components/data/SelectionBar.vue +32 -3
  39. package/dist/components/data/Stat.vue +7 -1
  40. package/dist/components/data/Stat.vue.d.ts +2 -2
  41. package/dist/components/data/Table.vue +62 -14
  42. package/dist/components/data/Tag.vue +24 -4
  43. package/dist/components/data/Tag.vue.d.ts +3 -3
  44. package/dist/components/data/Timeline.vue +12 -1
  45. package/dist/components/data/Tree.vue +137 -36
  46. package/dist/components/data/Tree.vue.d.ts +13 -14
  47. package/dist/components/data/types.d.ts +2 -1
  48. package/dist/components/feedback/Alert.vue +18 -9
  49. package/dist/components/feedback/Alert.vue.d.ts +2 -2
  50. package/dist/components/feedback/LoadingOverlay.vue +35 -3
  51. package/dist/components/feedback/Meter.vue +28 -3
  52. package/dist/components/feedback/Progress.vue +2 -7
  53. package/dist/components/feedback/Progress.vue.d.ts +1 -1
  54. package/dist/components/feedback/ProgressRing.vue +2 -6
  55. package/dist/components/feedback/ProgressRing.vue.d.ts +1 -1
  56. package/dist/components/forms/Calendar.vue +49 -26
  57. package/dist/components/forms/Calendar.vue.d.ts +9 -5
  58. package/dist/components/forms/CheckboxGroup.vue +14 -4
  59. package/dist/components/forms/CheckboxGroup.vue.d.ts +1 -0
  60. package/dist/components/forms/ColorInput.vue +68 -15
  61. package/dist/components/forms/ColorInput.vue.d.ts +16 -13
  62. package/dist/components/forms/Combobox.vue +18 -4
  63. package/dist/components/forms/DateInput.vue.d.ts +6 -6
  64. package/dist/components/forms/DatePicker.vue +23 -7
  65. package/dist/components/forms/DatePicker.vue.d.ts +4 -2
  66. package/dist/components/forms/FileInput.vue +31 -13
  67. package/dist/components/forms/FileInput.vue.d.ts +2 -2
  68. package/dist/components/forms/InputAddon.vue +18 -2
  69. package/dist/components/forms/InputGroup.vue +27 -0
  70. package/dist/components/forms/InputGroup.vue.d.ts +2 -0
  71. package/dist/components/forms/NumberInput.vue +6 -7
  72. package/dist/components/forms/NumberInput.vue.d.ts +6 -6
  73. package/dist/components/forms/PasswordInput.vue +12 -6
  74. package/dist/components/forms/PasswordInput.vue.d.ts +6 -7
  75. package/dist/components/forms/PinInput.vue +11 -1
  76. package/dist/components/forms/PinInput.vue.d.ts +8 -6
  77. package/dist/components/forms/RadioGroup.vue +15 -5
  78. package/dist/components/forms/RadioGroup.vue.d.ts +1 -0
  79. package/dist/components/forms/SegmentedControl.vue +15 -10
  80. package/dist/components/forms/SegmentedControl.vue.d.ts +1 -0
  81. package/dist/components/forms/Slider.vue +9 -0
  82. package/dist/components/forms/Slider.vue.d.ts +8 -6
  83. package/dist/components/forms/Switch.vue +7 -0
  84. package/dist/components/forms/Switch.vue.d.ts +2 -2
  85. package/dist/components/forms/TimeInput.vue.d.ts +6 -6
  86. package/dist/components/forms/types.d.ts +4 -0
  87. package/dist/components/layout/Accordion.vue.d.ts +2 -2
  88. package/dist/components/layout/AppShell.vue +40 -18
  89. package/dist/components/layout/AppShell.vue.d.ts +11 -9
  90. package/dist/components/layout/Card.vue +50 -16
  91. package/dist/components/layout/Card.vue.d.ts +13 -11
  92. package/dist/components/layout/CopyButton.vue +13 -5
  93. package/dist/components/layout/CopyButton.vue.d.ts +3 -3
  94. package/dist/components/layout/NavLink.vue +10 -1
  95. package/dist/components/layout/NavLink.vue.d.ts +2 -2
  96. package/dist/components/layout/PageHeader.vue +2 -2
  97. package/dist/components/layout/Separator.vue +6 -3
  98. package/dist/components/layout/Sidebar.vue +14 -7
  99. package/dist/components/layout/Sidebar.vue.d.ts +0 -2
  100. package/dist/components/layout/SidebarNav.vue +16 -44
  101. package/dist/components/layout/Stack.vue.d.ts +2 -2
  102. package/dist/components/layout/Tabs.vue +10 -18
  103. package/dist/components/layout/Tabs.vue.d.ts +2 -2
  104. package/dist/components/layout/Toolbar.vue +10 -4
  105. package/dist/components/layout/Toolbar.vue.d.ts +1 -0
  106. package/dist/components/layout/types.d.ts +1 -0
  107. package/dist/components/overlays/CommandPalette.vue +8 -4
  108. package/dist/components/overlays/CommandPalette.vue.d.ts +3 -8
  109. package/dist/components/overlays/ConfirmDialog.vue +7 -5
  110. package/dist/components/overlays/ConfirmDialog.vue.d.ts +12 -8
  111. package/dist/components/overlays/ConfirmHost.vue +22 -19
  112. package/dist/components/overlays/ConfirmHost.vue.d.ts +8 -6
  113. package/dist/components/overlays/ContextMenu.vue +9 -11
  114. package/dist/components/overlays/ContextMenu.vue.d.ts +2 -2
  115. package/dist/components/overlays/Drawer.vue +2 -0
  116. package/dist/components/overlays/Drawer.vue.d.ts +4 -2
  117. package/dist/components/overlays/DropdownMenu.vue +13 -21
  118. package/dist/components/overlays/DropdownMenu.vue.d.ts +2 -2
  119. package/dist/components/overlays/HoverCard.vue +8 -2
  120. package/dist/components/overlays/HoverCard.vue.d.ts +2 -2
  121. package/dist/components/overlays/Modal.vue +2 -0
  122. package/dist/components/overlays/Modal.vue.d.ts +4 -2
  123. package/dist/components/overlays/Popover.vue +19 -4
  124. package/dist/components/overlays/Popover.vue.d.ts +2 -2
  125. package/dist/components/overlays/Toaster.vue +39 -7
  126. package/dist/components/overlays/Tooltip.vue +39 -14
  127. package/dist/components/overlays/types.d.ts +6 -0
  128. package/dist/components/templates/AccountMenu.vue.d.ts +2 -2
  129. package/dist/components/templates/AppearanceSettings.vue +83 -77
  130. package/dist/components/templates/AppearanceSettings.vue.d.ts +2 -2
  131. package/dist/components/templates/AuthLayout.vue +2 -2
  132. package/dist/components/templates/Brand.vue.d.ts +2 -2
  133. package/dist/components/templates/DashboardLayout.vue +3 -7
  134. package/dist/components/templates/DashboardLayout.vue.d.ts +8 -18
  135. package/dist/components/templates/DetailPage.vue +3 -1
  136. package/dist/components/templates/DetailPage.vue.d.ts +2 -2
  137. package/dist/components/templates/ErrorPage.vue +11 -5
  138. package/dist/components/templates/ErrorPage.vue.d.ts +10 -6
  139. package/dist/components/templates/FormPage.vue +16 -3
  140. package/dist/components/templates/ListPage.vue +19 -6
  141. package/dist/components/templates/ListPage.vue.d.ts +1 -0
  142. package/dist/components/templates/NotFoundPage.vue +2 -0
  143. package/dist/components/templates/NotFoundPage.vue.d.ts +4 -0
  144. package/dist/components/templates/SaveBar.vue +18 -3
  145. package/dist/components/templates/SaveBar.vue.d.ts +5 -5
  146. package/dist/components/templates/SettingsGroup.vue +1 -1
  147. package/dist/components/templates/SettingsGroup.vue.d.ts +3 -1
  148. package/dist/components/templates/SettingsModal.vue +73 -46
  149. package/dist/components/templates/SettingsModal.vue.d.ts +9 -11
  150. package/dist/components/templates/SettingsPage.vue.d.ts +2 -2
  151. package/dist/components/templates/SettingsSection.vue.d.ts +4 -2
  152. package/dist/components/templates/types.d.ts +4 -0
  153. package/dist/composables/useAlert.mjs +5 -10
  154. package/dist/composables/useConfirm.mjs +5 -5
  155. package/dist/composables/useField.d.ts +4 -0
  156. package/dist/composables/useField.mjs +16 -5
  157. package/dist/composables/useFileDrop.mjs +2 -1
  158. package/dist/composables/useOverlay.mjs +2 -1
  159. package/dist/composables/usePreset.mjs +4 -10
  160. package/dist/composables/usePrompt.mjs +6 -13
  161. package/dist/composables/useScrollLock.mjs +4 -3
  162. package/dist/composables/useTheme.mjs +3 -11
  163. package/dist/composables/useToast.mjs +2 -1
  164. package/dist/editor/RichTextEditor.vue +31 -6
  165. package/dist/editor/RichTextEditor.vue.d.ts +2 -2
  166. package/dist/editor/rich-text-editor.css +9 -4
  167. package/dist/grid/DataGrid.vue +72 -12
  168. package/dist/grid/GridToolbar.vue +1 -1
  169. package/dist/grid/GridToolbar.vue.d.ts +2 -2
  170. package/dist/grid/cells/BadgeCell.vue +3 -1
  171. package/dist/grid/cells/BadgeCell.vue.d.ts +17 -3
  172. package/dist/grid/cells/DateCell.vue +3 -1
  173. package/dist/grid/cells/DateCell.vue.d.ts +17 -3
  174. package/dist/grid/cells/EmptyCell.vue +15 -0
  175. package/dist/grid/cells/EmptyCell.vue.d.ts +392 -0
  176. package/dist/grid/cells/LinkCell.vue +9 -2
  177. package/dist/grid/cells/LinkCell.vue.d.ts +17 -3
  178. package/dist/grid/data-grid.css +5 -5
  179. package/dist/grid/types.d.ts +2 -0
  180. package/dist/internal/core/ButtonContent.vue +3 -0
  181. package/dist/internal/core/LiveRegion.vue +26 -0
  182. package/dist/internal/core/LiveRegion.vue.d.ts +393 -0
  183. package/dist/internal/core/copy.d.ts +6 -0
  184. package/dist/internal/core/copy.mjs +14 -0
  185. package/dist/internal/core/focus.d.ts +6 -0
  186. package/dist/internal/core/focus.mjs +46 -0
  187. package/dist/internal/core/intl.d.ts +4 -2
  188. package/dist/internal/core/intl.mjs +23 -22
  189. package/dist/internal/core/live.d.ts +6 -0
  190. package/dist/internal/core/live.mjs +22 -0
  191. package/dist/internal/core/preset.d.ts +0 -1
  192. package/dist/internal/core/preset.mjs +4 -14
  193. package/dist/internal/core/resize.d.ts +1 -0
  194. package/dist/internal/core/resize.mjs +11 -0
  195. package/dist/internal/core/roving.d.ts +7 -0
  196. package/dist/internal/core/roving.mjs +19 -1
  197. package/dist/internal/core/scroll-edges.d.ts +5 -0
  198. package/dist/internal/core/scroll-edges.mjs +63 -0
  199. package/dist/internal/core/storage.d.ts +2 -0
  200. package/dist/internal/core/storage.mjs +8 -0
  201. package/dist/internal/core/theme.d.ts +0 -1
  202. package/dist/internal/core/theme.mjs +4 -13
  203. package/dist/internal/core/tone.d.ts +1 -0
  204. package/dist/internal/core/tone.mjs +4 -0
  205. package/dist/internal/core/transition.d.ts +1 -0
  206. package/dist/internal/core/transition.mjs +20 -0
  207. package/dist/internal/data/rows.mjs +6 -5
  208. package/dist/internal/data/tree.d.ts +2 -3
  209. package/dist/internal/feedback/LoadingHost.vue +16 -6
  210. package/dist/internal/feedback/loading.mjs +2 -1
  211. package/dist/internal/feedback/progress.d.ts +12 -0
  212. package/dist/internal/feedback/progress.mjs +13 -0
  213. package/dist/internal/floating/layer.d.ts +1 -1
  214. package/dist/internal/floating/layer.mjs +17 -10
  215. package/dist/internal/forms/keys.d.ts +4 -0
  216. package/dist/internal/forms/keys.mjs +1 -0
  217. package/dist/internal/forms/name.d.ts +2 -0
  218. package/dist/internal/forms/name.mjs +12 -0
  219. package/dist/internal/forms/standard-schema.d.ts +0 -2
  220. package/dist/internal/forms/standard-schema.mjs +0 -18
  221. package/dist/internal/layout/NavGroup.vue +104 -0
  222. package/dist/internal/layout/NavGroup.vue.d.ts +412 -0
  223. package/dist/internal/overlays/DialogFrame.vue +53 -6
  224. package/dist/internal/overlays/DialogFrame.vue.d.ts +5 -2
  225. package/dist/internal/overlays/MenuList.vue +4 -11
  226. package/dist/internal/overlays/MenuList.vue.d.ts +6 -6
  227. package/dist/internal/overlays/OverlayView.vue +2 -0
  228. package/dist/internal/overlays/OverlayView.vue.d.ts +8 -6
  229. package/dist/internal/overlays/confirm.d.ts +6 -1
  230. package/dist/internal/overlays/confirm.mjs +5 -2
  231. package/dist/internal/overlays/dialog.d.ts +1 -0
  232. package/dist/internal/overlays/dialog.mjs +9 -9
  233. package/dist/internal/overlays/hover.d.ts +1 -0
  234. package/dist/internal/overlays/hover.mjs +20 -3
  235. package/dist/internal/overlays/menu.d.ts +9 -0
  236. package/dist/internal/overlays/menu.mjs +15 -0
  237. package/dist/internal/overlays/stack.d.ts +1 -0
  238. package/dist/locale/en.mjs +70 -18
  239. package/dist/locale/index.d.ts +1 -1
  240. package/dist/locale/index.mjs +5 -11
  241. package/dist/locale/it.mjs +70 -18
  242. package/dist/locale/types.d.ts +54 -2
  243. package/dist/nuxt/runtime/RouteAnnouncer.vue +21 -0
  244. package/dist/nuxt/runtime/RouteAnnouncer.vue.d.ts +3 -0
  245. package/dist/nuxt/runtime/layout-head.d.ts +2 -0
  246. package/dist/nuxt/runtime/layout-head.mjs +13 -0
  247. package/dist/nuxt/runtime/layouts/auth.vue +4 -0
  248. package/dist/nuxt/runtime/layouts/auth.vue.d.ts +2 -2
  249. package/dist/nuxt/runtime/layouts/dashboard.vue +4 -0
  250. package/dist/nuxt/runtime/layouts/dashboard.vue.d.ts +2 -2
  251. package/dist/nuxt/runtime/locale.mjs +9 -1
  252. package/dist/nuxt/runtime/theme.mjs +17 -12
  253. package/dist/styles/base.css +0 -13
  254. package/dist/styles/core/button.css +8 -8
  255. package/dist/styles/core/field-message.css +2 -2
  256. package/dist/styles/core/form-field.css +11 -2
  257. package/dist/styles/core/input.css +4 -7
  258. package/dist/styles/core/kbd.css +0 -1
  259. package/dist/styles/data/badge.css +8 -4
  260. package/dist/styles/data/description-list.css +2 -2
  261. package/dist/styles/data/filter-pills.css +5 -8
  262. package/dist/styles/data/pagination.css +2 -2
  263. package/dist/styles/data/stat.css +3 -3
  264. package/dist/styles/data/table.css +2 -2
  265. package/dist/styles/data/tag.css +1 -2
  266. package/dist/styles/data/timeline.css +1 -1
  267. package/dist/styles/data/tree.css +31 -10
  268. package/dist/styles/feedback/alert.css +0 -3
  269. package/dist/styles/feedback/loading-host.css +4 -0
  270. package/dist/styles/feedback/loading-overlay.css +4 -0
  271. package/dist/styles/forced-colors.css +215 -0
  272. package/dist/styles/forms/calendar.css +2 -2
  273. package/dist/styles/forms/choice.css +2 -2
  274. package/dist/styles/forms/color-input.css +1 -1
  275. package/dist/styles/forms/combobox.css +2 -24
  276. package/dist/styles/forms/date-input.css +2 -2
  277. package/dist/styles/forms/date-picker.css +3 -7
  278. package/dist/styles/forms/file-input.css +4 -3
  279. package/dist/styles/forms/input-group.css +6 -0
  280. package/dist/styles/forms/number-input.css +2 -2
  281. package/dist/styles/forms/password-input.css +5 -2
  282. package/dist/styles/forms/pin-input.css +4 -2
  283. package/dist/styles/forms/segmented.css +2 -2
  284. package/dist/styles/forms/select.css +6 -6
  285. package/dist/styles/forms/slider.css +5 -4
  286. package/dist/styles/forms/switch.css +5 -1
  287. package/dist/styles/index.css +1 -0
  288. package/dist/styles/layout/app-shell.css +15 -3
  289. package/dist/styles/layout/copy-button.css +1 -1
  290. package/dist/styles/layout/nav-link.css +1 -33
  291. package/dist/styles/layout/separator.css +1 -1
  292. package/dist/styles/layout/sidebar-nav.css +15 -4
  293. package/dist/styles/layout/sidebar.css +20 -6
  294. package/dist/styles/layout/tabs.css +9 -4
  295. package/dist/styles/layout/theme-switch.css +0 -6
  296. package/dist/styles/overlays/command.css +9 -15
  297. package/dist/styles/overlays/confirm.css +1 -1
  298. package/dist/styles/overlays/drawer.css +0 -1
  299. package/dist/styles/overlays/menu.css +2 -17
  300. package/dist/styles/overlays/modal.css +29 -6
  301. package/dist/styles/overlays/toast.css +1 -2
  302. package/dist/styles/presets.css +4 -4
  303. package/dist/styles/shared.css +96 -3
  304. package/dist/styles/templates/account-menu.css +3 -3
  305. package/dist/styles/templates/auth-layout.css +1 -1
  306. package/dist/styles/templates/brand.css +3 -3
  307. package/dist/styles/templates/empty-page.css +1 -1
  308. package/dist/styles/templates/form-page.css +10 -0
  309. package/dist/styles/templates/save-bar.css +10 -0
  310. package/dist/styles/templates/settings-modal.css +42 -44
  311. package/dist/styles/templates/settings-page.css +3 -3
  312. package/dist/styles/tokens.css +12 -2
  313. package/package.json +1 -1
  314. package/dist/internal/overlays/focus.d.ts +0 -1
  315. package/dist/internal/overlays/focus.mjs +0 -24
@@ -17,12 +17,15 @@ declare const __VLS_export: import("vue").DefineComponent<{
17
17
  value?: any;
18
18
  form?: string | undefined;
19
19
  pattern?: string | undefined;
20
+ checked?: (boolean | "true" | "false") | any[] | Set<any> | undefined;
21
+ indeterminate?: boolean | undefined;
20
22
  title?: string | undefined;
21
23
  style?: unknown;
22
24
  list?: string | undefined;
23
25
  results?: (string | number) | undefined;
24
26
  placeholder?: string | undefined;
25
27
  name?: string | undefined;
28
+ dir?: string | undefined;
26
29
  class?: unknown;
27
30
  role?: string | undefined;
28
31
  'aria-label'?: string | undefined;
@@ -180,7 +183,6 @@ declare const __VLS_export: import("vue").DefineComponent<{
180
183
  accesskey?: string | undefined;
181
184
  contenteditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
182
185
  contextmenu?: string | undefined;
183
- dir?: string | undefined;
184
186
  draggable?: (boolean | "true" | "false") | undefined;
185
187
  enterkeyhint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined;
186
188
  enterKeyHint?: import("vue").HTMLAttributes["enterkeyhint"];
@@ -233,9 +235,7 @@ declare const __VLS_export: import("vue").DefineComponent<{
233
235
  accept?: string | undefined;
234
236
  alt?: string | undefined;
235
237
  capture?: boolean | "user" | "environment" | undefined;
236
- checked?: (boolean | "true" | "false") | any[] | Set<any> | undefined;
237
238
  crossorigin?: string | undefined;
238
- indeterminate?: boolean | undefined;
239
239
  maxlength?: (string | number) | undefined;
240
240
  minlength?: (string | number) | undefined;
241
241
  multiple?: (boolean | "true" | "false") | undefined;
@@ -262,12 +262,15 @@ declare const __VLS_export: import("vue").DefineComponent<{
262
262
  value?: any;
263
263
  form?: string | undefined;
264
264
  pattern?: string | undefined;
265
+ checked?: (boolean | "true" | "false") | any[] | Set<any> | undefined;
266
+ indeterminate?: boolean | undefined;
265
267
  title?: string | undefined;
266
268
  style?: unknown;
267
269
  list?: string | undefined;
268
270
  results?: (string | number) | undefined;
269
271
  placeholder?: string | undefined;
270
272
  name?: string | undefined;
273
+ dir?: string | undefined;
271
274
  class?: unknown;
272
275
  role?: string | undefined;
273
276
  'aria-label'?: string | undefined;
@@ -425,7 +428,6 @@ declare const __VLS_export: import("vue").DefineComponent<{
425
428
  accesskey?: string | undefined;
426
429
  contenteditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
427
430
  contextmenu?: string | undefined;
428
- dir?: string | undefined;
429
431
  draggable?: (boolean | "true" | "false") | undefined;
430
432
  enterkeyhint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined;
431
433
  enterKeyHint?: import("vue").HTMLAttributes["enterkeyhint"];
@@ -478,9 +480,7 @@ declare const __VLS_export: import("vue").DefineComponent<{
478
480
  accept?: string | undefined;
479
481
  alt?: string | undefined;
480
482
  capture?: boolean | "user" | "environment" | undefined;
481
- checked?: (boolean | "true" | "false") | any[] | Set<any> | undefined;
482
483
  crossorigin?: string | undefined;
483
- indeterminate?: boolean | undefined;
484
484
  maxlength?: (string | number) | undefined;
485
485
  minlength?: (string | number) | undefined;
486
486
  multiple?: (boolean | "true" | "false") | undefined;
@@ -11,11 +11,19 @@
11
11
  <button
12
12
  ref="triggerRef"
13
13
  :id="control.id.value"
14
+ :aria-labelledby="
15
+ control.labelledBy.value && !$attrs['aria-label'] ? `${control.labelledBy.value} ${valueId}` : void 0
16
+ "
14
17
  v-bind="$attrs"
15
18
  :disabled="control.disabled.value || void 0"
16
- :aria-required="control.required.value ? 'true' : void 0"
17
19
  :aria-invalid="control.invalid.value ? 'true' : void 0"
18
- :aria-describedby="joinIds($attrs['aria-describedby'], control.describedBy.value)"
20
+ :aria-describedby="
21
+ joinIds(
22
+ $attrs['aria-describedby'],
23
+ control.describedBy.value,
24
+ readonly ? readonlyId : void 0
25
+ )
26
+ "
19
27
  :popovertarget="interactive ? panelId : void 0"
20
28
  type="button"
21
29
  class="k-field k-date-picker-trigger"
@@ -32,15 +40,17 @@
32
40
  :aria-controls="panelId"
33
41
  >
34
42
  <Icon name="calendar" class="k-date-picker-icon" />
35
- <span class="k-date-picker-value">{{ displayValue || placeholderText }}</span>
43
+ <span :id="valueId" class="k-date-picker-value">{{
44
+ displayValue || placeholderText
45
+ }}</span>
36
46
  <Icon name="chevron-up-down" class="k-date-picker-chevron" />
37
47
  </button>
48
+ <span v-if="readonly" :id="readonlyId" hidden>{{ t("common.readonly") }}</span>
38
49
  <button
39
50
  v-if="showClear"
40
51
  type="button"
41
52
  class="k-date-picker-clear"
42
53
  :aria-label="clearText"
43
- :title="clearText"
44
54
  @click="clear"
45
55
  >
46
56
  <Icon name="x-mark" />
@@ -53,7 +63,7 @@
53
63
  class="k-floating k-form-popover k-date-picker-panel"
54
64
  :data-side="layer.side.value"
55
65
  :aria-label="dialogText"
56
- @keydown.esc.stop
66
+ @keydown.esc.stop="close"
57
67
  >
58
68
  <Calendar
59
69
  ref="calendarRef"
@@ -64,6 +74,7 @@
64
74
  :is-date-disabled="isDateDisabled"
65
75
  :locale="resolvedLocale"
66
76
  :week-starts-on="weekStartsOn"
77
+ :level="level"
67
78
  @update:model-value="onCalendarChange"
68
79
  >
69
80
  <template v-if="$slots.footer" #footer><slot name="footer" :close="close" /></template>
@@ -104,6 +115,7 @@ const props = defineProps({
104
115
  clearLabel: { type: String, required: false },
105
116
  dialogLabel: { type: String, required: false },
106
117
  closeOnSelect: { type: Boolean, required: false, default: true },
118
+ level: { type: Number, required: false },
107
119
  invalid: { type: Boolean, required: false, default: void 0 },
108
120
  disabled: { type: Boolean, required: false },
109
121
  readonly: { type: Boolean, required: false },
@@ -119,13 +131,16 @@ const dialogText = computed(() => props.dialogLabel ?? t("datePicker.dialog"));
119
131
  const model = defineModel({ type: null });
120
132
  const baseId = useId();
121
133
  const panelId = `${baseId}-dialog`;
134
+ const valueId = `${baseId}-value`;
135
+ const readonlyId = `${baseId}-readonly`;
122
136
  const triggerRef = useTemplateRef("triggerRef");
123
137
  const panelRef = useTemplateRef("panelRef");
124
138
  const calendarRef = useTemplateRef("calendarRef");
125
139
  const control = useFieldControl({
126
140
  invalid: () => props.invalid,
127
141
  disabled: () => props.disabled,
128
- required: () => props.required
142
+ required: () => props.required,
143
+ requiredHint: true
129
144
  });
130
145
  const layer = useFloatingLayer({
131
146
  floating: panelRef,
@@ -146,7 +161,8 @@ const displayValue = computed(() => {
146
161
  if (!props.range) return show(singleValue.value);
147
162
  const { start, end } = rangeValue.value;
148
163
  if (!start) return "";
149
- return t("datePicker.range", { start: show(start), end: end ? show(end) : "..." });
164
+ if (!end) return t("datePicker.rangePending", { start: show(start) });
165
+ return t("datePicker.range", { start: show(start), end: show(end) });
150
166
  });
151
167
  const showClear = computed(
152
168
  () => props.clearable && interactive.value && Boolean(displayValue.value)
@@ -22,6 +22,7 @@ declare const __VLS_base: import("vue").DefineComponent<{
22
22
  clearLabel?: string;
23
23
  dialogLabel?: string;
24
24
  closeOnSelect?: boolean;
25
+ level?: 1 | 2 | 3 | 4 | 5 | 6;
25
26
  invalid?: boolean;
26
27
  disabled?: (boolean | "true" | "false") | undefined;
27
28
  readonly?: boolean;
@@ -35,6 +36,7 @@ declare const __VLS_base: import("vue").DefineComponent<{
35
36
  form?: string | undefined | undefined;
36
37
  title?: string | undefined | undefined;
37
38
  results?: (string | number) | undefined;
39
+ dir?: string | undefined | undefined;
38
40
  role?: string | undefined | undefined;
39
41
  'aria-label'?: string | undefined | undefined;
40
42
  'aria-hidden'?: (boolean | "true" | "false") | undefined;
@@ -190,7 +192,6 @@ declare const __VLS_base: import("vue").DefineComponent<{
190
192
  accesskey?: string | undefined | undefined;
191
193
  contenteditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
192
194
  contextmenu?: string | undefined | undefined;
193
- dir?: string | undefined | undefined;
194
195
  draggable?: (boolean | "true" | "false") | undefined;
195
196
  enterkeyhint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined | undefined;
196
197
  enterKeyHint?: "search" | "done" | "previous" | "next" | "enter" | "go" | "send" | undefined;
@@ -250,6 +251,7 @@ declare const __VLS_base: import("vue").DefineComponent<{
250
251
  clearLabel?: string;
251
252
  dialogLabel?: string;
252
253
  closeOnSelect?: boolean;
254
+ level?: 1 | 2 | 3 | 4 | 5 | 6;
253
255
  invalid?: boolean;
254
256
  disabled?: (boolean | "true" | "false") | undefined;
255
257
  readonly?: boolean;
@@ -263,6 +265,7 @@ declare const __VLS_base: import("vue").DefineComponent<{
263
265
  form?: string | undefined | undefined;
264
266
  title?: string | undefined | undefined;
265
267
  results?: (string | number) | undefined;
268
+ dir?: string | undefined | undefined;
266
269
  role?: string | undefined | undefined;
267
270
  'aria-label'?: string | undefined | undefined;
268
271
  'aria-hidden'?: (boolean | "true" | "false") | undefined;
@@ -418,7 +421,6 @@ declare const __VLS_base: import("vue").DefineComponent<{
418
421
  accesskey?: string | undefined | undefined;
419
422
  contenteditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
420
423
  contextmenu?: string | undefined | undefined;
421
- dir?: string | undefined | undefined;
422
424
  draggable?: (boolean | "true" | "false") | undefined;
423
425
  enterkeyhint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined | undefined;
424
426
  enterKeyHint?: "search" | "done" | "previous" | "next" | "enter" | "go" | "send" | undefined;
@@ -19,9 +19,11 @@
19
19
  ref="buttonRef"
20
20
  :id="control.id.value"
21
21
  data-k-shake
22
+ :aria-labelledby="
23
+ $attrs['aria-label'] ? void 0 : joinIds(control.labelledBy.value, titleId)
24
+ "
22
25
  v-bind="$attrs"
23
26
  :disabled="control.disabled.value || void 0"
24
- :aria-required="control.required.value ? 'true' : void 0"
25
27
  :aria-invalid="control.invalid.value ? 'true' : void 0"
26
28
  :aria-disabled="readonly || loading ? 'true' : void 0"
27
29
  :aria-busy="loading ? 'true' : void 0"
@@ -41,7 +43,7 @@
41
43
  <Icon v-else :name="over ? 'arrow-up-tray' : icon" />
42
44
  </span>
43
45
  <span class="k-file-input-dropzone-text">
44
- <span class="k-file-input-dropzone-title">
46
+ <span :id="titleId" class="k-file-input-dropzone-title">
45
47
  <slot name="title" :over="over" :loading="loading">{{ currentTitle }}</slot>
46
48
  </span>
47
49
  <span v-if="hasHint" :id="hintId" class="k-file-input-dropzone-hint">
@@ -108,13 +110,13 @@
108
110
  variant="ghost"
109
111
  tone="neutral"
110
112
  icon="x-mark"
111
- :aria-label="`${removeText} ${walksFolders ? filePath(file) : file.name}`"
112
- :title="removeText"
113
+ :aria-label="removeText(walksFolders ? filePath(file) : file.name)"
114
+ :title="removeText(walksFolders ? filePath(file) : file.name)"
113
115
  @click="removeFile(file)"
114
116
  />
115
117
  </li>
116
118
  </ul>
117
- <span class="k-visually-hidden" role="status" aria-live="polite">{{ announcement }}</span>
119
+ <LiveRegion :message="live.message.value" />
118
120
  </div>
119
121
  </template>
120
122
 
@@ -131,6 +133,7 @@ import {
131
133
  } from "vue";
132
134
  import { useFieldControl } from "../../composables/useField";
133
135
  import { useLocale } from "../../composables/useLocale";
136
+ import { translateOr } from "../../locale";
134
137
  import { joinIds } from "../../internal/forms/control";
135
138
  import { readDroppedFiles, useFileDrop } from "../../composables/useFileDrop";
136
139
  import {
@@ -143,6 +146,8 @@ import {
143
146
  parseAccept,
144
147
  setFilePath
145
148
  } from "../../internal/forms/files";
149
+ import LiveRegion from "../../internal/core/LiveRegion.vue";
150
+ import { useLiveMessage } from "../../internal/core/live";
146
151
  import Button from "../core/Button.vue";
147
152
  import Icon from "../core/Icon.vue";
148
153
  import Spinner from "../core/Spinner.vue";
@@ -192,7 +197,9 @@ const directoryActionText = computed(
192
197
  );
193
198
  const loadingLabel = computed(() => props.loadingText ?? t("fileInput.loading"));
194
199
  const dropLabel = computed(() => props.dropText ?? t("fileInput.drop"));
195
- const removeText = computed(() => props.removeLabel ?? t("common.remove"));
200
+ function removeText(label) {
201
+ return translateOr(appLocale.value, props.removeLabel, "common.removeItem", { label });
202
+ }
196
203
  const listText = computed(() => props.listLabel ?? t("fileInput.list"));
197
204
  function announceCount(count) {
198
205
  return props.announce ? props.announce(count) : t("fileInput.selected", { count });
@@ -202,18 +209,21 @@ function announceAdded(count) {
202
209
  }
203
210
  const model = defineModel({ type: null });
204
211
  const emit = defineEmits(["invalid", "reject", "add", "remove"]);
205
- const hintId = `${useId()}-hint`;
212
+ const baseId = useId();
213
+ const hintId = `${baseId}-hint`;
214
+ const titleId = `${baseId}-title`;
206
215
  const rootRef = useTemplateRef("rootRef");
207
216
  const inputRef = useTemplateRef("inputRef");
208
217
  const directoryInputRef = useTemplateRef("directoryInputRef");
209
218
  const buttonRef = useTemplateRef("buttonRef");
210
219
  const previews = reactive({});
211
- const announcement = ref("");
220
+ const live = useLiveMessage();
212
221
  const mounted = ref(false);
213
222
  const control = useFieldControl({
214
223
  invalid: () => props.invalid,
215
224
  disabled: () => props.disabled,
216
- required: () => props.required
225
+ required: () => props.required,
226
+ requiredHint: true
217
227
  });
218
228
  const files = computed(() => {
219
229
  const value = model.value;
@@ -309,13 +319,21 @@ function addEntries(incomingEntries, origin) {
309
319
  if (!multiple && incoming.length > 1)
310
320
  for (const file of incoming.slice(1)) reject({ reason: "count", file, limit: 1 });
311
321
  const detail = { ...origin, entries: toEntries(accepted) };
322
+ const rejectedText = rejected.length ? t("fileInput.rejected", { count: rejected.length }) : void 0;
312
323
  if (rejected.length) emit("reject", rejected, detail);
313
- if (!accepted.length && !origin.directories.length) return;
324
+ if (rejectedText) control.setControlError(rejectedText);
325
+ else if (accepted.length) control.setControlError(void 0);
326
+ const announceRejected = control.field ? void 0 : rejectedText;
327
+ if (!accepted.length && !origin.directories.length) {
328
+ if (announceRejected) live.announce(announceRejected);
329
+ return;
330
+ }
314
331
  if (props.list && accepted.length)
315
332
  model.value = multiple ? [...files.value, ...accepted] : accepted[0];
316
333
  emit("add", accepted, detail);
317
- if (!accepted.length) return;
318
- announcement.value = props.list ? announceCount(multiple ? files.value.length : 1) : announceAdded(accepted.length);
334
+ const addedText = accepted.length ? props.list ? announceCount(multiple ? files.value.length : 1) : announceAdded(accepted.length) : void 0;
335
+ const text = [addedText, announceRejected].filter(Boolean).join(". ");
336
+ if (text) live.announce(text);
319
337
  }
320
338
  function onNativeChange(event) {
321
339
  const target = event.target;
@@ -339,7 +357,7 @@ function removeFile(file) {
339
357
  const key = fileKey(file);
340
358
  model.value = isMultiple.value ? files.value.filter((entry) => fileKey(entry) !== key) : null;
341
359
  emit("remove", file);
342
- announcement.value = announceCount(isMultiple.value ? files.value.length : 0);
360
+ live.announce(announceCount(isMultiple.value ? files.value.length : 0));
343
361
  buttonRef.value?.focus();
344
362
  }
345
363
  function syncPreviews(current) {
@@ -54,6 +54,7 @@ declare const __VLS_base: import("vue").DefineComponent<{
54
54
  form?: string | undefined | undefined;
55
55
  results?: (string | number) | undefined;
56
56
  placeholder?: string | undefined | undefined;
57
+ dir?: string | undefined | undefined;
57
58
  role?: string | undefined | undefined;
58
59
  'aria-label'?: string | undefined | undefined;
59
60
  'aria-hidden'?: (boolean | "true" | "false") | undefined;
@@ -208,7 +209,6 @@ declare const __VLS_base: import("vue").DefineComponent<{
208
209
  accesskey?: string | undefined | undefined;
209
210
  contenteditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
210
211
  contextmenu?: string | undefined | undefined;
211
- dir?: string | undefined | undefined;
212
212
  draggable?: (boolean | "true" | "false") | undefined;
213
213
  enterkeyhint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined | undefined;
214
214
  enterKeyHint?: "search" | "done" | "previous" | "next" | "enter" | "go" | "send" | undefined;
@@ -296,6 +296,7 @@ declare const __VLS_base: import("vue").DefineComponent<{
296
296
  form?: string | undefined | undefined;
297
297
  results?: (string | number) | undefined;
298
298
  placeholder?: string | undefined | undefined;
299
+ dir?: string | undefined | undefined;
299
300
  role?: string | undefined | undefined;
300
301
  'aria-label'?: string | undefined | undefined;
301
302
  'aria-hidden'?: (boolean | "true" | "false") | undefined;
@@ -450,7 +451,6 @@ declare const __VLS_base: import("vue").DefineComponent<{
450
451
  accesskey?: string | undefined | undefined;
451
452
  contenteditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
452
453
  contextmenu?: string | undefined | undefined;
453
- dir?: string | undefined | undefined;
454
454
  draggable?: (boolean | "true" | "false") | undefined;
455
455
  enterkeyhint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined | undefined;
456
456
  enterKeyHint?: "search" | "done" | "previous" | "next" | "enter" | "go" | "send" | undefined;
@@ -1,15 +1,31 @@
1
1
  <template>
2
- <span class="k-input-addon" :class="`k-input-addon-${size}`">
2
+ <span :id="id" class="k-input-addon" :class="`k-input-addon-${size}`">
3
3
  <Icon v-if="icon" :name="icon" />
4
4
  <slot>{{ label }}</slot>
5
5
  </span>
6
6
  </template>
7
7
 
8
8
  <script setup>
9
+ import { computed, inject, onBeforeUnmount, useId, useSlots, watch } from "vue";
10
+ import { INPUT_GROUP_KEY } from "../../internal/forms/keys";
9
11
  import Icon from "../core/Icon.vue";
10
- defineProps({
12
+ const props = defineProps({
11
13
  label: { type: String, required: false },
12
14
  icon: { type: null, required: false },
13
15
  size: { type: String, required: false, default: "md" }
14
16
  });
17
+ const id = useId();
18
+ const slots = useSlots();
19
+ const group = inject(INPUT_GROUP_KEY, null);
20
+ const hasText = computed(() => Boolean(props.label || slots.default));
21
+ let unregister;
22
+ watch(
23
+ hasText,
24
+ (value) => {
25
+ unregister?.();
26
+ unregister = value ? group?.register(id) : void 0;
27
+ },
28
+ { immediate: true }
29
+ );
30
+ onBeforeUnmount(() => unregister?.());
15
31
  </script>
@@ -3,14 +3,41 @@
3
3
  class="k-input-group"
4
4
  :class="[`k-input-group-${size}`, { 'is-block': block }]"
5
5
  role="group"
6
+ :aria-label="label"
7
+ :aria-labelledby="
8
+ label ? void 0 : field?.hasLabel?.value ?? true ? field?.labelId : void 0
9
+ "
10
+ :aria-describedby="field ? void 0 : addonIds"
6
11
  >
7
12
  <slot />
8
13
  </div>
9
14
  </template>
10
15
 
11
16
  <script setup>
17
+ import { computed, provide, shallowReactive } from "vue";
18
+ import { useField } from "../../composables/useField";
19
+ import { FIELD_KEY } from "../../internal/keys";
20
+ import { joinIds } from "../../internal/forms/control";
21
+ import { INPUT_GROUP_KEY } from "../../internal/forms/keys";
12
22
  defineProps({
23
+ label: { type: String, required: false },
13
24
  size: { type: String, required: false, default: "md" },
14
25
  block: { type: Boolean, required: false, default: true }
15
26
  });
27
+ const field = useField();
28
+ const ids = shallowReactive(/* @__PURE__ */ new Set());
29
+ const addonIds = computed(() => joinIds(...ids));
30
+ provide(INPUT_GROUP_KEY, {
31
+ register(id) {
32
+ ids.add(id);
33
+ return () => ids.delete(id);
34
+ }
35
+ });
36
+ if (field) {
37
+ const context = {
38
+ ...field,
39
+ describedBy: computed(() => joinIds(field.describedBy.value, addonIds.value))
40
+ };
41
+ provide(FIELD_KEY, context);
42
+ }
16
43
  </script>
@@ -4,6 +4,7 @@ type __VLS_Slots = {} & {
4
4
  default?: (props: typeof __VLS_1) => any;
5
5
  };
6
6
  declare const __VLS_base: import("vue").DefineComponent<{
7
+ label?: string;
7
8
  size?: FieldSize;
8
9
  block?: boolean;
9
10
  innerHTML?: string | undefined | undefined;
@@ -199,6 +200,7 @@ declare const __VLS_base: import("vue").DefineComponent<{
199
200
  ref_for?: boolean | undefined | undefined;
200
201
  ref_key?: string | undefined | undefined;
201
202
  }, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{
203
+ label?: string;
202
204
  size?: FieldSize;
203
205
  block?: boolean;
204
206
  innerHTML?: string | undefined | undefined;
@@ -79,8 +79,10 @@
79
79
  import { computed, onBeforeUnmount, ref, useTemplateRef } from "vue";
80
80
  import { useFieldControl } from "../../composables/useField";
81
81
  import { useLocale } from "../../composables/useLocale";
82
+ import { numberFormat } from "../../internal/core/intl";
82
83
  import { joinIds } from "../../internal/forms/control";
83
84
  import Icon from "../core/Icon.vue";
85
+ import { isClient } from "../../internal/core/env";
84
86
  defineOptions({ inheritAttrs: false });
85
87
  const props = defineProps({
86
88
  min: { type: Number, required: false },
@@ -121,15 +123,12 @@ const control = useFieldControl({
121
123
  required: () => props.required
122
124
  });
123
125
  const isPercent = computed(() => props.formatOptions?.style === "percent");
124
- const formatter = computed(() => new Intl.NumberFormat(resolvedLocale.value, props.formatOptions));
126
+ const formatter = computed(() => numberFormat(resolvedLocale.value, props.formatOptions));
125
127
  const editFormatter = computed(
126
- () => new Intl.NumberFormat(resolvedLocale.value, {
127
- useGrouping: false,
128
- maximumFractionDigits: 20
129
- })
128
+ () => numberFormat(resolvedLocale.value, { useGrouping: false, maximumFractionDigits: 20 })
130
129
  );
131
130
  const separators = computed(() => {
132
- const parts = new Intl.NumberFormat(resolvedLocale.value).formatToParts(-12345.6);
131
+ const parts = numberFormat(resolvedLocale.value).formatToParts(-12345.6);
133
132
  return {
134
133
  decimal: parts.find((part) => part.type === "decimal")?.value ?? ".",
135
134
  group: parts.find((part) => part.type === "group")?.value ?? ","
@@ -275,7 +274,7 @@ function onStepClick(event, direction) {
275
274
  onBeforeUnmount(() => {
276
275
  clearTimeout(repeatDelay);
277
276
  clearInterval(repeatTimer);
278
- if (typeof window !== "undefined") {
277
+ if (isClient()) {
279
278
  window.removeEventListener("pointerup", stopRepeat);
280
279
  window.removeEventListener("pointercancel", stopRepeat);
281
280
  }
@@ -27,10 +27,13 @@ declare const __VLS_export: import("vue").DefineComponent<{
27
27
  value?: any;
28
28
  form?: string | undefined | undefined;
29
29
  pattern?: string | undefined | undefined;
30
+ checked?: any[] | Set<any> | (boolean | "true" | "false") | undefined;
31
+ indeterminate?: boolean | undefined | undefined;
30
32
  title?: string | undefined | undefined;
31
33
  list?: string | undefined | undefined;
32
34
  results?: (string | number) | undefined;
33
35
  name?: string | undefined | undefined;
36
+ dir?: string | undefined | undefined;
34
37
  role?: string | undefined | undefined;
35
38
  'aria-label'?: string | undefined | undefined;
36
39
  'aria-hidden'?: (boolean | "true" | "false") | undefined;
@@ -188,7 +191,6 @@ declare const __VLS_export: import("vue").DefineComponent<{
188
191
  accesskey?: string | undefined | undefined;
189
192
  contenteditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
190
193
  contextmenu?: string | undefined | undefined;
191
- dir?: string | undefined | undefined;
192
194
  draggable?: (boolean | "true" | "false") | undefined;
193
195
  enterkeyhint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined | undefined;
194
196
  enterKeyHint?: "search" | "done" | "previous" | "next" | "enter" | "go" | "send" | undefined;
@@ -231,9 +233,7 @@ declare const __VLS_export: import("vue").DefineComponent<{
231
233
  accept?: string | undefined | undefined;
232
234
  alt?: string | undefined | undefined;
233
235
  capture?: boolean | "user" | "environment" | undefined | undefined;
234
- checked?: any[] | Set<any> | (boolean | "true" | "false") | undefined;
235
236
  crossorigin?: string | undefined | undefined;
236
- indeterminate?: boolean | undefined | undefined;
237
237
  maxlength?: (string | number) | undefined;
238
238
  minlength?: (string | number) | undefined;
239
239
  multiple?: (boolean | "true" | "false") | undefined;
@@ -271,10 +271,13 @@ declare const __VLS_export: import("vue").DefineComponent<{
271
271
  value?: any;
272
272
  form?: string | undefined | undefined;
273
273
  pattern?: string | undefined | undefined;
274
+ checked?: any[] | Set<any> | (boolean | "true" | "false") | undefined;
275
+ indeterminate?: boolean | undefined | undefined;
274
276
  title?: string | undefined | undefined;
275
277
  list?: string | undefined | undefined;
276
278
  results?: (string | number) | undefined;
277
279
  name?: string | undefined | undefined;
280
+ dir?: string | undefined | undefined;
278
281
  role?: string | undefined | undefined;
279
282
  'aria-label'?: string | undefined | undefined;
280
283
  'aria-hidden'?: (boolean | "true" | "false") | undefined;
@@ -432,7 +435,6 @@ declare const __VLS_export: import("vue").DefineComponent<{
432
435
  accesskey?: string | undefined | undefined;
433
436
  contenteditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
434
437
  contextmenu?: string | undefined | undefined;
435
- dir?: string | undefined | undefined;
436
438
  draggable?: (boolean | "true" | "false") | undefined;
437
439
  enterkeyhint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined | undefined;
438
440
  enterKeyHint?: "search" | "done" | "previous" | "next" | "enter" | "go" | "send" | undefined;
@@ -475,9 +477,7 @@ declare const __VLS_export: import("vue").DefineComponent<{
475
477
  accept?: string | undefined | undefined;
476
478
  alt?: string | undefined | undefined;
477
479
  capture?: boolean | "user" | "environment" | undefined | undefined;
478
- checked?: any[] | Set<any> | (boolean | "true" | "false") | undefined;
479
480
  crossorigin?: string | undefined | undefined;
480
- indeterminate?: boolean | undefined | undefined;
481
481
  maxlength?: (string | number) | undefined;
482
482
  minlength?: (string | number) | undefined;
483
483
  multiple?: (boolean | "true" | "false") | undefined;
@@ -8,7 +8,7 @@
8
8
  ref="inputRef"
9
9
  :spellcheck="false"
10
10
  autocapitalize="off"
11
- :autocomplete="autocomplete"
11
+ :autocomplete="autocompleteValue"
12
12
  v-bind="$attrs"
13
13
  :aria-describedby="
14
14
  joinIds($attrs['aria-describedby'], strength && value ? meterId : void 0)
@@ -43,7 +43,7 @@
43
43
  type="button"
44
44
  class="k-password-input-action"
45
45
  :class="{ 'is-done': copied }"
46
- :aria-label="copied ? copiedText : copyText"
46
+ :aria-label="copyText"
47
47
  :title="copied ? copiedText : copyText"
48
48
  :disabled="!value || disabled || void 0"
49
49
  @click="copyValue"
@@ -77,16 +77,18 @@
77
77
  </span>
78
78
  <span class="k-password-meter-label">{{ label }}</span>
79
79
  </div>
80
+ <LiveRegion v-if="copy" :message="message" />
80
81
  </div>
81
82
  </template>
82
83
 
83
84
  <script setup>
84
85
  import { computed, ref, useId, useTemplateRef } from "vue";
85
- import { useCopy } from "../../composables/useCopy";
86
+ import { useAnnouncedCopy } from "../../internal/core/copy";
86
87
  import { useFieldControl } from "../../composables/useField";
87
88
  import { useLocale } from "../../composables/useLocale";
88
89
  import { generatePassword, usePasswordStrength } from "../../composables/usePasswordStrength";
89
90
  import { joinIds } from "../../internal/forms/control";
91
+ import LiveRegion from "../../internal/core/LiveRegion.vue";
90
92
  import Icon from "../core/Icon.vue";
91
93
  import Input from "../core/Input.vue";
92
94
  defineOptions({ inheritAttrs: false });
@@ -96,7 +98,7 @@ const props = defineProps({
96
98
  strength: { type: Boolean, required: false },
97
99
  minLength: { type: Number, required: false, default: 8 },
98
100
  strengthLabels: { type: Array, required: false },
99
- autocomplete: { type: String, required: false, default: "current-password" },
101
+ autocomplete: { type: String, required: false },
100
102
  icon: { type: null, required: false },
101
103
  size: { type: String, required: false, default: "md" },
102
104
  showLabel: { type: String, required: false },
@@ -124,7 +126,10 @@ const emit = defineEmits(["generate"]);
124
126
  const meterId = `${useId()}-strength`;
125
127
  const inputRef = useTemplateRef("inputRef");
126
128
  const visible = ref(false);
127
- const { copied, copy: writeClipboard } = useCopy();
129
+ const { copied, copy: writeClipboard, message } = useAnnouncedCopy(() => copiedText.value);
130
+ const autocompleteValue = computed(
131
+ () => props.autocomplete ?? (props.generate || props.strength ? "new-password" : "current-password")
132
+ );
128
133
  const { score, label } = usePasswordStrength(() => value.value, {
129
134
  minLength: () => props.minLength,
130
135
  labels: () => props.strengthLabels
@@ -142,7 +147,8 @@ function regenerate() {
142
147
  emit("generate", next);
143
148
  }
144
149
  async function copyValue() {
145
- if (value.value) await writeClipboard(value.value);
150
+ if (!value.value) return;
151
+ await writeClipboard(value.value);
146
152
  }
147
153
  defineExpose({ focus: () => inputRef.value?.focus() });
148
154
  </script>