formeo 5.3.1 → 5.3.2

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.0
4
+ Version: 5.3.1
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.0";
8071
+ version$2 = "5.3.1";
8072
8072
  type = "module";
8073
8073
  main = "dist/formeo.cjs.js";
8074
8074
  module$1 = "dist/formeo.es.js";
@@ -14525,6 +14525,23 @@ Author: Draggable https://draggable.io
14525
14525
  });
14526
14526
  }));
14527
14527
  //#endregion
14528
+ //#region src/lib/js/components/fields/control-attr-config.mjs
14529
+ var getControlConfig, controlAttrPanelConfig;
14530
+ var init_control_attr_config = __esmMin((() => {
14531
+ init_utils();
14532
+ getControlConfig = (control) => control?.controlData?.config ?? control?.config;
14533
+ controlAttrPanelConfig = (...sources) => {
14534
+ const collect = (key) => unique(sources.flatMap((source) => Array.isArray(source?.[key]) ? source[key] : []));
14535
+ const disabled = collect("disabledAttrs");
14536
+ const locked = collect("lockedAttrs");
14537
+ if (!disabled.length && !locked.length) return null;
14538
+ return { panels: { attrs: {
14539
+ disabled,
14540
+ locked
14541
+ } } };
14542
+ };
14543
+ }));
14544
+ //#endregion
14528
14545
  //#region src/lib/js/components/fields/field.js
14529
14546
  var field_exports = /* @__PURE__ */ __exportAll({ default: () => Field });
14530
14547
  var checkableTypes, isSelectableType, Field;
@@ -14535,6 +14552,8 @@ Author: Draggable https://draggable.io
14535
14552
  init_utils();
14536
14553
  init_constants();
14537
14554
  init_component();
14555
+ init_components();
14556
+ init_control_attr_config();
14538
14557
  checkableTypes = new Set(["checkbox", "radio"]);
14539
14558
  isSelectableType = new Set([
14540
14559
  "radio",
@@ -14550,11 +14569,12 @@ Author: Draggable https://draggable.io
14550
14569
  */
14551
14570
  constructor(fieldData = Object.create(null)) {
14552
14571
  super("field", fieldData);
14572
+ this.controlId = this.get("config.controlId") || this.get("meta.id");
14573
+ this.applyControlAttrConfig();
14553
14574
  this.debouncedUpdateEditPanels = debounce(this.updateEditPanels);
14554
14575
  this.debouncedUpdatePreview = debounce(this.updatePreview);
14555
14576
  this.label = dom.create(this.labelConfig);
14556
14577
  this.preview = this.fieldPreview();
14557
- this.controlId = this.get("config.controlId") || this.get("meta.id");
14558
14578
  const actionButtons = this.getActionButtons();
14559
14579
  const hasEditButton = this.actionButtons.some((child) => child.meta?.id === "edit");
14560
14580
  this.updateEditPanels();
@@ -14575,6 +14595,15 @@ Author: Draggable https://draggable.io
14575
14595
  this.dom = field;
14576
14596
  this.isEditing = false;
14577
14597
  }
14598
+ /**
14599
+ * Honour control-level `disabledAttrs` / `lockedAttrs` by merging them into this field's
14600
+ * panels.attrs config. Reads both the registered control definition and the field's own
14601
+ * saved config so forms saved before a control changed still pick up its rules.
14602
+ */
14603
+ applyControlAttrConfig() {
14604
+ const attrConfig = controlAttrPanelConfig(getControlConfig(components.controls?.get(this.controlId)), this.get("config"));
14605
+ if (attrConfig) this.config = { [this.id]: attrConfig };
14606
+ }
14578
14607
  get labelConfig() {
14579
14608
  if (!!this.get("config.hideLabel")) return null;
14580
14609
  const { label, editorLabel, disableHtmlLabel, helpText, tooltip } = this.get("config");
@@ -15018,7 +15047,7 @@ Author: Draggable https://draggable.io
15018
15047
  },
15019
15048
  config: {
15020
15049
  label: s.get("controls.form.radio-group"),
15021
- disabled: ["attrs.type"]
15050
+ disabledAttrs: ["type"]
15022
15051
  },
15023
15052
  meta: {
15024
15053
  group: "common",
@@ -1,7 +1,7 @@
1
1
 
2
2
  /**
3
3
  formeo - https://formeo.io
4
- Version: 5.3.0
4
+ Version: 5.3.1
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.0
4
+ Version: 5.3.1
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.0
4
+ Version: 5.3.1
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.0
4
+ Version: 5.3.1
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.0</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.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,7 +1,7 @@
1
1
 
2
2
  /**
3
3
  formeo - https://formeo.io
4
- Version: 5.3.0
4
+ Version: 5.3.1
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.0";
8068
+ version$2 = "5.3.1";
8069
8069
  type = "module";
8070
8070
  main = "dist/formeo.cjs.js";
8071
8071
  module$1 = "dist/formeo.es.js";
@@ -14522,6 +14522,23 @@ var init_options = __esmMin((() => {
14522
14522
  });
14523
14523
  }));
14524
14524
  //#endregion
14525
+ //#region src/lib/js/components/fields/control-attr-config.mjs
14526
+ var getControlConfig, controlAttrPanelConfig;
14527
+ var init_control_attr_config = __esmMin((() => {
14528
+ init_utils();
14529
+ getControlConfig = (control) => control?.controlData?.config ?? control?.config;
14530
+ controlAttrPanelConfig = (...sources) => {
14531
+ const collect = (key) => unique(sources.flatMap((source) => Array.isArray(source?.[key]) ? source[key] : []));
14532
+ const disabled = collect("disabledAttrs");
14533
+ const locked = collect("lockedAttrs");
14534
+ if (!disabled.length && !locked.length) return null;
14535
+ return { panels: { attrs: {
14536
+ disabled,
14537
+ locked
14538
+ } } };
14539
+ };
14540
+ }));
14541
+ //#endregion
14525
14542
  //#region src/lib/js/components/fields/field.js
14526
14543
  var field_exports = /* @__PURE__ */ __exportAll({ default: () => Field });
14527
14544
  var checkableTypes, isSelectableType, Field;
@@ -14532,6 +14549,8 @@ var init_field = __esmMin((() => {
14532
14549
  init_utils();
14533
14550
  init_constants();
14534
14551
  init_component();
14552
+ init_components();
14553
+ init_control_attr_config();
14535
14554
  checkableTypes = new Set(["checkbox", "radio"]);
14536
14555
  isSelectableType = new Set([
14537
14556
  "radio",
@@ -14547,11 +14566,12 @@ var init_field = __esmMin((() => {
14547
14566
  */
14548
14567
  constructor(fieldData = Object.create(null)) {
14549
14568
  super("field", fieldData);
14569
+ this.controlId = this.get("config.controlId") || this.get("meta.id");
14570
+ this.applyControlAttrConfig();
14550
14571
  this.debouncedUpdateEditPanels = debounce(this.updateEditPanels);
14551
14572
  this.debouncedUpdatePreview = debounce(this.updatePreview);
14552
14573
  this.label = dom.create(this.labelConfig);
14553
14574
  this.preview = this.fieldPreview();
14554
- this.controlId = this.get("config.controlId") || this.get("meta.id");
14555
14575
  const actionButtons = this.getActionButtons();
14556
14576
  const hasEditButton = this.actionButtons.some((child) => child.meta?.id === "edit");
14557
14577
  this.updateEditPanels();
@@ -14572,6 +14592,15 @@ var init_field = __esmMin((() => {
14572
14592
  this.dom = field;
14573
14593
  this.isEditing = false;
14574
14594
  }
14595
+ /**
14596
+ * Honour control-level `disabledAttrs` / `lockedAttrs` by merging them into this field's
14597
+ * panels.attrs config. Reads both the registered control definition and the field's own
14598
+ * saved config so forms saved before a control changed still pick up its rules.
14599
+ */
14600
+ applyControlAttrConfig() {
14601
+ const attrConfig = controlAttrPanelConfig(getControlConfig(components.controls?.get(this.controlId)), this.get("config"));
14602
+ if (attrConfig) this.config = { [this.id]: attrConfig };
14603
+ }
14575
14604
  get labelConfig() {
14576
14605
  if (!!this.get("config.hideLabel")) return null;
14577
14606
  const { label, editorLabel, disableHtmlLabel, helpText, tooltip } = this.get("config");
@@ -15015,7 +15044,7 @@ var init_radio_group = __esmMin((() => {
15015
15044
  },
15016
15045
  config: {
15017
15046
  label: s.get("controls.form.radio-group"),
15018
- disabled: ["attrs.type"]
15047
+ disabledAttrs: ["type"]
15019
15048
  },
15020
15049
  meta: {
15021
15050
  group: "common",
package/dist/formeo.css CHANGED
@@ -1,7 +1,7 @@
1
1
 
2
2
  /**
3
3
  formeo - https://formeo.io
4
- Version: 5.3.0
4
+ Version: 5.3.1
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.0
4
+ Version: 5.3.1
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.0";
8067
+ version$2 = "5.3.1";
8068
8068
  type = "module";
8069
8069
  main = "dist/formeo.cjs.js";
8070
8070
  module$1 = "dist/formeo.es.js";
@@ -14521,6 +14521,23 @@ var init_options = __esmMin((() => {
14521
14521
  });
14522
14522
  }));
14523
14523
  //#endregion
14524
+ //#region src/lib/js/components/fields/control-attr-config.mjs
14525
+ var getControlConfig, controlAttrPanelConfig;
14526
+ var init_control_attr_config = __esmMin((() => {
14527
+ init_utils();
14528
+ getControlConfig = (control) => control?.controlData?.config ?? control?.config;
14529
+ controlAttrPanelConfig = (...sources) => {
14530
+ const collect = (key) => unique(sources.flatMap((source) => Array.isArray(source?.[key]) ? source[key] : []));
14531
+ const disabled = collect("disabledAttrs");
14532
+ const locked = collect("lockedAttrs");
14533
+ if (!disabled.length && !locked.length) return null;
14534
+ return { panels: { attrs: {
14535
+ disabled,
14536
+ locked
14537
+ } } };
14538
+ };
14539
+ }));
14540
+ //#endregion
14524
14541
  //#region src/lib/js/components/fields/field.js
14525
14542
  var field_exports = /* @__PURE__ */ __exportAll({ default: () => Field });
14526
14543
  var checkableTypes, isSelectableType, Field;
@@ -14531,6 +14548,8 @@ var init_field = __esmMin((() => {
14531
14548
  init_utils();
14532
14549
  init_constants();
14533
14550
  init_component();
14551
+ init_components();
14552
+ init_control_attr_config();
14534
14553
  checkableTypes = new Set(["checkbox", "radio"]);
14535
14554
  isSelectableType = new Set([
14536
14555
  "radio",
@@ -14546,11 +14565,12 @@ var init_field = __esmMin((() => {
14546
14565
  */
14547
14566
  constructor(fieldData = Object.create(null)) {
14548
14567
  super("field", fieldData);
14568
+ this.controlId = this.get("config.controlId") || this.get("meta.id");
14569
+ this.applyControlAttrConfig();
14549
14570
  this.debouncedUpdateEditPanels = debounce(this.updateEditPanels);
14550
14571
  this.debouncedUpdatePreview = debounce(this.updatePreview);
14551
14572
  this.label = dom.create(this.labelConfig);
14552
14573
  this.preview = this.fieldPreview();
14553
- this.controlId = this.get("config.controlId") || this.get("meta.id");
14554
14574
  const actionButtons = this.getActionButtons();
14555
14575
  const hasEditButton = this.actionButtons.some((child) => child.meta?.id === "edit");
14556
14576
  this.updateEditPanels();
@@ -14571,6 +14591,15 @@ var init_field = __esmMin((() => {
14571
14591
  this.dom = field;
14572
14592
  this.isEditing = false;
14573
14593
  }
14594
+ /**
14595
+ * Honour control-level `disabledAttrs` / `lockedAttrs` by merging them into this field's
14596
+ * panels.attrs config. Reads both the registered control definition and the field's own
14597
+ * saved config so forms saved before a control changed still pick up its rules.
14598
+ */
14599
+ applyControlAttrConfig() {
14600
+ const attrConfig = controlAttrPanelConfig(getControlConfig(components.controls?.get(this.controlId)), this.get("config"));
14601
+ if (attrConfig) this.config = { [this.id]: attrConfig };
14602
+ }
14574
14603
  get labelConfig() {
14575
14604
  if (!!this.get("config.hideLabel")) return null;
14576
14605
  const { label, editorLabel, disableHtmlLabel, helpText, tooltip } = this.get("config");
@@ -15014,7 +15043,7 @@ var init_radio_group = __esmMin((() => {
15014
15043
  },
15015
15044
  config: {
15016
15045
  label: s.get("controls.form.radio-group"),
15017
- disabled: ["attrs.type"]
15046
+ disabledAttrs: ["type"]
15018
15047
  },
15019
15048
  meta: {
15020
15049
  group: "common",