form-builder-pro 1.3.8 → 1.4.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
@@ -744,11 +744,6 @@ body {
744
744
  /* Slider thumb (Firefox) */
745
745
  /* Slider track (Firefox) */
746
746
  /* Width value badge animation */
747
- .width-value-badge {
748
- min-width: 40px;
749
- text-align: center;
750
- transition: transform 0.1s ease, background-color 0.15s ease;
751
- }
752
747
  /* Preset buttons */
753
748
  /* Breakpoint markers */
754
749
  /* ===== PHONE ISD SELECTOR STYLES ===== */
@@ -942,6 +937,9 @@ body {
942
937
  .mt-2 {
943
938
  margin-top: 0.5rem;
944
939
  }
940
+ .mt-3 {
941
+ margin-top: 0.75rem;
942
+ }
945
943
  .mt-4 {
946
944
  margin-top: 1rem;
947
945
  }
@@ -1041,6 +1039,9 @@ body {
1041
1039
  .w-full {
1042
1040
  width: 100%;
1043
1041
  }
1042
+ .min-w-0 {
1043
+ min-width: 0px;
1044
+ }
1044
1045
  .max-w-2xl {
1045
1046
  max-width: 42rem;
1046
1047
  }
@@ -1088,6 +1089,9 @@ body {
1088
1089
  .items-center {
1089
1090
  align-items: center;
1090
1091
  }
1092
+ .justify-start {
1093
+ justify-content: flex-start;
1094
+ }
1091
1095
  .justify-end {
1092
1096
  justify-content: flex-end;
1093
1097
  }
@@ -1141,6 +1145,11 @@ body {
1141
1145
  margin-top: calc(0.75rem * calc(1 - var(--tw-space-y-reverse)));
1142
1146
  margin-bottom: calc(0.75rem * var(--tw-space-y-reverse));
1143
1147
  }
1148
+ .space-y-4 > :not([hidden]) ~ :not([hidden]) {
1149
+ --tw-space-y-reverse: 0;
1150
+ margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));
1151
+ margin-bottom: calc(1rem * var(--tw-space-y-reverse));
1152
+ }
1144
1153
  .space-y-6 > :not([hidden]) ~ :not([hidden]) {
1145
1154
  --tw-space-y-reverse: 0;
1146
1155
  margin-top: calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));
@@ -1184,6 +1193,9 @@ body {
1184
1193
  border-top-left-radius: var(--radius);
1185
1194
  border-top-right-radius: var(--radius);
1186
1195
  }
1196
+ .rounded-bl-md {
1197
+ border-bottom-left-radius: calc(var(--radius) - 2px);
1198
+ }
1187
1199
  .border {
1188
1200
  border-width: 1px;
1189
1201
  }
@@ -1196,6 +1208,9 @@ body {
1196
1208
  .border-l {
1197
1209
  border-left-width: 1px;
1198
1210
  }
1211
+ .border-l-2 {
1212
+ border-left-width: 2px;
1213
+ }
1199
1214
  .border-r {
1200
1215
  border-right-width: 1px;
1201
1216
  }
@@ -1208,6 +1223,13 @@ body {
1208
1223
  .border-dashed {
1209
1224
  border-style: dashed;
1210
1225
  }
1226
+ .border-\[\#019FA2\] {
1227
+ --tw-border-opacity: 1;
1228
+ border-color: rgb(1 159 162 / var(--tw-border-opacity, 1));
1229
+ }
1230
+ .border-\[\#635bff\]\/35 {
1231
+ border-color: rgb(99 91 255 / 0.35);
1232
+ }
1211
1233
  .border-\[\#e7e7ff\] {
1212
1234
  --tw-border-opacity: 1;
1213
1235
  border-color: rgb(231 231 255 / var(--tw-border-opacity, 1));
@@ -1295,6 +1317,9 @@ body {
1295
1317
  --tw-bg-opacity: 1;
1296
1318
  background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1));
1297
1319
  }
1320
+ .bg-gray-50\/50 {
1321
+ background-color: rgb(249 250 251 / 0.5);
1322
+ }
1298
1323
  .bg-red-500 {
1299
1324
  --tw-bg-opacity: 1;
1300
1325
  background-color: rgb(239 68 68 / var(--tw-bg-opacity, 1));
@@ -1381,12 +1406,24 @@ body {
1381
1406
  .pb-20 {
1382
1407
  padding-bottom: 5rem;
1383
1408
  }
1409
+ .pb-4 {
1410
+ padding-bottom: 1rem;
1411
+ }
1412
+ .pl-3 {
1413
+ padding-left: 0.75rem;
1414
+ }
1384
1415
  .pl-\[95px\] {
1385
1416
  padding-left: 95px;
1386
1417
  }
1418
+ .pt-0 {
1419
+ padding-top: 0px;
1420
+ }
1387
1421
  .pt-2 {
1388
1422
  padding-top: 0.5rem;
1389
1423
  }
1424
+ .pt-3 {
1425
+ padding-top: 0.75rem;
1426
+ }
1390
1427
  .text-center {
1391
1428
  text-align: center;
1392
1429
  }
@@ -1444,6 +1481,10 @@ body {
1444
1481
  .tracking-wider {
1445
1482
  letter-spacing: 0.05em;
1446
1483
  }
1484
+ .text-\[\#019FA2\] {
1485
+ --tw-text-opacity: 1;
1486
+ color: rgb(1 159 162 / var(--tw-text-opacity, 1));
1487
+ }
1447
1488
  .text-\[\#3b497e\] {
1448
1489
  --tw-text-opacity: 1;
1449
1490
  color: rgb(59 73 126 / var(--tw-text-opacity, 1));
@@ -1516,6 +1557,11 @@ body {
1516
1557
  .opacity-50 {
1517
1558
  opacity: 0.5;
1518
1559
  }
1560
+ .shadow-inner {
1561
+ --tw-shadow: inset 0 2px 4px 0 rgb(0 0 0 / 0.05);
1562
+ --tw-shadow-colored: inset 0 2px 4px 0 var(--tw-shadow-color);
1563
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
1564
+ }
1519
1565
  .shadow-none {
1520
1566
  --tw-shadow: 0 0 #0000;
1521
1567
  --tw-shadow-colored: 0 0 #0000;
@@ -1536,13 +1582,13 @@ body {
1536
1582
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
1537
1583
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
1538
1584
  }
1585
+ .ring-\[\#635bff\] {
1586
+ --tw-ring-opacity: 1;
1587
+ --tw-ring-color: rgb(99 91 255 / var(--tw-ring-opacity, 1));
1588
+ }
1539
1589
  .ring-offset-background {
1540
1590
  --tw-ring-offset-color: hsl(var(--background));
1541
1591
  }
1542
- .blur {
1543
- --tw-blur: blur(8px);
1544
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
1545
- }
1546
1592
  .filter {
1547
1593
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
1548
1594
  }
@@ -1757,6 +1803,10 @@ input[type="radio"]:checked::after {
1757
1803
  background-color: rgb(1 138 141 / var(--tw-bg-opacity, 1));
1758
1804
  }
1759
1805
 
1806
+ .hover\:bg-\[\#019FA2\]\/10:hover {
1807
+ background-color: rgb(1 159 162 / 0.1);
1808
+ }
1809
+
1760
1810
  .hover\:bg-\[\#635bff\]:hover {
1761
1811
  --tw-bg-opacity: 1;
1762
1812
  background-color: rgb(99 91 255 / var(--tw-bg-opacity, 1));
@@ -1936,6 +1986,15 @@ input[type="radio"]:checked::after {
1936
1986
  opacity: 0.7;
1937
1987
  }
1938
1988
 
1989
+ .dark\:border-\[\#019FA2\]:is(.dark *) {
1990
+ --tw-border-opacity: 1;
1991
+ border-color: rgb(1 159 162 / var(--tw-border-opacity, 1));
1992
+ }
1993
+
1994
+ .dark\:border-\[\#635bff\]\/50:is(.dark *) {
1995
+ border-color: rgb(99 91 255 / 0.5);
1996
+ }
1997
+
1939
1998
  .dark\:border-gray-600:is(.dark *) {
1940
1999
  --tw-border-opacity: 1;
1941
2000
  border-color: rgb(75 85 99 / var(--tw-border-opacity, 1));
@@ -1970,6 +2029,14 @@ input[type="radio"]:checked::after {
1970
2029
  background-color: rgb(31 41 55 / var(--tw-bg-opacity, 1));
1971
2030
  }
1972
2031
 
2032
+ .dark\:bg-gray-800\/30:is(.dark *) {
2033
+ background-color: rgb(31 41 55 / 0.3);
2034
+ }
2035
+
2036
+ .dark\:bg-gray-800\/40:is(.dark *) {
2037
+ background-color: rgb(31 41 55 / 0.4);
2038
+ }
2039
+
1973
2040
  .dark\:bg-gray-800\/50:is(.dark *) {
1974
2041
  background-color: rgb(31 41 55 / 0.5);
1975
2042
  }
@@ -1984,6 +2051,11 @@ input[type="radio"]:checked::after {
1984
2051
  background-color: rgb(3 7 18 / var(--tw-bg-opacity, 1));
1985
2052
  }
1986
2053
 
2054
+ .dark\:text-\[\#4dd4d6\]:is(.dark *) {
2055
+ --tw-text-opacity: 1;
2056
+ color: rgb(77 212 214 / var(--tw-text-opacity, 1));
2057
+ }
2058
+
1987
2059
  .dark\:text-blue-200:is(.dark *) {
1988
2060
  --tw-text-opacity: 1;
1989
2061
  color: rgb(191 219 254 / var(--tw-text-opacity, 1));
package/dist/index.d.mts CHANGED
@@ -156,6 +156,14 @@ interface ISDConfig {
156
156
  showCountryName: boolean;
157
157
  allowCustomCode: boolean;
158
158
  }
159
+ /** Group / section position on the form canvas (payload: groups[].position) */
160
+ interface GroupPosition {
161
+ row: number;
162
+ column: number;
163
+ /** Grid span 1–12 (group width on parent grid) */
164
+ width: number;
165
+ order: number;
166
+ }
159
167
  interface FormSection {
160
168
  id: string;
161
169
  title: string;
@@ -172,6 +180,20 @@ interface FormSection {
172
180
  class?: string;
173
181
  style?: Record<string, string>;
174
182
  };
183
+ /** API group name (payload groups[].name); mirrors title when set */
184
+ name?: string;
185
+ description?: string | null;
186
+ position?: GroupPosition;
187
+ /** Payload expanded (preferred); isExpanded kept for legacy */
188
+ expanded?: boolean;
189
+ visible?: boolean;
190
+ collapsible?: boolean;
191
+ parentGroupId?: string | null;
192
+ repeatable?: boolean;
193
+ dataKey?: string | null;
194
+ addButtonLabel?: string | null;
195
+ minInstances?: number | null;
196
+ maxInstances?: number | null;
175
197
  }
176
198
  interface FormSchema {
177
199
  id: string;
@@ -238,6 +260,7 @@ interface MasterType {
238
260
  interface FormState {
239
261
  schema: FormSchema;
240
262
  selectedFieldId: string | null;
263
+ selectedSectionId: string | null;
241
264
  history: FormSchema[];
242
265
  historyIndex: number;
243
266
  isPreviewMode: boolean;
@@ -280,6 +303,7 @@ interface FormActions {
280
303
  removeField: (fieldId: string) => void;
281
304
  updateField: (fieldId: string, updates: Partial<FormField>) => void;
282
305
  selectField: (fieldId: string | null) => void;
306
+ selectSection: (sectionId: string | null) => void;
283
307
  moveField: (fieldId: string, targetSectionId: string | null, newIndex: number) => void;
284
308
  undo: () => void;
285
309
  redo: () => void;
@@ -376,6 +400,15 @@ declare class FormBuilder {
376
400
  private renderImportList;
377
401
  private renderCanvas;
378
402
  private createCheckboxField;
403
+ /**
404
+ * Shared 1–12 grid span control (Field Settings + Group Settings).
405
+ */
406
+ private createGridSpanSelector;
407
+ /**
408
+ * Shared Styling block (Padding, Background, Alignment, CSS class, Advanced CSS) — same as Field Settings.
409
+ */
410
+ private appendSharedStylingSection;
411
+ private renderGroupSettingsPanel;
379
412
  private renderConfigPanel;
380
413
  private initSidebarSortables;
381
414
  }
@@ -415,7 +448,7 @@ declare const cleanFormSchema: (schema: any) => FormSchema;
415
448
  /**
416
449
  * Transforms Form Builder JSON to Platform JSON (standardized payload format)
417
450
  * @param builderSchema
418
- * @returns Standardized payload format
451
+ * @returns Standardized payload format (root `fields` + `groups` with fieldIds)
419
452
  */
420
453
  declare const builderToPlatform: (builderSchema: FormSchema) => any;
421
454
  /**
@@ -490,4 +523,4 @@ declare const initFormBuilder: (options: FormBuilderOptions & {
490
523
  containerId: string;
491
524
  }) => FormBuilder;
492
525
 
493
- export { type AsyncOptionSource, type DateConstraint, type FieldType, type FieldValidations, type FieldWidth, FormBuilder, type FormBuilderOptions, type FormField, FormRenderer, type FormSchema, FormSchemaValidation, type FormSection, type ISDConfig, LOOKUP_SOURCE_TYPE_OPTIONS, type LookupSourceType, type MasterType, type NameGeneratorFormat, type ValidationObject, type ValidationRule, builderToPlatform, cleanFormSchema, convertValidationObjectToArray, detectCircularDependency, evaluateFormula, formStore, generateName, getColSpanFromWidth, getNumericFieldsForFormula, getValidationConfigForAngular, initFormBuilder, parseFormulaDependencies, parseWidth, platformToBuilder, resetNameGeneratorCounter, validateFormula };
526
+ export { type AsyncOptionSource, type DateConstraint, type FieldType, type FieldValidations, type FieldWidth, FormBuilder, type FormBuilderOptions, type FormField, FormRenderer, type FormSchema, FormSchemaValidation, type FormSection, type GroupPosition, type ISDConfig, LOOKUP_SOURCE_TYPE_OPTIONS, type LookupSourceType, type MasterType, type NameGeneratorFormat, type ValidationObject, type ValidationRule, builderToPlatform, cleanFormSchema, convertValidationObjectToArray, detectCircularDependency, evaluateFormula, formStore, generateName, getColSpanFromWidth, getNumericFieldsForFormula, getValidationConfigForAngular, initFormBuilder, parseFormulaDependencies, parseWidth, platformToBuilder, resetNameGeneratorCounter, validateFormula };
package/dist/index.d.ts CHANGED
@@ -156,6 +156,14 @@ interface ISDConfig {
156
156
  showCountryName: boolean;
157
157
  allowCustomCode: boolean;
158
158
  }
159
+ /** Group / section position on the form canvas (payload: groups[].position) */
160
+ interface GroupPosition {
161
+ row: number;
162
+ column: number;
163
+ /** Grid span 1–12 (group width on parent grid) */
164
+ width: number;
165
+ order: number;
166
+ }
159
167
  interface FormSection {
160
168
  id: string;
161
169
  title: string;
@@ -172,6 +180,20 @@ interface FormSection {
172
180
  class?: string;
173
181
  style?: Record<string, string>;
174
182
  };
183
+ /** API group name (payload groups[].name); mirrors title when set */
184
+ name?: string;
185
+ description?: string | null;
186
+ position?: GroupPosition;
187
+ /** Payload expanded (preferred); isExpanded kept for legacy */
188
+ expanded?: boolean;
189
+ visible?: boolean;
190
+ collapsible?: boolean;
191
+ parentGroupId?: string | null;
192
+ repeatable?: boolean;
193
+ dataKey?: string | null;
194
+ addButtonLabel?: string | null;
195
+ minInstances?: number | null;
196
+ maxInstances?: number | null;
175
197
  }
176
198
  interface FormSchema {
177
199
  id: string;
@@ -238,6 +260,7 @@ interface MasterType {
238
260
  interface FormState {
239
261
  schema: FormSchema;
240
262
  selectedFieldId: string | null;
263
+ selectedSectionId: string | null;
241
264
  history: FormSchema[];
242
265
  historyIndex: number;
243
266
  isPreviewMode: boolean;
@@ -280,6 +303,7 @@ interface FormActions {
280
303
  removeField: (fieldId: string) => void;
281
304
  updateField: (fieldId: string, updates: Partial<FormField>) => void;
282
305
  selectField: (fieldId: string | null) => void;
306
+ selectSection: (sectionId: string | null) => void;
283
307
  moveField: (fieldId: string, targetSectionId: string | null, newIndex: number) => void;
284
308
  undo: () => void;
285
309
  redo: () => void;
@@ -376,6 +400,15 @@ declare class FormBuilder {
376
400
  private renderImportList;
377
401
  private renderCanvas;
378
402
  private createCheckboxField;
403
+ /**
404
+ * Shared 1–12 grid span control (Field Settings + Group Settings).
405
+ */
406
+ private createGridSpanSelector;
407
+ /**
408
+ * Shared Styling block (Padding, Background, Alignment, CSS class, Advanced CSS) — same as Field Settings.
409
+ */
410
+ private appendSharedStylingSection;
411
+ private renderGroupSettingsPanel;
379
412
  private renderConfigPanel;
380
413
  private initSidebarSortables;
381
414
  }
@@ -415,7 +448,7 @@ declare const cleanFormSchema: (schema: any) => FormSchema;
415
448
  /**
416
449
  * Transforms Form Builder JSON to Platform JSON (standardized payload format)
417
450
  * @param builderSchema
418
- * @returns Standardized payload format
451
+ * @returns Standardized payload format (root `fields` + `groups` with fieldIds)
419
452
  */
420
453
  declare const builderToPlatform: (builderSchema: FormSchema) => any;
421
454
  /**
@@ -490,4 +523,4 @@ declare const initFormBuilder: (options: FormBuilderOptions & {
490
523
  containerId: string;
491
524
  }) => FormBuilder;
492
525
 
493
- export { type AsyncOptionSource, type DateConstraint, type FieldType, type FieldValidations, type FieldWidth, FormBuilder, type FormBuilderOptions, type FormField, FormRenderer, type FormSchema, FormSchemaValidation, type FormSection, type ISDConfig, LOOKUP_SOURCE_TYPE_OPTIONS, type LookupSourceType, type MasterType, type NameGeneratorFormat, type ValidationObject, type ValidationRule, builderToPlatform, cleanFormSchema, convertValidationObjectToArray, detectCircularDependency, evaluateFormula, formStore, generateName, getColSpanFromWidth, getNumericFieldsForFormula, getValidationConfigForAngular, initFormBuilder, parseFormulaDependencies, parseWidth, platformToBuilder, resetNameGeneratorCounter, validateFormula };
526
+ export { type AsyncOptionSource, type DateConstraint, type FieldType, type FieldValidations, type FieldWidth, FormBuilder, type FormBuilderOptions, type FormField, FormRenderer, type FormSchema, FormSchemaValidation, type FormSection, type GroupPosition, type ISDConfig, LOOKUP_SOURCE_TYPE_OPTIONS, type LookupSourceType, type MasterType, type NameGeneratorFormat, type ValidationObject, type ValidationRule, builderToPlatform, cleanFormSchema, convertValidationObjectToArray, detectCircularDependency, evaluateFormula, formStore, generateName, getColSpanFromWidth, getNumericFieldsForFormula, getValidationConfigForAngular, initFormBuilder, parseFormulaDependencies, parseWidth, platformToBuilder, resetNameGeneratorCounter, validateFormula };