@nuxt/ui 4.10.0 → 4.11.0

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 (97) 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/ChatPromptSubmit.d.vue.ts +2 -2
  12. package/dist/runtime/components/ChatPromptSubmit.vue.d.ts +2 -2
  13. package/dist/runtime/components/Checkbox.d.vue.ts +1 -1
  14. package/dist/runtime/components/Checkbox.vue +12 -6
  15. package/dist/runtime/components/Checkbox.vue.d.ts +1 -1
  16. package/dist/runtime/components/CheckboxGroup.d.vue.ts +6 -0
  17. package/dist/runtime/components/CheckboxGroup.vue +10 -4
  18. package/dist/runtime/components/CheckboxGroup.vue.d.ts +6 -0
  19. package/dist/runtime/components/Editor.vue +4 -1
  20. package/dist/runtime/components/Error.d.vue.ts +1 -1
  21. package/dist/runtime/components/Error.vue.d.ts +1 -1
  22. package/dist/runtime/components/FileUpload.vue +17 -10
  23. package/dist/runtime/components/Input.vue +12 -7
  24. package/dist/runtime/components/InputDate.vue +12 -8
  25. package/dist/runtime/components/InputMenu.vue +25 -11
  26. package/dist/runtime/components/InputNumber.vue +14 -9
  27. package/dist/runtime/components/InputRating.vue +10 -7
  28. package/dist/runtime/components/InputTags.vue +12 -7
  29. package/dist/runtime/components/InputTime.vue +12 -7
  30. package/dist/runtime/components/Listbox.vue +10 -6
  31. package/dist/runtime/components/Modal.vue +12 -5
  32. package/dist/runtime/components/PinInput.vue +13 -8
  33. package/dist/runtime/components/Popover.vue +0 -1
  34. package/dist/runtime/components/PricingTable.d.vue.ts +1 -1
  35. package/dist/runtime/components/PricingTable.vue.d.ts +1 -1
  36. package/dist/runtime/components/Progress.d.vue.ts +2 -1
  37. package/dist/runtime/components/Progress.vue +5 -6
  38. package/dist/runtime/components/Progress.vue.d.ts +2 -1
  39. package/dist/runtime/components/ProgressGroup.d.vue.ts +91 -0
  40. package/dist/runtime/components/ProgressGroup.vue +99 -0
  41. package/dist/runtime/components/ProgressGroup.vue.d.ts +91 -0
  42. package/dist/runtime/components/RadioGroup.d.vue.ts +7 -1
  43. package/dist/runtime/components/RadioGroup.vue +14 -5
  44. package/dist/runtime/components/RadioGroup.vue.d.ts +7 -1
  45. package/dist/runtime/components/Select.vue +21 -8
  46. package/dist/runtime/components/SelectMenu.vue +26 -12
  47. package/dist/runtime/components/Slider.vue +14 -7
  48. package/dist/runtime/components/Splitter.d.vue.ts +266 -0
  49. package/dist/runtime/components/Splitter.vue +99 -0
  50. package/dist/runtime/components/Splitter.vue.d.ts +266 -0
  51. package/dist/runtime/components/Switch.vue +8 -4
  52. package/dist/runtime/components/Textarea.vue +17 -7
  53. package/dist/runtime/components/Theme.d.vue.ts +1 -1
  54. package/dist/runtime/components/Theme.vue +4 -3
  55. package/dist/runtime/components/Theme.vue.d.ts +1 -1
  56. package/dist/runtime/components/Tree.vue +1 -1
  57. package/dist/runtime/components/content/ContentNavigation.vue +8 -1
  58. package/dist/runtime/components/content/ContentToc.vue +4 -1
  59. package/dist/runtime/composables/useComponentProps.d.ts +1 -1
  60. package/dist/runtime/composables/useComponentProps.js +6 -0
  61. package/dist/runtime/composables/useFormField.d.ts +10 -4
  62. package/dist/runtime/composables/useFormField.js +10 -3
  63. package/dist/runtime/keyframes.css +1 -1
  64. package/dist/runtime/locale/da.js +1 -1
  65. package/dist/runtime/locale/de_at.js +7 -0
  66. package/dist/runtime/locale/de_ch.js +1 -1
  67. package/dist/runtime/locale/eu.js +1 -1
  68. package/dist/runtime/locale/fi.js +1 -1
  69. package/dist/runtime/locale/he.js +1 -1
  70. package/dist/runtime/locale/hi.js +1 -1
  71. package/dist/runtime/locale/index.d.ts +2 -1
  72. package/dist/runtime/locale/index.js +2 -1
  73. package/dist/runtime/locale/is.js +1 -1
  74. package/dist/runtime/locale/lb.js +1 -1
  75. package/dist/runtime/locale/tg.d.ts +3 -0
  76. package/dist/runtime/locale/{tj.js → tg.js} +1 -1
  77. package/dist/runtime/locale/ur.js +1 -1
  78. package/dist/runtime/types/form.d.ts +1 -1
  79. package/dist/runtime/types/html.d.ts +3 -1
  80. package/dist/runtime/types/index.d.ts +2 -0
  81. package/dist/runtime/types/index.js +2 -0
  82. package/dist/runtime/types/theme.d.ts +2 -0
  83. package/dist/runtime/types/tv.d.ts +6 -2
  84. package/dist/runtime/utils/link-keys.d.ts +1 -0
  85. package/dist/runtime/utils/link-keys.js +40 -0
  86. package/dist/runtime/utils/link.d.ts +2 -1
  87. package/dist/runtime/utils/link.js +2 -40
  88. package/dist/runtime/utils/search.js +3 -12
  89. package/dist/runtime/utils/tv.d.ts +1 -1
  90. package/dist/runtime/utils/tv.js +103 -25
  91. package/dist/runtime/vue/components/Icon.vue +5 -2
  92. package/dist/shared/{ui.XkBrgXFP.mjs → ui.DNq7CNkE.mjs} +589 -213
  93. package/dist/unplugin.d.mts +1 -1
  94. package/dist/unplugin.mjs +22 -6
  95. package/dist/vite.mjs +4 -4
  96. package/package.json +51 -50
  97. /package/dist/runtime/locale/{tj.d.ts → de_at.d.ts} +0 -0
@@ -0,0 +1,266 @@
1
+ import type { SplitterGroupProps, SplitterGroupEmits, SplitterPanelProps, SplitterResizeHandleProps } from 'reka-ui';
2
+ import type { VNode, ComponentPublicInstance } from 'vue';
3
+ import type { AppConfig } from '@nuxt/schema';
4
+ import theme from '#build/ui/splitter';
5
+ import type { DynamicSlots } from '../types/utils';
6
+ import type { ComponentConfig } from '../types/tv';
7
+ type Splitter = ComponentConfig<typeof theme, AppConfig, 'splitter'>;
8
+ export interface SplitterItem extends Omit<SplitterPanelProps, 'as' | 'asChild'> {
9
+ /**
10
+ * A unique id for the panel. Also used as the Vue `key`. Defaults to an auto-generated id.
11
+ */
12
+ id?: string;
13
+ slot?: string;
14
+ class?: any;
15
+ ui?: Pick<Splitter['slots'], 'panel'>;
16
+ [key: string]: any;
17
+ }
18
+ export interface SplitterProps<T extends SplitterItem = SplitterItem> extends Pick<SplitterGroupProps, 'autoSaveId' | 'keyboardResizeBy' | 'storage'>, Pick<SplitterResizeHandleProps, 'hitAreaMargins'> {
19
+ /**
20
+ * The element or component this component should render as.
21
+ * @defaultValue 'div'
22
+ */
23
+ as?: any;
24
+ /**
25
+ * A unique id for the group, also used to derive the ids of its panels and handles.
26
+ * Set it when rendering on the server, auto-generated ids can differ between the server and the client and break resizing on hydration.
27
+ */
28
+ id?: string;
29
+ /**
30
+ * The orientation of the splitter.
31
+ * @defaultValue 'horizontal'
32
+ */
33
+ orientation?: Splitter['variants']['orientation'];
34
+ items?: T[];
35
+ /**
36
+ * Whether the resize handles are disabled, locking the current layout.
37
+ * @defaultValue false
38
+ */
39
+ disabled?: boolean;
40
+ class?: any;
41
+ ui?: Splitter['slots'];
42
+ }
43
+ export interface SplitterEmits {
44
+ layout: SplitterGroupEmits['layout'];
45
+ collapse: [index: number];
46
+ expand: [index: number];
47
+ resize: [index: number, size: number, prevSize?: number];
48
+ dragging: [index: number, dragging: boolean];
49
+ }
50
+ type PanelSlotProps = {
51
+ index: number;
52
+ collapsed: boolean;
53
+ collapse: () => void;
54
+ expand: () => void;
55
+ resize: (size: number) => void;
56
+ ui: Splitter['ui'];
57
+ };
58
+ type SlotProps<T extends SplitterItem> = (props: {
59
+ item: T;
60
+ } & PanelSlotProps) => VNode[];
61
+ export type SplitterSlots<T extends SplitterItem = SplitterItem> = {
62
+ 'resize-handle'?: (props: {
63
+ index: number;
64
+ ui: Splitter['ui'];
65
+ }) => VNode[];
66
+ } & DynamicSlots<T, undefined, PanelSlotProps> & {
67
+ [key: `panel-${number}`]: SlotProps<T> | undefined;
68
+ };
69
+ declare const _default: typeof __VLS_export;
70
+ export default _default;
71
+ declare const __VLS_export: <T extends SplitterItem>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
72
+ props: import("vue").PublicProps & __VLS_PrettifyLocal<SplitterProps<T> & {
73
+ onResize?: ((index: number, size: number, prevSize?: number | undefined) => any) | undefined;
74
+ onCollapse?: ((index: number) => any) | undefined;
75
+ onExpand?: ((index: number) => any) | undefined;
76
+ onLayout?: ((val: number[]) => any) | undefined;
77
+ onDragging?: ((index: number, dragging: boolean) => any) | undefined;
78
+ }> & (typeof globalThis extends {
79
+ __VLS_PROPS_FALLBACK: infer P;
80
+ } ? P : {});
81
+ expose: (exposed: import("vue").ShallowUnwrapRef<{
82
+ panelsRef: import("vue").Ref<({
83
+ $: import("vue").ComponentInternalInstance;
84
+ $data: {};
85
+ $props: {
86
+ readonly collapsedSize?: number | undefined;
87
+ readonly collapsible?: boolean | undefined;
88
+ readonly defaultSize?: number | undefined;
89
+ readonly id?: string | undefined;
90
+ readonly maxSize?: number | undefined;
91
+ readonly minSize?: number | undefined;
92
+ readonly order?: number | undefined;
93
+ readonly sizeUnit?: "%" | "px" | undefined;
94
+ readonly asChild?: boolean | undefined;
95
+ readonly as?: (import("reka-ui").AsTag | import("vue").Component) | undefined;
96
+ readonly onResize?: ((size: number, prevSize: number | undefined) => any) | undefined | undefined;
97
+ readonly onCollapse?: (() => any) | undefined | undefined;
98
+ readonly onExpand?: (() => any) | undefined | undefined;
99
+ } & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps;
100
+ $attrs: import("vue").Attrs;
101
+ $refs: {
102
+ [x: string]: unknown;
103
+ };
104
+ $slots: Readonly<{
105
+ [name: string]: import("vue").Slot<any> | undefined;
106
+ }>;
107
+ $root: ComponentPublicInstance | null;
108
+ $parent: ComponentPublicInstance | null;
109
+ $host: Element | null;
110
+ $emit: ((event: "resize", size: number, prevSize: number | undefined) => void) & ((event: "collapse") => void) & ((event: "expand") => void);
111
+ $el: any;
112
+ $options: import("vue").ComponentOptionsBase<Readonly<SplitterPanelProps> & Readonly<{
113
+ onResize?: ((size: number, prevSize: number | undefined) => any) | undefined;
114
+ onCollapse?: (() => any) | undefined;
115
+ onExpand?: (() => any) | undefined;
116
+ }>, {
117
+ collapse: () => void;
118
+ expand: () => void;
119
+ getSize(): number;
120
+ resize: (size: number) => void;
121
+ isCollapsed: import("vue").ComputedRef<boolean>;
122
+ isExpanded: import("vue").ComputedRef<boolean>;
123
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
124
+ resize: (size: number, prevSize: number | undefined) => any;
125
+ collapse: () => any;
126
+ expand: () => any;
127
+ }, string, {}, {}, string, {}, import("vue").GlobalComponents, import("vue").GlobalDirectives, string, import("vue").ComponentProvideOptions> & {
128
+ beforeCreate?: (() => void) | (() => void)[];
129
+ created?: (() => void) | (() => void)[];
130
+ beforeMount?: (() => void) | (() => void)[];
131
+ mounted?: (() => void) | (() => void)[];
132
+ beforeUpdate?: (() => void) | (() => void)[];
133
+ updated?: (() => void) | (() => void)[];
134
+ activated?: (() => void) | (() => void)[];
135
+ deactivated?: (() => void) | (() => void)[];
136
+ beforeDestroy?: (() => void) | (() => void)[];
137
+ beforeUnmount?: (() => void) | (() => void)[];
138
+ destroyed?: (() => void) | (() => void)[];
139
+ unmounted?: (() => void) | (() => void)[];
140
+ renderTracked?: ((e: import("vue").DebuggerEvent) => void) | ((e: import("vue").DebuggerEvent) => void)[];
141
+ renderTriggered?: ((e: import("vue").DebuggerEvent) => void) | ((e: import("vue").DebuggerEvent) => void)[];
142
+ errorCaptured?: ((err: unknown, instance: ComponentPublicInstance | null, info: string) => boolean | void) | ((err: unknown, instance: ComponentPublicInstance | null, info: string) => boolean | void)[];
143
+ };
144
+ $forceUpdate: () => void;
145
+ $nextTick: typeof import("vue").nextTick;
146
+ $watch<T_1 extends string | ((...args: any) => any)>(source: T_1, cb: T_1 extends (...args: any) => infer R ? (...args: [R, R, import("@vue/reactivity").OnCleanup]) => any : (...args: [any, any, import("@vue/reactivity").OnCleanup]) => any, options?: import("vue").WatchOptions): import("vue").WatchStopHandle;
147
+ } & Readonly<{}> & Omit<Readonly<SplitterPanelProps> & Readonly<{
148
+ onResize?: ((size: number, prevSize: number | undefined) => any) | undefined;
149
+ onCollapse?: (() => any) | undefined;
150
+ onExpand?: (() => any) | undefined;
151
+ }>, "resize" | "collapse" | "expand" | "isCollapsed" | "getSize" | "isExpanded"> & {
152
+ collapse: () => void;
153
+ expand: () => void;
154
+ getSize: () => number;
155
+ resize: (size: number) => void;
156
+ isCollapsed: boolean;
157
+ isExpanded: boolean;
158
+ } & {} & import("vue").ComponentCustomProperties & {} & {
159
+ $slots: {
160
+ default?: (props: {
161
+ isCollapsed: boolean;
162
+ isExpanded: boolean;
163
+ collapse: () => void;
164
+ expand: () => void;
165
+ resize: (size: number) => void;
166
+ }) => any;
167
+ };
168
+ })[], ({
169
+ $: import("vue").ComponentInternalInstance;
170
+ $data: {};
171
+ $props: {
172
+ readonly collapsedSize?: number | undefined;
173
+ readonly collapsible?: boolean | undefined;
174
+ readonly defaultSize?: number | undefined;
175
+ readonly id?: string | undefined;
176
+ readonly maxSize?: number | undefined;
177
+ readonly minSize?: number | undefined;
178
+ readonly order?: number | undefined;
179
+ readonly sizeUnit?: "%" | "px" | undefined;
180
+ readonly asChild?: boolean | undefined;
181
+ readonly as?: (import("reka-ui").AsTag | import("vue").Component) | undefined;
182
+ readonly onResize?: ((size: number, prevSize: number | undefined) => any) | undefined | undefined;
183
+ readonly onCollapse?: (() => any) | undefined | undefined;
184
+ readonly onExpand?: (() => any) | undefined | undefined;
185
+ } & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps;
186
+ $attrs: import("vue").Attrs;
187
+ $refs: {
188
+ [x: string]: unknown;
189
+ };
190
+ $slots: Readonly<{
191
+ [name: string]: import("vue").Slot<any> | undefined;
192
+ }>;
193
+ $root: ComponentPublicInstance | null;
194
+ $parent: ComponentPublicInstance | null;
195
+ $host: Element | null;
196
+ $emit: ((event: "resize", size: number, prevSize: number | undefined) => void) & ((event: "collapse") => void) & ((event: "expand") => void);
197
+ $el: any;
198
+ $options: import("vue").ComponentOptionsBase<Readonly<SplitterPanelProps> & Readonly<{
199
+ onResize?: ((size: number, prevSize: number | undefined) => any) | undefined;
200
+ onCollapse?: (() => any) | undefined;
201
+ onExpand?: (() => any) | undefined;
202
+ }>, {
203
+ collapse: () => void;
204
+ expand: () => void;
205
+ getSize(): number;
206
+ resize: (size: number) => void;
207
+ isCollapsed: import("vue").ComputedRef<boolean>;
208
+ isExpanded: import("vue").ComputedRef<boolean>;
209
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
210
+ resize: (size: number, prevSize: number | undefined) => any;
211
+ collapse: () => any;
212
+ expand: () => any;
213
+ }, string, {}, {}, string, {}, import("vue").GlobalComponents, import("vue").GlobalDirectives, string, import("vue").ComponentProvideOptions> & {
214
+ beforeCreate?: (() => void) | (() => void)[];
215
+ created?: (() => void) | (() => void)[];
216
+ beforeMount?: (() => void) | (() => void)[];
217
+ mounted?: (() => void) | (() => void)[];
218
+ beforeUpdate?: (() => void) | (() => void)[];
219
+ updated?: (() => void) | (() => void)[];
220
+ activated?: (() => void) | (() => void)[];
221
+ deactivated?: (() => void) | (() => void)[];
222
+ beforeDestroy?: (() => void) | (() => void)[];
223
+ beforeUnmount?: (() => void) | (() => void)[];
224
+ destroyed?: (() => void) | (() => void)[];
225
+ unmounted?: (() => void) | (() => void)[];
226
+ renderTracked?: ((e: import("vue").DebuggerEvent) => void) | ((e: import("vue").DebuggerEvent) => void)[];
227
+ renderTriggered?: ((e: import("vue").DebuggerEvent) => void) | ((e: import("vue").DebuggerEvent) => void)[];
228
+ errorCaptured?: ((err: unknown, instance: ComponentPublicInstance | null, info: string) => boolean | void) | ((err: unknown, instance: ComponentPublicInstance | null, info: string) => boolean | void)[];
229
+ };
230
+ $forceUpdate: () => void;
231
+ $nextTick: typeof import("vue").nextTick;
232
+ $watch<T_1 extends string | ((...args: any) => any)>(source: T_1, cb: T_1 extends (...args: any) => infer R ? (...args: [R, R, import("@vue/reactivity").OnCleanup]) => any : (...args: [any, any, import("@vue/reactivity").OnCleanup]) => any, options?: import("vue").WatchOptions): import("vue").WatchStopHandle;
233
+ } & Readonly<{}> & Omit<Readonly<SplitterPanelProps> & Readonly<{
234
+ onResize?: ((size: number, prevSize: number | undefined) => any) | undefined;
235
+ onCollapse?: (() => any) | undefined;
236
+ onExpand?: (() => any) | undefined;
237
+ }>, "resize" | "collapse" | "expand" | "isCollapsed" | "getSize" | "isExpanded"> & {
238
+ collapse: () => void;
239
+ expand: () => void;
240
+ getSize: () => number;
241
+ resize: (size: number) => void;
242
+ isCollapsed: boolean;
243
+ isExpanded: boolean;
244
+ } & {} & import("vue").ComponentCustomProperties & {} & {
245
+ $slots: {
246
+ default?: (props: {
247
+ isCollapsed: boolean;
248
+ isExpanded: boolean;
249
+ collapse: () => void;
250
+ expand: () => void;
251
+ resize: (size: number) => void;
252
+ }) => any;
253
+ };
254
+ })[]>;
255
+ }>) => void;
256
+ attrs: any;
257
+ slots: SplitterSlots<T>;
258
+ emit: ((evt: "resize", index: number, size: number, prevSize?: number | undefined) => void) & ((evt: "collapse", index: number) => void) & ((evt: "expand", index: number) => void) & ((evt: "layout", val: number[]) => void) & ((evt: "dragging", index: number, dragging: boolean) => void);
259
+ }>) => import("vue").VNode & {
260
+ __ctx?: NonNullable<Awaited<typeof __VLS_setup>>;
261
+ };
262
+ type __VLS_PrettifyLocal<T> = (T extends any ? {
263
+ [K in keyof T]: T[K];
264
+ } : {
265
+ [K in keyof T as K]: T[K];
266
+ }) & {};
@@ -0,0 +1,99 @@
1
+ <script>
2
+ import theme from "#build/ui/splitter";
3
+ </script>
4
+
5
+ <script setup>
6
+ import { ref, computed, onBeforeUpdate } from "vue";
7
+ import { SplitterGroup, SplitterPanel, SplitterResizeHandle } from "reka-ui";
8
+ import { reactivePick } from "@vueuse/core";
9
+ import { useAppConfig } from "#imports";
10
+ import { useComponentProps } from "../composables/useComponentProps";
11
+ import { useForwardProps } from "../composables/useForwardProps";
12
+ import { tv } from "../utils/tv";
13
+ const _props = defineProps({
14
+ as: { type: null, required: false },
15
+ id: { type: String, required: false },
16
+ orientation: { type: null, required: false, default: "horizontal" },
17
+ items: { type: Array, required: false },
18
+ disabled: { type: Boolean, required: false },
19
+ class: { type: null, required: false },
20
+ ui: { type: Object, required: false },
21
+ autoSaveId: { type: [String, null], required: false },
22
+ keyboardResizeBy: { type: [Number, null], required: false },
23
+ storage: { type: Object, required: false },
24
+ hitAreaMargins: { type: Object, required: false }
25
+ });
26
+ const emits = defineEmits(["layout", "collapse", "expand", "resize", "dragging"]);
27
+ defineSlots();
28
+ const props = useComponentProps("splitter", _props);
29
+ const appConfig = useAppConfig();
30
+ const rootProps = useForwardProps(reactivePick(props, "as", "id", "autoSaveId", "keyboardResizeBy", "storage"));
31
+ const ui = computed(() => tv({ extend: theme, ...appConfig.ui?.splitter || {} })({
32
+ orientation: props.orientation
33
+ }));
34
+ const panelsRef = ref([]);
35
+ onBeforeUpdate(() => {
36
+ panelsRef.value.length = 0;
37
+ });
38
+ function getPanelId(item, index) {
39
+ return item.id ?? (props.id ? `${props.id}-panel-${index}` : void 0);
40
+ }
41
+ function getHandleId(index) {
42
+ return props.id ? `${props.id}-handle-${index}` : void 0;
43
+ }
44
+ function setPanelRef(index, el) {
45
+ if (el) {
46
+ panelsRef.value[index] = el;
47
+ }
48
+ }
49
+ defineExpose({
50
+ panelsRef
51
+ });
52
+ </script>
53
+
54
+ <template>
55
+ <SplitterGroup v-bind="rootProps" :direction="props.orientation" data-slot="root" :class="ui.root({ class: [props.ui?.root, props.class] })" @layout="emits('layout', $event)">
56
+ <template v-for="(item, index) in props.items" :key="item.id ?? index">
57
+ <SplitterPanel
58
+ :id="getPanelId(item, index)"
59
+ :ref="(el) => setPanelRef(index, el)"
60
+ v-slot="{ isCollapsed, collapse, expand, resize }"
61
+ :default-size="item.defaultSize"
62
+ :min-size="item.minSize"
63
+ :max-size="item.maxSize"
64
+ :collapsible="item.collapsible"
65
+ :collapsed-size="item.collapsedSize"
66
+ :size-unit="item.sizeUnit"
67
+ :order="item.order"
68
+ data-slot="panel"
69
+ :class="ui.panel({ class: [props.ui?.panel, item.ui?.panel, item.class] })"
70
+ @collapse="emits('collapse', index)"
71
+ @expand="emits('expand', index)"
72
+ @resize="(size, prevSize) => emits('resize', index, size, prevSize)"
73
+ >
74
+ <slot
75
+ :name="item.slot || `panel-${index}`"
76
+ :item="item"
77
+ :index="index"
78
+ :collapsed="isCollapsed"
79
+ :collapse="collapse"
80
+ :expand="expand"
81
+ :resize="resize"
82
+ :ui="ui"
83
+ />
84
+ </SplitterPanel>
85
+
86
+ <SplitterResizeHandle
87
+ v-if="index < props.items.length - 1"
88
+ :id="getHandleId(index)"
89
+ :disabled="props.disabled"
90
+ :hit-area-margins="props.hitAreaMargins"
91
+ data-slot="handle"
92
+ :class="ui.handle({ class: props.ui?.handle })"
93
+ @dragging="(dragging) => emits('dragging', index, dragging)"
94
+ >
95
+ <slot name="resize-handle" :index="index" :ui="ui" />
96
+ </SplitterResizeHandle>
97
+ </template>
98
+ </SplitterGroup>
99
+ </template>
@@ -0,0 +1,266 @@
1
+ import type { SplitterGroupProps, SplitterGroupEmits, SplitterPanelProps, SplitterResizeHandleProps } from 'reka-ui';
2
+ import type { VNode, ComponentPublicInstance } from 'vue';
3
+ import type { AppConfig } from '@nuxt/schema';
4
+ import theme from '#build/ui/splitter';
5
+ import type { DynamicSlots } from '../types/utils';
6
+ import type { ComponentConfig } from '../types/tv';
7
+ type Splitter = ComponentConfig<typeof theme, AppConfig, 'splitter'>;
8
+ export interface SplitterItem extends Omit<SplitterPanelProps, 'as' | 'asChild'> {
9
+ /**
10
+ * A unique id for the panel. Also used as the Vue `key`. Defaults to an auto-generated id.
11
+ */
12
+ id?: string;
13
+ slot?: string;
14
+ class?: any;
15
+ ui?: Pick<Splitter['slots'], 'panel'>;
16
+ [key: string]: any;
17
+ }
18
+ export interface SplitterProps<T extends SplitterItem = SplitterItem> extends Pick<SplitterGroupProps, 'autoSaveId' | 'keyboardResizeBy' | 'storage'>, Pick<SplitterResizeHandleProps, 'hitAreaMargins'> {
19
+ /**
20
+ * The element or component this component should render as.
21
+ * @defaultValue 'div'
22
+ */
23
+ as?: any;
24
+ /**
25
+ * A unique id for the group, also used to derive the ids of its panels and handles.
26
+ * Set it when rendering on the server, auto-generated ids can differ between the server and the client and break resizing on hydration.
27
+ */
28
+ id?: string;
29
+ /**
30
+ * The orientation of the splitter.
31
+ * @defaultValue 'horizontal'
32
+ */
33
+ orientation?: Splitter['variants']['orientation'];
34
+ items?: T[];
35
+ /**
36
+ * Whether the resize handles are disabled, locking the current layout.
37
+ * @defaultValue false
38
+ */
39
+ disabled?: boolean;
40
+ class?: any;
41
+ ui?: Splitter['slots'];
42
+ }
43
+ export interface SplitterEmits {
44
+ layout: SplitterGroupEmits['layout'];
45
+ collapse: [index: number];
46
+ expand: [index: number];
47
+ resize: [index: number, size: number, prevSize?: number];
48
+ dragging: [index: number, dragging: boolean];
49
+ }
50
+ type PanelSlotProps = {
51
+ index: number;
52
+ collapsed: boolean;
53
+ collapse: () => void;
54
+ expand: () => void;
55
+ resize: (size: number) => void;
56
+ ui: Splitter['ui'];
57
+ };
58
+ type SlotProps<T extends SplitterItem> = (props: {
59
+ item: T;
60
+ } & PanelSlotProps) => VNode[];
61
+ export type SplitterSlots<T extends SplitterItem = SplitterItem> = {
62
+ 'resize-handle'?: (props: {
63
+ index: number;
64
+ ui: Splitter['ui'];
65
+ }) => VNode[];
66
+ } & DynamicSlots<T, undefined, PanelSlotProps> & {
67
+ [key: `panel-${number}`]: SlotProps<T> | undefined;
68
+ };
69
+ declare const _default: typeof __VLS_export;
70
+ export default _default;
71
+ declare const __VLS_export: <T extends SplitterItem>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
72
+ props: import("vue").PublicProps & __VLS_PrettifyLocal<SplitterProps<T> & {
73
+ onResize?: ((index: number, size: number, prevSize?: number | undefined) => any) | undefined;
74
+ onCollapse?: ((index: number) => any) | undefined;
75
+ onExpand?: ((index: number) => any) | undefined;
76
+ onLayout?: ((val: number[]) => any) | undefined;
77
+ onDragging?: ((index: number, dragging: boolean) => any) | undefined;
78
+ }> & (typeof globalThis extends {
79
+ __VLS_PROPS_FALLBACK: infer P;
80
+ } ? P : {});
81
+ expose: (exposed: import("vue").ShallowUnwrapRef<{
82
+ panelsRef: import("vue").Ref<({
83
+ $: import("vue").ComponentInternalInstance;
84
+ $data: {};
85
+ $props: {
86
+ readonly collapsedSize?: number | undefined;
87
+ readonly collapsible?: boolean | undefined;
88
+ readonly defaultSize?: number | undefined;
89
+ readonly id?: string | undefined;
90
+ readonly maxSize?: number | undefined;
91
+ readonly minSize?: number | undefined;
92
+ readonly order?: number | undefined;
93
+ readonly sizeUnit?: "%" | "px" | undefined;
94
+ readonly asChild?: boolean | undefined;
95
+ readonly as?: (import("reka-ui").AsTag | import("vue").Component) | undefined;
96
+ readonly onResize?: ((size: number, prevSize: number | undefined) => any) | undefined | undefined;
97
+ readonly onCollapse?: (() => any) | undefined | undefined;
98
+ readonly onExpand?: (() => any) | undefined | undefined;
99
+ } & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps;
100
+ $attrs: import("vue").Attrs;
101
+ $refs: {
102
+ [x: string]: unknown;
103
+ };
104
+ $slots: Readonly<{
105
+ [name: string]: import("vue").Slot<any> | undefined;
106
+ }>;
107
+ $root: ComponentPublicInstance | null;
108
+ $parent: ComponentPublicInstance | null;
109
+ $host: Element | null;
110
+ $emit: ((event: "resize", size: number, prevSize: number | undefined) => void) & ((event: "collapse") => void) & ((event: "expand") => void);
111
+ $el: any;
112
+ $options: import("vue").ComponentOptionsBase<Readonly<SplitterPanelProps> & Readonly<{
113
+ onResize?: ((size: number, prevSize: number | undefined) => any) | undefined;
114
+ onCollapse?: (() => any) | undefined;
115
+ onExpand?: (() => any) | undefined;
116
+ }>, {
117
+ collapse: () => void;
118
+ expand: () => void;
119
+ getSize(): number;
120
+ resize: (size: number) => void;
121
+ isCollapsed: import("vue").ComputedRef<boolean>;
122
+ isExpanded: import("vue").ComputedRef<boolean>;
123
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
124
+ resize: (size: number, prevSize: number | undefined) => any;
125
+ collapse: () => any;
126
+ expand: () => any;
127
+ }, string, {}, {}, string, {}, import("vue").GlobalComponents, import("vue").GlobalDirectives, string, import("vue").ComponentProvideOptions> & {
128
+ beforeCreate?: (() => void) | (() => void)[];
129
+ created?: (() => void) | (() => void)[];
130
+ beforeMount?: (() => void) | (() => void)[];
131
+ mounted?: (() => void) | (() => void)[];
132
+ beforeUpdate?: (() => void) | (() => void)[];
133
+ updated?: (() => void) | (() => void)[];
134
+ activated?: (() => void) | (() => void)[];
135
+ deactivated?: (() => void) | (() => void)[];
136
+ beforeDestroy?: (() => void) | (() => void)[];
137
+ beforeUnmount?: (() => void) | (() => void)[];
138
+ destroyed?: (() => void) | (() => void)[];
139
+ unmounted?: (() => void) | (() => void)[];
140
+ renderTracked?: ((e: import("vue").DebuggerEvent) => void) | ((e: import("vue").DebuggerEvent) => void)[];
141
+ renderTriggered?: ((e: import("vue").DebuggerEvent) => void) | ((e: import("vue").DebuggerEvent) => void)[];
142
+ errorCaptured?: ((err: unknown, instance: ComponentPublicInstance | null, info: string) => boolean | void) | ((err: unknown, instance: ComponentPublicInstance | null, info: string) => boolean | void)[];
143
+ };
144
+ $forceUpdate: () => void;
145
+ $nextTick: typeof import("vue").nextTick;
146
+ $watch<T_1 extends string | ((...args: any) => any)>(source: T_1, cb: T_1 extends (...args: any) => infer R ? (...args: [R, R, import("@vue/reactivity").OnCleanup]) => any : (...args: [any, any, import("@vue/reactivity").OnCleanup]) => any, options?: import("vue").WatchOptions): import("vue").WatchStopHandle;
147
+ } & Readonly<{}> & Omit<Readonly<SplitterPanelProps> & Readonly<{
148
+ onResize?: ((size: number, prevSize: number | undefined) => any) | undefined;
149
+ onCollapse?: (() => any) | undefined;
150
+ onExpand?: (() => any) | undefined;
151
+ }>, "resize" | "collapse" | "expand" | "isCollapsed" | "getSize" | "isExpanded"> & {
152
+ collapse: () => void;
153
+ expand: () => void;
154
+ getSize: () => number;
155
+ resize: (size: number) => void;
156
+ isCollapsed: boolean;
157
+ isExpanded: boolean;
158
+ } & {} & import("vue").ComponentCustomProperties & {} & {
159
+ $slots: {
160
+ default?: (props: {
161
+ isCollapsed: boolean;
162
+ isExpanded: boolean;
163
+ collapse: () => void;
164
+ expand: () => void;
165
+ resize: (size: number) => void;
166
+ }) => any;
167
+ };
168
+ })[], ({
169
+ $: import("vue").ComponentInternalInstance;
170
+ $data: {};
171
+ $props: {
172
+ readonly collapsedSize?: number | undefined;
173
+ readonly collapsible?: boolean | undefined;
174
+ readonly defaultSize?: number | undefined;
175
+ readonly id?: string | undefined;
176
+ readonly maxSize?: number | undefined;
177
+ readonly minSize?: number | undefined;
178
+ readonly order?: number | undefined;
179
+ readonly sizeUnit?: "%" | "px" | undefined;
180
+ readonly asChild?: boolean | undefined;
181
+ readonly as?: (import("reka-ui").AsTag | import("vue").Component) | undefined;
182
+ readonly onResize?: ((size: number, prevSize: number | undefined) => any) | undefined | undefined;
183
+ readonly onCollapse?: (() => any) | undefined | undefined;
184
+ readonly onExpand?: (() => any) | undefined | undefined;
185
+ } & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps;
186
+ $attrs: import("vue").Attrs;
187
+ $refs: {
188
+ [x: string]: unknown;
189
+ };
190
+ $slots: Readonly<{
191
+ [name: string]: import("vue").Slot<any> | undefined;
192
+ }>;
193
+ $root: ComponentPublicInstance | null;
194
+ $parent: ComponentPublicInstance | null;
195
+ $host: Element | null;
196
+ $emit: ((event: "resize", size: number, prevSize: number | undefined) => void) & ((event: "collapse") => void) & ((event: "expand") => void);
197
+ $el: any;
198
+ $options: import("vue").ComponentOptionsBase<Readonly<SplitterPanelProps> & Readonly<{
199
+ onResize?: ((size: number, prevSize: number | undefined) => any) | undefined;
200
+ onCollapse?: (() => any) | undefined;
201
+ onExpand?: (() => any) | undefined;
202
+ }>, {
203
+ collapse: () => void;
204
+ expand: () => void;
205
+ getSize(): number;
206
+ resize: (size: number) => void;
207
+ isCollapsed: import("vue").ComputedRef<boolean>;
208
+ isExpanded: import("vue").ComputedRef<boolean>;
209
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
210
+ resize: (size: number, prevSize: number | undefined) => any;
211
+ collapse: () => any;
212
+ expand: () => any;
213
+ }, string, {}, {}, string, {}, import("vue").GlobalComponents, import("vue").GlobalDirectives, string, import("vue").ComponentProvideOptions> & {
214
+ beforeCreate?: (() => void) | (() => void)[];
215
+ created?: (() => void) | (() => void)[];
216
+ beforeMount?: (() => void) | (() => void)[];
217
+ mounted?: (() => void) | (() => void)[];
218
+ beforeUpdate?: (() => void) | (() => void)[];
219
+ updated?: (() => void) | (() => void)[];
220
+ activated?: (() => void) | (() => void)[];
221
+ deactivated?: (() => void) | (() => void)[];
222
+ beforeDestroy?: (() => void) | (() => void)[];
223
+ beforeUnmount?: (() => void) | (() => void)[];
224
+ destroyed?: (() => void) | (() => void)[];
225
+ unmounted?: (() => void) | (() => void)[];
226
+ renderTracked?: ((e: import("vue").DebuggerEvent) => void) | ((e: import("vue").DebuggerEvent) => void)[];
227
+ renderTriggered?: ((e: import("vue").DebuggerEvent) => void) | ((e: import("vue").DebuggerEvent) => void)[];
228
+ errorCaptured?: ((err: unknown, instance: ComponentPublicInstance | null, info: string) => boolean | void) | ((err: unknown, instance: ComponentPublicInstance | null, info: string) => boolean | void)[];
229
+ };
230
+ $forceUpdate: () => void;
231
+ $nextTick: typeof import("vue").nextTick;
232
+ $watch<T_1 extends string | ((...args: any) => any)>(source: T_1, cb: T_1 extends (...args: any) => infer R ? (...args: [R, R, import("@vue/reactivity").OnCleanup]) => any : (...args: [any, any, import("@vue/reactivity").OnCleanup]) => any, options?: import("vue").WatchOptions): import("vue").WatchStopHandle;
233
+ } & Readonly<{}> & Omit<Readonly<SplitterPanelProps> & Readonly<{
234
+ onResize?: ((size: number, prevSize: number | undefined) => any) | undefined;
235
+ onCollapse?: (() => any) | undefined;
236
+ onExpand?: (() => any) | undefined;
237
+ }>, "resize" | "collapse" | "expand" | "isCollapsed" | "getSize" | "isExpanded"> & {
238
+ collapse: () => void;
239
+ expand: () => void;
240
+ getSize: () => number;
241
+ resize: (size: number) => void;
242
+ isCollapsed: boolean;
243
+ isExpanded: boolean;
244
+ } & {} & import("vue").ComponentCustomProperties & {} & {
245
+ $slots: {
246
+ default?: (props: {
247
+ isCollapsed: boolean;
248
+ isExpanded: boolean;
249
+ collapse: () => void;
250
+ expand: () => void;
251
+ resize: (size: number) => void;
252
+ }) => any;
253
+ };
254
+ })[]>;
255
+ }>) => void;
256
+ attrs: any;
257
+ slots: SplitterSlots<T>;
258
+ emit: ((evt: "resize", index: number, size: number, prevSize?: number | undefined) => void) & ((evt: "collapse", index: number) => void) & ((evt: "expand", index: number) => void) & ((evt: "layout", val: number[]) => void) & ((evt: "dragging", index: number, dragging: boolean) => void);
259
+ }>) => import("vue").VNode & {
260
+ __ctx?: NonNullable<Awaited<typeof __VLS_setup>>;
261
+ };
262
+ type __VLS_PrettifyLocal<T> = (T extends any ? {
263
+ [K in keyof T]: T[K];
264
+ } : {
265
+ [K in keyof T as K]: T[K];
266
+ }) & {};
@@ -41,17 +41,21 @@ const emits = defineEmits(["change", "update:modelValue"]);
41
41
  const props = useComponentProps("switch", _props);
42
42
  const appConfig = useAppConfig();
43
43
  const rootProps = useForwardProps(reactivePick(props, "required", "value", "defaultValue", "modelValue", "trueValue", "falseValue"), emits);
44
- const { id: _id, emitFormChange, emitFormInput, size, color, highlight, name, disabled, ariaAttrs } = useFormField(_props);
44
+ const { id: _id, emitFormChange, emitFormInput, size: formFieldSize, color: formFieldColor, highlight: formFieldHighlight, name, disabled: formFieldDisabled, ariaAttrs } = useFormField(_props);
45
45
  const id = _id.value ?? useId();
46
+ const color = computed(() => formFieldColor.value ?? props.color);
47
+ const highlight = computed(() => formFieldHighlight.value ?? props.highlight);
48
+ const size = computed(() => formFieldSize.value ?? props.size);
49
+ const disabled = computed(() => formFieldDisabled.value ?? props.disabled);
46
50
  const attrs = useAttrs();
47
51
  const forwardedAttrs = computed(() => {
48
52
  const { "data-state": _, ...rest } = attrs;
49
53
  return rest;
50
54
  });
51
55
  const ui = computed(() => tv({ extend: theme, ...appConfig.ui?.switch || {} })({
52
- size: size.value ?? props.size,
53
- color: color.value ?? props.color,
54
- highlight: highlight.value ?? props.highlight,
56
+ size: size.value,
57
+ color: color.value,
58
+ highlight: highlight.value,
55
59
  required: props.required,
56
60
  loading: props.loading,
57
61
  disabled: disabled.value || props.loading