formeo 4.2.4 → 4.2.5
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/demo/assets/css/demo.min.css +1 -1
- package/dist/demo/assets/css/demo.min.css.gz +0 -0
- package/dist/demo/assets/css/formeo.min.css +1 -1
- package/dist/demo/assets/js/demo.min.js +47 -47
- package/dist/demo/assets/js/demo.min.js.gz +0 -0
- package/dist/demo/assets/js/formeo.cjs.js +76 -25
- package/dist/demo/assets/js/formeo.es.js +76 -25
- package/dist/demo/assets/js/formeo.min.cjs.js +2 -2
- package/dist/demo/assets/js/formeo.min.es.js +3 -3
- package/dist/demo/assets/js/formeo.min.js +76 -25
- package/dist/demo/assets/js/formeo.min.umd.js +2 -2
- package/dist/demo/assets/js/formeo.umd.js +76 -25
- package/dist/demo/assets/js/index.min.js +1 -1
- package/dist/demo/assets/js/index.min2.js +1 -1
- package/dist/demo/assets/js/index.min3.js +1 -1
- package/dist/demo/assets/js/mode-json.min.js +1 -1
- package/dist/demo/assets/js/mode-json.min.js.gz +0 -0
- package/dist/demo/assets/js/theme-github_light_default.min.js +1 -1
- package/dist/demo/index.html +1 -1
- package/dist/formeo.cjs.js +76 -25
- package/dist/formeo.css +1 -1
- package/dist/formeo.es.js +76 -25
- package/dist/formeo.min.cjs.js +2 -2
- package/dist/formeo.min.css +1 -1
- package/dist/formeo.min.es.js +3 -3
- package/dist/formeo.min.js +76 -25
- package/dist/formeo.min.umd.js +2 -2
- package/dist/formeo.umd.js +76 -25
- package/package.json +1 -1
package/dist/formeo.es.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
|
|
2
2
|
/**
|
|
3
3
|
formeo - https://formeo.io
|
|
4
|
-
Version: 4.2.
|
|
4
|
+
Version: 4.2.4
|
|
5
5
|
Author: Draggable https://draggable.io
|
|
6
6
|
*/
|
|
7
7
|
|
|
@@ -431,7 +431,7 @@ if (window !== void 0) {
|
|
|
431
431
|
window.SmartTooltip = SmartTooltip;
|
|
432
432
|
}
|
|
433
433
|
const name$1 = "formeo";
|
|
434
|
-
const version$2 = "4.2.
|
|
434
|
+
const version$2 = "4.2.4";
|
|
435
435
|
const pkg = {
|
|
436
436
|
name: name$1,
|
|
437
437
|
version: version$2
|
|
@@ -5841,6 +5841,12 @@ const iconFontTemplates = {
|
|
|
5841
5841
|
fontello: (icon) => `<i class="${iconPrefix}${icon}">${icon}</i>`
|
|
5842
5842
|
};
|
|
5843
5843
|
const inputTags = /* @__PURE__ */ new Set(["input", "textarea", "select"]);
|
|
5844
|
+
const stripOn = (str) => str.replace(/^on([A-Z])/, (_, l) => l.toLowerCase());
|
|
5845
|
+
const useCaptureEvts = /* @__PURE__ */ new Set(["focus", "blur"]);
|
|
5846
|
+
const defaultActionHandler = (event) => {
|
|
5847
|
+
const eventName = stripOn(event);
|
|
5848
|
+
return (node, cb) => node.addEventListener(eventName, cb, useCaptureEvts.has(eventName));
|
|
5849
|
+
};
|
|
5844
5850
|
const getName = (elem = {}) => {
|
|
5845
5851
|
let name2 = elem?.attrs?.name || elem?.name;
|
|
5846
5852
|
if (name2) {
|
|
@@ -6046,12 +6052,10 @@ class DOM {
|
|
|
6046
6052
|
onRender: dom.onRender,
|
|
6047
6053
|
render: dom.onRender
|
|
6048
6054
|
};
|
|
6049
|
-
const useCaptureEvts = ["focus", "blur"];
|
|
6050
|
-
const defaultHandler = (event) => (node2, cb) => node2.addEventListener(event, cb, useCaptureEvts.includes(event));
|
|
6051
6055
|
return Object.entries(actions2).map(([event, cb]) => {
|
|
6052
6056
|
const cbs = Array.isArray(cb) ? cb : [cb];
|
|
6053
6057
|
return cbs.map((cb2) => {
|
|
6054
|
-
const action = handlers[event] ||
|
|
6058
|
+
const action = handlers[event] || defaultActionHandler(event);
|
|
6055
6059
|
return action(node, cb2);
|
|
6056
6060
|
});
|
|
6057
6061
|
});
|
|
@@ -10854,7 +10858,7 @@ const processOptions = ({ editorContainer, renderContainer, formData, ...opts })
|
|
|
10854
10858
|
};
|
|
10855
10859
|
const baseId = (id) => {
|
|
10856
10860
|
const match2 = id.match(UUID_REGEXP);
|
|
10857
|
-
return match2?.[0] || id
|
|
10861
|
+
return match2?.[0] || id;
|
|
10858
10862
|
};
|
|
10859
10863
|
const isVisible = (elem) => {
|
|
10860
10864
|
if (!elem) return false;
|
|
@@ -10939,12 +10943,13 @@ const targetPropertyMap = {
|
|
|
10939
10943
|
};
|
|
10940
10944
|
let FormeoRenderer$1 = class FormeoRenderer {
|
|
10941
10945
|
constructor(opts, formDataArg) {
|
|
10942
|
-
const { renderContainer, elements, formData } = processOptions(opts);
|
|
10943
|
-
this.container =
|
|
10946
|
+
const { renderContainer: container, elements, formData, config } = processOptions(opts);
|
|
10947
|
+
this.container = container;
|
|
10944
10948
|
this.form = cleanFormData(formDataArg || formData);
|
|
10945
|
-
this.dom = dom;
|
|
10946
|
-
this.components = /* @__PURE__ */ Object.create(null);
|
|
10947
10949
|
this.elements = elements;
|
|
10950
|
+
this.config = config;
|
|
10951
|
+
this.components = /* @__PURE__ */ Object.create(null);
|
|
10952
|
+
this.dom = dom;
|
|
10948
10953
|
}
|
|
10949
10954
|
get formData() {
|
|
10950
10955
|
return this.form;
|
|
@@ -10952,10 +10957,30 @@ let FormeoRenderer$1 = class FormeoRenderer {
|
|
|
10952
10957
|
set formData(data) {
|
|
10953
10958
|
this.form = cleanFormData(data);
|
|
10954
10959
|
}
|
|
10960
|
+
/**
|
|
10961
|
+
* Gets the user data from the rendered form as a plain object.
|
|
10962
|
+
* Converts FormData to an object, handling multiple values for the same key
|
|
10963
|
+
* by converting them into arrays.
|
|
10964
|
+
*
|
|
10965
|
+
* @returns {Object.<string, string|string[]>} An object containing form field names as keys
|
|
10966
|
+
* and their values. Fields with multiple values are stored as arrays.
|
|
10967
|
+
*
|
|
10968
|
+
* @example
|
|
10969
|
+
* // Form with single values
|
|
10970
|
+
* { username: 'john', email: 'john@example.com' }
|
|
10971
|
+
*
|
|
10972
|
+
* @example
|
|
10973
|
+
* // Form with multiple values for same key
|
|
10974
|
+
* { username: 'john', hobbies: ['reading', 'gaming'] }
|
|
10975
|
+
*/
|
|
10955
10976
|
get userData() {
|
|
10956
|
-
const
|
|
10977
|
+
const form = this.container.querySelector(".formeo-render") || this.renderedForm;
|
|
10978
|
+
if (!form) {
|
|
10979
|
+
return {};
|
|
10980
|
+
}
|
|
10981
|
+
const formEntries = new FormData(form);
|
|
10957
10982
|
const formDataObj = {};
|
|
10958
|
-
for (const [key, value] of
|
|
10983
|
+
for (const [key, value] of formEntries.entries()) {
|
|
10959
10984
|
if (formDataObj[key]) {
|
|
10960
10985
|
if (Array.isArray(formDataObj[key])) {
|
|
10961
10986
|
formDataObj[key].push(value);
|
|
@@ -10968,6 +10993,27 @@ let FormeoRenderer$1 = class FormeoRenderer {
|
|
|
10968
10993
|
}
|
|
10969
10994
|
return formDataObj;
|
|
10970
10995
|
}
|
|
10996
|
+
/**
|
|
10997
|
+
* Gets the user form data as an array of field objects.
|
|
10998
|
+
* Combines user input values with component metadata to create structured field data.
|
|
10999
|
+
*
|
|
11000
|
+
* @returns {Array<{key: string, value: any, label: string}>} An array of field data objects, where each object contains:
|
|
11001
|
+
* - key: The field identifier
|
|
11002
|
+
* - value: The user's input value for the field
|
|
11003
|
+
* - label: The field's label from component configuration (empty string if not found)
|
|
11004
|
+
*/
|
|
11005
|
+
get userFormData() {
|
|
11006
|
+
const userFormData = [];
|
|
11007
|
+
for (const [key, value] of Object.entries(this.userData)) {
|
|
11008
|
+
const fieldData = {
|
|
11009
|
+
key,
|
|
11010
|
+
value,
|
|
11011
|
+
label: this.components[baseId(key)]?.config?.label || ""
|
|
11012
|
+
};
|
|
11013
|
+
userFormData.push(fieldData);
|
|
11014
|
+
}
|
|
11015
|
+
return userFormData;
|
|
11016
|
+
}
|
|
10971
11017
|
set userData(data = {}) {
|
|
10972
11018
|
const form = this.container.querySelector("form");
|
|
10973
11019
|
for (const key of Object.keys(data)) {
|
|
@@ -10991,6 +11037,7 @@ let FormeoRenderer$1 = class FormeoRenderer {
|
|
|
10991
11037
|
* @param {Object} formData
|
|
10992
11038
|
*/
|
|
10993
11039
|
render(formData = this.form) {
|
|
11040
|
+
this.form = cleanFormData(formData);
|
|
10994
11041
|
const renderedForm = this.getRenderedForm(formData);
|
|
10995
11042
|
const existingRenderedForm = this.container.querySelector(".formeo-render");
|
|
10996
11043
|
if (existingRenderedForm) {
|
|
@@ -11003,6 +11050,7 @@ let FormeoRenderer$1 = class FormeoRenderer {
|
|
|
11003
11050
|
this.form = cleanFormData(formData);
|
|
11004
11051
|
const renderCount = document.getElementsByClassName("formeo-render").length;
|
|
11005
11052
|
const config = {
|
|
11053
|
+
...this.config,
|
|
11006
11054
|
tag: "form",
|
|
11007
11055
|
id: this.form.id,
|
|
11008
11056
|
className: `formeo-render formeo formeo-rendered-${renderCount}`,
|
|
@@ -11028,11 +11076,9 @@ let FormeoRenderer$1 = class FormeoRenderer {
|
|
|
11028
11076
|
*/
|
|
11029
11077
|
processColumn = ({ id, ...columnData }) => ({
|
|
11030
11078
|
...columnData,
|
|
11031
|
-
|
|
11032
|
-
|
|
11033
|
-
|
|
11034
|
-
style: `width: ${columnData.config.width || "100%"}`
|
|
11035
|
-
}
|
|
11079
|
+
id: this.prefixId(id),
|
|
11080
|
+
children: this.processFields(columnData.children),
|
|
11081
|
+
style: `width: ${columnData.config.width || "100%"}`
|
|
11036
11082
|
});
|
|
11037
11083
|
processRows = (stageId) => this.orderChildren("rows", this.form.stages[stageId].children).reduce((acc, row) => {
|
|
11038
11084
|
if (row) {
|
|
@@ -11075,11 +11121,16 @@ let FormeoRenderer$1 = class FormeoRenderer {
|
|
|
11075
11121
|
};
|
|
11076
11122
|
};
|
|
11077
11123
|
cloneComponentData = (componentId) => {
|
|
11078
|
-
const { children = [], id, ...rest } = this.components[componentId];
|
|
11124
|
+
const { children = [], id, attrs = {}, ...rest } = this.components[componentId];
|
|
11125
|
+
const updatedAttrs = { ...attrs, "data-clone-of": id };
|
|
11126
|
+
if (rest.tag === "input") {
|
|
11127
|
+
updatedAttrs.name = getName(this.components[componentId]);
|
|
11128
|
+
}
|
|
11079
11129
|
return {
|
|
11080
11130
|
...rest,
|
|
11081
|
-
id: uuid(id),
|
|
11082
|
-
children: children?.length && children.map(({ id: id2 }) => this.cloneComponentData(baseId(id2)))
|
|
11131
|
+
id: RENDER_PREFIX + uuid(id),
|
|
11132
|
+
children: children?.length && children.map(({ id: id2 }) => this.cloneComponentData(baseId(id2))),
|
|
11133
|
+
attrs: updatedAttrs
|
|
11083
11134
|
};
|
|
11084
11135
|
};
|
|
11085
11136
|
addButton = (id) => ({
|
|
@@ -11227,12 +11278,12 @@ let FormeoRenderer$1 = class FormeoRenderer {
|
|
|
11227
11278
|
return components2;
|
|
11228
11279
|
};
|
|
11229
11280
|
};
|
|
11281
|
+
const listenTypeMap = [
|
|
11282
|
+
["input", (c) => ["textarea", "text"].includes(c.type)],
|
|
11283
|
+
["change", (c) => ["select"].includes(c.tagName.toLowerCase()) || ["checkbox", "radio"].includes(c.type)]
|
|
11284
|
+
];
|
|
11230
11285
|
const LISTEN_TYPE_MAP = (component) => {
|
|
11231
|
-
const
|
|
11232
|
-
["input", (c) => ["textarea", "text"].includes(c.type)],
|
|
11233
|
-
["change", (c) => ["select"].includes(c.tagName.toLowerCase()) || ["checkbox", "radio"].includes(c.type)]
|
|
11234
|
-
];
|
|
11235
|
-
const [listenerEvent] = typesMap.find((typeMap) => typeMap[1](component)) || [false];
|
|
11286
|
+
const [listenerEvent] = listenTypeMap.find((typeMap) => typeMap[1](component)) || [false];
|
|
11236
11287
|
return listenerEvent;
|
|
11237
11288
|
};
|
|
11238
11289
|
if (window !== void 0) {
|