@object-ui/types 0.3.0 → 0.5.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.
- package/README.md +19 -11
- package/dist/api-types.d.ts +7 -0
- package/dist/api-types.d.ts.map +1 -1
- package/dist/api-types.js +4 -6
- package/dist/app.d.ts +17 -0
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +4 -3
- package/dist/base.d.ts +7 -0
- package/dist/base.d.ts.map +1 -1
- package/dist/base.js +4 -6
- package/dist/blocks.d.ts +332 -0
- package/dist/blocks.d.ts.map +1 -0
- package/dist/blocks.js +8 -0
- package/dist/complex.d.ts +68 -1
- package/dist/complex.d.ts.map +1 -1
- package/dist/complex.js +4 -5
- package/dist/crud.d.ts +181 -3
- package/dist/crud.d.ts.map +1 -1
- package/dist/crud.js +4 -6
- package/dist/data-display.d.ts +54 -2
- package/dist/data-display.d.ts.map +1 -1
- package/dist/data-display.js +4 -5
- package/dist/data-protocol.d.ts +1268 -0
- package/dist/data-protocol.d.ts.map +1 -0
- package/dist/data-protocol.js +8 -0
- package/dist/data.d.ts +22 -1
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +4 -6
- package/dist/disclosure.d.ts +70 -1
- package/dist/disclosure.d.ts.map +1 -1
- package/dist/disclosure.js +4 -5
- package/dist/feedback.d.ts +68 -1
- package/dist/feedback.d.ts.map +1 -1
- package/dist/feedback.js +4 -5
- package/dist/field-types.d.ts +728 -0
- package/dist/field-types.d.ts.map +1 -0
- package/dist/field-types.js +8 -0
- package/dist/form.d.ts +123 -1
- package/dist/form.d.ts.map +1 -1
- package/dist/form.js +4 -5
- package/dist/index.d.ts +48 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -37
- package/dist/layout.d.ts +66 -16
- package/dist/layout.d.ts.map +1 -1
- package/dist/layout.js +4 -6
- package/dist/navigation.d.ts +102 -2
- package/dist/navigation.d.ts.map +1 -1
- package/dist/navigation.js +4 -5
- package/dist/objectql.d.ts +491 -54
- package/dist/objectql.d.ts.map +1 -1
- package/dist/objectql.js +4 -6
- package/dist/overlay.d.ts +31 -1
- package/dist/overlay.d.ts.map +1 -1
- package/dist/overlay.js +4 -5
- package/dist/plugin-scope.d.ts +194 -0
- package/dist/plugin-scope.d.ts.map +1 -0
- package/dist/plugin-scope.js +8 -0
- package/dist/registry.d.ts +7 -0
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +7 -0
- package/dist/reports.d.ts +336 -0
- package/dist/reports.d.ts.map +1 -0
- package/dist/reports.js +8 -0
- package/dist/theme.d.ts +289 -0
- package/dist/theme.d.ts.map +1 -0
- package/dist/theme.js +8 -0
- package/dist/ui-action.d.ts +175 -0
- package/dist/ui-action.d.ts.map +1 -0
- package/dist/ui-action.js +8 -0
- package/dist/views.d.ts +417 -0
- package/dist/views.d.ts.map +1 -0
- package/dist/views.js +8 -0
- package/dist/zod/app.zod.d.ts +120 -0
- package/dist/zod/app.zod.d.ts.map +1 -0
- package/dist/zod/app.zod.js +60 -0
- package/dist/zod/base.zod.d.ts +202 -0
- package/dist/zod/base.zod.d.ts.map +1 -0
- package/dist/zod/base.zod.js +198 -0
- package/dist/zod/blocks.zod.d.ts +834 -0
- package/dist/zod/blocks.zod.d.ts.map +1 -0
- package/dist/zod/blocks.zod.js +145 -0
- package/dist/zod/complex.zod.d.ts +742 -0
- package/dist/zod/complex.zod.d.ts.map +1 -0
- package/dist/zod/complex.zod.js +233 -0
- package/dist/zod/crud.zod.d.ts +598 -0
- package/dist/zod/crud.zod.d.ts.map +1 -0
- package/dist/zod/crud.zod.js +230 -0
- package/dist/zod/data-display.zod.d.ts +996 -0
- package/dist/zod/data-display.zod.d.ts.map +1 -0
- package/dist/zod/data-display.zod.js +266 -0
- package/dist/zod/disclosure.zod.d.ts +267 -0
- package/dist/zod/disclosure.zod.d.ts.map +1 -0
- package/dist/zod/disclosure.zod.js +84 -0
- package/dist/zod/feedback.zod.d.ts +538 -0
- package/dist/zod/feedback.zod.d.ts.map +1 -0
- package/dist/zod/feedback.zod.js +127 -0
- package/dist/zod/form.zod.d.ts +1308 -0
- package/dist/zod/form.zod.d.ts.map +1 -0
- package/dist/zod/form.zod.js +406 -0
- package/dist/zod/index.zod.d.ts +4985 -0
- package/dist/zod/index.zod.d.ts.map +1 -0
- package/dist/zod/index.zod.js +183 -0
- package/dist/zod/layout.zod.d.ts +1048 -0
- package/dist/zod/layout.zod.d.ts.map +1 -0
- package/dist/zod/layout.zod.js +241 -0
- package/dist/zod/navigation.zod.d.ts +486 -0
- package/dist/zod/navigation.zod.d.ts.map +1 -0
- package/dist/zod/navigation.zod.js +142 -0
- package/dist/zod/objectql.zod.d.ts +1261 -0
- package/dist/zod/objectql.zod.d.ts.map +1 -0
- package/dist/zod/objectql.zod.js +248 -0
- package/dist/zod/overlay.zod.d.ts +691 -0
- package/dist/zod/overlay.zod.d.ts.map +1 -0
- package/dist/zod/overlay.zod.js +179 -0
- package/dist/zod/reports.zod.d.ts +1628 -0
- package/dist/zod/reports.zod.d.ts.map +1 -0
- package/dist/zod/reports.zod.js +152 -0
- package/dist/zod/theme.zod.d.ts +611 -0
- package/dist/zod/theme.zod.d.ts.map +1 -0
- package/dist/zod/theme.zod.js +130 -0
- package/dist/zod/views.zod.d.ts +675 -0
- package/dist/zod/views.zod.d.ts.map +1 -0
- package/dist/zod/views.zod.js +159 -0
- package/package.json +9 -1
- package/src/__tests__/namespace-exports.test.ts +80 -0
- package/src/__tests__/phase2-schemas.test.ts +639 -0
- package/src/api-types.ts +8 -0
- package/src/app.ts +20 -0
- package/src/base.ts +8 -0
- package/src/blocks.ts +405 -0
- package/src/complex.ts +69 -1
- package/src/crud.ts +185 -3
- package/src/data-display.ts +60 -2
- package/src/data-protocol.ts +1679 -0
- package/src/data.ts +21 -1
- package/src/disclosure.ts +74 -1
- package/src/feedback.ts +76 -2
- package/src/field-types.ts +846 -0
- package/src/form.ts +131 -1
- package/src/index.ts +305 -8
- package/src/layout.ts +70 -15
- package/src/navigation.ts +109 -2
- package/src/objectql.ts +563 -59
- package/src/overlay.ts +35 -1
- package/src/plugin-scope.ts +210 -0
- package/src/registry.ts +8 -0
- package/src/reports.ts +408 -0
- package/src/theme.ts +351 -0
- package/src/ui-action.ts +276 -0
- package/src/views.ts +429 -0
- package/src/zod/README.md +329 -0
- package/src/zod/app.zod.ts +72 -0
- package/src/zod/base.zod.ts +229 -0
- package/src/zod/blocks.zod.ts +170 -0
- package/src/zod/complex.zod.ts +258 -0
- package/src/zod/crud.zod.ts +259 -0
- package/src/zod/data-display.zod.ts +290 -0
- package/src/zod/disclosure.zod.ts +92 -0
- package/src/zod/feedback.zod.ts +138 -0
- package/src/zod/form.zod.ts +434 -0
- package/src/zod/index.zod.ts +425 -0
- package/src/zod/layout.zod.ts +262 -0
- package/src/zod/navigation.zod.ts +159 -0
- package/src/zod/objectql.zod.ts +268 -0
- package/src/zod/overlay.zod.ts +196 -0
- package/src/zod/reports.zod.ts +183 -0
- package/src/zod/theme.zod.ts +155 -0
- package/src/zod/views.zod.ts +182 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form.zod.d.ts","sourceRoot":"","sources":["../../src/zod/form.zod.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,406 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ObjectUI
|
|
3
|
+
* Copyright (c) 2024-present ObjectStack Inc.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the MIT license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* @object-ui/types/zod - Form Component Zod Validators
|
|
10
|
+
*
|
|
11
|
+
* Zod validation schemas for form input and interactive components.
|
|
12
|
+
* Following @objectstack/spec UI specification format.
|
|
13
|
+
*
|
|
14
|
+
* @module zod/form
|
|
15
|
+
* @packageDocumentation
|
|
16
|
+
*/
|
|
17
|
+
import { z } from 'zod';
|
|
18
|
+
import { BaseSchema, SchemaNodeSchema } from './base.zod.js';
|
|
19
|
+
/**
|
|
20
|
+
* Select Option Schema
|
|
21
|
+
*/
|
|
22
|
+
export const SelectOptionSchema = z.object({
|
|
23
|
+
label: z.string().describe('Option label'),
|
|
24
|
+
value: z.union([z.string(), z.number(), z.boolean()]).describe('Option value'),
|
|
25
|
+
disabled: z.boolean().optional().describe('Whether option is disabled'),
|
|
26
|
+
icon: z.string().optional().describe('Option icon'),
|
|
27
|
+
});
|
|
28
|
+
/**
|
|
29
|
+
* Radio Option Schema
|
|
30
|
+
*/
|
|
31
|
+
export const RadioOptionSchema = z.object({
|
|
32
|
+
label: z.string().describe('Option label'),
|
|
33
|
+
value: z.union([z.string(), z.number()]).describe('Option value'),
|
|
34
|
+
disabled: z.boolean().optional().describe('Whether option is disabled'),
|
|
35
|
+
description: z.string().optional().describe('Option description'),
|
|
36
|
+
});
|
|
37
|
+
/**
|
|
38
|
+
* Combobox Option Schema
|
|
39
|
+
*/
|
|
40
|
+
export const ComboboxOptionSchema = z.object({
|
|
41
|
+
value: z.string().describe('Option value'),
|
|
42
|
+
label: z.string().describe('Option label'),
|
|
43
|
+
disabled: z.boolean().optional().describe('Whether option is disabled'),
|
|
44
|
+
});
|
|
45
|
+
/**
|
|
46
|
+
* Command Item Schema
|
|
47
|
+
*/
|
|
48
|
+
export const CommandItemSchema = z.object({
|
|
49
|
+
value: z.string().describe('Item value'),
|
|
50
|
+
label: z.string().describe('Item label'),
|
|
51
|
+
icon: z.string().optional().describe('Item icon'),
|
|
52
|
+
});
|
|
53
|
+
/**
|
|
54
|
+
* Command Group Schema
|
|
55
|
+
*/
|
|
56
|
+
export const CommandGroupSchema = z.object({
|
|
57
|
+
heading: z.string().optional().describe('Group heading'),
|
|
58
|
+
items: z.array(CommandItemSchema).describe('Group items'),
|
|
59
|
+
});
|
|
60
|
+
/**
|
|
61
|
+
* Validation Rule Schema
|
|
62
|
+
*/
|
|
63
|
+
export const ValidationRuleSchema = z.object({
|
|
64
|
+
required: z.boolean().optional().describe('Whether field is required'),
|
|
65
|
+
minLength: z.number().optional().describe('Minimum length'),
|
|
66
|
+
maxLength: z.number().optional().describe('Maximum length'),
|
|
67
|
+
min: z.number().optional().describe('Minimum value'),
|
|
68
|
+
max: z.number().optional().describe('Maximum value'),
|
|
69
|
+
pattern: z.string().optional().describe('Validation pattern (regex)'),
|
|
70
|
+
validate: z.function().optional().describe('Custom validation function'),
|
|
71
|
+
});
|
|
72
|
+
/**
|
|
73
|
+
* Field Condition Schema
|
|
74
|
+
*/
|
|
75
|
+
export const FieldConditionSchema = z.object({
|
|
76
|
+
field: z.string().describe('Field name to check'),
|
|
77
|
+
equals: z.any().optional().describe('Value must equal'),
|
|
78
|
+
notEquals: z.any().optional().describe('Value must not equal'),
|
|
79
|
+
in: z.array(z.any()).optional().describe('Value must be in array'),
|
|
80
|
+
custom: z.function().optional().describe('Custom condition function'),
|
|
81
|
+
});
|
|
82
|
+
/**
|
|
83
|
+
* Button Schema - Button component
|
|
84
|
+
*/
|
|
85
|
+
export const ButtonSchema = BaseSchema.extend({
|
|
86
|
+
type: z.literal('button'),
|
|
87
|
+
label: z.string().optional().describe('Button text label'),
|
|
88
|
+
variant: z.enum(['default', 'secondary', 'destructive', 'outline', 'ghost', 'link'])
|
|
89
|
+
.optional()
|
|
90
|
+
.default('default')
|
|
91
|
+
.describe('Button variant/style'),
|
|
92
|
+
size: z.enum(['default', 'sm', 'lg', 'icon'])
|
|
93
|
+
.optional()
|
|
94
|
+
.default('default')
|
|
95
|
+
.describe('Button size'),
|
|
96
|
+
disabled: z.boolean().optional().describe('Whether button is disabled'),
|
|
97
|
+
loading: z.boolean().optional().describe('Whether button is in loading state'),
|
|
98
|
+
icon: z.string().optional().describe('Icon to display (lucide-react icon name)'),
|
|
99
|
+
iconPosition: z.enum(['left', 'right']).optional().default('left').describe('Icon position'),
|
|
100
|
+
onClick: z.function()
|
|
101
|
+
.optional()
|
|
102
|
+
.describe('Click handler'),
|
|
103
|
+
buttonType: z.enum(['button', 'submit', 'reset'])
|
|
104
|
+
.optional()
|
|
105
|
+
.default('button')
|
|
106
|
+
.describe('Button type'),
|
|
107
|
+
children: z.union([SchemaNodeSchema, z.array(SchemaNodeSchema)]).optional(),
|
|
108
|
+
});
|
|
109
|
+
/**
|
|
110
|
+
* Input Schema - Text input component
|
|
111
|
+
*/
|
|
112
|
+
export const InputSchema = BaseSchema.extend({
|
|
113
|
+
type: z.literal('input'),
|
|
114
|
+
name: z.string().optional().describe('Field name for form submission'),
|
|
115
|
+
label: z.string().optional().describe('Input label'),
|
|
116
|
+
placeholder: z.string().optional().describe('Placeholder text'),
|
|
117
|
+
inputType: z.enum([
|
|
118
|
+
'text', 'email', 'password', 'number', 'tel', 'url', 'search',
|
|
119
|
+
'date', 'time', 'datetime-local',
|
|
120
|
+
])
|
|
121
|
+
.optional()
|
|
122
|
+
.default('text')
|
|
123
|
+
.describe('Input type'),
|
|
124
|
+
defaultValue: z.union([z.string(), z.number()]).optional().describe('Default value'),
|
|
125
|
+
value: z.union([z.string(), z.number()]).optional().describe('Controlled value'),
|
|
126
|
+
required: z.boolean().optional().describe('Whether field is required'),
|
|
127
|
+
disabled: z.boolean().optional().describe('Whether field is disabled'),
|
|
128
|
+
readOnly: z.boolean().optional().describe('Whether field is read-only'),
|
|
129
|
+
description: z.string().optional().describe('Help text'),
|
|
130
|
+
error: z.string().optional().describe('Error message'),
|
|
131
|
+
onChange: z.function().optional().describe('Change handler'),
|
|
132
|
+
min: z.number().optional().describe('Minimum value (for number type)'),
|
|
133
|
+
max: z.number().optional().describe('Maximum value (for number type)'),
|
|
134
|
+
step: z.number().optional().describe('Step value (for number type)'),
|
|
135
|
+
maxLength: z.number().optional().describe('Maximum length'),
|
|
136
|
+
pattern: z.string().optional().describe('Validation pattern'),
|
|
137
|
+
});
|
|
138
|
+
/**
|
|
139
|
+
* Textarea Schema - Multi-line text input
|
|
140
|
+
*/
|
|
141
|
+
export const TextareaSchema = BaseSchema.extend({
|
|
142
|
+
type: z.literal('textarea'),
|
|
143
|
+
name: z.string().optional().describe('Field name for form submission'),
|
|
144
|
+
label: z.string().optional().describe('Textarea label'),
|
|
145
|
+
placeholder: z.string().optional().describe('Placeholder text'),
|
|
146
|
+
defaultValue: z.string().optional().describe('Default value'),
|
|
147
|
+
value: z.string().optional().describe('Controlled value'),
|
|
148
|
+
rows: z.number().optional().describe('Number of visible rows'),
|
|
149
|
+
required: z.boolean().optional().describe('Whether field is required'),
|
|
150
|
+
disabled: z.boolean().optional().describe('Whether field is disabled'),
|
|
151
|
+
readOnly: z.boolean().optional().describe('Whether field is read-only'),
|
|
152
|
+
description: z.string().optional().describe('Help text'),
|
|
153
|
+
error: z.string().optional().describe('Error message'),
|
|
154
|
+
onChange: z.function().optional().describe('Change handler'),
|
|
155
|
+
maxLength: z.number().optional().describe('Maximum length'),
|
|
156
|
+
});
|
|
157
|
+
/**
|
|
158
|
+
* Select Schema - Select/dropdown component
|
|
159
|
+
*/
|
|
160
|
+
export const SelectSchema = BaseSchema.extend({
|
|
161
|
+
type: z.literal('select'),
|
|
162
|
+
name: z.string().optional().describe('Field name for form submission'),
|
|
163
|
+
label: z.string().optional().describe('Select label'),
|
|
164
|
+
placeholder: z.string().optional().describe('Placeholder text'),
|
|
165
|
+
defaultValue: z.union([z.string(), z.number()]).optional().describe('Default value'),
|
|
166
|
+
value: z.union([z.string(), z.number()]).optional().describe('Controlled value'),
|
|
167
|
+
options: z.array(SelectOptionSchema).describe('Select options'),
|
|
168
|
+
required: z.boolean().optional().describe('Whether field is required'),
|
|
169
|
+
disabled: z.boolean().optional().describe('Whether field is disabled'),
|
|
170
|
+
description: z.string().optional().describe('Help text'),
|
|
171
|
+
error: z.string().optional().describe('Error message'),
|
|
172
|
+
onChange: z.function().optional().describe('Change handler'),
|
|
173
|
+
});
|
|
174
|
+
/**
|
|
175
|
+
* Checkbox Schema - Checkbox component
|
|
176
|
+
*/
|
|
177
|
+
export const CheckboxSchema = BaseSchema.extend({
|
|
178
|
+
type: z.literal('checkbox'),
|
|
179
|
+
name: z.string().optional().describe('Field name for form submission'),
|
|
180
|
+
label: z.string().optional().describe('Checkbox label'),
|
|
181
|
+
defaultChecked: z.boolean().optional().describe('Default checked state'),
|
|
182
|
+
checked: z.boolean().optional().describe('Controlled checked state'),
|
|
183
|
+
disabled: z.boolean().optional().describe('Whether checkbox is disabled'),
|
|
184
|
+
description: z.string().optional().describe('Help text'),
|
|
185
|
+
error: z.string().optional().describe('Error message'),
|
|
186
|
+
onChange: z.function().optional().describe('Change handler'),
|
|
187
|
+
});
|
|
188
|
+
/**
|
|
189
|
+
* Radio Group Schema - Radio button group
|
|
190
|
+
*/
|
|
191
|
+
export const RadioGroupSchema = BaseSchema.extend({
|
|
192
|
+
type: z.literal('radio-group'),
|
|
193
|
+
name: z.string().optional().describe('Field name for form submission'),
|
|
194
|
+
label: z.string().optional().describe('Radio group label'),
|
|
195
|
+
defaultValue: z.union([z.string(), z.number()]).optional().describe('Default value'),
|
|
196
|
+
value: z.union([z.string(), z.number()]).optional().describe('Controlled value'),
|
|
197
|
+
options: z.array(RadioOptionSchema).describe('Radio options'),
|
|
198
|
+
orientation: z.enum(['horizontal', 'vertical']).optional().describe('Layout orientation'),
|
|
199
|
+
disabled: z.boolean().optional().describe('Whether radio group is disabled'),
|
|
200
|
+
description: z.string().optional().describe('Help text'),
|
|
201
|
+
error: z.string().optional().describe('Error message'),
|
|
202
|
+
onChange: z.function().optional().describe('Change handler'),
|
|
203
|
+
});
|
|
204
|
+
/**
|
|
205
|
+
* Switch Schema - Toggle switch component
|
|
206
|
+
*/
|
|
207
|
+
export const SwitchSchema = BaseSchema.extend({
|
|
208
|
+
type: z.literal('switch'),
|
|
209
|
+
name: z.string().optional().describe('Field name for form submission'),
|
|
210
|
+
label: z.string().optional().describe('Switch label'),
|
|
211
|
+
defaultChecked: z.boolean().optional().describe('Default checked state'),
|
|
212
|
+
checked: z.boolean().optional().describe('Controlled checked state'),
|
|
213
|
+
disabled: z.boolean().optional().describe('Whether switch is disabled'),
|
|
214
|
+
description: z.string().optional().describe('Help text'),
|
|
215
|
+
onChange: z.function().optional().describe('Change handler'),
|
|
216
|
+
});
|
|
217
|
+
/**
|
|
218
|
+
* Toggle Schema - Toggle button component
|
|
219
|
+
*/
|
|
220
|
+
export const ToggleSchema = BaseSchema.extend({
|
|
221
|
+
type: z.literal('toggle'),
|
|
222
|
+
label: z.string().optional().describe('Toggle label'),
|
|
223
|
+
defaultPressed: z.boolean().optional().describe('Default pressed state'),
|
|
224
|
+
pressed: z.boolean().optional().describe('Controlled pressed state'),
|
|
225
|
+
disabled: z.boolean().optional().describe('Whether toggle is disabled'),
|
|
226
|
+
variant: z.enum(['default', 'outline']).optional().describe('Toggle variant'),
|
|
227
|
+
size: z.enum(['default', 'sm', 'lg']).optional().describe('Toggle size'),
|
|
228
|
+
onChange: z.function().optional().describe('Change handler'),
|
|
229
|
+
children: z.union([SchemaNodeSchema, z.array(SchemaNodeSchema)]).optional(),
|
|
230
|
+
});
|
|
231
|
+
/**
|
|
232
|
+
* Slider Schema - Range slider component
|
|
233
|
+
*/
|
|
234
|
+
export const SliderSchema = BaseSchema.extend({
|
|
235
|
+
type: z.literal('slider'),
|
|
236
|
+
name: z.string().optional().describe('Field name for form submission'),
|
|
237
|
+
label: z.string().optional().describe('Slider label'),
|
|
238
|
+
defaultValue: z.union([z.number(), z.array(z.number())]).optional().describe('Default value(s)'),
|
|
239
|
+
value: z.union([z.number(), z.array(z.number())]).optional().describe('Controlled value(s)'),
|
|
240
|
+
min: z.number().optional().describe('Minimum value'),
|
|
241
|
+
max: z.number().optional().describe('Maximum value'),
|
|
242
|
+
step: z.number().optional().describe('Step value'),
|
|
243
|
+
disabled: z.boolean().optional().describe('Whether slider is disabled'),
|
|
244
|
+
description: z.string().optional().describe('Help text'),
|
|
245
|
+
onChange: z.function().optional().describe('Change handler'),
|
|
246
|
+
});
|
|
247
|
+
/**
|
|
248
|
+
* File Upload Schema - File upload component
|
|
249
|
+
*/
|
|
250
|
+
export const FileUploadSchema = BaseSchema.extend({
|
|
251
|
+
type: z.literal('file-upload'),
|
|
252
|
+
name: z.string().optional().describe('Field name for form submission'),
|
|
253
|
+
label: z.string().optional().describe('Upload label'),
|
|
254
|
+
accept: z.string().optional().describe('Accepted file types'),
|
|
255
|
+
multiple: z.boolean().optional().describe('Allow multiple files'),
|
|
256
|
+
maxSize: z.number().optional().describe('Maximum file size (bytes)'),
|
|
257
|
+
maxFiles: z.number().optional().describe('Maximum number of files'),
|
|
258
|
+
disabled: z.boolean().optional().describe('Whether upload is disabled'),
|
|
259
|
+
description: z.string().optional().describe('Help text'),
|
|
260
|
+
error: z.string().optional().describe('Error message'),
|
|
261
|
+
onChange: z.function().optional().describe('Change handler'),
|
|
262
|
+
});
|
|
263
|
+
/**
|
|
264
|
+
* Date Picker Schema - Date picker component
|
|
265
|
+
*/
|
|
266
|
+
export const DatePickerSchema = BaseSchema.extend({
|
|
267
|
+
type: z.literal('date-picker'),
|
|
268
|
+
name: z.string().optional().describe('Field name for form submission'),
|
|
269
|
+
label: z.string().optional().describe('Date picker label'),
|
|
270
|
+
placeholder: z.string().optional().describe('Placeholder text'),
|
|
271
|
+
defaultValue: z.union([z.string(), z.date()]).optional().describe('Default value'),
|
|
272
|
+
value: z.union([z.string(), z.date()]).optional().describe('Controlled value'),
|
|
273
|
+
minDate: z.union([z.string(), z.date()]).optional().describe('Minimum date'),
|
|
274
|
+
maxDate: z.union([z.string(), z.date()]).optional().describe('Maximum date'),
|
|
275
|
+
format: z.string().optional().describe('Date format string'),
|
|
276
|
+
disabled: z.boolean().optional().describe('Whether date picker is disabled'),
|
|
277
|
+
description: z.string().optional().describe('Help text'),
|
|
278
|
+
error: z.string().optional().describe('Error message'),
|
|
279
|
+
onChange: z.function().optional().describe('Change handler'),
|
|
280
|
+
});
|
|
281
|
+
/**
|
|
282
|
+
* Calendar Schema - Calendar component
|
|
283
|
+
*/
|
|
284
|
+
export const CalendarSchema = BaseSchema.extend({
|
|
285
|
+
type: z.literal('calendar'),
|
|
286
|
+
defaultValue: z.union([z.string(), z.date()]).optional().describe('Default value'),
|
|
287
|
+
value: z.union([z.string(), z.date()]).optional().describe('Controlled value'),
|
|
288
|
+
mode: z.enum(['single', 'multiple', 'range']).optional().describe('Selection mode'),
|
|
289
|
+
minDate: z.union([z.string(), z.date()]).optional().describe('Minimum date'),
|
|
290
|
+
maxDate: z.union([z.string(), z.date()]).optional().describe('Maximum date'),
|
|
291
|
+
disabled: z.boolean().optional().describe('Whether calendar is disabled'),
|
|
292
|
+
onChange: z.function().optional().describe('Change handler'),
|
|
293
|
+
});
|
|
294
|
+
/**
|
|
295
|
+
* Input OTP Schema - One-time password input
|
|
296
|
+
*/
|
|
297
|
+
export const InputOTPSchema = BaseSchema.extend({
|
|
298
|
+
type: z.literal('input-otp'),
|
|
299
|
+
name: z.string().optional().describe('Field name for form submission'),
|
|
300
|
+
label: z.string().optional().describe('OTP input label'),
|
|
301
|
+
length: z.number().optional().describe('Number of OTP digits'),
|
|
302
|
+
defaultValue: z.string().optional().describe('Default value'),
|
|
303
|
+
value: z.string().optional().describe('Controlled value'),
|
|
304
|
+
disabled: z.boolean().optional().describe('Whether OTP input is disabled'),
|
|
305
|
+
description: z.string().optional().describe('Help text'),
|
|
306
|
+
error: z.string().optional().describe('Error message'),
|
|
307
|
+
onChange: z.function().optional().describe('Change handler'),
|
|
308
|
+
onComplete: z.function().optional().describe('Complete handler'),
|
|
309
|
+
});
|
|
310
|
+
/**
|
|
311
|
+
* Combobox Schema - Searchable select component
|
|
312
|
+
*/
|
|
313
|
+
export const ComboboxSchema = BaseSchema.extend({
|
|
314
|
+
type: z.literal('combobox'),
|
|
315
|
+
name: z.string().optional().describe('Field name for form submission'),
|
|
316
|
+
label: z.string().optional().describe('Combobox label'),
|
|
317
|
+
placeholder: z.string().optional().describe('Placeholder text'),
|
|
318
|
+
options: z.array(ComboboxOptionSchema).describe('Combobox options'),
|
|
319
|
+
defaultValue: z.string().optional().describe('Default value'),
|
|
320
|
+
value: z.string().optional().describe('Controlled value'),
|
|
321
|
+
disabled: z.boolean().optional().describe('Whether combobox is disabled'),
|
|
322
|
+
description: z.string().optional().describe('Help text'),
|
|
323
|
+
error: z.string().optional().describe('Error message'),
|
|
324
|
+
onChange: z.function().optional().describe('Change handler'),
|
|
325
|
+
});
|
|
326
|
+
/**
|
|
327
|
+
* Label Schema - Form label component
|
|
328
|
+
*/
|
|
329
|
+
export const LabelSchema = BaseSchema.extend({
|
|
330
|
+
type: z.literal('label'),
|
|
331
|
+
text: z.string().optional().describe('Label text'),
|
|
332
|
+
label: z.string().optional().describe('Label text (alternative)'),
|
|
333
|
+
htmlFor: z.string().optional().describe('Associated input ID'),
|
|
334
|
+
});
|
|
335
|
+
/**
|
|
336
|
+
* Command Schema - Command palette component
|
|
337
|
+
*/
|
|
338
|
+
export const CommandSchema = BaseSchema.extend({
|
|
339
|
+
type: z.literal('command'),
|
|
340
|
+
placeholder: z.string().optional().describe('Search placeholder'),
|
|
341
|
+
emptyText: z.string().optional().describe('Empty state text'),
|
|
342
|
+
groups: z.array(CommandGroupSchema).describe('Command groups'),
|
|
343
|
+
onChange: z.function().optional().describe('Change handler'),
|
|
344
|
+
});
|
|
345
|
+
/**
|
|
346
|
+
* Form Field Schema
|
|
347
|
+
*/
|
|
348
|
+
export const FormFieldSchema = z.object({
|
|
349
|
+
id: z.string().optional().describe('Field ID'),
|
|
350
|
+
name: z.string().describe('Field name'),
|
|
351
|
+
label: z.string().optional().describe('Field label'),
|
|
352
|
+
description: z.string().optional().describe('Field description'),
|
|
353
|
+
type: z.string().describe('Field type'),
|
|
354
|
+
inputType: z.string().optional().describe('Input type'),
|
|
355
|
+
required: z.boolean().optional().describe('Required flag'),
|
|
356
|
+
disabled: z.boolean().optional().describe('Disabled flag'),
|
|
357
|
+
placeholder: z.string().optional().describe('Placeholder text'),
|
|
358
|
+
options: z.array(SelectOptionSchema).optional().describe('Options for select/radio'),
|
|
359
|
+
validation: ValidationRuleSchema.optional().describe('Validation rules'),
|
|
360
|
+
condition: FieldConditionSchema.optional().describe('Conditional display'),
|
|
361
|
+
colSpan: z.number().optional().describe('Column span in grid layout'),
|
|
362
|
+
});
|
|
363
|
+
/**
|
|
364
|
+
* Form Schema - Complete form component
|
|
365
|
+
*/
|
|
366
|
+
export const FormSchema = BaseSchema.extend({
|
|
367
|
+
type: z.literal('form'),
|
|
368
|
+
fields: z.array(FormFieldSchema).describe('Form fields'),
|
|
369
|
+
defaultValues: z.record(z.string(), z.any()).optional().describe('Default form values'),
|
|
370
|
+
submitLabel: z.string().optional().describe('Submit button label'),
|
|
371
|
+
cancelLabel: z.string().optional().describe('Cancel button label'),
|
|
372
|
+
showCancel: z.boolean().optional().describe('Show cancel button'),
|
|
373
|
+
layout: z.enum(['vertical', 'horizontal', 'grid']).optional().describe('Form layout'),
|
|
374
|
+
columns: z.number().optional().describe('Number of columns (for grid layout)'),
|
|
375
|
+
validationMode: z.enum(['onSubmit', 'onChange', 'onBlur']).optional().describe('Validation mode'),
|
|
376
|
+
resetOnSubmit: z.boolean().optional().describe('Reset form on successful submit'),
|
|
377
|
+
disabled: z.boolean().optional().describe('Disable entire form'),
|
|
378
|
+
mode: z.enum(['create', 'edit', 'view']).optional().describe('Form mode'),
|
|
379
|
+
actions: z.array(z.any()).optional().describe('Custom actions'),
|
|
380
|
+
onSubmit: z.function().optional().describe('Submit handler'),
|
|
381
|
+
onChange: z.function().optional().describe('Change handler'),
|
|
382
|
+
onCancel: z.function().optional().describe('Cancel handler'),
|
|
383
|
+
showActions: z.boolean().optional().describe('Show action buttons'),
|
|
384
|
+
});
|
|
385
|
+
/**
|
|
386
|
+
* Form Component Schema Union - All form component schemas
|
|
387
|
+
*/
|
|
388
|
+
export const FormComponentSchema = z.union([
|
|
389
|
+
ButtonSchema,
|
|
390
|
+
InputSchema,
|
|
391
|
+
TextareaSchema,
|
|
392
|
+
SelectSchema,
|
|
393
|
+
CheckboxSchema,
|
|
394
|
+
RadioGroupSchema,
|
|
395
|
+
SwitchSchema,
|
|
396
|
+
ToggleSchema,
|
|
397
|
+
SliderSchema,
|
|
398
|
+
FileUploadSchema,
|
|
399
|
+
DatePickerSchema,
|
|
400
|
+
CalendarSchema,
|
|
401
|
+
InputOTPSchema,
|
|
402
|
+
ComboboxSchema,
|
|
403
|
+
LabelSchema,
|
|
404
|
+
CommandSchema,
|
|
405
|
+
FormSchema,
|
|
406
|
+
]);
|