config-driven-form 1.0.0 → 1.1.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.
- package/README.md +1 -1
- package/dist/index.css +99 -0
- package/dist/index.css.map +1 -1
- package/dist/index.d.mts +18 -2
- package/dist/index.d.ts +18 -2
- package/dist/index.js +289 -19
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +289 -19
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
package/dist/index.css
CHANGED
|
@@ -173,4 +173,103 @@
|
|
|
173
173
|
height: 0;
|
|
174
174
|
pointer-events: none;
|
|
175
175
|
}
|
|
176
|
+
.cdf-form-grid-1 {
|
|
177
|
+
display: grid;
|
|
178
|
+
grid-template-columns: 1fr;
|
|
179
|
+
gap: 1.25rem;
|
|
180
|
+
}
|
|
181
|
+
.cdf-form-grid-2 {
|
|
182
|
+
display: grid;
|
|
183
|
+
grid-template-columns: repeat(2, 1fr);
|
|
184
|
+
gap: 1.25rem;
|
|
185
|
+
}
|
|
186
|
+
.cdf-form-grid-3 {
|
|
187
|
+
display: grid;
|
|
188
|
+
grid-template-columns: repeat(3, 1fr);
|
|
189
|
+
gap: 1.25rem;
|
|
190
|
+
}
|
|
191
|
+
.cdf-form-grid-4 {
|
|
192
|
+
display: grid;
|
|
193
|
+
grid-template-columns: repeat(4, 1fr);
|
|
194
|
+
gap: 1.25rem;
|
|
195
|
+
}
|
|
196
|
+
.cdf-form-grid-1 > .cdf-field-group,
|
|
197
|
+
.cdf-form-grid-2 > .cdf-field-group,
|
|
198
|
+
.cdf-form-grid-3 > .cdf-field-group,
|
|
199
|
+
.cdf-form-grid-4 > .cdf-field-group {
|
|
200
|
+
margin-bottom: 0;
|
|
201
|
+
}
|
|
202
|
+
.cdf-select {
|
|
203
|
+
appearance: none;
|
|
204
|
+
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%2364748b' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e");
|
|
205
|
+
background-position: right 0.5rem center;
|
|
206
|
+
background-repeat: no-repeat;
|
|
207
|
+
background-size: 1.5em 1.5em;
|
|
208
|
+
padding-right: 2.5rem;
|
|
209
|
+
}
|
|
210
|
+
.cdf-radio-group,
|
|
211
|
+
.cdf-checkbox-group {
|
|
212
|
+
display: flex;
|
|
213
|
+
flex-direction: column;
|
|
214
|
+
gap: 0.5rem;
|
|
215
|
+
margin-top: 0.25rem;
|
|
216
|
+
}
|
|
217
|
+
.cdf-radio-label,
|
|
218
|
+
.cdf-checkbox-label {
|
|
219
|
+
display: flex;
|
|
220
|
+
align-items: center;
|
|
221
|
+
gap: 0.5rem;
|
|
222
|
+
font-size: 0.9375rem;
|
|
223
|
+
color: var(--cdf-text);
|
|
224
|
+
cursor: pointer;
|
|
225
|
+
}
|
|
226
|
+
.cdf-radio-input,
|
|
227
|
+
.cdf-checkbox-input {
|
|
228
|
+
width: 1.125rem;
|
|
229
|
+
height: 1.125rem;
|
|
230
|
+
accent-color: var(--cdf-primary);
|
|
231
|
+
cursor: pointer;
|
|
232
|
+
margin: 0;
|
|
233
|
+
}
|
|
234
|
+
.cdf-file-wrapper {
|
|
235
|
+
position: relative;
|
|
236
|
+
display: flex;
|
|
237
|
+
flex-direction: column;
|
|
238
|
+
align-items: center;
|
|
239
|
+
justify-content: center;
|
|
240
|
+
padding: 1.5rem;
|
|
241
|
+
border: 2px dashed var(--cdf-border);
|
|
242
|
+
border-radius: var(--cdf-radius);
|
|
243
|
+
background-color: var(--cdf-surface);
|
|
244
|
+
transition: var(--cdf-transition);
|
|
245
|
+
text-align: center;
|
|
246
|
+
}
|
|
247
|
+
.cdf-file-wrapper:hover,
|
|
248
|
+
.cdf-file-wrapper:focus-within {
|
|
249
|
+
border-color: var(--cdf-primary);
|
|
250
|
+
background-color: var(--cdf-primary-light);
|
|
251
|
+
}
|
|
252
|
+
.cdf-file-input {
|
|
253
|
+
position: absolute;
|
|
254
|
+
inset: 0;
|
|
255
|
+
width: 100%;
|
|
256
|
+
height: 100%;
|
|
257
|
+
opacity: 0;
|
|
258
|
+
cursor: pointer;
|
|
259
|
+
}
|
|
260
|
+
.cdf-file-text {
|
|
261
|
+
font-size: 0.875rem;
|
|
262
|
+
color: var(--cdf-text-muted);
|
|
263
|
+
pointer-events: none;
|
|
264
|
+
}
|
|
265
|
+
.cdf-file-text span {
|
|
266
|
+
color: var(--cdf-primary);
|
|
267
|
+
font-weight: 500;
|
|
268
|
+
}
|
|
269
|
+
.cdf-file-preview {
|
|
270
|
+
margin-top: 0.75rem;
|
|
271
|
+
font-size: 0.875rem;
|
|
272
|
+
color: var(--cdf-text);
|
|
273
|
+
word-break: break-all;
|
|
274
|
+
}
|
|
176
275
|
/*# sourceMappingURL=index.css.map */
|
package/dist/index.css.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/styles/form.css"],"sourcesContent":[":root {\n --cdf-primary: #6366f1;\n --cdf-primary-hover: #4f46e5;\n --cdf-primary-light: rgba(99, 102, 241, 0.1);\n --cdf-error: #ef4444;\n --cdf-error-light: rgba(239, 68, 68, 0.1);\n --cdf-bg: #ffffff;\n --cdf-surface: #f8fafc;\n --cdf-border: #e2e8f0;\n --cdf-border-focus: #94a3b8;\n --cdf-text: #0f172a;\n --cdf-text-muted: #64748b;\n --cdf-radius: 12px;\n --cdf-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05), 0 2px 4px -2px rgba(0, 0, 0, 0.05);\n --cdf-shadow-focus: 0 0 0 4px rgba(99, 102, 241, 0.15);\n --cdf-font: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n --cdf-transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n.cdf-form-container {\n font-family: var(--cdf-font);\n color: var(--cdf-text);\n background: var(--cdf-bg);\n border-radius: var(--cdf-radius);\n padding: 2rem;\n box-shadow: var(--cdf-shadow);\n max-width: 600px;\n margin: 0 auto;\n border: 1px solid var(--cdf-border);\n}\n\n.cdf-form-title {\n font-size: 1.5rem;\n font-weight: 600;\n margin-bottom: 1.5rem;\n color: var(--cdf-text);\n}\n\n.cdf-field-group {\n margin-bottom: 1.25rem;\n display: flex;\n flex-direction: column;\n}\n\n.cdf-label {\n font-size: 0.875rem;\n font-weight: 500;\n margin-bottom: 0.5rem;\n color: var(--cdf-text);\n display: flex;\n align-items: center;\n gap: 0.25rem;\n}\n\n.cdf-required-mark {\n color: var(--cdf-error);\n}\n\n.cdf-input-wrapper {\n position: relative;\n display: flex;\n align-items: center;\n}\n\n.cdf-input {\n width: 100%;\n padding: 0.75rem 1rem;\n font-size: 0.9375rem;\n font-family: var(--cdf-font);\n color: var(--cdf-text);\n background-color: var(--cdf-surface);\n border: 1px solid var(--cdf-border);\n border-radius: var(--cdf-radius);\n transition: var(--cdf-transition);\n outline: none;\n box-sizing: border-box;\n}\n\n.cdf-input:hover {\n border-color: var(--cdf-border-focus);\n}\n\n.cdf-input:focus {\n border-color: var(--cdf-primary);\n background-color: var(--cdf-bg);\n box-shadow: var(--cdf-shadow-focus);\n}\n\n.cdf-input--error {\n border-color: var(--cdf-error);\n background-color: var(--cdf-error-light);\n}\n\n.cdf-input--error:focus {\n border-color: var(--cdf-error);\n box-shadow: 0 0 0 4px rgba(239, 68, 68, 0.15);\n}\n\n.cdf-error-message {\n font-size: 0.75rem;\n color: var(--cdf-error);\n margin-top: 0.375rem;\n display: flex;\n align-items: center;\n gap: 0.25rem;\n}\n\n.cdf-submit-btn {\n width: 100%;\n padding: 0.875rem 1.5rem;\n font-size: 1rem;\n font-weight: 600;\n font-family: var(--cdf-font);\n color: #ffffff;\n background-color: var(--cdf-primary);\n border: none;\n border-radius: var(--cdf-radius);\n cursor: pointer;\n transition: var(--cdf-transition);\n margin-top: 1rem;\n box-shadow: 0 4px 14px 0 rgba(99, 102, 241, 0.39);\n}\n\n.cdf-submit-btn:hover {\n background-color: var(--cdf-primary-hover);\n transform: translateY(-1px);\n box-shadow: 0 6px 20px rgba(99, 102, 241, 0.4);\n}\n\n.cdf-submit-btn:active {\n transform: translateY(1px);\n box-shadow: 0 2px 10px rgba(99, 102, 241, 0.3);\n}\n\n/* Rich Text Editor Overrides */\n.cdf-rich-text-wrapper {\n border: 1px solid var(--cdf-border);\n border-radius: var(--cdf-radius);\n overflow: hidden;\n transition: var(--cdf-transition);\n}\n\n.cdf-rich-text-wrapper:focus-within {\n border-color: var(--cdf-primary);\n box-shadow: var(--cdf-shadow-focus);\n}\n\n.cdf-rich-text-toolbar {\n display: flex;\n gap: 0.25rem;\n padding: 0.5rem;\n background: var(--cdf-surface);\n border-bottom: 1px solid var(--cdf-border);\n}\n\n.cdf-toolbar-btn {\n padding: 0.375rem;\n background: transparent;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n color: var(--cdf-text-muted);\n transition: var(--cdf-transition);\n}\n\n.cdf-toolbar-btn:hover {\n background: rgba(0, 0, 0, 0.05);\n color: var(--cdf-text);\n}\n\n.cdf-toolbar-btn.is-active {\n background: var(--cdf-primary-light);\n color: var(--cdf-primary);\n}\n\n.cdf-rich-text-content {\n padding: 1rem;\n min-height: 120px;\n background: var(--cdf-bg);\n outline: none;\n}\n\n.cdf-rich-text-content .ProseMirror {\n outline: none;\n}\n\n.cdf-rich-text-content .ProseMirror p.is-editor-empty:first-child::before {\n color: var(--cdf-text-muted);\n content: attr(data-placeholder);\n float: left;\n height: 0;\n pointer-events: none;\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/styles/form.css"],"sourcesContent":[":root {\n --cdf-primary: #6366f1;\n --cdf-primary-hover: #4f46e5;\n --cdf-primary-light: rgba(99, 102, 241, 0.1);\n --cdf-error: #ef4444;\n --cdf-error-light: rgba(239, 68, 68, 0.1);\n --cdf-bg: #ffffff;\n --cdf-surface: #f8fafc;\n --cdf-border: #e2e8f0;\n --cdf-border-focus: #94a3b8;\n --cdf-text: #0f172a;\n --cdf-text-muted: #64748b;\n --cdf-radius: 12px;\n --cdf-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05), 0 2px 4px -2px rgba(0, 0, 0, 0.05);\n --cdf-shadow-focus: 0 0 0 4px rgba(99, 102, 241, 0.15);\n --cdf-font: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n --cdf-transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n.cdf-form-container {\n font-family: var(--cdf-font);\n color: var(--cdf-text);\n background: var(--cdf-bg);\n border-radius: var(--cdf-radius);\n padding: 2rem;\n box-shadow: var(--cdf-shadow);\n max-width: 600px;\n margin: 0 auto;\n border: 1px solid var(--cdf-border);\n}\n\n.cdf-form-title {\n font-size: 1.5rem;\n font-weight: 600;\n margin-bottom: 1.5rem;\n color: var(--cdf-text);\n}\n\n.cdf-field-group {\n margin-bottom: 1.25rem;\n display: flex;\n flex-direction: column;\n}\n\n.cdf-label {\n font-size: 0.875rem;\n font-weight: 500;\n margin-bottom: 0.5rem;\n color: var(--cdf-text);\n display: flex;\n align-items: center;\n gap: 0.25rem;\n}\n\n.cdf-required-mark {\n color: var(--cdf-error);\n}\n\n.cdf-input-wrapper {\n position: relative;\n display: flex;\n align-items: center;\n}\n\n.cdf-input {\n width: 100%;\n padding: 0.75rem 1rem;\n font-size: 0.9375rem;\n font-family: var(--cdf-font);\n color: var(--cdf-text);\n background-color: var(--cdf-surface);\n border: 1px solid var(--cdf-border);\n border-radius: var(--cdf-radius);\n transition: var(--cdf-transition);\n outline: none;\n box-sizing: border-box;\n}\n\n.cdf-input:hover {\n border-color: var(--cdf-border-focus);\n}\n\n.cdf-input:focus {\n border-color: var(--cdf-primary);\n background-color: var(--cdf-bg);\n box-shadow: var(--cdf-shadow-focus);\n}\n\n.cdf-input--error {\n border-color: var(--cdf-error);\n background-color: var(--cdf-error-light);\n}\n\n.cdf-input--error:focus {\n border-color: var(--cdf-error);\n box-shadow: 0 0 0 4px rgba(239, 68, 68, 0.15);\n}\n\n.cdf-error-message {\n font-size: 0.75rem;\n color: var(--cdf-error);\n margin-top: 0.375rem;\n display: flex;\n align-items: center;\n gap: 0.25rem;\n}\n\n.cdf-submit-btn {\n width: 100%;\n padding: 0.875rem 1.5rem;\n font-size: 1rem;\n font-weight: 600;\n font-family: var(--cdf-font);\n color: #ffffff;\n background-color: var(--cdf-primary);\n border: none;\n border-radius: var(--cdf-radius);\n cursor: pointer;\n transition: var(--cdf-transition);\n margin-top: 1rem;\n box-shadow: 0 4px 14px 0 rgba(99, 102, 241, 0.39);\n}\n\n.cdf-submit-btn:hover {\n background-color: var(--cdf-primary-hover);\n transform: translateY(-1px);\n box-shadow: 0 6px 20px rgba(99, 102, 241, 0.4);\n}\n\n.cdf-submit-btn:active {\n transform: translateY(1px);\n box-shadow: 0 2px 10px rgba(99, 102, 241, 0.3);\n}\n\n/* Rich Text Editor Overrides */\n.cdf-rich-text-wrapper {\n border: 1px solid var(--cdf-border);\n border-radius: var(--cdf-radius);\n overflow: hidden;\n transition: var(--cdf-transition);\n}\n\n.cdf-rich-text-wrapper:focus-within {\n border-color: var(--cdf-primary);\n box-shadow: var(--cdf-shadow-focus);\n}\n\n.cdf-rich-text-toolbar {\n display: flex;\n gap: 0.25rem;\n padding: 0.5rem;\n background: var(--cdf-surface);\n border-bottom: 1px solid var(--cdf-border);\n}\n\n.cdf-toolbar-btn {\n padding: 0.375rem;\n background: transparent;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n color: var(--cdf-text-muted);\n transition: var(--cdf-transition);\n}\n\n.cdf-toolbar-btn:hover {\n background: rgba(0, 0, 0, 0.05);\n color: var(--cdf-text);\n}\n\n.cdf-toolbar-btn.is-active {\n background: var(--cdf-primary-light);\n color: var(--cdf-primary);\n}\n\n.cdf-rich-text-content {\n padding: 1rem;\n min-height: 120px;\n background: var(--cdf-bg);\n outline: none;\n}\n\n.cdf-rich-text-content .ProseMirror {\n outline: none;\n}\n\n.cdf-rich-text-content .ProseMirror p.is-editor-empty:first-child::before {\n color: var(--cdf-text-muted);\n content: attr(data-placeholder);\n float: left;\n height: 0;\n pointer-events: none;\n}\n\n/* Grid Layouts */\n.cdf-form-grid-1 {\n display: grid;\n grid-template-columns: 1fr;\n gap: 1.25rem;\n}\n\n.cdf-form-grid-2 {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 1.25rem;\n}\n\n.cdf-form-grid-3 {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 1.25rem;\n}\n\n.cdf-form-grid-4 {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 1.25rem;\n}\n\n/* Fix field group margin inside grid */\n.cdf-form-grid-1 > .cdf-field-group,\n.cdf-form-grid-2 > .cdf-field-group,\n.cdf-form-grid-3 > .cdf-field-group,\n.cdf-form-grid-4 > .cdf-field-group {\n margin-bottom: 0;\n}\n\n/* Select Field */\n.cdf-select {\n appearance: none;\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%2364748b' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e\");\n background-position: right 0.5rem center;\n background-repeat: no-repeat;\n background-size: 1.5em 1.5em;\n padding-right: 2.5rem;\n}\n\n/* Radio and Checkbox Fields */\n.cdf-radio-group,\n.cdf-checkbox-group {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n margin-top: 0.25rem;\n}\n\n.cdf-radio-label,\n.cdf-checkbox-label {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n font-size: 0.9375rem;\n color: var(--cdf-text);\n cursor: pointer;\n}\n\n.cdf-radio-input,\n.cdf-checkbox-input {\n width: 1.125rem;\n height: 1.125rem;\n accent-color: var(--cdf-primary);\n cursor: pointer;\n margin: 0;\n}\n\n/* File Field */\n.cdf-file-wrapper {\n position: relative;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 1.5rem;\n border: 2px dashed var(--cdf-border);\n border-radius: var(--cdf-radius);\n background-color: var(--cdf-surface);\n transition: var(--cdf-transition);\n text-align: center;\n}\n\n.cdf-file-wrapper:hover,\n.cdf-file-wrapper:focus-within {\n border-color: var(--cdf-primary);\n background-color: var(--cdf-primary-light);\n}\n\n.cdf-file-input {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n opacity: 0;\n cursor: pointer;\n}\n\n.cdf-file-text {\n font-size: 0.875rem;\n color: var(--cdf-text-muted);\n pointer-events: none;\n}\n\n.cdf-file-text span {\n color: var(--cdf-primary);\n font-weight: 500;\n}\n\n.cdf-file-preview {\n margin-top: 0.75rem;\n font-size: 0.875rem;\n color: var(--cdf-text);\n word-break: break-all;\n}\n"],"mappings":"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","names":[]}
|
package/dist/index.d.mts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
|
|
3
3
|
type FieldType = 'string' | 'number' | 'integer' | 'boolean' | 'object' | 'array';
|
|
4
|
-
type FieldFormat = 'email' | 'password' | 'date' | 'time' | 'uri' | 'rich-text' | string;
|
|
4
|
+
type FieldFormat = 'email' | 'password' | 'date' | 'time' | 'uri' | 'rich-text' | 'data-url' | string;
|
|
5
5
|
interface JSONSchema {
|
|
6
6
|
type: FieldType;
|
|
7
7
|
title?: string;
|
|
@@ -18,19 +18,35 @@ interface JSONSchema {
|
|
|
18
18
|
items?: JSONSchema | JSONSchema[];
|
|
19
19
|
default?: any;
|
|
20
20
|
}
|
|
21
|
+
interface UISchema {
|
|
22
|
+
'ui:widget'?: 'radio' | 'checkboxes' | 'textarea' | 'color' | string;
|
|
23
|
+
'ui:columnSpan'?: number;
|
|
24
|
+
[key: string]: any;
|
|
25
|
+
}
|
|
21
26
|
|
|
22
27
|
interface SchemaFormProps {
|
|
23
28
|
schema: JSONSchema;
|
|
29
|
+
uiSchema?: Record<string, UISchema>;
|
|
24
30
|
onSubmit: (data: any) => void;
|
|
25
31
|
defaultValues?: any;
|
|
32
|
+
columns?: 1 | 2 | 3 | 4;
|
|
33
|
+
theme?: {
|
|
34
|
+
primary?: string;
|
|
35
|
+
background?: string;
|
|
36
|
+
text?: string;
|
|
37
|
+
error?: string;
|
|
38
|
+
surface?: string;
|
|
39
|
+
border?: string;
|
|
40
|
+
};
|
|
26
41
|
}
|
|
27
42
|
declare const SchemaForm: React.FC<SchemaFormProps>;
|
|
28
43
|
|
|
29
44
|
interface FieldRendererProps {
|
|
30
45
|
name: string;
|
|
31
46
|
schema: JSONSchema;
|
|
47
|
+
uiSchema?: UISchema;
|
|
32
48
|
isRequired?: boolean;
|
|
33
49
|
}
|
|
34
50
|
declare const FieldRenderer: React.FC<FieldRendererProps>;
|
|
35
51
|
|
|
36
|
-
export { type FieldFormat, FieldRenderer, type FieldType, type JSONSchema, SchemaForm };
|
|
52
|
+
export { type FieldFormat, FieldRenderer, type FieldType, type JSONSchema, SchemaForm, type UISchema };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
|
|
3
3
|
type FieldType = 'string' | 'number' | 'integer' | 'boolean' | 'object' | 'array';
|
|
4
|
-
type FieldFormat = 'email' | 'password' | 'date' | 'time' | 'uri' | 'rich-text' | string;
|
|
4
|
+
type FieldFormat = 'email' | 'password' | 'date' | 'time' | 'uri' | 'rich-text' | 'data-url' | string;
|
|
5
5
|
interface JSONSchema {
|
|
6
6
|
type: FieldType;
|
|
7
7
|
title?: string;
|
|
@@ -18,19 +18,35 @@ interface JSONSchema {
|
|
|
18
18
|
items?: JSONSchema | JSONSchema[];
|
|
19
19
|
default?: any;
|
|
20
20
|
}
|
|
21
|
+
interface UISchema {
|
|
22
|
+
'ui:widget'?: 'radio' | 'checkboxes' | 'textarea' | 'color' | string;
|
|
23
|
+
'ui:columnSpan'?: number;
|
|
24
|
+
[key: string]: any;
|
|
25
|
+
}
|
|
21
26
|
|
|
22
27
|
interface SchemaFormProps {
|
|
23
28
|
schema: JSONSchema;
|
|
29
|
+
uiSchema?: Record<string, UISchema>;
|
|
24
30
|
onSubmit: (data: any) => void;
|
|
25
31
|
defaultValues?: any;
|
|
32
|
+
columns?: 1 | 2 | 3 | 4;
|
|
33
|
+
theme?: {
|
|
34
|
+
primary?: string;
|
|
35
|
+
background?: string;
|
|
36
|
+
text?: string;
|
|
37
|
+
error?: string;
|
|
38
|
+
surface?: string;
|
|
39
|
+
border?: string;
|
|
40
|
+
};
|
|
26
41
|
}
|
|
27
42
|
declare const SchemaForm: React.FC<SchemaFormProps>;
|
|
28
43
|
|
|
29
44
|
interface FieldRendererProps {
|
|
30
45
|
name: string;
|
|
31
46
|
schema: JSONSchema;
|
|
47
|
+
uiSchema?: UISchema;
|
|
32
48
|
isRequired?: boolean;
|
|
33
49
|
}
|
|
34
50
|
declare const FieldRenderer: React.FC<FieldRendererProps>;
|
|
35
51
|
|
|
36
|
-
export { type FieldFormat, FieldRenderer, type FieldType, type JSONSchema, SchemaForm };
|
|
52
|
+
export { type FieldFormat, FieldRenderer, type FieldType, type JSONSchema, SchemaForm, type UISchema };
|
package/dist/index.js
CHANGED
|
@@ -191,30 +191,291 @@ var RichTextField = ({ name, schema, isRequired }) => {
|
|
|
191
191
|
] })
|
|
192
192
|
] });
|
|
193
193
|
};
|
|
194
|
-
var
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
194
|
+
var SelectField = ({ name, schema, isRequired }) => {
|
|
195
|
+
var _a;
|
|
196
|
+
const {
|
|
197
|
+
register,
|
|
198
|
+
formState: { errors }
|
|
199
|
+
} = reactHookForm.useFormContext();
|
|
200
|
+
const error = errors[name];
|
|
201
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdf-field-group", children: [
|
|
202
|
+
/* @__PURE__ */ jsxRuntime.jsxs("label", { htmlFor: name, className: "cdf-label", children: [
|
|
203
|
+
schema.title || name,
|
|
204
|
+
isRequired && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdf-required-mark", children: "*" })
|
|
205
|
+
] }),
|
|
206
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdf-input-wrapper", children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
207
|
+
"select",
|
|
208
|
+
{
|
|
209
|
+
id: name,
|
|
210
|
+
...register(name),
|
|
211
|
+
className: `cdf-input cdf-select ${error ? "cdf-input--error" : ""}`,
|
|
212
|
+
children: [
|
|
213
|
+
/* @__PURE__ */ jsxRuntime.jsx("option", { value: "", children: "Select an option..." }),
|
|
214
|
+
(_a = schema.enum) == null ? void 0 : _a.map((option) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: option, children: option }, option))
|
|
215
|
+
]
|
|
216
|
+
}
|
|
217
|
+
) }),
|
|
218
|
+
error && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "cdf-error-message", children: [
|
|
219
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
220
|
+
"svg",
|
|
221
|
+
{
|
|
222
|
+
width: "14",
|
|
223
|
+
height: "14",
|
|
224
|
+
viewBox: "0 0 24 24",
|
|
225
|
+
fill: "none",
|
|
226
|
+
stroke: "currentColor",
|
|
227
|
+
strokeWidth: "2",
|
|
228
|
+
children: [
|
|
229
|
+
/* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "10" }),
|
|
230
|
+
/* @__PURE__ */ jsxRuntime.jsx("line", { x1: "12", y1: "8", x2: "12", y2: "12" }),
|
|
231
|
+
/* @__PURE__ */ jsxRuntime.jsx("line", { x1: "12", y1: "16", x2: "12.01", y2: "16" })
|
|
232
|
+
]
|
|
233
|
+
}
|
|
234
|
+
),
|
|
235
|
+
error.message
|
|
236
|
+
] })
|
|
237
|
+
] });
|
|
238
|
+
};
|
|
239
|
+
var RadioField = ({ name, schema, isRequired }) => {
|
|
240
|
+
var _a;
|
|
241
|
+
const {
|
|
242
|
+
register,
|
|
243
|
+
formState: { errors }
|
|
244
|
+
} = reactHookForm.useFormContext();
|
|
245
|
+
const error = errors[name];
|
|
246
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdf-field-group", children: [
|
|
247
|
+
/* @__PURE__ */ jsxRuntime.jsxs("label", { className: "cdf-label", children: [
|
|
248
|
+
schema.title || name,
|
|
249
|
+
isRequired && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdf-required-mark", children: "*" })
|
|
250
|
+
] }),
|
|
251
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdf-radio-group", children: (_a = schema.enum) == null ? void 0 : _a.map((option) => /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "cdf-radio-label", children: [
|
|
252
|
+
/* @__PURE__ */ jsxRuntime.jsx("input", { type: "radio", value: option, ...register(name), className: "cdf-radio-input" }),
|
|
253
|
+
option
|
|
254
|
+
] }, option)) }),
|
|
255
|
+
error && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "cdf-error-message", children: [
|
|
256
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
257
|
+
"svg",
|
|
258
|
+
{
|
|
259
|
+
width: "14",
|
|
260
|
+
height: "14",
|
|
261
|
+
viewBox: "0 0 24 24",
|
|
262
|
+
fill: "none",
|
|
263
|
+
stroke: "currentColor",
|
|
264
|
+
strokeWidth: "2",
|
|
265
|
+
children: [
|
|
266
|
+
/* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "10" }),
|
|
267
|
+
/* @__PURE__ */ jsxRuntime.jsx("line", { x1: "12", y1: "8", x2: "12", y2: "12" }),
|
|
268
|
+
/* @__PURE__ */ jsxRuntime.jsx("line", { x1: "12", y1: "16", x2: "12.01", y2: "16" })
|
|
269
|
+
]
|
|
270
|
+
}
|
|
271
|
+
),
|
|
272
|
+
error.message
|
|
273
|
+
] })
|
|
274
|
+
] });
|
|
275
|
+
};
|
|
276
|
+
var CheckboxField = ({ name, schema, isRequired }) => {
|
|
277
|
+
const {
|
|
278
|
+
register,
|
|
279
|
+
formState: { errors }
|
|
280
|
+
} = reactHookForm.useFormContext();
|
|
281
|
+
const error = errors[name];
|
|
282
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdf-field-group", children: [
|
|
283
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdf-checkbox-group", children: /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "cdf-checkbox-label", children: [
|
|
284
|
+
/* @__PURE__ */ jsxRuntime.jsx("input", { type: "checkbox", ...register(name), className: "cdf-checkbox-input" }),
|
|
285
|
+
schema.title || name,
|
|
286
|
+
isRequired && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdf-required-mark", children: "*" })
|
|
287
|
+
] }) }),
|
|
288
|
+
schema.description && /* @__PURE__ */ jsxRuntime.jsx("p", { style: { fontSize: "0.875rem", color: "var(--cdf-text-muted)", marginTop: "0.25rem" }, children: schema.description }),
|
|
289
|
+
error && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "cdf-error-message", children: [
|
|
290
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
291
|
+
"svg",
|
|
292
|
+
{
|
|
293
|
+
width: "14",
|
|
294
|
+
height: "14",
|
|
295
|
+
viewBox: "0 0 24 24",
|
|
296
|
+
fill: "none",
|
|
297
|
+
stroke: "currentColor",
|
|
298
|
+
strokeWidth: "2",
|
|
299
|
+
children: [
|
|
300
|
+
/* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "10" }),
|
|
301
|
+
/* @__PURE__ */ jsxRuntime.jsx("line", { x1: "12", y1: "8", x2: "12", y2: "12" }),
|
|
302
|
+
/* @__PURE__ */ jsxRuntime.jsx("line", { x1: "12", y1: "16", x2: "12.01", y2: "16" })
|
|
303
|
+
]
|
|
304
|
+
}
|
|
305
|
+
),
|
|
306
|
+
error.message
|
|
307
|
+
] })
|
|
308
|
+
] });
|
|
309
|
+
};
|
|
310
|
+
var CheckboxGroupField = ({
|
|
311
|
+
name,
|
|
312
|
+
schema,
|
|
313
|
+
isRequired
|
|
314
|
+
}) => {
|
|
315
|
+
const {
|
|
316
|
+
register,
|
|
317
|
+
formState: { errors }
|
|
318
|
+
} = reactHookForm.useFormContext();
|
|
319
|
+
const error = errors[name];
|
|
320
|
+
let options = [];
|
|
321
|
+
if (schema.items && !Array.isArray(schema.items) && schema.items.enum) {
|
|
322
|
+
options = schema.items.enum;
|
|
323
|
+
}
|
|
324
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdf-field-group", children: [
|
|
325
|
+
/* @__PURE__ */ jsxRuntime.jsxs("label", { className: "cdf-label", children: [
|
|
326
|
+
schema.title || name,
|
|
327
|
+
isRequired && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdf-required-mark", children: "*" })
|
|
328
|
+
] }),
|
|
329
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdf-checkbox-group", children: options.map((option) => /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "cdf-checkbox-label", children: [
|
|
330
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
331
|
+
"input",
|
|
332
|
+
{
|
|
333
|
+
type: "checkbox",
|
|
334
|
+
value: option,
|
|
335
|
+
...register(name),
|
|
336
|
+
className: "cdf-checkbox-input"
|
|
337
|
+
}
|
|
338
|
+
),
|
|
339
|
+
option
|
|
340
|
+
] }, option)) }),
|
|
341
|
+
error && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "cdf-error-message", children: [
|
|
342
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
343
|
+
"svg",
|
|
344
|
+
{
|
|
345
|
+
width: "14",
|
|
346
|
+
height: "14",
|
|
347
|
+
viewBox: "0 0 24 24",
|
|
348
|
+
fill: "none",
|
|
349
|
+
stroke: "currentColor",
|
|
350
|
+
strokeWidth: "2",
|
|
351
|
+
children: [
|
|
352
|
+
/* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "10" }),
|
|
353
|
+
/* @__PURE__ */ jsxRuntime.jsx("line", { x1: "12", y1: "8", x2: "12", y2: "12" }),
|
|
354
|
+
/* @__PURE__ */ jsxRuntime.jsx("line", { x1: "12", y1: "16", x2: "12.01", y2: "16" })
|
|
355
|
+
]
|
|
356
|
+
}
|
|
357
|
+
),
|
|
358
|
+
error.message
|
|
359
|
+
] })
|
|
360
|
+
] });
|
|
361
|
+
};
|
|
362
|
+
var FileField = ({ name, schema, isRequired }) => {
|
|
363
|
+
const {
|
|
364
|
+
setValue,
|
|
365
|
+
formState: { errors }
|
|
366
|
+
} = reactHookForm.useFormContext();
|
|
367
|
+
const [fileName, setFileName] = react.useState(null);
|
|
368
|
+
const error = errors[name];
|
|
369
|
+
const handleFileChange = (e) => {
|
|
370
|
+
var _a;
|
|
371
|
+
const file = (_a = e.target.files) == null ? void 0 : _a[0];
|
|
372
|
+
if (!file) {
|
|
373
|
+
setValue(name, void 0, { shouldValidate: true });
|
|
374
|
+
setFileName(null);
|
|
375
|
+
return;
|
|
376
|
+
}
|
|
377
|
+
setFileName(file.name);
|
|
378
|
+
const reader = new FileReader();
|
|
379
|
+
reader.onload = (event) => {
|
|
380
|
+
var _a2;
|
|
381
|
+
setValue(name, (_a2 = event.target) == null ? void 0 : _a2.result, { shouldValidate: true });
|
|
382
|
+
};
|
|
383
|
+
reader.readAsDataURL(file);
|
|
384
|
+
};
|
|
385
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdf-field-group", children: [
|
|
386
|
+
/* @__PURE__ */ jsxRuntime.jsxs("label", { className: "cdf-label", children: [
|
|
387
|
+
schema.title || name,
|
|
388
|
+
isRequired && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdf-required-mark", children: "*" })
|
|
389
|
+
] }),
|
|
390
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: `cdf-file-wrapper ${error ? "cdf-input--error" : ""}`, children: [
|
|
391
|
+
/* @__PURE__ */ jsxRuntime.jsx("input", { type: "file", className: "cdf-file-input", onChange: handleFileChange }),
|
|
392
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdf-file-text", children: [
|
|
393
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: "Click to upload" }),
|
|
394
|
+
" or drag and drop"
|
|
395
|
+
] }),
|
|
396
|
+
fileName && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdf-file-preview", children: [
|
|
397
|
+
"Selected: ",
|
|
398
|
+
/* @__PURE__ */ jsxRuntime.jsx("strong", { children: fileName })
|
|
399
|
+
] })
|
|
400
|
+
] }),
|
|
401
|
+
error && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "cdf-error-message", children: [
|
|
402
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
403
|
+
"svg",
|
|
404
|
+
{
|
|
405
|
+
width: "14",
|
|
406
|
+
height: "14",
|
|
407
|
+
viewBox: "0 0 24 24",
|
|
408
|
+
fill: "none",
|
|
409
|
+
stroke: "currentColor",
|
|
410
|
+
strokeWidth: "2",
|
|
411
|
+
children: [
|
|
412
|
+
/* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "10" }),
|
|
413
|
+
/* @__PURE__ */ jsxRuntime.jsx("line", { x1: "12", y1: "8", x2: "12", y2: "12" }),
|
|
414
|
+
/* @__PURE__ */ jsxRuntime.jsx("line", { x1: "12", y1: "16", x2: "12.01", y2: "16" })
|
|
415
|
+
]
|
|
416
|
+
}
|
|
417
|
+
),
|
|
418
|
+
error.message
|
|
419
|
+
] })
|
|
420
|
+
] });
|
|
421
|
+
};
|
|
422
|
+
var FieldRenderer = ({
|
|
423
|
+
name,
|
|
424
|
+
schema,
|
|
425
|
+
uiSchema,
|
|
426
|
+
isRequired
|
|
427
|
+
}) => {
|
|
428
|
+
const columnSpan = (uiSchema == null ? void 0 : uiSchema["ui:columnSpan"]) || 1;
|
|
429
|
+
const widget = uiSchema == null ? void 0 : uiSchema["ui:widget"];
|
|
430
|
+
const renderField = () => {
|
|
431
|
+
if (schema.type === "array") {
|
|
432
|
+
return /* @__PURE__ */ jsxRuntime.jsx(CheckboxGroupField, { name, schema, isRequired });
|
|
198
433
|
}
|
|
199
|
-
if (schema.
|
|
200
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
434
|
+
if (schema.type === "boolean") {
|
|
435
|
+
return /* @__PURE__ */ jsxRuntime.jsx(CheckboxField, { name, schema, isRequired });
|
|
201
436
|
}
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
437
|
+
if (schema.enum) {
|
|
438
|
+
if (widget === "radio") {
|
|
439
|
+
return /* @__PURE__ */ jsxRuntime.jsx(RadioField, { name, schema, isRequired });
|
|
440
|
+
}
|
|
441
|
+
return /* @__PURE__ */ jsxRuntime.jsx(SelectField, { name, schema, isRequired });
|
|
442
|
+
}
|
|
443
|
+
if (schema.type === "string") {
|
|
444
|
+
if (schema.format === "data-url") {
|
|
445
|
+
return /* @__PURE__ */ jsxRuntime.jsx(FileField, { name, schema, isRequired });
|
|
446
|
+
}
|
|
447
|
+
if (schema.format === "password") {
|
|
448
|
+
return /* @__PURE__ */ jsxRuntime.jsx(PasswordField, { name, schema, isRequired });
|
|
449
|
+
}
|
|
450
|
+
if (schema.format === "rich-text") {
|
|
451
|
+
return /* @__PURE__ */ jsxRuntime.jsx(RichTextField, { name, schema, isRequired });
|
|
452
|
+
}
|
|
453
|
+
return /* @__PURE__ */ jsxRuntime.jsx(TextField, { name, schema, isRequired });
|
|
454
|
+
}
|
|
455
|
+
if (schema.type === "number" || schema.type === "integer") {
|
|
456
|
+
return /* @__PURE__ */ jsxRuntime.jsx(NumberField, { name, schema, isRequired });
|
|
457
|
+
}
|
|
458
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdf-field-group", children: /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "cdf-error-message", children: [
|
|
459
|
+
"Unsupported field type: ",
|
|
460
|
+
schema.type
|
|
461
|
+
] }) });
|
|
462
|
+
};
|
|
463
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { style: { gridColumn: `span ${columnSpan} / span ${columnSpan}` }, children: renderField() });
|
|
211
464
|
};
|
|
212
|
-
var SchemaForm = ({
|
|
465
|
+
var SchemaForm = ({
|
|
466
|
+
schema,
|
|
467
|
+
uiSchema = {},
|
|
468
|
+
onSubmit,
|
|
469
|
+
defaultValues,
|
|
470
|
+
columns = 1,
|
|
471
|
+
theme
|
|
472
|
+
}) => {
|
|
213
473
|
const methods = reactHookForm.useForm({
|
|
214
474
|
resolver: ajv.ajvResolver(schema, {
|
|
215
475
|
formats: {
|
|
216
476
|
"rich-text": true,
|
|
217
477
|
password: true,
|
|
478
|
+
"data-url": true,
|
|
218
479
|
email: /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/
|
|
219
480
|
}
|
|
220
481
|
}),
|
|
@@ -223,22 +484,31 @@ var SchemaForm = ({ schema, onSubmit, defaultValues }) => {
|
|
|
223
484
|
if (schema.type !== "object" || !schema.properties) {
|
|
224
485
|
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdf-error-message", children: "Root schema must be an object with properties." });
|
|
225
486
|
}
|
|
226
|
-
|
|
487
|
+
const themeStyles = theme ? {
|
|
488
|
+
"--cdf-primary": theme.primary,
|
|
489
|
+
"--cdf-bg": theme.background,
|
|
490
|
+
"--cdf-text": theme.text,
|
|
491
|
+
"--cdf-error": theme.error,
|
|
492
|
+
"--cdf-surface": theme.surface,
|
|
493
|
+
"--cdf-border": theme.border
|
|
494
|
+
} : {};
|
|
495
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdf-form-container", style: themeStyles, children: [
|
|
227
496
|
schema.title && /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "cdf-form-title", children: schema.title }),
|
|
228
497
|
schema.description && /* @__PURE__ */ jsxRuntime.jsx("p", { style: { color: "var(--cdf-text-muted)", marginBottom: "1.5rem" }, children: schema.description }),
|
|
229
498
|
/* @__PURE__ */ jsxRuntime.jsx(reactHookForm.FormProvider, { ...methods, children: /* @__PURE__ */ jsxRuntime.jsxs("form", { onSubmit: methods.handleSubmit(onSubmit), noValidate: true, children: [
|
|
230
|
-
Object.entries(schema.properties).map(([key, propSchema]) => {
|
|
499
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: `cdf-form-grid-${columns}`, children: Object.entries(schema.properties).map(([key, propSchema]) => {
|
|
231
500
|
var _a;
|
|
232
501
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
233
502
|
FieldRenderer,
|
|
234
503
|
{
|
|
235
504
|
name: key,
|
|
236
505
|
schema: propSchema,
|
|
506
|
+
uiSchema: uiSchema[key],
|
|
237
507
|
isRequired: (_a = schema.required) == null ? void 0 : _a.includes(key)
|
|
238
508
|
},
|
|
239
509
|
key
|
|
240
510
|
);
|
|
241
|
-
}),
|
|
511
|
+
}) }),
|
|
242
512
|
/* @__PURE__ */ jsxRuntime.jsx("button", { type: "submit", className: "cdf-submit-btn", children: "Submit" })
|
|
243
513
|
] }) })
|
|
244
514
|
] });
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/fields/TextField.tsx","../src/components/fields/PasswordField.tsx","../src/components/fields/NumberField.tsx","../src/components/fields/RichTextField.tsx","../src/components/FieldRenderer.tsx","../src/components/SchemaForm.tsx"],"names":["useFormContext","jsxs","jsx","AlertCircle","useState","EyeOff","Eye","useEditor","StarterKit","editor","useEffect","Bold","Italic","Heading2","List","ListOrdered","EditorContent","useForm","ajvResolver","FormProvider"],"mappings":"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","file":"index.js","sourcesContent":["import React from 'react';\nimport { useFormContext } from 'react-hook-form';\nimport { JSONSchema } from '../../types/schema';\nimport { AlertCircle } from 'lucide-react';\n\ninterface TextFieldProps {\n name: string;\n schema: JSONSchema;\n isRequired?: boolean;\n}\n\nexport const TextField: React.FC<TextFieldProps> = ({ name, schema, isRequired }) => {\n const {\n register,\n formState: { errors },\n } = useFormContext();\n const error = errors[name];\n\n return (\n <div className=\"cdf-field-group\">\n <label className=\"cdf-label\" htmlFor={name}>\n {schema.title || name}\n {isRequired && <span className=\"cdf-required-mark\">*</span>}\n </label>\n <div className=\"cdf-input-wrapper\">\n <input\n id={name}\n type={schema.format === 'email' ? 'email' : 'text'}\n className={`cdf-input ${error ? 'cdf-input--error' : ''}`}\n placeholder={`Enter ${schema.title || name}`}\n {...register(name)}\n />\n </div>\n {error && (\n <span className=\"cdf-error-message\">\n <AlertCircle size={14} />\n {error.message as string}\n </span>\n )}\n </div>\n );\n};\n","import React, { useState } from 'react';\nimport { useFormContext } from 'react-hook-form';\nimport { JSONSchema } from '../../types/schema';\nimport { AlertCircle, Eye, EyeOff } from 'lucide-react';\n\ninterface PasswordFieldProps {\n name: string;\n schema: JSONSchema;\n isRequired?: boolean;\n}\n\nexport const PasswordField: React.FC<PasswordFieldProps> = ({ name, schema, isRequired }) => {\n const {\n register,\n formState: { errors },\n } = useFormContext();\n const [showPassword, setShowPassword] = useState(false);\n const error = errors[name];\n\n return (\n <div className=\"cdf-field-group\">\n <label className=\"cdf-label\" htmlFor={name}>\n {schema.title || name}\n {isRequired && <span className=\"cdf-required-mark\">*</span>}\n </label>\n <div className=\"cdf-input-wrapper\">\n <input\n id={name}\n type={showPassword ? 'text' : 'password'}\n className={`cdf-input ${error ? 'cdf-input--error' : ''}`}\n style={{ paddingRight: '2.5rem' }}\n placeholder={`Enter ${schema.title || name}`}\n {...register(name)}\n />\n <button\n type=\"button\"\n className=\"cdf-toolbar-btn\"\n style={{ position: 'absolute', right: '0.5rem' }}\n onClick={() => setShowPassword(!showPassword)}\n >\n {showPassword ? <EyeOff size={16} /> : <Eye size={16} />}\n </button>\n </div>\n {error && (\n <span className=\"cdf-error-message\">\n <AlertCircle size={14} />\n {error.message as string}\n </span>\n )}\n </div>\n );\n};\n","import React from 'react';\nimport { useFormContext } from 'react-hook-form';\nimport { JSONSchema } from '../../types/schema';\nimport { AlertCircle } from 'lucide-react';\n\ninterface NumberFieldProps {\n name: string;\n schema: JSONSchema;\n isRequired?: boolean;\n}\n\nexport const NumberField: React.FC<NumberFieldProps> = ({ name, schema, isRequired }) => {\n const {\n register,\n formState: { errors },\n } = useFormContext();\n const error = errors[name];\n\n return (\n <div className=\"cdf-field-group\">\n <label className=\"cdf-label\" htmlFor={name}>\n {schema.title || name}\n {isRequired && <span className=\"cdf-required-mark\">*</span>}\n </label>\n <div className=\"cdf-input-wrapper\">\n <input\n id={name}\n type=\"number\"\n className={`cdf-input ${error ? 'cdf-input--error' : ''}`}\n placeholder={`Enter ${schema.title || name}`}\n {...register(name, {\n valueAsNumber: true,\n })}\n />\n </div>\n {error && (\n <span className=\"cdf-error-message\">\n <AlertCircle size={14} />\n {error.message as string}\n </span>\n )}\n </div>\n );\n};\n","import React, { useEffect } from 'react';\nimport { useFormContext } from 'react-hook-form';\nimport { useEditor, EditorContent } from '@tiptap/react';\nimport StarterKit from '@tiptap/starter-kit';\nimport { JSONSchema } from '../../types/schema';\nimport { AlertCircle, Bold, Italic, List, ListOrdered, Heading2 } from 'lucide-react';\n\ninterface RichTextFieldProps {\n name: string;\n schema: JSONSchema;\n isRequired?: boolean;\n}\n\nexport const RichTextField: React.FC<RichTextFieldProps> = ({ name, schema, isRequired }) => {\n const {\n setValue,\n watch,\n formState: { errors },\n } = useFormContext();\n const error = errors[name];\n const value = watch(name);\n\n const editor = useEditor({\n extensions: [StarterKit],\n content: value || '',\n onUpdate: ({ editor }) => {\n setValue(name, editor.getHTML(), { shouldValidate: true, shouldDirty: true });\n },\n });\n\n // Keep editor in sync with external form changes (if any)\n useEffect(() => {\n if (editor && value !== editor.getHTML()) {\n editor.commands.setContent(value || '');\n }\n }, [value, editor]);\n\n return (\n <div className=\"cdf-field-group\">\n <label className=\"cdf-label\" htmlFor={name}>\n {schema.title || name}\n {isRequired && <span className=\"cdf-required-mark\">*</span>}\n </label>\n\n <div className={`cdf-rich-text-wrapper ${error ? 'cdf-input--error' : ''}`}>\n <div className=\"cdf-rich-text-toolbar\">\n <button\n type=\"button\"\n onClick={() => editor?.chain().focus().toggleBold().run()}\n className={`cdf-toolbar-btn ${editor?.isActive('bold') ? 'is-active' : ''}`}\n >\n <Bold size={16} />\n </button>\n <button\n type=\"button\"\n onClick={() => editor?.chain().focus().toggleItalic().run()}\n className={`cdf-toolbar-btn ${editor?.isActive('italic') ? 'is-active' : ''}`}\n >\n <Italic size={16} />\n </button>\n <button\n type=\"button\"\n onClick={() => editor?.chain().focus().toggleHeading({ level: 2 }).run()}\n className={`cdf-toolbar-btn ${editor?.isActive('heading', { level: 2 }) ? 'is-active' : ''}`}\n >\n <Heading2 size={16} />\n </button>\n <button\n type=\"button\"\n onClick={() => editor?.chain().focus().toggleBulletList().run()}\n className={`cdf-toolbar-btn ${editor?.isActive('bulletList') ? 'is-active' : ''}`}\n >\n <List size={16} />\n </button>\n <button\n type=\"button\"\n onClick={() => editor?.chain().focus().toggleOrderedList().run()}\n className={`cdf-toolbar-btn ${editor?.isActive('orderedList') ? 'is-active' : ''}`}\n >\n <ListOrdered size={16} />\n </button>\n </div>\n\n <EditorContent editor={editor} className=\"cdf-rich-text-content\" />\n </div>\n\n {error && (\n <span className=\"cdf-error-message\">\n <AlertCircle size={14} />\n {error.message as string}\n </span>\n )}\n </div>\n );\n};\n","import React from 'react';\nimport { JSONSchema } from '../types/schema';\nimport { TextField } from './fields/TextField';\nimport { PasswordField } from './fields/PasswordField';\nimport { NumberField } from './fields/NumberField';\nimport { RichTextField } from './fields/RichTextField';\n\ninterface FieldRendererProps {\n name: string;\n schema: JSONSchema;\n isRequired?: boolean;\n}\n\nexport const FieldRenderer: React.FC<FieldRendererProps> = ({ name, schema, isRequired }) => {\n if (schema.type === 'string') {\n if (schema.format === 'password') {\n return <PasswordField name={name} schema={schema} isRequired={isRequired} />;\n }\n if (schema.format === 'rich-text') {\n return <RichTextField name={name} schema={schema} isRequired={isRequired} />;\n }\n return <TextField name={name} schema={schema} isRequired={isRequired} />;\n }\n\n if (schema.type === 'number' || schema.type === 'integer') {\n return <NumberField name={name} schema={schema} isRequired={isRequired} />;\n }\n\n // Fallback for unsupported types\n return (\n <div className=\"cdf-field-group\">\n <p className=\"cdf-error-message\">Unsupported field type: {schema.type}</p>\n </div>\n );\n};\n","import React from 'react';\nimport { useForm, FormProvider } from 'react-hook-form';\nimport { ajvResolver } from '@hookform/resolvers/ajv';\nimport { JSONSchema } from '../types/schema';\nimport { FieldRenderer } from './FieldRenderer';\nimport '../styles/form.css';\n\ninterface SchemaFormProps {\n schema: JSONSchema;\n onSubmit: (data: any) => void;\n defaultValues?: any;\n}\n\nexport const SchemaForm: React.FC<SchemaFormProps> = ({ schema, onSubmit, defaultValues }) => {\n const methods = useForm({\n resolver: ajvResolver(schema as any, {\n formats: {\n 'rich-text': true,\n password: true,\n email: /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/,\n },\n }),\n defaultValues,\n });\n\n if (schema.type !== 'object' || !schema.properties) {\n return <div className=\"cdf-error-message\">Root schema must be an object with properties.</div>;\n }\n\n return (\n <div className=\"cdf-form-container\">\n {schema.title && <h2 className=\"cdf-form-title\">{schema.title}</h2>}\n {schema.description && (\n <p style={{ color: 'var(--cdf-text-muted)', marginBottom: '1.5rem' }}>\n {schema.description}\n </p>\n )}\n\n <FormProvider {...methods}>\n <form onSubmit={methods.handleSubmit(onSubmit)} noValidate>\n {Object.entries(schema.properties).map(([key, propSchema]) => (\n <FieldRenderer\n key={key}\n name={key}\n schema={propSchema}\n isRequired={schema.required?.includes(key)}\n />\n ))}\n <button type=\"submit\" className=\"cdf-submit-btn\">\n Submit\n </button>\n </form>\n </FormProvider>\n </div>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/fields/TextField.tsx","../src/components/fields/PasswordField.tsx","../src/components/fields/NumberField.tsx","../src/components/fields/RichTextField.tsx","../src/components/fields/SelectField.tsx","../src/components/fields/RadioField.tsx","../src/components/fields/CheckboxField.tsx","../src/components/fields/CheckboxGroupField.tsx","../src/components/fields/FileField.tsx","../src/components/FieldRenderer.tsx","../src/components/SchemaForm.tsx"],"names":["useFormContext","jsxs","jsx","AlertCircle","useState","EyeOff","Eye","useEditor","StarterKit","editor","useEffect","Bold","Italic","Heading2","List","ListOrdered","EditorContent","_a","useForm","ajvResolver","FormProvider"],"mappings":"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","file":"index.js","sourcesContent":["import React from 'react';\nimport { useFormContext } from 'react-hook-form';\nimport { JSONSchema } from '../../types/schema';\nimport { AlertCircle } from 'lucide-react';\n\ninterface TextFieldProps {\n name: string;\n schema: JSONSchema;\n isRequired?: boolean;\n}\n\nexport const TextField: React.FC<TextFieldProps> = ({ name, schema, isRequired }) => {\n const {\n register,\n formState: { errors },\n } = useFormContext();\n const error = errors[name];\n\n return (\n <div className=\"cdf-field-group\">\n <label className=\"cdf-label\" htmlFor={name}>\n {schema.title || name}\n {isRequired && <span className=\"cdf-required-mark\">*</span>}\n </label>\n <div className=\"cdf-input-wrapper\">\n <input\n id={name}\n type={schema.format === 'email' ? 'email' : 'text'}\n className={`cdf-input ${error ? 'cdf-input--error' : ''}`}\n placeholder={`Enter ${schema.title || name}`}\n {...register(name)}\n />\n </div>\n {error && (\n <span className=\"cdf-error-message\">\n <AlertCircle size={14} />\n {error.message as string}\n </span>\n )}\n </div>\n );\n};\n","import React, { useState } from 'react';\nimport { useFormContext } from 'react-hook-form';\nimport { JSONSchema } from '../../types/schema';\nimport { AlertCircle, Eye, EyeOff } from 'lucide-react';\n\ninterface PasswordFieldProps {\n name: string;\n schema: JSONSchema;\n isRequired?: boolean;\n}\n\nexport const PasswordField: React.FC<PasswordFieldProps> = ({ name, schema, isRequired }) => {\n const {\n register,\n formState: { errors },\n } = useFormContext();\n const [showPassword, setShowPassword] = useState(false);\n const error = errors[name];\n\n return (\n <div className=\"cdf-field-group\">\n <label className=\"cdf-label\" htmlFor={name}>\n {schema.title || name}\n {isRequired && <span className=\"cdf-required-mark\">*</span>}\n </label>\n <div className=\"cdf-input-wrapper\">\n <input\n id={name}\n type={showPassword ? 'text' : 'password'}\n className={`cdf-input ${error ? 'cdf-input--error' : ''}`}\n style={{ paddingRight: '2.5rem' }}\n placeholder={`Enter ${schema.title || name}`}\n {...register(name)}\n />\n <button\n type=\"button\"\n className=\"cdf-toolbar-btn\"\n style={{ position: 'absolute', right: '0.5rem' }}\n onClick={() => setShowPassword(!showPassword)}\n >\n {showPassword ? <EyeOff size={16} /> : <Eye size={16} />}\n </button>\n </div>\n {error && (\n <span className=\"cdf-error-message\">\n <AlertCircle size={14} />\n {error.message as string}\n </span>\n )}\n </div>\n );\n};\n","import React from 'react';\nimport { useFormContext } from 'react-hook-form';\nimport { JSONSchema } from '../../types/schema';\nimport { AlertCircle } from 'lucide-react';\n\ninterface NumberFieldProps {\n name: string;\n schema: JSONSchema;\n isRequired?: boolean;\n}\n\nexport const NumberField: React.FC<NumberFieldProps> = ({ name, schema, isRequired }) => {\n const {\n register,\n formState: { errors },\n } = useFormContext();\n const error = errors[name];\n\n return (\n <div className=\"cdf-field-group\">\n <label className=\"cdf-label\" htmlFor={name}>\n {schema.title || name}\n {isRequired && <span className=\"cdf-required-mark\">*</span>}\n </label>\n <div className=\"cdf-input-wrapper\">\n <input\n id={name}\n type=\"number\"\n className={`cdf-input ${error ? 'cdf-input--error' : ''}`}\n placeholder={`Enter ${schema.title || name}`}\n {...register(name, {\n valueAsNumber: true,\n })}\n />\n </div>\n {error && (\n <span className=\"cdf-error-message\">\n <AlertCircle size={14} />\n {error.message as string}\n </span>\n )}\n </div>\n );\n};\n","import React, { useEffect } from 'react';\nimport { useFormContext } from 'react-hook-form';\nimport { useEditor, EditorContent } from '@tiptap/react';\nimport StarterKit from '@tiptap/starter-kit';\nimport { JSONSchema } from '../../types/schema';\nimport { AlertCircle, Bold, Italic, List, ListOrdered, Heading2 } from 'lucide-react';\n\ninterface RichTextFieldProps {\n name: string;\n schema: JSONSchema;\n isRequired?: boolean;\n}\n\nexport const RichTextField: React.FC<RichTextFieldProps> = ({ name, schema, isRequired }) => {\n const {\n setValue,\n watch,\n formState: { errors },\n } = useFormContext();\n const error = errors[name];\n const value = watch(name);\n\n const editor = useEditor({\n extensions: [StarterKit],\n content: value || '',\n onUpdate: ({ editor }) => {\n setValue(name, editor.getHTML(), { shouldValidate: true, shouldDirty: true });\n },\n });\n\n // Keep editor in sync with external form changes (if any)\n useEffect(() => {\n if (editor && value !== editor.getHTML()) {\n editor.commands.setContent(value || '');\n }\n }, [value, editor]);\n\n return (\n <div className=\"cdf-field-group\">\n <label className=\"cdf-label\" htmlFor={name}>\n {schema.title || name}\n {isRequired && <span className=\"cdf-required-mark\">*</span>}\n </label>\n\n <div className={`cdf-rich-text-wrapper ${error ? 'cdf-input--error' : ''}`}>\n <div className=\"cdf-rich-text-toolbar\">\n <button\n type=\"button\"\n onClick={() => editor?.chain().focus().toggleBold().run()}\n className={`cdf-toolbar-btn ${editor?.isActive('bold') ? 'is-active' : ''}`}\n >\n <Bold size={16} />\n </button>\n <button\n type=\"button\"\n onClick={() => editor?.chain().focus().toggleItalic().run()}\n className={`cdf-toolbar-btn ${editor?.isActive('italic') ? 'is-active' : ''}`}\n >\n <Italic size={16} />\n </button>\n <button\n type=\"button\"\n onClick={() => editor?.chain().focus().toggleHeading({ level: 2 }).run()}\n className={`cdf-toolbar-btn ${editor?.isActive('heading', { level: 2 }) ? 'is-active' : ''}`}\n >\n <Heading2 size={16} />\n </button>\n <button\n type=\"button\"\n onClick={() => editor?.chain().focus().toggleBulletList().run()}\n className={`cdf-toolbar-btn ${editor?.isActive('bulletList') ? 'is-active' : ''}`}\n >\n <List size={16} />\n </button>\n <button\n type=\"button\"\n onClick={() => editor?.chain().focus().toggleOrderedList().run()}\n className={`cdf-toolbar-btn ${editor?.isActive('orderedList') ? 'is-active' : ''}`}\n >\n <ListOrdered size={16} />\n </button>\n </div>\n\n <EditorContent editor={editor} className=\"cdf-rich-text-content\" />\n </div>\n\n {error && (\n <span className=\"cdf-error-message\">\n <AlertCircle size={14} />\n {error.message as string}\n </span>\n )}\n </div>\n );\n};\n","import React from 'react';\nimport { useFormContext } from 'react-hook-form';\nimport { JSONSchema } from '../../types/schema';\n\ninterface SelectFieldProps {\n name: string;\n schema: JSONSchema;\n isRequired?: boolean;\n}\n\nexport const SelectField: React.FC<SelectFieldProps> = ({ name, schema, isRequired }) => {\n const {\n register,\n formState: { errors },\n } = useFormContext();\n\n const error = errors[name];\n\n return (\n <div className=\"cdf-field-group\">\n <label htmlFor={name} className=\"cdf-label\">\n {schema.title || name}\n {isRequired && <span className=\"cdf-required-mark\">*</span>}\n </label>\n\n <div className=\"cdf-input-wrapper\">\n <select\n id={name}\n {...register(name)}\n className={`cdf-input cdf-select ${error ? 'cdf-input--error' : ''}`}\n >\n <option value=\"\">Select an option...</option>\n {schema.enum?.map((option) => (\n <option key={option} value={option}>\n {option}\n </option>\n ))}\n </select>\n </div>\n\n {error && (\n <span className=\"cdf-error-message\">\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\"></circle>\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"></line>\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"></line>\n </svg>\n {error.message as string}\n </span>\n )}\n </div>\n );\n};\n","import React from 'react';\nimport { useFormContext } from 'react-hook-form';\nimport { JSONSchema } from '../../types/schema';\n\ninterface RadioFieldProps {\n name: string;\n schema: JSONSchema;\n isRequired?: boolean;\n}\n\nexport const RadioField: React.FC<RadioFieldProps> = ({ name, schema, isRequired }) => {\n const {\n register,\n formState: { errors },\n } = useFormContext();\n\n const error = errors[name];\n\n return (\n <div className=\"cdf-field-group\">\n <label className=\"cdf-label\">\n {schema.title || name}\n {isRequired && <span className=\"cdf-required-mark\">*</span>}\n </label>\n\n <div className=\"cdf-radio-group\">\n {schema.enum?.map((option) => (\n <label key={option} className=\"cdf-radio-label\">\n <input type=\"radio\" value={option} {...register(name)} className=\"cdf-radio-input\" />\n {option}\n </label>\n ))}\n </div>\n\n {error && (\n <span className=\"cdf-error-message\">\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\"></circle>\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"></line>\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"></line>\n </svg>\n {error.message as string}\n </span>\n )}\n </div>\n );\n};\n","import React from 'react';\nimport { useFormContext } from 'react-hook-form';\nimport { JSONSchema } from '../../types/schema';\n\ninterface CheckboxFieldProps {\n name: string;\n schema: JSONSchema;\n isRequired?: boolean;\n}\n\nexport const CheckboxField: React.FC<CheckboxFieldProps> = ({ name, schema, isRequired }) => {\n const {\n register,\n formState: { errors },\n } = useFormContext();\n\n const error = errors[name];\n\n return (\n <div className=\"cdf-field-group\">\n <div className=\"cdf-checkbox-group\">\n <label className=\"cdf-checkbox-label\">\n <input type=\"checkbox\" {...register(name)} className=\"cdf-checkbox-input\" />\n {schema.title || name}\n {isRequired && <span className=\"cdf-required-mark\">*</span>}\n </label>\n </div>\n\n {schema.description && (\n <p style={{ fontSize: '0.875rem', color: 'var(--cdf-text-muted)', marginTop: '0.25rem' }}>\n {schema.description}\n </p>\n )}\n\n {error && (\n <span className=\"cdf-error-message\">\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\"></circle>\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"></line>\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"></line>\n </svg>\n {error.message as string}\n </span>\n )}\n </div>\n );\n};\n","import React from 'react';\nimport { useFormContext } from 'react-hook-form';\nimport { JSONSchema } from '../../types/schema';\n\ninterface CheckboxGroupFieldProps {\n name: string;\n schema: JSONSchema;\n isRequired?: boolean;\n}\n\nexport const CheckboxGroupField: React.FC<CheckboxGroupFieldProps> = ({\n name,\n schema,\n isRequired,\n}) => {\n const {\n register,\n formState: { errors },\n } = useFormContext();\n\n const error = errors[name];\n\n // Extract enum options from items definition\n let options: any[] = [];\n if (schema.items && !Array.isArray(schema.items) && schema.items.enum) {\n options = schema.items.enum;\n }\n\n return (\n <div className=\"cdf-field-group\">\n <label className=\"cdf-label\">\n {schema.title || name}\n {isRequired && <span className=\"cdf-required-mark\">*</span>}\n </label>\n\n <div className=\"cdf-checkbox-group\">\n {options.map((option) => (\n <label key={option} className=\"cdf-checkbox-label\">\n <input\n type=\"checkbox\"\n value={option}\n {...register(name)}\n className=\"cdf-checkbox-input\"\n />\n {option}\n </label>\n ))}\n </div>\n\n {error && (\n <span className=\"cdf-error-message\">\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\"></circle>\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"></line>\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"></line>\n </svg>\n {error.message as string}\n </span>\n )}\n </div>\n );\n};\n","import React, { useState } from 'react';\nimport { useFormContext } from 'react-hook-form';\nimport { JSONSchema } from '../../types/schema';\n\ninterface FileFieldProps {\n name: string;\n schema: JSONSchema;\n isRequired?: boolean;\n}\n\nexport const FileField: React.FC<FileFieldProps> = ({ name, schema, isRequired }) => {\n const {\n setValue,\n formState: { errors },\n } = useFormContext();\n\n const [fileName, setFileName] = useState<string | null>(null);\n const error = errors[name];\n\n const handleFileChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n if (!file) {\n setValue(name, undefined, { shouldValidate: true });\n setFileName(null);\n return;\n }\n\n setFileName(file.name);\n\n // Convert file to base64 data-url\n const reader = new FileReader();\n reader.onload = (event) => {\n setValue(name, event.target?.result, { shouldValidate: true });\n };\n reader.readAsDataURL(file);\n };\n\n return (\n <div className=\"cdf-field-group\">\n <label className=\"cdf-label\">\n {schema.title || name}\n {isRequired && <span className=\"cdf-required-mark\">*</span>}\n </label>\n\n <div className={`cdf-file-wrapper ${error ? 'cdf-input--error' : ''}`}>\n <input type=\"file\" className=\"cdf-file-input\" onChange={handleFileChange} />\n <div className=\"cdf-file-text\">\n <span>Click to upload</span> or drag and drop\n </div>\n {fileName && (\n <div className=\"cdf-file-preview\">\n Selected: <strong>{fileName}</strong>\n </div>\n )}\n </div>\n\n {error && (\n <span className=\"cdf-error-message\">\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\"></circle>\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"></line>\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"></line>\n </svg>\n {error.message as string}\n </span>\n )}\n </div>\n );\n};\n","import React from 'react';\nimport { JSONSchema, UISchema } from '../types/schema';\nimport { TextField } from './fields/TextField';\nimport { PasswordField } from './fields/PasswordField';\nimport { NumberField } from './fields/NumberField';\nimport { RichTextField } from './fields/RichTextField';\nimport { SelectField } from './fields/SelectField';\nimport { RadioField } from './fields/RadioField';\nimport { CheckboxField } from './fields/CheckboxField';\nimport { CheckboxGroupField } from './fields/CheckboxGroupField';\nimport { FileField } from './fields/FileField';\n\ninterface FieldRendererProps {\n name: string;\n schema: JSONSchema;\n uiSchema?: UISchema;\n isRequired?: boolean;\n}\n\nexport const FieldRenderer: React.FC<FieldRendererProps> = ({\n name,\n schema,\n uiSchema,\n isRequired,\n}) => {\n const columnSpan = uiSchema?.['ui:columnSpan'] || 1;\n const widget = uiSchema?.['ui:widget'];\n\n const renderField = () => {\n // Arrays (Checkbox Groups)\n if (schema.type === 'array') {\n return <CheckboxGroupField name={name} schema={schema} isRequired={isRequired} />;\n }\n\n // Booleans (Single Checkbox)\n if (schema.type === 'boolean') {\n return <CheckboxField name={name} schema={schema} isRequired={isRequired} />;\n }\n\n // Enums (Select vs Radio)\n if (schema.enum) {\n if (widget === 'radio') {\n return <RadioField name={name} schema={schema} isRequired={isRequired} />;\n }\n return <SelectField name={name} schema={schema} isRequired={isRequired} />;\n }\n\n // Strings\n if (schema.type === 'string') {\n if (schema.format === 'data-url') {\n return <FileField name={name} schema={schema} isRequired={isRequired} />;\n }\n if (schema.format === 'password') {\n return <PasswordField name={name} schema={schema} isRequired={isRequired} />;\n }\n if (schema.format === 'rich-text') {\n return <RichTextField name={name} schema={schema} isRequired={isRequired} />;\n }\n return <TextField name={name} schema={schema} isRequired={isRequired} />;\n }\n\n // Numbers\n if (schema.type === 'number' || schema.type === 'integer') {\n return <NumberField name={name} schema={schema} isRequired={isRequired} />;\n }\n\n // Fallback\n return (\n <div className=\"cdf-field-group\">\n <p className=\"cdf-error-message\">Unsupported field type: {schema.type}</p>\n </div>\n );\n };\n\n return (\n <div style={{ gridColumn: `span ${columnSpan} / span ${columnSpan}` }}>{renderField()}</div>\n );\n};\n","import React from 'react';\nimport { useForm, FormProvider } from 'react-hook-form';\nimport { ajvResolver } from '@hookform/resolvers/ajv';\nimport { JSONSchema, UISchema } from '../types/schema';\nimport { FieldRenderer } from './FieldRenderer';\nimport '../styles/form.css';\n\ninterface SchemaFormProps {\n schema: JSONSchema;\n uiSchema?: Record<string, UISchema>;\n onSubmit: (data: any) => void;\n defaultValues?: any;\n columns?: 1 | 2 | 3 | 4;\n theme?: {\n primary?: string;\n background?: string;\n text?: string;\n error?: string;\n surface?: string;\n border?: string;\n };\n}\n\nexport const SchemaForm: React.FC<SchemaFormProps> = ({\n schema,\n uiSchema = {},\n onSubmit,\n defaultValues,\n columns = 1,\n theme,\n}) => {\n const methods = useForm({\n resolver: ajvResolver(schema as any, {\n formats: {\n 'rich-text': true,\n password: true,\n 'data-url': true,\n email: /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/,\n },\n }),\n defaultValues,\n });\n\n if (schema.type !== 'object' || !schema.properties) {\n return <div className=\"cdf-error-message\">Root schema must be an object with properties.</div>;\n }\n\n const themeStyles = theme\n ? ({\n '--cdf-primary': theme.primary,\n '--cdf-bg': theme.background,\n '--cdf-text': theme.text,\n '--cdf-error': theme.error,\n '--cdf-surface': theme.surface,\n '--cdf-border': theme.border,\n } as React.CSSProperties)\n : {};\n\n return (\n <div className=\"cdf-form-container\" style={themeStyles}>\n {schema.title && <h2 className=\"cdf-form-title\">{schema.title}</h2>}\n {schema.description && (\n <p style={{ color: 'var(--cdf-text-muted)', marginBottom: '1.5rem' }}>\n {schema.description}\n </p>\n )}\n\n <FormProvider {...methods}>\n <form onSubmit={methods.handleSubmit(onSubmit)} noValidate>\n <div className={`cdf-form-grid-${columns}`}>\n {Object.entries(schema.properties).map(([key, propSchema]) => (\n <FieldRenderer\n key={key}\n name={key}\n schema={propSchema}\n uiSchema={uiSchema[key]}\n isRequired={schema.required?.includes(key)}\n />\n ))}\n </div>\n <button type=\"submit\" className=\"cdf-submit-btn\">\n Submit\n </button>\n </form>\n </FormProvider>\n </div>\n );\n};\n"]}
|
package/dist/index.mjs
CHANGED
|
@@ -185,30 +185,291 @@ var RichTextField = ({ name, schema, isRequired }) => {
|
|
|
185
185
|
] })
|
|
186
186
|
] });
|
|
187
187
|
};
|
|
188
|
-
var
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
188
|
+
var SelectField = ({ name, schema, isRequired }) => {
|
|
189
|
+
var _a;
|
|
190
|
+
const {
|
|
191
|
+
register,
|
|
192
|
+
formState: { errors }
|
|
193
|
+
} = useFormContext();
|
|
194
|
+
const error = errors[name];
|
|
195
|
+
return /* @__PURE__ */ jsxs("div", { className: "cdf-field-group", children: [
|
|
196
|
+
/* @__PURE__ */ jsxs("label", { htmlFor: name, className: "cdf-label", children: [
|
|
197
|
+
schema.title || name,
|
|
198
|
+
isRequired && /* @__PURE__ */ jsx("span", { className: "cdf-required-mark", children: "*" })
|
|
199
|
+
] }),
|
|
200
|
+
/* @__PURE__ */ jsx("div", { className: "cdf-input-wrapper", children: /* @__PURE__ */ jsxs(
|
|
201
|
+
"select",
|
|
202
|
+
{
|
|
203
|
+
id: name,
|
|
204
|
+
...register(name),
|
|
205
|
+
className: `cdf-input cdf-select ${error ? "cdf-input--error" : ""}`,
|
|
206
|
+
children: [
|
|
207
|
+
/* @__PURE__ */ jsx("option", { value: "", children: "Select an option..." }),
|
|
208
|
+
(_a = schema.enum) == null ? void 0 : _a.map((option) => /* @__PURE__ */ jsx("option", { value: option, children: option }, option))
|
|
209
|
+
]
|
|
210
|
+
}
|
|
211
|
+
) }),
|
|
212
|
+
error && /* @__PURE__ */ jsxs("span", { className: "cdf-error-message", children: [
|
|
213
|
+
/* @__PURE__ */ jsxs(
|
|
214
|
+
"svg",
|
|
215
|
+
{
|
|
216
|
+
width: "14",
|
|
217
|
+
height: "14",
|
|
218
|
+
viewBox: "0 0 24 24",
|
|
219
|
+
fill: "none",
|
|
220
|
+
stroke: "currentColor",
|
|
221
|
+
strokeWidth: "2",
|
|
222
|
+
children: [
|
|
223
|
+
/* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "10" }),
|
|
224
|
+
/* @__PURE__ */ jsx("line", { x1: "12", y1: "8", x2: "12", y2: "12" }),
|
|
225
|
+
/* @__PURE__ */ jsx("line", { x1: "12", y1: "16", x2: "12.01", y2: "16" })
|
|
226
|
+
]
|
|
227
|
+
}
|
|
228
|
+
),
|
|
229
|
+
error.message
|
|
230
|
+
] })
|
|
231
|
+
] });
|
|
232
|
+
};
|
|
233
|
+
var RadioField = ({ name, schema, isRequired }) => {
|
|
234
|
+
var _a;
|
|
235
|
+
const {
|
|
236
|
+
register,
|
|
237
|
+
formState: { errors }
|
|
238
|
+
} = useFormContext();
|
|
239
|
+
const error = errors[name];
|
|
240
|
+
return /* @__PURE__ */ jsxs("div", { className: "cdf-field-group", children: [
|
|
241
|
+
/* @__PURE__ */ jsxs("label", { className: "cdf-label", children: [
|
|
242
|
+
schema.title || name,
|
|
243
|
+
isRequired && /* @__PURE__ */ jsx("span", { className: "cdf-required-mark", children: "*" })
|
|
244
|
+
] }),
|
|
245
|
+
/* @__PURE__ */ jsx("div", { className: "cdf-radio-group", children: (_a = schema.enum) == null ? void 0 : _a.map((option) => /* @__PURE__ */ jsxs("label", { className: "cdf-radio-label", children: [
|
|
246
|
+
/* @__PURE__ */ jsx("input", { type: "radio", value: option, ...register(name), className: "cdf-radio-input" }),
|
|
247
|
+
option
|
|
248
|
+
] }, option)) }),
|
|
249
|
+
error && /* @__PURE__ */ jsxs("span", { className: "cdf-error-message", children: [
|
|
250
|
+
/* @__PURE__ */ jsxs(
|
|
251
|
+
"svg",
|
|
252
|
+
{
|
|
253
|
+
width: "14",
|
|
254
|
+
height: "14",
|
|
255
|
+
viewBox: "0 0 24 24",
|
|
256
|
+
fill: "none",
|
|
257
|
+
stroke: "currentColor",
|
|
258
|
+
strokeWidth: "2",
|
|
259
|
+
children: [
|
|
260
|
+
/* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "10" }),
|
|
261
|
+
/* @__PURE__ */ jsx("line", { x1: "12", y1: "8", x2: "12", y2: "12" }),
|
|
262
|
+
/* @__PURE__ */ jsx("line", { x1: "12", y1: "16", x2: "12.01", y2: "16" })
|
|
263
|
+
]
|
|
264
|
+
}
|
|
265
|
+
),
|
|
266
|
+
error.message
|
|
267
|
+
] })
|
|
268
|
+
] });
|
|
269
|
+
};
|
|
270
|
+
var CheckboxField = ({ name, schema, isRequired }) => {
|
|
271
|
+
const {
|
|
272
|
+
register,
|
|
273
|
+
formState: { errors }
|
|
274
|
+
} = useFormContext();
|
|
275
|
+
const error = errors[name];
|
|
276
|
+
return /* @__PURE__ */ jsxs("div", { className: "cdf-field-group", children: [
|
|
277
|
+
/* @__PURE__ */ jsx("div", { className: "cdf-checkbox-group", children: /* @__PURE__ */ jsxs("label", { className: "cdf-checkbox-label", children: [
|
|
278
|
+
/* @__PURE__ */ jsx("input", { type: "checkbox", ...register(name), className: "cdf-checkbox-input" }),
|
|
279
|
+
schema.title || name,
|
|
280
|
+
isRequired && /* @__PURE__ */ jsx("span", { className: "cdf-required-mark", children: "*" })
|
|
281
|
+
] }) }),
|
|
282
|
+
schema.description && /* @__PURE__ */ jsx("p", { style: { fontSize: "0.875rem", color: "var(--cdf-text-muted)", marginTop: "0.25rem" }, children: schema.description }),
|
|
283
|
+
error && /* @__PURE__ */ jsxs("span", { className: "cdf-error-message", children: [
|
|
284
|
+
/* @__PURE__ */ jsxs(
|
|
285
|
+
"svg",
|
|
286
|
+
{
|
|
287
|
+
width: "14",
|
|
288
|
+
height: "14",
|
|
289
|
+
viewBox: "0 0 24 24",
|
|
290
|
+
fill: "none",
|
|
291
|
+
stroke: "currentColor",
|
|
292
|
+
strokeWidth: "2",
|
|
293
|
+
children: [
|
|
294
|
+
/* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "10" }),
|
|
295
|
+
/* @__PURE__ */ jsx("line", { x1: "12", y1: "8", x2: "12", y2: "12" }),
|
|
296
|
+
/* @__PURE__ */ jsx("line", { x1: "12", y1: "16", x2: "12.01", y2: "16" })
|
|
297
|
+
]
|
|
298
|
+
}
|
|
299
|
+
),
|
|
300
|
+
error.message
|
|
301
|
+
] })
|
|
302
|
+
] });
|
|
303
|
+
};
|
|
304
|
+
var CheckboxGroupField = ({
|
|
305
|
+
name,
|
|
306
|
+
schema,
|
|
307
|
+
isRequired
|
|
308
|
+
}) => {
|
|
309
|
+
const {
|
|
310
|
+
register,
|
|
311
|
+
formState: { errors }
|
|
312
|
+
} = useFormContext();
|
|
313
|
+
const error = errors[name];
|
|
314
|
+
let options = [];
|
|
315
|
+
if (schema.items && !Array.isArray(schema.items) && schema.items.enum) {
|
|
316
|
+
options = schema.items.enum;
|
|
317
|
+
}
|
|
318
|
+
return /* @__PURE__ */ jsxs("div", { className: "cdf-field-group", children: [
|
|
319
|
+
/* @__PURE__ */ jsxs("label", { className: "cdf-label", children: [
|
|
320
|
+
schema.title || name,
|
|
321
|
+
isRequired && /* @__PURE__ */ jsx("span", { className: "cdf-required-mark", children: "*" })
|
|
322
|
+
] }),
|
|
323
|
+
/* @__PURE__ */ jsx("div", { className: "cdf-checkbox-group", children: options.map((option) => /* @__PURE__ */ jsxs("label", { className: "cdf-checkbox-label", children: [
|
|
324
|
+
/* @__PURE__ */ jsx(
|
|
325
|
+
"input",
|
|
326
|
+
{
|
|
327
|
+
type: "checkbox",
|
|
328
|
+
value: option,
|
|
329
|
+
...register(name),
|
|
330
|
+
className: "cdf-checkbox-input"
|
|
331
|
+
}
|
|
332
|
+
),
|
|
333
|
+
option
|
|
334
|
+
] }, option)) }),
|
|
335
|
+
error && /* @__PURE__ */ jsxs("span", { className: "cdf-error-message", children: [
|
|
336
|
+
/* @__PURE__ */ jsxs(
|
|
337
|
+
"svg",
|
|
338
|
+
{
|
|
339
|
+
width: "14",
|
|
340
|
+
height: "14",
|
|
341
|
+
viewBox: "0 0 24 24",
|
|
342
|
+
fill: "none",
|
|
343
|
+
stroke: "currentColor",
|
|
344
|
+
strokeWidth: "2",
|
|
345
|
+
children: [
|
|
346
|
+
/* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "10" }),
|
|
347
|
+
/* @__PURE__ */ jsx("line", { x1: "12", y1: "8", x2: "12", y2: "12" }),
|
|
348
|
+
/* @__PURE__ */ jsx("line", { x1: "12", y1: "16", x2: "12.01", y2: "16" })
|
|
349
|
+
]
|
|
350
|
+
}
|
|
351
|
+
),
|
|
352
|
+
error.message
|
|
353
|
+
] })
|
|
354
|
+
] });
|
|
355
|
+
};
|
|
356
|
+
var FileField = ({ name, schema, isRequired }) => {
|
|
357
|
+
const {
|
|
358
|
+
setValue,
|
|
359
|
+
formState: { errors }
|
|
360
|
+
} = useFormContext();
|
|
361
|
+
const [fileName, setFileName] = useState(null);
|
|
362
|
+
const error = errors[name];
|
|
363
|
+
const handleFileChange = (e) => {
|
|
364
|
+
var _a;
|
|
365
|
+
const file = (_a = e.target.files) == null ? void 0 : _a[0];
|
|
366
|
+
if (!file) {
|
|
367
|
+
setValue(name, void 0, { shouldValidate: true });
|
|
368
|
+
setFileName(null);
|
|
369
|
+
return;
|
|
370
|
+
}
|
|
371
|
+
setFileName(file.name);
|
|
372
|
+
const reader = new FileReader();
|
|
373
|
+
reader.onload = (event) => {
|
|
374
|
+
var _a2;
|
|
375
|
+
setValue(name, (_a2 = event.target) == null ? void 0 : _a2.result, { shouldValidate: true });
|
|
376
|
+
};
|
|
377
|
+
reader.readAsDataURL(file);
|
|
378
|
+
};
|
|
379
|
+
return /* @__PURE__ */ jsxs("div", { className: "cdf-field-group", children: [
|
|
380
|
+
/* @__PURE__ */ jsxs("label", { className: "cdf-label", children: [
|
|
381
|
+
schema.title || name,
|
|
382
|
+
isRequired && /* @__PURE__ */ jsx("span", { className: "cdf-required-mark", children: "*" })
|
|
383
|
+
] }),
|
|
384
|
+
/* @__PURE__ */ jsxs("div", { className: `cdf-file-wrapper ${error ? "cdf-input--error" : ""}`, children: [
|
|
385
|
+
/* @__PURE__ */ jsx("input", { type: "file", className: "cdf-file-input", onChange: handleFileChange }),
|
|
386
|
+
/* @__PURE__ */ jsxs("div", { className: "cdf-file-text", children: [
|
|
387
|
+
/* @__PURE__ */ jsx("span", { children: "Click to upload" }),
|
|
388
|
+
" or drag and drop"
|
|
389
|
+
] }),
|
|
390
|
+
fileName && /* @__PURE__ */ jsxs("div", { className: "cdf-file-preview", children: [
|
|
391
|
+
"Selected: ",
|
|
392
|
+
/* @__PURE__ */ jsx("strong", { children: fileName })
|
|
393
|
+
] })
|
|
394
|
+
] }),
|
|
395
|
+
error && /* @__PURE__ */ jsxs("span", { className: "cdf-error-message", children: [
|
|
396
|
+
/* @__PURE__ */ jsxs(
|
|
397
|
+
"svg",
|
|
398
|
+
{
|
|
399
|
+
width: "14",
|
|
400
|
+
height: "14",
|
|
401
|
+
viewBox: "0 0 24 24",
|
|
402
|
+
fill: "none",
|
|
403
|
+
stroke: "currentColor",
|
|
404
|
+
strokeWidth: "2",
|
|
405
|
+
children: [
|
|
406
|
+
/* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "10" }),
|
|
407
|
+
/* @__PURE__ */ jsx("line", { x1: "12", y1: "8", x2: "12", y2: "12" }),
|
|
408
|
+
/* @__PURE__ */ jsx("line", { x1: "12", y1: "16", x2: "12.01", y2: "16" })
|
|
409
|
+
]
|
|
410
|
+
}
|
|
411
|
+
),
|
|
412
|
+
error.message
|
|
413
|
+
] })
|
|
414
|
+
] });
|
|
415
|
+
};
|
|
416
|
+
var FieldRenderer = ({
|
|
417
|
+
name,
|
|
418
|
+
schema,
|
|
419
|
+
uiSchema,
|
|
420
|
+
isRequired
|
|
421
|
+
}) => {
|
|
422
|
+
const columnSpan = (uiSchema == null ? void 0 : uiSchema["ui:columnSpan"]) || 1;
|
|
423
|
+
const widget = uiSchema == null ? void 0 : uiSchema["ui:widget"];
|
|
424
|
+
const renderField = () => {
|
|
425
|
+
if (schema.type === "array") {
|
|
426
|
+
return /* @__PURE__ */ jsx(CheckboxGroupField, { name, schema, isRequired });
|
|
192
427
|
}
|
|
193
|
-
if (schema.
|
|
194
|
-
return /* @__PURE__ */ jsx(
|
|
428
|
+
if (schema.type === "boolean") {
|
|
429
|
+
return /* @__PURE__ */ jsx(CheckboxField, { name, schema, isRequired });
|
|
195
430
|
}
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
431
|
+
if (schema.enum) {
|
|
432
|
+
if (widget === "radio") {
|
|
433
|
+
return /* @__PURE__ */ jsx(RadioField, { name, schema, isRequired });
|
|
434
|
+
}
|
|
435
|
+
return /* @__PURE__ */ jsx(SelectField, { name, schema, isRequired });
|
|
436
|
+
}
|
|
437
|
+
if (schema.type === "string") {
|
|
438
|
+
if (schema.format === "data-url") {
|
|
439
|
+
return /* @__PURE__ */ jsx(FileField, { name, schema, isRequired });
|
|
440
|
+
}
|
|
441
|
+
if (schema.format === "password") {
|
|
442
|
+
return /* @__PURE__ */ jsx(PasswordField, { name, schema, isRequired });
|
|
443
|
+
}
|
|
444
|
+
if (schema.format === "rich-text") {
|
|
445
|
+
return /* @__PURE__ */ jsx(RichTextField, { name, schema, isRequired });
|
|
446
|
+
}
|
|
447
|
+
return /* @__PURE__ */ jsx(TextField, { name, schema, isRequired });
|
|
448
|
+
}
|
|
449
|
+
if (schema.type === "number" || schema.type === "integer") {
|
|
450
|
+
return /* @__PURE__ */ jsx(NumberField, { name, schema, isRequired });
|
|
451
|
+
}
|
|
452
|
+
return /* @__PURE__ */ jsx("div", { className: "cdf-field-group", children: /* @__PURE__ */ jsxs("p", { className: "cdf-error-message", children: [
|
|
453
|
+
"Unsupported field type: ",
|
|
454
|
+
schema.type
|
|
455
|
+
] }) });
|
|
456
|
+
};
|
|
457
|
+
return /* @__PURE__ */ jsx("div", { style: { gridColumn: `span ${columnSpan} / span ${columnSpan}` }, children: renderField() });
|
|
205
458
|
};
|
|
206
|
-
var SchemaForm = ({
|
|
459
|
+
var SchemaForm = ({
|
|
460
|
+
schema,
|
|
461
|
+
uiSchema = {},
|
|
462
|
+
onSubmit,
|
|
463
|
+
defaultValues,
|
|
464
|
+
columns = 1,
|
|
465
|
+
theme
|
|
466
|
+
}) => {
|
|
207
467
|
const methods = useForm({
|
|
208
468
|
resolver: ajvResolver(schema, {
|
|
209
469
|
formats: {
|
|
210
470
|
"rich-text": true,
|
|
211
471
|
password: true,
|
|
472
|
+
"data-url": true,
|
|
212
473
|
email: /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/
|
|
213
474
|
}
|
|
214
475
|
}),
|
|
@@ -217,22 +478,31 @@ var SchemaForm = ({ schema, onSubmit, defaultValues }) => {
|
|
|
217
478
|
if (schema.type !== "object" || !schema.properties) {
|
|
218
479
|
return /* @__PURE__ */ jsx("div", { className: "cdf-error-message", children: "Root schema must be an object with properties." });
|
|
219
480
|
}
|
|
220
|
-
|
|
481
|
+
const themeStyles = theme ? {
|
|
482
|
+
"--cdf-primary": theme.primary,
|
|
483
|
+
"--cdf-bg": theme.background,
|
|
484
|
+
"--cdf-text": theme.text,
|
|
485
|
+
"--cdf-error": theme.error,
|
|
486
|
+
"--cdf-surface": theme.surface,
|
|
487
|
+
"--cdf-border": theme.border
|
|
488
|
+
} : {};
|
|
489
|
+
return /* @__PURE__ */ jsxs("div", { className: "cdf-form-container", style: themeStyles, children: [
|
|
221
490
|
schema.title && /* @__PURE__ */ jsx("h2", { className: "cdf-form-title", children: schema.title }),
|
|
222
491
|
schema.description && /* @__PURE__ */ jsx("p", { style: { color: "var(--cdf-text-muted)", marginBottom: "1.5rem" }, children: schema.description }),
|
|
223
492
|
/* @__PURE__ */ jsx(FormProvider, { ...methods, children: /* @__PURE__ */ jsxs("form", { onSubmit: methods.handleSubmit(onSubmit), noValidate: true, children: [
|
|
224
|
-
Object.entries(schema.properties).map(([key, propSchema]) => {
|
|
493
|
+
/* @__PURE__ */ jsx("div", { className: `cdf-form-grid-${columns}`, children: Object.entries(schema.properties).map(([key, propSchema]) => {
|
|
225
494
|
var _a;
|
|
226
495
|
return /* @__PURE__ */ jsx(
|
|
227
496
|
FieldRenderer,
|
|
228
497
|
{
|
|
229
498
|
name: key,
|
|
230
499
|
schema: propSchema,
|
|
500
|
+
uiSchema: uiSchema[key],
|
|
231
501
|
isRequired: (_a = schema.required) == null ? void 0 : _a.includes(key)
|
|
232
502
|
},
|
|
233
503
|
key
|
|
234
504
|
);
|
|
235
|
-
}),
|
|
505
|
+
}) }),
|
|
236
506
|
/* @__PURE__ */ jsx("button", { type: "submit", className: "cdf-submit-btn", children: "Submit" })
|
|
237
507
|
] }) })
|
|
238
508
|
] });
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/fields/TextField.tsx","../src/components/fields/PasswordField.tsx","../src/components/fields/NumberField.tsx","../src/components/fields/RichTextField.tsx","../src/components/FieldRenderer.tsx","../src/components/SchemaForm.tsx"],"names":["useFormContext","jsxs","jsx","AlertCircle","editor"],"mappings":"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","file":"index.mjs","sourcesContent":["import React from 'react';\nimport { useFormContext } from 'react-hook-form';\nimport { JSONSchema } from '../../types/schema';\nimport { AlertCircle } from 'lucide-react';\n\ninterface TextFieldProps {\n name: string;\n schema: JSONSchema;\n isRequired?: boolean;\n}\n\nexport const TextField: React.FC<TextFieldProps> = ({ name, schema, isRequired }) => {\n const {\n register,\n formState: { errors },\n } = useFormContext();\n const error = errors[name];\n\n return (\n <div className=\"cdf-field-group\">\n <label className=\"cdf-label\" htmlFor={name}>\n {schema.title || name}\n {isRequired && <span className=\"cdf-required-mark\">*</span>}\n </label>\n <div className=\"cdf-input-wrapper\">\n <input\n id={name}\n type={schema.format === 'email' ? 'email' : 'text'}\n className={`cdf-input ${error ? 'cdf-input--error' : ''}`}\n placeholder={`Enter ${schema.title || name}`}\n {...register(name)}\n />\n </div>\n {error && (\n <span className=\"cdf-error-message\">\n <AlertCircle size={14} />\n {error.message as string}\n </span>\n )}\n </div>\n );\n};\n","import React, { useState } from 'react';\nimport { useFormContext } from 'react-hook-form';\nimport { JSONSchema } from '../../types/schema';\nimport { AlertCircle, Eye, EyeOff } from 'lucide-react';\n\ninterface PasswordFieldProps {\n name: string;\n schema: JSONSchema;\n isRequired?: boolean;\n}\n\nexport const PasswordField: React.FC<PasswordFieldProps> = ({ name, schema, isRequired }) => {\n const {\n register,\n formState: { errors },\n } = useFormContext();\n const [showPassword, setShowPassword] = useState(false);\n const error = errors[name];\n\n return (\n <div className=\"cdf-field-group\">\n <label className=\"cdf-label\" htmlFor={name}>\n {schema.title || name}\n {isRequired && <span className=\"cdf-required-mark\">*</span>}\n </label>\n <div className=\"cdf-input-wrapper\">\n <input\n id={name}\n type={showPassword ? 'text' : 'password'}\n className={`cdf-input ${error ? 'cdf-input--error' : ''}`}\n style={{ paddingRight: '2.5rem' }}\n placeholder={`Enter ${schema.title || name}`}\n {...register(name)}\n />\n <button\n type=\"button\"\n className=\"cdf-toolbar-btn\"\n style={{ position: 'absolute', right: '0.5rem' }}\n onClick={() => setShowPassword(!showPassword)}\n >\n {showPassword ? <EyeOff size={16} /> : <Eye size={16} />}\n </button>\n </div>\n {error && (\n <span className=\"cdf-error-message\">\n <AlertCircle size={14} />\n {error.message as string}\n </span>\n )}\n </div>\n );\n};\n","import React from 'react';\nimport { useFormContext } from 'react-hook-form';\nimport { JSONSchema } from '../../types/schema';\nimport { AlertCircle } from 'lucide-react';\n\ninterface NumberFieldProps {\n name: string;\n schema: JSONSchema;\n isRequired?: boolean;\n}\n\nexport const NumberField: React.FC<NumberFieldProps> = ({ name, schema, isRequired }) => {\n const {\n register,\n formState: { errors },\n } = useFormContext();\n const error = errors[name];\n\n return (\n <div className=\"cdf-field-group\">\n <label className=\"cdf-label\" htmlFor={name}>\n {schema.title || name}\n {isRequired && <span className=\"cdf-required-mark\">*</span>}\n </label>\n <div className=\"cdf-input-wrapper\">\n <input\n id={name}\n type=\"number\"\n className={`cdf-input ${error ? 'cdf-input--error' : ''}`}\n placeholder={`Enter ${schema.title || name}`}\n {...register(name, {\n valueAsNumber: true,\n })}\n />\n </div>\n {error && (\n <span className=\"cdf-error-message\">\n <AlertCircle size={14} />\n {error.message as string}\n </span>\n )}\n </div>\n );\n};\n","import React, { useEffect } from 'react';\nimport { useFormContext } from 'react-hook-form';\nimport { useEditor, EditorContent } from '@tiptap/react';\nimport StarterKit from '@tiptap/starter-kit';\nimport { JSONSchema } from '../../types/schema';\nimport { AlertCircle, Bold, Italic, List, ListOrdered, Heading2 } from 'lucide-react';\n\ninterface RichTextFieldProps {\n name: string;\n schema: JSONSchema;\n isRequired?: boolean;\n}\n\nexport const RichTextField: React.FC<RichTextFieldProps> = ({ name, schema, isRequired }) => {\n const {\n setValue,\n watch,\n formState: { errors },\n } = useFormContext();\n const error = errors[name];\n const value = watch(name);\n\n const editor = useEditor({\n extensions: [StarterKit],\n content: value || '',\n onUpdate: ({ editor }) => {\n setValue(name, editor.getHTML(), { shouldValidate: true, shouldDirty: true });\n },\n });\n\n // Keep editor in sync with external form changes (if any)\n useEffect(() => {\n if (editor && value !== editor.getHTML()) {\n editor.commands.setContent(value || '');\n }\n }, [value, editor]);\n\n return (\n <div className=\"cdf-field-group\">\n <label className=\"cdf-label\" htmlFor={name}>\n {schema.title || name}\n {isRequired && <span className=\"cdf-required-mark\">*</span>}\n </label>\n\n <div className={`cdf-rich-text-wrapper ${error ? 'cdf-input--error' : ''}`}>\n <div className=\"cdf-rich-text-toolbar\">\n <button\n type=\"button\"\n onClick={() => editor?.chain().focus().toggleBold().run()}\n className={`cdf-toolbar-btn ${editor?.isActive('bold') ? 'is-active' : ''}`}\n >\n <Bold size={16} />\n </button>\n <button\n type=\"button\"\n onClick={() => editor?.chain().focus().toggleItalic().run()}\n className={`cdf-toolbar-btn ${editor?.isActive('italic') ? 'is-active' : ''}`}\n >\n <Italic size={16} />\n </button>\n <button\n type=\"button\"\n onClick={() => editor?.chain().focus().toggleHeading({ level: 2 }).run()}\n className={`cdf-toolbar-btn ${editor?.isActive('heading', { level: 2 }) ? 'is-active' : ''}`}\n >\n <Heading2 size={16} />\n </button>\n <button\n type=\"button\"\n onClick={() => editor?.chain().focus().toggleBulletList().run()}\n className={`cdf-toolbar-btn ${editor?.isActive('bulletList') ? 'is-active' : ''}`}\n >\n <List size={16} />\n </button>\n <button\n type=\"button\"\n onClick={() => editor?.chain().focus().toggleOrderedList().run()}\n className={`cdf-toolbar-btn ${editor?.isActive('orderedList') ? 'is-active' : ''}`}\n >\n <ListOrdered size={16} />\n </button>\n </div>\n\n <EditorContent editor={editor} className=\"cdf-rich-text-content\" />\n </div>\n\n {error && (\n <span className=\"cdf-error-message\">\n <AlertCircle size={14} />\n {error.message as string}\n </span>\n )}\n </div>\n );\n};\n","import React from 'react';\nimport { JSONSchema } from '../types/schema';\nimport { TextField } from './fields/TextField';\nimport { PasswordField } from './fields/PasswordField';\nimport { NumberField } from './fields/NumberField';\nimport { RichTextField } from './fields/RichTextField';\n\ninterface FieldRendererProps {\n name: string;\n schema: JSONSchema;\n isRequired?: boolean;\n}\n\nexport const FieldRenderer: React.FC<FieldRendererProps> = ({ name, schema, isRequired }) => {\n if (schema.type === 'string') {\n if (schema.format === 'password') {\n return <PasswordField name={name} schema={schema} isRequired={isRequired} />;\n }\n if (schema.format === 'rich-text') {\n return <RichTextField name={name} schema={schema} isRequired={isRequired} />;\n }\n return <TextField name={name} schema={schema} isRequired={isRequired} />;\n }\n\n if (schema.type === 'number' || schema.type === 'integer') {\n return <NumberField name={name} schema={schema} isRequired={isRequired} />;\n }\n\n // Fallback for unsupported types\n return (\n <div className=\"cdf-field-group\">\n <p className=\"cdf-error-message\">Unsupported field type: {schema.type}</p>\n </div>\n );\n};\n","import React from 'react';\nimport { useForm, FormProvider } from 'react-hook-form';\nimport { ajvResolver } from '@hookform/resolvers/ajv';\nimport { JSONSchema } from '../types/schema';\nimport { FieldRenderer } from './FieldRenderer';\nimport '../styles/form.css';\n\ninterface SchemaFormProps {\n schema: JSONSchema;\n onSubmit: (data: any) => void;\n defaultValues?: any;\n}\n\nexport const SchemaForm: React.FC<SchemaFormProps> = ({ schema, onSubmit, defaultValues }) => {\n const methods = useForm({\n resolver: ajvResolver(schema as any, {\n formats: {\n 'rich-text': true,\n password: true,\n email: /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/,\n },\n }),\n defaultValues,\n });\n\n if (schema.type !== 'object' || !schema.properties) {\n return <div className=\"cdf-error-message\">Root schema must be an object with properties.</div>;\n }\n\n return (\n <div className=\"cdf-form-container\">\n {schema.title && <h2 className=\"cdf-form-title\">{schema.title}</h2>}\n {schema.description && (\n <p style={{ color: 'var(--cdf-text-muted)', marginBottom: '1.5rem' }}>\n {schema.description}\n </p>\n )}\n\n <FormProvider {...methods}>\n <form onSubmit={methods.handleSubmit(onSubmit)} noValidate>\n {Object.entries(schema.properties).map(([key, propSchema]) => (\n <FieldRenderer\n key={key}\n name={key}\n schema={propSchema}\n isRequired={schema.required?.includes(key)}\n />\n ))}\n <button type=\"submit\" className=\"cdf-submit-btn\">\n Submit\n </button>\n </form>\n </FormProvider>\n </div>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/fields/TextField.tsx","../src/components/fields/PasswordField.tsx","../src/components/fields/NumberField.tsx","../src/components/fields/RichTextField.tsx","../src/components/fields/SelectField.tsx","../src/components/fields/RadioField.tsx","../src/components/fields/CheckboxField.tsx","../src/components/fields/CheckboxGroupField.tsx","../src/components/fields/FileField.tsx","../src/components/FieldRenderer.tsx","../src/components/SchemaForm.tsx"],"names":["useFormContext","jsxs","jsx","AlertCircle","editor","useState","_a"],"mappings":"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","file":"index.mjs","sourcesContent":["import React from 'react';\nimport { useFormContext } from 'react-hook-form';\nimport { JSONSchema } from '../../types/schema';\nimport { AlertCircle } from 'lucide-react';\n\ninterface TextFieldProps {\n name: string;\n schema: JSONSchema;\n isRequired?: boolean;\n}\n\nexport const TextField: React.FC<TextFieldProps> = ({ name, schema, isRequired }) => {\n const {\n register,\n formState: { errors },\n } = useFormContext();\n const error = errors[name];\n\n return (\n <div className=\"cdf-field-group\">\n <label className=\"cdf-label\" htmlFor={name}>\n {schema.title || name}\n {isRequired && <span className=\"cdf-required-mark\">*</span>}\n </label>\n <div className=\"cdf-input-wrapper\">\n <input\n id={name}\n type={schema.format === 'email' ? 'email' : 'text'}\n className={`cdf-input ${error ? 'cdf-input--error' : ''}`}\n placeholder={`Enter ${schema.title || name}`}\n {...register(name)}\n />\n </div>\n {error && (\n <span className=\"cdf-error-message\">\n <AlertCircle size={14} />\n {error.message as string}\n </span>\n )}\n </div>\n );\n};\n","import React, { useState } from 'react';\nimport { useFormContext } from 'react-hook-form';\nimport { JSONSchema } from '../../types/schema';\nimport { AlertCircle, Eye, EyeOff } from 'lucide-react';\n\ninterface PasswordFieldProps {\n name: string;\n schema: JSONSchema;\n isRequired?: boolean;\n}\n\nexport const PasswordField: React.FC<PasswordFieldProps> = ({ name, schema, isRequired }) => {\n const {\n register,\n formState: { errors },\n } = useFormContext();\n const [showPassword, setShowPassword] = useState(false);\n const error = errors[name];\n\n return (\n <div className=\"cdf-field-group\">\n <label className=\"cdf-label\" htmlFor={name}>\n {schema.title || name}\n {isRequired && <span className=\"cdf-required-mark\">*</span>}\n </label>\n <div className=\"cdf-input-wrapper\">\n <input\n id={name}\n type={showPassword ? 'text' : 'password'}\n className={`cdf-input ${error ? 'cdf-input--error' : ''}`}\n style={{ paddingRight: '2.5rem' }}\n placeholder={`Enter ${schema.title || name}`}\n {...register(name)}\n />\n <button\n type=\"button\"\n className=\"cdf-toolbar-btn\"\n style={{ position: 'absolute', right: '0.5rem' }}\n onClick={() => setShowPassword(!showPassword)}\n >\n {showPassword ? <EyeOff size={16} /> : <Eye size={16} />}\n </button>\n </div>\n {error && (\n <span className=\"cdf-error-message\">\n <AlertCircle size={14} />\n {error.message as string}\n </span>\n )}\n </div>\n );\n};\n","import React from 'react';\nimport { useFormContext } from 'react-hook-form';\nimport { JSONSchema } from '../../types/schema';\nimport { AlertCircle } from 'lucide-react';\n\ninterface NumberFieldProps {\n name: string;\n schema: JSONSchema;\n isRequired?: boolean;\n}\n\nexport const NumberField: React.FC<NumberFieldProps> = ({ name, schema, isRequired }) => {\n const {\n register,\n formState: { errors },\n } = useFormContext();\n const error = errors[name];\n\n return (\n <div className=\"cdf-field-group\">\n <label className=\"cdf-label\" htmlFor={name}>\n {schema.title || name}\n {isRequired && <span className=\"cdf-required-mark\">*</span>}\n </label>\n <div className=\"cdf-input-wrapper\">\n <input\n id={name}\n type=\"number\"\n className={`cdf-input ${error ? 'cdf-input--error' : ''}`}\n placeholder={`Enter ${schema.title || name}`}\n {...register(name, {\n valueAsNumber: true,\n })}\n />\n </div>\n {error && (\n <span className=\"cdf-error-message\">\n <AlertCircle size={14} />\n {error.message as string}\n </span>\n )}\n </div>\n );\n};\n","import React, { useEffect } from 'react';\nimport { useFormContext } from 'react-hook-form';\nimport { useEditor, EditorContent } from '@tiptap/react';\nimport StarterKit from '@tiptap/starter-kit';\nimport { JSONSchema } from '../../types/schema';\nimport { AlertCircle, Bold, Italic, List, ListOrdered, Heading2 } from 'lucide-react';\n\ninterface RichTextFieldProps {\n name: string;\n schema: JSONSchema;\n isRequired?: boolean;\n}\n\nexport const RichTextField: React.FC<RichTextFieldProps> = ({ name, schema, isRequired }) => {\n const {\n setValue,\n watch,\n formState: { errors },\n } = useFormContext();\n const error = errors[name];\n const value = watch(name);\n\n const editor = useEditor({\n extensions: [StarterKit],\n content: value || '',\n onUpdate: ({ editor }) => {\n setValue(name, editor.getHTML(), { shouldValidate: true, shouldDirty: true });\n },\n });\n\n // Keep editor in sync with external form changes (if any)\n useEffect(() => {\n if (editor && value !== editor.getHTML()) {\n editor.commands.setContent(value || '');\n }\n }, [value, editor]);\n\n return (\n <div className=\"cdf-field-group\">\n <label className=\"cdf-label\" htmlFor={name}>\n {schema.title || name}\n {isRequired && <span className=\"cdf-required-mark\">*</span>}\n </label>\n\n <div className={`cdf-rich-text-wrapper ${error ? 'cdf-input--error' : ''}`}>\n <div className=\"cdf-rich-text-toolbar\">\n <button\n type=\"button\"\n onClick={() => editor?.chain().focus().toggleBold().run()}\n className={`cdf-toolbar-btn ${editor?.isActive('bold') ? 'is-active' : ''}`}\n >\n <Bold size={16} />\n </button>\n <button\n type=\"button\"\n onClick={() => editor?.chain().focus().toggleItalic().run()}\n className={`cdf-toolbar-btn ${editor?.isActive('italic') ? 'is-active' : ''}`}\n >\n <Italic size={16} />\n </button>\n <button\n type=\"button\"\n onClick={() => editor?.chain().focus().toggleHeading({ level: 2 }).run()}\n className={`cdf-toolbar-btn ${editor?.isActive('heading', { level: 2 }) ? 'is-active' : ''}`}\n >\n <Heading2 size={16} />\n </button>\n <button\n type=\"button\"\n onClick={() => editor?.chain().focus().toggleBulletList().run()}\n className={`cdf-toolbar-btn ${editor?.isActive('bulletList') ? 'is-active' : ''}`}\n >\n <List size={16} />\n </button>\n <button\n type=\"button\"\n onClick={() => editor?.chain().focus().toggleOrderedList().run()}\n className={`cdf-toolbar-btn ${editor?.isActive('orderedList') ? 'is-active' : ''}`}\n >\n <ListOrdered size={16} />\n </button>\n </div>\n\n <EditorContent editor={editor} className=\"cdf-rich-text-content\" />\n </div>\n\n {error && (\n <span className=\"cdf-error-message\">\n <AlertCircle size={14} />\n {error.message as string}\n </span>\n )}\n </div>\n );\n};\n","import React from 'react';\nimport { useFormContext } from 'react-hook-form';\nimport { JSONSchema } from '../../types/schema';\n\ninterface SelectFieldProps {\n name: string;\n schema: JSONSchema;\n isRequired?: boolean;\n}\n\nexport const SelectField: React.FC<SelectFieldProps> = ({ name, schema, isRequired }) => {\n const {\n register,\n formState: { errors },\n } = useFormContext();\n\n const error = errors[name];\n\n return (\n <div className=\"cdf-field-group\">\n <label htmlFor={name} className=\"cdf-label\">\n {schema.title || name}\n {isRequired && <span className=\"cdf-required-mark\">*</span>}\n </label>\n\n <div className=\"cdf-input-wrapper\">\n <select\n id={name}\n {...register(name)}\n className={`cdf-input cdf-select ${error ? 'cdf-input--error' : ''}`}\n >\n <option value=\"\">Select an option...</option>\n {schema.enum?.map((option) => (\n <option key={option} value={option}>\n {option}\n </option>\n ))}\n </select>\n </div>\n\n {error && (\n <span className=\"cdf-error-message\">\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\"></circle>\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"></line>\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"></line>\n </svg>\n {error.message as string}\n </span>\n )}\n </div>\n );\n};\n","import React from 'react';\nimport { useFormContext } from 'react-hook-form';\nimport { JSONSchema } from '../../types/schema';\n\ninterface RadioFieldProps {\n name: string;\n schema: JSONSchema;\n isRequired?: boolean;\n}\n\nexport const RadioField: React.FC<RadioFieldProps> = ({ name, schema, isRequired }) => {\n const {\n register,\n formState: { errors },\n } = useFormContext();\n\n const error = errors[name];\n\n return (\n <div className=\"cdf-field-group\">\n <label className=\"cdf-label\">\n {schema.title || name}\n {isRequired && <span className=\"cdf-required-mark\">*</span>}\n </label>\n\n <div className=\"cdf-radio-group\">\n {schema.enum?.map((option) => (\n <label key={option} className=\"cdf-radio-label\">\n <input type=\"radio\" value={option} {...register(name)} className=\"cdf-radio-input\" />\n {option}\n </label>\n ))}\n </div>\n\n {error && (\n <span className=\"cdf-error-message\">\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\"></circle>\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"></line>\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"></line>\n </svg>\n {error.message as string}\n </span>\n )}\n </div>\n );\n};\n","import React from 'react';\nimport { useFormContext } from 'react-hook-form';\nimport { JSONSchema } from '../../types/schema';\n\ninterface CheckboxFieldProps {\n name: string;\n schema: JSONSchema;\n isRequired?: boolean;\n}\n\nexport const CheckboxField: React.FC<CheckboxFieldProps> = ({ name, schema, isRequired }) => {\n const {\n register,\n formState: { errors },\n } = useFormContext();\n\n const error = errors[name];\n\n return (\n <div className=\"cdf-field-group\">\n <div className=\"cdf-checkbox-group\">\n <label className=\"cdf-checkbox-label\">\n <input type=\"checkbox\" {...register(name)} className=\"cdf-checkbox-input\" />\n {schema.title || name}\n {isRequired && <span className=\"cdf-required-mark\">*</span>}\n </label>\n </div>\n\n {schema.description && (\n <p style={{ fontSize: '0.875rem', color: 'var(--cdf-text-muted)', marginTop: '0.25rem' }}>\n {schema.description}\n </p>\n )}\n\n {error && (\n <span className=\"cdf-error-message\">\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\"></circle>\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"></line>\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"></line>\n </svg>\n {error.message as string}\n </span>\n )}\n </div>\n );\n};\n","import React from 'react';\nimport { useFormContext } from 'react-hook-form';\nimport { JSONSchema } from '../../types/schema';\n\ninterface CheckboxGroupFieldProps {\n name: string;\n schema: JSONSchema;\n isRequired?: boolean;\n}\n\nexport const CheckboxGroupField: React.FC<CheckboxGroupFieldProps> = ({\n name,\n schema,\n isRequired,\n}) => {\n const {\n register,\n formState: { errors },\n } = useFormContext();\n\n const error = errors[name];\n\n // Extract enum options from items definition\n let options: any[] = [];\n if (schema.items && !Array.isArray(schema.items) && schema.items.enum) {\n options = schema.items.enum;\n }\n\n return (\n <div className=\"cdf-field-group\">\n <label className=\"cdf-label\">\n {schema.title || name}\n {isRequired && <span className=\"cdf-required-mark\">*</span>}\n </label>\n\n <div className=\"cdf-checkbox-group\">\n {options.map((option) => (\n <label key={option} className=\"cdf-checkbox-label\">\n <input\n type=\"checkbox\"\n value={option}\n {...register(name)}\n className=\"cdf-checkbox-input\"\n />\n {option}\n </label>\n ))}\n </div>\n\n {error && (\n <span className=\"cdf-error-message\">\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\"></circle>\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"></line>\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"></line>\n </svg>\n {error.message as string}\n </span>\n )}\n </div>\n );\n};\n","import React, { useState } from 'react';\nimport { useFormContext } from 'react-hook-form';\nimport { JSONSchema } from '../../types/schema';\n\ninterface FileFieldProps {\n name: string;\n schema: JSONSchema;\n isRequired?: boolean;\n}\n\nexport const FileField: React.FC<FileFieldProps> = ({ name, schema, isRequired }) => {\n const {\n setValue,\n formState: { errors },\n } = useFormContext();\n\n const [fileName, setFileName] = useState<string | null>(null);\n const error = errors[name];\n\n const handleFileChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n if (!file) {\n setValue(name, undefined, { shouldValidate: true });\n setFileName(null);\n return;\n }\n\n setFileName(file.name);\n\n // Convert file to base64 data-url\n const reader = new FileReader();\n reader.onload = (event) => {\n setValue(name, event.target?.result, { shouldValidate: true });\n };\n reader.readAsDataURL(file);\n };\n\n return (\n <div className=\"cdf-field-group\">\n <label className=\"cdf-label\">\n {schema.title || name}\n {isRequired && <span className=\"cdf-required-mark\">*</span>}\n </label>\n\n <div className={`cdf-file-wrapper ${error ? 'cdf-input--error' : ''}`}>\n <input type=\"file\" className=\"cdf-file-input\" onChange={handleFileChange} />\n <div className=\"cdf-file-text\">\n <span>Click to upload</span> or drag and drop\n </div>\n {fileName && (\n <div className=\"cdf-file-preview\">\n Selected: <strong>{fileName}</strong>\n </div>\n )}\n </div>\n\n {error && (\n <span className=\"cdf-error-message\">\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\"></circle>\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"></line>\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"></line>\n </svg>\n {error.message as string}\n </span>\n )}\n </div>\n );\n};\n","import React from 'react';\nimport { JSONSchema, UISchema } from '../types/schema';\nimport { TextField } from './fields/TextField';\nimport { PasswordField } from './fields/PasswordField';\nimport { NumberField } from './fields/NumberField';\nimport { RichTextField } from './fields/RichTextField';\nimport { SelectField } from './fields/SelectField';\nimport { RadioField } from './fields/RadioField';\nimport { CheckboxField } from './fields/CheckboxField';\nimport { CheckboxGroupField } from './fields/CheckboxGroupField';\nimport { FileField } from './fields/FileField';\n\ninterface FieldRendererProps {\n name: string;\n schema: JSONSchema;\n uiSchema?: UISchema;\n isRequired?: boolean;\n}\n\nexport const FieldRenderer: React.FC<FieldRendererProps> = ({\n name,\n schema,\n uiSchema,\n isRequired,\n}) => {\n const columnSpan = uiSchema?.['ui:columnSpan'] || 1;\n const widget = uiSchema?.['ui:widget'];\n\n const renderField = () => {\n // Arrays (Checkbox Groups)\n if (schema.type === 'array') {\n return <CheckboxGroupField name={name} schema={schema} isRequired={isRequired} />;\n }\n\n // Booleans (Single Checkbox)\n if (schema.type === 'boolean') {\n return <CheckboxField name={name} schema={schema} isRequired={isRequired} />;\n }\n\n // Enums (Select vs Radio)\n if (schema.enum) {\n if (widget === 'radio') {\n return <RadioField name={name} schema={schema} isRequired={isRequired} />;\n }\n return <SelectField name={name} schema={schema} isRequired={isRequired} />;\n }\n\n // Strings\n if (schema.type === 'string') {\n if (schema.format === 'data-url') {\n return <FileField name={name} schema={schema} isRequired={isRequired} />;\n }\n if (schema.format === 'password') {\n return <PasswordField name={name} schema={schema} isRequired={isRequired} />;\n }\n if (schema.format === 'rich-text') {\n return <RichTextField name={name} schema={schema} isRequired={isRequired} />;\n }\n return <TextField name={name} schema={schema} isRequired={isRequired} />;\n }\n\n // Numbers\n if (schema.type === 'number' || schema.type === 'integer') {\n return <NumberField name={name} schema={schema} isRequired={isRequired} />;\n }\n\n // Fallback\n return (\n <div className=\"cdf-field-group\">\n <p className=\"cdf-error-message\">Unsupported field type: {schema.type}</p>\n </div>\n );\n };\n\n return (\n <div style={{ gridColumn: `span ${columnSpan} / span ${columnSpan}` }}>{renderField()}</div>\n );\n};\n","import React from 'react';\nimport { useForm, FormProvider } from 'react-hook-form';\nimport { ajvResolver } from '@hookform/resolvers/ajv';\nimport { JSONSchema, UISchema } from '../types/schema';\nimport { FieldRenderer } from './FieldRenderer';\nimport '../styles/form.css';\n\ninterface SchemaFormProps {\n schema: JSONSchema;\n uiSchema?: Record<string, UISchema>;\n onSubmit: (data: any) => void;\n defaultValues?: any;\n columns?: 1 | 2 | 3 | 4;\n theme?: {\n primary?: string;\n background?: string;\n text?: string;\n error?: string;\n surface?: string;\n border?: string;\n };\n}\n\nexport const SchemaForm: React.FC<SchemaFormProps> = ({\n schema,\n uiSchema = {},\n onSubmit,\n defaultValues,\n columns = 1,\n theme,\n}) => {\n const methods = useForm({\n resolver: ajvResolver(schema as any, {\n formats: {\n 'rich-text': true,\n password: true,\n 'data-url': true,\n email: /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/,\n },\n }),\n defaultValues,\n });\n\n if (schema.type !== 'object' || !schema.properties) {\n return <div className=\"cdf-error-message\">Root schema must be an object with properties.</div>;\n }\n\n const themeStyles = theme\n ? ({\n '--cdf-primary': theme.primary,\n '--cdf-bg': theme.background,\n '--cdf-text': theme.text,\n '--cdf-error': theme.error,\n '--cdf-surface': theme.surface,\n '--cdf-border': theme.border,\n } as React.CSSProperties)\n : {};\n\n return (\n <div className=\"cdf-form-container\" style={themeStyles}>\n {schema.title && <h2 className=\"cdf-form-title\">{schema.title}</h2>}\n {schema.description && (\n <p style={{ color: 'var(--cdf-text-muted)', marginBottom: '1.5rem' }}>\n {schema.description}\n </p>\n )}\n\n <FormProvider {...methods}>\n <form onSubmit={methods.handleSubmit(onSubmit)} noValidate>\n <div className={`cdf-form-grid-${columns}`}>\n {Object.entries(schema.properties).map(([key, propSchema]) => (\n <FieldRenderer\n key={key}\n name={key}\n schema={propSchema}\n uiSchema={uiSchema[key]}\n isRequired={schema.required?.includes(key)}\n />\n ))}\n </div>\n <button type=\"submit\" className=\"cdf-submit-btn\">\n Submit\n </button>\n </form>\n </FormProvider>\n </div>\n );\n};\n"]}
|