@nuxt/ui 3.2.0 → 3.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (185) hide show
  1. package/.nuxt/ui/button.ts +42 -42
  2. package/.nuxt/ui/command-palette.ts +2 -1
  3. package/.nuxt/ui/drawer.ts +1 -1
  4. package/.nuxt/ui/file-upload.ts +290 -0
  5. package/.nuxt/ui/index.ts +1 -0
  6. package/.nuxt/ui/input.ts +1 -1
  7. package/.nuxt/ui/kbd.ts +167 -3
  8. package/.nuxt/ui/select.ts +7 -7
  9. package/.nuxt/ui/table.ts +8 -0
  10. package/.nuxt/ui/tabs.ts +4 -2
  11. package/.nuxt/ui/textarea.ts +1 -1
  12. package/.nuxt/ui/toast.ts +8 -15
  13. package/.nuxt/ui/tooltip.ts +1 -1
  14. package/cli/templates.mjs +8 -3
  15. package/dist/module.d.mts +15 -1
  16. package/dist/module.json +2 -2
  17. package/dist/module.mjs +3 -3
  18. package/dist/runtime/components/Accordion.vue.d.ts +1 -1
  19. package/dist/runtime/components/Alert.vue.d.ts +2 -2
  20. package/dist/runtime/components/App.vue.d.ts +1 -1
  21. package/dist/runtime/components/Avatar.vue.d.ts +1 -1
  22. package/dist/runtime/components/AvatarGroup.vue.d.ts +1 -1
  23. package/dist/runtime/components/Badge.vue.d.ts +1 -1
  24. package/dist/runtime/components/Breadcrumb.vue.d.ts +1 -1
  25. package/dist/runtime/components/Button.vue +6 -6
  26. package/dist/runtime/components/Button.vue.d.ts +1 -5
  27. package/dist/runtime/components/ButtonGroup.vue.d.ts +1 -1
  28. package/dist/runtime/components/Calendar.vue.d.ts +1 -1
  29. package/dist/runtime/components/Card.vue.d.ts +1 -1
  30. package/dist/runtime/components/Carousel.vue +18 -14
  31. package/dist/runtime/components/Carousel.vue.d.ts +1 -1
  32. package/dist/runtime/components/Checkbox.vue.d.ts +1 -1
  33. package/dist/runtime/components/CheckboxGroup.vue.d.ts +1 -1
  34. package/dist/runtime/components/Chip.vue.d.ts +2 -2
  35. package/dist/runtime/components/Collapsible.vue.d.ts +1 -1
  36. package/dist/runtime/components/ColorPicker.vue +1 -2
  37. package/dist/runtime/components/ColorPicker.vue.d.ts +1 -1
  38. package/dist/runtime/components/CommandPalette.vue +4 -0
  39. package/dist/runtime/components/CommandPalette.vue.d.ts +6 -1
  40. package/dist/runtime/components/Container.vue.d.ts +1 -1
  41. package/dist/runtime/components/ContextMenu.vue.d.ts +1 -1
  42. package/dist/runtime/components/ContextMenuContent.vue +5 -3
  43. package/dist/runtime/components/ContextMenuContent.vue.d.ts +1 -1
  44. package/dist/runtime/components/Drawer.vue +4 -4
  45. package/dist/runtime/components/Drawer.vue.d.ts +6 -1
  46. package/dist/runtime/components/DropdownMenu.vue.d.ts +1 -1
  47. package/dist/runtime/components/DropdownMenuContent.vue +5 -3
  48. package/dist/runtime/components/DropdownMenuContent.vue.d.ts +8 -5
  49. package/dist/runtime/components/FileUpload.vue +248 -0
  50. package/dist/runtime/components/FileUpload.vue.d.ts +167 -0
  51. package/dist/runtime/components/Form.vue +3 -3
  52. package/dist/runtime/components/Form.vue.d.ts +6 -5
  53. package/dist/runtime/components/FormField.vue +2 -2
  54. package/dist/runtime/components/FormField.vue.d.ts +4 -4
  55. package/dist/runtime/components/Icon.vue.d.ts +1 -1
  56. package/dist/runtime/components/Input.vue +10 -7
  57. package/dist/runtime/components/Input.vue.d.ts +9 -9
  58. package/dist/runtime/components/InputMenu.vue +25 -13
  59. package/dist/runtime/components/InputMenu.vue.d.ts +16 -221
  60. package/dist/runtime/components/InputNumber.vue +3 -2
  61. package/dist/runtime/components/InputNumber.vue.d.ts +7 -81
  62. package/dist/runtime/components/InputTags.vue +2 -0
  63. package/dist/runtime/components/InputTags.vue.d.ts +7 -5
  64. package/dist/runtime/components/Kbd.vue +2 -1
  65. package/dist/runtime/components/Kbd.vue.d.ts +5 -1
  66. package/dist/runtime/components/Link.vue +6 -5
  67. package/dist/runtime/components/Link.vue.d.ts +1 -3
  68. package/dist/runtime/components/LinkBase.vue.d.ts +1 -1
  69. package/dist/runtime/components/Modal.vue.d.ts +2 -2
  70. package/dist/runtime/components/NavigationMenu.vue +3 -2
  71. package/dist/runtime/components/NavigationMenu.vue.d.ts +1 -1
  72. package/dist/runtime/components/OverlayProvider.vue.d.ts +1 -1
  73. package/dist/runtime/components/Pagination.vue.d.ts +1 -1
  74. package/dist/runtime/components/PinInput.vue +3 -1
  75. package/dist/runtime/components/PinInput.vue.d.ts +5 -5
  76. package/dist/runtime/components/Popover.vue +2 -1
  77. package/dist/runtime/components/Popover.vue.d.ts +8 -2
  78. package/dist/runtime/components/Progress.vue.d.ts +1 -1
  79. package/dist/runtime/components/RadioGroup.vue +1 -1
  80. package/dist/runtime/components/RadioGroup.vue.d.ts +5 -4
  81. package/dist/runtime/components/Select.vue +16 -6
  82. package/dist/runtime/components/Select.vue.d.ts +3 -3
  83. package/dist/runtime/components/SelectMenu.vue +18 -10
  84. package/dist/runtime/components/SelectMenu.vue.d.ts +3 -3
  85. package/dist/runtime/components/Separator.vue.d.ts +1 -1
  86. package/dist/runtime/components/Skeleton.vue.d.ts +1 -1
  87. package/dist/runtime/components/Slideover.vue.d.ts +2 -2
  88. package/dist/runtime/components/Slider.vue.d.ts +5 -5
  89. package/dist/runtime/components/Stepper.vue.d.ts +1 -1
  90. package/dist/runtime/components/Switch.vue.d.ts +1 -1
  91. package/dist/runtime/components/Table.vue +83 -8
  92. package/dist/runtime/components/Table.vue.d.ts +20 -4
  93. package/dist/runtime/components/Tabs.vue +12 -2
  94. package/dist/runtime/components/Tabs.vue.d.ts +8 -3
  95. package/dist/runtime/components/Textarea.vue +10 -7
  96. package/dist/runtime/components/Textarea.vue.d.ts +10 -9
  97. package/dist/runtime/components/Timeline.vue.d.ts +1 -1
  98. package/dist/runtime/components/Toast.vue +12 -4
  99. package/dist/runtime/components/Toast.vue.d.ts +14 -13
  100. package/dist/runtime/components/Toaster.vue.d.ts +1 -1
  101. package/dist/runtime/components/Tooltip.vue +4 -3
  102. package/dist/runtime/components/Tooltip.vue.d.ts +8 -2
  103. package/dist/runtime/components/Tree.vue +31 -28
  104. package/dist/runtime/components/Tree.vue.d.ts +2 -1
  105. package/dist/runtime/composables/defineShortcuts.js +5 -3
  106. package/dist/runtime/composables/useAvatarGroup.d.ts +1 -1
  107. package/dist/runtime/composables/useComponentIcons.d.ts +1 -1
  108. package/dist/runtime/composables/useFileUpload.d.ts +19 -0
  109. package/dist/runtime/composables/useFileUpload.js +69 -0
  110. package/dist/runtime/composables/useFormField.d.ts +3 -6
  111. package/dist/runtime/composables/useFormField.js +5 -2
  112. package/dist/runtime/composables/useKbd.d.ts +1 -1
  113. package/dist/runtime/composables/useLocale.js +2 -2
  114. package/dist/runtime/composables/useOverlay.d.ts +29 -2
  115. package/dist/runtime/composables/useOverlay.js +8 -7
  116. package/dist/runtime/composables/usePortal.d.ts +1 -1
  117. package/dist/runtime/inertia/components/Link.vue.d.ts +1 -1
  118. package/dist/runtime/inertia/components/LinkBase.vue.d.ts +1 -1
  119. package/dist/runtime/inertia/stubs.d.ts +1 -0
  120. package/dist/runtime/inertia/stubs.js +4 -2
  121. package/dist/runtime/locale/ar.js +5 -1
  122. package/dist/runtime/locale/az.js +4 -0
  123. package/dist/runtime/locale/bg.js +4 -0
  124. package/dist/runtime/locale/bn.js +4 -0
  125. package/dist/runtime/locale/ca.js +4 -0
  126. package/dist/runtime/locale/ckb.js +5 -1
  127. package/dist/runtime/locale/cs.js +4 -0
  128. package/dist/runtime/locale/da.js +4 -0
  129. package/dist/runtime/locale/de.js +4 -0
  130. package/dist/runtime/locale/el.js +4 -0
  131. package/dist/runtime/locale/en.js +4 -0
  132. package/dist/runtime/locale/es.js +4 -0
  133. package/dist/runtime/locale/et.js +4 -0
  134. package/dist/runtime/locale/fa_ir.js +4 -0
  135. package/dist/runtime/locale/fi.js +4 -0
  136. package/dist/runtime/locale/fr.js +4 -0
  137. package/dist/runtime/locale/he.js +4 -0
  138. package/dist/runtime/locale/hi.js +5 -1
  139. package/dist/runtime/locale/hu.js +4 -0
  140. package/dist/runtime/locale/hy.js +4 -0
  141. package/dist/runtime/locale/id.js +4 -0
  142. package/dist/runtime/locale/it.js +4 -0
  143. package/dist/runtime/locale/ja.js +4 -0
  144. package/dist/runtime/locale/kk.js +4 -0
  145. package/dist/runtime/locale/km.js +5 -1
  146. package/dist/runtime/locale/ko.js +4 -0
  147. package/dist/runtime/locale/ky.js +4 -0
  148. package/dist/runtime/locale/lb.js +4 -0
  149. package/dist/runtime/locale/lt.js +4 -0
  150. package/dist/runtime/locale/mn.js +4 -0
  151. package/dist/runtime/locale/ms.js +4 -0
  152. package/dist/runtime/locale/nb_no.js +4 -0
  153. package/dist/runtime/locale/nl.js +4 -0
  154. package/dist/runtime/locale/pl.js +4 -0
  155. package/dist/runtime/locale/pt.js +4 -0
  156. package/dist/runtime/locale/pt_br.js +4 -0
  157. package/dist/runtime/locale/ro.js +4 -0
  158. package/dist/runtime/locale/ru.js +4 -0
  159. package/dist/runtime/locale/sk.js +4 -0
  160. package/dist/runtime/locale/sl.js +4 -0
  161. package/dist/runtime/locale/sv.js +4 -0
  162. package/dist/runtime/locale/th.js +4 -0
  163. package/dist/runtime/locale/tj.js +4 -0
  164. package/dist/runtime/locale/tr.js +4 -0
  165. package/dist/runtime/locale/ug_cn.js +4 -0
  166. package/dist/runtime/locale/uk.js +4 -0
  167. package/dist/runtime/locale/ur.js +4 -0
  168. package/dist/runtime/locale/uz.js +4 -0
  169. package/dist/runtime/locale/vi.js +4 -0
  170. package/dist/runtime/locale/zh_cn.js +4 -0
  171. package/dist/runtime/locale/zh_tw.js +4 -0
  172. package/dist/runtime/types/index.d.ts +1 -0
  173. package/dist/runtime/types/index.js +1 -0
  174. package/dist/runtime/types/locale.d.ts +4 -0
  175. package/dist/runtime/utils/index.d.ts +6 -0
  176. package/dist/runtime/utils/index.js +27 -0
  177. package/dist/runtime/vue/components/Icon.vue.d.ts +1 -1
  178. package/dist/runtime/vue/components/Link.vue.d.ts +1 -1
  179. package/dist/runtime/vue/stubs.d.ts +1 -0
  180. package/dist/runtime/vue/stubs.js +3 -1
  181. package/dist/shared/{ui.BPVxSPGY.mjs → ui.BTUFJHYJ.mjs} +299 -36
  182. package/dist/unplugin.d.mts +2 -0
  183. package/dist/unplugin.mjs +6 -3
  184. package/dist/vite.mjs +1 -1
  185. package/package.json +31 -27
@@ -10,6 +10,7 @@ import { useAppConfig } from "#imports";
10
10
  import { get } from "../utils";
11
11
  import { tv } from "../utils/tv";
12
12
  import UIcon from "./Icon.vue";
13
+ defineOptions({ inheritAttrs: false });
13
14
  const props = defineProps({
14
15
  as: { type: null, required: false },
15
16
  color: { type: null, required: false },
@@ -72,35 +73,37 @@ const defaultExpanded = computed(
72
73
  @toggle="item.onToggle"
73
74
  @select="item.onSelect"
74
75
  >
75
- <button :disabled="item.disabled || disabled" :class="ui.link({ class: [props.ui?.link, item.ui?.link, item.class], selected: isSelected, disabled: item.disabled || disabled })">
76
- <slot :name="item.slot || 'item'" v-bind="{ index, level, expanded: isExpanded, selected: isSelected }" :item="item">
77
- <slot :name="item.slot ? `${item.slot}-leading` : 'item-leading'" v-bind="{ index, level, expanded: isExpanded, selected: isSelected }" :item="item">
78
- <UIcon
79
- v-if="item.icon"
80
- :name="item.icon"
81
- :class="ui.linkLeadingIcon({ class: [props.ui?.linkLeadingIcon, item.ui?.linkLeadingIcon] })"
82
- />
83
- <UIcon
84
- v-else-if="item.children?.length"
85
- :name="isExpanded ? expandedIcon ?? appConfig.ui.icons.folderOpen : collapsedIcon ?? appConfig.ui.icons.folder"
86
- :class="ui.linkLeadingIcon({ class: [props.ui?.linkLeadingIcon, item.ui?.linkLeadingIcon] })"
87
- />
88
- </slot>
89
-
90
- <span v-if="getItemLabel(item) || !!slots[item.slot ? `${item.slot}-label` : 'item-label']" :class="ui.linkLabel({ class: [props.ui?.linkLabel, item.ui?.linkLabel] })">
91
- <slot :name="item.slot ? `${item.slot}-label` : 'item-label'" v-bind="{ item, index, level, expanded: isExpanded, selected: isSelected }" :item="item">
92
- {{ getItemLabel(item) }}
76
+ <slot :name="item.slot ? `${item.slot}-wrapper` : 'item-wrapper'" v-bind="{ item, index, level, expanded: isExpanded, selected: isSelected }" :item="item">
77
+ <button type="button" :disabled="item.disabled || disabled" :class="ui.link({ class: [props.ui?.link, item.ui?.link, item.class], selected: isSelected, disabled: item.disabled || disabled })">
78
+ <slot :name="item.slot || 'item'" v-bind="{ index, level, expanded: isExpanded, selected: isSelected }" :item="item">
79
+ <slot :name="item.slot ? `${item.slot}-leading` : 'item-leading'" v-bind="{ index, level, expanded: isExpanded, selected: isSelected }" :item="item">
80
+ <UIcon
81
+ v-if="item.icon"
82
+ :name="item.icon"
83
+ :class="ui.linkLeadingIcon({ class: [props.ui?.linkLeadingIcon, item.ui?.linkLeadingIcon] })"
84
+ />
85
+ <UIcon
86
+ v-else-if="item.children?.length"
87
+ :name="isExpanded ? expandedIcon ?? appConfig.ui.icons.folderOpen : collapsedIcon ?? appConfig.ui.icons.folder"
88
+ :class="ui.linkLeadingIcon({ class: [props.ui?.linkLeadingIcon, item.ui?.linkLeadingIcon] })"
89
+ />
93
90
  </slot>
94
- </span>
95
91
 
96
- <span v-if="item.trailingIcon || item.children?.length || !!slots[item.slot ? `${item.slot}-trailing` : 'item-trailing']" :class="ui.linkTrailing({ class: [props.ui?.linkTrailing, item.ui?.linkTrailing] })">
97
- <slot :name="item.slot ? `${item.slot}-trailing` : 'item-trailing'" v-bind="{ item, index, level, expanded: isExpanded, selected: isSelected }" :item="item">
98
- <UIcon v-if="item.trailingIcon" :name="item.trailingIcon" :class="ui.linkTrailingIcon({ class: [props.ui?.linkTrailingIcon, item.ui?.linkTrailingIcon] })" />
99
- <UIcon v-else-if="item.children?.length" :name="trailingIcon ?? appConfig.ui.icons.chevronDown" :class="ui.linkTrailingIcon({ class: [props.ui?.linkTrailingIcon, item.ui?.linkTrailingIcon] })" />
100
- </slot>
101
- </span>
102
- </slot>
103
- </button>
92
+ <span v-if="getItemLabel(item) || !!slots[item.slot ? `${item.slot}-label` : 'item-label']" :class="ui.linkLabel({ class: [props.ui?.linkLabel, item.ui?.linkLabel] })">
93
+ <slot :name="item.slot ? `${item.slot}-label` : 'item-label'" v-bind="{ item, index, level, expanded: isExpanded, selected: isSelected }" :item="item">
94
+ {{ getItemLabel(item) }}
95
+ </slot>
96
+ </span>
97
+
98
+ <span v-if="item.trailingIcon || item.children?.length || !!slots[item.slot ? `${item.slot}-trailing` : 'item-trailing']" :class="ui.linkTrailing({ class: [props.ui?.linkTrailing, item.ui?.linkTrailing] })">
99
+ <slot :name="item.slot ? `${item.slot}-trailing` : 'item-trailing'" v-bind="{ item, index, level, expanded: isExpanded, selected: isSelected }" :item="item">
100
+ <UIcon v-if="item.trailingIcon" :name="item.trailingIcon" :class="ui.linkTrailingIcon({ class: [props.ui?.linkTrailingIcon, item.ui?.linkTrailingIcon] })" />
101
+ <UIcon v-else-if="item.children?.length" :name="trailingIcon ?? appConfig.ui.icons.chevronDown" :class="ui.linkTrailingIcon({ class: [props.ui?.linkTrailingIcon, item.ui?.linkTrailingIcon] })" />
102
+ </slot>
103
+ </span>
104
+ </slot>
105
+ </button>
106
+ </slot>
104
107
 
105
108
  <ul v-if="item.children?.length && isExpanded" :class="ui.listWithChildren({ class: [props.ui?.listWithChildren, item.ui?.listWithChildren] })">
106
109
  <ReuseTreeTemplate :items="item.children" :level="level + 1" />
@@ -110,7 +113,7 @@ const defaultExpanded = computed(
110
113
  </DefineTreeTemplate>
111
114
 
112
115
  <TreeRoot
113
- v-bind="rootProps"
116
+ v-bind="{ ...rootProps, ...$attrs }"
114
117
  :class="ui.root({ class: [props.ui?.root, props.class] })"
115
118
  :get-key="getItemValue"
116
119
  :default-expanded="defaultExpanded"
@@ -85,6 +85,7 @@ type SlotProps<T extends TreeItem> = (props: {
85
85
  selected: boolean;
86
86
  }) => any;
87
87
  export type TreeSlots<A extends TreeItem[] = TreeItem[], T extends NestedItem<A> = NestedItem<A>> = {
88
+ 'item-wrapper': SlotProps<T>;
88
89
  'item': SlotProps<T>;
89
90
  'item-leading': SlotProps<T>;
90
91
  'item-label': SlotProps<T>;
@@ -109,5 +110,5 @@ declare const _default: <T extends TreeItem[], VK extends GetItemKeys<T> = "valu
109
110
  };
110
111
  export default _default;
111
112
  type __VLS_PrettifyLocal<T> = {
112
- [K in keyof T]: T[K];
113
+ [K in keyof T as K]: T[K];
113
114
  } & {};
@@ -3,6 +3,7 @@ import { useEventListener, useActiveElement, useDebounceFn } from "@vueuse/core"
3
3
  import { useKbd } from "./useKbd.js";
4
4
  const chainedShortcutRegex = /^[^-]+.*-.*[^-]+$/;
5
5
  const combinedShortcutRegex = /^[^_]+.*_.*[^_]+$/;
6
+ const shiftableKeys = ["arrowleft", "arrowright", "arrowup", "arrowright", "tab", "escape", "enter", "backspace"];
6
7
  export function extractShortcuts(items) {
7
8
  const shortcuts = {};
8
9
  function traverse(items2) {
@@ -34,7 +35,8 @@ export function defineShortcuts(config, options = {}) {
34
35
  if (!e.key) {
35
36
  return;
36
37
  }
37
- const alphabeticalKey = /^[a-z]{1}$/i.test(e.key);
38
+ const alphabetKey = /^[a-z]{1}$/i.test(e.key);
39
+ const shiftableKey = shiftableKeys.includes(e.key.toLowerCase());
38
40
  let chainedKey;
39
41
  chainedInputs.value.push(e.key);
40
42
  if (chainedInputs.value.length >= 2) {
@@ -61,12 +63,12 @@ export function defineShortcuts(config, options = {}) {
61
63
  if (e.ctrlKey !== shortcut.ctrlKey) {
62
64
  continue;
63
65
  }
64
- if (alphabeticalKey && e.shiftKey !== shortcut.shiftKey) {
66
+ if ((alphabetKey || shiftableKey) && e.shiftKey !== shortcut.shiftKey) {
65
67
  continue;
66
68
  }
67
69
  if (shortcut.enabled) {
68
70
  e.preventDefault();
69
- shortcut.handler();
71
+ shortcut.handler(e);
70
72
  }
71
73
  clearChainedInput();
72
74
  return;
@@ -1,4 +1,4 @@
1
- import { type ComputedRef, type InjectionKey } from 'vue';
1
+ import type { ComputedRef, InjectionKey } from 'vue';
2
2
  import type { AvatarGroupProps } from '../types';
3
3
  export declare const avatarGroupInjectionKey: InjectionKey<ComputedRef<{
4
4
  size: AvatarGroupProps['size'];
@@ -1,4 +1,4 @@
1
- import { type MaybeRefOrGetter } from 'vue';
1
+ import type { MaybeRefOrGetter } from 'vue';
2
2
  import type { AvatarProps } from '../types';
3
3
  export interface UseComponentIconsProps {
4
4
  /**
@@ -0,0 +1,19 @@
1
+ import type { MaybeRef } from '@vueuse/core';
2
+ export interface UseFileUploadOptions {
3
+ /**
4
+ * Specifies the allowed file types. Provide a comma-separated list of MIME types or file extensions.
5
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Attributes/accept
6
+ * @defaultValue '*'
7
+ */
8
+ accept?: MaybeRef<string>;
9
+ reset?: boolean;
10
+ multiple?: boolean;
11
+ dropzone?: boolean;
12
+ onUpdate: (files: File[]) => void;
13
+ }
14
+ export declare function useFileUpload(options: UseFileUploadOptions): {
15
+ isDragging: import("vue").Ref<boolean, boolean>;
16
+ open: () => void;
17
+ inputRef: import("vue").Ref<HTMLInputElement | undefined, HTMLInputElement | undefined>;
18
+ dropzoneRef: import("vue").Ref<HTMLDivElement | undefined, HTMLDivElement | undefined>;
19
+ };
@@ -0,0 +1,69 @@
1
+ import { ref, computed, unref, onMounted, watch, reactive } from "vue";
2
+ import { useFileDialog, useDropZone } from "@vueuse/core";
3
+ function parseAcceptToDataTypes(accept) {
4
+ if (!accept || accept === "*") {
5
+ return void 0;
6
+ }
7
+ const types = accept.split(",").map((type) => {
8
+ const trimmedType = type.trim();
9
+ if (trimmedType.includes("/") && trimmedType.endsWith("/*")) {
10
+ return trimmedType.split("/")[0] || trimmedType;
11
+ }
12
+ return trimmedType;
13
+ }).filter((type) => {
14
+ return !type.startsWith(".");
15
+ });
16
+ return types.length > 0 ? types : void 0;
17
+ }
18
+ export function useFileUpload(options) {
19
+ const {
20
+ accept = "*",
21
+ reset = false,
22
+ multiple = false,
23
+ dropzone = true,
24
+ onUpdate
25
+ } = options;
26
+ const inputRef = ref();
27
+ const dropzoneRef = ref();
28
+ const dataTypes = computed(() => parseAcceptToDataTypes(unref(accept)));
29
+ const onDrop = (files) => {
30
+ if (!files || files.length === 0) {
31
+ return;
32
+ }
33
+ if (files instanceof FileList) {
34
+ files = Array.from(files);
35
+ }
36
+ if (files.length > 1 && !multiple) {
37
+ files = [files[0]];
38
+ }
39
+ onUpdate(files);
40
+ };
41
+ const isDragging = ref(false);
42
+ const fileDialog = reactive({
43
+ open: () => {
44
+ }
45
+ });
46
+ function open() {
47
+ fileDialog.open();
48
+ }
49
+ onMounted(() => {
50
+ const { isOverDropZone } = dropzone ? useDropZone(dropzoneRef, { dataTypes: dataTypes.value, onDrop }) : { isOverDropZone: ref(false) };
51
+ watch(isOverDropZone, (value) => {
52
+ isDragging.value = value;
53
+ });
54
+ const { onChange, open: open2 } = useFileDialog({
55
+ accept: unref(accept),
56
+ multiple,
57
+ input: unref(inputRef),
58
+ reset
59
+ });
60
+ fileDialog.open = open2;
61
+ onChange((fileList) => onDrop(fileList));
62
+ });
63
+ return {
64
+ isDragging,
65
+ open,
66
+ inputRef,
67
+ dropzoneRef
68
+ };
69
+ }
@@ -1,5 +1,5 @@
1
- import { type InjectionKey, type Ref, type ComputedRef } from 'vue';
2
- import { type UseEventBusReturn } from '@vueuse/core';
1
+ import type { InjectionKey, Ref, ComputedRef } from 'vue';
2
+ import type { UseEventBusReturn } from '@vueuse/core';
3
3
  import type { FormFieldProps } from '../types';
4
4
  import type { FormEvent, FormFieldInjectedOptions, FormInjectedOptions } from '../types/form';
5
5
  import type { GetObjectField } from '../types/utils';
@@ -34,9 +34,6 @@ export declare function useFormField<T>(props?: Props<T>, opts?: {
34
34
  emitFormInput: import("@vueuse/shared").UseDebounceFnReturn<() => void>;
35
35
  emitFormChange: () => void;
36
36
  emitFormFocus: () => void;
37
- ariaAttrs: ComputedRef<{
38
- 'aria-describedby': string;
39
- 'aria-invalid': boolean;
40
- } | undefined>;
37
+ ariaAttrs: ComputedRef<Record<string, any> | undefined>;
41
38
  };
42
39
  export {};
@@ -57,10 +57,13 @@ export function useFormField(props, opts) {
57
57
  ariaAttrs: computed(() => {
58
58
  if (!formField?.value) return;
59
59
  const descriptiveAttrs = ["error", "hint", "description", "help"].filter((type) => formField?.value?.[type]).map((type) => `${formField?.value.ariaId}-${type}`) || [];
60
- return {
61
- "aria-describedby": descriptiveAttrs.join(" "),
60
+ const attrs = {
62
61
  "aria-invalid": !!formField?.value.error
63
62
  };
63
+ if (descriptiveAttrs.length > 0) {
64
+ attrs["aria-describedby"] = descriptiveAttrs.join(" ");
65
+ }
66
+ return attrs;
64
67
  })
65
68
  };
66
69
  }
@@ -30,7 +30,7 @@ export declare const kbdKeysMap: {
30
30
  export type KbdKey = keyof typeof kbdKeysMap;
31
31
  export type KbdKeySpecific = keyof KbdKeysSpecificMap;
32
32
  export declare const useKbd: () => {
33
- macOS: import("vue").ComputedRef<false | "" | RegExpMatchArray | null | undefined>;
33
+ macOS: import("vue").ComputedRef<false | "" | RegExpMatchArray | null>;
34
34
  getKbdKey: (value?: KbdKey | string) => string | undefined;
35
35
  };
36
36
  export {};
@@ -4,7 +4,7 @@ import { buildLocaleContext } from "../utils/locale.js";
4
4
  import en from "../locale/en.js";
5
5
  export const localeContextInjectionKey = Symbol.for("nuxt-ui.locale-context");
6
6
  const _useLocale = (localeOverrides) => {
7
- const locale = localeOverrides || toRef(inject(localeContextInjectionKey));
7
+ const locale = localeOverrides || toRef(inject(localeContextInjectionKey, en));
8
8
  return buildLocaleContext(computed(() => locale.value || en));
9
9
  };
10
- export const useLocale = /* @__PURE__ */ createSharedComposable(_useLocale);
10
+ export const useLocale = import.meta.client ? createSharedComposable(_useLocale) : _useLocale;
@@ -1,6 +1,33 @@
1
1
  import type { Component } from 'vue';
2
2
  import type { ComponentProps, ComponentEmit } from 'vue-component-type-helpers';
3
- type CloseEventArgType<T> = T extends (event: 'close', args_0: infer R) => void ? R : never;
3
+ /**
4
+ * This is a workaround for a design limitation in TypeScript.
5
+ *
6
+ * Conditional types only match the last function overload, not a union of all possible
7
+ * parameter types. This workaround forces TypeScript to properly extract the 'close'
8
+ * event argument type from component emits with multiple event signatures.
9
+ *
10
+ * @see https://github.com/microsoft/TypeScript/issues/32164
11
+ */
12
+ type CloseEventArgType<T> = T extends {
13
+ (event: 'close', arg_0: infer Arg, ...args: any[]): void;
14
+ (...args: any[]): void;
15
+ (...args: any[]): void;
16
+ (...args: any[]): void;
17
+ (...args: any[]): void;
18
+ (...args: any[]): void;
19
+ (...args: any[]): void;
20
+ (...args: any[]): void;
21
+ (...args: any[]): void;
22
+ (...args: any[]): void;
23
+ (...args: any[]): void;
24
+ (...args: any[]): void;
25
+ (...args: any[]): void;
26
+ (...args: any[]): void;
27
+ (...args: any[]): void;
28
+ (...args: any[]): void;
29
+ (...args: any[]): void;
30
+ } ? Arg : never;
4
31
  export type OverlayOptions<OverlayAttrs = Record<string, any>> = {
5
32
  defaultOpen?: boolean;
6
33
  props?: OverlayAttrs;
@@ -23,7 +50,7 @@ type OverlayInstance<T extends Component> = Omit<ManagedOverlayOptionsPrivate<T>
23
50
  };
24
51
  type OpenedOverlay<T extends Component> = Omit<OverlayInstance<T>, 'open' | 'close' | 'patch' | 'modelValue' | 'resolvePromise'> & {
25
52
  result: Promise<CloseEventArgType<ComponentEmit<T>>>;
26
- };
53
+ } & Promise<CloseEventArgType<ComponentEmit<T>>>;
27
54
  declare function _useOverlay(): {
28
55
  overlays: import("vue").ShallowReactive<Overlay[]>;
29
56
  open: <T extends Component>(id: symbol, props?: ComponentProps<T>) => OpenedOverlay<T>;
@@ -11,7 +11,7 @@ function _useOverlay() {
11
11
  isMounted: !!defaultOpen,
12
12
  destroyOnClose: !!destroyOnClose,
13
13
  originalProps: props || {},
14
- props: { ...props || {} }
14
+ props: { ...props }
15
15
  });
16
16
  overlays.push(options);
17
17
  return {
@@ -24,18 +24,19 @@ function _useOverlay() {
24
24
  const open = (id, props) => {
25
25
  const overlay = getOverlay(id);
26
26
  if (props) {
27
- patch(overlay.id, props);
27
+ overlay.props = { ...overlay.originalProps, ...props };
28
28
  } else {
29
- patch(overlay.id, overlay.originalProps);
29
+ overlay.props = { ...overlay.originalProps };
30
30
  }
31
31
  overlay.isOpen = true;
32
32
  overlay.isMounted = true;
33
- return {
33
+ const result = new Promise((resolve) => overlay.resolvePromise = resolve);
34
+ return Object.assign(result, {
34
35
  id,
35
36
  isMounted: overlay.isMounted,
36
37
  isOpen: overlay.isOpen,
37
- result: new Promise((resolve) => overlay.resolvePromise = resolve)
38
- };
38
+ result
39
+ });
39
40
  };
40
41
  const close = (id, value) => {
41
42
  const overlay = getOverlay(id);
@@ -58,7 +59,7 @@ function _useOverlay() {
58
59
  };
59
60
  const patch = (id, props) => {
60
61
  const overlay = getOverlay(id);
61
- overlay.props = { ...props };
62
+ overlay.props = { ...overlay.props, ...props };
62
63
  };
63
64
  const getOverlay = (id) => {
64
65
  const overlay = overlays.find((overlay2) => overlay2.id === id);
@@ -1,4 +1,4 @@
1
- import { type Ref, type InjectionKey } from 'vue';
1
+ import type { Ref, InjectionKey } from 'vue';
2
2
  export declare const portalTargetInjectionKey: InjectionKey<Ref<string | HTMLElement>>;
3
3
  export declare function usePortal(portal: Ref<string | HTMLElement | boolean | undefined>): import("vue").ComputedRef<{
4
4
  to: string | HTMLElement;
@@ -48,7 +48,7 @@ export interface LinkSlots {
48
48
  active: boolean;
49
49
  }): any;
50
50
  }
51
- declare const _default: __VLS_WithSlots<import("vue").DefineComponent<LinkProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<LinkProps> & Readonly<{}>, {
51
+ declare const _default: __VLS_WithSlots<import("vue").DefineComponent<LinkProps, void, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<LinkProps> & Readonly<{}>, {
52
52
  type: "reset" | "submit" | "button";
53
53
  as: any;
54
54
  activeClass: string;
@@ -9,7 +9,7 @@ export interface LinkBaseProps {
9
9
  active?: boolean;
10
10
  isExternal?: boolean;
11
11
  }
12
- declare const _default: __VLS_WithSlots<import("vue").DefineComponent<LinkBaseProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<LinkBaseProps> & Readonly<{}>, {
12
+ declare const _default: __VLS_WithSlots<import("vue").DefineComponent<LinkBaseProps, void, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<LinkBaseProps> & Readonly<{}>, {
13
13
  type: string;
14
14
  as: string;
15
15
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
@@ -9,6 +9,7 @@ export declare const useRoute: () => {
9
9
  fullPath: string;
10
10
  };
11
11
  export declare const useRouter: () => void;
12
+ export declare const clearError: () => void;
12
13
  export declare const useColorMode: () => {
13
14
  forced: boolean;
14
15
  preference?: undefined;
@@ -1,8 +1,8 @@
1
1
  import { ref, onScopeDispose } from "vue";
2
2
  import { createHooks } from "hookable";
3
- import appConfig from "#build/app.config";
4
- import { useColorMode as useColorModeVueUse } from "@vueuse/core";
5
3
  import { usePage } from "@inertiajs/vue3";
4
+ import { useColorMode as useColorModeVueUse } from "@vueuse/core";
5
+ import appConfig from "#build/app.config";
6
6
  export { useHead } from "@unhead/vue";
7
7
  export { useAppConfig } from "../vue/composables/useAppConfig.js";
8
8
  export { defineShortcuts } from "../composables/defineShortcuts.js";
@@ -16,6 +16,8 @@ export const useRoute = () => {
16
16
  };
17
17
  export const useRouter = () => {
18
18
  };
19
+ export const clearError = () => {
20
+ };
19
21
  export const useColorMode = () => {
20
22
  if (!appConfig.colorMode) {
21
23
  return {
@@ -38,7 +38,8 @@ export default defineLocale({
38
38
  carousel: {
39
39
  prev: "\u0627\u0644\u0633\u0627\u0628\u0642",
40
40
  next: "\u0627\u0644\u062A\u0627\u0644\u064A",
41
- goto: "\u0627\u0644\u0630\u0647\u0627\u0628 \u0625\u0644\u064A \u0634\u0631\u064A\u062D\u0629 {slide}"
41
+ dots: "\u0627\u062E\u062A\u0631 \u0627\u0644\u0634\u0631\u064A\u062D\u0629 \u0627\u0644\u0645\u0631\u0627\u062F \u0639\u0631\u0636\u0647\u0627",
42
+ goto: "\u0627\u0644\u0630\u0647\u0627\u0628 \u0625\u0644\u0649 \u0634\u0631\u064A\u062D\u0629 {slide}"
42
43
  },
43
44
  modal: {
44
45
  close: "\u0625\u063A\u0644\u0627\u0642"
@@ -51,6 +52,9 @@ export default defineLocale({
51
52
  },
52
53
  table: {
53
54
  noData: "\u0644\u0627 \u062A\u0648\u062C\u062F \u0628\u064A\u0627\u0646\u0627\u062A"
55
+ },
56
+ fileUpload: {
57
+ removeFile: "\u0625\u0632\u0627\u0644\u0629 {filename}"
54
58
  }
55
59
  }
56
60
  });
@@ -37,6 +37,7 @@ export default defineLocale({
37
37
  carousel: {
38
38
  prev: "\u018Fvv\u0259lki",
39
39
  next: "N\xF6vb\u0259ti",
40
+ dots: "G\xF6st\u0259rm\u0259k \xFC\xE7\xFCn slayd se\xE7in",
40
41
  goto: "Slayd {slide} ke\xE7"
41
42
  },
42
43
  modal: {
@@ -50,6 +51,9 @@ export default defineLocale({
50
51
  },
51
52
  table: {
52
53
  noData: "M\u0259lumat yoxdur"
54
+ },
55
+ fileUpload: {
56
+ removeFile: "{filename} sil"
53
57
  }
54
58
  }
55
59
  });
@@ -37,6 +37,7 @@ export default defineLocale({
37
37
  carousel: {
38
38
  prev: "\u041D\u0430\u0437\u0430\u0434",
39
39
  next: "\u041D\u0430\u043F\u0440\u0435\u0434",
40
+ dots: "\u0418\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u0441\u043B\u0430\u0439\u0434 \u0437\u0430 \u043F\u043E\u043A\u0430\u0437\u0432\u0430\u043D\u0435",
40
41
  goto: "\u041E\u0442\u0438\u0434\u0435\u0442\u0435 \u043D\u0430 \u0441\u043B\u0430\u0439\u0434 {slide}"
41
42
  },
42
43
  modal: {
@@ -50,6 +51,9 @@ export default defineLocale({
50
51
  },
51
52
  table: {
52
53
  noData: "\u041D\u044F\u043C\u0430 \u0434\u0430\u043D\u043D\u0438"
54
+ },
55
+ fileUpload: {
56
+ removeFile: "\u041F\u0440\u0435\u043C\u0430\u0445\u043D\u0438 {filename}"
53
57
  }
54
58
  }
55
59
  });
@@ -37,6 +37,7 @@ export default defineLocale({
37
37
  carousel: {
38
38
  prev: "\u09AA\u09C2\u09B0\u09CD\u09AC\u09AC\u09B0\u09CD\u09A4\u09C0",
39
39
  next: "\u09AA\u09B0\u09AC\u09B0\u09CD\u09A4\u09C0",
40
+ dots: "\u09AA\u09CD\u09B0\u09A6\u09B0\u09CD\u09B6\u09A8\u09C7\u09B0 \u099C\u09A8\u09CD\u09AF \u09B8\u09CD\u09B2\u09BE\u0987\u09A1 \u09A8\u09BF\u09B0\u09CD\u09AC\u09BE\u099A\u09A8 \u0995\u09B0\u09C1\u09A8",
40
41
  goto: "\u09B8\u09CD\u09B2\u09BE\u0987\u09A1 {slide} \u098F \u09AF\u09BE\u09A8"
41
42
  },
42
43
  modal: {
@@ -50,6 +51,9 @@ export default defineLocale({
50
51
  },
51
52
  table: {
52
53
  noData: "\u0995\u09CB\u09A8 \u09A4\u09A5\u09CD\u09AF \u09A8\u09C7\u0987"
54
+ },
55
+ fileUpload: {
56
+ removeFile: "{filename} \u09B8\u09B0\u09BE\u09A8"
53
57
  }
54
58
  }
55
59
  });
@@ -37,6 +37,7 @@ export default defineLocale({
37
37
  carousel: {
38
38
  prev: "Anterior",
39
39
  next: "Seg\xFCent",
40
+ dots: "Tria la diapositiva a mostrar",
40
41
  goto: "Anar a la diapositiva {slide}"
41
42
  },
42
43
  modal: {
@@ -50,6 +51,9 @@ export default defineLocale({
50
51
  },
51
52
  table: {
52
53
  noData: "Sense dades"
54
+ },
55
+ fileUpload: {
56
+ removeFile: "Eliminar {filename}"
53
57
  }
54
58
  }
55
59
  });
@@ -36,8 +36,9 @@ export default defineLocale({
36
36
  close: "\u062F\u0627\u062E\u0633\u062A\u0646"
37
37
  },
38
38
  carousel: {
39
- prev: "\u067E\u06CE\u0634\u0648\u0648",
39
+ prev: "\u067E\u06CE\u0634\u0648\u0648\u06CC",
40
40
  next: "\u062F\u0627\u0647\u0627\u062A\u0648\u0648",
41
+ dots: "\u0633\u0644\u0627\u06CC\u062F\u06CE\u06A9 \u0647\u06D5\u06B5\u0628\u0698\u06CE\u0631\u06D5 \u0628\u06C6 \u067E\u06CC\u0634\u0627\u0646\u062F\u0627\u0646",
41
42
  goto: "\u0628\u0695\u06C6 \u0628\u06C6 \u0633\u0644\u0627\u06CC\u062F\u06CC {slide}"
42
43
  },
43
44
  modal: {
@@ -51,6 +52,9 @@ export default defineLocale({
51
52
  },
52
53
  table: {
53
54
  noData: "\u0647\u06CC\u0686 \u062F\u0627\u062A\u0627\u06CC\u06D5\u06A9 \u0646\u06CC\u06CC\u06D5"
55
+ },
56
+ fileUpload: {
57
+ removeFile: "{filename} \u0628\u0633\u0695\u06D5\u0648\u06D5"
54
58
  }
55
59
  }
56
60
  });
@@ -37,6 +37,7 @@ export default defineLocale({
37
37
  carousel: {
38
38
  prev: "P\u0159edchoz\xED",
39
39
  next: "Dal\u0161\xED",
40
+ dots: "Vyberte sn\xEDmek k zobrazen\xED",
40
41
  goto: "P\u0159ej\xEDt na {slide}"
41
42
  },
42
43
  modal: {
@@ -50,6 +51,9 @@ export default defineLocale({
50
51
  },
51
52
  table: {
52
53
  noData: "\u017D\xE1dn\xE1 data"
54
+ },
55
+ fileUpload: {
56
+ removeFile: "Odebrat {filename}"
53
57
  }
54
58
  }
55
59
  });
@@ -37,6 +37,7 @@ export default defineLocale({
37
37
  carousel: {
38
38
  prev: "Forrige",
39
39
  next: "N\xE6ste",
40
+ dots: "V\xE6lg dias til visning",
40
41
  goto: "G\xE5 til slide {slide}"
41
42
  },
42
43
  modal: {
@@ -50,6 +51,9 @@ export default defineLocale({
50
51
  },
51
52
  table: {
52
53
  noData: "Ingen data"
54
+ },
55
+ fileUpload: {
56
+ removeFile: "Fjern {filename}"
53
57
  }
54
58
  }
55
59
  });
@@ -37,6 +37,7 @@ export default defineLocale({
37
37
  carousel: {
38
38
  prev: "Zur\xFCck",
39
39
  next: "Weiter",
40
+ dots: "Folie zur Anzeige ausw\xE4hlen",
40
41
  goto: "Gehe zu {slide}"
41
42
  },
42
43
  modal: {
@@ -50,6 +51,9 @@ export default defineLocale({
50
51
  },
51
52
  table: {
52
53
  noData: "Keine Daten"
54
+ },
55
+ fileUpload: {
56
+ removeFile: "{filename} entfernen"
53
57
  }
54
58
  }
55
59
  });
@@ -37,6 +37,7 @@ export default defineLocale({
37
37
  carousel: {
38
38
  prev: "\u03A0\u03C1\u03BF\u03B7\u03B3\u03BF\u03CD\u03BC\u03B5\u03BD\u03BF",
39
39
  next: "\u0395\u03C0\u03CC\u03BC\u03B5\u03BD\u03BF",
40
+ dots: "\u0395\u03C0\u03B9\u03BB\u03AD\u03BE\u03C4\u03B5 \u03B4\u03B9\u03B1\u03C6\u03AC\u03BD\u03B5\u03B9\u03B1 \u03B3\u03B9\u03B1 \u03B5\u03BC\u03C6\u03AC\u03BD\u03B9\u03C3\u03B7",
40
41
  goto: "\u039C\u03B5\u03C4\u03AC\u03B2\u03B1\u03C3\u03B7 \u03C3\u03C4\u03B7 \u03B4\u03B9\u03B1\u03C6\u03AC\u03BD\u03B5\u03B9\u03B1 {slide}"
41
42
  },
42
43
  modal: {
@@ -50,6 +51,9 @@ export default defineLocale({
50
51
  },
51
52
  table: {
52
53
  noData: "\u0394\u03B5\u03BD \u03C5\u03C0\u03AC\u03C1\u03C7\u03BF\u03C5\u03BD \u03B4\u03B5\u03B4\u03BF\u03BC\u03AD\u03BD\u03B1"
54
+ },
55
+ fileUpload: {
56
+ removeFile: "\u0391\u03C6\u03B1\u03AF\u03C1\u03B5\u03C3\u03B7 {filename}"
53
57
  }
54
58
  }
55
59
  });
@@ -37,6 +37,7 @@ export default defineLocale({
37
37
  carousel: {
38
38
  prev: "Prev",
39
39
  next: "Next",
40
+ dots: "Choose slide to display",
40
41
  goto: "Go to slide {slide}"
41
42
  },
42
43
  modal: {
@@ -50,6 +51,9 @@ export default defineLocale({
50
51
  },
51
52
  table: {
52
53
  noData: "No data"
54
+ },
55
+ fileUpload: {
56
+ removeFile: "Remove {filename}"
53
57
  }
54
58
  }
55
59
  });