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.
@@ -1,7 +1,7 @@
1
1
 
2
2
  /**
3
3
  formeo - https://formeo.io
4
- Version: 5.3.1
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.1";
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 = !isPreview && attrs.name || id;
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 componentId = address.slice(address.indexOf(".") + 1);
18781
- components.push(...this.renderedForm.querySelectorAll(`[name=f-${componentId}]`));
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 [key, value] of formEntries.entries()) 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;
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);
@@ -1,7 +1,7 @@
1
1
 
2
2
  /**
3
3
  formeo - https://formeo.io
4
- Version: 5.3.1
4
+ Version: 5.3.2
5
5
  Author: Draggable https://draggable.io
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
 
2
2
  /**
3
3
  formeo - https://formeo.io
4
- Version: 5.3.1
4
+ Version: 5.3.2
5
5
  Author: Draggable https://draggable.io
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
 
2
2
  /**
3
3
  formeo - https://formeo.io
4
- Version: 5.3.1
4
+ Version: 5.3.2
5
5
  Author: Draggable https://draggable.io
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
 
2
2
  /**
3
3
  formeo - https://formeo.io
4
- Version: 5.3.1
4
+ Version: 5.3.2
5
5
  Author: Draggable https://draggable.io
6
6
  */
7
7
 
@@ -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 &amp; 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</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>
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 &amp; 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>
@@ -1,7 +1,7 @@
1
1
 
2
2
  /**
3
3
  formeo - https://formeo.io
4
- Version: 5.3.1
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.1";
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 = !isPreview && attrs.name || id;
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 componentId = address.slice(address.indexOf(".") + 1);
18778
- components.push(...this.renderedForm.querySelectorAll(`[name=f-${componentId}]`));
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 [key, value] of formEntries.entries()) if (Object.hasOwn(formDataObj, key)) if (Array.isArray(formDataObj[key])) formDataObj[key].push(value);
18793
- else formDataObj[key] = [formDataObj[key], value];
18794
- else formDataObj[key] = value;
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
@@ -1,7 +1,7 @@
1
1
 
2
2
  /**
3
3
  formeo - https://formeo.io
4
- Version: 5.3.1
4
+ Version: 5.3.2
5
5
  Author: Draggable https://draggable.io
6
6
  */
7
7
 
package/dist/formeo.es.js CHANGED
@@ -1,7 +1,7 @@
1
1
 
2
2
  /**
3
3
  formeo - https://formeo.io
4
- Version: 5.3.1
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.1";
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 = !isPreview && attrs.name || id;
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 componentId = address.slice(address.indexOf(".") + 1);
18777
- components.push(...this.renderedForm.querySelectorAll(`[name=f-${componentId}]`));
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 [key, value] of formEntries.entries()) if (Object.hasOwn(formDataObj, key)) if (Array.isArray(formDataObj[key])) formDataObj[key].push(value);
18792
- else formDataObj[key] = [formDataObj[key], value];
18793
- else formDataObj[key] = value;
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);