config-driven-form 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/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 */
@@ -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":";AAAA;AACE,iBAAe;AACf,uBAAqB;AACrB,uBAAqB,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE;AACxC,eAAa;AACb,qBAAmB,KAAK,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE;AACrC,YAAU;AACV,iBAAe;AACf,gBAAc;AACd,sBAAoB;AACpB,cAAY;AACZ,oBAAkB;AAClB,gBAAc;AACd,gBAAc,EAAE,IAAI,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AAC/E,sBAAoB,EAAE,EAAE,EAAE,IAAI,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE;AACjD;AAAA,IAAY,OAAO;AAAA,IAAE,aAAa;AAAA,IAAE,kBAAkB;AAAA,IAAE,UAAU;AAAA,IAAE,MAAM;AAAA,IAAE;AAC5E,oBAAkB,IAAI,KAAK,aAAa,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;AACvD;AAEA,CAAC;AACC,eAAa,IAAI;AACjB,SAAO,IAAI;AACX,cAAY,IAAI;AAChB,iBAAe,IAAI;AACnB,WAAS;AACT,cAAY,IAAI;AAChB,aAAW;AACX,UAAQ,EAAE;AACV,UAAQ,IAAI,MAAM,IAAI;AACxB;AAEA,CAAC;AACC,aAAW;AACX,eAAa;AACb,iBAAe;AACf,SAAO,IAAI;AACb;AAEA,CAAC;AACC,iBAAe;AACf,WAAS;AACT,kBAAgB;AAClB;AAEA,CAAC;AACC,aAAW;AACX,eAAa;AACb,iBAAe;AACf,SAAO,IAAI;AACX,WAAS;AACT,eAAa;AACb,OAAK;AACP;AAEA,CAAC;AACC,SAAO,IAAI;AACb;AAEA,CAAC;AACC,YAAU;AACV,WAAS;AACT,eAAa;AACf;AAEA,CAAC;AACC,SAAO;AACP,WAAS,QAAQ;AACjB,aAAW;AACX,eAAa,IAAI;AACjB,SAAO,IAAI;AACX,oBAAkB,IAAI;AACtB,UAAQ,IAAI,MAAM,IAAI;AACtB,iBAAe,IAAI;AACnB,cAAY,IAAI;AAChB,WAAS;AACT,cAAY;AACd;AAEA,CAdC,SAcS;AACR,gBAAc,IAAI;AACpB;AAEA,CAlBC,SAkBS;AACR,gBAAc,IAAI;AAClB,oBAAkB,IAAI;AACtB,cAAY,IAAI;AAClB;AAEA,CAAC;AACC,gBAAc,IAAI;AAClB,oBAAkB,IAAI;AACxB;AAEA,CALC,gBAKgB;AACf,gBAAc,IAAI;AAClB,cAAY,EAAE,EAAE,EAAE,IAAI,KAAK,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE;AAC1C;AAEA,CAAC;AACC,aAAW;AACX,SAAO,IAAI;AACX,cAAY;AACZ,WAAS;AACT,eAAa;AACb,OAAK;AACP;AAEA,CAAC;AACC,SAAO;AACP,WAAS,SAAS;AAClB,aAAW;AACX,eAAa;AACb,eAAa,IAAI;AACjB,SAAO;AACP,oBAAkB,IAAI;AACtB,UAAQ;AACR,iBAAe,IAAI;AACnB,UAAQ;AACR,cAAY,IAAI;AAChB,cAAY;AACZ,cAAY,EAAE,IAAI,KAAK,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE;AAC9C;AAEA,CAhBC,cAgBc;AACb,oBAAkB,IAAI;AACtB,aAAW,WAAW;AACtB,cAAY,EAAE,IAAI,KAAK,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE;AAC5C;AAEA,CAtBC,cAsBc;AACb,aAAW,WAAW;AACtB,cAAY,EAAE,IAAI,KAAK,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE;AAC5C;AAGA,CAAC;AACC,UAAQ,IAAI,MAAM,IAAI;AACtB,iBAAe,IAAI;AACnB,YAAU;AACV,cAAY,IAAI;AAClB;AAEA,CAPC,qBAOqB;AACpB,gBAAc,IAAI;AAClB,cAAY,IAAI;AAClB;AAEA,CAAC;AACC,WAAS;AACT,OAAK;AACL,WAAS;AACT,cAAY,IAAI;AAChB,iBAAe,IAAI,MAAM,IAAI;AAC/B;AAEA,CAAC;AACC,WAAS;AACT,cAAY;AACZ,UAAQ;AACR,iBAAe;AACf,UAAQ;AACR,SAAO,IAAI;AACX,cAAY,IAAI;AAClB;AAEA,CAVC,eAUe;AACd,cAAY,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AAC1B,SAAO,IAAI;AACb;AAEA,CAfC,eAee,CAAC;AACf,cAAY,IAAI;AAChB,SAAO,IAAI;AACb;AAEA,CAAC;AACC,WAAS;AACT,cAAY;AACZ,cAAY,IAAI;AAChB,WAAS;AACX;AAEA,CAPC,sBAOsB,CAAC;AACtB,WAAS;AACX;AAEA,CAXC,sBAWsB,CAJC,YAIY,CAAC,CAAC,eAAe,YAAY;AAC/D,SAAO,IAAI;AACX,WAAS,KAAK;AACd,SAAO;AACP,UAAQ;AACR,kBAAgB;AAClB;","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 FieldRenderer = ({ name, schema, isRequired }) => {
195
- if (schema.type === "string") {
196
- if (schema.format === "password") {
197
- return /* @__PURE__ */ jsxRuntime.jsx(PasswordField, { name, schema, isRequired });
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.format === "rich-text") {
200
- return /* @__PURE__ */ jsxRuntime.jsx(RichTextField, { name, schema, isRequired });
434
+ if (schema.type === "boolean") {
435
+ return /* @__PURE__ */ jsxRuntime.jsx(CheckboxField, { name, schema, isRequired });
201
436
  }
202
- return /* @__PURE__ */ jsxRuntime.jsx(TextField, { name, schema, isRequired });
203
- }
204
- if (schema.type === "number" || schema.type === "integer") {
205
- return /* @__PURE__ */ jsxRuntime.jsx(NumberField, { name, schema, isRequired });
206
- }
207
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdf-field-group", children: /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "cdf-error-message", children: [
208
- "Unsupported field type: ",
209
- schema.type
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 = ({ schema, onSubmit, defaultValues }) => {
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
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdf-form-container", children: [
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 FieldRenderer = ({ name, schema, isRequired }) => {
189
- if (schema.type === "string") {
190
- if (schema.format === "password") {
191
- return /* @__PURE__ */ jsx(PasswordField, { name, schema, isRequired });
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.format === "rich-text") {
194
- return /* @__PURE__ */ jsx(RichTextField, { name, schema, isRequired });
428
+ if (schema.type === "boolean") {
429
+ return /* @__PURE__ */ jsx(CheckboxField, { name, schema, isRequired });
195
430
  }
196
- return /* @__PURE__ */ jsx(TextField, { name, schema, isRequired });
197
- }
198
- if (schema.type === "number" || schema.type === "integer") {
199
- return /* @__PURE__ */ jsx(NumberField, { name, schema, isRequired });
200
- }
201
- return /* @__PURE__ */ jsx("div", { className: "cdf-field-group", children: /* @__PURE__ */ jsxs("p", { className: "cdf-error-message", children: [
202
- "Unsupported field type: ",
203
- schema.type
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 = ({ schema, onSubmit, defaultValues }) => {
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
- return /* @__PURE__ */ jsxs("div", { className: "cdf-form-container", children: [
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
  ] });
@@ -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":";;;;;;;;;AAWO,IAAM,YAAsC,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,YAAW,KAAM;AACnF,EAAA,MAAM;AAAA,IACJ,QAAA;AAAA,IACA,SAAA,EAAW,EAAE,MAAA;AAAO,MAClB,cAAA,EAAe;AACnB,EAAA,MAAM,KAAA,GAAQ,OAAO,IAAI,CAAA;AAEzB,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EACb,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,WAAA,EAAY,OAAA,EAAS,IAAA,EACnC,QAAA,EAAA;AAAA,MAAA,MAAA,CAAO,KAAA,IAAS,IAAA;AAAA,MAChB,UAAA,oBAAc,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qBAAoB,QAAA,EAAA,GAAA,EAAC;AAAA,KAAA,EACtD,CAAA;AAAA,oBACA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mBAAA,EACb,QAAA,kBAAA,GAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,EAAA,EAAI,IAAA;AAAA,QACJ,IAAA,EAAM,MAAA,CAAO,MAAA,KAAW,OAAA,GAAU,OAAA,GAAU,MAAA;AAAA,QAC5C,SAAA,EAAW,CAAA,UAAA,EAAa,KAAA,GAAQ,kBAAA,GAAqB,EAAE,CAAA,CAAA;AAAA,QACvD,WAAA,EAAa,CAAA,MAAA,EAAS,MAAA,CAAO,KAAA,IAAS,IAAI,CAAA,CAAA;AAAA,QACzC,GAAG,SAAS,IAAI;AAAA;AAAA,KACnB,EACF,CAAA;AAAA,IACC,KAAA,oBACC,IAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mBAAA,EACd,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,WAAA,EAAA,EAAY,MAAM,EAAA,EAAI,CAAA;AAAA,MACtB,KAAA,CAAM;AAAA,KAAA,EACT;AAAA,GAAA,EAEJ,CAAA;AAEJ,CAAA;AC9BO,IAAM,gBAA8C,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,YAAW,KAAM;AAC3F,EAAA,MAAM;AAAA,IACJ,QAAA;AAAA,IACA,SAAA,EAAW,EAAE,MAAA;AAAO,MAClBA,cAAAA,EAAe;AACnB,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,SAAS,KAAK,CAAA;AACtD,EAAA,MAAM,KAAA,GAAQ,OAAO,IAAI,CAAA;AAEzB,EAAA,uBACEC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,WAAA,EAAY,SAAS,IAAA,EACnC,QAAA,EAAA;AAAA,MAAA,MAAA,CAAO,KAAA,IAAS,IAAA;AAAA,MAChB,8BAAcC,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qBAAoB,QAAA,EAAA,GAAA,EAAC;AAAA,KAAA,EACtD,CAAA;AAAA,oBACAD,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mBAAA,EACb,QAAA,EAAA;AAAA,sBAAAC,GAAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,EAAA,EAAI,IAAA;AAAA,UACJ,IAAA,EAAM,eAAe,MAAA,GAAS,UAAA;AAAA,UAC9B,SAAA,EAAW,CAAA,UAAA,EAAa,KAAA,GAAQ,kBAAA,GAAqB,EAAE,CAAA,CAAA;AAAA,UACvD,KAAA,EAAO,EAAE,YAAA,EAAc,QAAA,EAAS;AAAA,UAChC,WAAA,EAAa,CAAA,MAAA,EAAS,MAAA,CAAO,KAAA,IAAS,IAAI,CAAA,CAAA;AAAA,UACzC,GAAG,SAAS,IAAI;AAAA;AAAA,OACnB;AAAA,sBACAA,GAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,SAAA,EAAU,iBAAA;AAAA,UACV,KAAA,EAAO,EAAE,QAAA,EAAU,UAAA,EAAY,OAAO,QAAA,EAAS;AAAA,UAC/C,OAAA,EAAS,MAAM,eAAA,CAAgB,CAAC,YAAY,CAAA;AAAA,UAE3C,QAAA,EAAA,YAAA,mBAAeA,GAAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAM,EAAA,EAAI,CAAA,mBAAKA,GAAAA,CAAC,GAAA,EAAA,EAAI,IAAA,EAAM,EAAA,EAAI;AAAA;AAAA;AACxD,KAAA,EACF,CAAA;AAAA,IACC,KAAA,oBACCD,IAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,mBAAA,EACd,QAAA,EAAA;AAAA,sBAAAC,GAAAA,CAACC,WAAAA,EAAA,EAAY,IAAA,EAAM,EAAA,EAAI,CAAA;AAAA,MACtB,KAAA,CAAM;AAAA,KAAA,EACT;AAAA,GAAA,EAEJ,CAAA;AAEJ,CAAA;ACxCO,IAAM,cAA0C,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,YAAW,KAAM;AACvF,EAAA,MAAM;AAAA,IACJ,QAAA;AAAA,IACA,SAAA,EAAW,EAAE,MAAA;AAAO,MAClBH,cAAAA,EAAe;AACnB,EAAA,MAAM,KAAA,GAAQ,OAAO,IAAI,CAAA;AAEzB,EAAA,uBACEC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,WAAA,EAAY,SAAS,IAAA,EACnC,QAAA,EAAA;AAAA,MAAA,MAAA,CAAO,KAAA,IAAS,IAAA;AAAA,MAChB,8BAAcC,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qBAAoB,QAAA,EAAA,GAAA,EAAC;AAAA,KAAA,EACtD,CAAA;AAAA,oBACAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBACb,QAAA,kBAAAA,GAAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,EAAA,EAAI,IAAA;AAAA,QACJ,IAAA,EAAK,QAAA;AAAA,QACL,SAAA,EAAW,CAAA,UAAA,EAAa,KAAA,GAAQ,kBAAA,GAAqB,EAAE,CAAA,CAAA;AAAA,QACvD,WAAA,EAAa,CAAA,MAAA,EAAS,MAAA,CAAO,KAAA,IAAS,IAAI,CAAA,CAAA;AAAA,QACzC,GAAG,SAAS,IAAA,EAAM;AAAA,UACjB,aAAA,EAAe;AAAA,SAChB;AAAA;AAAA,KACH,EACF,CAAA;AAAA,IACC,KAAA,oBACCD,IAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,mBAAA,EACd,QAAA,EAAA;AAAA,sBAAAC,GAAAA,CAACC,WAAAA,EAAA,EAAY,IAAA,EAAM,EAAA,EAAI,CAAA;AAAA,MACtB,KAAA,CAAM;AAAA,KAAA,EACT;AAAA,GAAA,EAEJ,CAAA;AAEJ,CAAA;AC9BO,IAAM,gBAA8C,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,YAAW,KAAM;AAC3F,EAAA,MAAM;AAAA,IACJ,QAAA;AAAA,IACA,KAAA;AAAA,IACA,SAAA,EAAW,EAAE,MAAA;AAAO,MAClBH,cAAAA,EAAe;AACnB,EAAA,MAAM,KAAA,GAAQ,OAAO,IAAI,CAAA;AACzB,EAAA,MAAM,KAAA,GAAQ,MAAM,IAAI,CAAA;AAExB,EAAA,MAAM,SAAS,SAAA,CAAU;AAAA,IACvB,UAAA,EAAY,CAAC,UAAU,CAAA;AAAA,IACvB,SAAS,KAAA,IAAS,EAAA;AAAA,IAClB,QAAA,EAAU,CAAC,EAAE,MAAA,EAAAI,SAAO,KAAM;AACxB,MAAA,QAAA,CAAS,IAAA,EAAMA,QAAO,OAAA,EAAQ,EAAG,EAAE,cAAA,EAAgB,IAAA,EAAM,WAAA,EAAa,IAAA,EAAM,CAAA;AAAA,IAC9E;AAAA,GACD,CAAA;AAGD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,MAAA,IAAU,KAAA,KAAU,MAAA,CAAO,OAAA,EAAQ,EAAG;AACxC,MAAA,MAAA,CAAO,QAAA,CAAS,UAAA,CAAW,KAAA,IAAS,EAAE,CAAA;AAAA,IACxC;AAAA,EACF,CAAA,EAAG,CAAC,KAAA,EAAO,MAAM,CAAC,CAAA;AAElB,EAAA,uBACEH,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,WAAA,EAAY,SAAS,IAAA,EACnC,QAAA,EAAA;AAAA,MAAA,MAAA,CAAO,KAAA,IAAS,IAAA;AAAA,MAChB,8BAAcC,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qBAAoB,QAAA,EAAA,GAAA,EAAC;AAAA,KAAA,EACtD,CAAA;AAAA,oBAEAD,KAAC,KAAA,EAAA,EAAI,SAAA,EAAW,yBAAyB,KAAA,GAAQ,kBAAA,GAAqB,EAAE,CAAA,CAAA,EACtE,QAAA,EAAA;AAAA,sBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uBAAA,EACb,QAAA,EAAA;AAAA,wBAAAC,GAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,MAAM,MAAA,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAQ,KAAA,EAAA,CAAQ,QAAQ,UAAA,EAAA,CAAa,GAAA,EAAA;AAAA,YACpD,WAAW,CAAA,gBAAA,EAAA,CAAmB,MAAA,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAQ,QAAA,CAAS,MAAA,CAAA,IAAU,cAAc,EAAE,CAAA,CAAA;AAAA,YAEzE,QAAA,kBAAAA,GAAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAM,EAAA,EAAI;AAAA;AAAA,SAClB;AAAA,wBACAA,GAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,MAAM,MAAA,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAQ,KAAA,EAAA,CAAQ,QAAQ,YAAA,EAAA,CAAe,GAAA,EAAA;AAAA,YACtD,WAAW,CAAA,gBAAA,EAAA,CAAmB,MAAA,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAQ,QAAA,CAAS,QAAA,CAAA,IAAY,cAAc,EAAE,CAAA,CAAA;AAAA,YAE3E,QAAA,kBAAAA,GAAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAM,EAAA,EAAI;AAAA;AAAA,SACpB;AAAA,wBACAA,GAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,MAAM,MAAA,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAQ,KAAA,EAAA,CAAQ,QAAQ,aAAA,CAAc,EAAE,KAAA,EAAO,CAAA,EAAE,CAAA,CAAG,GAAA,EAAA;AAAA,YACnE,SAAA,EAAW,CAAA,gBAAA,EAAA,CAAmB,MAAA,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAQ,QAAA,CAAS,SAAA,EAAW,EAAE,KAAA,EAAO,CAAA,EAAE,CAAA,IAAK,WAAA,GAAc,EAAE,CAAA,CAAA;AAAA,YAE1F,QAAA,kBAAAA,GAAAA,CAAC,QAAA,EAAA,EAAS,IAAA,EAAM,EAAA,EAAI;AAAA;AAAA,SACtB;AAAA,wBACAA,GAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,MAAM,MAAA,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAQ,KAAA,EAAA,CAAQ,QAAQ,gBAAA,EAAA,CAAmB,GAAA,EAAA;AAAA,YAC1D,WAAW,CAAA,gBAAA,EAAA,CAAmB,MAAA,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAQ,QAAA,CAAS,YAAA,CAAA,IAAgB,cAAc,EAAE,CAAA,CAAA;AAAA,YAE/E,QAAA,kBAAAA,GAAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAM,EAAA,EAAI;AAAA;AAAA,SAClB;AAAA,wBACAA,GAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,MAAM,MAAA,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAQ,KAAA,EAAA,CAAQ,QAAQ,iBAAA,EAAA,CAAoB,GAAA,EAAA;AAAA,YAC3D,WAAW,CAAA,gBAAA,EAAA,CAAmB,MAAA,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAQ,QAAA,CAAS,aAAA,CAAA,IAAiB,cAAc,EAAE,CAAA,CAAA;AAAA,YAEhF,QAAA,kBAAAA,GAAAA,CAAC,WAAA,EAAA,EAAY,IAAA,EAAM,EAAA,EAAI;AAAA;AAAA;AACzB,OAAA,EACF,CAAA;AAAA,sBAEAA,GAAAA,CAAC,aAAA,EAAA,EAAc,MAAA,EAAgB,WAAU,uBAAA,EAAwB;AAAA,KAAA,EACnE,CAAA;AAAA,IAEC,KAAA,oBACCD,IAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,mBAAA,EACd,QAAA,EAAA;AAAA,sBAAAC,GAAAA,CAACC,WAAAA,EAAA,EAAY,IAAA,EAAM,EAAA,EAAI,CAAA;AAAA,MACtB,KAAA,CAAM;AAAA,KAAA,EACT;AAAA,GAAA,EAEJ,CAAA;AAEJ,CAAA;ACpFO,IAAM,cAA0C,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,YAAW,KAAM;AAVzF,EAAA,IAAA,EAAA;AAWE,EAAA,MAAM;AAAA,IACJ,QAAA;AAAA,IACA,SAAA,EAAW,EAAE,MAAA;AAAO,MAClBH,cAAAA,EAAe;AAEnB,EAAA,MAAM,KAAA,GAAQ,OAAO,IAAI,CAAA;AAEzB,EAAA,uBACEC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,OAAA,EAAA,EAAM,OAAA,EAAS,IAAA,EAAM,WAAU,WAAA,EAC7B,QAAA,EAAA;AAAA,MAAA,MAAA,CAAO,KAAA,IAAS,IAAA;AAAA,MAChB,8BAAcC,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qBAAoB,QAAA,EAAA,GAAA,EAAC;AAAA,KAAA,EACtD,CAAA;AAAA,oBAEAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBACb,QAAA,kBAAAD,IAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,EAAA,EAAI,IAAA;AAAA,QACH,GAAG,SAAS,IAAI,CAAA;AAAA,QACjB,SAAA,EAAW,CAAA,qBAAA,EAAwB,KAAA,GAAQ,kBAAA,GAAqB,EAAE,CAAA,CAAA;AAAA,QAElE,QAAA,EAAA;AAAA,0BAAAC,GAAAA,CAAC,QAAA,EAAA,EAAO,KAAA,EAAM,EAAA,EAAG,QAAA,EAAA,qBAAA,EAAmB,CAAA;AAAA,UAAA,CACnC,EAAA,GAAA,MAAA,CAAO,IAAA,KAAP,IAAA,GAAA,MAAA,GAAA,EAAA,CAAa,GAAA,CAAI,CAAC,MAAA,qBACjBA,GAAAA,CAAC,QAAA,EAAA,EAAoB,KAAA,EAAO,MAAA,EACzB,QAAA,EAAA,MAAA,EAAA,EADU,MAEb,CAAA;AAAA;AAAA;AAAA,KAEJ,EACF,CAAA;AAAA,IAEC,KAAA,oBACCD,IAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,mBAAA,EACd,QAAA,EAAA;AAAA,sBAAAA,IAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAM,IAAA;AAAA,UACN,MAAA,EAAO,IAAA;AAAA,UACP,OAAA,EAAQ,WAAA;AAAA,UACR,IAAA,EAAK,MAAA;AAAA,UACL,MAAA,EAAO,cAAA;AAAA,UACP,WAAA,EAAY,GAAA;AAAA,UAEZ,QAAA,EAAA;AAAA,4BAAAC,IAAC,QAAA,EAAA,EAAO,EAAA,EAAG,MAAK,EAAA,EAAG,IAAA,EAAK,GAAE,IAAA,EAAK,CAAA;AAAA,4BAC/BA,GAAAA,CAAC,MAAA,EAAA,EAAK,EAAA,EAAG,IAAA,EAAK,IAAG,GAAA,EAAI,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,CAAA;AAAA,4BACrCA,GAAAA,CAAC,MAAA,EAAA,EAAK,EAAA,EAAG,IAAA,EAAK,IAAG,IAAA,EAAK,EAAA,EAAG,OAAA,EAAQ,EAAA,EAAG,IAAA,EAAK;AAAA;AAAA;AAAA,OAC3C;AAAA,MACC,KAAA,CAAM;AAAA,KAAA,EACT;AAAA,GAAA,EAEJ,CAAA;AAEJ,CAAA;ACjDO,IAAM,aAAwC,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,YAAW,KAAM;AAVvF,EAAA,IAAA,EAAA;AAWE,EAAA,MAAM;AAAA,IACJ,QAAA;AAAA,IACA,SAAA,EAAW,EAAE,MAAA;AAAO,MAClBF,cAAAA,EAAe;AAEnB,EAAA,MAAM,KAAA,GAAQ,OAAO,IAAI,CAAA;AAEzB,EAAA,uBACEC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,WAAA,EACd,QAAA,EAAA;AAAA,MAAA,MAAA,CAAO,KAAA,IAAS,IAAA;AAAA,MAChB,8BAAcC,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qBAAoB,QAAA,EAAA,GAAA,EAAC;AAAA,KAAA,EACtD,CAAA;AAAA,oBAEAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mBACZ,QAAA,EAAA,CAAA,EAAA,GAAA,MAAA,CAAO,IAAA,KAAP,IAAA,GAAA,MAAA,GAAA,EAAA,CAAa,GAAA,CAAI,CAAC,MAAA,qBACjBD,IAAAA,CAAC,OAAA,EAAA,EAAmB,WAAU,iBAAA,EAC5B,QAAA,EAAA;AAAA,sBAAAC,GAAAA,CAAC,OAAA,EAAA,EAAM,IAAA,EAAK,OAAA,EAAQ,KAAA,EAAO,MAAA,EAAS,GAAG,QAAA,CAAS,IAAI,CAAA,EAAG,SAAA,EAAU,iBAAA,EAAkB,CAAA;AAAA,MAClF;AAAA,KAAA,EAAA,EAFS,MAGZ,CAAA,CAAA,EAEJ,CAAA;AAAA,IAEC,KAAA,oBACCD,IAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,mBAAA,EACd,QAAA,EAAA;AAAA,sBAAAA,IAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAM,IAAA;AAAA,UACN,MAAA,EAAO,IAAA;AAAA,UACP,OAAA,EAAQ,WAAA;AAAA,UACR,IAAA,EAAK,MAAA;AAAA,UACL,MAAA,EAAO,cAAA;AAAA,UACP,WAAA,EAAY,GAAA;AAAA,UAEZ,QAAA,EAAA;AAAA,4BAAAC,IAAC,QAAA,EAAA,EAAO,EAAA,EAAG,MAAK,EAAA,EAAG,IAAA,EAAK,GAAE,IAAA,EAAK,CAAA;AAAA,4BAC/BA,GAAAA,CAAC,MAAA,EAAA,EAAK,EAAA,EAAG,IAAA,EAAK,IAAG,GAAA,EAAI,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,CAAA;AAAA,4BACrCA,GAAAA,CAAC,MAAA,EAAA,EAAK,EAAA,EAAG,IAAA,EAAK,IAAG,IAAA,EAAK,EAAA,EAAG,OAAA,EAAQ,EAAA,EAAG,IAAA,EAAK;AAAA;AAAA;AAAA,OAC3C;AAAA,MACC,KAAA,CAAM;AAAA,KAAA,EACT;AAAA,GAAA,EAEJ,CAAA;AAEJ,CAAA;AC3CO,IAAM,gBAA8C,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,YAAW,KAAM;AAC3F,EAAA,MAAM;AAAA,IACJ,QAAA;AAAA,IACA,SAAA,EAAW,EAAE,MAAA;AAAO,MAClBF,cAAAA,EAAe;AAEnB,EAAA,MAAM,KAAA,GAAQ,OAAO,IAAI,CAAA;AAEzB,EAAA,uBACEC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EACb,QAAA,EAAA;AAAA,oBAAAC,GAAAA,CAAC,SAAI,SAAA,EAAU,oBAAA,EACb,0BAAAD,IAAAA,CAAC,OAAA,EAAA,EAAM,WAAU,oBAAA,EACf,QAAA,EAAA;AAAA,sBAAAC,GAAAA,CAAC,WAAM,IAAA,EAAK,UAAA,EAAY,GAAG,QAAA,CAAS,IAAI,CAAA,EAAG,SAAA,EAAU,oBAAA,EAAqB,CAAA;AAAA,MACzE,OAAO,KAAA,IAAS,IAAA;AAAA,MAChB,8BAAcA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qBAAoB,QAAA,EAAA,GAAA,EAAC;AAAA,KAAA,EACtD,CAAA,EACF,CAAA;AAAA,IAEC,MAAA,CAAO,WAAA,oBACNA,GAAAA,CAAC,OAAE,KAAA,EAAO,EAAE,QAAA,EAAU,UAAA,EAAY,OAAO,uBAAA,EAAyB,SAAA,EAAW,SAAA,EAAU,EACpF,iBAAO,WAAA,EACV,CAAA;AAAA,IAGD,KAAA,oBACCD,IAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,mBAAA,EACd,QAAA,EAAA;AAAA,sBAAAA,IAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAM,IAAA;AAAA,UACN,MAAA,EAAO,IAAA;AAAA,UACP,OAAA,EAAQ,WAAA;AAAA,UACR,IAAA,EAAK,MAAA;AAAA,UACL,MAAA,EAAO,cAAA;AAAA,UACP,WAAA,EAAY,GAAA;AAAA,UAEZ,QAAA,EAAA;AAAA,4BAAAC,IAAC,QAAA,EAAA,EAAO,EAAA,EAAG,MAAK,EAAA,EAAG,IAAA,EAAK,GAAE,IAAA,EAAK,CAAA;AAAA,4BAC/BA,GAAAA,CAAC,MAAA,EAAA,EAAK,EAAA,EAAG,IAAA,EAAK,IAAG,GAAA,EAAI,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,CAAA;AAAA,4BACrCA,GAAAA,CAAC,MAAA,EAAA,EAAK,EAAA,EAAG,IAAA,EAAK,IAAG,IAAA,EAAK,EAAA,EAAG,OAAA,EAAQ,EAAA,EAAG,IAAA,EAAK;AAAA;AAAA;AAAA,OAC3C;AAAA,MACC,KAAA,CAAM;AAAA,KAAA,EACT;AAAA,GAAA,EAEJ,CAAA;AAEJ,CAAA;AC3CO,IAAM,qBAAwD,CAAC;AAAA,EACpE,IAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,MAAM;AAAA,IACJ,QAAA;AAAA,IACA,SAAA,EAAW,EAAE,MAAA;AAAO,MAClBF,cAAAA,EAAe;AAEnB,EAAA,MAAM,KAAA,GAAQ,OAAO,IAAI,CAAA;AAGzB,EAAA,IAAI,UAAiB,EAAC;AACtB,EAAA,IAAI,MAAA,CAAO,KAAA,IAAS,CAAC,KAAA,CAAM,OAAA,CAAQ,OAAO,KAAK,CAAA,IAAK,MAAA,CAAO,KAAA,CAAM,IAAA,EAAM;AACrE,IAAA,OAAA,GAAU,OAAO,KAAA,CAAM,IAAA;AAAA,EACzB;AAEA,EAAA,uBACEC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,WAAA,EACd,QAAA,EAAA;AAAA,MAAA,MAAA,CAAO,KAAA,IAAS,IAAA;AAAA,MAChB,8BAAcC,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qBAAoB,QAAA,EAAA,GAAA,EAAC;AAAA,KAAA,EACtD,CAAA;AAAA,oBAEAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAA,EACZ,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,qBACZD,IAAAA,CAAC,OAAA,EAAA,EAAmB,WAAU,oBAAA,EAC5B,QAAA,EAAA;AAAA,sBAAAC,GAAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,UAAA;AAAA,UACL,KAAA,EAAO,MAAA;AAAA,UACN,GAAG,SAAS,IAAI,CAAA;AAAA,UACjB,SAAA,EAAU;AAAA;AAAA,OACZ;AAAA,MACC;AAAA,KAAA,EAAA,EAPS,MAQZ,CACD,CAAA,EACH,CAAA;AAAA,IAEC,KAAA,oBACCD,IAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,mBAAA,EACd,QAAA,EAAA;AAAA,sBAAAA,IAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAM,IAAA;AAAA,UACN,MAAA,EAAO,IAAA;AAAA,UACP,OAAA,EAAQ,WAAA;AAAA,UACR,IAAA,EAAK,MAAA;AAAA,UACL,MAAA,EAAO,cAAA;AAAA,UACP,WAAA,EAAY,GAAA;AAAA,UAEZ,QAAA,EAAA;AAAA,4BAAAC,IAAC,QAAA,EAAA,EAAO,EAAA,EAAG,MAAK,EAAA,EAAG,IAAA,EAAK,GAAE,IAAA,EAAK,CAAA;AAAA,4BAC/BA,GAAAA,CAAC,MAAA,EAAA,EAAK,EAAA,EAAG,IAAA,EAAK,IAAG,GAAA,EAAI,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,CAAA;AAAA,4BACrCA,GAAAA,CAAC,MAAA,EAAA,EAAK,EAAA,EAAG,IAAA,EAAK,IAAG,IAAA,EAAK,EAAA,EAAG,OAAA,EAAQ,EAAA,EAAG,IAAA,EAAK;AAAA;AAAA;AAAA,OAC3C;AAAA,MACC,KAAA,CAAM;AAAA,KAAA,EACT;AAAA,GAAA,EAEJ,CAAA;AAEJ,CAAA;AC1DO,IAAM,YAAsC,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,YAAW,KAAM;AACnF,EAAA,MAAM;AAAA,IACJ,QAAA;AAAA,IACA,SAAA,EAAW,EAAE,MAAA;AAAO,MAClBF,cAAAA,EAAe;AAEnB,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIK,SAAwB,IAAI,CAAA;AAC5D,EAAA,MAAM,KAAA,GAAQ,OAAO,IAAI,CAAA;AAEzB,EAAA,MAAM,gBAAA,GAAmB,CAAC,CAAA,KAA2C;AAnBvE,IAAA,IAAA,EAAA;AAoBI,IAAA,MAAM,IAAA,GAAA,CAAO,EAAA,GAAA,CAAA,CAAE,MAAA,CAAO,KAAA,KAAT,IAAA,GAAA,MAAA,GAAA,EAAA,CAAiB,CAAA,CAAA;AAC9B,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,QAAA,CAAS,IAAA,EAAM,MAAA,EAAW,EAAE,cAAA,EAAgB,MAAM,CAAA;AAClD,MAAA,WAAA,CAAY,IAAI,CAAA;AAChB,MAAA;AAAA,IACF;AAEA,IAAA,WAAA,CAAY,KAAK,IAAI,CAAA;AAGrB,IAAA,MAAM,MAAA,GAAS,IAAI,UAAA,EAAW;AAC9B,IAAA,MAAA,CAAO,MAAA,GAAS,CAAC,KAAA,KAAU;AA/B/B,MAAA,IAAAC,GAAAA;AAgCM,MAAA,QAAA,CAAS,IAAA,EAAA,CAAMA,GAAAA,GAAA,KAAA,CAAM,MAAA,KAAN,IAAA,GAAA,MAAA,GAAAA,IAAc,MAAA,EAAQ,EAAE,cAAA,EAAgB,IAAA,EAAM,CAAA;AAAA,IAC/D,CAAA;AACA,IAAA,MAAA,CAAO,cAAc,IAAI,CAAA;AAAA,EAC3B,CAAA;AAEA,EAAA,uBACEL,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,WAAA,EACd,QAAA,EAAA;AAAA,MAAA,MAAA,CAAO,KAAA,IAAS,IAAA;AAAA,MAChB,8BAAcC,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qBAAoB,QAAA,EAAA,GAAA,EAAC;AAAA,KAAA,EACtD,CAAA;AAAA,oBAEAD,KAAC,KAAA,EAAA,EAAI,SAAA,EAAW,oBAAoB,KAAA,GAAQ,kBAAA,GAAqB,EAAE,CAAA,CAAA,EACjE,QAAA,EAAA;AAAA,sBAAAC,IAAC,OAAA,EAAA,EAAM,IAAA,EAAK,QAAO,SAAA,EAAU,gBAAA,EAAiB,UAAU,gBAAA,EAAkB,CAAA;AAAA,sBAC1ED,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EACb,QAAA,EAAA;AAAA,wBAAAC,GAAAA,CAAC,UAAK,QAAA,EAAA,iBAAA,EAAe,CAAA;AAAA,QAAO;AAAA,OAAA,EAC9B,CAAA;AAAA,MACC,QAAA,oBACCD,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,kBAAA,EAAmB,QAAA,EAAA;AAAA,QAAA,YAAA;AAAA,wBACtBC,GAAAA,CAAC,QAAA,EAAA,EAAQ,QAAA,EAAA,QAAA,EAAS;AAAA,OAAA,EAC9B;AAAA,KAAA,EAEJ,CAAA;AAAA,IAEC,KAAA,oBACCD,IAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,mBAAA,EACd,QAAA,EAAA;AAAA,sBAAAA,IAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAM,IAAA;AAAA,UACN,MAAA,EAAO,IAAA;AAAA,UACP,OAAA,EAAQ,WAAA;AAAA,UACR,IAAA,EAAK,MAAA;AAAA,UACL,MAAA,EAAO,cAAA;AAAA,UACP,WAAA,EAAY,GAAA;AAAA,UAEZ,QAAA,EAAA;AAAA,4BAAAC,IAAC,QAAA,EAAA,EAAO,EAAA,EAAG,MAAK,EAAA,EAAG,IAAA,EAAK,GAAE,IAAA,EAAK,CAAA;AAAA,4BAC/BA,GAAAA,CAAC,MAAA,EAAA,EAAK,EAAA,EAAG,IAAA,EAAK,IAAG,GAAA,EAAI,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,CAAA;AAAA,4BACrCA,GAAAA,CAAC,MAAA,EAAA,EAAK,EAAA,EAAG,IAAA,EAAK,IAAG,IAAA,EAAK,EAAA,EAAG,OAAA,EAAQ,EAAA,EAAG,IAAA,EAAK;AAAA;AAAA;AAAA,OAC3C;AAAA,MACC,KAAA,CAAM;AAAA,KAAA,EACT;AAAA,GAAA,EAEJ,CAAA;AAEJ,CAAA;ACxDO,IAAM,gBAA8C,CAAC;AAAA,EAC1D,IAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,UAAA,GAAA,CAAa,qCAAW,eAAA,CAAA,KAAoB,CAAA;AAClD,EAAA,MAAM,SAAS,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAW,WAAA,CAAA;AAE1B,EAAA,MAAM,cAAc,MAAM;AAExB,IAAA,IAAI,MAAA,CAAO,SAAS,OAAA,EAAS;AAC3B,MAAA,uBAAOA,GAAAA,CAAC,kBAAA,EAAA,EAAmB,IAAA,EAAY,QAAgB,UAAA,EAAwB,CAAA;AAAA,IACjF;AAGA,IAAA,IAAI,MAAA,CAAO,SAAS,SAAA,EAAW;AAC7B,MAAA,uBAAOA,GAAAA,CAAC,aAAA,EAAA,EAAc,IAAA,EAAY,QAAgB,UAAA,EAAwB,CAAA;AAAA,IAC5E;AAGA,IAAA,IAAI,OAAO,IAAA,EAAM;AACf,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,uBAAOA,GAAAA,CAAC,UAAA,EAAA,EAAW,IAAA,EAAY,QAAgB,UAAA,EAAwB,CAAA;AAAA,MACzE;AACA,MAAA,uBAAOA,GAAAA,CAAC,WAAA,EAAA,EAAY,IAAA,EAAY,QAAgB,UAAA,EAAwB,CAAA;AAAA,IAC1E;AAGA,IAAA,IAAI,MAAA,CAAO,SAAS,QAAA,EAAU;AAC5B,MAAA,IAAI,MAAA,CAAO,WAAW,UAAA,EAAY;AAChC,QAAA,uBAAOA,GAAAA,CAAC,SAAA,EAAA,EAAU,IAAA,EAAY,QAAgB,UAAA,EAAwB,CAAA;AAAA,MACxE;AACA,MAAA,IAAI,MAAA,CAAO,WAAW,UAAA,EAAY;AAChC,QAAA,uBAAOA,GAAAA,CAAC,aAAA,EAAA,EAAc,IAAA,EAAY,QAAgB,UAAA,EAAwB,CAAA;AAAA,MAC5E;AACA,MAAA,IAAI,MAAA,CAAO,WAAW,WAAA,EAAa;AACjC,QAAA,uBAAOA,GAAAA,CAAC,aAAA,EAAA,EAAc,IAAA,EAAY,QAAgB,UAAA,EAAwB,CAAA;AAAA,MAC5E;AACA,MAAA,uBAAOA,GAAAA,CAAC,SAAA,EAAA,EAAU,IAAA,EAAY,QAAgB,UAAA,EAAwB,CAAA;AAAA,IACxE;AAGA,IAAA,IAAI,MAAA,CAAO,IAAA,KAAS,QAAA,IAAY,MAAA,CAAO,SAAS,SAAA,EAAW;AACzD,MAAA,uBAAOA,GAAAA,CAAC,WAAA,EAAA,EAAY,IAAA,EAAY,QAAgB,UAAA,EAAwB,CAAA;AAAA,IAC1E;AAGA,IAAA,uBACEA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mBACb,QAAA,kBAAAD,IAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,mBAAA,EAAoB,QAAA,EAAA;AAAA,MAAA,0BAAA;AAAA,MAAyB,MAAA,CAAO;AAAA,KAAA,EAAK,CAAA,EACxE,CAAA;AAAA,EAEJ,CAAA;AAEA,EAAA,uBACEC,GAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,UAAA,EAAY,CAAA,KAAA,EAAQ,UAAU,CAAA,QAAA,EAAW,UAAU,CAAA,CAAA,EAAG,EAAI,uBAAY,EAAE,CAAA;AAE1F;ACtDO,IAAM,aAAwC,CAAC;AAAA,EACpD,MAAA;AAAA,EACA,WAAW,EAAC;AAAA,EACZ,QAAA;AAAA,EACA,aAAA;AAAA,EACA,OAAA,GAAU,CAAA;AAAA,EACV;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,UAAU,OAAA,CAAQ;AAAA,IACtB,QAAA,EAAU,YAAY,MAAA,EAAe;AAAA,MACnC,OAAA,EAAS;AAAA,QACP,WAAA,EAAa,IAAA;AAAA,QACb,QAAA,EAAU,IAAA;AAAA,QACV,UAAA,EAAY,IAAA;AAAA,QACZ,KAAA,EAAO;AAAA;AACT,KACD,CAAA;AAAA,IACD;AAAA,GACD,CAAA;AAED,EAAA,IAAI,MAAA,CAAO,IAAA,KAAS,QAAA,IAAY,CAAC,OAAO,UAAA,EAAY;AAClD,IAAA,uBAAOA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBAAoB,QAAA,EAAA,gDAAA,EAA8C,CAAA;AAAA,EAC1F;AAEA,EAAA,MAAM,cAAc,KAAA,GACf;AAAA,IACC,iBAAiB,KAAA,CAAM,OAAA;AAAA,IACvB,YAAY,KAAA,CAAM,UAAA;AAAA,IAClB,cAAc,KAAA,CAAM,IAAA;AAAA,IACpB,eAAe,KAAA,CAAM,KAAA;AAAA,IACrB,iBAAiB,KAAA,CAAM,OAAA;AAAA,IACvB,gBAAgB,KAAA,CAAM;AAAA,MAExB,EAAC;AAEL,EAAA,uBACED,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAA,EAAqB,OAAO,WAAA,EACxC,QAAA,EAAA;AAAA,IAAA,MAAA,CAAO,yBAASC,GAAAA,CAAC,QAAG,SAAA,EAAU,gBAAA,EAAkB,iBAAO,KAAA,EAAM,CAAA;AAAA,IAC7D,MAAA,CAAO,WAAA,oBACNA,GAAAA,CAAC,GAAA,EAAA,EAAE,KAAA,EAAO,EAAE,KAAA,EAAO,uBAAA,EAAyB,YAAA,EAAc,QAAA,EAAS,EAChE,iBAAO,WAAA,EACV,CAAA;AAAA,oBAGFA,GAAAA,CAAC,YAAA,EAAA,EAAc,GAAG,SAChB,QAAA,kBAAAD,IAAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAU,OAAA,CAAQ,YAAA,CAAa,QAAQ,CAAA,EAAG,YAAU,IAAA,EACxD,QAAA,EAAA;AAAA,sBAAAC,IAAC,KAAA,EAAA,EAAI,SAAA,EAAW,CAAA,cAAA,EAAiB,OAAO,IACrC,QAAA,EAAA,MAAA,CAAO,OAAA,CAAQ,MAAA,CAAO,UAAU,EAAE,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,UAAU,CAAA,KAAG;AAtEvE,QAAA,IAAA,EAAA;AAuEc,QAAA,uBAAAA,GAAAA;AAAA,UAAC,aAAA;AAAA,UAAA;AAAA,YAEC,IAAA,EAAM,GAAA;AAAA,YACN,MAAA,EAAQ,UAAA;AAAA,YACR,QAAA,EAAU,SAAS,GAAG,CAAA;AAAA,YACtB,UAAA,EAAA,CAAY,EAAA,GAAA,MAAA,CAAO,QAAA,KAAP,IAAA,GAAA,MAAA,GAAA,EAAA,CAAiB,QAAA,CAAS,GAAA;AAAA,WAAA;AAAA,UAJjC;AAAA,SAKP;AAAA,MAAA,CACD,CAAA,EACH,CAAA;AAAA,sBACAA,GAAAA,CAAC,QAAA,EAAA,EAAO,MAAK,QAAA,EAAS,SAAA,EAAU,kBAAiB,QAAA,EAAA,QAAA,EAEjD;AAAA,KAAA,EACF,CAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ","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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "config-driven-form",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "description": "",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",