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.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", {
|