@object-ui/types 0.3.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/README.md +19 -11
  2. package/dist/api-types.d.ts +7 -0
  3. package/dist/api-types.d.ts.map +1 -1
  4. package/dist/api-types.js +4 -6
  5. package/dist/app.d.ts +7 -0
  6. package/dist/app.d.ts.map +1 -1
  7. package/dist/app.js +4 -3
  8. package/dist/base.d.ts +7 -0
  9. package/dist/base.d.ts.map +1 -1
  10. package/dist/base.js +4 -6
  11. package/dist/complex.d.ts +68 -1
  12. package/dist/complex.d.ts.map +1 -1
  13. package/dist/complex.js +4 -5
  14. package/dist/crud.d.ts +7 -0
  15. package/dist/crud.d.ts.map +1 -1
  16. package/dist/crud.js +4 -6
  17. package/dist/data-display.d.ts +54 -2
  18. package/dist/data-display.d.ts.map +1 -1
  19. package/dist/data-display.js +4 -5
  20. package/dist/data.d.ts +16 -0
  21. package/dist/data.d.ts.map +1 -1
  22. package/dist/data.js +4 -6
  23. package/dist/disclosure.d.ts +70 -1
  24. package/dist/disclosure.d.ts.map +1 -1
  25. package/dist/disclosure.js +4 -5
  26. package/dist/feedback.d.ts +68 -1
  27. package/dist/feedback.d.ts.map +1 -1
  28. package/dist/feedback.js +4 -5
  29. package/dist/field-types.d.ts +386 -0
  30. package/dist/field-types.d.ts.map +1 -0
  31. package/dist/field-types.js +8 -0
  32. package/dist/form.d.ts +123 -1
  33. package/dist/form.d.ts.map +1 -1
  34. package/dist/form.js +4 -5
  35. package/dist/index.d.ts +21 -13
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +4 -37
  38. package/dist/layout.d.ts +66 -16
  39. package/dist/layout.d.ts.map +1 -1
  40. package/dist/layout.js +4 -6
  41. package/dist/navigation.d.ts +102 -2
  42. package/dist/navigation.d.ts.map +1 -1
  43. package/dist/navigation.js +4 -5
  44. package/dist/objectql.d.ts +484 -54
  45. package/dist/objectql.d.ts.map +1 -1
  46. package/dist/objectql.js +4 -6
  47. package/dist/overlay.d.ts +31 -1
  48. package/dist/overlay.d.ts.map +1 -1
  49. package/dist/overlay.js +4 -5
  50. package/dist/registry.d.ts +7 -0
  51. package/dist/registry.d.ts.map +1 -1
  52. package/dist/registry.js +7 -0
  53. package/dist/zod/base.zod.d.ts +202 -0
  54. package/dist/zod/base.zod.d.ts.map +1 -0
  55. package/dist/zod/base.zod.js +198 -0
  56. package/dist/zod/complex.zod.d.ts +742 -0
  57. package/dist/zod/complex.zod.d.ts.map +1 -0
  58. package/dist/zod/complex.zod.js +233 -0
  59. package/dist/zod/data-display.zod.d.ts +996 -0
  60. package/dist/zod/data-display.zod.d.ts.map +1 -0
  61. package/dist/zod/data-display.zod.js +266 -0
  62. package/dist/zod/disclosure.zod.d.ts +267 -0
  63. package/dist/zod/disclosure.zod.d.ts.map +1 -0
  64. package/dist/zod/disclosure.zod.js +84 -0
  65. package/dist/zod/feedback.zod.d.ts +538 -0
  66. package/dist/zod/feedback.zod.d.ts.map +1 -0
  67. package/dist/zod/feedback.zod.js +127 -0
  68. package/dist/zod/form.zod.d.ts +1308 -0
  69. package/dist/zod/form.zod.d.ts.map +1 -0
  70. package/dist/zod/form.zod.js +406 -0
  71. package/dist/zod/index.zod.d.ts +3174 -0
  72. package/dist/zod/index.zod.d.ts.map +1 -0
  73. package/dist/zod/index.zod.js +106 -0
  74. package/dist/zod/layout.zod.d.ts +1048 -0
  75. package/dist/zod/layout.zod.d.ts.map +1 -0
  76. package/dist/zod/layout.zod.js +241 -0
  77. package/dist/zod/navigation.zod.d.ts +486 -0
  78. package/dist/zod/navigation.zod.d.ts.map +1 -0
  79. package/dist/zod/navigation.zod.js +142 -0
  80. package/dist/zod/objectql.zod.d.ts +1261 -0
  81. package/dist/zod/objectql.zod.d.ts.map +1 -0
  82. package/dist/zod/objectql.zod.js +248 -0
  83. package/dist/zod/overlay.zod.d.ts +691 -0
  84. package/dist/zod/overlay.zod.d.ts.map +1 -0
  85. package/dist/zod/overlay.zod.js +179 -0
  86. package/package.json +9 -1
  87. package/src/api-types.ts +8 -0
  88. package/src/app.ts +8 -0
  89. package/src/base.ts +8 -0
  90. package/src/complex.ts +69 -1
  91. package/src/crud.ts +8 -0
  92. package/src/data-display.ts +60 -2
  93. package/src/data.ts +18 -0
  94. package/src/disclosure.ts +74 -1
  95. package/src/feedback.ts +76 -2
  96. package/src/field-types.ts +465 -0
  97. package/src/form.ts +131 -1
  98. package/src/index.ts +91 -8
  99. package/src/layout.ts +70 -15
  100. package/src/navigation.ts +109 -2
  101. package/src/objectql.ts +555 -59
  102. package/src/overlay.ts +35 -1
  103. package/src/registry.ts +8 -0
  104. package/src/zod/README.md +329 -0
  105. package/src/zod/base.zod.ts +229 -0
  106. package/src/zod/complex.zod.ts +258 -0
  107. package/src/zod/data-display.zod.ts +290 -0
  108. package/src/zod/disclosure.zod.ts +92 -0
  109. package/src/zod/feedback.zod.ts +138 -0
  110. package/src/zod/form.zod.ts +434 -0
  111. package/src/zod/index.zod.ts +277 -0
  112. package/src/zod/layout.zod.ts +262 -0
  113. package/src/zod/navigation.zod.ts +159 -0
  114. package/src/zod/objectql.zod.ts +268 -0
  115. package/src/zod/overlay.zod.ts +196 -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';
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
+ ]);