@syncfusion/ej2-react-form-renderer 0.1.0-beta

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/README.md +148 -0
  2. package/index.d.ts +6 -0
  3. package/index.js +6 -0
  4. package/license +13 -0
  5. package/package.json +49 -0
  6. package/src/CheckboxGroup.d.ts +12 -0
  7. package/src/CheckboxGroup.js +48 -0
  8. package/src/CustomTabComponent.d.ts +13 -0
  9. package/src/CustomTabComponent.js +35 -0
  10. package/src/DataGridComponent.d.ts +29 -0
  11. package/src/DataGridComponent.js +160 -0
  12. package/src/FormRenderer.d.ts +63 -0
  13. package/src/FormRenderer.js +567 -0
  14. package/src/FormValidator.d.ts +479 -0
  15. package/src/FormValidator.js +579 -0
  16. package/src/StaticHtmlRenderer.d.ts +8 -0
  17. package/src/StaticHtmlRenderer.js +21 -0
  18. package/src/index.d.ts +6 -0
  19. package/src/index.js +6 -0
  20. package/src/json-converter.d.ts +170 -0
  21. package/src/json-converter.js +1180 -0
  22. package/src/parser.d.ts +99 -0
  23. package/src/parser.js +749 -0
  24. package/src/renderFormField.d.ts +19 -0
  25. package/src/renderFormField.js +202 -0
  26. package/src/types/FormSchema.d.ts +177 -0
  27. package/src/types/FormSchema.js +1 -0
  28. package/src/utils.js +60 -0
  29. package/styles/bootstrap-dark.css +26 -0
  30. package/styles/bootstrap.css +26 -0
  31. package/styles/bootstrap4.css +26 -0
  32. package/styles/bootstrap5-dark.css +26 -0
  33. package/styles/bootstrap5.3-dark.css +26 -0
  34. package/styles/bootstrap5.3.css +26 -0
  35. package/styles/bootstrap5.css +26 -0
  36. package/styles/fluent-dark.css +26 -0
  37. package/styles/fluent.css +26 -0
  38. package/styles/fluent2-dark.css +26 -0
  39. package/styles/fluent2.css +26 -0
  40. package/styles/form-renderer.base.css +473 -0
  41. package/styles/material-dark.css +26 -0
  42. package/styles/material.css +26 -0
  43. package/styles/material3-dark.css +26 -0
  44. package/styles/material3.css +26 -0
  45. package/styles/tailwind-dark.css +26 -0
  46. package/styles/tailwind.css +26 -0
  47. package/styles/tailwind3-dark.css +10 -0
  48. package/styles/tailwind3.css +26 -0
@@ -0,0 +1,26 @@
1
+ @import '@syncfusion/ej2-base/styles/bootstrap5.css';
2
+ @import '@syncfusion/ej2-buttons/styles/bootstrap5.css';
3
+ @import '@syncfusion/ej2-inputs/styles/bootstrap5.css';
4
+ @import '@syncfusion/ej2-dropdowns/styles/bootstrap5.css';
5
+ @import '@syncfusion/ej2-calendars/styles/bootstrap5.css';
6
+ @import '@syncfusion/ej2-react-calendars/styles/bootstrap5.css';
7
+ @import '@syncfusion/ej2-navigations/styles/bootstrap5.css';
8
+ @import '@syncfusion/ej2-notifications/styles/bootstrap5.css';
9
+ @import '@syncfusion/ej2-popups/styles/bootstrap5.css';
10
+ @import '@syncfusion/ej2-lists/styles/bootstrap5.css';
11
+ @import '@syncfusion/ej2-splitbuttons/styles/bootstrap5.css';
12
+ @import "@syncfusion/ej2-react-popups/styles/bootstrap5.css";
13
+ @import "@syncfusion/ej2-react-grids/styles/bootstrap5.css";
14
+ @import "@syncfusion/ej2-splitbuttons/styles/bootstrap5.css";
15
+ @import "@syncfusion/ej2-image-editor/styles/bootstrap5.css";
16
+ @import "@syncfusion/ej2-layouts/styles/bootstrap5.css";
17
+ @import '@syncfusion/ej2-richtexteditor/styles/bootstrap5.css';
18
+ @import 'form-renderer.base.css';
19
+
20
+ :root {
21
+ --sf-bg-color: #fff;
22
+ --sf-font-family: system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', 'Liberation Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
23
+ --sf-text-color: #212529;
24
+ --sf-tooltip-text-color: #6c757d;
25
+ --sf-layout-border-color: #dee2e6;
26
+ }
@@ -0,0 +1,26 @@
1
+ @import '@syncfusion/ej2-base/styles/fluent-dark.css';
2
+ @import '@syncfusion/ej2-buttons/styles/fluent-dark.css';
3
+ @import '@syncfusion/ej2-inputs/styles/fluent-dark.css';
4
+ @import '@syncfusion/ej2-dropdowns/styles/fluent-dark.css';
5
+ @import '@syncfusion/ej2-calendars/styles/fluent-dark.css';
6
+ @import '@syncfusion/ej2-react-calendars/styles/fluent-dark.css';
7
+ @import '@syncfusion/ej2-navigations/styles/fluent-dark.css';
8
+ @import '@syncfusion/ej2-notifications/styles/fluent-dark.css';
9
+ @import '@syncfusion/ej2-popups/styles/fluent-dark.css';
10
+ @import '@syncfusion/ej2-lists/styles/fluent-dark.css';
11
+ @import '@syncfusion/ej2-splitbuttons/styles/fluent-dark.css';
12
+ @import "@syncfusion/ej2-react-popups/styles/fluent-dark.css";
13
+ @import "@syncfusion/ej2-react-grids/styles/fluent-dark.css";
14
+ @import "@syncfusion/ej2-splitbuttons/styles/fluent-dark.css";
15
+ @import "@syncfusion/ej2-image-editor/styles/fluent-dark.css";
16
+ @import "@syncfusion/ej2-layouts/styles/fluent-dark.css";
17
+ @import '@syncfusion/ej2-richtexteditor/styles/fluent-dark.css';
18
+ @import 'form-renderer.base.css';
19
+
20
+ :root {
21
+ --sf-bg-color: #1b1a19;
22
+ --sf-font-family: 'Segoe UI', -apple-system, BlinkMacSystemFont, 'Roboto', 'Helvetica Neue', sans-serif;
23
+ --sf-text-color: #f3f2f1;
24
+ --sf-tooltip-text-color: #a19f9d;
25
+ --sf-layout-border-color: #292827;
26
+ }
@@ -0,0 +1,26 @@
1
+ @import '@syncfusion/ej2-base/styles/fluent.css';
2
+ @import '@syncfusion/ej2-buttons/styles/fluent.css';
3
+ @import '@syncfusion/ej2-inputs/styles/fluent.css';
4
+ @import '@syncfusion/ej2-dropdowns/styles/fluent.css';
5
+ @import '@syncfusion/ej2-calendars/styles/fluent.css';
6
+ @import '@syncfusion/ej2-react-calendars/styles/fluent.css';
7
+ @import '@syncfusion/ej2-navigations/styles/fluent.css';
8
+ @import '@syncfusion/ej2-notifications/styles/fluent.css';
9
+ @import '@syncfusion/ej2-popups/styles/fluent.css';
10
+ @import '@syncfusion/ej2-lists/styles/fluent.css';
11
+ @import '@syncfusion/ej2-splitbuttons/styles/fluent.css';
12
+ @import "@syncfusion/ej2-react-popups/styles/fluent.css";
13
+ @import "@syncfusion/ej2-react-grids/styles/fluent.css";
14
+ @import "@syncfusion/ej2-splitbuttons/styles/fluent.css";
15
+ @import "@syncfusion/ej2-image-editor/styles/fluent.css";
16
+ @import "@syncfusion/ej2-layouts/styles/fluent.css";
17
+ @import '@syncfusion/ej2-richtexteditor/styles/fluent.css';
18
+ @import 'form-renderer.base.css';
19
+
20
+ :root {
21
+ --sf-bg-color: #fff;
22
+ --sf-font-family: 'Segoe UI', -apple-system, BlinkMacSystemFont, 'Roboto', 'Helvetica Neue', sans-serif;
23
+ --sf-text-color: #201f1e;
24
+ --sf-tooltip-text-color: #605e5c;
25
+ --sf-layout-border-color: #edebe9;
26
+ }
@@ -0,0 +1,26 @@
1
+ @import '@syncfusion/ej2-base/styles/fluent2.css';
2
+ @import '@syncfusion/ej2-buttons/styles/fluent2.css';
3
+ @import '@syncfusion/ej2-inputs/styles/fluent2.css';
4
+ @import '@syncfusion/ej2-dropdowns/styles/fluent2.css';
5
+ @import '@syncfusion/ej2-calendars/styles/fluent2.css';
6
+ @import '@syncfusion/ej2-react-calendars/styles/fluent2.css';
7
+ @import '@syncfusion/ej2-navigations/styles/fluent2.css';
8
+ @import '@syncfusion/ej2-notifications/styles/fluent2.css';
9
+ @import '@syncfusion/ej2-popups/styles/fluent2.css';
10
+ @import '@syncfusion/ej2-lists/styles/fluent2.css';
11
+ @import '@syncfusion/ej2-splitbuttons/styles/fluent2.css';
12
+ @import "@syncfusion/ej2-react-popups/styles/fluent2.css";
13
+ @import "@syncfusion/ej2-react-grids/styles/fluent2.css";
14
+ @import "@syncfusion/ej2-splitbuttons/styles/fluent2.css";
15
+ @import "@syncfusion/ej2-image-editor/styles/fluent2.css";
16
+ @import "@syncfusion/ej2-layouts/styles/fluent2.css";
17
+ @import '@syncfusion/ej2-richtexteditor/styles/fluent2.css';
18
+ @import 'form-renderer.base.css';
19
+
20
+ :root {
21
+ --sf-bg-color: #1f1f1f;
22
+ --sf-font-family: 'Segoe UI', -apple-system, BlinkMacSystemFont, 'Roboto', 'Helvetica Neue', sans-serif;
23
+ --sf-text-color: #fff;
24
+ --sf-tooltip-text-color: #d6d6d6;
25
+ --sf-layout-border-color: #525252;
26
+ }
@@ -0,0 +1,26 @@
1
+ @import '@syncfusion/ej2-base/styles/fluent2.css';
2
+ @import '@syncfusion/ej2-buttons/styles/fluent2.css';
3
+ @import '@syncfusion/ej2-inputs/styles/fluent2.css';
4
+ @import '@syncfusion/ej2-dropdowns/styles/fluent2.css';
5
+ @import '@syncfusion/ej2-calendars/styles/fluent2.css';
6
+ @import '@syncfusion/ej2-react-calendars/styles/fluent2.css';
7
+ @import '@syncfusion/ej2-navigations/styles/fluent2.css';
8
+ @import '@syncfusion/ej2-notifications/styles/fluent2.css';
9
+ @import '@syncfusion/ej2-popups/styles/fluent2.css';
10
+ @import '@syncfusion/ej2-lists/styles/fluent2.css';
11
+ @import '@syncfusion/ej2-splitbuttons/styles/fluent2.css';
12
+ @import "@syncfusion/ej2-react-popups/styles/fluent2.css";
13
+ @import "@syncfusion/ej2-react-grids/styles/fluent2.css";
14
+ @import "@syncfusion/ej2-splitbuttons/styles/fluent2.css";
15
+ @import "@syncfusion/ej2-image-editor/styles/fluent2.css";
16
+ @import "@syncfusion/ej2-layouts/styles/fluent2.css";
17
+ @import '@syncfusion/ej2-richtexteditor/styles/fluent2.css';
18
+ @import 'form-renderer.base.css';
19
+
20
+ :root {
21
+ --sf-bg-color: #fafafa;
22
+ --sf-font-family: 'Segoe UI', -apple-system, BlinkMacSystemFont, 'Roboto', 'Helvetica Neue', sans-serif;
23
+ --sf-text-color: #242424;
24
+ --sf-tooltip-text-color: #424242;
25
+ --sf-layout-border-color: #e0e0e0;
26
+ }
@@ -0,0 +1,473 @@
1
+ /**
2
+ * Form Renderer Styles
3
+ * Clean production-ready styles without drag/drop UI elements
4
+ */
5
+
6
+ /* Form Container */
7
+ .form-renderer-container {
8
+ padding: 2rem;
9
+ background-color: var(--sf-bg-color);
10
+ }
11
+
12
+ /* Form */
13
+ .form-renderer {
14
+ display: flex;
15
+ flex-direction: column;
16
+ gap: 1.5rem;
17
+ }
18
+
19
+ /* ============================================================
20
+ TEMPLATE-BASED LAYOUT SYSTEM
21
+ Only applies when UI schema is NOT provided (auto-generated)
22
+ ============================================================ */
23
+
24
+ /* Two-Column Layout */
25
+ .form-renderer.twolayout {
26
+ display: grid;
27
+ grid-template-columns: repeat(2, 1fr);
28
+ gap: 1.5rem;
29
+ }
30
+
31
+ /* Three-Column Layout */
32
+ .form-renderer.threelayout {
33
+ display: grid;
34
+ grid-template-columns: repeat(3, 1fr);
35
+ gap: 1.5rem;
36
+ }
37
+
38
+ /* Four-Column Layout */
39
+ .form-renderer.fourlayout {
40
+ display: grid;
41
+ grid-template-columns: repeat(4, 1fr);
42
+ gap: 1.5rem;
43
+ }
44
+
45
+ .form-renderer.twolayout > .form-group:has(.e-btn),
46
+ .form-renderer.threelayout > .form-group:has(.e-btn),
47
+ .form-renderer.fourlayout > .form-group:has(.e-btn) {
48
+ align-self: flex-end;
49
+ }
50
+
51
+ .form-renderer.twolayout > .form-group:has(.e-message),
52
+ .form-renderer.threelayout > .form-group:has(.e-message),
53
+ .form-renderer.fourlayout > .form-group:has(.e-message) {
54
+ align-self: flex-end;
55
+ }
56
+
57
+ .form-renderer.twolayout > .form-group:has(.e-checkbox),
58
+ .form-renderer.threelayout > .form-group:has(.e-checkbox),
59
+ .form-renderer.fourlayout > .form-group:has(.e-checkbox) {
60
+ align-self: flex-end;
61
+ }
62
+
63
+ .form-renderer.twolayout > .form-group:has(.e-switch),
64
+ .form-renderer.threelayout > .form-group:has(.e-switch),
65
+ .form-renderer.fourlayout > .form-group:has(.e-switch) {
66
+ align-self: flex-end;
67
+ }
68
+
69
+ /* Submit/Reset buttons handling:
70
+ - If they're at the end, display side by side
71
+ - If not at the end, display normally
72
+ */
73
+ /* When submit button is the only button at the end */
74
+ .form-renderer.twolayout > .form-group:last-child:has(.form-submit-type):not(:has(.form-reset-type)),
75
+ .form-renderer.threelayout > .form-group:last-child:has(.form-submit-type):not(:has(.form-reset-type)),
76
+ .form-renderer.fourlayout > .form-group:last-child:has(.form-submit-type):not(:has(.form-reset-type)) {
77
+ grid-column: 1 / -1;
78
+ }
79
+
80
+ /* When both reset and submit are the last two children, display them in adjacent cells side by side */
81
+ .form-renderer.twolayout > .form-group:nth-last-child(2):has(.form-reset-type),
82
+ .form-renderer.twolayout > .form-group:nth-last-child(2):has(.form-reset-type) ~ .form-group:last-child:has(.form-submit-type),
83
+ .form-renderer.threelayout > .form-group:nth-last-child(2):has(.form-reset-type),
84
+ .form-renderer.threelayout > .form-group:nth-last-child(2):has(.form-reset-type) ~ .form-group:last-child:has(.form-submit-type),
85
+ .form-renderer.fourlayout > .form-group:nth-last-child(2):has(.form-reset-type),
86
+ .form-renderer.fourlayout > .form-group:nth-last-child(2):has(.form-reset-type) ~ .form-group:last-child:has(.form-submit-type) {
87
+ grid-column: auto;
88
+ }
89
+
90
+ /* Responsive: Collapse to fewer columns on tablets */
91
+ @media (max-width: 1024px) {
92
+ .form-renderer.fourlayout {
93
+ grid-template-columns: repeat(2, 1fr);
94
+ }
95
+
96
+ .form-renderer.threelayout {
97
+ grid-template-columns: repeat(2, 1fr);
98
+ }
99
+ }
100
+
101
+ /* Responsive: Single column on mobile */
102
+ @media (max-width: 768px) {
103
+ .form-renderer.twolayout,
104
+ .form-renderer.threelayout,
105
+ .form-renderer.fourlayout {
106
+ grid-template-columns: 1fr;
107
+ }
108
+ }
109
+
110
+ /* Form Group */
111
+ .form-group {
112
+ display: flex;
113
+ flex-direction: column;
114
+ gap: 0.5rem;
115
+ }
116
+
117
+ /* Field Wrapper */
118
+ .field-wrapper {
119
+ display: flex;
120
+ width: 100%;
121
+ }
122
+
123
+ .field-wrapper.label-top {
124
+ flex-direction: column;
125
+ gap: 0.5rem;
126
+ }
127
+
128
+ .field-wrapper.label-bottom {
129
+ flex-direction: column-reverse;
130
+ gap: 0.5rem;
131
+ }
132
+
133
+ .field-wrapper.label-left {
134
+ flex-direction: row;
135
+ align-items: center;
136
+ gap: 1rem;
137
+ }
138
+
139
+ .field-wrapper.label-right {
140
+ flex-direction: row-reverse;
141
+ align-items: center;
142
+ gap: 1rem;
143
+ justify-content: flex-end;
144
+ }
145
+
146
+ /* Input grows in left/right label layouts */
147
+ .field-wrapper.label-left .field-input,
148
+ .field-wrapper.label-right .field-input {
149
+ flex: 1;
150
+ min-width: 0;
151
+ }
152
+
153
+ /* Label */
154
+ .field-label {
155
+ font-size: 0.875rem;
156
+ font-weight: 500;
157
+ color: var(--sf-text-color);
158
+ margin: 0;
159
+ display: flex;
160
+ align-items: center;
161
+ gap: 4px;
162
+ flex-shrink: 0;
163
+ font-family: var(--sf-font-family);
164
+ }
165
+
166
+ .field-label .required-asterisk {
167
+ color: #ef4444;
168
+ margin-left: 2px;
169
+ }
170
+
171
+ .field-label .tooltip-icon {
172
+ cursor: help;
173
+ color: var(--sf-tooltip-text-color);
174
+ font-size: 0.875rem;
175
+ }
176
+
177
+ /* Input Field */
178
+ .field-input {
179
+ width: 100%;
180
+ }
181
+
182
+ .field-input .e-image-editor {
183
+ min-height: 250px;
184
+ }
185
+
186
+ .field-input .e-switch-wrapper,
187
+ .field-input .e-checkbox-wrapper {
188
+ margin: 5px 0;
189
+ }
190
+
191
+ /* Error Message */
192
+ .field-error {
193
+ color: #ef4444;
194
+ font-size: 0.75rem;
195
+ margin-top: 0.25rem;
196
+ display: block;
197
+ }
198
+
199
+ /* Radio Button Group */
200
+ .e-radio-group {
201
+ display: flex;
202
+ flex-direction: column;
203
+ }
204
+
205
+ .e-radio-group .e-radio + label {
206
+ margin-left: 0.5rem;
207
+ }
208
+
209
+ /* Layout Components - Clean Styles */
210
+
211
+ /* Panel (Fieldset) */
212
+ .form-panel-renderer {
213
+ border: none;
214
+ border-radius: 8px;
215
+ padding: 0;
216
+ margin: 1rem 0;
217
+ }
218
+
219
+ .form-panel-renderer:has(.panel-legend) {
220
+ border: 1px solid var(--sf-layout-border-color);
221
+ padding: 1.5rem;
222
+ font-family: var(--sf-font-family)
223
+ }
224
+
225
+ .form-panel-renderer legend {
226
+ font-size: 1.5rem;
227
+ font-weight: 600;
228
+ padding-bottom: 1.5rem;
229
+ }
230
+
231
+ .form-panel-renderer .panel-legend {
232
+ font-size: 1.5rem;
233
+ font-weight: 600;
234
+ padding: 0 0.5rem;
235
+ }
236
+
237
+
238
+ .panel-content {
239
+ display: flex;
240
+ flex-direction: column;
241
+ gap: 1rem;
242
+ width: 100%;
243
+ }
244
+
245
+ .card-content {
246
+ display: flex;
247
+ flex-direction: column;
248
+ gap: 1rem;
249
+ }
250
+
251
+ /* Table Layout */
252
+ .form-table-renderer {
253
+ width: 100%;
254
+ border-radius: 8px;
255
+ overflow: hidden;
256
+ }
257
+
258
+ .form-table-renderer.table-border {
259
+ border: 1px solid var(--sf-layout-border-color);
260
+ }
261
+
262
+ .form-table-renderer {
263
+ display: table;
264
+ width: 100%;
265
+ border-collapse: separate;
266
+ border-spacing: 0px;
267
+ overflow-x: auto;
268
+ overflow-y: hidden;
269
+ }
270
+
271
+ .form-table-renderer .table-row {
272
+ display: table-row;
273
+ background: transparent;
274
+ }
275
+
276
+ .form-table-renderer .table-cell {
277
+ display: table-cell;
278
+ padding: 12px;
279
+ vertical-align: top;
280
+ }
281
+
282
+ .table-border .table-cell {
283
+ border-bottom: 1px solid var(--sf-layout-border-color);
284
+ border-right: 1px solid var(--sf-layout-border-color);
285
+ }
286
+
287
+ .table-cell:last-child {
288
+ border-right: none;
289
+ }
290
+
291
+ .form-table-renderer .table-row:last-child .table-cell {
292
+ border-bottom: none;
293
+ }
294
+
295
+ .table-cell > .form-table-renderer,
296
+ .table-cell > .form-tabs-renderer,
297
+ .table-cell > .form-card-renderer,
298
+ .table-cell > .form-panel-renderer,
299
+ .table-cell > .form-group
300
+ {
301
+ margin-bottom: 0.5rem;
302
+ }
303
+
304
+
305
+ .table-cell > .form-table-renderer:last-child,
306
+ .table-cell > .form-tabs-renderer:last-child,
307
+ .table-cell > .form-card-renderer:last-child,
308
+ .table-cell > .form-panel-renderer:last-child,
309
+ .table-cell > .form-group:last-child
310
+ {
311
+ margin-bottom: 0;
312
+ }
313
+
314
+
315
+ /* Column helper classes (col, col-1..col-12) — copied from preview styles
316
+ Scoped under .form-table-renderer so renderer respects `col-{n}` classes
317
+ without changing the renderer's flex-based layout. These only set widths.
318
+ */
319
+ .form-table-renderer .col,
320
+ .form-table-renderer [class^="col-"] {
321
+ min-height: 100%;
322
+ vertical-align: top;
323
+ }
324
+
325
+ .form-table-renderer .col { width: auto; }
326
+ .form-table-renderer .col-1 { width: 8.33333333%; }
327
+ .form-table-renderer .col-2 { width: 16.66666667%; }
328
+ .form-table-renderer .col-3 { width: 25%; }
329
+ .form-table-renderer .col-4 { width: 33.33333333%; }
330
+ .form-table-renderer .col-5 { width: 41.66666667%; }
331
+ .form-table-renderer .col-6 { width: 50%; }
332
+ .form-table-renderer .col-7 { width: 58.33333333%; }
333
+ .form-table-renderer .col-8 { width: 66.66666667%; }
334
+ .form-table-renderer .col-9 { width: 75%; }
335
+ .form-table-renderer .col-10 { width: 83.33333333%; }
336
+ .form-table-renderer .col-11 { width: 91.66666667%; }
337
+ .form-table-renderer .col-12 { width: auto; }
338
+
339
+ /* Tabs Layout */
340
+ .form-tabs-renderer {
341
+ width: 100%;
342
+ }
343
+
344
+ .tab-content-renderer {
345
+ display: flex;
346
+ flex-direction: column;
347
+ gap: 1rem;
348
+ }
349
+
350
+ /* Submit Button */
351
+ .form-submit-button {
352
+ margin-top: 1.5rem;
353
+ align-self: flex-start;
354
+ }
355
+
356
+ /* Syncfusion Component Overrides */
357
+ .field-input .e-input-group,
358
+ .field-input .e-control-wrapper {
359
+ width: 100%;
360
+ }
361
+
362
+ .field-input .e-float-input {
363
+ width: 100%;
364
+ }
365
+
366
+ /* Unsupported Component */
367
+ .unsupported-component {
368
+ padding: 1rem;
369
+ background-color: #fff3cd;
370
+ border: 1px solid #ffc107;
371
+ border-radius: 4px;
372
+ color: #856404;
373
+ font-size: 0.875rem;
374
+ }
375
+
376
+ /* Dark Mode Support */
377
+ [data-theme="dark"] .form-renderer-container {
378
+ background-color: #1e1e1e;
379
+ }
380
+
381
+ [data-theme="dark"] .field-label {
382
+ color: #e0e0e0;
383
+ }
384
+
385
+ [data-theme="dark"] .form-panel-renderer,
386
+ [data-theme="dark"] .form-table-renderer {
387
+ border-color: #3d3d3d;
388
+ }
389
+
390
+ [data-theme="dark"] .table-row {
391
+ border-color: #3d3d3d;
392
+ }
393
+
394
+ [data-theme="dark"] .table-cell {
395
+ border-color: #3d3d3d;
396
+ }
397
+
398
+ .e-tooltip .e-msg-icon::before {
399
+ content: "\e800";
400
+ font-family: "e-icons";
401
+ color: var(--color-sf-msg-icon-color);
402
+ font-size: 16px;
403
+ height: 16px;
404
+ margin: 3px 4px;
405
+ display: flex;
406
+ line-height: 16px;
407
+ }
408
+
409
+ .e-card .e-card-content {
410
+ padding: 12px 18px 12px 18px;
411
+ }
412
+
413
+ /* Responsive */
414
+ @media (max-width: 768px) {
415
+ .form-renderer-container {
416
+ padding: 1rem;
417
+ }
418
+
419
+ .field-wrapper.label-left,
420
+ .field-wrapper.label-right {
421
+ flex-direction: column;
422
+ align-items: stretch;
423
+ }
424
+
425
+ .field-wrapper.label-left .field-input,
426
+ .field-wrapper.label-right .field-input {
427
+ width: 100%;
428
+ }
429
+
430
+ /* Convert table layout to flex layout for mobile */
431
+ .form-table-renderer .table-grid {
432
+ display: flex;
433
+ flex-direction: column;
434
+ border-spacing: 0;
435
+ gap: 0.75rem;
436
+ }
437
+
438
+ .form-table-renderer .row {
439
+ display: flex;
440
+ flex-wrap: wrap;
441
+ gap: 0.75rem;
442
+ width: 100%;
443
+ }
444
+
445
+ .form-table-renderer .table-cell {
446
+ display: block;
447
+ flex: 1 1 auto;
448
+ min-width: 250px; /* minimum width before wrapping to next row */
449
+ padding: 12px;
450
+ }
451
+
452
+ /* Override column width classes on mobile - let content flow naturally */
453
+ .form-table-renderer .col,
454
+ .form-table-renderer [class^="col-"] {
455
+ width: auto !important;
456
+ min-width: 250px;
457
+ flex: 1 1 auto;
458
+ }
459
+
460
+ .table-border .table-cell {
461
+ border-right: none;
462
+ border-bottom: 1px solid var(--sf-layout-border-color);
463
+ border-radius: 4px;
464
+ }
465
+
466
+ .form-table-renderer .table-cell:last-child {
467
+ border-bottom: 1px solid var(--sf-layout-border-color);
468
+ }
469
+
470
+ .form-table-renderer .row:last-child .table-cell {
471
+ border-bottom: none;
472
+ }
473
+ }
@@ -0,0 +1,26 @@
1
+ @import '@syncfusion/ej2-base/styles/material-dark.css';
2
+ @import '@syncfusion/ej2-buttons/styles/material-dark.css';
3
+ @import '@syncfusion/ej2-inputs/styles/material-dark.css';
4
+ @import '@syncfusion/ej2-dropdowns/styles/material-dark.css';
5
+ @import '@syncfusion/ej2-calendars/styles/material-dark.css';
6
+ @import '@syncfusion/ej2-react-calendars/styles/material-dark.css';
7
+ @import '@syncfusion/ej2-navigations/styles/material-dark.css';
8
+ @import '@syncfusion/ej2-notifications/styles/material-dark.css';
9
+ @import '@syncfusion/ej2-popups/styles/material-dark.css';
10
+ @import '@syncfusion/ej2-lists/styles/material-dark.css';
11
+ @import '@syncfusion/ej2-splitbuttons/styles/material-dark.css';
12
+ @import "@syncfusion/ej2-react-popups/styles/material-dark.css";
13
+ @import "@syncfusion/ej2-react-grids/styles/material-dark.css";
14
+ @import "@syncfusion/ej2-splitbuttons/styles/material-dark.css";
15
+ @import "@syncfusion/ej2-image-editor/styles/material-dark.css";
16
+ @import "@syncfusion/ej2-layouts/styles/material-dark.css";
17
+ @import '@syncfusion/ej2-richtexteditor/styles/material-dark.css';
18
+ @import 'form-renderer.base.css';
19
+
20
+ :root {
21
+ --sf-bg-color: #000;
22
+ --sf-font-family: 'Roboto', 'Segoe UI', 'GeezaPro', 'DejaVu Serif', 'sans-serif', '-apple-system', 'BlinkMacSystemFont';
23
+ --sf-text-color: #fff;
24
+ --sf-tooltip-text-color: #fff;
25
+ --sf-layout-border-color: #fff;
26
+ }
@@ -0,0 +1,26 @@
1
+ @import '@syncfusion/ej2-base/styles/material.css';
2
+ @import '@syncfusion/ej2-buttons/styles/material.css';
3
+ @import '@syncfusion/ej2-inputs/styles/material.css';
4
+ @import '@syncfusion/ej2-dropdowns/styles/material.css';
5
+ @import '@syncfusion/ej2-calendars/styles/material.css';
6
+ @import '@syncfusion/ej2-react-calendars/styles/material.css';
7
+ @import '@syncfusion/ej2-navigations/styles/material.css';
8
+ @import '@syncfusion/ej2-notifications/styles/material.css';
9
+ @import '@syncfusion/ej2-popups/styles/material.css';
10
+ @import '@syncfusion/ej2-lists/styles/material.css';
11
+ @import '@syncfusion/ej2-splitbuttons/styles/material.css';
12
+ @import "@syncfusion/ej2-react-popups/styles/material.css";
13
+ @import "@syncfusion/ej2-react-grids/styles/material.css";
14
+ @import "@syncfusion/ej2-splitbuttons/styles/material.css";
15
+ @import "@syncfusion/ej2-image-editor/styles/material.css";
16
+ @import "@syncfusion/ej2-layouts/styles/material.css";
17
+ @import '@syncfusion/ej2-richtexteditor/styles/material.css';
18
+ @import 'form-renderer.base.css';
19
+
20
+ :root {
21
+ --sf-bg-color: #fff;
22
+ --sf-font-family: 'Roboto', 'Segoe UI', 'GeezaPro', 'DejaVu Serif', 'sans-serif', '-apple-system', 'BlinkMacSystemFont';
23
+ --sf-text-color: #000;
24
+ --sf-tooltip-text-color: #000;
25
+ --sf-layout-border-color: #000;
26
+ }
@@ -0,0 +1,26 @@
1
+ @import '@syncfusion/ej2-base/styles/material3-dark.css';
2
+ @import '@syncfusion/ej2-buttons/styles/material3-dark.css';
3
+ @import '@syncfusion/ej2-inputs/styles/material3-dark.css';
4
+ @import '@syncfusion/ej2-dropdowns/styles/material3-dark.css';
5
+ @import '@syncfusion/ej2-calendars/styles/material3-dark.css';
6
+ @import '@syncfusion/ej2-react-calendars/styles/material3-dark.css';
7
+ @import '@syncfusion/ej2-navigations/styles/material3-dark.css';
8
+ @import '@syncfusion/ej2-notifications/styles/material3-dark.css';
9
+ @import '@syncfusion/ej2-popups/styles/material3-dark.css';
10
+ @import '@syncfusion/ej2-lists/styles/material3-dark.css';
11
+ @import '@syncfusion/ej2-splitbuttons/styles/material3-dark.css';
12
+ @import "@syncfusion/ej2-react-popups/styles/material3-dark.css";
13
+ @import "@syncfusion/ej2-react-grids/styles/material3-dark.css";
14
+ @import "@syncfusion/ej2-splitbuttons/styles/material3-dark.css";
15
+ @import "@syncfusion/ej2-image-editor/styles/material3-dark.css";
16
+ @import "@syncfusion/ej2-layouts/styles/material3-dark.css";
17
+ @import '@syncfusion/ej2-richtexteditor/styles/material3-dark.css';
18
+ @import 'form-renderer.base.css';
19
+
20
+ :root {
21
+ --sf-bg-color: rgb(28, 27, 31);
22
+ --sf-font-family: 'Roboto', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Helvetica Neue', sans-serif;
23
+ --sf-text-color: rgb(230, 225, 229);
24
+ --sf-tooltip-text-color: rgb(202, 196, 208);
25
+ --sf-layout-border-color: rgb(68, 71, 70);
26
+ }