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 +33 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +33 -0
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
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", {
|