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