form-builder-pro 1.4.3 → 1.4.4

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.js CHANGED
@@ -4083,6 +4083,7 @@ var LOOKUP_SOURCE_TYPE_OPTIONS = [
4083
4083
  { value: "SETTINGS", label: "Settings Entity" }
4084
4084
  ];
4085
4085
  var generateId = () => Math.random().toString(36).substring(2, 9);
4086
+ var generateFieldName = () => `field_${Date.now()}_${Math.random().toString(36).substring(2, 5)}`;
4086
4087
  var FIELD_TYPES = [
4087
4088
  { type: "text", label: "Text Input", icon: "Type" },
4088
4089
  { type: "textarea", label: "Text Area", icon: "DocumentText" },
@@ -4357,6 +4358,8 @@ var cloneField = (field) => {
4357
4358
  return {
4358
4359
  ...field,
4359
4360
  id: generateId(),
4361
+ fieldName: generateFieldName(),
4362
+ // Always generate a fresh unique name on clone
4360
4363
  // Ensure options are also cloned if present
4361
4364
  options: field.options ? field.options.map((opt) => ({ ...opt })) : void 0,
4362
4365
  validation: field.validation ? field.validation.map((v) => ({ ...v })) : void 0,
@@ -5754,6 +5757,7 @@ var formStore = createStore((set, get) => ({
5754
5757
  const baseField = {
5755
5758
  id: generateId(),
5756
5759
  type,
5760
+ fieldName: generateFieldName(),
5757
5761
  ...DEFAULT_FIELD_CONFIG[type]
5758
5762
  };
5759
5763
  let newField = { ...baseField };
@@ -12415,6 +12419,35 @@ var FormBuilder = class {
12415
12419
  }, [getIcon("X", 20)]));
12416
12420
  panel.appendChild(header);
12417
12421
  const body = createElement("div", { className: "flex-1 overflow-y-auto p-4 px-2 space-y-3", id: "config-panel-body" });
12422
+ const nameGroup = createElement("div");
12423
+ nameGroup.appendChild(createElement("label", { className: "block text-sm font-normal text-gray-700 dark:text-gray-300 mb-1", text: "Name" }));
12424
+ const currentFieldName = selectedField.fieldName || generateFieldName();
12425
+ if (!selectedField.fieldName) {
12426
+ formStore.getState().updateField(selectedField.id, { fieldName: currentFieldName });
12427
+ }
12428
+ const nameInput = createElement("input", {
12429
+ className: "w-full px-3 py-2 border border-gray-200 dark:border-gray-700 rounded-md bg-transparent font-mono text-xs",
12430
+ value: currentFieldName,
12431
+ "data-focus-id": `field-name-${selectedField.id}`,
12432
+ placeholder: "field_...",
12433
+ oninput: (e) => {
12434
+ const fieldId2 = selectedField.id;
12435
+ const value = e.target.value.trim();
12436
+ const key = `fieldname-${fieldId2}`;
12437
+ const existing = labelUpdateTimeouts.get(key);
12438
+ if (existing)
12439
+ clearTimeout(existing);
12440
+ const timeoutId = setTimeout(() => {
12441
+ labelUpdateTimeouts.delete(key);
12442
+ if (value) {
12443
+ formStore.getState().updateField(fieldId2, { fieldName: value });
12444
+ }
12445
+ }, LABEL_DEBOUNCE_MS);
12446
+ labelUpdateTimeouts.set(key, timeoutId);
12447
+ }
12448
+ });
12449
+ nameGroup.appendChild(nameInput);
12450
+ body.appendChild(nameGroup);
12418
12451
  const labelGroup = createElement("div");
12419
12452
  labelGroup.appendChild(createElement("label", { className: "block text-sm font-normal text-gray-700 dark:text-gray-300 mb-1", text: "Label" }));
12420
12453
  labelGroup.appendChild(createElement("input", {