formeo 5.3.2 → 5.3.3
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 +48 -48
- package/dist/demo/assets/js/demo.min.js.gz +0 -0
- package/dist/demo/assets/js/form.min.js +1 -1
- package/dist/demo/assets/js/formeo.cjs.js +16 -11
- package/dist/demo/assets/js/formeo.es.js +16 -11
- package/dist/demo/assets/js/formeo.min.cjs.js +2 -2
- package/dist/demo/assets/js/formeo.min.es.js +2 -2
- package/dist/demo/assets/js/formeo.min.js +16 -11
- package/dist/demo/assets/js/formeo.min.umd.js +2 -2
- package/dist/demo/assets/js/formeo.umd.js +16 -11
- package/dist/demo/assets/js/html.min.js +1 -1
- package/dist/demo/assets/js/layout.min.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 +16 -11
- package/dist/formeo.css +1 -1
- package/dist/formeo.es.js +16 -11
- package/dist/formeo.min.cjs.js +2 -2
- package/dist/formeo.min.css +1 -1
- package/dist/formeo.min.es.js +2 -2
- package/dist/formeo.min.js +16 -11
- package/dist/formeo.min.umd.js +2 -2
- package/dist/formeo.umd.js +16 -11
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
|
|
2
2
|
/**
|
|
3
3
|
formeo - https://formeo.io
|
|
4
|
-
Version: 5.3.
|
|
4
|
+
Version: 5.3.2
|
|
5
5
|
Author: Draggable https://draggable.io
|
|
6
6
|
*/
|
|
7
7
|
|
|
@@ -8068,7 +8068,7 @@ Author: Draggable https://draggable.io
|
|
|
8068
8068
|
})), name$1, version$2, type, main, module$1, unpkg, exports$1, files, homepage, repository, author, contributors, bugs, description, keywords, ignore, config, scripts, devDependencies, dependencies, release, commitlint, package_default;
|
|
8069
8069
|
var init_package = __esmMin((() => {
|
|
8070
8070
|
name$1 = "formeo";
|
|
8071
|
-
version$2 = "5.3.
|
|
8071
|
+
version$2 = "5.3.2";
|
|
8072
8072
|
type = "module";
|
|
8073
8073
|
main = "dist/formeo.cjs.js";
|
|
8074
8074
|
module$1 = "dist/formeo.es.js";
|
|
@@ -8681,7 +8681,7 @@ Author: Draggable https://draggable.io
|
|
|
8681
8681
|
function trimKeyPrefix(key) {
|
|
8682
8682
|
return key.replaceAll(keyPrefixRegex, "");
|
|
8683
8683
|
}
|
|
8684
|
-
var toTitleCaseLowers, toTitleCaseRegex, regexSpace, slugify, splitAddress, slugifyAddress, extractTextFromHtml, truncateByWord, keyPrefixRegex;
|
|
8684
|
+
var toTitleCaseLowers, toTitleCaseRegex, regexSpace, slugify, splitAddress, slugifyAddress, extractTextFromHtml, truncateByWord, keyPrefixRegex, groupInputName;
|
|
8685
8685
|
var init_string = __esmMin((() => {
|
|
8686
8686
|
toTitleCaseLowers = "a an and as at but by for for from in into near nor of on onto or the to with".split(" ").map((lower) => String.raw`\s${lower}\s`);
|
|
8687
8687
|
toTitleCaseRegex = new RegExp(String.raw`(?!${toTitleCaseLowers.join("|")})\w\S*`, "g");
|
|
@@ -8718,6 +8718,7 @@ Author: Draggable https://draggable.io
|
|
|
8718
8718
|
return truncatedWord;
|
|
8719
8719
|
};
|
|
8720
8720
|
keyPrefixRegex = /^attrs\.|^meta\.|^options\.|^config\./g;
|
|
8721
|
+
groupInputName = (name, fieldType, optionCount) => fieldType === "checkbox" && optionCount > 1 && name && !name.endsWith("[]") ? `${name}[]` : name;
|
|
8721
8722
|
}));
|
|
8722
8723
|
//#endregion
|
|
8723
8724
|
//#region src/lib/js/common/events.js
|
|
@@ -17220,7 +17221,7 @@ Author: Draggable https://draggable.io
|
|
|
17220
17221
|
const { action, attrs = {} } = elem;
|
|
17221
17222
|
const fieldType = attrs.type || elem.tag;
|
|
17222
17223
|
const id = attrs.id || elem.id;
|
|
17223
|
-
const name =
|
|
17224
|
+
const name = isPreview ? id : groupInputName(attrs.name || id, fieldType, options.length);
|
|
17224
17225
|
const sharedInputAttrs = Object.fromEntries(OPTION_INPUT_ATTRS.filter((key) => key in attrs).map((key) => [key, attrs[key]]));
|
|
17225
17226
|
if (attrs.required) sharedInputAttrs.required = fieldType !== "checkbox" || !options.some(({ selected, checked }) => selected || checked);
|
|
17226
17227
|
const optionMap = (option, i) => {
|
|
@@ -18486,12 +18487,12 @@ Author: Draggable https://draggable.io
|
|
|
18486
18487
|
* @return {Object|undefined}
|
|
18487
18488
|
*/
|
|
18488
18489
|
componentByName(name) {
|
|
18489
|
-
return this.components[baseId(name)] || Object.values(this.components).find((component) => component.attrs?.name === name);
|
|
18490
|
+
return this.components[baseId(name)] || Object.values(this.components).find((component) => component.attrs?.name === name || component.attrs?.name === `${name}[]`);
|
|
18490
18491
|
}
|
|
18491
18492
|
set userData(data = {}) {
|
|
18492
18493
|
const form = this.container.querySelector("form");
|
|
18493
18494
|
for (const key of Object.keys(data)) {
|
|
18494
|
-
const fields = form.elements[key];
|
|
18495
|
+
const fields = form.elements[key] ?? form.elements[`${key}[]`];
|
|
18495
18496
|
const checkables = checkableInputs(fields);
|
|
18496
18497
|
if (checkables?.[0].type === "checkbox") {
|
|
18497
18498
|
const values = Array.isArray(data[key]) ? data[key] : [data[key]];
|
|
@@ -18777,11 +18778,12 @@ Author: Draggable https://draggable.io
|
|
|
18777
18778
|
};
|
|
18778
18779
|
getComponents = (address) => {
|
|
18779
18780
|
const components = [];
|
|
18780
|
-
const
|
|
18781
|
-
components.push(...this.renderedForm.querySelectorAll(`[name=
|
|
18781
|
+
const name = `f-${address.slice(address.indexOf(".") + 1)}`;
|
|
18782
|
+
components.push(...this.renderedForm.querySelectorAll(`[name="${name}"], [name="${name}[]"]`));
|
|
18782
18783
|
return components;
|
|
18783
18784
|
};
|
|
18784
18785
|
};
|
|
18786
|
+
var fieldKey = (key) => key.endsWith("[]") ? key.slice(0, -2) : key;
|
|
18785
18787
|
/**
|
|
18786
18788
|
* Converts a rendered form's fields to a plain object, the same shape the `userData`
|
|
18787
18789
|
* getter exposes. Handles multiple values for the same key by converting them to arrays.
|
|
@@ -18792,9 +18794,12 @@ Author: Draggable https://draggable.io
|
|
|
18792
18794
|
if (!form) return {};
|
|
18793
18795
|
const formEntries = new FormData(form);
|
|
18794
18796
|
const formDataObj = {};
|
|
18795
|
-
for (const [
|
|
18796
|
-
|
|
18797
|
-
|
|
18797
|
+
for (const [rawKey, value] of formEntries.entries()) {
|
|
18798
|
+
const key = fieldKey(rawKey);
|
|
18799
|
+
if (Object.hasOwn(formDataObj, key)) if (Array.isArray(formDataObj[key])) formDataObj[key].push(value);
|
|
18800
|
+
else formDataObj[key] = [formDataObj[key], value];
|
|
18801
|
+
else formDataObj[key] = value;
|
|
18802
|
+
}
|
|
18798
18803
|
return formDataObj;
|
|
18799
18804
|
};
|
|
18800
18805
|
var isCheckable = (elem) => ["checkbox", "radio"].includes(elem?.type);
|
|
Binary file
|
package/dist/demo/index.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!doctype html><html lang="en" xml:lang="en"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="chrome=1"><meta name="viewport" content="user-scalable=no,width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1"><meta name="description" content="Vanilla Javascript form building module"><meta name="theme-color" content="#232323"><title>Formeo | Drag & Drop Form Creation</title><script type="module" crossorigin src="/formeo/assets/js/demo.min.js"></script><link rel="stylesheet" crossorigin href="/formeo/assets/css/demo.min.css"></head><body><div class="site-wrap"><header id="demo-header"><div class="header-inner"><img id="formeo-logo" src="/formeo/assets/img/formeo-logo.svg" alt="Formeo Logo" width="100"><nav aria-label="Framework navigation"><ul><li><label for="framework-select">Framework:</label> <select name="framework-select" id="framework-select" class="form-control"><option value="vanilla">Vanilla JavaScript</option><option value="angular">Angular</option><option value="react">React</option></select></li><li><label for="locale">Language</label> <select name="locale" id="locale" class="form-control"><option value="af-ZA" dir="ltr">Afrikaans (Suid-Afrika)</option><option value="ar-TN" dir="rtl">العربية (تونس)</option><option value="cs-CZ" dir="ltr">čeština (Česko)</option><option value="de-DE" dir="ltr">Deutsch (Deutschland)</option><option value="en-US" dir="ltr">English</option><option value="es-ES" dir="ltr">español de España</option><option value="fa-IR" dir="rtl">فارسی (ایران)</option><option value="fi-FI" dir="ltr">suomi (Suomi)</option><option value="fr-FR" dir="ltr">français (France)</option><option value="he-IL" dir="rtl">עברית (ישראל)</option><option value="hi-IN" dir="ltr">हिन्दी (भारत)</option><option value="hu-HU" dir="ltr">magyar (Magyarország)</option><option value="it-IT" dir="ltr">italiano (Italia)</option><option value="ja-JP" dir="ltr">日本語 (日本)</option><option value="nb-NO" dir="ltr">norsk bokmål (Norge)</option><option value="pl-PL" dir="ltr">polski (Polska)</option><option value="pt-BR" dir="ltr">português (Brasil)</option><option value="pt-PT" dir="ltr">português europeu</option><option value="ro-RO" dir="ltr">română (România)</option><option value="ru-RU" dir="ltr">русский (Россия)</option><option value="th-TH" dir="ltr">ไทย (ไทย)</option><option value="tr-TR" dir="ltr">Türkçe (Türkiye)</option><option value="zh-CN" dir="ltr">中文(中国)</option><option value="zh-HK" dir="ltr">中文(中國香港特別行政區)</option></select></li><li><label for="control-filter">Control Filter:</label> <input id="control-filter" placeholder="ex. text" class="form-control"></li><li style="float:right">v5.3.
|
|
1
|
+
<!doctype html><html lang="en" xml:lang="en"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="chrome=1"><meta name="viewport" content="user-scalable=no,width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1"><meta name="description" content="Vanilla Javascript form building module"><meta name="theme-color" content="#232323"><title>Formeo | Drag & Drop Form Creation</title><script type="module" crossorigin src="/formeo/assets/js/demo.min.js"></script><link rel="stylesheet" crossorigin href="/formeo/assets/css/demo.min.css"></head><body><div class="site-wrap"><header id="demo-header"><div class="header-inner"><img id="formeo-logo" src="/formeo/assets/img/formeo-logo.svg" alt="Formeo Logo" width="100"><nav aria-label="Framework navigation"><ul><li><label for="framework-select">Framework:</label> <select name="framework-select" id="framework-select" class="form-control"><option value="vanilla">Vanilla JavaScript</option><option value="angular">Angular</option><option value="react">React</option></select></li><li><label for="locale">Language</label> <select name="locale" id="locale" class="form-control"><option value="af-ZA" dir="ltr">Afrikaans (Suid-Afrika)</option><option value="ar-TN" dir="rtl">العربية (تونس)</option><option value="cs-CZ" dir="ltr">čeština (Česko)</option><option value="de-DE" dir="ltr">Deutsch (Deutschland)</option><option value="en-US" dir="ltr">English</option><option value="es-ES" dir="ltr">español de España</option><option value="fa-IR" dir="rtl">فارسی (ایران)</option><option value="fi-FI" dir="ltr">suomi (Suomi)</option><option value="fr-FR" dir="ltr">français (France)</option><option value="he-IL" dir="rtl">עברית (ישראל)</option><option value="hi-IN" dir="ltr">हिन्दी (भारत)</option><option value="hu-HU" dir="ltr">magyar (Magyarország)</option><option value="it-IT" dir="ltr">italiano (Italia)</option><option value="ja-JP" dir="ltr">日本語 (日本)</option><option value="nb-NO" dir="ltr">norsk bokmål (Norge)</option><option value="pl-PL" dir="ltr">polski (Polska)</option><option value="pt-BR" dir="ltr">português (Brasil)</option><option value="pt-PT" dir="ltr">português europeu</option><option value="ro-RO" dir="ltr">română (România)</option><option value="ru-RU" dir="ltr">русский (Россия)</option><option value="th-TH" dir="ltr">ไทย (ไทย)</option><option value="tr-TR" dir="ltr">Türkçe (Türkiye)</option><option value="zh-CN" dir="ltr">中文(中国)</option><option value="zh-HK" dir="ltr">中文(中國香港特別行政區)</option></select></li><li><label for="control-filter">Control Filter:</label> <input id="control-filter" placeholder="ex. text" class="form-control"></li><li style="float:right">v5.3.2</li></ul></nav></div></header><section id="main_content" class="inner"><div id="framework-container"></div></section><div class="container render-btn-wrap" id="editor-action-buttons"></div><div id="formData-popover" popover><div class="popover-header"><h3>Test formData</h3><div><button type="button" id="format-json">Format</button> <button type="button" id="collapse-json">Collapse</button> <button type="button" id="copy-json">Copy to Clipboard</button></div></div><pre id="formData-editor"></pre><div class="formData-actions"><button popovertarget="formData-popover" popovertargetaction="hide" type="button">Cancel</button> <button id="submit-formData" type="button">Submit</button></div></div><footer id="demo-footer"><nav aria-label="Footer navigation"><ul><li><a href="https://github.com/Draggable/formeo" target="_blank" title="View project on GitHub"><img src="/formeo/assets/img/github.png" width="77" alt="GitHub"></a></li></ul></nav></footer></div></body></html>
|
package/dist/formeo.cjs.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
|
|
2
2
|
/**
|
|
3
3
|
formeo - https://formeo.io
|
|
4
|
-
Version: 5.3.
|
|
4
|
+
Version: 5.3.2
|
|
5
5
|
Author: Draggable https://draggable.io
|
|
6
6
|
*/
|
|
7
7
|
|
|
@@ -8065,7 +8065,7 @@ var require_mergeWith = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
8065
8065
|
})), name$1, version$2, type, main, module$1, unpkg, exports$1, files, homepage, repository, author, contributors, bugs, description, keywords, ignore, config, scripts, devDependencies, dependencies, release, commitlint, package_default;
|
|
8066
8066
|
var init_package = __esmMin((() => {
|
|
8067
8067
|
name$1 = "formeo";
|
|
8068
|
-
version$2 = "5.3.
|
|
8068
|
+
version$2 = "5.3.2";
|
|
8069
8069
|
type = "module";
|
|
8070
8070
|
main = "dist/formeo.cjs.js";
|
|
8071
8071
|
module$1 = "dist/formeo.es.js";
|
|
@@ -8678,7 +8678,7 @@ function toTitleCase(str) {
|
|
|
8678
8678
|
function trimKeyPrefix(key) {
|
|
8679
8679
|
return key.replaceAll(keyPrefixRegex, "");
|
|
8680
8680
|
}
|
|
8681
|
-
var toTitleCaseLowers, toTitleCaseRegex, regexSpace, slugify, splitAddress, slugifyAddress, extractTextFromHtml, truncateByWord, keyPrefixRegex;
|
|
8681
|
+
var toTitleCaseLowers, toTitleCaseRegex, regexSpace, slugify, splitAddress, slugifyAddress, extractTextFromHtml, truncateByWord, keyPrefixRegex, groupInputName;
|
|
8682
8682
|
var init_string = __esmMin((() => {
|
|
8683
8683
|
toTitleCaseLowers = "a an and as at but by for for from in into near nor of on onto or the to with".split(" ").map((lower) => String.raw`\s${lower}\s`);
|
|
8684
8684
|
toTitleCaseRegex = new RegExp(String.raw`(?!${toTitleCaseLowers.join("|")})\w\S*`, "g");
|
|
@@ -8715,6 +8715,7 @@ var init_string = __esmMin((() => {
|
|
|
8715
8715
|
return truncatedWord;
|
|
8716
8716
|
};
|
|
8717
8717
|
keyPrefixRegex = /^attrs\.|^meta\.|^options\.|^config\./g;
|
|
8718
|
+
groupInputName = (name, fieldType, optionCount) => fieldType === "checkbox" && optionCount > 1 && name && !name.endsWith("[]") ? `${name}[]` : name;
|
|
8718
8719
|
}));
|
|
8719
8720
|
//#endregion
|
|
8720
8721
|
//#region src/lib/js/common/events.js
|
|
@@ -17217,7 +17218,7 @@ var init_dom = __esmMin((() => {
|
|
|
17217
17218
|
const { action, attrs = {} } = elem;
|
|
17218
17219
|
const fieldType = attrs.type || elem.tag;
|
|
17219
17220
|
const id = attrs.id || elem.id;
|
|
17220
|
-
const name =
|
|
17221
|
+
const name = isPreview ? id : groupInputName(attrs.name || id, fieldType, options.length);
|
|
17221
17222
|
const sharedInputAttrs = Object.fromEntries(OPTION_INPUT_ATTRS.filter((key) => key in attrs).map((key) => [key, attrs[key]]));
|
|
17222
17223
|
if (attrs.required) sharedInputAttrs.required = fieldType !== "checkbox" || !options.some(({ selected, checked }) => selected || checked);
|
|
17223
17224
|
const optionMap = (option, i) => {
|
|
@@ -18483,12 +18484,12 @@ var FormeoRenderer$1 = class {
|
|
|
18483
18484
|
* @return {Object|undefined}
|
|
18484
18485
|
*/
|
|
18485
18486
|
componentByName(name) {
|
|
18486
|
-
return this.components[baseId(name)] || Object.values(this.components).find((component) => component.attrs?.name === name);
|
|
18487
|
+
return this.components[baseId(name)] || Object.values(this.components).find((component) => component.attrs?.name === name || component.attrs?.name === `${name}[]`);
|
|
18487
18488
|
}
|
|
18488
18489
|
set userData(data = {}) {
|
|
18489
18490
|
const form = this.container.querySelector("form");
|
|
18490
18491
|
for (const key of Object.keys(data)) {
|
|
18491
|
-
const fields = form.elements[key];
|
|
18492
|
+
const fields = form.elements[key] ?? form.elements[`${key}[]`];
|
|
18492
18493
|
const checkables = checkableInputs(fields);
|
|
18493
18494
|
if (checkables?.[0].type === "checkbox") {
|
|
18494
18495
|
const values = Array.isArray(data[key]) ? data[key] : [data[key]];
|
|
@@ -18774,11 +18775,12 @@ var FormeoRenderer$1 = class {
|
|
|
18774
18775
|
};
|
|
18775
18776
|
getComponents = (address) => {
|
|
18776
18777
|
const components = [];
|
|
18777
|
-
const
|
|
18778
|
-
components.push(...this.renderedForm.querySelectorAll(`[name=
|
|
18778
|
+
const name = `f-${address.slice(address.indexOf(".") + 1)}`;
|
|
18779
|
+
components.push(...this.renderedForm.querySelectorAll(`[name="${name}"], [name="${name}[]"]`));
|
|
18779
18780
|
return components;
|
|
18780
18781
|
};
|
|
18781
18782
|
};
|
|
18783
|
+
var fieldKey = (key) => key.endsWith("[]") ? key.slice(0, -2) : key;
|
|
18782
18784
|
/**
|
|
18783
18785
|
* Converts a rendered form's fields to a plain object, the same shape the `userData`
|
|
18784
18786
|
* getter exposes. Handles multiple values for the same key by converting them to arrays.
|
|
@@ -18789,9 +18791,12 @@ var userDataOf = (form) => {
|
|
|
18789
18791
|
if (!form) return {};
|
|
18790
18792
|
const formEntries = new FormData(form);
|
|
18791
18793
|
const formDataObj = {};
|
|
18792
|
-
for (const [
|
|
18793
|
-
|
|
18794
|
-
|
|
18794
|
+
for (const [rawKey, value] of formEntries.entries()) {
|
|
18795
|
+
const key = fieldKey(rawKey);
|
|
18796
|
+
if (Object.hasOwn(formDataObj, key)) if (Array.isArray(formDataObj[key])) formDataObj[key].push(value);
|
|
18797
|
+
else formDataObj[key] = [formDataObj[key], value];
|
|
18798
|
+
else formDataObj[key] = value;
|
|
18799
|
+
}
|
|
18795
18800
|
return formDataObj;
|
|
18796
18801
|
};
|
|
18797
18802
|
var isCheckable = (elem) => ["checkbox", "radio"].includes(elem?.type);
|
package/dist/formeo.css
CHANGED
package/dist/formeo.es.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
|
|
2
2
|
/**
|
|
3
3
|
formeo - https://formeo.io
|
|
4
|
-
Version: 5.3.
|
|
4
|
+
Version: 5.3.2
|
|
5
5
|
Author: Draggable https://draggable.io
|
|
6
6
|
*/
|
|
7
7
|
|
|
@@ -8064,7 +8064,7 @@ var require_mergeWith = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
8064
8064
|
})), name$1, version$2, type, main, module$1, unpkg, exports$1, files, homepage, repository, author, contributors, bugs, description, keywords, ignore, config, scripts, devDependencies, dependencies, release, commitlint, package_default;
|
|
8065
8065
|
var init_package = __esmMin((() => {
|
|
8066
8066
|
name$1 = "formeo";
|
|
8067
|
-
version$2 = "5.3.
|
|
8067
|
+
version$2 = "5.3.2";
|
|
8068
8068
|
type = "module";
|
|
8069
8069
|
main = "dist/formeo.cjs.js";
|
|
8070
8070
|
module$1 = "dist/formeo.es.js";
|
|
@@ -8677,7 +8677,7 @@ function toTitleCase(str) {
|
|
|
8677
8677
|
function trimKeyPrefix(key) {
|
|
8678
8678
|
return key.replaceAll(keyPrefixRegex, "");
|
|
8679
8679
|
}
|
|
8680
|
-
var toTitleCaseLowers, toTitleCaseRegex, regexSpace, slugify, splitAddress, slugifyAddress, extractTextFromHtml, truncateByWord, keyPrefixRegex;
|
|
8680
|
+
var toTitleCaseLowers, toTitleCaseRegex, regexSpace, slugify, splitAddress, slugifyAddress, extractTextFromHtml, truncateByWord, keyPrefixRegex, groupInputName;
|
|
8681
8681
|
var init_string = __esmMin((() => {
|
|
8682
8682
|
toTitleCaseLowers = "a an and as at but by for for from in into near nor of on onto or the to with".split(" ").map((lower) => String.raw`\s${lower}\s`);
|
|
8683
8683
|
toTitleCaseRegex = new RegExp(String.raw`(?!${toTitleCaseLowers.join("|")})\w\S*`, "g");
|
|
@@ -8714,6 +8714,7 @@ var init_string = __esmMin((() => {
|
|
|
8714
8714
|
return truncatedWord;
|
|
8715
8715
|
};
|
|
8716
8716
|
keyPrefixRegex = /^attrs\.|^meta\.|^options\.|^config\./g;
|
|
8717
|
+
groupInputName = (name, fieldType, optionCount) => fieldType === "checkbox" && optionCount > 1 && name && !name.endsWith("[]") ? `${name}[]` : name;
|
|
8717
8718
|
}));
|
|
8718
8719
|
//#endregion
|
|
8719
8720
|
//#region src/lib/js/common/events.js
|
|
@@ -17216,7 +17217,7 @@ var init_dom = __esmMin((() => {
|
|
|
17216
17217
|
const { action, attrs = {} } = elem;
|
|
17217
17218
|
const fieldType = attrs.type || elem.tag;
|
|
17218
17219
|
const id = attrs.id || elem.id;
|
|
17219
|
-
const name =
|
|
17220
|
+
const name = isPreview ? id : groupInputName(attrs.name || id, fieldType, options.length);
|
|
17220
17221
|
const sharedInputAttrs = Object.fromEntries(OPTION_INPUT_ATTRS.filter((key) => key in attrs).map((key) => [key, attrs[key]]));
|
|
17221
17222
|
if (attrs.required) sharedInputAttrs.required = fieldType !== "checkbox" || !options.some(({ selected, checked }) => selected || checked);
|
|
17222
17223
|
const optionMap = (option, i) => {
|
|
@@ -18482,12 +18483,12 @@ var FormeoRenderer$1 = class {
|
|
|
18482
18483
|
* @return {Object|undefined}
|
|
18483
18484
|
*/
|
|
18484
18485
|
componentByName(name) {
|
|
18485
|
-
return this.components[baseId(name)] || Object.values(this.components).find((component) => component.attrs?.name === name);
|
|
18486
|
+
return this.components[baseId(name)] || Object.values(this.components).find((component) => component.attrs?.name === name || component.attrs?.name === `${name}[]`);
|
|
18486
18487
|
}
|
|
18487
18488
|
set userData(data = {}) {
|
|
18488
18489
|
const form = this.container.querySelector("form");
|
|
18489
18490
|
for (const key of Object.keys(data)) {
|
|
18490
|
-
const fields = form.elements[key];
|
|
18491
|
+
const fields = form.elements[key] ?? form.elements[`${key}[]`];
|
|
18491
18492
|
const checkables = checkableInputs(fields);
|
|
18492
18493
|
if (checkables?.[0].type === "checkbox") {
|
|
18493
18494
|
const values = Array.isArray(data[key]) ? data[key] : [data[key]];
|
|
@@ -18773,11 +18774,12 @@ var FormeoRenderer$1 = class {
|
|
|
18773
18774
|
};
|
|
18774
18775
|
getComponents = (address) => {
|
|
18775
18776
|
const components = [];
|
|
18776
|
-
const
|
|
18777
|
-
components.push(...this.renderedForm.querySelectorAll(`[name=
|
|
18777
|
+
const name = `f-${address.slice(address.indexOf(".") + 1)}`;
|
|
18778
|
+
components.push(...this.renderedForm.querySelectorAll(`[name="${name}"], [name="${name}[]"]`));
|
|
18778
18779
|
return components;
|
|
18779
18780
|
};
|
|
18780
18781
|
};
|
|
18782
|
+
var fieldKey = (key) => key.endsWith("[]") ? key.slice(0, -2) : key;
|
|
18781
18783
|
/**
|
|
18782
18784
|
* Converts a rendered form's fields to a plain object, the same shape the `userData`
|
|
18783
18785
|
* getter exposes. Handles multiple values for the same key by converting them to arrays.
|
|
@@ -18788,9 +18790,12 @@ var userDataOf = (form) => {
|
|
|
18788
18790
|
if (!form) return {};
|
|
18789
18791
|
const formEntries = new FormData(form);
|
|
18790
18792
|
const formDataObj = {};
|
|
18791
|
-
for (const [
|
|
18792
|
-
|
|
18793
|
-
|
|
18793
|
+
for (const [rawKey, value] of formEntries.entries()) {
|
|
18794
|
+
const key = fieldKey(rawKey);
|
|
18795
|
+
if (Object.hasOwn(formDataObj, key)) if (Array.isArray(formDataObj[key])) formDataObj[key].push(value);
|
|
18796
|
+
else formDataObj[key] = [formDataObj[key], value];
|
|
18797
|
+
else formDataObj[key] = value;
|
|
18798
|
+
}
|
|
18794
18799
|
return formDataObj;
|
|
18795
18800
|
};
|
|
18796
18801
|
var isCheckable = (elem) => ["checkbox", "radio"].includes(elem?.type);
|