form-builder-pro 1.2.0 → 1.2.2

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
@@ -632,7 +632,7 @@ video {
632
632
  }
633
633
  /* Grid column spans - explicit !important to override Angular styles */
634
634
  .form-builder-field-wrapper.selected-field {
635
- border: 1px solid #3b497e !important;
635
+ border: 1px solid #635bff !important;
636
636
  border-radius: 6px;
637
637
  box-shadow: none;
638
638
  }
@@ -843,12 +843,18 @@ body {
843
843
  .static {
844
844
  position: static;
845
845
  }
846
+ .fixed {
847
+ position: fixed;
848
+ }
846
849
  .absolute {
847
850
  position: absolute;
848
851
  }
849
852
  .relative {
850
853
  position: relative;
851
854
  }
855
+ .inset-0 {
856
+ inset: 0px;
857
+ }
852
858
  .right-1 {
853
859
  right: 0.25rem;
854
860
  }
@@ -864,6 +870,9 @@ body {
864
870
  .z-10 {
865
871
  z-index: 10;
866
872
  }
873
+ .z-\[9999\] {
874
+ z-index: 9999;
875
+ }
867
876
  .\!m-0 {
868
877
  margin: 0px !important;
869
878
  }
@@ -895,6 +904,9 @@ body {
895
904
  .ml-1 {
896
905
  margin-left: 0.25rem;
897
906
  }
907
+ .ml-1\.5 {
908
+ margin-left: 0.375rem;
909
+ }
898
910
  .ml-2 {
899
911
  margin-left: 0.5rem;
900
912
  }
@@ -955,6 +967,9 @@ body {
955
967
  .h-6 {
956
968
  height: 1.5rem;
957
969
  }
970
+ .h-64 {
971
+ height: 16rem;
972
+ }
958
973
  .h-8 {
959
974
  height: 2rem;
960
975
  }
@@ -964,6 +979,9 @@ body {
964
979
  .h-screen {
965
980
  height: 100vh;
966
981
  }
982
+ .max-h-\[90vh\] {
983
+ max-height: 90vh;
984
+ }
967
985
  .min-h-\[100px\] {
968
986
  min-height: 100px;
969
987
  }
@@ -997,6 +1015,12 @@ body {
997
1015
  .w-full {
998
1016
  width: 100%;
999
1017
  }
1018
+ .max-w-2xl {
1019
+ max-width: 42rem;
1020
+ }
1021
+ .max-w-\[180px\] {
1022
+ max-width: 180px;
1023
+ }
1000
1024
  .flex-1 {
1001
1025
  flex: 1 1 0%;
1002
1026
  }
@@ -1017,6 +1041,9 @@ body {
1017
1041
  -moz-user-select: none;
1018
1042
  user-select: none;
1019
1043
  }
1044
+ .resize-y {
1045
+ resize: vertical;
1046
+ }
1020
1047
  .grid-cols-2 {
1021
1048
  grid-template-columns: repeat(2, minmax(0, 1fr));
1022
1049
  }
@@ -1032,6 +1059,9 @@ body {
1032
1059
  .items-center {
1033
1060
  align-items: center;
1034
1061
  }
1062
+ .justify-end {
1063
+ justify-content: flex-end;
1064
+ }
1035
1065
  .justify-center {
1036
1066
  justify-content: center;
1037
1067
  }
@@ -1134,9 +1164,6 @@ body {
1134
1164
  .border-b {
1135
1165
  border-bottom-width: 1px;
1136
1166
  }
1137
- .border-b-2 {
1138
- border-bottom-width: 2px;
1139
- }
1140
1167
  .border-l {
1141
1168
  border-left-width: 1px;
1142
1169
  }
@@ -1152,10 +1179,6 @@ body {
1152
1179
  .border-dashed {
1153
1180
  border-style: dashed;
1154
1181
  }
1155
- .border-\[\#019FA2\] {
1156
- --tw-border-opacity: 1;
1157
- border-color: rgb(1 159 162 / var(--tw-border-opacity, 1));
1158
- }
1159
1182
  .border-\[\#e9e9e9\] {
1160
1183
  --tw-border-opacity: 1;
1161
1184
  border-color: rgb(233 233 233 / var(--tw-border-opacity, 1));
@@ -1198,16 +1221,19 @@ body {
1198
1221
  --tw-bg-opacity: 1;
1199
1222
  background-color: rgb(59 73 126 / var(--tw-bg-opacity, 1));
1200
1223
  }
1201
- .bg-\[\#acbdfe33\] {
1202
- background-color: #acbdfe33;
1203
- }
1204
- .bg-\[\#f8faff\] {
1224
+ .bg-\[\#635bff\] {
1205
1225
  --tw-bg-opacity: 1;
1206
- background-color: rgb(248 250 255 / var(--tw-bg-opacity, 1));
1226
+ background-color: rgb(99 91 255 / var(--tw-bg-opacity, 1));
1227
+ }
1228
+ .bg-\[\#847dff1a\] {
1229
+ background-color: #847dff1a;
1207
1230
  }
1208
1231
  .bg-background {
1209
1232
  background-color: hsl(var(--background));
1210
1233
  }
1234
+ .bg-black\/50 {
1235
+ background-color: rgb(0 0 0 / 0.5);
1236
+ }
1211
1237
  .bg-blue-100 {
1212
1238
  --tw-bg-opacity: 1;
1213
1239
  background-color: rgb(219 234 254 / var(--tw-bg-opacity, 1));
@@ -1272,6 +1298,10 @@ body {
1272
1298
  padding-left: 0.75rem;
1273
1299
  padding-right: 0.75rem;
1274
1300
  }
1301
+ .px-4 {
1302
+ padding-left: 1rem;
1303
+ padding-right: 1rem;
1304
+ }
1275
1305
  .px-6 {
1276
1306
  padding-left: 1.5rem;
1277
1307
  padding-right: 1.5rem;
@@ -1327,6 +1357,10 @@ body {
1327
1357
  font-size: 1rem;
1328
1358
  line-height: 1.5rem;
1329
1359
  }
1360
+ .text-lg {
1361
+ font-size: 1.125rem;
1362
+ line-height: 1.75rem;
1363
+ }
1330
1364
  .text-sm {
1331
1365
  font-size: 0.875rem;
1332
1366
  line-height: 1.25rem;
@@ -1360,10 +1394,6 @@ body {
1360
1394
  .tracking-wider {
1361
1395
  letter-spacing: 0.05em;
1362
1396
  }
1363
- .text-\[\#019FA2\] {
1364
- --tw-text-opacity: 1;
1365
- color: rgb(1 159 162 / var(--tw-text-opacity, 1));
1366
- }
1367
1397
  .text-\[\#3b497e\] {
1368
1398
  --tw-text-opacity: 1;
1369
1399
  color: rgb(59 73 126 / var(--tw-text-opacity, 1));
@@ -1432,6 +1462,11 @@ body {
1432
1462
  .opacity-50 {
1433
1463
  opacity: 0.5;
1434
1464
  }
1465
+ .shadow-\[0_17px_20px_-8px_rgba\(77\2c 91\2c 236\2c 0\.231372549\)\] {
1466
+ --tw-shadow: 0 17px 20px -8px rgba(77,91,236,0.231372549);
1467
+ --tw-shadow-colored: 0 17px 20px -8px var(--tw-shadow-color);
1468
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
1469
+ }
1435
1470
  .shadow-none {
1436
1471
  --tw-shadow: 0 0 #0000;
1437
1472
  --tw-shadow-colored: 0 0 #0000;
@@ -1442,6 +1477,11 @@ body {
1442
1477
  --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
1443
1478
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
1444
1479
  }
1480
+ .shadow-xl {
1481
+ --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
1482
+ --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);
1483
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
1484
+ }
1445
1485
  .ring-2 {
1446
1486
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
1447
1487
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
@@ -1485,17 +1525,21 @@ input[type="checkbox"] {
1485
1525
  -moz-appearance: none;
1486
1526
  appearance: none;
1487
1527
  -webkit-appearance: none;
1488
- width: 18px;
1489
- height: 18px;
1490
- border: 2px solid #019FA2;
1528
+ width: 20px;
1529
+ height: 20px;
1530
+ border: 2px solid #635bff;
1491
1531
  border-radius: 4px;
1492
1532
  background-color: #f8faff;
1493
1533
  cursor: pointer;
1534
+ min-height: 20px;
1535
+ box-shadow: 0 17px 20px -8px rgba(77, 91, 236, 0.231372549);
1536
+
1494
1537
  }
1495
1538
 
1496
1539
  input[type="checkbox"]:checked {
1497
- background-color: #019FA2;
1498
- border-color: #019FA2;
1540
+ background-color: #635bff;
1541
+ border-color: #635bff;
1542
+ box-shadow: 0 17px 20px -8px rgba(77, 91, 236, 0.231372549);
1499
1543
  }
1500
1544
 
1501
1545
  input[type="checkbox"]:checked::after {
@@ -1513,24 +1557,27 @@ input[type="radio"] {
1513
1557
  -webkit-appearance: none;
1514
1558
  width: 18px;
1515
1559
  height: 18px;
1516
- border: 2px solid #019FA2;
1560
+ border: 2px solid #635bff;
1517
1561
  border-radius: 50%;
1518
1562
  background-color: #fff;
1519
1563
  cursor: pointer;
1564
+ box-shadow: 0 17px 20px -8px rgba(77, 91, 236, 0.231372549);
1520
1565
  }
1521
1566
 
1522
1567
  input[type="radio"]:checked {
1523
- border-color: #019FA2;
1568
+ border-color: #635bff;
1569
+ box-shadow: 0 17px 20px -8px rgba(77, 91, 236, 0.231372549);
1524
1570
  }
1525
1571
 
1526
1572
  input[type="radio"]:checked::after {
1527
1573
  content: "";
1528
1574
  width: 10px;
1529
1575
  height: 10px;
1530
- background-color: #019FA2;
1576
+ background-color: #635bff;
1531
1577
  border-radius: 50%;
1532
1578
  display: block;
1533
1579
  margin: 2px auto;
1580
+ box-shadow: 0 17px 20px -8px rgba(77, 91, 236, 0.231372549);
1534
1581
  }
1535
1582
 
1536
1583
  .file\:border-0::file-selector-button {
@@ -1656,6 +1703,11 @@ input[type="radio"]:checked::after {
1656
1703
  background-color: rgb(229 231 235 / var(--tw-bg-opacity, 1));
1657
1704
  }
1658
1705
 
1706
+ .hover\:bg-gray-300:hover {
1707
+ --tw-bg-opacity: 1;
1708
+ background-color: rgb(209 213 219 / var(--tw-bg-opacity, 1));
1709
+ }
1710
+
1659
1711
  .hover\:bg-gray-50:hover {
1660
1712
  --tw-bg-opacity: 1;
1661
1713
  background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1));
@@ -1888,6 +1940,11 @@ input[type="radio"]:checked::after {
1888
1940
  color: rgb(250 204 21 / var(--tw-text-opacity, 1));
1889
1941
  }
1890
1942
 
1943
+ .dark\:hover\:bg-gray-600:hover:is(.dark *) {
1944
+ --tw-bg-opacity: 1;
1945
+ background-color: rgb(75 85 99 / var(--tw-bg-opacity, 1));
1946
+ }
1947
+
1891
1948
  .dark\:hover\:bg-gray-700:hover:is(.dark *) {
1892
1949
  --tw-bg-opacity: 1;
1893
1950
  background-color: rgb(55 65 81 / var(--tw-bg-opacity, 1));
package/dist/index.d.mts CHANGED
@@ -32,6 +32,7 @@ interface FormField {
32
32
  id: string;
33
33
  type: FieldType;
34
34
  label: string;
35
+ fieldName?: string;
35
36
  placeholder?: string;
36
37
  description?: string;
37
38
  required?: boolean;
@@ -253,6 +254,8 @@ interface FormBuilderOptions {
253
254
  lookupSourceType: 'MODULE' | 'MASTER_TYPE';
254
255
  lookupSource: string;
255
256
  }) => void;
257
+ onProfileClick?: () => void;
258
+ onSettingsClick?: () => void;
256
259
  }
257
260
  declare class FormBuilder {
258
261
  private container;
@@ -304,7 +307,7 @@ declare class FormRenderer {
304
307
  constructor(container: HTMLElement, schema: FormSchema, onSubmit?: (data: any) => void, onDropdownValueChange?: (event: {
305
308
  fieldId: string;
306
309
  value: string;
307
- }) => void);
310
+ }) => void, initialData?: Record<string, any>);
308
311
  setSchema(schema: FormSchema): void;
309
312
  private render;
310
313
  }
package/dist/index.d.ts CHANGED
@@ -32,6 +32,7 @@ interface FormField {
32
32
  id: string;
33
33
  type: FieldType;
34
34
  label: string;
35
+ fieldName?: string;
35
36
  placeholder?: string;
36
37
  description?: string;
37
38
  required?: boolean;
@@ -253,6 +254,8 @@ interface FormBuilderOptions {
253
254
  lookupSourceType: 'MODULE' | 'MASTER_TYPE';
254
255
  lookupSource: string;
255
256
  }) => void;
257
+ onProfileClick?: () => void;
258
+ onSettingsClick?: () => void;
256
259
  }
257
260
  declare class FormBuilder {
258
261
  private container;
@@ -304,7 +307,7 @@ declare class FormRenderer {
304
307
  constructor(container: HTMLElement, schema: FormSchema, onSubmit?: (data: any) => void, onDropdownValueChange?: (event: {
305
308
  fieldId: string;
306
309
  value: string;
307
- }) => void);
310
+ }) => void, initialData?: Record<string, any>);
308
311
  setSchema(schema: FormSchema): void;
309
312
  private render;
310
313
  }
package/dist/index.js CHANGED
@@ -5368,7 +5368,8 @@ var ICONS = {
5368
5368
  "CreditCard": '<path stroke-linecap="round" stroke-linejoin="round" d="M2.25 8.25h19.5M2.25 9h19.5m-16.5 5.25h6m-6 2.25h3m-3.75 3h15a2.25 2.25 0 002.25-2.25V6.75A2.25 2.25 0 0019.5 4.5h-15a2.25 2.25 0 00-2.25 2.25v10.5A2.25 2.25 0 004.5 19.5z" />',
5369
5369
  "MapPin": '<path stroke-linecap="round" stroke-linejoin="round" d="M15 10.5a3 3 0 11-6 0 3 3 0 016 0z" /><path stroke-linecap="round" stroke-linejoin="round" d="M19.5 10.5c0 7.142-7.5 11.25-7.5 11.25S4.5 17.642 4.5 10.5a7.5 7.5 0 1115 0z" />',
5370
5370
  "Briefcase": '<path stroke-linecap="round" stroke-linejoin="round" d="M20.25 14.15v4.25c0 1.094-.787 2.036-1.872 2.18-2.087.277-4.216.42-6.378.42s-4.291-.143-6.378-.42c-1.085-.144-1.872-1.086-1.872-2.18v-4.25m16.5 0a2.18 2.18 0 00.75-1.661V8.706c0-1.081-.768-2.015-1.837-2.175a48.114 48.114 0 00-3.413-.387m4.5 8.006c-.194.165-.42.295-.67.38-1.053.33-2.177.58-3.345.726-.26.032-.52.05-.778.066m-13.882-6.626h.008v.008h-.008v-.008zm1.096-3.837a48.116 48.116 0 00-3.413.387c-1.069.16-1.837 1.094-1.837 2.175v4.784c0 .493.196.958.536 1.344m0 0a17.8 17.8 0 013.344.726c.25.085.476.215.67.38m13.784-5.32c-.34-.386-.536-.851-.536-1.344v-4.784c0-1.081-.768-2.015-1.837-2.175a48.041 48.041 0 01-3.413-.387m-4.5 8.006c.194.165.42.295.67.38 1.053.33 2.177.58 3.345.726.26.032.52.05.778.066m0-7.384V5.626a2.25 2.25 0 00-2.25-2.25h-4.5a2.25 2.25 0 00-2.25 2.25v2.247M16.5 6h-9" />',
5371
- "Eye": '<path stroke-linecap="round" stroke-linejoin="round" d="M2.036 12.322a1.012 1.012 0 010-.639C3.423 7.51 7.36 4.5 12 4.5c4.638 0 8.573 3.007 9.963 7.178.07.207.07.431 0 .639C20.577 16.49 16.64 19.5 12 19.5c-4.638 0-8.573-3.007-9.963-7.178z" /><path stroke-linecap="round" stroke-linejoin="round" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z" />'
5371
+ "Eye": '<path stroke-linecap="round" stroke-linejoin="round" d="M2.036 12.322a1.012 1.012 0 010-.639C3.423 7.51 7.36 4.5 12 4.5c4.638 0 8.573 3.007 9.963 7.178.07.207.07.431 0 .639C20.577 16.49 16.64 19.5 12 19.5c-4.638 0-8.573-3.007-9.963-7.178z" /><path stroke-linecap="round" stroke-linejoin="round" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z" />',
5372
+ "Cog": '<path stroke-linecap="round" stroke-linejoin="round" d="M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.074.04.147.083.22.127.324.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 011.37.49l1.296 2.247a1.125 1.125 0 01-.26 1.431l-1.003.827c-.293.24-.438.613-.431.992a6.759 6.759 0 010 .255c-.007.378.138.75.43.99l1.005.828c.424.35.534.954.26 1.43l-1.298 2.247a1.125 1.125 0 01-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.57 6.57 0 01-.22.128c-.331.183-.581.495-.644.869l-.213 1.28c-.09.543-.56.941-1.11.941h-2.594c-.55 0-1.02-.398-1.11-.94l-.213-1.281c-.062-.374-.312-.686-.644-.87a6.52 6.52 0 01-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 01-1.369-.49l-1.297-2.247a1.125 1.125 0 01.26-1.431l1.004-.827c.292-.24.437-.613.43-.992a6.932 6.932 0 010-.255c.007-.378-.138-.75-.43-.99l-1.004-.828a1.125 1.125 0 01-.26-1.43l1.297-2.247a1.125 1.125 0 011.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.087.22-.128.332-.183.582-.495.644-.869l.214-1.281z" /><path stroke-linecap="round" stroke-linejoin="round" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z" />'
5372
5373
  };
5373
5374
  function getIcon(name, size = 20) {
5374
5375
  const svgString = ICONS[name] || `<path stroke-linecap="round" stroke-linejoin="round" d="M9.879 7.519c1.171-1.025 3.071-1.025 4.242 0 1.172 1.025 1.172 2.687 0 3.712-.203.179-.43.326-.67.442-.745.361-1.45.999-1.45 1.827v.75M21 12a9 9 0 11-18 0 9 9 0 0118 0zm-9 5.25h.008v.008H12v-.008z" />`;
@@ -5866,8 +5867,11 @@ function convertValidationToArray(validation) {
5866
5867
  rules.push({ type: "maxDate", value: obj.maxDate });
5867
5868
  return rules;
5868
5869
  }
5870
+ function getModelKey(field) {
5871
+ return field.fieldName ?? field.id;
5872
+ }
5869
5873
  var FormRenderer = class {
5870
- constructor(container, schema, onSubmit, onDropdownValueChange) {
5874
+ constructor(container, schema, onSubmit, onDropdownValueChange, initialData) {
5871
5875
  __publicField(this, "container");
5872
5876
  __publicField(this, "schema");
5873
5877
  __publicField(this, "data", {});
@@ -5877,6 +5881,9 @@ var FormRenderer = class {
5877
5881
  this.schema = schema;
5878
5882
  this.onSubmit = onSubmit;
5879
5883
  this.onDropdownValueChange = onDropdownValueChange;
5884
+ if (initialData && typeof initialData === "object") {
5885
+ this.data = { ...initialData };
5886
+ }
5880
5887
  this.render();
5881
5888
  }
5882
5889
  setSchema(schema) {
@@ -5891,7 +5898,8 @@ var FormRenderer = class {
5891
5898
  const sectionEl = createElement("div", { className: "space-y-3 md:space-y-4 !m-0" });
5892
5899
  sectionEl.appendChild(createElement("h2", { className: "text-xl font-semibold text-[#3b497e] dark:text-gray-200 border-b pb-2", text: section.title }));
5893
5900
  const grid = createElement("div", { className: "form-builder-grid" });
5894
- section.fields.forEach((field) => {
5901
+ const sortedFields = [...section.fields].sort((a, b) => (a.order ?? 0) - (b.order ?? 0));
5902
+ sortedFields.forEach((field) => {
5895
5903
  const isVisible = field.visible !== false;
5896
5904
  if (!isVisible) {
5897
5905
  return;
@@ -5905,8 +5913,9 @@ var FormRenderer = class {
5905
5913
  spanClass = getColSpanFromWidth(field.width || 100);
5906
5914
  }
5907
5915
  fieldWrapper.className = spanClass;
5908
- const fieldEl = FieldRenderer.render(field, this.data[field.id], (val) => {
5909
- this.data[field.id] = val;
5916
+ const modelKey = getModelKey(field);
5917
+ const fieldEl = FieldRenderer.render(field, this.data[modelKey], (val) => {
5918
+ this.data[modelKey] = val;
5910
5919
  if (field.type === "select" && this.onDropdownValueChange) {
5911
5920
  this.onDropdownValueChange({
5912
5921
  fieldId: field.id,
@@ -5933,7 +5942,8 @@ var FormRenderer = class {
5933
5942
  section.fields.forEach((field) => {
5934
5943
  if (field.visible === false)
5935
5944
  return;
5936
- const fieldValue = this.data[field.id];
5945
+ const modelKey = getModelKey(field);
5946
+ const fieldValue = this.data[modelKey];
5937
5947
  const fieldElement = form.querySelector(`input[id*="${field.id}"], textarea[id*="${field.id}"], select[id*="${field.id}"]`);
5938
5948
  if (!fieldElement) {
5939
5949
  const altElement = Array.from(form.querySelectorAll("input, textarea, select")).find((el) => {
@@ -8335,7 +8345,7 @@ var FieldWrapper = class {
8335
8345
  });
8336
8346
  }
8337
8347
  if (isSelected) {
8338
- fieldWrapper.classList.add("ring-2", "bg-[#acbdfe33]", "dark:bg-blue-900/20");
8348
+ fieldWrapper.classList.add("ring-2", "bg-[#847dff1a]", "dark:bg-blue-900/20");
8339
8349
  }
8340
8350
  fieldWrapper.appendChild(createElement("div", {
8341
8351
  className: `absolute top-2 right-6 cursor-move p-1 rounded bg-[#3b497e] p-[0.5px] mr-1 text-white group-hover:opacity-100 transition-opacity field-handle z-10 ${isSelected ? "opacity-100" : ""}`
@@ -8998,6 +9008,26 @@ var FormBuilder = class {
8998
9008
  left.appendChild(redoBtn);
8999
9009
  toolbar.appendChild(left);
9000
9010
  const right = createElement("div", { className: "flex items-center space-x-2" });
9011
+ const profileBtn = createElement("button", {
9012
+ className: "p-2 rounded hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors text-gray-600 dark:text-gray-400",
9013
+ title: "Profile",
9014
+ onclick: () => {
9015
+ if (this.options.onProfileClick) {
9016
+ this.options.onProfileClick();
9017
+ }
9018
+ }
9019
+ }, [getIcon("User", 20)]);
9020
+ right.appendChild(profileBtn);
9021
+ const settingsBtn = createElement("button", {
9022
+ className: "p-2 rounded hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors text-gray-600 dark:text-gray-400",
9023
+ title: "Settings",
9024
+ onclick: () => {
9025
+ if (this.options.onSettingsClick) {
9026
+ this.options.onSettingsClick();
9027
+ }
9028
+ }
9029
+ }, [getIcon("Cog", 20)]);
9030
+ right.appendChild(settingsBtn);
9001
9031
  const clearBtn = createElement("button", {
9002
9032
  className: "flex items-center px-3 py-2 text-sm font-medium text-red-600 bg-red-500 text-white rounded-md transition-colors",
9003
9033
  onclick: () => {
@@ -9032,12 +9062,12 @@ var FormBuilder = class {
9032
9062
  return toolbar;
9033
9063
  }
9034
9064
  renderToolbox() {
9035
- const toolbox = createElement("div", { className: "bg-[#f8faff] dark:bg-gray-900 flex flex-col h-full" });
9036
- const tabs = createElement("div", { className: "flex border-b border-gray-200 dark:border-gray-800" });
9065
+ const toolbox = createElement("div", { className: "bg-[#847dff1a] dark:bg-gray-900 flex flex-col h-full" });
9066
+ const tabs = createElement("div", { className: "flex border-b border-gray-200 dark:border-gray-800 p-1" });
9037
9067
  const createTab = (id, label) => {
9038
9068
  const isActive = this.activeTab === id;
9039
9069
  return createElement("button", {
9040
- className: `flex-1 py-3 text-sm font-medium transition-colors ${isActive ? "text-[#019FA2] border-b-2 border-[#019FA2]" : "text-gray-500 hover:text-gray-700 dark:text-gray-400"}`,
9070
+ className: `flex-1 py-3 text-sm font-medium transition-colors ${isActive ? "text-white bg-[#635bff] rounded " : "text-gray-500 hover:text-gray-700 dark:text-gray-400"}`,
9041
9071
  text: label,
9042
9072
  onclick: () => {
9043
9073
  this.activeTab = id;
@@ -9049,7 +9079,7 @@ var FormBuilder = class {
9049
9079
  tabs.appendChild(createTab("templates", "Templates"));
9050
9080
  tabs.appendChild(createTab("import", "Import"));
9051
9081
  toolbox.appendChild(tabs);
9052
- const content = createElement("div", { className: "flex-1 overflow-y-auto p-4" });
9082
+ const content = createElement("div", { className: "flex-1 overflow-y-auto p-4 bg-white" });
9053
9083
  if (this.activeTab === "fields") {
9054
9084
  const list = createElement("div", { className: "grid grid-cols-2 gap-3", id: "toolbox-list" });
9055
9085
  FIELD_TYPES.forEach((field) => {
@@ -9131,7 +9161,7 @@ var FormBuilder = class {
9131
9161
  }
9132
9162
  renderCanvas(state) {
9133
9163
  const canvas = createElement("div", {
9134
- className: "flex-1 bg-[#f8faff] dark:bg-gray-950 p-4 md:p-8 overflow-y-auto",
9164
+ className: "flex-1 dark:bg-gray-950 p-4 md:p-8 overflow-y-auto",
9135
9165
  onclick: (e) => {
9136
9166
  if (e.target === canvas || e.target === canvas.firstElementChild) {
9137
9167
  formStore.getState().selectField(null);
@@ -9152,7 +9182,7 @@ var FormBuilder = class {
9152
9182
  const sectionList = new SectionList(state.schema, state.selectedFieldId);
9153
9183
  inner.appendChild(sectionList.getElement());
9154
9184
  const addSectionBtn = createElement("button", {
9155
- className: "w-full mt-6 py-3 dark:border-gray-700 rounded-lg text-gray-500 bg-[#3b497e] text-white transition-colors flex items-center justify-center font-medium",
9185
+ className: "w-full mt-6 py-3 dark:border-gray-700 rounded-lg text-gray-500 bg-[#635bff] max-w-[180px] shadow-[0_17px_20px_-8px_rgba(77,91,236,0.231372549)] text-white transition-colors flex items-center justify-center font-medium",
9156
9186
  onclick: () => formStore.getState().addSection()
9157
9187
  }, [getIcon("Plus", 20), createElement("span", { className: "ml-2", text: "Add Section" })]);
9158
9188
  inner.appendChild(addSectionBtn);
@@ -9186,7 +9216,7 @@ var FormBuilder = class {
9186
9216
  return container;
9187
9217
  }
9188
9218
  renderConfigPanel(state, focusState = null) {
9189
- const panel = createElement("div", { className: "bg-[#f8faff] dark:bg-gray-900 flex flex-col h-full overflow-y-auto" });
9219
+ const panel = createElement("div", { className: " dark:bg-gray-900 flex flex-col h-full overflow-y-auto" });
9190
9220
  const selectedField = state.schema.sections.flatMap((s) => s.fields).find((f) => f.id === state.selectedFieldId);
9191
9221
  if (!selectedField) {
9192
9222
  panel.appendChild(createElement("div", { className: "p-4 text-center text-gray-500", text: "Select a field to configure" }));