@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
@@ -1,8 +1,8 @@
1
1
  import type { MenuItem, MenuItems } from '../../components/overlays/types';
2
+ import type { MenuFocusTarget } from './menu';
2
3
  import type { AnchorTarget, Placement } from '../floating/position';
3
- type FocusTarget = 'first' | 'last' | 'menu' | 'none';
4
- declare function show(focus?: FocusTarget, source?: HTMLElement | null): void;
5
- declare function setPendingFocus(focus: FocusTarget): void;
4
+ declare function show(focus?: MenuFocusTarget, source?: HTMLElement | null): void;
5
+ declare function setPendingFocus(focus: MenuFocusTarget): void;
6
6
  declare const __VLS_export: import("vue").DefineComponent<{
7
7
  items: MenuItems;
8
8
  anchor: () => AnchorTarget | null | undefined;
@@ -19,6 +19,7 @@ declare const __VLS_export: import("vue").DefineComponent<{
19
19
  style?: import("vue").StyleValue;
20
20
  results?: (string | number) | undefined;
21
21
  placeholder?: string | undefined | undefined;
22
+ dir?: string | undefined | undefined;
22
23
  class?: import("vue").ClassValue;
23
24
  role?: string | undefined | undefined;
24
25
  '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;
@@ -206,7 +206,7 @@ declare const __VLS_export: import("vue").DefineComponent<{
206
206
  }, {
207
207
  show: typeof show;
208
208
  hide: () => void;
209
- toggle: (focus?: FocusTarget, source?: HTMLElement | null) => void;
209
+ toggle: (focus?: MenuFocusTarget, source?: HTMLElement | null) => void;
210
210
  setPendingFocus: typeof setPendingFocus;
211
211
  reposition: () => void;
212
212
  isOpen: import("vue").Ref<boolean, boolean>;
@@ -230,6 +230,7 @@ declare const __VLS_export: import("vue").DefineComponent<{
230
230
  style?: import("vue").StyleValue;
231
231
  results?: (string | number) | undefined;
232
232
  placeholder?: string | undefined | undefined;
233
+ dir?: string | undefined | undefined;
233
234
  class?: import("vue").ClassValue;
234
235
  role?: string | undefined | undefined;
235
236
  'aria-label'?: string | undefined | undefined;
@@ -383,7 +384,6 @@ declare const __VLS_export: import("vue").DefineComponent<{
383
384
  accesskey?: string | undefined | undefined;
384
385
  contenteditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
385
386
  contextmenu?: string | undefined | undefined;
386
- dir?: string | undefined | undefined;
387
387
  draggable?: (boolean | "true" | "false") | undefined;
388
388
  enterkeyhint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined | undefined;
389
389
  enterKeyHint?: "search" | "done" | "previous" | "next" | "enter" | "go" | "send" | undefined;
@@ -4,6 +4,7 @@
4
4
  v-model:open="entry.open"
5
5
  :title="entry.options.title"
6
6
  :description="entry.options.description"
7
+ :label="entry.options.label"
7
8
  :side="entry.options.side"
8
9
  :size="entry.options.size"
9
10
  :dismissible="entry.options.dismissible ?? true"
@@ -22,6 +23,7 @@
22
23
  v-model:open="entry.open"
23
24
  :title="entry.options.title"
24
25
  :description="entry.options.description"
26
+ :label="entry.options.label"
25
27
  :size="entry.options.size"
26
28
  :sheet="entry.options.sheet"
27
29
  :dismissible="entry.options.dismissible ?? true"
@@ -4,12 +4,14 @@ declare const __VLS_export: import("vue").DefineComponent<{
4
4
  key?: PropertyKey | undefined;
5
5
  loading?: boolean;
6
6
  prefix?: "k-modal" | "k-drawer" | undefined;
7
+ label?: string;
7
8
  title?: string | undefined;
8
9
  style?: import("vue").StyleValue;
9
10
  results?: (string | number) | undefined;
10
11
  placeholder?: string | undefined;
11
12
  description?: string;
12
13
  size?: "sm" | "md" | "lg" | "xl" | "full" | undefined;
14
+ dir?: string | undefined;
13
15
  class?: import("vue").ClassValue;
14
16
  role?: string | undefined;
15
17
  'aria-label'?: string | undefined;
@@ -165,7 +167,6 @@ declare const __VLS_export: import("vue").DefineComponent<{
165
167
  accesskey?: string | undefined;
166
168
  contenteditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
167
169
  contextmenu?: string | undefined;
168
- dir?: string | undefined;
169
170
  draggable?: (boolean | "true" | "false") | undefined;
170
171
  enterkeyhint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined;
171
172
  enterKeyHint?: import("vue").HTMLAttributes["enterkeyhint"];
@@ -205,14 +206,14 @@ declare const __VLS_export: import("vue").DefineComponent<{
205
206
  onVnodeUpdated?: (((vnode: import("vue").VNode, oldVNode: import("vue").VNode) => void) | ((vnode: import("vue").VNode, oldVNode: import("vue").VNode) => void)[]) | undefined;
206
207
  onVnodeBeforeUnmount?: (((vnode: import("vue").VNode) => void) | ((vnode: import("vue").VNode) => void)[]) | undefined;
207
208
  onVnodeUnmounted?: (((vnode: import("vue").VNode) => void) | ((vnode: import("vue").VNode) => void)[]) | undefined;
209
+ flush?: boolean;
208
210
  onCancel?: ((payload: Event) => void) | undefined;
209
211
  side?: import("../../index.ts").DrawerSide;
210
- flush?: boolean;
211
212
  sheet?: boolean;
212
213
  onOpen?: ((() => any) & (() => any)) | undefined;
214
+ closeLabel?: string;
213
215
  rootClass?: unknown;
214
216
  hideClose?: boolean;
215
- closeLabel?: string;
216
217
  beforeClose?: import("../../index.ts").DialogBeforeClose;
217
218
  closedby?: import("../../index.ts").DialogClosedBy;
218
219
  }, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
@@ -224,12 +225,14 @@ declare const __VLS_export: import("vue").DefineComponent<{
224
225
  key?: PropertyKey | undefined;
225
226
  loading?: boolean;
226
227
  prefix?: "k-modal" | "k-drawer" | undefined;
228
+ label?: string;
227
229
  title?: string | undefined;
228
230
  style?: import("vue").StyleValue;
229
231
  results?: (string | number) | undefined;
230
232
  placeholder?: string | undefined;
231
233
  description?: string;
232
234
  size?: "sm" | "md" | "lg" | "xl" | "full" | undefined;
235
+ dir?: string | undefined;
233
236
  class?: import("vue").ClassValue;
234
237
  role?: string | undefined;
235
238
  'aria-label'?: string | undefined;
@@ -385,7 +388,6 @@ declare const __VLS_export: import("vue").DefineComponent<{
385
388
  accesskey?: string | undefined;
386
389
  contenteditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
387
390
  contextmenu?: string | undefined;
388
- dir?: string | undefined;
389
391
  draggable?: (boolean | "true" | "false") | undefined;
390
392
  enterkeyhint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined;
391
393
  enterKeyHint?: import("vue").HTMLAttributes["enterkeyhint"];
@@ -425,14 +427,14 @@ declare const __VLS_export: import("vue").DefineComponent<{
425
427
  onVnodeUpdated?: (((vnode: import("vue").VNode, oldVNode: import("vue").VNode) => void) | ((vnode: import("vue").VNode, oldVNode: import("vue").VNode) => void)[]) | undefined;
426
428
  onVnodeBeforeUnmount?: (((vnode: import("vue").VNode) => void) | ((vnode: import("vue").VNode) => void)[]) | undefined;
427
429
  onVnodeUnmounted?: (((vnode: import("vue").VNode) => void) | ((vnode: import("vue").VNode) => void)[]) | undefined;
430
+ flush?: boolean;
428
431
  onCancel?: ((payload: Event) => void) | undefined;
429
432
  side?: import("../../index.ts").DrawerSide;
430
- flush?: boolean;
431
433
  sheet?: boolean;
432
434
  onOpen?: ((() => any) & (() => any)) | undefined;
435
+ closeLabel?: string;
433
436
  rootClass?: unknown;
434
437
  hideClose?: boolean;
435
- closeLabel?: string;
436
438
  beforeClose?: import("../../index.ts").DialogBeforeClose;
437
439
  closedby?: import("../../index.ts").DialogClosedBy;
438
440
  }> & Readonly<{
@@ -53,6 +53,11 @@ export interface PromptRequest extends DialogRequestBase, PromptOptions {
53
53
  export type DialogRequest = ConfirmRequest | AlertRequest | PromptRequest;
54
54
  export declare const confirmQueue: import("vue").ShallowReactive<DialogRequest[]>;
55
55
  export declare function hasConfirmHost(): boolean;
56
- export declare function nextConfirmId(): number;
56
+ type NewRequest<R> = R extends DialogRequest ? Omit<R, 'id'> : never;
57
+ export declare function enqueueDialog(request: NewRequest<DialogRequest>): void;
58
+ export declare function nativeDialogMessage(options: {
59
+ title?: string;
60
+ description?: string;
61
+ }): string;
57
62
  export declare function cancelRequest(request: DialogRequest): void;
58
63
  export {};
@@ -5,9 +5,12 @@ let counter = 0;
5
5
  export function hasConfirmHost() {
6
6
  return hasHost("confirm");
7
7
  }
8
- export function nextConfirmId() {
8
+ export function enqueueDialog(request) {
9
9
  counter += 1;
10
- return counter;
10
+ confirmQueue.push({ ...request, id: counter });
11
+ }
12
+ export function nativeDialogMessage(options) {
13
+ return [options.title, options.description].filter(Boolean).join("\n\n");
11
14
  }
12
15
  export function cancelRequest(request) {
13
16
  if (request.kind === "confirm") request.resolve(false);
@@ -1,6 +1,7 @@
1
1
  import type { Ref } from 'vue';
2
2
  import type { DialogBeforeClose, DialogCloseReason } from '../../components/overlays/types';
3
3
  export declare const modalStack: import("vue").ShallowReactive<HTMLDialogElement[]>;
4
+ export declare function releaseModal(dialog: HTMLDialogElement | null | undefined): void;
4
5
  export interface ModalDialogOptions {
5
6
  dialog: Readonly<Ref<HTMLDialogElement | null | undefined>>;
6
7
  panel: Readonly<Ref<HTMLElement | null | undefined>>;
@@ -1,8 +1,9 @@
1
1
  import { nextTick, onBeforeUnmount, onMounted, ref, shallowReactive, watch } from "vue";
2
2
  import { useScrollLock } from "../../composables/useScrollLock.mjs";
3
+ import { activeElement, hasFocusWithin, isFocusLost } from "../core/focus.mjs";
3
4
  import { waitForAnimations } from "../floating/support.mjs";
4
5
  export const modalStack = shallowReactive([]);
5
- function release(dialog) {
6
+ export function releaseModal(dialog) {
6
7
  const index = dialog ? modalStack.indexOf(dialog) : -1;
7
8
  if (index !== -1) modalStack.splice(index, 1);
8
9
  }
@@ -46,14 +47,14 @@ export function useModalDialog(options) {
46
47
  const dialog = options.dialog.value;
47
48
  if (!dialog || !options.open.value) return;
48
49
  if (dialog.open) return;
49
- returnTarget = document.activeElement instanceof HTMLElement ? document.activeElement : null;
50
+ returnTarget = activeElement();
50
51
  try {
51
52
  dialog.showModal();
52
53
  } catch {
53
54
  dialog.setAttribute("open", "");
54
55
  }
55
56
  scrollLock.lock();
56
- release(dialog);
57
+ releaseModal(dialog);
57
58
  modalStack.push(dialog);
58
59
  if (!dialog.querySelector("[autofocus]")) options.panel.value?.focus({ preventScroll: true });
59
60
  options.onOpen?.();
@@ -65,14 +66,13 @@ export function useModalDialog(options) {
65
66
  present.value = false;
66
67
  return;
67
68
  }
68
- const active = document.activeElement;
69
- const focusInside = active instanceof Node && dialog.contains(active);
70
- release(dialog);
69
+ const focusInside = hasFocusWithin(dialog);
70
+ releaseModal(dialog);
71
71
  if (dialog.open) dialog.close();
72
72
  const target = returnTarget;
73
73
  returnTarget = null;
74
- const lost = focusInside || !document.activeElement || document.activeElement === document.body || dialog.contains(document.activeElement);
75
- if (lost && target?.isConnected) target.focus({ preventScroll: true });
74
+ if ((focusInside || isFocusLost(dialog)) && target?.isConnected)
75
+ target.focus({ preventScroll: true });
76
76
  options.onClose?.();
77
77
  waitForAnimations(dialog).then(() => {
78
78
  if (options.open.value) return;
@@ -86,7 +86,7 @@ export function useModalDialog(options) {
86
86
  });
87
87
  onBeforeUnmount(() => {
88
88
  const dialog = options.dialog.value;
89
- release(dialog);
89
+ releaseModal(dialog);
90
90
  if (dialog?.open) dialog.close();
91
91
  if (returnTarget?.isConnected) returnTarget.focus({ preventScroll: true });
92
92
  });
@@ -9,6 +9,7 @@ export interface HoverTriggerOptions {
9
9
  closeDelay: () => number;
10
10
  enabled: () => boolean;
11
11
  warmup?: boolean;
12
+ touch?: boolean;
12
13
  }
13
14
  export declare function useHoverTrigger(options: HoverTriggerOptions): {
14
15
  scheduleOpen: () => void;
@@ -1,4 +1,5 @@
1
1
  import { onBeforeUnmount, watch } from "vue";
2
+ import { isClient } from "../core/env.mjs";
2
3
  let lastClosedAt = 0;
3
4
  const WARM_WINDOW = 400;
4
5
  export function useHoverTrigger(options) {
@@ -51,9 +52,24 @@ export function useHoverTrigger(options) {
51
52
  if (next && (attached?.contains(next) || attachedFloating?.contains(next))) return;
52
53
  scheduleClose();
53
54
  }
54
- function onPointerDown() {
55
+ let suppressClick = false;
56
+ function onPointerDown(event) {
57
+ if (options.touch && event.pointerType === "touch" && !options.isOpen.value) {
58
+ if (!options.enabled()) return;
59
+ clearTimers();
60
+ suppressClick = true;
61
+ setTimeout(() => suppressClick = false, 800);
62
+ options.show();
63
+ return;
64
+ }
55
65
  scheduleClose(true);
56
66
  }
67
+ function onClick(event) {
68
+ if (!suppressClick) return;
69
+ suppressClick = false;
70
+ event.preventDefault();
71
+ event.stopPropagation();
72
+ }
57
73
  function onKeydown(event) {
58
74
  if (event.key !== "Escape" || !options.isOpen.value) return;
59
75
  event.preventDefault();
@@ -69,6 +85,7 @@ export function useHoverTrigger(options) {
69
85
  element.addEventListener("focusin", onFocusIn);
70
86
  element.addEventListener("focusout", onFocusOut);
71
87
  element.addEventListener("pointerdown", onPointerDown);
88
+ element.addEventListener("click", onClick, true);
72
89
  element.addEventListener("keydown", onKeydown);
73
90
  }
74
91
  function detach(element) {
@@ -77,6 +94,7 @@ export function useHoverTrigger(options) {
77
94
  element.removeEventListener("focusin", onFocusIn);
78
95
  element.removeEventListener("focusout", onFocusOut);
79
96
  element.removeEventListener("pointerdown", onPointerDown);
97
+ element.removeEventListener("click", onClick, true);
80
98
  element.removeEventListener("keydown", onKeydown);
81
99
  }
82
100
  function attachFloating(element) {
@@ -122,8 +140,7 @@ export function useHoverTrigger(options) {
122
140
  clearTimers();
123
141
  if (attached) detach(attached);
124
142
  if (attachedFloating) detachFloating(attachedFloating);
125
- if (typeof document !== "undefined")
126
- document.removeEventListener("keydown", onDocumentKeydown);
143
+ if (isClient()) document.removeEventListener("keydown", onDocumentKeydown);
127
144
  });
128
145
  return { scheduleOpen, scheduleClose, clearTimers };
129
146
  }
@@ -3,3 +3,12 @@ export interface MenuRootContext {
3
3
  close: () => void;
4
4
  }
5
5
  export declare const MENU_ROOT_KEY: InjectionKey<MenuRootContext>;
6
+ export type MenuFocusTarget = 'first' | 'last' | 'menu' | 'none';
7
+ export interface MenuHandle {
8
+ show: (focus?: MenuFocusTarget, source?: HTMLElement | null) => void;
9
+ setPendingFocus: (focus: MenuFocusTarget) => void;
10
+ }
11
+ export declare function menuTriggerHandlers(menu: () => MenuHandle | null | undefined, source: () => HTMLElement | null | undefined, firstKeys?: readonly string[]): {
12
+ onKeydown: (event: KeyboardEvent) => void;
13
+ onPointerDown: (event: PointerEvent) => void;
14
+ };
@@ -1 +1,16 @@
1
1
  export const MENU_ROOT_KEY = Symbol("k-menu-root");
2
+ export function menuTriggerHandlers(menu, source, firstKeys = ["ArrowDown"]) {
3
+ function onKeydown(event) {
4
+ const focus = firstKeys.includes(event.key) ? "first" : event.key === "ArrowUp" ? "last" : void 0;
5
+ if (focus) {
6
+ event.preventDefault();
7
+ menu()?.show(focus, source());
8
+ return;
9
+ }
10
+ if (event.key === "Enter" || event.key === " ") menu()?.setPendingFocus("first");
11
+ }
12
+ function onPointerDown(event) {
13
+ menu()?.setPendingFocus(event.pointerType === "mouse" ? "menu" : "first");
14
+ }
15
+ return { onKeydown, onPointerDown };
16
+ }
@@ -5,6 +5,7 @@ export interface OverlayOptions {
5
5
  as?: OverlayKind;
6
6
  title?: string;
7
7
  description?: string;
8
+ label?: string;
8
9
  size?: ModalSize | DrawerSize;
9
10
  side?: DrawerSide;
10
11
  sheet?: boolean;
@@ -23,7 +23,12 @@ export const en = {
23
23
  retry: "Try again",
24
24
  unsavedChanges: "Unsaved changes",
25
25
  somethingWentWrong: "Something went wrong",
26
- selected: "{count} selected"
26
+ selected: "{count} selected",
27
+ removeItem: "Remove {label}",
28
+ opensInNewTab: "(opens in a new tab)",
29
+ copyFailed: "Could not copy",
30
+ readonly: "Read only",
31
+ empty: "Empty"
27
32
  },
28
33
  form: {
29
34
  required: "This field is required",
@@ -34,7 +39,8 @@ export const en = {
34
39
  minItems: "Select at least {count} item | Select at least {count} items",
35
40
  maxItems: "Select at most {count} item | Select at most {count} items",
36
41
  pattern: "Invalid format",
37
- invalid: "Invalid value"
42
+ invalid: "Invalid value",
43
+ requiredHint: "(required)"
38
44
  },
39
45
  editor: {
40
46
  bold: "Bold",
@@ -52,7 +58,9 @@ export const en = {
52
58
  linkUrl: "Link URL",
53
59
  applyLink: "Apply",
54
60
  removeLink: "Remove link",
55
- characters: "{count} character | {count} characters"
61
+ characters: "{count} character | {count} characters",
62
+ limit: "{count} of {max} characters",
63
+ limitReached: "Character limit reached"
56
64
  },
57
65
  grid: {
58
66
  noRows: "No rows to show",
@@ -70,7 +78,20 @@ export const en = {
70
78
  selected: "{count} selected",
71
79
  copied: "Copied to clipboard",
72
80
  yes: "Yes",
73
- no: "No"
81
+ no: "No",
82
+ label: "Data grid",
83
+ rowCount: "No rows | {count} row | {count} rows",
84
+ checked: "checked",
85
+ unchecked: "not checked",
86
+ indeterminate: "partially checked",
87
+ selectRowHint: "Press Space to select this row",
88
+ deselectRowHint: "Press Space to deselect this row",
89
+ toggleRowHint: "Press Space to select or deselect the row",
90
+ rowSelectionDisabled: "This row cannot be selected",
91
+ selectAllHint: "Press Space to select or deselect all rows",
92
+ selectAllRows: "Select all rows",
93
+ sortHint: "Press Enter to sort",
94
+ tooltip: "Tooltip"
74
95
  },
75
96
  account: {
76
97
  label: "Account"
@@ -95,22 +116,26 @@ export const en = {
95
116
  offline: "offline"
96
117
  },
97
118
  avatarGroup: {
98
- more: "more"
119
+ more: "{count} more"
99
120
  },
100
121
  breadcrumbs: {
101
122
  label: "Breadcrumb"
102
123
  },
103
124
  calendar: {
104
125
  previousMonth: "Previous month",
105
- nextMonth: "Next month"
126
+ nextMonth: "Next month",
127
+ rangeStart: "range start",
128
+ rangeEnd: "range end"
106
129
  },
107
130
  chart: {
108
131
  empty: "No data to show",
109
- loading: "Loading chart"
132
+ loading: "Loading chart",
133
+ legend: "Legend"
110
134
  },
111
135
  colorInput: {
112
136
  pick: "Pick a color",
113
- swatches: "Preset colors"
137
+ swatches: "Preset colors",
138
+ invalid: "Enter a hex color like #3366ff"
114
139
  },
115
140
  combobox: {
116
141
  clear: "Clear selection",
@@ -144,7 +169,8 @@ export const en = {
144
169
  placeholder: "Pick a date",
145
170
  clear: "Clear date",
146
171
  dialog: "Choose date",
147
- range: "{start} to {end}"
172
+ range: "{start} to {end}",
173
+ rangePending: "{start} - ..."
148
174
  },
149
175
  descriptionList: {
150
176
  empty: "Not set"
@@ -192,7 +218,8 @@ export const en = {
192
218
  mixedTitle: "Drop files or folders here or click to browse",
193
219
  browseDirectory: "Upload a folder",
194
220
  loading: "Uploading",
195
- added: "{count} file added | {count} files added"
221
+ added: "{count} file added | {count} files added",
222
+ rejected: "{count} file was not accepted | {count} files were not accepted"
196
223
  },
197
224
  filterPills: {
198
225
  label: "Filters"
@@ -201,7 +228,8 @@ export const en = {
201
228
  toolbar: "Filter results",
202
229
  emptyTitle: "Nothing here yet",
203
230
  noResultsDescription: "Try a different search or clear the filters.",
204
- clearFilters: "Clear filters"
231
+ clearFilters: "Clear filters",
232
+ results: "No results | {count} result | {count} results"
205
233
  },
206
234
  numberInput: {
207
235
  increase: "Increase",
@@ -209,7 +237,7 @@ export const en = {
209
237
  },
210
238
  pagination: {
211
239
  label: "Pagination",
212
- page: "Page",
240
+ page: "Page {page}",
213
241
  previous: "Previous page",
214
242
  next: "Next page",
215
243
  pageSize: "Rows per page",
@@ -266,18 +294,25 @@ export const en = {
266
294
  sidebar: "Sidebar",
267
295
  openNavigation: "Open navigation",
268
296
  skipToContent: "Skip to content",
269
- main: "Main",
270
- collapse: "Collapse sidebar",
271
- expand: "Expand sidebar"
297
+ main: "Primary",
298
+ closeNavigation: "Close navigation",
299
+ navigation: "Navigation"
272
300
  },
273
301
  stat: {
274
302
  increased: "Increased by",
275
- decreased: "Decreased by"
303
+ decreased: "Decreased by",
304
+ favorable: "favorable",
305
+ unfavorable: "unfavorable"
276
306
  },
277
307
  table: {
278
308
  selectAll: "Select all rows",
279
309
  loading: "Loading rows",
280
- selectRow: "Select row {index}"
310
+ selectRow: "Select row {index}",
311
+ label: "Table",
312
+ sortedBy: "Sorted by {column}, {direction}",
313
+ ascending: "ascending",
314
+ descending: "descending",
315
+ sortCleared: "Sorting removed"
281
316
  },
282
317
  theme: {
283
318
  label: "Theme",
@@ -296,7 +331,24 @@ export const en = {
296
331
  reorderHint: "Press Alt with the up or down arrow to move",
297
332
  reorderNestedHint: "Press Alt with the arrow keys to move: up and down change the position, left and right change the level",
298
333
  moved: "{label} moved to position {position} of {count}",
299
- movedInto: "{label} moved into {parent}, position {position} of {count}"
334
+ movedInto: "{label} moved into {parent}, position {position} of {count}",
335
+ moveUp: "Move {label} up",
336
+ moveDown: "Move {label} down",
337
+ indent: "Indent {label}",
338
+ outdent: "Outdent {label}"
339
+ },
340
+ meter: {
341
+ label: "Meter",
342
+ valueText: "{value}, {state}",
343
+ good: "good",
344
+ fair: "fair",
345
+ poor: "poor"
346
+ },
347
+ tone: {
348
+ danger: "Error",
349
+ warning: "Warning",
350
+ info: "Information",
351
+ success: "Success"
300
352
  }
301
353
  }
302
354
  };
@@ -11,6 +11,6 @@ export interface DefineLocaleOptions {
11
11
  base?: KLocale;
12
12
  }
13
13
  export declare function defineLocale(options: DefineLocaleOptions): KLocale;
14
- export declare function resolveBuiltinLocale(code: string | undefined): KLocale;
15
14
  export declare function formatLocaleMessage(code: string, template: string, params?: MessageParams): string;
16
15
  export declare function translate(locale: KLocale, key: MessageKey, params?: MessageParams): string;
16
+ export declare function translateOr(locale: KLocale, template: string | undefined, key: MessageKey, params?: MessageParams): string;
@@ -1,3 +1,4 @@
1
+ import { pluralRules } from "../internal/core/intl.mjs";
1
2
  import { formatMessage } from "../internal/core/text.mjs";
2
3
  import { en } from "./en.mjs";
3
4
  import { it } from "./it.mjs";
@@ -21,19 +22,9 @@ export function defineLocale(options) {
21
22
  messages: mergeMessages(base.messages, options.messages)
22
23
  };
23
24
  }
24
- export function resolveBuiltinLocale(code) {
25
- if (!code) return en;
26
- return builtinLocales[code] ?? builtinLocales[code.split("-")[0]] ?? en;
27
- }
28
- const pluralRules = /* @__PURE__ */ new Map();
29
25
  function pluralForm(code, forms, count) {
30
26
  if (forms.length === 3 && count === 0) return forms[0];
31
- let rules = pluralRules.get(code);
32
- if (!rules) {
33
- rules = new Intl.PluralRules(code);
34
- pluralRules.set(code, rules);
35
- }
36
- const one = rules.select(count) === "one";
27
+ const one = pluralRules(code).select(count) === "one";
37
28
  const singular = forms.length === 3 ? forms[1] : forms[0];
38
29
  return one ? singular : forms[forms.length - 1];
39
30
  }
@@ -48,3 +39,6 @@ export function translate(locale, key, params = {}) {
48
39
  const template = locale.messages[group][name] ?? key;
49
40
  return formatLocaleMessage(locale.code, template, params);
50
41
  }
42
+ export function translateOr(locale, template, key, params = {}) {
43
+ return template ? formatLocaleMessage(locale.code, template, params) : translate(locale, key, params);
44
+ }