@syncfusion/ej2-react-form-builder 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 (145) hide show
  1. package/Common/CheckboxGroup.d.ts +13 -0
  2. package/Common/CheckboxGroup.js +50 -0
  3. package/Common/ConditionalRuleEngine.d.ts +296 -0
  4. package/Common/ConditionalRuleEngine.js +566 -0
  5. package/Common/CustomTabComponent.d.ts +17 -0
  6. package/Common/CustomTabComponent.js +30 -0
  7. package/Common/CustomValidationEngine.d.ts +58 -0
  8. package/Common/CustomValidationEngine.js +146 -0
  9. package/Common/DataGridComponent.d.ts +20 -0
  10. package/Common/DataGridComponent.js +273 -0
  11. package/Common/FormValidator.d.ts +485 -0
  12. package/Common/FormValidator.js +575 -0
  13. package/Common/MinMaxRuleEngine.d.ts +105 -0
  14. package/Common/MinMaxRuleEngine.js +365 -0
  15. package/Common/StaticHtmlRenderer.d.ts +14 -0
  16. package/Common/StaticHtmlRenderer.js +24 -0
  17. package/Common/expressions/DependencyTracker.d.ts +30 -0
  18. package/Common/expressions/DependencyTracker.js +128 -0
  19. package/Common/expressions/ExpressionEngine.d.ts +95 -0
  20. package/Common/expressions/ExpressionEngine.js +506 -0
  21. package/Common/expressions/ExpressionParser.d.ts +41 -0
  22. package/Common/expressions/ExpressionParser.js +269 -0
  23. package/Common/expressions/useGridExpressions.d.ts +12 -0
  24. package/Common/expressions/useGridExpressions.js +71 -0
  25. package/Common/globalFormId.d.ts +26 -0
  26. package/Common/globalFormId.js +45 -0
  27. package/Common/json-converter.d.ts +444 -0
  28. package/Common/json-converter.js +1184 -0
  29. package/Common/parser.d.ts +98 -0
  30. package/Common/parser.js +753 -0
  31. package/Common/utils.d.ts +130 -0
  32. package/Common/utils.js +574 -0
  33. package/README.md +53 -0
  34. package/index.d.ts +6 -0
  35. package/index.js +6 -0
  36. package/license +13 -0
  37. package/package.json +54 -0
  38. package/src/FormBuilder.d.ts +211 -0
  39. package/src/FormBuilder.js +1299 -0
  40. package/src/components/Database/ConnectionForm.d.ts +8 -0
  41. package/src/components/Database/ConnectionForm.js +28 -0
  42. package/src/components/TopBar.d.ts +10 -0
  43. package/src/components/TopBar.js +7 -0
  44. package/src/components/icons/ComponentIcons.d.ts +44 -0
  45. package/src/components/icons/ComponentIcons.js +40 -0
  46. package/src/components/layout/FormFieldWrapper.d.ts +41 -0
  47. package/src/components/layout/FormFieldWrapper.js +112 -0
  48. package/src/components/layout/LeftPane.d.ts +23 -0
  49. package/src/components/layout/LeftPane.js +310 -0
  50. package/src/components/layout/ListBoxPane.d.ts +24 -0
  51. package/src/components/layout/ListBoxPane.js +94 -0
  52. package/src/components/layout/MainSection.d.ts +39 -0
  53. package/src/components/layout/MainSection.js +1766 -0
  54. package/src/components/layout/Preview.d.ts +12 -0
  55. package/src/components/layout/Preview.js +337 -0
  56. package/src/components/layout/RightPane.d.ts +22 -0
  57. package/src/components/layout/RightPane.js +370 -0
  58. package/src/components/theme/ThemeSwitcher.d.ts +14 -0
  59. package/src/components/theme/ThemeSwitcher.js +24 -0
  60. package/src/components/theme/theme-constant.d.ts +37 -0
  61. package/src/components/theme/theme-constant.js +23 -0
  62. package/src/config/component-properties.json +4929 -0
  63. package/src/config/form-setting.json +56 -0
  64. package/src/config/locale.d.ts +449 -0
  65. package/src/config/locale.js +449 -0
  66. package/src/context/FormSchemaContext.d.ts +32 -0
  67. package/src/context/FormSchemaContext.js +155 -0
  68. package/src/context/LocalizationContext.d.ts +27 -0
  69. package/src/context/LocalizationContext.js +43 -0
  70. package/src/context/ThemeContext.d.ts +23 -0
  71. package/src/context/ThemeContext.js +161 -0
  72. package/src/context/contexts.d.ts +6 -0
  73. package/src/context/contexts.js +6 -0
  74. package/src/context/defaultFormSchema.d.ts +6 -0
  75. package/src/context/defaultFormSchema.js +20 -0
  76. package/src/defaultPalette.d.ts +9 -0
  77. package/src/defaultPalette.js +45 -0
  78. package/src/defaultTemplate.d.ts +3 -0
  79. package/src/defaultTemplate.js +185 -0
  80. package/src/import/schemaImportUtils.d.ts +24 -0
  81. package/src/import/schemaImportUtils.js +121 -0
  82. package/src/index.d.ts +16 -0
  83. package/src/index.js +6 -0
  84. package/src/types/ActionButtons.d.ts +44 -0
  85. package/src/types/ActionButtons.js +27 -0
  86. package/src/types/ComponentProperties.d.ts +33 -0
  87. package/src/types/ComponentProperties.js +2 -0
  88. package/src/types/FormSchema.d.ts +585 -0
  89. package/src/types/FormSchema.js +147 -0
  90. package/src/types/connection.d.ts +19 -0
  91. package/src/types/connection.js +9 -0
  92. package/src/utils/AttributesEditor.d.ts +13 -0
  93. package/src/utils/AttributesEditor.js +117 -0
  94. package/src/utils/ButtonGroupEditor.d.ts +15 -0
  95. package/src/utils/ButtonGroupEditor.js +141 -0
  96. package/src/utils/ChoiceBasedFieldEditor.d.ts +16 -0
  97. package/src/utils/ChoiceBasedFieldEditor.js +87 -0
  98. package/src/utils/ClipboardHelper.d.ts +26 -0
  99. package/src/utils/ClipboardHelper.js +83 -0
  100. package/src/utils/ColumnBuilder.d.ts +11 -0
  101. package/src/utils/ColumnBuilder.js +153 -0
  102. package/src/utils/ColumnSpanEditor.d.ts +8 -0
  103. package/src/utils/ColumnSpanEditor.js +98 -0
  104. package/src/utils/ConditionDataEditor.d.ts +29 -0
  105. package/src/utils/ConditionDataEditor.js +177 -0
  106. package/src/utils/ConditionalEditorUtils.d.ts +27 -0
  107. package/src/utils/ConditionalEditorUtils.js +310 -0
  108. package/src/utils/ConditionsEditor.d.ts +20 -0
  109. package/src/utils/ConditionsEditor.js +571 -0
  110. package/src/utils/CustomAccordion.d.ts +13 -0
  111. package/src/utils/CustomAccordion.js +38 -0
  112. package/src/utils/CustomValidationEditor.d.ts +11 -0
  113. package/src/utils/CustomValidationEditor.js +208 -0
  114. package/src/utils/DataSourceCollector.d.ts +3 -0
  115. package/src/utils/DataSourceCollector.js +252 -0
  116. package/src/utils/ExpressionEditor.d.ts +13 -0
  117. package/src/utils/ExpressionEditor.js +99 -0
  118. package/src/utils/FormSettingsPanel.d.ts +9 -0
  119. package/src/utils/FormSettingsPanel.js +60 -0
  120. package/src/utils/LookupConfig.d.ts +11 -0
  121. package/src/utils/LookupConfig.js +159 -0
  122. package/src/utils/MinMaxValueEditor.d.ts +25 -0
  123. package/src/utils/MinMaxValueEditor.js +188 -0
  124. package/src/utils/OptionsEditor.d.ts +8 -0
  125. package/src/utils/OptionsEditor.js +79 -0
  126. package/src/utils/PropertyRenderer.d.ts +22 -0
  127. package/src/utils/PropertyRenderer.js +210 -0
  128. package/src/utils/ValueRenderer.d.ts +2 -0
  129. package/src/utils/ValueRenderer.js +91 -0
  130. package/src/utils/ej2DbAdaptor.d.ts +6 -0
  131. package/src/utils/ej2DbAdaptor.js +38 -0
  132. package/src/utils/mappingHeuristics.d.ts +10 -0
  133. package/src/utils/mappingHeuristics.js +33 -0
  134. package/src/utils/renderComponent.d.ts +18 -0
  135. package/src/utils/renderComponent.js +300 -0
  136. package/styles/tailwind3.css +67 -0
  137. package/styles/themes/action-buttons.css +110 -0
  138. package/styles/themes/datagrid.css +380 -0
  139. package/styles/themes/drag-reorder.css +248 -0
  140. package/styles/themes/import-dialog.css +292 -0
  141. package/styles/themes/index.css +658 -0
  142. package/styles/themes/left-pane.css +253 -0
  143. package/styles/themes/options-editor.css +63 -0
  144. package/styles/themes/preview.css +702 -0
  145. package/styles/themes/property-dialog.css +371 -0
@@ -0,0 +1,380 @@
1
+ /* DataGrid and ColumnBuilder Styles */
2
+
3
+ .column-builder {
4
+ display: flex;
5
+ flex-direction: column;
6
+ gap: 16px;
7
+ }
8
+
9
+ .column-list {
10
+ min-height: 35px;
11
+ display: flex;
12
+ flex-direction: column;
13
+ gap: 12px;
14
+ max-height: 800px;
15
+ scrollbar-width: thin;
16
+ overflow-y: auto;
17
+ }
18
+
19
+ .column-item {
20
+ border: 1px solid var(--sf-color-border, #ddd);
21
+ border-radius: 4px;
22
+ overflow: visible;
23
+ background: var(--sf-color-background, #ffffff);
24
+ flex-shrink: 0;
25
+ }
26
+
27
+ .right-sidebar:has(.right-sidebar-column) .sidebar-header,
28
+ .right-sidebar:has(.right-sidebar-column) .e-tab .e-tab-header {
29
+ display: none !important;
30
+ }
31
+
32
+ .right-sidebar-column {
33
+ top: 0rem !important;
34
+ margin-top: 0 !important;
35
+ transition: transform .5s;
36
+ z-index: 999;
37
+ position: absolute;
38
+ overflow: hidden;
39
+ width: var(--ridesidebar-width);
40
+ min-width: var(--ridesidebar-width);
41
+ border-left: 1px solid rgb(var(--sf-color-line-color));
42
+ height: calc(100dvh - var(--topbar-height) - 3rem);
43
+ padding: 0;
44
+ right: 0;
45
+ background-color: rgb(var(--sf-color-background));
46
+ }
47
+
48
+ .builder-container.e-component .right-sidebar-column {
49
+ height: 100%;
50
+ }
51
+
52
+ .column-details {
53
+ padding: 1rem !important;
54
+ display: flex;
55
+ flex-direction: column;
56
+ height: calc(100dvh - var(--topbar-height) - var(--topbar-height) - 3rem);
57
+ overflow-y: auto;
58
+ gap: 16px;
59
+ background: var(--sf-color-background, #ffffff);
60
+ }
61
+
62
+ .builder-container.e-component .column-details {
63
+ height: calc(100% - var(--topbar-height))
64
+ }
65
+
66
+ .builder-container.e-component .conditions-editor-wrapper .e-dlg-container .e-dlg-overlay {
67
+ background-color: transparent !important;
68
+ }
69
+
70
+ .column-sidebar-header {
71
+ display: flex;
72
+ align-items: center;
73
+ justify-content: space-between;
74
+ min-height: 48px;
75
+ background-color: rgb(var(--sf-color-surface));
76
+ border-bottom: 1px solid rgb(var(--sf-color-line-color));
77
+ padding: 0rem 1.5rem;
78
+ flex-shrink: 0;
79
+ }
80
+
81
+ .column-sidebar-header h3 {
82
+ margin: 0;
83
+ font-size: 0.875rem;
84
+ line-height: 20px;
85
+ color: var(--dashboard-heading-color);
86
+ font-weight: 600;
87
+ font-style: Semi Bold;
88
+ line-height: 20px;
89
+ letter-spacing: 0%;
90
+ }
91
+
92
+ .column-header {
93
+ display: flex;
94
+ justify-content: space-between;
95
+ align-items: center;
96
+ border-radius: 6px;
97
+ padding: 4px 4px 4px 8px;
98
+ background: var(--sf-color-surface, #f5f5f5);
99
+ cursor: pointer;
100
+ border-bottom: 1px solid var(--sf-color-border, #eee);
101
+ user-select: none;
102
+ }
103
+
104
+ .column-header:hover {
105
+ background: var(--sf-color-surface-hover, #efefef);
106
+ }
107
+
108
+ .column-field {
109
+ font-weight: 600;
110
+ font-size: 14px;
111
+ color: var(--sf-color-text, #333);
112
+ overflow: hidden;
113
+ text-overflow: ellipsis;
114
+ white-space: nowrap;
115
+ }
116
+
117
+ .column-header-text {
118
+ font-size: 13px;
119
+ color: var(--sf-color-text-secondary, #666);
120
+ overflow: hidden;
121
+ text-overflow: ellipsis;
122
+ white-space: nowrap;
123
+ }
124
+
125
+ .column-header .delete-btn {
126
+ padding: 4px 8px;
127
+ font-size: 12px;
128
+ border: none;
129
+ border-radius: 3px;
130
+ cursor: pointer;
131
+ flex-shrink: 0;
132
+ transition: background 0.2s;
133
+ }
134
+
135
+ .column-header .delete-btn:hover {
136
+ background: #ff3838;
137
+ }
138
+
139
+ .conditional-column .column-details {
140
+ height: 500px;
141
+ }
142
+
143
+ .no-border-radius {
144
+ border: none;
145
+ border-top-left-radius: 6px !important;
146
+ border-top-right-radius: 6px !important;
147
+ }
148
+
149
+ .column-builder .form-group {
150
+ display: flex;
151
+ flex-direction: column;
152
+ gap: 6px;
153
+ }
154
+
155
+ .column-builder .form-group label {
156
+ font-weight: 500;
157
+ font-size: 13px;
158
+ color: var(--sf-color-text, #333);
159
+ }
160
+
161
+ /* Conditional Data Editor Styles - follows ColumnBuilder pattern */
162
+ .condition-data-editor {
163
+ padding-top: 8px;
164
+ }
165
+
166
+ .condition-data-editor .rule-details {
167
+ padding: 0px;
168
+ }
169
+
170
+ .condition-data-editor .column-list {
171
+ overflow-y: hidden;
172
+ }
173
+
174
+ .rule-item {
175
+ margin-bottom: 12px;
176
+ border: 1px solid rgb(var(--sf-color-line-color));
177
+ border-radius: 4px;
178
+ overflow: hidden;
179
+ background: rgb(var(--sf-color-background));
180
+ }
181
+
182
+ .rule-header {
183
+ padding: 12px;
184
+ border-bottom: 1px solid rgb(var(--sf-color-line-color));
185
+ cursor: pointer;
186
+ display: flex;
187
+ justify-content: space-between;
188
+ align-items: center;
189
+ user-select: none;
190
+ }
191
+
192
+ .rule-header:hover {
193
+ background-color: rgba(0, 0, 0, 0.04);
194
+ }
195
+
196
+ .rule-header:focus-visible,
197
+ .custom-accordion-header:focus-visible,
198
+ .add-field-message-wrapper:focus-visible,
199
+ .palette-item:focus-visible,
200
+ .tab:focus-visible,
201
+ .close-btn:focus-visible {
202
+ border: 2px solid var(--color-sf-primary-bg-color) !important;
203
+ outline-offset: 2px;
204
+ outline: none;
205
+ }
206
+
207
+ .rule-title {
208
+ font-weight: 500;
209
+ margin: 0;
210
+ color: var(--jsonview-text-color);
211
+ flex: 1;
212
+ }
213
+
214
+ .rule-details {
215
+ padding: 16px;
216
+ background: var(--sf-color-background, #ffffff);
217
+ }
218
+
219
+ .rule-details .form-group:last-child {
220
+ margin-bottom: 0;
221
+ }
222
+
223
+ .rule-actions .e-btn {
224
+ padding: 8px 16px;
225
+ font-size: 13px;
226
+ }
227
+
228
+ .condition-data-editor .e-rule-value.e-template-value.e-value.e-show {
229
+ width: 100% !important;
230
+ }
231
+
232
+ .condition-data-editor .e-query-builder .e-group-body .e-rule-container .e-rule-value.e-custom-value {
233
+ width: 100% !important;
234
+ }
235
+
236
+ .form-group input[type="text"],
237
+ .form-group input[type="number"],
238
+ .form-group input[type="date"],
239
+ .form-group select {
240
+ padding: 8px 12px;
241
+ border: 1px solid var(--sf-color-border, #d3d3d3);
242
+ border-radius: 4px;
243
+ font-size: 13px;
244
+ font-family: inherit;
245
+ background: var(--sf-color-background, #ffffff);
246
+ color: var(--sf-color-text, #333);
247
+ }
248
+
249
+ .form-group input:focus,
250
+ .form-group select:focus {
251
+ outline: none;
252
+ border-color: var(--sf-color-primary, #0078d4);
253
+ box-shadow: 0 0 0 2px rgba(0, 120, 212, 0.1);
254
+ }
255
+
256
+ .checkbox-group {
257
+ flex-direction: row;
258
+ }
259
+
260
+ .checkbox-group label {
261
+ display: flex;
262
+ align-items: center;
263
+ gap: 8px;
264
+ font-weight: 400;
265
+ margin: 0;
266
+ }
267
+
268
+ .checkbox-group input[type="checkbox"] {
269
+ width: 16px;
270
+ height: 16px;
271
+ cursor: pointer;
272
+ }
273
+
274
+ /* DataGrid Component Styles */
275
+
276
+ .datagrid-wrapper {
277
+ display: flex;
278
+ flex-direction: column;
279
+ gap: 12px;
280
+ width: 100%;
281
+ }
282
+
283
+ .datagrid-label {
284
+ font-weight: 600;
285
+ font-size: 14px;
286
+ color: var(--sf-color-text, #333);
287
+ display: block;
288
+ margin-bottom: 8px;
289
+ }
290
+
291
+ .datagrid-grid {
292
+ border: 1px solid var(--sf-color-border, #d3d3d3);
293
+ border-radius: 4px;
294
+ overflow: hidden;
295
+ }
296
+
297
+ .datagrid-grid .e-grid {
298
+ border: none;
299
+ }
300
+
301
+ .datagrid-grid .e-gridheader {
302
+ background: var(--sf-color-surface, #f5f5f5);
303
+ border-bottom: 1px solid var(--sf-color-border, #d3d3d3);
304
+ }
305
+
306
+ .datagrid-grid .e-headercell {
307
+ background: var(--sf-color-surface, #f5f5f5);
308
+ font-weight: 600;
309
+ padding: 12px;
310
+ border-right: 1px solid var(--sf-color-border, #e0e0e0);
311
+ }
312
+
313
+ .datagrid-grid .e-rowcell {
314
+ padding: 10px 12px;
315
+ border-right: 1px solid var(--sf-color-border, #e0e0e0);
316
+ color: var(--sf-color-text, #333);
317
+ }
318
+
319
+ .datagrid-grid .e-grid.e-gridhover tr.e-row:not(.e-disable-gridhover):not(.e-detailrow):hover td.e-active.e-rowcell:not(.e-updatedtd) {
320
+ background: unset !important;
321
+ }
322
+
323
+ /* Error States */
324
+
325
+ .column-item.error {
326
+ border-color: #ff4757;
327
+ background: #fff5f5;
328
+ }
329
+
330
+ .form-group input.error,
331
+ .form-group select.error {
332
+ border-color: #ff4757;
333
+ background: #fff5f5;
334
+ }
335
+
336
+ .validation-error {
337
+ color: #ff4757;
338
+ font-size: 12px;
339
+ margin-top: 4px;
340
+ }
341
+
342
+ .query-section {
343
+ padding-top: 0.75rem;
344
+ padding-bottom: 0.5rem;
345
+ }
346
+
347
+ /* Dark Mode Support */
348
+
349
+ [data-theme="dark"] .column-builder,
350
+ .e-dark-mode .column-builder {
351
+ --sf-color-text: #e0e0e0;
352
+ --sf-color-text-secondary: #a0a0a0;
353
+ --sf-color-border: #444;
354
+ }
355
+
356
+
357
+ [data-theme="dark"] .column-header,
358
+ .e-dark-mode .column-header {
359
+ background: #1e1e1e;
360
+ border-bottom-color: #444;
361
+ }
362
+
363
+ [data-theme="dark"] .column-header:hover,
364
+ .e-dark-mode .column-header:hover {
365
+ background: #252525;
366
+ }
367
+
368
+ [data-theme="dark"] .form-group input,
369
+ [data-theme="dark"] .form-group select,
370
+ .e-dark-mode .form-group input,
371
+ .e-dark-mode .form-group select {
372
+ background: var(--color-sf-content-bg-color);
373
+ color: #e0e0e0;
374
+ border-color: #444;
375
+ }
376
+
377
+ [data-theme="dark"] .validation-rules-section,
378
+ .e-dark-mode .validation-rules-section {
379
+ background: #1a1a1a;
380
+ }
@@ -0,0 +1,248 @@
1
+ /* Drag and Reorder Styles */
2
+ .draggable-fields-container {
3
+ display: flex;
4
+ flex-direction: column;
5
+ gap: 1rem;
6
+ width: 100%;
7
+ }
8
+
9
+ .form-field-draggable {
10
+ user-select: none;
11
+ position: relative;
12
+ cursor: pointer;
13
+ transition: all 0.2s ease;
14
+ }
15
+
16
+ .form-preview-area:not(.dragging-over):not(.is-reordering):not(.is-nesteditemreordering):not(:has(.dragging-over)) .form-field-wrapper:hover:not(:has(.form-field-wrapper:hover))
17
+ {
18
+ border: 1px solid var(--dragover-border-color);
19
+ border-radius: 6px;
20
+ transition: none !important;
21
+ }
22
+
23
+ .form-preview-area:not(.dragging-over):not(.is-reordering):not(.is-nesteditemreordering):not(:has(.dragging-over)) .form-field-wrapper:focus-visible:not(:has(.form-field-wrapper:focus-visible))
24
+ {
25
+ border: 1px solid var(--dragover-border-color);
26
+ border-radius: 6px;
27
+ transition: none !important;
28
+ outline: none;
29
+ }
30
+
31
+ /* Dragging down (default) - show border-bottom and padding-bottom */
32
+ .form-preview-area.is-reordering:not(.drag-moving-up):not(.dragging-over):not(:has(.touch-hovered)):not(:has(.dragging-over)) .form-field-wrapper:hover:not(:has(.form-field-wrapper:hover))
33
+ {
34
+ padding-bottom: 8px !important;
35
+ padding-top: 0 !important;
36
+ border-bottom: 2px solid var(--dragover-border-color);
37
+ border-top: none !important;
38
+ }
39
+
40
+ /* Dragging up - show border-top and padding-top */
41
+ .form-preview-area.is-reordering.drag-moving-up:not(.dragging-over):not(:has(.touch-hovered)):not(:has(.dragging-over)) .form-field-wrapper:hover:not(:has(.form-field-wrapper:hover))
42
+ {
43
+ padding-top: 8px !important;
44
+ padding-bottom: 0 !important;
45
+ border-top: 2px solid var(--dragover-border-color);
46
+ border-bottom: none !important;
47
+ }
48
+
49
+ /* Nested reordering - dragging down (default) */
50
+ .form-preview-area.is-nesteditemreordering:not(.drag-moving-up):not(.dragging-over):not(:has(.touch-hovered)):not(:has(.dragging-over)) .form-field-wrapper:hover:not(:has(.form-field-wrapper:hover)):not(:has(.panel-children, .tab-children, .nested-components))
51
+ {
52
+ padding-bottom: 8px !important;
53
+ padding-top: 0 !important;
54
+ border-bottom: 2px solid var(--dragover-border-color);
55
+ border-top: none !important;
56
+ }
57
+
58
+ /* Nested reordering - dragging up */
59
+ .form-preview-area.is-nesteditemreordering.drag-moving-up:not(.dragging-over):not(:has(.touch-hovered)):not(:has(.dragging-over)) .form-field-wrapper:hover:not(:has(.form-field-wrapper:hover)):not(:has(.panel-children, .tab-children, .nested-components))
60
+ {
61
+ padding-top: 8px !important;
62
+ padding-bottom: 0 !important;
63
+ border-top: 2px solid var(--dragover-border-color);
64
+ border-bottom: none !important;
65
+ }
66
+
67
+ .form-preview-area:not(.dragging-over):not(.is-reordering):not(.is-nesteditemreordering):not(:has(.dragging-over)) .form-field-wrapper.is-active {
68
+ border: 1px solid var(--dragover-border-color);
69
+ border-radius: 6px;
70
+ background-color: var(--dragover-background-color);
71
+ }
72
+
73
+ .form-preview-area.is-reordering:not(.drag-moving-up):not(.dragging-over):not(:has(.dragging-over)) .form-field-wrapper.touch-hovered:not(:has(.form-field-wrapper.touch-hovered))
74
+ {
75
+ padding-bottom: 8px !important;
76
+ padding-top: 0 !important;
77
+ border-bottom: 2px solid var(--dragover-border-color);
78
+ border-top: none !important;
79
+ }
80
+
81
+ .form-preview-area.is-reordering.drag-moving-up:not(.dragging-over):not(:has(.dragging-over)) .form-field-wrapper.touch-hovered:not(:has(.form-field-wrapper.touch-hovered))
82
+ {
83
+ padding-top: 8px !important;
84
+ padding-bottom: 0 !important;
85
+ border-top: 2px solid var(--dragover-border-color);
86
+ border-bottom: none !important;
87
+ }
88
+
89
+ .form-preview-area.is-nesteditemreordering:not(.drag-moving-up):not(.dragging-over):not(:has(.dragging-over)) .form-field-wrapper.touch-hovered:not(:has(.form-field-wrapper.touch-hovered)):not(:has(.panel-children, .tab-children, .nested-components))
90
+ {
91
+ padding-bottom: 8px !important;
92
+ padding-top: 0 !important;
93
+ border-bottom: 2px solid var(--dragover-border-color);
94
+ border-top: none !important;
95
+ }
96
+
97
+ .form-preview-area.is-nesteditemreordering.drag-moving-up:not(.dragging-over):not(:has(.dragging-over)) .form-field-wrapper.touch-hovered:not(:has(.form-field-wrapper.touch-hovered)):not(:has(.panel-children, .tab-children, .nested-components))
98
+ {
99
+ padding-top: 8px !important;
100
+ padding-bottom: 0 !important;
101
+ border-top: 2px solid var(--dragover-border-color);
102
+ border-bottom: none !important;
103
+ }
104
+
105
+ .form-preview-area.is-nesteditemreordering .form-table,
106
+ .form-preview-area.is-nesteditemreordering .form-panel,
107
+ .form-preview-area.is-nesteditemreordering .form-tabs {
108
+ padding: 15px 0px 15px 0px;
109
+ }
110
+
111
+ .form-preview-area.is-reordering .form-table,
112
+ .form-preview-area.is-reordering .form-panel,
113
+ .form-preview-area.is-reordering .form-tabs {
114
+ padding: 15px 0px 15px 0px;
115
+ }
116
+
117
+
118
+ .form-field-draggable:active {
119
+ cursor: grabbing;
120
+ }
121
+
122
+ /* Clone helper styles */
123
+ .form-field-clone {
124
+ display: flex;
125
+ align-items: center;
126
+ position: fixed;
127
+ pointer-events: none;
128
+ }
129
+
130
+ .clone-content {
131
+ white-space: nowrap;
132
+ overflow: hidden;
133
+ text-overflow: ellipsis;
134
+ max-width: 250px;
135
+ color: var(--jsonview-text-color);
136
+ }
137
+
138
+ /* Dragging state */
139
+ .e-dragging {
140
+ opacity: 0.5;
141
+ }
142
+
143
+ /* Nested reordering styles - Panels */
144
+ .panel-child-field-draggable {
145
+ cursor: pointer;
146
+ transition: all 0.2s ease;
147
+ user-select: none;
148
+ }
149
+
150
+ .panel-children.is-nested-reordering .panel-child-field-draggable:hover {
151
+ background-color: transparent !important;
152
+ }
153
+
154
+ /* Nested reordering styles - Tabs */
155
+ .tab-child-field-draggable {
156
+ cursor: pointer;
157
+ user-select: none;
158
+ }
159
+
160
+ .tab-children.is-nested-reordering .tab-child-field-draggable:hover {
161
+ background-color: transparent !important;
162
+ }
163
+
164
+ /* Nested reordering styles - Table Cells */
165
+ .table-cell-child-draggable {
166
+ cursor: pointer;
167
+ user-select: none;
168
+ }
169
+
170
+ .nested-components.is-nested-reordering .table-cell-child-draggable:hover {
171
+ background-color: transparent !important;
172
+ }
173
+
174
+ /* Nested clone helper */
175
+ .nested-field-clone {
176
+ display: flex;
177
+ align-items: center;
178
+ position: fixed;
179
+ pointer-events: none;
180
+ }
181
+
182
+ /* Drop-between-fields indicators - Root level */
183
+ .form-field-wrapper .form-field-draggable.drop-target-before {
184
+ border-top: 2px solid var(--dragover-border-color) !important;
185
+ padding-top: 10px;
186
+ transition: none !important;
187
+ }
188
+
189
+ .form-field-wrapper .form-field-draggable.drop-target-after {
190
+ border-bottom: 2px solid var(--dragover-border-color) !important;
191
+ padding-bottom: 10px;
192
+ transition: none !important;
193
+ }
194
+
195
+ /* Drop-between-fields indicators - Nested panels */
196
+ .form-field-wrapper .panel-child-field-draggable.drop-target-before {
197
+ border-top: 2px solid var(--dragover-border-color) !important;
198
+ padding-top: 8px;
199
+ transition: none !important;
200
+ }
201
+
202
+ .form-field-wrapper .panel-child-field-draggable.drop-target-after {
203
+ border-bottom: 2px solid var(--dragover-border-color) !important;
204
+ padding-bottom: 8px;
205
+ transition: none !important;
206
+ }
207
+
208
+ /* Drop-between-fields indicators - Nested tabs */
209
+ .form-field-wrapper .tab-child-field-draggable.drop-target-before {
210
+ border-top: 2px solid var(--dragover-border-color) !important;
211
+ padding-top: 8px;
212
+ }
213
+
214
+ .form-field-wrapper .tab-child-field-draggable.drop-target-after {
215
+ border-bottom: 2px solid var(--dragover-border-color) !important;
216
+ padding-bottom: 8px;
217
+ }
218
+
219
+ /* Drop-between-fields indicators - Table cells */
220
+ .form-field-wrapper .table-cell-child-draggable.drop-target-before {
221
+ border-top: 2px solid var(--dragover-border-color) !important;
222
+ padding-top: 8px;
223
+ }
224
+
225
+ .form-field-wrapper .table-cell-child-draggable.drop-target-after {
226
+ border-bottom: 2px solid var(--dragover-border-color) !important;
227
+ padding-bottom: 8px;
228
+ }
229
+
230
+ /* Drop indicator */
231
+ .form-field-draggable.drag-over-top {
232
+ border-top: 2px solid rgb(var(--sf-color-primary));
233
+ }
234
+
235
+ .form-field-draggable.drag-over-bottom {
236
+ border-bottom: 2px solid rgb(var(--sf-color-primary));
237
+ }
238
+
239
+ /* Form components container */
240
+ .form-components {
241
+ position: relative;
242
+ }
243
+
244
+ /* Dark mode */
245
+ [data-theme="dark"] .form-field-clone {
246
+ background-color: rgba(var(--sf-color-surface), 0.95);
247
+ border-color: rgb(var(--sf-color-primary));
248
+ }