@nuxt/ui 4.10.0 → 4.11.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 (117) hide show
  1. package/.nuxt/ui.static.css +11 -11
  2. package/README.md +1 -0
  3. package/cli/commands/make/locale.mjs +40 -11
  4. package/cli/templates.mjs +2 -2
  5. package/dist/module.d.mts +1 -1
  6. package/dist/module.json +2 -2
  7. package/dist/module.mjs +5 -2
  8. package/dist/runtime/components/AuthForm.d.vue.ts +7 -7
  9. package/dist/runtime/components/AuthForm.vue.d.ts +7 -7
  10. package/dist/runtime/components/Button.vue +11 -2
  11. package/dist/runtime/components/Carousel.d.vue.ts +6 -6
  12. package/dist/runtime/components/Carousel.vue.d.ts +6 -6
  13. package/dist/runtime/components/ChatMessages.d.vue.ts +2 -2
  14. package/dist/runtime/components/ChatMessages.vue.d.ts +2 -2
  15. package/dist/runtime/components/ChatPromptSubmit.d.vue.ts +2 -2
  16. package/dist/runtime/components/ChatPromptSubmit.vue.d.ts +2 -2
  17. package/dist/runtime/components/Checkbox.d.vue.ts +1 -1
  18. package/dist/runtime/components/Checkbox.vue +12 -6
  19. package/dist/runtime/components/Checkbox.vue.d.ts +1 -1
  20. package/dist/runtime/components/CheckboxGroup.d.vue.ts +6 -0
  21. package/dist/runtime/components/CheckboxGroup.vue +10 -4
  22. package/dist/runtime/components/CheckboxGroup.vue.d.ts +6 -0
  23. package/dist/runtime/components/Editor.vue +4 -1
  24. package/dist/runtime/components/Error.d.vue.ts +1 -1
  25. package/dist/runtime/components/Error.vue.d.ts +1 -1
  26. package/dist/runtime/components/FileUpload.vue +17 -10
  27. package/dist/runtime/components/Form.vue +1 -1
  28. package/dist/runtime/components/Input.vue +12 -7
  29. package/dist/runtime/components/InputDate.vue +12 -8
  30. package/dist/runtime/components/InputMenu.vue +25 -11
  31. package/dist/runtime/components/InputNumber.vue +22 -14
  32. package/dist/runtime/components/InputRating.vue +10 -7
  33. package/dist/runtime/components/InputTags.vue +12 -7
  34. package/dist/runtime/components/InputTime.vue +12 -7
  35. package/dist/runtime/components/Link.vue +61 -7
  36. package/dist/runtime/components/Listbox.vue +10 -6
  37. package/dist/runtime/components/Modal.vue +12 -5
  38. package/dist/runtime/components/NavigationMenu.vue +10 -10
  39. package/dist/runtime/components/PinInput.vue +13 -8
  40. package/dist/runtime/components/Popover.vue +0 -1
  41. package/dist/runtime/components/PricingTable.d.vue.ts +1 -1
  42. package/dist/runtime/components/PricingTable.vue.d.ts +1 -1
  43. package/dist/runtime/components/Progress.d.vue.ts +2 -1
  44. package/dist/runtime/components/Progress.vue +5 -6
  45. package/dist/runtime/components/Progress.vue.d.ts +2 -1
  46. package/dist/runtime/components/ProgressGroup.d.vue.ts +91 -0
  47. package/dist/runtime/components/ProgressGroup.vue +99 -0
  48. package/dist/runtime/components/ProgressGroup.vue.d.ts +91 -0
  49. package/dist/runtime/components/RadioGroup.d.vue.ts +7 -1
  50. package/dist/runtime/components/RadioGroup.vue +14 -5
  51. package/dist/runtime/components/RadioGroup.vue.d.ts +7 -1
  52. package/dist/runtime/components/Select.d.vue.ts +2 -0
  53. package/dist/runtime/components/Select.vue +23 -8
  54. package/dist/runtime/components/Select.vue.d.ts +2 -0
  55. package/dist/runtime/components/SelectMenu.d.vue.ts +3 -0
  56. package/dist/runtime/components/SelectMenu.vue +35 -14
  57. package/dist/runtime/components/SelectMenu.vue.d.ts +3 -0
  58. package/dist/runtime/components/Slider.vue +15 -8
  59. package/dist/runtime/components/Splitter.d.vue.ts +266 -0
  60. package/dist/runtime/components/Splitter.vue +99 -0
  61. package/dist/runtime/components/Splitter.vue.d.ts +266 -0
  62. package/dist/runtime/components/Switch.vue +8 -4
  63. package/dist/runtime/components/Table.vue +5 -5
  64. package/dist/runtime/components/Textarea.vue +17 -7
  65. package/dist/runtime/components/Theme.d.vue.ts +1 -1
  66. package/dist/runtime/components/Theme.vue +4 -3
  67. package/dist/runtime/components/Theme.vue.d.ts +1 -1
  68. package/dist/runtime/components/Tree.vue +1 -1
  69. package/dist/runtime/components/color-mode/ColorModeSelect.vue +1 -0
  70. package/dist/runtime/components/content/ContentNavigation.vue +8 -1
  71. package/dist/runtime/components/content/ContentToc.vue +4 -1
  72. package/dist/runtime/components/locale/LocaleSelect.vue +1 -0
  73. package/dist/runtime/components/prose/CodeTree.vue +31 -18
  74. package/dist/runtime/composables/useComponentProps.d.ts +1 -1
  75. package/dist/runtime/composables/useComponentProps.js +6 -0
  76. package/dist/runtime/composables/useFormField.d.ts +10 -4
  77. package/dist/runtime/composables/useFormField.js +10 -3
  78. package/dist/runtime/keyframes.css +1 -1
  79. package/dist/runtime/locale/da.js +1 -1
  80. package/dist/runtime/locale/de_at.js +7 -0
  81. package/dist/runtime/locale/de_ch.js +1 -1
  82. package/dist/runtime/locale/eu.js +1 -1
  83. package/dist/runtime/locale/fi.js +1 -1
  84. package/dist/runtime/locale/he.js +1 -1
  85. package/dist/runtime/locale/hi.js +1 -1
  86. package/dist/runtime/locale/index.d.ts +2 -1
  87. package/dist/runtime/locale/index.js +2 -1
  88. package/dist/runtime/locale/is.js +1 -1
  89. package/dist/runtime/locale/lb.js +1 -1
  90. package/dist/runtime/locale/tg.d.ts +3 -0
  91. package/dist/runtime/locale/{tj.js → tg.js} +1 -1
  92. package/dist/runtime/locale/ur.js +1 -1
  93. package/dist/runtime/types/form.d.ts +1 -1
  94. package/dist/runtime/types/html.d.ts +3 -1
  95. package/dist/runtime/types/index.d.ts +2 -0
  96. package/dist/runtime/types/index.js +2 -0
  97. package/dist/runtime/types/theme.d.ts +2 -0
  98. package/dist/runtime/types/tv.d.ts +6 -2
  99. package/dist/runtime/utils/form.d.ts +1 -1
  100. package/dist/runtime/utils/form.js +3 -1
  101. package/dist/runtime/utils/link-keys.d.ts +1 -0
  102. package/dist/runtime/utils/link-keys.js +40 -0
  103. package/dist/runtime/utils/link.d.ts +2 -1
  104. package/dist/runtime/utils/link.js +2 -40
  105. package/dist/runtime/utils/prefetch.d.ts +5 -0
  106. package/dist/runtime/utils/prefetch.js +45 -0
  107. package/dist/runtime/utils/search.js +11 -18
  108. package/dist/runtime/utils/tv.d.ts +1 -1
  109. package/dist/runtime/utils/tv.js +103 -25
  110. package/dist/runtime/vue/components/Icon.vue +5 -2
  111. package/dist/runtime/vue/components/color-mode/ColorModeSelect.vue +1 -0
  112. package/dist/shared/{ui.XkBrgXFP.mjs → ui.DCJ9twx8.mjs} +597 -220
  113. package/dist/unplugin.d.mts +1 -1
  114. package/dist/unplugin.mjs +22 -6
  115. package/dist/vite.mjs +4 -4
  116. package/package.json +54 -53
  117. /package/dist/runtime/locale/{tj.d.ts → de_at.d.ts} +0 -0
@@ -359,7 +359,7 @@ defineExpose({
359
359
  </tr>
360
360
 
361
361
  <tr v-if="row.getIsExpanded()" data-slot="tr" :class="ui.tr({ class: [props.ui?.tr] })">
362
- <td :colspan="row.getAllCells().length" data-slot="td" :class="ui.td({ class: [props.ui?.td] })">
362
+ <td :colspan="row.getVisibleCells().length" data-slot="td" :class="ui.td({ class: [props.ui?.td] })">
363
363
  <slot name="expanded" :row="row" />
364
364
  </td>
365
365
  </tr>
@@ -412,7 +412,7 @@ defineExpose({
412
412
 
413
413
  <template v-if="virtualizer">
414
414
  <tr v-if="virtualPaddingTop > 0" :style="{ height: `${virtualPaddingTop}px` }" aria-hidden="true">
415
- <td :colspan="tableApi.getAllLeafColumns().length" />
415
+ <td :colspan="tableApi.getVisibleLeafColumns().length" />
416
416
  </tr>
417
417
  <template v-for="virtualRow in virtualItems" :key="centerRows[virtualRow.index]?.id ?? `virtual-${virtualRow.index}`">
418
418
  <ReuseRowTemplate
@@ -422,7 +422,7 @@ defineExpose({
422
422
  />
423
423
  </template>
424
424
  <tr v-if="virtualPaddingBottom > 0" :style="{ height: `${virtualPaddingBottom}px` }" aria-hidden="true">
425
- <td :colspan="tableApi.getAllLeafColumns().length" />
425
+ <td :colspan="tableApi.getVisibleLeafColumns().length" />
426
426
  </tr>
427
427
  </template>
428
428
 
@@ -434,13 +434,13 @@ defineExpose({
434
434
  </template>
435
435
 
436
436
  <tr v-else-if="props.loading && !!slots['loading']">
437
- <td :colspan="tableApi.getAllLeafColumns().length" data-slot="loading" :class="ui.loading({ class: props.ui?.loading })">
437
+ <td :colspan="tableApi.getVisibleLeafColumns().length" data-slot="loading" :class="ui.loading({ class: props.ui?.loading })">
438
438
  <slot name="loading" />
439
439
  </td>
440
440
  </tr>
441
441
 
442
442
  <tr v-else>
443
- <td :colspan="tableApi.getAllLeafColumns().length" data-slot="empty" :class="ui.empty({ class: props.ui?.empty })">
443
+ <td :colspan="tableApi.getVisibleLeafColumns().length" data-slot="empty" :class="ui.empty({ class: props.ui?.empty })">
444
444
  <slot name="empty">
445
445
  {{ props.empty || t("table.noData") }}
446
446
  </slot>
@@ -3,7 +3,7 @@ import theme from "#build/ui/textarea";
3
3
  </script>
4
4
 
5
5
  <script setup>
6
- import { useTemplateRef, computed, onMounted, nextTick, watch } from "vue";
6
+ import { useTemplateRef, computed, onMounted, onScopeDispose, nextTick, watch } from "vue";
7
7
  import { Primitive } from "reka-ui";
8
8
  import { useVModel } from "@vueuse/core";
9
9
  import { useAppConfig } from "#imports";
@@ -52,14 +52,18 @@ const slots = defineSlots();
52
52
  const props = useComponentProps("textarea", _props);
53
53
  const modelValue = useVModel(props, "modelValue", emits, { defaultValue: props.defaultValue });
54
54
  const appConfig = useAppConfig();
55
- const { emitFormFocus, emitFormBlur, emitFormInput, emitFormChange, size, color, id, name, highlight, disabled, ariaAttrs } = useFormField(_props, { deferInputValidation: true });
55
+ const { emitFormFocus, emitFormBlur, emitFormInput, emitFormChange, size: formFieldSize, color: formFieldColor, id, name, highlight: formFieldHighlight, disabled: formFieldDisabled, ariaAttrs } = useFormField(_props, { deferInputValidation: true });
56
+ const color = computed(() => formFieldColor.value ?? props.color);
57
+ const highlight = computed(() => formFieldHighlight.value ?? props.highlight);
58
+ const size = computed(() => formFieldSize.value ?? props.size);
59
+ const disabled = computed(() => formFieldDisabled.value ?? props.disabled);
56
60
  const { isLeading, isTrailing, leadingIconName, trailingIconName } = useComponentIcons(props);
57
61
  const ui = computed(() => tv({ extend: theme, ...appConfig.ui?.textarea || {} })({
58
- color: color.value ?? props.color,
62
+ color: color.value,
59
63
  variant: props.variant,
60
- size: size?.value ?? props.size,
64
+ size: size.value,
61
65
  loading: props.loading,
62
- highlight: highlight.value ?? props.highlight,
66
+ highlight: highlight.value,
63
67
  fixed: props.fixed,
64
68
  autoresize: props.autoresize,
65
69
  leading: isLeading.value || !!props.avatar || !!slots.leading,
@@ -129,15 +133,21 @@ function autoResize() {
129
133
  watch(modelValue, () => {
130
134
  nextTick(autoResize);
131
135
  });
136
+ let autofocusTimeoutId;
137
+ let autoresizeTimeoutId;
132
138
  onMounted(() => {
133
- setTimeout(() => {
139
+ autofocusTimeoutId = setTimeout(() => {
134
140
  autoFocus();
135
141
  }, props.autofocusDelay);
136
- setTimeout(async () => {
142
+ autoresizeTimeoutId = setTimeout(async () => {
137
143
  await nextTick();
138
144
  autoResize();
139
145
  }, props.autoresizeDelay);
140
146
  });
147
+ onScopeDispose(() => {
148
+ clearTimeout(autofocusTimeoutId);
149
+ clearTimeout(autoresizeTimeoutId);
150
+ });
141
151
  defineExpose({
142
152
  textareaRef,
143
153
  autoResize
@@ -1,4 +1,4 @@
1
- import { type VNode } from 'vue';
1
+ import type { VNode } from 'vue';
2
2
  import type { ThemeDefaults, ThemeUI } from '../types/theme';
3
3
  export interface ThemeProps {
4
4
  /**
@@ -1,10 +1,11 @@
1
1
  <script>
2
- import { computed } from "vue";
3
- import defu from "defu";
4
- import { injectThemeContext, provideThemeContext } from "../composables/useComponentProps";
2
+
5
3
  </script>
6
4
 
7
5
  <script setup>
6
+ import { computed } from "vue";
7
+ import defu from "defu";
8
+ import { injectThemeContext, provideThemeContext } from "../composables/useComponentProps";
8
9
  const _props = defineProps({
9
10
  props: { type: Object, required: false },
10
11
  ui: { type: null, required: false }
@@ -1,4 +1,4 @@
1
- import { type VNode } from 'vue';
1
+ import type { VNode } from 'vue';
2
2
  import type { ThemeDefaults, ThemeUI } from '../types/theme';
3
3
  export interface ThemeProps {
4
4
  /**
@@ -142,7 +142,7 @@ defineExpose({
142
142
  :disabled="item.disabled || props.disabled"
143
143
  data-slot="link"
144
144
  :class="ui.link({ class: [props.ui?.link, item.ui?.link, item.class], selected: isSelected, disabled: item.disabled || props.disabled })"
145
- :style="!nested && level > 1 ? { paddingLeft: flattenedPaddingFormula(level) } : void 0"
145
+ :style="!nested && level > 1 ? { paddingInlineStart: flattenedPaddingFormula(level) } : void 0"
146
146
  >
147
147
  <slot
148
148
  :name="item.slot || 'item'"
@@ -32,6 +32,7 @@ const props = defineProps({
32
32
  modelModifiers: { type: null, required: false },
33
33
  multiple: { type: Boolean, required: false },
34
34
  highlight: { type: Boolean, required: false },
35
+ fixed: { type: Boolean, required: false },
35
36
  createItem: { type: [Boolean, String, Object], required: false },
36
37
  filterFields: { type: Array, required: false },
37
38
  ignoreFilter: { type: Boolean, required: false },
@@ -106,7 +106,14 @@ const defaultValue = computed(() => {
106
106
  </DefineLinkTemplate>
107
107
 
108
108
  <Primitive :as="props.as" data-slot="root" v-bind="$attrs" :as-child="props.level > 0" :class="ui.root({ class: [props.ui?.root, props.class] })">
109
- <AccordionRoot as="ul" :disabled="disabled" v-bind="rootProps" :default-value="defaultValue" :class="props.level > 0 ? ui.listWithChildren({ class: props.ui?.listWithChildren }) : ui.list({ class: props.ui?.list })">
109
+ <AccordionRoot
110
+ as="ul"
111
+ :disabled="disabled"
112
+ v-bind="rootProps"
113
+ :model-value="disabled ? defaultValue : void 0"
114
+ :default-value="disabled ? void 0 : defaultValue"
115
+ :class="props.level > 0 ? ui.listWithChildren({ class: props.ui?.listWithChildren }) : ui.list({ class: props.ui?.list })"
116
+ >
110
117
  <template v-for="(link, index) in props.navigation" :key="`${index}-${link.path}`">
111
118
  <AccordionItem
112
119
  v-if="link.children?.length"
@@ -76,6 +76,9 @@ const activeIndex = computed(() => {
76
76
  }
77
77
  return flattenLinks(props.links || []).findIndex((link) => activeHeadings.value.includes(link.id));
78
78
  });
79
+ const listStyle = computed(() => ({
80
+ "--list-height": `${flattenLinks(props.links || []).length * linkHeight}rem`
81
+ }));
79
82
  const indicatorStyle = computed(() => {
80
83
  if (!activeHeadings.value?.length) {
81
84
  return;
@@ -219,7 +222,7 @@ onUnmounted(() => {
219
222
  <ReuseTriggerTemplate :open="open" />
220
223
  </p>
221
224
 
222
- <div ref="contentRef" data-slot="content" :class="ui.content({ class: [props.ui?.content, prefix('hidden lg:flex')] })" :style="scrollShadowStyle">
225
+ <div ref="contentRef" data-slot="content" :class="ui.content({ class: [props.ui?.content, prefix('hidden lg:flex')] })" :style="[listStyle, scrollShadowStyle]">
223
226
  <ReuseContentTemplate />
224
227
  </div>
225
228
  </template>
@@ -31,6 +31,7 @@ const props = defineProps({
31
31
  modelModifiers: { type: null, required: false },
32
32
  multiple: { type: Boolean, required: false },
33
33
  highlight: { type: Boolean, required: false },
34
+ fixed: { type: Boolean, required: false },
34
35
  createItem: { type: [Boolean, String, Object], required: false },
35
36
  filterFields: { type: Array, required: false },
36
37
  ignoreFilter: { type: Boolean, required: false },
@@ -3,7 +3,7 @@ import theme from "#build/ui/prose/code-tree";
3
3
  </script>
4
4
 
5
5
  <script setup>
6
- import { computed, watch, onBeforeUpdate, ref } from "vue";
6
+ import { computed, watch, onBeforeUpdate, onMounted, ref } from "vue";
7
7
  import { TreeRoot, TreeItem } from "reka-ui";
8
8
  import { createReusableTemplate } from "@vueuse/core";
9
9
  import { useAppConfig } from "#imports";
@@ -28,7 +28,6 @@ const [DefineTreeTemplate, ReuseTreeTemplate] = createReusableTemplate();
28
28
  const ui = computed(() => tv({ extend: theme, ...appConfig.ui?.prose?.codeTree || {} })());
29
29
  const initialPath = props.modelValue ?? props.defaultValue;
30
30
  const model = ref(initialPath ? { path: initialPath } : void 0);
31
- const lastSelectedItem = ref();
32
31
  watch(model, (value) => {
33
32
  if (value?.path !== props.modelValue) {
34
33
  emits("update:modelValue", value?.path);
@@ -37,12 +36,13 @@ watch(model, (value) => {
37
36
  watch(() => props.modelValue, (value) => {
38
37
  if (value === model.value?.path) return;
39
38
  model.value = value ? { path: value } : void 0;
40
- const pathsToExpand = getExpandedPaths(value);
41
- for (const path of pathsToExpand) {
42
- if (!expanded.value.includes(path)) {
43
- expanded.value.push(path);
39
+ const next = [...expanded.value];
40
+ for (const path of getExpandedPaths(value)) {
41
+ if (!next.includes(path)) {
42
+ next.push(path);
44
43
  }
45
44
  }
45
+ expanded.value = next;
46
46
  });
47
47
  const rerenderCount = ref(1);
48
48
  const flatItems = computed(() => {
@@ -101,21 +101,34 @@ function getExpandedPaths(path) {
101
101
  const parts = path.split("/");
102
102
  return parts.slice(0, -1).map((_, index) => parts.slice(0, index + 1).join("/"));
103
103
  }
104
- const expanded = ref(getExpandedPaths(model.value?.path));
105
- watch(flatItems, (newItems, oldItems) => {
106
- if (!props.expandAll) return;
107
- const newLabels = newItems.map((i) => i.label).join("\n");
108
- const oldLabels = oldItems?.map((i) => i.label).join("\n") ?? "";
109
- if (newLabels !== oldLabels) {
110
- expanded.value = getExpandedPaths();
104
+ const expandedOverride = ref(props.expandAll ? null : getExpandedPaths(model.value?.path));
105
+ const expanded = computed({
106
+ get: () => expandedOverride.value ?? getExpandedPaths(),
107
+ set: (value) => {
108
+ expandedOverride.value = value;
111
109
  }
112
110
  });
113
- watch(model, (value) => {
114
- const item = flatItems.value.find((item2) => value?.path === item2.label);
111
+ watch(() => props.expandAll, (value) => {
112
+ expandedOverride.value = value ? null : getExpandedPaths(model.value?.path);
113
+ });
114
+ onMounted(() => {
115
+ watch(flatItems, (newItems, oldItems) => {
116
+ if (!props.expandAll) return;
117
+ const newLabels = newItems.map((i) => i.label).join("\n");
118
+ const oldLabels = oldItems?.map((i) => i.label).join("\n") ?? "";
119
+ if (newLabels !== oldLabels) {
120
+ expandedOverride.value = null;
121
+ }
122
+ });
123
+ });
124
+ let lastFile;
125
+ const currentFile = computed(() => {
126
+ const item = flatItems.value.find((item2) => model.value?.path === item2.label);
115
127
  if (item?.component) {
116
- lastSelectedItem.value = item;
128
+ lastFile = item;
117
129
  }
118
- }, { immediate: true });
130
+ return lastFile;
131
+ });
119
132
  onBeforeUpdate(() => rerenderCount.value++);
120
133
  </script>
121
134
 
@@ -183,7 +196,7 @@ onBeforeUpdate(() => rerenderCount.value++);
183
196
  </TreeRoot>
184
197
 
185
198
  <div :class="ui.content({ class: props.ui?.content })">
186
- <component :is="lastSelectedItem?.component" />
199
+ <component :is="currentFile?.component" />
187
200
  </div>
188
201
  </div>
189
202
  </template>
@@ -20,7 +20,7 @@ export { provideThemeContext };
20
20
  * defaults. The component's tv() `defaultVariants` are intentionally left out
21
21
  * of the proxy fallback — they continue to drive `tv()`-internal class
22
22
  * resolution (the original semantics) without leaking into prop reads. The
23
- * `ui` prop is deep-merged (explicit slot classes override theme slot classes)
23
+ * `ui` and `class` props are merged (explicit classes override theme classes)
24
24
  * instead of being replaced.
25
25
  */
26
26
  export declare function useComponentProps<T extends object>(name: string, props: T): T;
@@ -37,6 +37,12 @@ export function useComponentProps(name, props) {
37
37
  if (!raw && !themeUi) return raw;
38
38
  return defu(raw ?? {}, themeUi ?? {});
39
39
  }
40
+ if (prop === "class") {
41
+ const themeClass = themeEntry?.class;
42
+ if (themeClass === void 0) return raw;
43
+ if (raw === void 0) return themeClass;
44
+ return [themeClass, raw];
45
+ }
40
46
  if (vm && propIsDefined(vm.vnode, prop)) return raw;
41
47
  const themeValue = themeEntry?.[prop];
42
48
  if (themeValue !== void 0) return themeValue;
@@ -37,10 +37,16 @@ export declare const formErrorsInjectionKey: InjectionKey<Readonly<Ref<FormError
37
37
  * ```ts
38
38
  * size: size.value ?? props.size,
39
39
  * color: color.value ?? props.color,
40
- * highlight: highlight.value ?? props.highlight
40
+ * highlight: highlight.value ?? props.highlight,
41
+ * disabled: disabled.value ?? props.disabled
41
42
  * ```
42
43
  *
43
- * Final precedence: `explicit > FormField > <UTheme :props> > withDefaults > app.config > tv defaults`.
44
+ * `highlight` and `disabled` are Boolean props, which Vue auto-casts to `false`
45
+ * when unset, so they are normalized back to `undefined` here. Otherwise the
46
+ * `??` above would short-circuit on `false` and the proxy would never be read.
47
+ *
48
+ * Final precedence: `explicit > FormField > <UTheme :props> > app.config > withDefaults > tv defaults`,
49
+ * matching what `useComponentProps` resolves.
44
50
  */
45
51
  export declare function useFormField<T>(props?: Props<T>, opts?: {
46
52
  bind?: boolean;
@@ -50,8 +56,8 @@ export declare function useFormField<T>(props?: Props<T>, opts?: {
50
56
  name: ComputedRef<string | undefined>;
51
57
  size: ComputedRef<"xs" | "sm" | "md" | "lg" | "xl" | NonNullable<GetObjectField<T, "size">> | undefined>;
52
58
  color: ComputedRef<"error" | GetObjectField<T, "color"> | undefined>;
53
- highlight: ComputedRef<boolean | undefined>;
54
- disabled: ComputedRef<boolean | undefined>;
59
+ highlight: ComputedRef<true | undefined>;
60
+ disabled: ComputedRef<true | undefined>;
55
61
  emitFormBlur: () => void;
56
62
  emitFormInput: import("@vueuse/shared").UseDebounceFnReturn<() => void>;
57
63
  emitFormChange: () => void;
@@ -1,4 +1,4 @@
1
- import { inject, computed, provide } from "vue";
1
+ import { inject, computed, provide, getCurrentScope, onScopeDispose } from "vue";
2
2
  import { useDebounceFn } from "@vueuse/core";
3
3
  export const formOptionsInjectionKey = Symbol("nuxt-ui.form-options");
4
4
  export const formBusInjectionKey = Symbol("nuxt-ui.form-events");
@@ -35,8 +35,15 @@ export function useFormField(props, opts) {
35
35
  function emitFormChange() {
36
36
  emitFormEvent("change", formField?.value.name);
37
37
  }
38
+ let disposed = false;
39
+ if (getCurrentScope()) {
40
+ onScopeDispose(() => {
41
+ disposed = true;
42
+ });
43
+ }
38
44
  const emitFormInput = useDebounceFn(
39
45
  () => {
46
+ if (disposed) return;
40
47
  emitFormEvent("input", formField?.value.name, !opts?.deferInputValidation || formField?.value.eagerValidation);
41
48
  },
42
49
  formField?.value.validateOnInputDelay ?? formOptions?.value.validateOnInputDelay ?? 0
@@ -46,8 +53,8 @@ export function useFormField(props, opts) {
46
53
  name: computed(() => props?.name ?? formField?.value.name),
47
54
  size: computed(() => props?.size ?? formField?.value.size),
48
55
  color: computed(() => formField?.value.error ? "error" : props?.color),
49
- highlight: computed(() => formField?.value.error ? true : props?.highlight),
50
- disabled: computed(() => formOptions?.value.disabled || props?.disabled),
56
+ highlight: computed(() => formField?.value.error ? true : props?.highlight || void 0),
57
+ disabled: computed(() => formOptions?.value.disabled || props?.disabled || void 0),
51
58
  emitFormBlur,
52
59
  emitFormInput,
53
60
  emitFormChange,
@@ -1 +1 @@
1
- @keyframes accordion-up{0%{height:var(--reka-accordion-content-height);overflow:hidden}to{height:0;overflow:hidden}}@keyframes accordion-down{0%{height:0;overflow:hidden}to{height:var(--reka-accordion-content-height);overflow:hidden}}@keyframes collapsible-up{0%{height:var(--reka-collapsible-content-height);overflow:hidden}to{height:0;overflow:hidden}}@keyframes collapsible-down{0%{height:0;overflow:hidden}to{height:var(--reka-collapsible-content-height);overflow:hidden}}@keyframes toast-slide-in-from-top{0%{transform:translateY(-100%)}to{transform:var(--transform)}}@keyframes toast-slide-in-from-bottom{0%{transform:translateY(100%)}to{transform:var(--transform)}}@keyframes toast-slide-up{0%{transform:translateX(0) translateY(var(--translate))}to{transform:translateX(0) translateY(calc(var(--translate) - 100%))}}@keyframes toast-slide-down{0%{transform:translateX(0) translateY(var(--translate))}to{transform:translateX(0) translateY(calc(var(--translate) + 100%))}}@keyframes toast-pulse-a{0%,to{scale:1}50%{scale:1.04}}@keyframes toast-pulse-b{0%,to{scale:1}50%{scale:1.04}}@keyframes toast-collapsed-closed{0%{transform:var(--transform)}to{transform:translateY(calc((var(--before) - var(--height))*var(--gap))) scale(var(--scale))}}@keyframes toast-closed{0%{transform:var(--transform)}to{transform:translateY(calc((var(--offset) - var(--height))*var(--translate-factor)))}}@keyframes toast-slide-left{0%{transform:translateX(0) translateY(var(--translate))}to{transform:translateX(-100%) translateY(var(--translate))}}@keyframes toast-slide-right{0%{transform:translateX(0) translateY(var(--translate))}to{transform:translateX(100%) translateY(var(--translate))}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}@keyframes fade-out{0%{opacity:1}to{opacity:0}}@keyframes scale-in{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}@keyframes scale-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.95)}}@keyframes slide-in-from-top{0%{transform:translateY(-100%)}to{transform:translateY(0)}}@keyframes slide-out-to-top{0%{transform:translateY(0)}to{transform:translateY(-100%)}}@keyframes slide-in-from-right{0%{transform:translateX(100%)}to{transform:translateX(0)}}@keyframes slide-out-to-right{0%{transform:translateX(0)}to{transform:translateX(100%)}}@keyframes slide-in-from-bottom{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes slide-out-to-bottom{0%{transform:translateY(0)}to{transform:translateY(100%)}}@keyframes slide-in-from-left{0%{transform:translateX(-100%)}to{transform:translateX(0)}}@keyframes slide-out-to-left{0%{transform:translateX(0)}to{transform:translateX(-100%)}}@keyframes slide-in-from-top-and-fade{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}@keyframes slide-out-to-top-and-fade{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-4px)}}@keyframes slide-in-from-right-and-fade{0%{opacity:0;transform:translateX(4px)}to{opacity:1;transform:translateX(0)}}@keyframes slide-out-to-right-and-fade{0%{opacity:1;transform:translateX(0)}to{opacity:0;transform:translateX(4px)}}@keyframes slide-in-from-bottom-and-fade{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}@keyframes slide-out-to-bottom-and-fade{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(4px)}}@keyframes slide-in-from-left-and-fade{0%{opacity:0;transform:translateX(-4px)}to{opacity:1;transform:translateX(0)}}@keyframes slide-out-to-left-and-fade{0%{opacity:1;transform:translateX(0)}to{opacity:0;transform:translateX(-4px)}}@keyframes enter-from-right{0%{opacity:0;transform:translateX(200px)}to{opacity:1;transform:translateX(0)}}@keyframes enter-from-left{0%{opacity:0;transform:translateX(-200px)}to{opacity:1;transform:translateX(0)}}@keyframes exit-to-right{0%{opacity:1;transform:translateX(0)}to{opacity:0;transform:translateX(200px)}}@keyframes exit-to-left{0%{opacity:1;transform:translateX(0)}to{opacity:0;transform:translateX(-200px)}}@keyframes carousel{0%,to{width:50%}0%{transform:translateX(-100%)}to{transform:translateX(200%)}}@keyframes carousel-rtl{0%,to{width:50%}0%{transform:translateX(100%)}to{transform:translateX(-200%)}}@keyframes carousel-vertical{0%,to{height:50%}0%{transform:translateY(-100%)}to{transform:translateY(200%)}}@keyframes carousel-inverse{0%,to{width:50%}0%{transform:translateX(200%)}to{transform:translateX(-100%)}}@keyframes carousel-inverse-rtl{0%,to{width:50%}0%{transform:translateX(-200%)}to{transform:translateX(100%)}}@keyframes carousel-inverse-vertical{0%,to{height:50%}0%{transform:translateY(200%)}to{transform:translateY(-100%)}}@keyframes swing{0%,to{width:50%}0%,to{transform:translateX(-25%)}50%{transform:translateX(125%)}}@keyframes swing-vertical{0%,to{height:50%}0%,to{transform:translateY(-25%)}50%{transform:translateY(125%)}}@keyframes elastic{0%,to{margin-left:25%;width:50%}50%{margin-left:5%;width:90%}}@keyframes elastic-vertical{0%,to{height:50%;margin-top:25%}50%{height:90%;margin-top:5%}}@keyframes marquee{0%{transform:translateZ(0)}to{transform:translate3d(calc(-100% - var(--gap)),0,0)}}@keyframes marquee-rtl{0%{transform:translateZ(0)}to{transform:translate3d(calc(100% + var(--gap)),0,0)}}@keyframes marquee-vertical{0%{transform:translateZ(0)}to{transform:translate3d(0,calc(-100% - var(--gap)),0)}}@keyframes marquee-vertical-rtl{0%{transform:translate3d(0,calc(-100% - var(--gap)),0)}to{transform:translate3d(0,calc(-100%*var(--gap)),0)}}@keyframes shimmer{0%{background-position:100%}to{background-position:0}}@keyframes shimmer-rtl{0%{background-position:0}to{background-position:100%}}
1
+ @keyframes accordion-up{0%{height:var(--reka-accordion-content-height);overflow:hidden}to{height:0;overflow:hidden}}@keyframes accordion-down{0%{height:0;overflow:hidden}to{height:var(--reka-accordion-content-height);overflow:hidden}}@keyframes collapsible-up{0%{height:var(--reka-collapsible-content-height);overflow:hidden}to{height:0;overflow:hidden}}@keyframes collapsible-down{0%{height:0;overflow:hidden}to{height:var(--reka-collapsible-content-height);overflow:hidden}}@keyframes toast-slide-in-from-top{0%{transform:translateY(-100%)}to{transform:var(--transform)}}@keyframes toast-slide-in-from-bottom{0%{transform:translateY(100%)}to{transform:var(--transform)}}@keyframes toast-slide-up{0%{transform:translateX(0) translateY(var(--translate))}to{transform:translateX(0) translateY(calc(var(--translate) - 100%))}}@keyframes toast-slide-down{0%{transform:translateX(0) translateY(var(--translate))}to{transform:translateX(0) translateY(calc(var(--translate) + 100%))}}@keyframes toast-pulse-a{0%,to{scale:1}50%{scale:1.04}}@keyframes toast-pulse-b{0%,to{scale:1}50%{scale:1.04}}@keyframes toast-collapsed-closed{0%{transform:var(--transform)}to{transform:translateY(calc((var(--before) - var(--height))*var(--gap))) scale(var(--scale))}}@keyframes toast-closed{0%{transform:var(--transform)}to{transform:translateY(calc((var(--offset) - var(--height))*var(--translate-factor)))}}@keyframes toast-slide-left{0%{transform:translateX(0) translateY(var(--translate))}to{transform:translateX(-100%) translateY(var(--translate))}}@keyframes toast-slide-right{0%{transform:translateX(0) translateY(var(--translate))}to{transform:translateX(100%) translateY(var(--translate))}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}@keyframes fade-out{0%{opacity:1}to{opacity:0}}@keyframes scale-in{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}@keyframes scale-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.95)}}@keyframes slide-in-from-top{0%{transform:translateY(-100%)}to{transform:translateY(0)}}@keyframes slide-out-to-top{0%{transform:translateY(0)}to{transform:translateY(-100%)}}@keyframes slide-in-from-right{0%{transform:translateX(100%)}to{transform:translateX(0)}}@keyframes slide-out-to-right{0%{transform:translateX(0)}to{transform:translateX(100%)}}@keyframes slide-in-from-bottom{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes slide-out-to-bottom{0%{transform:translateY(0)}to{transform:translateY(100%)}}@keyframes slide-in-from-left{0%{transform:translateX(-100%)}to{transform:translateX(0)}}@keyframes slide-out-to-left{0%{transform:translateX(0)}to{transform:translateX(-100%)}}@keyframes slide-in-from-top-and-fade{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}@keyframes slide-out-to-top-and-fade{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-4px)}}@keyframes slide-in-from-right-and-fade{0%{opacity:0;transform:translateX(4px)}to{opacity:1;transform:translateX(0)}}@keyframes slide-out-to-right-and-fade{0%{opacity:1;transform:translateX(0)}to{opacity:0;transform:translateX(4px)}}@keyframes slide-in-from-bottom-and-fade{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}@keyframes slide-out-to-bottom-and-fade{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(4px)}}@keyframes slide-in-from-left-and-fade{0%{opacity:0;transform:translateX(-4px)}to{opacity:1;transform:translateX(0)}}@keyframes slide-out-to-left-and-fade{0%{opacity:1;transform:translateX(0)}to{opacity:0;transform:translateX(-4px)}}@keyframes enter-from-right{0%{opacity:0;transform:translateX(200px)}to{opacity:1;transform:translateX(0)}}@keyframes enter-from-left{0%{opacity:0;transform:translateX(-200px)}to{opacity:1;transform:translateX(0)}}@keyframes exit-to-right{0%{opacity:1;transform:translateX(0)}to{opacity:0;transform:translateX(200px)}}@keyframes exit-to-left{0%{opacity:1;transform:translateX(0)}to{opacity:0;transform:translateX(-200px)}}@keyframes carousel{0%,to{width:50%}0%{transform:translateX(-100%)}to{transform:translateX(200%)}}@keyframes carousel-rtl{0%,to{width:50%}0%{transform:translateX(100%)}to{transform:translateX(-200%)}}@keyframes carousel-vertical{0%,to{height:50%}0%{transform:translateY(-100%)}to{transform:translateY(200%)}}@keyframes carousel-inverse{0%,to{width:50%}0%{transform:translateX(200%)}to{transform:translateX(-100%)}}@keyframes carousel-inverse-rtl{0%,to{width:50%}0%{transform:translateX(-200%)}to{transform:translateX(100%)}}@keyframes carousel-inverse-vertical{0%,to{height:50%}0%{transform:translateY(200%)}to{transform:translateY(-100%)}}@keyframes swing{0%,to{width:50%}0%,to{transform:translateX(-25%)}50%{transform:translateX(125%)}}@keyframes swing-vertical{0%,to{height:50%}0%,to{transform:translateY(-25%)}50%{transform:translateY(125%)}}@keyframes elastic{0%,to{left:25%;width:50%}50%{left:0;width:100%}}@keyframes elastic-vertical{0%,to{height:50%;top:25%}50%{height:100%;top:0}}@keyframes marquee{0%{transform:translateZ(0)}to{transform:translate3d(calc(-100% - var(--gap)),0,0)}}@keyframes marquee-rtl{0%{transform:translateZ(0)}to{transform:translate3d(calc(100% + var(--gap)),0,0)}}@keyframes marquee-vertical{0%{transform:translateZ(0)}to{transform:translate3d(0,calc(-100% - var(--gap)),0)}}@keyframes shimmer{0%{background-position:100%}to{background-position:0}}@keyframes shimmer-rtl{0%{background-position:0}to{background-position:100%}}@media (prefers-reduced-motion:reduce){@keyframes scale-in{0%{opacity:0}to{opacity:1}}@keyframes scale-out{0%{opacity:1}to{opacity:0}}@keyframes slide-in-from-top{0%{opacity:0}to{opacity:1}}@keyframes slide-out-to-top{0%{opacity:1}to{opacity:0}}@keyframes slide-in-from-right{0%{opacity:0}to{opacity:1}}@keyframes slide-out-to-right{0%{opacity:1}to{opacity:0}}@keyframes slide-in-from-bottom{0%{opacity:0}to{opacity:1}}@keyframes slide-out-to-bottom{0%{opacity:1}to{opacity:0}}@keyframes slide-in-from-left{0%{opacity:0}to{opacity:1}}@keyframes slide-out-to-left{0%{opacity:1}to{opacity:0}}@keyframes slide-in-from-top-and-fade{0%{opacity:0}to{opacity:1}}@keyframes slide-out-to-top-and-fade{0%{opacity:1}to{opacity:0}}@keyframes slide-in-from-right-and-fade{0%{opacity:0}to{opacity:1}}@keyframes slide-out-to-right-and-fade{0%{opacity:1}to{opacity:0}}@keyframes slide-in-from-bottom-and-fade{0%{opacity:0}to{opacity:1}}@keyframes slide-out-to-bottom-and-fade{0%{opacity:1}to{opacity:0}}@keyframes slide-in-from-left-and-fade{0%{opacity:0}to{opacity:1}}@keyframes slide-out-to-left-and-fade{0%{opacity:1}to{opacity:0}}@keyframes enter-from-right{0%{opacity:0}to{opacity:1}}@keyframes enter-from-left{0%{opacity:0}to{opacity:1}}@keyframes exit-to-right{0%{opacity:1}to{opacity:0}}@keyframes exit-to-left{0%{opacity:1}to{opacity:0}}@keyframes toast-slide-in-from-top{0%{opacity:0}to{opacity:1}}@keyframes toast-slide-in-from-bottom{0%{opacity:0}to{opacity:1}}@keyframes toast-closed{0%{opacity:1}to{opacity:0}}@keyframes toast-collapsed-closed{0%{opacity:1}to{opacity:0}}}
@@ -1,6 +1,6 @@
1
1
  import { defineLocale } from "../composables/defineLocale.js";
2
2
  export default defineLocale({
3
- name: "Danish",
3
+ name: "Dansk",
4
4
  code: "da",
5
5
  messages: {
6
6
  alert: {
@@ -0,0 +1,7 @@
1
+ import { defineLocale } from "../composables/defineLocale.js";
2
+ import de from "./de.js";
3
+ export default defineLocale({
4
+ name: "Deutsch (\xD6sterreich)",
5
+ code: "de-AT",
6
+ messages: de.messages
7
+ });
@@ -1,6 +1,6 @@
1
1
  import { defineLocale } from "../composables/defineLocale.js";
2
2
  export default defineLocale({
3
- name: "Schweizerdeutsch",
3
+ name: "Schweizer Hochdeutsch",
4
4
  code: "de-CH",
5
5
  messages: {
6
6
  alert: {
@@ -1,6 +1,6 @@
1
1
  import { defineLocale } from "../composables/defineLocale.js";
2
2
  export default defineLocale({
3
- name: "Euskera",
3
+ name: "Euskara",
4
4
  code: "eu",
5
5
  messages: {
6
6
  alert: {
@@ -1,6 +1,6 @@
1
1
  import { defineLocale } from "../composables/defineLocale.js";
2
2
  export default defineLocale({
3
- name: "Suomeksi",
3
+ name: "Suomi",
4
4
  code: "fi",
5
5
  messages: {
6
6
  alert: {
@@ -1,6 +1,6 @@
1
1
  import { defineLocale } from "../composables/defineLocale.js";
2
2
  export default defineLocale({
3
- name: "Hebrew",
3
+ name: "\u05E2\u05D1\u05E8\u05D9\u05EA",
4
4
  code: "he",
5
5
  dir: "rtl",
6
6
  messages: {
@@ -1,6 +1,6 @@
1
1
  import { defineLocale } from "../composables/defineLocale.js";
2
2
  export default defineLocale({
3
- name: "Hindi",
3
+ name: "\u0939\u093F\u0928\u094D\u0926\u0940",
4
4
  code: "hi",
5
5
  messages: {
6
6
  alert: {
@@ -8,6 +8,7 @@ export { default as ckb } from './ckb';
8
8
  export { default as cs } from './cs';
9
9
  export { default as da } from './da';
10
10
  export { default as de } from './de';
11
+ export { default as de_at } from './de_at';
11
12
  export { default as de_ch } from './de_ch';
12
13
  export { default as el } from './el';
13
14
  export { default as en } from './en';
@@ -50,8 +51,8 @@ export { default as sk } from './sk';
50
51
  export { default as sl } from './sl';
51
52
  export { default as sq } from './sq';
52
53
  export { default as sv } from './sv';
54
+ export { default as tg } from './tg';
53
55
  export { default as th } from './th';
54
- export { default as tj } from './tj';
55
56
  export { default as tr } from './tr';
56
57
  export { default as ug_cn } from './ug_cn';
57
58
  export { default as uk } from './uk';
@@ -8,6 +8,7 @@ export { default as ckb } from "./ckb.js";
8
8
  export { default as cs } from "./cs.js";
9
9
  export { default as da } from "./da.js";
10
10
  export { default as de } from "./de.js";
11
+ export { default as de_at } from "./de_at.js";
11
12
  export { default as de_ch } from "./de_ch.js";
12
13
  export { default as el } from "./el.js";
13
14
  export { default as en } from "./en.js";
@@ -50,8 +51,8 @@ export { default as sk } from "./sk.js";
50
51
  export { default as sl } from "./sl.js";
51
52
  export { default as sq } from "./sq.js";
52
53
  export { default as sv } from "./sv.js";
54
+ export { default as tg } from "./tg.js";
53
55
  export { default as th } from "./th.js";
54
- export { default as tj } from "./tj.js";
55
56
  export { default as tr } from "./tr.js";
56
57
  export { default as ug_cn } from "./ug_cn.js";
57
58
  export { default as uk } from "./uk.js";
@@ -1,6 +1,6 @@
1
1
  import { defineLocale } from "../composables/defineLocale.js";
2
2
  export default defineLocale({
3
- name: "Icelandic",
3
+ name: "\xCDslenska",
4
4
  code: "is",
5
5
  messages: {
6
6
  alert: {
@@ -22,7 +22,7 @@ export default defineLocale({
22
22
  },
23
23
  carousel: {
24
24
  dots: "Wielt Dia fir ze weisen",
25
- goto: "Gitt op d'Slide {Slide}",
25
+ goto: "Gitt op d'Slide {slide}",
26
26
  next: "N\xE4ch.",
27
27
  prev: "Pr\xE4z."
28
28
  },
@@ -0,0 +1,3 @@
1
+ import type { Messages } from '../types/locale';
2
+ declare const _default: import("../types").Locale<Messages>;
3
+ export default _default;
@@ -1,7 +1,7 @@
1
1
  import { defineLocale } from "../composables/defineLocale.js";
2
2
  export default defineLocale({
3
3
  name: "\u0422\u043E\u04B7\u0438\u043A\u04E3",
4
- code: "tj",
4
+ code: "tg",
5
5
  messages: {
6
6
  alert: {
7
7
  close: "\u0411\u0430\u0441\u0442\u0430\u043D"
@@ -1,6 +1,6 @@
1
1
  import { defineLocale } from "../composables/defineLocale.js";
2
2
  export default defineLocale({
3
- name: "Urdu",
3
+ name: "\u0627\u0631\u062F\u0648",
4
4
  code: "ur",
5
5
  dir: "rtl",
6
6
  messages: {
@@ -22,7 +22,7 @@ export interface Form<S extends FormSchema> {
22
22
  blurredFields: ReadonlySet<DeepReadonly<keyof FormData<S, false>>>;
23
23
  }
24
24
  export type FormSchema<I extends object = object, O extends object = I> = SuperstructSchema<any, any> | StandardSchemaV1<I, O>;
25
- export type InferInput<Schema> = Schema extends StandardSchemaV1 ? StandardSchemaV1.InferInput<Schema> : Schema extends SuperstructSchema<infer I, any> ? I : Schema extends StandardSchemaV1 ? StandardSchemaV1.InferInput<Schema> : never;
25
+ export type InferInput<Schema> = Schema extends StandardSchemaV1 ? StandardSchemaV1.InferInput<Schema> : Schema extends SuperstructSchema<infer I, any> ? I : never;
26
26
  export type InferOutput<Schema> = Schema extends StandardSchemaV1 ? StandardSchemaV1.InferOutput<Schema> : Schema extends SuperstructSchema<infer O, any> ? O : never;
27
27
  export type FormData<S extends FormSchema, T extends boolean = true> = T extends true ? InferOutput<S> : InferInput<S>;
28
28
  export type FormInputEvents = 'input' | 'blur' | 'change' | 'focus';
@@ -2,7 +2,9 @@ import type { AnchorHTMLAttributes as VueAnchorHTMLAttributes, ButtonHTMLAttribu
2
2
  export type AnchorHTMLAttributes = Pick<VueAnchorHTMLAttributes, 'download' | 'href' | 'hreflang' | 'media' | 'ping' | 'rel' | 'target' | 'type' | 'referrerpolicy'>;
3
3
  export type ButtonHTMLAttributes = Pick<VueButtonHTMLAttributes, 'autofocus' | 'disabled' | 'form' | 'formaction' | 'formenctype' | 'formmethod' | 'formnovalidate' | 'formtarget' | 'name' | 'type'>;
4
4
  export type FormHTMLAttributes = Pick<VueFormHTMLAttributes, 'acceptcharset' | 'action' | 'autocomplete' | 'enctype' | 'method' | 'name' | 'novalidate' | 'target'>;
5
- export type ImgHTMLAttributes = Pick<VueImgHTMLAttributes, 'alt' | 'crossorigin' | 'decoding' | 'height' | 'loading' | 'referrerpolicy' | 'sizes' | 'src' | 'srcset' | 'usemap' | 'width'>;
5
+ export type ImgHTMLAttributes = Pick<VueImgHTMLAttributes, 'alt' | 'decoding' | 'height' | 'loading' | 'referrerpolicy' | 'sizes' | 'src' | 'srcset' | 'usemap' | 'width'> & {
6
+ crossorigin?: 'anonymous' | 'use-credentials';
7
+ };
6
8
  export type InputHTMLAttributes = Pick<VueInputHTMLAttributes, 'autofocus' | 'disabled' | 'enterKeyHint' | 'form' | 'formaction' | 'formenctype' | 'formmethod' | 'formnovalidate' | 'formtarget' | 'list' | 'max' | 'maxlength' | 'min' | 'minlength' | 'name' | 'pattern' | 'placeholder' | 'readonly' | 'required' | 'size' | 'step' | 'type'> & {
7
9
  autocomplete?: 'on' | 'off' | (string & {});
8
10
  };
@@ -95,6 +95,7 @@ export * from '../components/PricingPlan.vue';
95
95
  export * from '../components/PricingPlans.vue';
96
96
  export * from '../components/PricingTable.vue';
97
97
  export * from '../components/Progress.vue';
98
+ export * from '../components/ProgressGroup.vue';
98
99
  export * from '../components/RadioGroup.vue';
99
100
  export * from '../components/ScrollArea.vue';
100
101
  export * from '../components/Select.vue';
@@ -104,6 +105,7 @@ export * from '../components/Sidebar.vue';
104
105
  export * from '../components/Skeleton.vue';
105
106
  export * from '../components/Slideover.vue';
106
107
  export * from '../components/Slider.vue';
108
+ export * from '../components/Splitter.vue';
107
109
  export * from '../components/Stepper.vue';
108
110
  export * from '../components/Switch.vue';
109
111
  export * from '../components/Table.vue';
@@ -95,6 +95,7 @@ export * from "../components/PricingPlan.vue";
95
95
  export * from "../components/PricingPlans.vue";
96
96
  export * from "../components/PricingTable.vue";
97
97
  export * from "../components/Progress.vue";
98
+ export * from "../components/ProgressGroup.vue";
98
99
  export * from "../components/RadioGroup.vue";
99
100
  export * from "../components/ScrollArea.vue";
100
101
  export * from "../components/Select.vue";
@@ -104,6 +105,7 @@ export * from "../components/Sidebar.vue";
104
105
  export * from "../components/Skeleton.vue";
105
106
  export * from "../components/Slideover.vue";
106
107
  export * from "../components/Slider.vue";
108
+ export * from "../components/Splitter.vue";
107
109
  export * from "../components/Stepper.vue";
108
110
  export * from "../components/Switch.vue";
109
111
  export * from "../components/Table.vue";
@@ -124,6 +124,7 @@ export interface ThemeDefaults {
124
124
  pricingPlans?: Partial<ComponentTypes.PricingPlansProps>;
125
125
  pricingTable?: Partial<ComponentTypes.PricingTableProps>;
126
126
  progress?: Partial<ComponentTypes.ProgressProps>;
127
+ progressGroup?: Partial<ComponentTypes.ProgressGroupProps>;
127
128
  /**
128
129
  * Prose components that expose overridable props, under a `prose` namespace
129
130
  * (mirrors `app.config.ui.prose` and `useComponentProps('prose.<tag>', …)`).
@@ -164,6 +165,7 @@ export interface ThemeDefaults {
164
165
  skeleton?: Partial<ComponentTypes.SkeletonProps>;
165
166
  slideover?: Partial<ComponentTypes.SlideoverProps>;
166
167
  slider?: Partial<ComponentTypes.SliderProps>;
168
+ splitter?: Partial<ComponentTypes.SplitterProps>;
167
169
  stepper?: Partial<ComponentTypes.StepperProps>;
168
170
  switch?: Partial<ComponentTypes.SwitchProps>;
169
171
  table?: Partial<ComponentTypes.TableProps>;