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