@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,6 +17,7 @@ declare const __VLS_base: import("vue").DefineComponent<{
17
17
  style?: import("vue").StyleValue;
18
18
  results?: (string | number) | undefined;
19
19
  placeholder?: string | undefined;
20
+ dir?: string | undefined;
20
21
  class?: import("vue").ClassValue;
21
22
  role?: string | undefined;
22
23
  'aria-label'?: string | undefined;
@@ -172,7 +173,6 @@ declare const __VLS_base: import("vue").DefineComponent<{
172
173
  accesskey?: string | undefined;
173
174
  contenteditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
174
175
  contextmenu?: string | undefined;
175
- dir?: string | undefined;
176
176
  draggable?: (boolean | "true" | "false") | undefined;
177
177
  enterkeyhint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined;
178
178
  enterKeyHint?: import("vue").HTMLAttributes["enterkeyhint"];
@@ -232,6 +232,7 @@ declare const __VLS_base: import("vue").DefineComponent<{
232
232
  style?: import("vue").StyleValue;
233
233
  results?: (string | number) | undefined;
234
234
  placeholder?: string | undefined;
235
+ dir?: string | undefined;
235
236
  class?: import("vue").ClassValue;
236
237
  role?: string | undefined;
237
238
  'aria-label'?: string | undefined;
@@ -387,7 +388,6 @@ declare const __VLS_base: import("vue").DefineComponent<{
387
388
  accesskey?: string | undefined;
388
389
  contenteditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
389
390
  contextmenu?: string | undefined;
390
- dir?: string | undefined;
391
391
  draggable?: (boolean | "true" | "false") | undefined;
392
392
  enterkeyhint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined;
393
393
  enterKeyHint?: import("vue").HTMLAttributes["enterkeyhint"];
@@ -6,6 +6,7 @@
6
6
  :root-class="[`k-drawer-${side}`, `k-drawer-${size}`]"
7
7
  :title="title"
8
8
  :description="description"
9
+ :label="label"
9
10
  :dismissible="dismissible"
10
11
  :hide-close="hideClose"
11
12
  :close-label="closeLabel"
@@ -28,6 +29,7 @@ import DialogFrame from "../../internal/overlays/DialogFrame.vue";
28
29
  defineProps({
29
30
  title: { type: String, required: false },
30
31
  description: { type: String, required: false },
32
+ label: { type: String, required: false },
31
33
  side: { type: String, required: false, default: "right" },
32
34
  size: { type: String, required: false, default: "md" },
33
35
  dismissible: { type: Boolean, required: false, default: true },
@@ -4,6 +4,7 @@ type __VLS_Slots = DialogFrameSlots;
4
4
  declare const __VLS_base: import("vue").DefineComponent<{
5
5
  title?: string | undefined;
6
6
  description?: string;
7
+ label?: string;
7
8
  side?: DrawerSide;
8
9
  size?: DrawerSize;
9
10
  dismissible?: boolean | undefined;
@@ -18,6 +19,7 @@ declare const __VLS_base: import("vue").DefineComponent<{
18
19
  style?: import("vue").StyleValue;
19
20
  results?: (string | number) | undefined;
20
21
  placeholder?: string | undefined;
22
+ dir?: string | undefined;
21
23
  class?: import("vue").ClassValue;
22
24
  role?: string | undefined;
23
25
  'aria-label'?: string | undefined;
@@ -173,7 +175,6 @@ declare const __VLS_base: import("vue").DefineComponent<{
173
175
  accesskey?: string | undefined;
174
176
  contenteditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
175
177
  contextmenu?: string | undefined;
176
- dir?: string | undefined;
177
178
  draggable?: (boolean | "true" | "false") | undefined;
178
179
  enterkeyhint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined;
179
180
  enterKeyHint?: import("vue").HTMLAttributes["enterkeyhint"];
@@ -224,6 +225,7 @@ declare const __VLS_base: import("vue").DefineComponent<{
224
225
  }, string, import("vue").PublicProps, Readonly<{
225
226
  title?: string | undefined;
226
227
  description?: string;
228
+ label?: string;
227
229
  side?: DrawerSide;
228
230
  size?: DrawerSize;
229
231
  dismissible?: boolean | undefined;
@@ -238,6 +240,7 @@ declare const __VLS_base: import("vue").DefineComponent<{
238
240
  style?: import("vue").StyleValue;
239
241
  results?: (string | number) | undefined;
240
242
  placeholder?: string | undefined;
243
+ dir?: string | undefined;
241
244
  class?: import("vue").ClassValue;
242
245
  role?: string | undefined;
243
246
  'aria-label'?: string | undefined;
@@ -393,7 +396,6 @@ declare const __VLS_base: import("vue").DefineComponent<{
393
396
  accesskey?: string | undefined;
394
397
  contenteditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
395
398
  contextmenu?: string | undefined;
396
- dir?: string | undefined;
397
399
  draggable?: (boolean | "true" | "false") | undefined;
398
400
  enterkeyhint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined;
399
401
  enterKeyHint?: import("vue").HTMLAttributes["enterkeyhint"];
@@ -11,14 +11,16 @@
11
11
  :offset="offset"
12
12
  :label="label"
13
13
  :labelledby="label ? void 0 : triggerId"
14
- @open-change="onOpenChange"
14
+ @open-change="isOpen = $event"
15
15
  @select="(item, event) => emit('select', item, event)"
16
16
  />
17
17
  </template>
18
18
 
19
19
  <script setup>
20
20
  import { computed, onBeforeUnmount, ref, useId, useTemplateRef, watch } from "vue";
21
+ import { syncOpenModel } from "../../internal/floating/layer";
21
22
  import MenuList from "../../internal/overlays/MenuList.vue";
23
+ import { menuTriggerHandlers } from "../../internal/overlays/menu";
22
24
  import { setAttributes, useInvoker, useSlotTrigger } from "../../internal/floating/trigger";
23
25
  defineOptions({ inheritAttrs: false });
24
26
  const props = defineProps({
@@ -39,26 +41,16 @@ const triggerId = computed(() => trigger.value?.id || `${generatedId}-trigger`);
39
41
  useInvoker(trigger, menuElement, () => {
40
42
  menuRef.value?.toggle("first", trigger.value);
41
43
  });
42
- function onOpenChange(value) {
43
- isOpen.value = value;
44
- if (open.value !== value) open.value = value;
45
- }
46
- watch(open, (value) => {
47
- if (value === isOpen.value) return;
48
- if (value) menuRef.value?.show("first", trigger.value);
49
- else menuRef.value?.hide();
50
- });
51
- function onTriggerKeydown(event) {
52
- if (event.key === "ArrowDown" || event.key === "ArrowUp") {
53
- event.preventDefault();
54
- menuRef.value?.show(event.key === "ArrowDown" ? "first" : "last", trigger.value);
55
- return;
56
- }
57
- if (event.key === "Enter" || event.key === " ") menuRef.value?.setPendingFocus("first");
58
- }
59
- function onTriggerPointerDown(event) {
60
- menuRef.value?.setPendingFocus(event.pointerType === "mouse" ? "menu" : "first");
61
- }
44
+ syncOpenModel(
45
+ open,
46
+ isOpen,
47
+ () => menuRef.value?.show("first", trigger.value),
48
+ () => menuRef.value?.hide()
49
+ );
50
+ const { onKeydown: onTriggerKeydown, onPointerDown: onTriggerPointerDown } = menuTriggerHandlers(
51
+ () => menuRef.value,
52
+ () => trigger.value
53
+ );
62
54
  watch(
63
55
  [trigger, isOpen],
64
56
  ([element, expanded], previous) => {
@@ -18,6 +18,7 @@ declare const __VLS_base: import("vue").DefineComponent<{
18
18
  style?: import("vue").StyleValue;
19
19
  results?: (string | number) | undefined;
20
20
  placeholder?: string | undefined;
21
+ dir?: string | undefined;
21
22
  class?: import("vue").ClassValue;
22
23
  role?: string | undefined;
23
24
  'aria-label'?: string | undefined;
@@ -172,7 +173,6 @@ declare const __VLS_base: import("vue").DefineComponent<{
172
173
  accesskey?: string | undefined;
173
174
  contenteditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
174
175
  contextmenu?: string | undefined;
175
- dir?: string | undefined;
176
176
  draggable?: (boolean | "true" | "false") | undefined;
177
177
  enterkeyhint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined;
178
178
  enterKeyHint?: import("vue").HTMLAttributes["enterkeyhint"];
@@ -232,6 +232,7 @@ declare const __VLS_base: import("vue").DefineComponent<{
232
232
  style?: import("vue").StyleValue;
233
233
  results?: (string | number) | undefined;
234
234
  placeholder?: string | undefined;
235
+ dir?: string | undefined;
235
236
  class?: import("vue").ClassValue;
236
237
  role?: string | undefined;
237
238
  'aria-label'?: string | undefined;
@@ -386,7 +387,6 @@ declare const __VLS_base: import("vue").DefineComponent<{
386
387
  accesskey?: string | undefined;
387
388
  contenteditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
388
389
  contextmenu?: string | undefined;
389
- dir?: string | undefined;
390
390
  draggable?: (boolean | "true" | "false") | undefined;
391
391
  enterkeyhint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined;
392
392
  enterKeyHint?: import("vue").HTMLAttributes["enterkeyhint"];
@@ -51,7 +51,13 @@ useHoverTrigger({
51
51
  hide: layer.hide,
52
52
  openDelay: () => props.openDelay,
53
53
  closeDelay: () => props.closeDelay,
54
- enabled: () => !props.disabled
54
+ enabled: () => !props.disabled,
55
+ touch: true
55
56
  });
56
- syncOpenModel(open, layer, () => trigger.value);
57
+ syncOpenModel(
58
+ open,
59
+ layer.isOpen,
60
+ () => layer.show(trigger.value),
61
+ () => layer.hide()
62
+ );
57
63
  </script>
@@ -21,6 +21,7 @@ declare const __VLS_base: import("vue").DefineComponent<{
21
21
  style?: import("vue").StyleValue;
22
22
  results?: (string | number) | undefined;
23
23
  placeholder?: string | undefined | undefined;
24
+ dir?: string | undefined | undefined;
24
25
  class?: import("vue").ClassValue;
25
26
  role?: string | undefined | undefined;
26
27
  'aria-label'?: string | undefined | undefined;
@@ -176,7 +177,6 @@ declare const __VLS_base: import("vue").DefineComponent<{
176
177
  accesskey?: string | undefined | undefined;
177
178
  contenteditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
178
179
  contextmenu?: string | undefined | undefined;
179
- dir?: string | undefined | undefined;
180
180
  draggable?: (boolean | "true" | "false") | undefined;
181
181
  enterkeyhint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined | undefined;
182
182
  enterKeyHint?: "search" | "done" | "previous" | "next" | "enter" | "go" | "send" | undefined;
@@ -223,6 +223,7 @@ declare const __VLS_base: import("vue").DefineComponent<{
223
223
  style?: import("vue").StyleValue;
224
224
  results?: (string | number) | undefined;
225
225
  placeholder?: string | undefined | undefined;
226
+ dir?: string | undefined | undefined;
226
227
  class?: import("vue").ClassValue;
227
228
  role?: string | undefined | undefined;
228
229
  'aria-label'?: string | undefined | undefined;
@@ -378,7 +379,6 @@ declare const __VLS_base: import("vue").DefineComponent<{
378
379
  accesskey?: string | undefined | undefined;
379
380
  contenteditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
380
381
  contextmenu?: string | undefined | undefined;
381
- dir?: string | undefined | undefined;
382
382
  draggable?: (boolean | "true" | "false") | undefined;
383
383
  enterkeyhint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined | undefined;
384
384
  enterKeyHint?: "search" | "done" | "previous" | "next" | "enter" | "go" | "send" | undefined;
@@ -6,6 +6,7 @@
6
6
  :root-class="[`k-modal-${size}`, { 'is-sheet': sheet && size !== 'fullscreen' }]"
7
7
  :title="title"
8
8
  :description="description"
9
+ :label="label"
9
10
  :dismissible="dismissible"
10
11
  :hide-close="hideClose"
11
12
  :close-label="closeLabel"
@@ -28,6 +29,7 @@ import DialogFrame from "../../internal/overlays/DialogFrame.vue";
28
29
  defineProps({
29
30
  title: { type: String, required: false },
30
31
  description: { type: String, required: false },
32
+ label: { type: String, required: false },
31
33
  size: { type: String, required: false, default: "md" },
32
34
  dismissible: { type: Boolean, required: false, default: true },
33
35
  hideClose: { type: Boolean, required: false },
@@ -4,6 +4,7 @@ type __VLS_Slots = DialogFrameSlots;
4
4
  declare const __VLS_base: import("vue").DefineComponent<{
5
5
  title?: string | undefined;
6
6
  description?: string;
7
+ label?: string;
7
8
  size?: ModalSize;
8
9
  dismissible?: boolean | undefined;
9
10
  hideClose?: boolean;
@@ -18,6 +19,7 @@ declare const __VLS_base: import("vue").DefineComponent<{
18
19
  style?: import("vue").StyleValue;
19
20
  results?: (string | number) | undefined;
20
21
  placeholder?: string | undefined;
22
+ dir?: string | undefined;
21
23
  class?: import("vue").ClassValue;
22
24
  role?: string | undefined;
23
25
  'aria-label'?: string | undefined;
@@ -173,7 +175,6 @@ declare const __VLS_base: import("vue").DefineComponent<{
173
175
  accesskey?: string | undefined;
174
176
  contenteditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
175
177
  contextmenu?: string | undefined;
176
- dir?: string | undefined;
177
178
  draggable?: (boolean | "true" | "false") | undefined;
178
179
  enterkeyhint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined;
179
180
  enterKeyHint?: import("vue").HTMLAttributes["enterkeyhint"];
@@ -224,6 +225,7 @@ declare const __VLS_base: import("vue").DefineComponent<{
224
225
  }, string, import("vue").PublicProps, Readonly<{
225
226
  title?: string | undefined;
226
227
  description?: string;
228
+ label?: string;
227
229
  size?: ModalSize;
228
230
  dismissible?: boolean | undefined;
229
231
  hideClose?: boolean;
@@ -238,6 +240,7 @@ declare const __VLS_base: import("vue").DefineComponent<{
238
240
  style?: import("vue").StyleValue;
239
241
  results?: (string | number) | undefined;
240
242
  placeholder?: string | undefined;
243
+ dir?: string | undefined;
241
244
  class?: import("vue").ClassValue;
242
245
  role?: string | undefined;
243
246
  'aria-label'?: string | undefined;
@@ -393,7 +396,6 @@ declare const __VLS_base: import("vue").DefineComponent<{
393
396
  accesskey?: string | undefined;
394
397
  contenteditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
395
398
  contextmenu?: string | undefined;
396
- dir?: string | undefined;
397
399
  draggable?: (boolean | "true" | "false") | undefined;
398
400
  enterkeyhint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined;
399
401
  enterKeyHint?: import("vue").HTMLAttributes["enterkeyhint"];
@@ -12,6 +12,7 @@
12
12
  :class="{ 'has-arrow': arrow }"
13
13
  :role="role"
14
14
  :aria-label="label"
15
+ :aria-labelledby="fallbackLabelledBy"
15
16
  tabindex="-1"
16
17
  >
17
18
  <span v-if="arrow" class="k-floating-arrow" aria-hidden="true" />
@@ -20,11 +21,12 @@
20
21
  </template>
21
22
 
22
23
  <script setup>
23
- import { useId, useTemplateRef, watch } from "vue";
24
+ import { computed, ref, useAttrs, useId, useTemplateRef, watch } from "vue";
24
25
  import FieldBoundary from "../core/FieldBoundary.vue";
25
- import { focusFirst } from "../../internal/overlays/focus";
26
+ import { focusFirst, hasFocusWithin } from "../../internal/core/focus";
26
27
  import { ARROW_OFFSET, syncOpenModel, useFloatingLayer } from "../../internal/floating/layer";
27
28
  import { setAttributes, useInvoker, useSlotTrigger } from "../../internal/floating/trigger";
29
+ import { hasNameAttrs } from "../../internal/forms/name";
28
30
  defineOptions({ inheritAttrs: false });
29
31
  const props = defineProps({
30
32
  placement: { type: null, required: false, default: "bottom-start" },
@@ -40,6 +42,12 @@ const contentId = `${useId()}-popover`;
40
42
  const triggerRef = useTemplateRef("triggerRef");
41
43
  const floatingRef = useTemplateRef("floatingRef");
42
44
  const trigger = useSlotTrigger(triggerRef);
45
+ const attrs = useAttrs();
46
+ const triggerId = ref();
47
+ const fallbackLabelledBy = computed(() => {
48
+ if (props.label || hasNameAttrs(attrs)) return void 0;
49
+ return props.role === "dialog" ? triggerId.value : void 0;
50
+ });
43
51
  const layer = useFloatingLayer({
44
52
  floating: floatingRef,
45
53
  anchor: () => trigger.value,
@@ -50,16 +58,23 @@ const layer = useFloatingLayer({
50
58
  onOpen: () => {
51
59
  const element = floatingRef.value;
52
60
  if (!props.initialFocus || !element) return;
53
- if (element.contains(document.activeElement)) return;
61
+ if (hasFocusWithin(element)) return;
54
62
  if (!focusFirst(element)) element.focus({ preventScroll: true });
55
63
  }
56
64
  });
57
65
  useInvoker(trigger, floatingRef, () => layer.toggle(trigger.value));
58
- syncOpenModel(open, layer, () => trigger.value);
66
+ syncOpenModel(
67
+ open,
68
+ layer.isOpen,
69
+ () => layer.show(trigger.value),
70
+ () => layer.hide()
71
+ );
59
72
  watch(
60
73
  [trigger, layer.isOpen],
61
74
  ([element, isOpen]) => {
62
75
  if (!element) return;
76
+ if (!element.id) element.id = `${contentId}-trigger`;
77
+ triggerId.value = element.id;
63
78
  setAttributes(element, {
64
79
  "aria-haspopup": props.haspopup,
65
80
  "aria-expanded": String(isOpen),
@@ -25,6 +25,7 @@ declare const __VLS_base: import("vue").DefineComponent<{
25
25
  style?: import("vue").StyleValue;
26
26
  results?: (string | number) | undefined;
27
27
  placeholder?: string | undefined | undefined;
28
+ dir?: string | undefined | undefined;
28
29
  class?: import("vue").ClassValue;
29
30
  'aria-label'?: string | undefined | undefined;
30
31
  'aria-hidden'?: (boolean | "true" | "false") | undefined;
@@ -179,7 +180,6 @@ declare const __VLS_base: import("vue").DefineComponent<{
179
180
  accesskey?: string | undefined | undefined;
180
181
  contenteditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
181
182
  contextmenu?: string | undefined | undefined;
182
- dir?: string | undefined | undefined;
183
183
  draggable?: (boolean | "true" | "false") | undefined;
184
184
  enterkeyhint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined | undefined;
185
185
  enterKeyHint?: "search" | "done" | "previous" | "next" | "enter" | "go" | "send" | undefined;
@@ -231,6 +231,7 @@ declare const __VLS_base: import("vue").DefineComponent<{
231
231
  style?: import("vue").StyleValue;
232
232
  results?: (string | number) | undefined;
233
233
  placeholder?: string | undefined | undefined;
234
+ dir?: string | undefined | undefined;
234
235
  class?: import("vue").ClassValue;
235
236
  'aria-label'?: string | undefined | undefined;
236
237
  'aria-hidden'?: (boolean | "true" | "false") | undefined;
@@ -385,7 +386,6 @@ declare const __VLS_base: import("vue").DefineComponent<{
385
386
  accesskey?: string | undefined | undefined;
386
387
  contenteditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
387
388
  contextmenu?: string | undefined | undefined;
388
- dir?: string | undefined | undefined;
389
389
  draggable?: (boolean | "true" | "false") | undefined;
390
390
  enterkeyhint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined | undefined;
391
391
  enterKeyHint?: "search" | "done" | "previous" | "next" | "enter" | "go" | "send" | undefined;
@@ -18,8 +18,9 @@
18
18
  tabindex="-1"
19
19
  @pointerenter="onPointerEnter"
20
20
  @pointerleave="onPointerLeave"
21
- @focusin="focusInside = true"
21
+ @focusin="onFocusIn"
22
22
  @focusout="onFocusOut"
23
+ @keydown.esc="onEscape"
23
24
  >
24
25
  <ol class="k-toaster-list">
25
26
  <li
@@ -112,9 +113,11 @@ import { useLocale } from "../../composables/useLocale";
112
113
  import { toast } from "../../composables/useToast";
113
114
  import { toastList } from "../../internal/overlays/toast";
114
115
  import { isPopoverOpen, supportsPopover } from "../../internal/floating/support";
115
- import { toneIcons } from "../../internal/core/tone";
116
+ import { spokenToneKey, toneIcons } from "../../internal/core/tone";
116
117
  import { modalStack } from "../../internal/overlays/dialog";
117
118
  import { useHostClaim } from "../../internal/overlays/host";
119
+ import { LIVE_DELAY } from "../../internal/core/live";
120
+ import { activeElement } from "../../internal/core/focus";
118
121
  import Button from "../core/Button.vue";
119
122
  import Icon from "../core/Icon.vue";
120
123
  import Spinner from "../core/Spinner.vue";
@@ -352,11 +355,25 @@ function actionHint(item) {
352
355
  action: item.action.label
353
356
  });
354
357
  }
358
+ function toneText(item) {
359
+ const key = spokenToneKey(item.tone);
360
+ return key ? t(key) : "";
361
+ }
362
+ const pending = { polite: [], assertive: [] };
363
+ const flushTimers = {};
355
364
  function announce(item) {
356
- const text = [item.title, ...descriptionLines(item), actionHint(item)].filter(Boolean).join(". ");
357
- const target = item.tone === "danger" ? assertiveMessage : politeMessage;
365
+ const text = [toneText(item), item.title, ...descriptionLines(item), actionHint(item)].filter(Boolean).join(". ");
366
+ if (!text) return;
367
+ const kind = item.tone === "danger" ? "assertive" : "polite";
368
+ const target = kind === "assertive" ? assertiveMessage : politeMessage;
369
+ pending[kind].push(text);
370
+ clearTimeout(flushTimers[kind]);
358
371
  target.value = "";
359
- nextTick(() => target.value = text);
372
+ flushTimers[kind] = setTimeout(() => {
373
+ flushTimers[kind] = void 0;
374
+ target.value = pending[kind].join(" ");
375
+ pending[kind] = [];
376
+ }, LIVE_DELAY);
360
377
  }
361
378
  function raise() {
362
379
  const element = toasterRef.value;
@@ -447,9 +464,23 @@ function onPointerEnter(event) {
447
464
  function onPointerLeave() {
448
465
  hovered.value = false;
449
466
  }
467
+ function onFocusIn(event) {
468
+ focusInside.value = true;
469
+ const previous = event.relatedTarget;
470
+ if (previous instanceof HTMLElement && !toasterRef.value?.contains(previous))
471
+ returnFocus = previous;
472
+ }
473
+ function onEscape(event) {
474
+ const target = returnFocus;
475
+ if (!target?.isConnected) return;
476
+ event.preventDefault();
477
+ returnFocus = null;
478
+ target.focus({ preventScroll: true });
479
+ }
450
480
  function onFocusOut(event) {
451
481
  const next = event.relatedTarget;
452
482
  if (next && toasterRef.value?.contains(next)) return;
483
+ if (next) returnFocus = null;
453
484
  focusInside.value = false;
454
485
  }
455
486
  function onSwipeStart(event, item) {
@@ -480,8 +511,7 @@ function onVisibilityChange() {
480
511
  useHotkey(
481
512
  () => props.hotkey ? [props.hotkey] : [],
482
513
  () => {
483
- if (!focusInToaster())
484
- returnFocus = document.activeElement instanceof HTMLElement ? document.activeElement : null;
514
+ if (!focusInToaster()) returnFocus = activeElement();
485
515
  const first = toasterRef.value?.querySelector(
486
516
  '.k-toast[data-visible="true"] button'
487
517
  );
@@ -499,5 +529,7 @@ onBeforeUnmount(() => {
499
529
  resizeObserver?.disconnect();
500
530
  for (const timer of timers.values()) clearTimeout(timer.handle);
501
531
  timers.clear();
532
+ clearTimeout(flushTimers.polite);
533
+ clearTimeout(flushTimers.assertive);
502
534
  });
503
535
  </script>
@@ -25,8 +25,8 @@
25
25
  </template>
26
26
 
27
27
  <script setup>
28
- import { onBeforeUnmount, useId, useTemplateRef, watch } from "vue";
29
- import { formatHotkey } from "../../composables/useHotkey";
28
+ import { computed, onBeforeUnmount, useId, useSlots, useTemplateRef, watch } from "vue";
29
+ import { ariaKeyShortcuts, formatHotkey } from "../../composables/useHotkey";
30
30
  import { useHoverTrigger } from "../../internal/overlays/hover";
31
31
  import { ARROW_OFFSET, useFloatingLayer } from "../../internal/floating/layer";
32
32
  import { useApplePlatform } from "../../internal/core/env";
@@ -65,29 +65,54 @@ useHoverTrigger({
65
65
  hide: layer.hide,
66
66
  openDelay: () => props.openDelay,
67
67
  closeDelay: () => props.closeDelay,
68
- enabled: () => !props.disabled && Boolean(props.text || props.shortcut),
68
+ enabled: () => !props.disabled && Boolean(props.text || props.shortcut || slots.content),
69
69
  warmup: true
70
70
  });
71
+ const slots = useSlots();
72
+ const hasContent = computed(() => Boolean(props.text || slots.content));
73
+ let shortcutOwner = null;
74
+ function accessibleName(element) {
75
+ return (element.getAttribute("aria-label") ?? element.textContent ?? "").trim();
76
+ }
77
+ function release(element) {
78
+ removeToken(element, "aria-describedby", tooltipId);
79
+ if (shortcutOwner === element) {
80
+ element.removeAttribute("aria-keyshortcuts");
81
+ shortcutOwner = null;
82
+ }
83
+ }
84
+ function sync(element) {
85
+ if (!element) return;
86
+ if (props.disabled) {
87
+ release(element);
88
+ return;
89
+ }
90
+ const duplicate = !slots.content && Boolean(props.text) && props.text.trim() === accessibleName(element);
91
+ if (hasContent.value && !duplicate) addToken(element, "aria-describedby", tooltipId);
92
+ else removeToken(element, "aria-describedby", tooltipId);
93
+ if (props.shortcut && (shortcutOwner === element || !element.hasAttribute("aria-keyshortcuts"))) {
94
+ element.setAttribute("aria-keyshortcuts", ariaKeyShortcuts(props.shortcut, apple.value));
95
+ shortcutOwner = element;
96
+ } else if (!props.shortcut && shortcutOwner === element) {
97
+ element.removeAttribute("aria-keyshortcuts");
98
+ shortcutOwner = null;
99
+ }
100
+ }
71
101
  watch(
72
- trigger,
73
- (element, previous) => {
74
- if (previous) removeToken(previous, "aria-describedby", tooltipId);
75
- if (element && !props.disabled) addToken(element, "aria-describedby", tooltipId);
102
+ [trigger, () => props.disabled, () => props.text, () => props.shortcut, hasContent, apple],
103
+ ([element], [previous]) => {
104
+ if (previous && previous !== element) release(previous);
105
+ sync(element);
76
106
  },
77
107
  { flush: "post" }
78
108
  );
79
109
  watch(
80
110
  () => props.disabled,
81
111
  (disabled) => {
82
- const element = trigger.value;
83
- if (!element) return;
84
- if (disabled) {
85
- removeToken(element, "aria-describedby", tooltipId);
86
- layer.hide();
87
- } else addToken(element, "aria-describedby", tooltipId);
112
+ if (disabled) layer.hide();
88
113
  }
89
114
  );
90
115
  onBeforeUnmount(() => {
91
- if (trigger.value) removeToken(trigger.value, "aria-describedby", tooltipId);
116
+ if (trigger.value) release(trigger.value);
92
117
  });
93
118
  </script>
@@ -80,5 +80,11 @@ export interface CommandGroup<T = unknown> {
80
80
  description?: string;
81
81
  items: CommandItem<T>[];
82
82
  }
83
+ export interface CommandGroupLabelSlotProps<T = unknown> {
84
+ group?: CommandGroup<T>;
85
+ label?: string;
86
+ description?: string;
87
+ recent: boolean;
88
+ }
83
89
  export type CommandSearch<T = unknown> = (query: string, signal: AbortSignal) => CommandGroup<T>[] | Promise<CommandGroup<T>[]>;
84
90
  export type CommandEmptyText = string | ((query: string) => string);
@@ -17,6 +17,7 @@ declare const __VLS_export: import("vue").DefineComponent<{
17
17
  style?: import("vue").StyleValue;
18
18
  results?: (string | number) | undefined;
19
19
  placeholder?: string | undefined | undefined;
20
+ dir?: string | undefined | undefined;
20
21
  class?: import("vue").ClassValue;
21
22
  role?: string | undefined | undefined;
22
23
  'aria-label'?: string | undefined | undefined;
@@ -172,7 +173,6 @@ declare const __VLS_export: import("vue").DefineComponent<{
172
173
  accesskey?: string | undefined | undefined;
173
174
  contenteditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
174
175
  contextmenu?: string | undefined | undefined;
175
- dir?: string | undefined | undefined;
176
176
  draggable?: (boolean | "true" | "false") | undefined;
177
177
  enterkeyhint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined | undefined;
178
178
  enterKeyHint?: "search" | "done" | "previous" | "next" | "enter" | "go" | "send" | undefined;
@@ -231,6 +231,7 @@ declare const __VLS_export: import("vue").DefineComponent<{
231
231
  style?: import("vue").StyleValue;
232
232
  results?: (string | number) | undefined;
233
233
  placeholder?: string | undefined | undefined;
234
+ dir?: string | undefined | undefined;
234
235
  class?: import("vue").ClassValue;
235
236
  role?: string | undefined | undefined;
236
237
  'aria-label'?: string | undefined | undefined;
@@ -386,7 +387,6 @@ declare const __VLS_export: import("vue").DefineComponent<{
386
387
  accesskey?: string | undefined | undefined;
387
388
  contenteditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
388
389
  contextmenu?: string | undefined | undefined;
389
- dir?: string | undefined | undefined;
390
390
  draggable?: (boolean | "true" | "false") | undefined;
391
391
  enterkeyhint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined | undefined;
392
392
  enterKeyHint?: "search" | "done" | "previous" | "next" | "enter" | "go" | "send" | undefined;