form-builder-pro 1.2.2 → 1.2.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.css +82 -38
- package/dist/index.js +86 -72
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +86 -72
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -8795,9 +8795,12 @@ var FormBuilder = class {
|
|
|
8795
8795
|
fields: s.fields.map((f) => ({
|
|
8796
8796
|
id: f.id,
|
|
8797
8797
|
type: f.type,
|
|
8798
|
-
label: f.label
|
|
8799
|
-
|
|
8800
|
-
|
|
8798
|
+
label: f.label,
|
|
8799
|
+
layout: f.layout,
|
|
8800
|
+
width: f.width,
|
|
8801
|
+
css: f.css
|
|
8802
|
+
// Include css so style changes (textAlign, backgroundColor, etc.) trigger re-render
|
|
8803
|
+
// Exclude frequently changing text (placeholder, etc.) to prevent re-renders on typing
|
|
8801
8804
|
}))
|
|
8802
8805
|
})),
|
|
8803
8806
|
selectedField: state.selectedFieldId,
|
|
@@ -8914,13 +8917,13 @@ var FormBuilder = class {
|
|
|
8914
8917
|
main.appendChild(previewContainer2);
|
|
8915
8918
|
}
|
|
8916
8919
|
} else {
|
|
8917
|
-
const toolboxWrapper = createElement("div", { className: "form-builder-toolbox-wrapper w-full md:w-
|
|
8920
|
+
const toolboxWrapper = createElement("div", { className: "form-builder-toolbox-wrapper w-full md:w-[14rem] bg-white dark:bg-gray-900 border-r md:border-r border-b md:border-b-0 border-gray-200 dark:border-gray-800" });
|
|
8918
8921
|
toolboxWrapper.appendChild(this.renderToolbox());
|
|
8919
8922
|
main.appendChild(toolboxWrapper);
|
|
8920
8923
|
const canvasWrapper2 = createElement("div", { className: "form-builder-canvas flex-1 overflow-y-auto" });
|
|
8921
8924
|
canvasWrapper2.appendChild(this.renderCanvas(state));
|
|
8922
8925
|
main.appendChild(canvasWrapper2);
|
|
8923
|
-
const configWrapper = createElement("div", { className: "form-builder-config-wrapper w-full md:w-
|
|
8926
|
+
const configWrapper = createElement("div", { className: "form-builder-config-wrapper w-full md:w-[17rem] bg-white dark:bg-gray-900 border-l md:border-l border-t md:border-t-0 border-gray-200 dark:border-gray-800 overflow-hidden" });
|
|
8924
8927
|
configWrapper.appendChild(this.renderConfigPanel(state, focusState));
|
|
8925
8928
|
main.appendChild(configWrapper);
|
|
8926
8929
|
}
|
|
@@ -8959,12 +8962,12 @@ var FormBuilder = class {
|
|
|
8959
8962
|
}
|
|
8960
8963
|
}
|
|
8961
8964
|
renderToolbar(state) {
|
|
8962
|
-
const toolbar = createElement("div", { className: "flex items-center justify-between p-
|
|
8965
|
+
const toolbar = createElement("div", { className: "flex items-center justify-between p-2 pl-[95px] border-b bg-white dark:bg-gray-900 border-gray-200 dark:border-gray-800" });
|
|
8963
8966
|
const left = createElement("div", { className: "flex items-center " });
|
|
8964
8967
|
left.appendChild(createElement("h1", { className: "text-xl font-semibold mb-2 text-primary hidden mr-4", text: "" }));
|
|
8965
8968
|
if (state.existingForms && state.existingForms.length > 0) {
|
|
8966
8969
|
const formSelect = createElement("select", {
|
|
8967
|
-
className: "px-3 py-2 border border-gray-
|
|
8970
|
+
className: "px-3 py-2 border border-gray-200 dark:border-gray-700 rounded-md bg-transparent text-sm mr-2",
|
|
8968
8971
|
onchange: (e) => {
|
|
8969
8972
|
const formId = e.target.value;
|
|
8970
8973
|
if (formId) {
|
|
@@ -9029,7 +9032,7 @@ var FormBuilder = class {
|
|
|
9029
9032
|
}, [getIcon("Cog", 20)]);
|
|
9030
9033
|
right.appendChild(settingsBtn);
|
|
9031
9034
|
const clearBtn = createElement("button", {
|
|
9032
|
-
className: "flex items-center px-3 py-2 text-sm font-medium text-red-600 bg-red-500
|
|
9035
|
+
className: "flex items-center px-3 py-2 text-sm font-medium text-red-600 bg-[#f7a1a14d] text-red-500 rounded-md transition-colors",
|
|
9033
9036
|
onclick: () => {
|
|
9034
9037
|
if (confirm("Are you sure?")) {
|
|
9035
9038
|
formStore.getState().setSchema({ id: "new", title: "New Form", formName: "newForm", sections: [] });
|
|
@@ -9037,7 +9040,7 @@ var FormBuilder = class {
|
|
|
9037
9040
|
}
|
|
9038
9041
|
}, [getIcon("Trash2", 16), createElement("span", { className: "", title: "Clear" })]);
|
|
9039
9042
|
const previewBtn = createElement("button", {
|
|
9040
|
-
className: `flex items-center justify-center px-3 py-2 text-sm font-medium rounded-md transition-colors ${state.isPreviewMode ? "
|
|
9043
|
+
className: `flex items-center justify-center px-3 py-2 text-sm font-medium rounded-md transition-colors ${state.isPreviewMode ? "text-[#635bff] bg-[#e7e7ff] " : "text-[#635bff] bg-[#e7e7ff]"}`,
|
|
9041
9044
|
onclick: (e) => {
|
|
9042
9045
|
e.preventDefault();
|
|
9043
9046
|
e.stopPropagation();
|
|
@@ -9046,7 +9049,7 @@ var FormBuilder = class {
|
|
|
9046
9049
|
title: state.isPreviewMode ? "Exit Preview" : "Preview Form"
|
|
9047
9050
|
}, [getIcon(state.isPreviewMode ? "X" : "Eye", 16)]);
|
|
9048
9051
|
const saveBtn = createElement("button", {
|
|
9049
|
-
className: "flex items-center px-3 py-2 text-sm font-medium text-
|
|
9052
|
+
className: "flex items-center px-3 py-2 text-sm font-medium text-[#635bff] bg-[#e7e7ff] rounded-md shadow-sm transition-colors",
|
|
9050
9053
|
onclick: () => {
|
|
9051
9054
|
const schema = formStore.getState().schema;
|
|
9052
9055
|
console.log("[Form Builder] Schema being sent to app:", JSON.stringify(schema, null, 2));
|
|
@@ -9054,7 +9057,7 @@ var FormBuilder = class {
|
|
|
9054
9057
|
this.options.onSave(schema);
|
|
9055
9058
|
}
|
|
9056
9059
|
}
|
|
9057
|
-
}, [
|
|
9060
|
+
}, [createElement("span", { className: "", text: "Save" })]);
|
|
9058
9061
|
right.appendChild(clearBtn);
|
|
9059
9062
|
right.appendChild(previewBtn);
|
|
9060
9063
|
right.appendChild(saveBtn);
|
|
@@ -9062,24 +9065,29 @@ var FormBuilder = class {
|
|
|
9062
9065
|
return toolbar;
|
|
9063
9066
|
}
|
|
9064
9067
|
renderToolbox() {
|
|
9065
|
-
const toolbox = createElement("div", { className: "
|
|
9066
|
-
const tabs = createElement("div", { className: "flex border-b border-gray-200 dark:border-gray-800
|
|
9067
|
-
const createTab = (id, label) => {
|
|
9068
|
+
const toolbox = createElement("div", { className: " dark:bg-gray-900 flex flex-col h-full" });
|
|
9069
|
+
const tabs = createElement("div", { className: "flex border-b border-gray-200 dark:border-gray-800 " });
|
|
9070
|
+
const createTab = (id, label, icon, tooltip) => {
|
|
9068
9071
|
const isActive = this.activeTab === id;
|
|
9069
|
-
|
|
9070
|
-
className: `flex-1 py-3 text-
|
|
9071
|
-
|
|
9072
|
+
const btn = createElement("button", {
|
|
9073
|
+
className: `flex-1 flex items-center justify-center py-3 text-base font-bold transition-colors ${isActive ? "text-[#635bff] bg-[#e7e7ff] " : "text-gray-500 hover:text-gray-700 dark:text-gray-400"}`,
|
|
9074
|
+
title: tooltip || label,
|
|
9075
|
+
"aria-label": tooltip || label,
|
|
9072
9076
|
onclick: () => {
|
|
9073
9077
|
this.activeTab = id;
|
|
9074
9078
|
this.render();
|
|
9075
9079
|
}
|
|
9076
|
-
}
|
|
9080
|
+
}, [
|
|
9081
|
+
getIcon(icon || "ListBullet", 16),
|
|
9082
|
+
createElement("span", { className: "hidden sm:inline-block", text: label })
|
|
9083
|
+
]);
|
|
9084
|
+
return btn;
|
|
9077
9085
|
};
|
|
9078
|
-
tabs.appendChild(createTab("fields", "
|
|
9079
|
-
tabs.appendChild(createTab("templates", "
|
|
9080
|
-
tabs.appendChild(createTab("import", "Import"));
|
|
9086
|
+
tabs.appendChild(createTab("fields", "", "ListBullet", "Field types"));
|
|
9087
|
+
tabs.appendChild(createTab("templates", "", "DocumentText", "Saved templates"));
|
|
9088
|
+
tabs.appendChild(createTab("import", "", "Upload", "Import sections"));
|
|
9081
9089
|
toolbox.appendChild(tabs);
|
|
9082
|
-
const content = createElement("div", { className: "flex-1 overflow-y-auto p-4 bg-
|
|
9090
|
+
const content = createElement("div", { className: "flex-1 overflow-y-auto p-4 bg-[#e7e7ff]" });
|
|
9083
9091
|
if (this.activeTab === "fields") {
|
|
9084
9092
|
const list = createElement("div", { className: "grid grid-cols-2 gap-3", id: "toolbox-list" });
|
|
9085
9093
|
FIELD_TYPES.forEach((field) => {
|
|
@@ -9161,7 +9169,7 @@ var FormBuilder = class {
|
|
|
9161
9169
|
}
|
|
9162
9170
|
renderCanvas(state) {
|
|
9163
9171
|
const canvas = createElement("div", {
|
|
9164
|
-
className: "flex-1 dark:bg-gray-950 p-4 md:p-
|
|
9172
|
+
className: "flex-1 dark:bg-gray-950 p-4 md:p-4 overflow-y-auto",
|
|
9165
9173
|
onclick: (e) => {
|
|
9166
9174
|
if (e.target === canvas || e.target === canvas.firstElementChild) {
|
|
9167
9175
|
formStore.getState().selectField(null);
|
|
@@ -9182,7 +9190,7 @@ var FormBuilder = class {
|
|
|
9182
9190
|
const sectionList = new SectionList(state.schema, state.selectedFieldId);
|
|
9183
9191
|
inner.appendChild(sectionList.getElement());
|
|
9184
9192
|
const addSectionBtn = createElement("button", {
|
|
9185
|
-
className: "w-full mt-6 py-3 dark:border-gray-700 rounded-
|
|
9193
|
+
className: "w-full mt-6 py-3 dark:border-gray-700 rounded-md text-sm text-gray-500 bg-[#635bff] max-w-[180px] text-white transition-colors flex items-center justify-center font-medium",
|
|
9186
9194
|
onclick: () => formStore.getState().addSection()
|
|
9187
9195
|
}, [getIcon("Plus", 20), createElement("span", { className: "ml-2", text: "Add Section" })]);
|
|
9188
9196
|
inner.appendChild(addSectionBtn);
|
|
@@ -9192,7 +9200,7 @@ var FormBuilder = class {
|
|
|
9192
9200
|
// Helper method to create a modern checkbox field with better UX
|
|
9193
9201
|
createCheckboxField(label, checked, onChange, id) {
|
|
9194
9202
|
const uniqueId = id || `checkbox-${Math.random().toString(36).substr(2, 9)}`;
|
|
9195
|
-
const container = createElement("div", { className: "flex items-center gap-3 py-
|
|
9203
|
+
const container = createElement("div", { className: "flex items-center gap-3 py-1 px-1 rounded-lg hover:bg-gray-50 dark:hover:bg-gray-800/50 transition-colors cursor-pointer" });
|
|
9196
9204
|
const checkbox = createElement("input", {
|
|
9197
9205
|
type: "checkbox",
|
|
9198
9206
|
id: uniqueId,
|
|
@@ -9229,11 +9237,11 @@ var FormBuilder = class {
|
|
|
9229
9237
|
onclick: () => formStore.getState().selectField(null)
|
|
9230
9238
|
}, [getIcon("X", 20)]));
|
|
9231
9239
|
panel.appendChild(header);
|
|
9232
|
-
const body = createElement("div", { className: "flex-1 overflow-y-auto p-4 space-y-
|
|
9240
|
+
const body = createElement("div", { className: "flex-1 overflow-y-auto p-4 px-2 space-y-3", id: "config-panel-body" });
|
|
9233
9241
|
const labelGroup = createElement("div");
|
|
9234
|
-
labelGroup.appendChild(createElement("label", { className: "block text-sm font-
|
|
9242
|
+
labelGroup.appendChild(createElement("label", { className: "block text-sm font-normal text-gray-700 dark:text-gray-300 mb-1", text: "Label" }));
|
|
9235
9243
|
labelGroup.appendChild(createElement("input", {
|
|
9236
|
-
className: "w-full px-3 py-2 border border-gray-
|
|
9244
|
+
className: "w-full px-3 py-2 border border-gray-200 dark:border-gray-700 rounded-md bg-transparent",
|
|
9237
9245
|
value: selectedField.label,
|
|
9238
9246
|
"data-focus-id": `field-label-${selectedField.id}`,
|
|
9239
9247
|
oninput: (e) => {
|
|
@@ -9242,9 +9250,9 @@ var FormBuilder = class {
|
|
|
9242
9250
|
}));
|
|
9243
9251
|
body.appendChild(labelGroup);
|
|
9244
9252
|
const placeholderGroup = createElement("div");
|
|
9245
|
-
placeholderGroup.appendChild(createElement("label", { className: "block text-sm font-
|
|
9253
|
+
placeholderGroup.appendChild(createElement("label", { className: "block text-sm font-normal text-gray-700 dark:text-gray-300 mb-1", text: "Placeholder" }));
|
|
9246
9254
|
placeholderGroup.appendChild(createElement("input", {
|
|
9247
|
-
className: "w-full px-3 py-2 border border-gray-
|
|
9255
|
+
className: "w-full px-3 py-2 border border-gray-200 dark:border-gray-700 rounded-md bg-transparent",
|
|
9248
9256
|
value: selectedField.placeholder || "",
|
|
9249
9257
|
"data-focus-id": `field-placeholder-${selectedField.id}`,
|
|
9250
9258
|
oninput: (e) => {
|
|
@@ -9268,18 +9276,24 @@ var FormBuilder = class {
|
|
|
9268
9276
|
layoutLabelRow.appendChild(spanValueDisplay);
|
|
9269
9277
|
layoutGroup.appendChild(layoutLabelRow);
|
|
9270
9278
|
const spanButtonsContainer = createElement("div", { className: "grid grid-cols-6 gap-2 mt-2" });
|
|
9279
|
+
const fieldId = selectedField.id;
|
|
9271
9280
|
for (let span = 1; span <= 12; span++) {
|
|
9272
9281
|
const isActive = currentSpan === span;
|
|
9273
9282
|
const spanBtn = createElement("button", {
|
|
9274
9283
|
type: "button",
|
|
9275
|
-
className: `span-preset-btn px-2 py-1.5 text-xs rounded transition-colors ${isActive ? "bg-
|
|
9284
|
+
className: `span-preset-btn px-2 py-1.5 text-xs rounded transition-colors cursor-pointer ${isActive ? "bg-[#e7e7ff] text-[#635bff] font-semibold" : "bg-white border-2 border-[#e7e7ff] dark:bg-gray-800 text-gray-600 dark:text-gray-300 hover:bg-gray-200 dark:hover:bg-gray-700"}`,
|
|
9276
9285
|
text: `${span}`,
|
|
9277
|
-
title: `${span} column${span > 1 ? "s" : ""} (${Math.round(span / 12 * 100)}%)
|
|
9278
|
-
|
|
9279
|
-
|
|
9280
|
-
|
|
9286
|
+
title: `${span} column${span > 1 ? "s" : ""} (${Math.round(span / 12 * 100)}%)`
|
|
9287
|
+
});
|
|
9288
|
+
spanBtn.addEventListener("click", (e) => {
|
|
9289
|
+
e.preventDefault();
|
|
9290
|
+
e.stopPropagation();
|
|
9291
|
+
const state2 = formStore.getState();
|
|
9292
|
+
const field = state2.schema.sections.flatMap((s) => s.fields).find((f) => f.id === fieldId);
|
|
9293
|
+
if (field) {
|
|
9294
|
+
const layout = field.layout || { row: 0, column: 0 };
|
|
9295
|
+
state2.updateField(fieldId, {
|
|
9281
9296
|
layout: { ...layout, span },
|
|
9282
|
-
// Also update width for backward compatibility
|
|
9283
9297
|
width: Math.round(span / 12 * 100)
|
|
9284
9298
|
});
|
|
9285
9299
|
}
|
|
@@ -9363,9 +9377,9 @@ var FormBuilder = class {
|
|
|
9363
9377
|
};
|
|
9364
9378
|
if (activeMasterTypes.length > 0) {
|
|
9365
9379
|
const groupNameGroup = createElement("div", { className: "mb-4" });
|
|
9366
|
-
groupNameGroup.appendChild(createElement("label", { className: "block text-sm font-
|
|
9380
|
+
groupNameGroup.appendChild(createElement("label", { className: "block text-sm font-normal text-gray-700 dark:text-gray-300 mb-1", text: "Master List" }));
|
|
9367
9381
|
const groupNameSelect = createElement("select", {
|
|
9368
|
-
className: "w-full px-3 py-2 border border-gray-
|
|
9382
|
+
className: "w-full px-3 py-2 border border-gray-200 dark:border-gray-700 rounded-md bg-transparent",
|
|
9369
9383
|
onchange: (e) => {
|
|
9370
9384
|
const selectedEnumName = e.target.value;
|
|
9371
9385
|
if (selectedEnumName) {
|
|
@@ -9451,9 +9465,9 @@ var FormBuilder = class {
|
|
|
9451
9465
|
const optionSourceHeader = createElement("h3", { className: "text-xs font-semibold text-gray-500 uppercase tracking-wider mb-3 mt-6", text: "Option Source" });
|
|
9452
9466
|
body.appendChild(optionSourceHeader);
|
|
9453
9467
|
const optionSourceGroup = createElement("div", { className: "mb-4" });
|
|
9454
|
-
optionSourceGroup.appendChild(createElement("label", { className: "block text-sm font-
|
|
9468
|
+
optionSourceGroup.appendChild(createElement("label", { className: "block text-sm font-normal text-gray-700 dark:text-gray-300 mb-1", text: "Source Type" }));
|
|
9455
9469
|
const optionSourceSelect = createElement("select", {
|
|
9456
|
-
className: "w-full px-3 py-2 border border-gray-
|
|
9470
|
+
className: "w-full px-3 py-2 border border-gray-200 dark:border-gray-700 rounded-md bg-transparent",
|
|
9457
9471
|
value: selectedField.optionSource || "STATIC",
|
|
9458
9472
|
onchange: (e) => {
|
|
9459
9473
|
const source = e.target.value;
|
|
@@ -9478,9 +9492,9 @@ var FormBuilder = class {
|
|
|
9478
9492
|
body.appendChild(optionSourceGroup);
|
|
9479
9493
|
if (selectedField.type === "select" && selectedField.optionSource === "LOOKUP") {
|
|
9480
9494
|
const lookupSourceTypeGroup = createElement("div", { className: "mb-4" });
|
|
9481
|
-
lookupSourceTypeGroup.appendChild(createElement("label", { className: "block text-sm font-
|
|
9495
|
+
lookupSourceTypeGroup.appendChild(createElement("label", { className: "block text-sm font-normal text-gray-700 dark:text-gray-300 mb-1", text: "Lookup Source Type" }));
|
|
9482
9496
|
const lookupSourceTypeSelect = createElement("select", {
|
|
9483
|
-
className: "w-full px-3 py-2 border border-gray-
|
|
9497
|
+
className: "w-full px-3 py-2 border border-gray-200 dark:border-gray-700 rounded-md bg-transparent",
|
|
9484
9498
|
value: selectedField.lookupSourceType || "MODULE",
|
|
9485
9499
|
onchange: (e) => {
|
|
9486
9500
|
const lookupSourceType = e.target.value;
|
|
@@ -9499,9 +9513,9 @@ var FormBuilder = class {
|
|
|
9499
9513
|
if (selectedField.lookupSourceType === "MODULE") {
|
|
9500
9514
|
const moduleList = this.options.moduleList || [];
|
|
9501
9515
|
const lookupSourceGroup = createElement("div", { className: "mb-4" });
|
|
9502
|
-
lookupSourceGroup.appendChild(createElement("label", { className: "block text-sm font-
|
|
9516
|
+
lookupSourceGroup.appendChild(createElement("label", { className: "block text-sm font-normal text-gray-700 dark:text-gray-300 mb-1", text: "Lookup Source" }));
|
|
9503
9517
|
const lookupSourceSelect = createElement("select", {
|
|
9504
|
-
className: "w-full px-3 py-2 border border-gray-
|
|
9518
|
+
className: "w-full px-3 py-2 border border-gray-200 dark:border-gray-700 rounded-md bg-transparent",
|
|
9505
9519
|
value: selectedField.lookupSource || "",
|
|
9506
9520
|
onchange: (e) => {
|
|
9507
9521
|
const lookupSource = e.target.value;
|
|
@@ -9536,9 +9550,9 @@ var FormBuilder = class {
|
|
|
9536
9550
|
const masterTypes = formStore.getState().masterTypes;
|
|
9537
9551
|
const activeMasterTypes = masterTypes.filter((mt) => mt.active === true);
|
|
9538
9552
|
const lookupSourceGroup = createElement("div", { className: "mb-4" });
|
|
9539
|
-
lookupSourceGroup.appendChild(createElement("label", { className: "block text-sm font-
|
|
9553
|
+
lookupSourceGroup.appendChild(createElement("label", { className: "block text-sm font-normal text-gray-700 dark:text-gray-300 mb-1", text: "Lookup Source" }));
|
|
9540
9554
|
const lookupSourceSelect = createElement("select", {
|
|
9541
|
-
className: "w-full px-3 py-2 border border-gray-
|
|
9555
|
+
className: "w-full px-3 py-2 border border-gray-200 dark:border-gray-700 rounded-md bg-transparent",
|
|
9542
9556
|
value: selectedField.lookupSource || "",
|
|
9543
9557
|
onchange: (e) => {
|
|
9544
9558
|
const lookupSource = e.target.value;
|
|
@@ -9572,9 +9586,9 @@ var FormBuilder = class {
|
|
|
9572
9586
|
body.appendChild(lookupSourceGroup);
|
|
9573
9587
|
}
|
|
9574
9588
|
const lookupValueFieldGroup = createElement("div", { className: "mb-4" });
|
|
9575
|
-
lookupValueFieldGroup.appendChild(createElement("label", { className: "block text-sm font-
|
|
9589
|
+
lookupValueFieldGroup.appendChild(createElement("label", { className: "block text-sm font-normal text-gray-700 dark:text-gray-300 mb-1", text: "Lookup Value Field" }));
|
|
9576
9590
|
const lookupValueFieldSelect = createElement("select", {
|
|
9577
|
-
className: "w-full px-3 py-2 border border-gray-
|
|
9591
|
+
className: "w-full px-3 py-2 border border-gray-200 dark:border-gray-700 rounded-md bg-transparent",
|
|
9578
9592
|
value: selectedField.lookupValueField || "",
|
|
9579
9593
|
disabled: !selectedField.lookupSource,
|
|
9580
9594
|
onchange: (e) => {
|
|
@@ -9597,9 +9611,9 @@ var FormBuilder = class {
|
|
|
9597
9611
|
lookupValueFieldGroup.appendChild(lookupValueFieldSelect);
|
|
9598
9612
|
body.appendChild(lookupValueFieldGroup);
|
|
9599
9613
|
const lookupLabelFieldGroup = createElement("div", { className: "mb-4" });
|
|
9600
|
-
lookupLabelFieldGroup.appendChild(createElement("label", { className: "block text-sm font-
|
|
9614
|
+
lookupLabelFieldGroup.appendChild(createElement("label", { className: "block text-sm font-normal text-gray-700 dark:text-gray-300 mb-1", text: "Lookup Label Field" }));
|
|
9601
9615
|
const lookupLabelFieldSelect = createElement("select", {
|
|
9602
|
-
className: "w-full px-3 py-2 border border-gray-
|
|
9616
|
+
className: "w-full px-3 py-2 border border-gray-200 dark:border-gray-700 rounded-md bg-transparent",
|
|
9603
9617
|
value: selectedField.lookupLabelField || "",
|
|
9604
9618
|
disabled: !selectedField.lookupSource,
|
|
9605
9619
|
onchange: (e) => {
|
|
@@ -9763,10 +9777,10 @@ var FormBuilder = class {
|
|
|
9763
9777
|
const validationElements = [];
|
|
9764
9778
|
if (["text", "textarea", "email", "password"].includes(selectedField.type)) {
|
|
9765
9779
|
const minLenGroup = createElement("div", { className: "mb-3" });
|
|
9766
|
-
minLenGroup.appendChild(createElement("label", { className: "block text-sm font-
|
|
9780
|
+
minLenGroup.appendChild(createElement("label", { className: "block text-sm font-normal text-gray-700 dark:text-gray-300 mb-1", text: "Min Length" }));
|
|
9767
9781
|
minLenGroup.appendChild(createElement("input", {
|
|
9768
9782
|
type: "number",
|
|
9769
|
-
className: "w-full px-3 py-2 border border-gray-
|
|
9783
|
+
className: "w-full px-3 py-2 border border-gray-200 dark:border-gray-700 rounded-md bg-transparent",
|
|
9770
9784
|
value: getRuleValue("minLength") || "",
|
|
9771
9785
|
placeholder: "e.g. 3",
|
|
9772
9786
|
onchange: (e) => {
|
|
@@ -9776,10 +9790,10 @@ var FormBuilder = class {
|
|
|
9776
9790
|
}));
|
|
9777
9791
|
validationElements.push(minLenGroup);
|
|
9778
9792
|
const maxLenGroup = createElement("div", { className: "mb-3" });
|
|
9779
|
-
maxLenGroup.appendChild(createElement("label", { className: "block text-sm font-
|
|
9793
|
+
maxLenGroup.appendChild(createElement("label", { className: "block text-sm font-normal text-gray-700 dark:text-gray-300 mb-1", text: "Max Length" }));
|
|
9780
9794
|
maxLenGroup.appendChild(createElement("input", {
|
|
9781
9795
|
type: "number",
|
|
9782
|
-
className: "w-full px-3 py-2 border border-gray-
|
|
9796
|
+
className: "w-full px-3 py-2 border border-gray-200 dark:border-gray-700 rounded-md bg-transparent",
|
|
9783
9797
|
value: getRuleValue("maxLength") || "",
|
|
9784
9798
|
placeholder: "e.g. 100",
|
|
9785
9799
|
onchange: (e) => {
|
|
@@ -9789,7 +9803,7 @@ var FormBuilder = class {
|
|
|
9789
9803
|
}));
|
|
9790
9804
|
validationElements.push(maxLenGroup);
|
|
9791
9805
|
const regexGroup = createElement("div", { className: "mb-3" });
|
|
9792
|
-
regexGroup.appendChild(createElement("label", { className: "block text-sm font-
|
|
9806
|
+
regexGroup.appendChild(createElement("label", { className: "block text-sm font-normal text-gray-700 dark:text-gray-300 mb-1", text: "Regex Pattern" }));
|
|
9793
9807
|
const updateExamples = (examplesList2, regex, preset) => {
|
|
9794
9808
|
examplesList2.innerHTML = "";
|
|
9795
9809
|
let testCases = [];
|
|
@@ -9855,7 +9869,7 @@ var FormBuilder = class {
|
|
|
9855
9869
|
const presetGroup = createElement("div", { className: "mb-2" });
|
|
9856
9870
|
presetGroup.appendChild(createElement("label", { className: "block text-xs font-medium text-gray-600 dark:text-gray-400 mb-1", text: "Regex Presets (Optional)" }));
|
|
9857
9871
|
const presetSelect = createElement("select", {
|
|
9858
|
-
className: "w-full px-3 py-2 border border-gray-
|
|
9872
|
+
className: "w-full px-3 py-2 border border-gray-200 dark:border-gray-700 rounded-md bg-transparent text-sm",
|
|
9859
9873
|
value: selectedPresetId,
|
|
9860
9874
|
onchange: (e) => {
|
|
9861
9875
|
const presetId = e.target.value;
|
|
@@ -9895,7 +9909,7 @@ var FormBuilder = class {
|
|
|
9895
9909
|
}
|
|
9896
9910
|
regexInput = createElement("input", {
|
|
9897
9911
|
type: "text",
|
|
9898
|
-
className: "w-full px-3 py-2 border border-gray-
|
|
9912
|
+
className: "w-full px-3 py-2 border border-gray-200 dark:border-gray-700 rounded-md bg-transparent",
|
|
9899
9913
|
value: currentRegex,
|
|
9900
9914
|
placeholder: selectedField.type === "email" ? "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$" : "e.g. ^[A-Z]+$",
|
|
9901
9915
|
"data-focus-id": `field-regex-${selectedField.id}`,
|
|
@@ -9948,10 +9962,10 @@ var FormBuilder = class {
|
|
|
9948
9962
|
}
|
|
9949
9963
|
if (selectedField.type === "checkbox") {
|
|
9950
9964
|
const minSelectedGroup = createElement("div", { className: "mb-3" });
|
|
9951
|
-
minSelectedGroup.appendChild(createElement("label", { className: "block text-sm font-
|
|
9965
|
+
minSelectedGroup.appendChild(createElement("label", { className: "block text-sm font-normal text-gray-700 dark:text-gray-300 mb-1", text: "Min Selected" }));
|
|
9952
9966
|
minSelectedGroup.appendChild(createElement("input", {
|
|
9953
9967
|
type: "number",
|
|
9954
|
-
className: "w-full px-3 py-2 border border-gray-
|
|
9968
|
+
className: "w-full px-3 py-2 border border-gray-200 dark:border-gray-700 rounded-md bg-transparent",
|
|
9955
9969
|
value: getRuleValue("minSelected"),
|
|
9956
9970
|
placeholder: "e.g. 1",
|
|
9957
9971
|
min: "0",
|
|
@@ -9962,10 +9976,10 @@ var FormBuilder = class {
|
|
|
9962
9976
|
}));
|
|
9963
9977
|
validationElements.push(minSelectedGroup);
|
|
9964
9978
|
const maxSelectedGroup = createElement("div", { className: "mb-3" });
|
|
9965
|
-
maxSelectedGroup.appendChild(createElement("label", { className: "block text-sm font-
|
|
9979
|
+
maxSelectedGroup.appendChild(createElement("label", { className: "block text-sm font-normal text-gray-700 dark:text-gray-300 mb-1", text: "Max Selected" }));
|
|
9966
9980
|
maxSelectedGroup.appendChild(createElement("input", {
|
|
9967
9981
|
type: "number",
|
|
9968
|
-
className: "w-full px-3 py-2 border border-gray-
|
|
9982
|
+
className: "w-full px-3 py-2 border border-gray-200 dark:border-gray-700 rounded-md bg-transparent",
|
|
9969
9983
|
value: getRuleValue("maxSelected"),
|
|
9970
9984
|
placeholder: "e.g. 2",
|
|
9971
9985
|
min: "1",
|
|
@@ -9978,10 +9992,10 @@ var FormBuilder = class {
|
|
|
9978
9992
|
}
|
|
9979
9993
|
if (selectedField.type === "date") {
|
|
9980
9994
|
const minDateGroup = createElement("div", { className: "mb-3" });
|
|
9981
|
-
minDateGroup.appendChild(createElement("label", { className: "block text-sm font-
|
|
9995
|
+
minDateGroup.appendChild(createElement("label", { className: "block text-sm font-normal text-gray-700 dark:text-gray-300 mb-1", text: "Minimum Date" }));
|
|
9982
9996
|
minDateGroup.appendChild(createElement("input", {
|
|
9983
9997
|
type: "date",
|
|
9984
|
-
className: "w-full px-3 py-2 border border-gray-
|
|
9998
|
+
className: "w-full px-3 py-2 border border-gray-200 dark:border-gray-700 rounded-md bg-transparent",
|
|
9985
9999
|
value: validationObj.minDate || "",
|
|
9986
10000
|
onchange: (e) => {
|
|
9987
10001
|
const val = e.target.value;
|
|
@@ -9990,10 +10004,10 @@ var FormBuilder = class {
|
|
|
9990
10004
|
}));
|
|
9991
10005
|
validationElements.push(minDateGroup);
|
|
9992
10006
|
const maxDateGroup = createElement("div", { className: "mb-3" });
|
|
9993
|
-
maxDateGroup.appendChild(createElement("label", { className: "block text-sm font-
|
|
10007
|
+
maxDateGroup.appendChild(createElement("label", { className: "block text-sm font-normal text-gray-700 dark:text-gray-300 mb-1", text: "Maximum Date" }));
|
|
9994
10008
|
maxDateGroup.appendChild(createElement("input", {
|
|
9995
10009
|
type: "date",
|
|
9996
|
-
className: "w-full px-3 py-2 border border-gray-
|
|
10010
|
+
className: "w-full px-3 py-2 border border-gray-200 dark:border-gray-700 rounded-md bg-transparent",
|
|
9997
10011
|
value: validationObj.maxDate || "",
|
|
9998
10012
|
onchange: (e) => {
|
|
9999
10013
|
const val = e.target.value;
|
|
@@ -10032,9 +10046,9 @@ var FormBuilder = class {
|
|
|
10032
10046
|
state2.updateField(selectedField.id, updatePayload);
|
|
10033
10047
|
};
|
|
10034
10048
|
const paddingGroup = createElement("div", { className: "mb-3" });
|
|
10035
|
-
paddingGroup.appendChild(createElement("label", { className: "block text-sm font-
|
|
10049
|
+
paddingGroup.appendChild(createElement("label", { className: "block text-sm font-normal text-gray-700 dark:text-gray-300 mb-1", text: "Padding" }));
|
|
10036
10050
|
const paddingSelect = createElement("select", {
|
|
10037
|
-
className: "w-full px-3 py-2 border border-gray-
|
|
10051
|
+
className: "w-full px-3 py-2 border border-gray-200 dark:border-gray-700 rounded-md bg-white dark:bg-gray-800 text-sm",
|
|
10038
10052
|
onchange: (e) => {
|
|
10039
10053
|
updateStyleProp("padding", e.target.value);
|
|
10040
10054
|
}
|
|
@@ -10053,7 +10067,7 @@ var FormBuilder = class {
|
|
|
10053
10067
|
paddingGroup.appendChild(paddingSelect);
|
|
10054
10068
|
body.appendChild(paddingGroup);
|
|
10055
10069
|
const bgColorGroup = createElement("div", { className: "mb-3" });
|
|
10056
|
-
bgColorGroup.appendChild(createElement("label", { className: "block text-sm font-
|
|
10070
|
+
bgColorGroup.appendChild(createElement("label", { className: "block text-sm font-normal text-gray-700 dark:text-gray-300 mb-1", text: "Background Color" }));
|
|
10057
10071
|
const bgColorRow = createElement("div", { className: "flex items-center gap-2" });
|
|
10058
10072
|
const bgColorInput = createElement("input", {
|
|
10059
10073
|
type: "color",
|
|
@@ -10078,7 +10092,7 @@ var FormBuilder = class {
|
|
|
10078
10092
|
bgColorGroup.appendChild(bgColorRow);
|
|
10079
10093
|
body.appendChild(bgColorGroup);
|
|
10080
10094
|
const alignGroup = createElement("div", { className: "mb-3" });
|
|
10081
|
-
alignGroup.appendChild(createElement("label", { className: "block text-sm font-
|
|
10095
|
+
alignGroup.appendChild(createElement("label", { className: "block text-sm font-normal text-gray-700 dark:text-gray-300 mb-1", text: "Text Alignment" }));
|
|
10082
10096
|
const alignButtonsRow = createElement("div", { className: "flex gap-1" });
|
|
10083
10097
|
const alignments = [
|
|
10084
10098
|
{ value: "left", icon: "AlignLeft" },
|
|
@@ -10102,10 +10116,10 @@ var FormBuilder = class {
|
|
|
10102
10116
|
alignGroup.appendChild(alignButtonsRow);
|
|
10103
10117
|
body.appendChild(alignGroup);
|
|
10104
10118
|
const cssClassGroup = createElement("div", { className: "mb-3" });
|
|
10105
|
-
cssClassGroup.appendChild(createElement("label", { className: "block text-sm font-
|
|
10119
|
+
cssClassGroup.appendChild(createElement("label", { className: "block text-sm font-normal text-gray-700 dark:text-gray-300 mb-1", text: "Custom CSS Class" }));
|
|
10106
10120
|
cssClassGroup.appendChild(createElement("input", {
|
|
10107
10121
|
type: "text",
|
|
10108
|
-
className: "w-full px-3 py-2 border border-gray-
|
|
10122
|
+
className: "w-full px-3 py-2 border border-gray-200 dark:border-gray-700 rounded-md bg-transparent text-sm",
|
|
10109
10123
|
value: selectedField.css?.class || "",
|
|
10110
10124
|
placeholder: "e.g. my-custom-class",
|
|
10111
10125
|
"data-focus-id": `field-css-class-${selectedField.id}`,
|
|
@@ -10157,7 +10171,7 @@ var FormBuilder = class {
|
|
|
10157
10171
|
initialCssStyleValue = preservedValue;
|
|
10158
10172
|
}
|
|
10159
10173
|
const cssStyleTextarea = createElement("textarea", {
|
|
10160
|
-
className: "w-full px-3 py-2 border border-gray-
|
|
10174
|
+
className: "w-full px-3 py-2 border border-gray-200 dark:border-gray-700 rounded-md bg-transparent text-xs font-mono",
|
|
10161
10175
|
rows: 3,
|
|
10162
10176
|
placeholder: '{"padding": "8px", "backgroundColor": "#f0f0f0"}',
|
|
10163
10177
|
"data-focus-id": cssStyleId,
|