formeo 4.2.5 → 5.0.0

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/formeo.es.js CHANGED
@@ -1,10 +1,11 @@
1
1
 
2
2
  /**
3
3
  formeo - https://formeo.io
4
- Version: 4.2.4
4
+ Version: 4.2.5
5
5
  Author: Draggable https://draggable.io
6
6
  */
7
7
 
8
+ const e = { "en-US": { "en-US": "English", dir: "ltr", "af-ZA": "Afrikaans (South Africa)", "ar-TN": "Arabic (Tunisia)", "cs-CZ": "Czech (Czechia)", "de-DE": "German (Germany)", "es-ES": "European Spanish", "fa-IR": "Persian (Iran)", "fi-FI": "Finnish (Finland)", "fr-FR": "French (France)", "hu-HU": "Hungarian (Hungary)", "it-IT": "Italian (Italy)", "ja-JP": "Japanese (Japan)", "nb-NO": "Norwegian Bokmål (Norway)", "pl-PL": "Polish (Poland)", "pt-BR": "Brazilian Portuguese", "pt-PT": "European Portuguese", "ro-RO": "Romanian (Romania)", "ru-RU": "Russian (Russia)", "th-TH": "Thai (Thailand)", "tr-TR": "Turkish (Türkiye)", "zh-CN": "Chinese (China)", "zh-HK": "Chinese (Hong Kong SAR China)", "action.add.attrs.attr": "What attribute would you like to add?", "action.add.attrs.value": "Default Value", addOption: "Add Option", allFieldsRemoved: "All fields were removed.", allowSelect: "Allow Select", and: "and", attribute: "Attribute", attributeNotPermitted: 'Attribute "{attribute}" is not permitted, please choose another.', attributes: "Attributes", "attrs.class": "Class", "attrs.className": "Class", "attrs.dir": "Direction", "attrs.id": "Id", "attrs.required": "Required", "attrs.style": "Style", "attrs.title": "Title", "attrs.type": "Type", "attrs.value": "Value", autocomplete: "Autocomplete", button: "Button", cannotBeEmpty: "This field cannot be empty", cannotClearFields: "There are no fields to clear", checkbox: "Checkbox", checkboxes: "Checkboxes", class: "Class", clear: "Clear", clearAllMessage: "Are you sure you want to clear all fields?", close: "Close", column: "Column", "condition.target.placeholder": "target", "condition.type.and": "And", "condition.type.if": "If", "condition.type.or": "Or", "condition.type.then": "Then", "condition.value.placeholder": "value", confirmClearAll: "Are you sure you want to remove all fields?", content: "Content", control: "Control", "controlGroups.nextGroup": "Next Group", "controlGroups.prevGroup": "Previous Group", "controls.filteringTerm": 'Filtering "{term}"', "controls.form.button": "Button", "controls.form.checkbox-group": "Checkbox Group", "controls.form.input.date": "Date", "controls.form.input.email": "Email", "controls.form.input.file": "File Upload", "controls.form.input.hidden": "Hidden Input", "controls.form.input.number": "Number", "controls.form.input.text": "Text Input", "controls.form.radio-group": "Radio Group", "controls.form.select": "Select", "controls.form.textarea": "TextArea", "controls.groups.form": "Form Fields", "controls.groups.html": "HTML Elements", "controls.groups.layout": "Layout", "controls.html.divider": "Divider", "controls.html.header": "Header", "controls.html.paragraph": "Paragraph", "controls.layout.column": "Column", "controls.layout.row": "Row", copy: "Copy To Clipboard", danger: "Danger", defineColumnLayout: "Define a column layout", defineColumnWidths: "Define column widths", description: "Help Text", descriptionField: "Description", "editing.row": "Editing Row", editorTitle: "Form Elements", field: "Field", "field.property.invalid": "not valid", "field.property.isChecked": "is checked", "field.property.isNotVisible": "is not visible", "field.property.isVisible": "is visible", "field.property.label": "label", "field.property.valid": "valid", "field.property.value": "value", fieldNonEditable: "This field cannot be edited.", fieldRemoveWarning: "Are you sure you want to remove this field?", fileUpload: "File Upload", formUpdated: "Form Updated", getStarted: "Drag a field from the right to get started.", group: "Group", grouped: "Grouped", hidden: "Hidden Input", hide: "Edit", htmlElements: "HTML Elements", if: "If", "if.condition.source.placeholder": "source", "if.condition.target.placeholder": "target / value", info: "Info", "input.date": "Date", "input.text": "Text", label: "Label", labelCount: "{label} {count}", labelEmpty: "Field Label cannot be empty", "lang.af": "Afrikaans", "lang.ar": "Arabic", "lang.cs": "Czech", "lang.de": "German", "lang.en": "English", "lang.es": "Spanish", "lang.fa": "Persian", "lang.fi": "Finnish", "lang.fr": "French", "lang.hu": "Hungarian", "lang.it": "Italian", "lang.ja": "Japanese", "lang.nb": "Norwegian Bokmål", "lang.pl": "Polish", "lang.pt": "Portuguese", "lang.ro": "Romanian", "lang.ru": "Russian", "lang.th": "Thai", "lang.tr": "Turkish", "lang.zh": "Chinese", layout: "Layout", limitRole: "Limit access to one or more of the following roles:", mandatory: "Mandatory", maxlength: "Max Length", "meta.group": "Group", "meta.icon": "Ico", "meta.label": "Label", minOptionMessage: "This field requires a minimum of 2 options", name: "Name", newOptionLabel: "New {type}", no: "No", number: "Number", off: "Off", on: "On", "operator.contains": "contains", "operator.equals": "equals", "operator.notContains": "not contains", "operator.notEquals": "not equal", "operator.notVisible": "not visible", "operator.visible": "visible", option: "Option", optional: "optional", optionEmpty: "Option value required", optionLabel: "Option {count}", options: "Options", or: "or", order: "Order", "panel.label.attrs": "Attributes", "panel.label.conditions": "Conditions", "panel.label.config": "Configuration", "panel.label.meta": "Meta", "panel.label.options": "Options", "panelEditButtons.attrs": "+ Attribute", "panelEditButtons.conditions": "+ Condition", "panelEditButtons.options": "+ Option", placeholder: "Placeholder", "placeholder.className": "space separated classes", "placeholder.email": "Enter you email", "placeholder.label": "Label", "placeholder.password": "Enter your password", "placeholder.placeholder": "Placeholder", "placeholder.text": "Enter some Text", "placeholder.textarea": "Enter a lot of text", "placeholder.value": "Value", preview: "Preview", primary: "Primary", remove: "Remove", removeMessage: "Remove Element", removeType: "Remove {type}", required: "Required", reset: "Reset", richText: "Rich Text Editor", roles: "Access", row: "Row", "row.makeInputGroup": "Make this row an input group.", "row.makeInputGroupDesc": "Input Groups enable users to add sets of inputs at a time.", "row.settings.fieldsetWrap": "Wrap row in a <fieldset> tag", "row.settings.fieldsetWrap.aria": "Wrap Row in Fieldset", save: "Save", secondary: "Secondary", select: "Select", selectColor: "Select Color", selectionsMessage: "Allow Multiple Selections", selectOptions: "Options", separator: "Separator", settings: "Settings", size: "Size", sizes: "Sizes", "sizes.lg": "Large", "sizes.m": "Default", "sizes.sm": "Small", "sizes.xs": "Extra Small", style: "Style", styles: "Styles", "styles.btn": "Button Style", "styles.btn.danger": "Danger", "styles.btn.default": "Default", "styles.btn.info": "Info", "styles.btn.primary": "Primary", "styles.btn.success": "Success", "styles.btn.warning": "Warning", subtype: "Type", success: "Success", text: "Text Field", then: "Then", "then.condition.target.placeholder": "target", toggle: "Toggle", ungrouped: "Un-Grouped", warning: "Warning", yes: "Yes" } }, i = e["en-US"];
8
9
  async function fetchData(url) {
9
10
  try {
10
11
  const response = await fetch(url);
@@ -49,8 +50,8 @@ class I18N {
49
50
  this.config = { location: parsedLocation, ...restOptions };
50
51
  const { override, preloaded = {} } = this.config;
51
52
  const allLangs = Object.entries(this.langs).concat(Object.entries(override || preloaded));
52
- this.langs = allLangs.reduce((acc, [locale2, lang]) => {
53
- acc[locale2] = this.applyLanguage(locale2, lang);
53
+ this.langs = allLangs.reduce((acc, [locale, lang]) => {
54
+ acc[locale] = this.applyLanguage(locale, lang);
54
55
  return acc;
55
56
  }, {});
56
57
  this.locale = this.config.locale || this.config.langs[0];
@@ -69,9 +70,9 @@ class I18N {
69
70
  * @param {String} locale
70
71
  * @param {String|Object} lang
71
72
  */
72
- addLanguage(locale2, lang = {}) {
73
+ addLanguage(locale, lang = {}) {
73
74
  lang = typeof lang === "string" ? I18N.processFile(lang) : lang;
74
- this.applyLanguage(locale2, lang);
75
+ this.applyLanguage(locale, lang);
75
76
  this.config.langs.push("locale");
76
77
  }
77
78
  /**
@@ -80,9 +81,9 @@ class I18N {
80
81
  * @param {String} locale - locale to check for value
81
82
  * @return {String} language string or undefined
82
83
  */
83
- getValue(key, locale2 = this.locale) {
84
+ getValue(key, locale = this.locale) {
84
85
  var _a;
85
- const value = (_a = this.langs[locale2]) == null ? void 0 : _a[key];
86
+ const value = (_a = this.langs[locale]) == null ? void 0 : _a[key];
86
87
  return value || this.getFallbackValue(key);
87
88
  }
88
89
  /**
@@ -174,22 +175,22 @@ class I18N {
174
175
  * @param {Boolean} useCache
175
176
  * @return {Promise} resolves response
176
177
  */
177
- loadLang(locale2, useCache = true) {
178
+ loadLang(locale, useCache = true) {
178
179
  const _this = this;
179
180
  return new Promise(function(resolve, reject) {
180
- if (_this.loaded.indexOf(locale2) !== -1 && useCache) {
181
- _this.applyLanguage(_this.langs[locale2]);
182
- return resolve(_this.langs[locale2]);
181
+ if (_this.loaded.indexOf(locale) !== -1 && useCache) {
182
+ _this.applyLanguage(_this.langs[locale]);
183
+ return resolve(_this.langs[locale]);
183
184
  } else {
184
- const langFile = [_this.config.location, locale2, _this.config.extension].join("");
185
+ const langFile = [_this.config.location, locale, _this.config.extension].join("");
185
186
  return fetchData(langFile).then((lang) => {
186
187
  const processedFile = I18N.processFile(lang);
187
- _this.applyLanguage(locale2, processedFile);
188
- _this.loaded.push(locale2);
189
- return resolve(_this.langs[locale2]);
188
+ _this.applyLanguage(locale, processedFile);
189
+ _this.loaded.push(locale);
190
+ return resolve(_this.langs[locale]);
190
191
  }).catch((err) => {
191
192
  console.error(err);
192
- const lang = _this.applyLanguage(locale2);
193
+ const lang = _this.applyLanguage(locale);
193
194
  resolve(lang);
194
195
  });
195
196
  }
@@ -201,11 +202,11 @@ class I18N {
201
202
  * @param {Object} lang
202
203
  * @return {Object} overriden language
203
204
  */
204
- applyLanguage(locale2, lang = {}) {
205
- const override = this.config.override[locale2] || {};
206
- const existingLang = this.langs[locale2] || {};
207
- this.langs[locale2] = { ...existingLang, ...lang, ...override };
208
- return this.langs[locale2];
205
+ applyLanguage(locale, lang = {}) {
206
+ const override = this.config.override[locale] || {};
207
+ const existingLang = this.langs[locale] || {};
208
+ this.langs[locale] = { ...existingLang, ...lang, ...override };
209
+ return this.langs[locale];
209
210
  }
210
211
  /**
211
212
  * return currently available languages
@@ -219,10 +220,10 @@ class I18N {
219
220
  * @param {String} locale
220
221
  * @return {Promise} language
221
222
  */
222
- async setCurrent(locale2 = "en-US") {
223
- await this.loadLang(locale2);
224
- this.locale = locale2;
225
- this.current = this.langs[locale2];
223
+ async setCurrent(locale = "en-US") {
224
+ await this.loadLang(locale);
225
+ this.locale = locale;
226
+ this.current = this.langs[locale];
226
227
  return this.current;
227
228
  }
228
229
  }
@@ -431,7 +432,7 @@ if (window !== void 0) {
431
432
  window.SmartTooltip = SmartTooltip;
432
433
  }
433
434
  const name$1 = "formeo";
434
- const version$2 = "4.2.4";
435
+ const version$2 = "4.2.5";
435
436
  const pkg = {
436
437
  name: name$1,
437
438
  version: version$2
@@ -2166,7 +2167,7 @@ function buildFlatDataStructure(data, componentId, componentType2, result = {})
2166
2167
  }
2167
2168
  return result;
2168
2169
  }
2169
- const BUNDLED_SVG_SPRITE = '<?xml version="1.0" encoding="utf-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><symbol id="f-i-autocomplete" viewBox="0 0 16 16" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><path d="M6,5h1v1H6V5z M4,4H3v1h1V4z M6,4H5v1h1V4z M2,5v1h1V5H2z M3,7h1V6H3V7z M5,7h1V6H5V7z M4,5v1h1V5H4z M2,14h1v-1H2V14z M4,14h1v-1H4V14z M6,14h1v-1H6V14z M9,13H8v1h1V13z M16,3.5v4C16,8.3,15.3,9,14.5,9H14v3v3c0,0.6-0.4,1-1,1H1c-0.6,0-1-0.4-1-1V3.5 C0,2.7,0.7,2,1.5,2h3H8V1.5V1H7H6V0.5V0h2.5H11v0.5V1h-1H9v0.5V2h3h2.5C15.3,2,16,2.7,16,3.5z M13,12H7H1v3h12V12z M3,11v-1H2v1H3z M5,11v-1H4v1H5z M15,3.5C15,3.2,14.8,3,14.5,3H9v2.5V8H8.5H8V7.5V7H7V6h1V5.5V5H7V4h1V3.5V3H1.5C1.2,3,1,3.2,1,3.5v4 C1,7.8,1.2,8,1.5,8H8v1H6v0.5V10h2.5H11V9.5V9H9V8h5.5C14.8,8,15,7.8,15,7.5V3.5z"/></symbol><symbol viewBox="0 0 32 32" id="f-i-bin" xmlns="http://www.w3.org/2000/svg"><path d="M4 10v20c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2v-20h-22zM10 28h-2v-14h2v14zM14 28h-2v-14h2v14zM18 28h-2v-14h2v14zM22 28h-2v-14h2v14zM26.5 4h-6.5v-2.5c0-.825-.675-1.5-1.5-1.5h-7c-.825 0-1.5.675-1.5 1.5v2.5h-6.5c-.825 0-1.5.675-1.5 1.5v2.5h26v-2.5c0-.825-.675-1.5-1.5-1.5zM18 4h-6v-1.975h6v1.975z"/></symbol><symbol id="f-i-button" viewBox="0 0 16 16" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><metadata id="acprefix__metadata8"><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><cc:Work rdf:about="" xmlns:cc="http://creativecommons.org/ns#"><dc:format xmlns:dc="http://purl.org/dc/elements/1.1/">image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" xmlns:dc="http://purl.org/dc/elements/1.1/"/><dc:title xmlns:dc="http://purl.org/dc/elements/1.1/"/></cc:Work></rdf:RDF></metadata><path id="acprefix__rect4140" d="M 0.4765625,4 A 0.47706934,0.47706934 0 0 0 0,4.4765625 L 0,11.523438 A 0.47706934,0.47706934 0 0 0 0.4765625,12 L 15.523438,12 A 0.47706934,0.47706934 0 0 0 16,11.523438 L 16,4.4765625 A 0.47706934,0.47706934 0 0 0 15.523438,4 L 0.4765625,4 Z m 0.4765625,0.953125 14.09375,0 0,6.09375 -14.09375,0 0,-6.09375 z"/><g id="acprefix__layer1"><g id="acprefix__text4203"><g id="acprefix__g4212" transform="translate(0.10112835,0.1001358)"><path id="acprefix__path4208" d="m 6.0690374,6.4093857 q -0.5371093,0 -0.8544922,0.4003906 -0.3149414,0.4003906 -0.3149414,1.0913086 0,0.6884766 0.3149414,1.0888672 0.3173829,0.4003906 0.8544922,0.4003906 0.5371094,0 0.8496094,-0.4003906 0.3149414,-0.4003906 0.3149414,-1.0888672 0,-0.690918 -0.3149414,-1.0913086 -0.3125,-0.4003906 -0.8496094,-0.4003906 z m 0,-0.4003906 q 0.7666016,0 1.225586,0.5151367 0.4589843,0.5126953 0.4589843,1.3769531 0,0.8618164 -0.4589843,1.3769531 -0.4589844,0.5126953 -1.225586,0.5126953 -0.7690429,0 -1.2304687,-0.5126953 -0.4589844,-0.5126953 -0.4589844,-1.3769531 0,-0.8642578 0.4589844,-1.3769531 0.4614258,-0.5151367 1.2304687,-0.5151367 z"/><path id="acprefix__path4210" d="m 8.5250921,6.074913 0.4931641,0 0,1.5405274 1.6357418,-1.5405274 0.634766,0 -1.809082,1.6992188 1.938477,1.9458008 -0.649415,0 -1.7504878,-1.7553711 0,1.7553711 -0.4931641,0 0,-3.6450196 z"/></g></g></g></symbol><symbol viewBox="0 0 32 32" id="f-i-calendar" xmlns="http://www.w3.org/2000/svg"><path d="M12.048 16.961c-0.178 0.257-0.395 0.901-0.652 1.059-0.257 0.157-0.547 0.267-0.869 0.328-0.323 0.062-0.657 0.089-1.002 0.079v1.527h2.467v6.046h1.991v-9.996h-1.584c-0.056 0.381-0.173 0.7-0.351 0.957zM23 8h2c0.553 0 1-0.448 1-1v-6c0-0.552-0.447-1-1-1h-2c-0.553 0-1 0.448-1 1v6c0 0.552 0.447 1 1 1zM7 8h2c0.552 0 1-0.448 1-1v-6c0-0.552-0.448-1-1-1h-2c-0.552 0-1 0.448-1 1v6c0 0.552 0.448 1 1 1zM30 4h-2v5c0 0.552-0.447 1-1 1h-6c-0.553 0-1-0.448-1-1v-5h-8v5c0 0.552-0.448 1-1 1h-6c-0.552 0-1-0.448-1-1v-5h-2c-1.104 0-2 0.896-2 2v24c0 1.104 0.896 2 2 2h28c1.104 0 2-0.896 2-2v-24c0-1.104-0.896-2-2-2zM30 29c0 0.553-0.447 1-1 1h-26c-0.552 0-1-0.447-1-1v-16c0-0.552 0.448-1 1-1h26c0.553 0 1 0.448 1 1v16zM15.985 17.982h4.968c-0.936 1.152-1.689 2.325-2.265 3.705-0.575 1.381-0.638 2.818-0.749 4.312h2.131c0.009-0.666-0.195-1.385-0.051-2.156 0.146-0.771 0.352-1.532 0.617-2.285 0.267-0.752 0.598-1.461 0.996-2.127 0.396-0.667 0.853-1.229 1.367-1.686v-1.742h-7.015v1.979z"/></symbol><symbol id="f-i-checkbox" viewBox="0 0 16 16" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><path d="M13.5,5v8c0,0.8-0.7,1.5-1.5,1.5H3c-0.8,0-1.5-0.7-1.5-1.5V4c0-0.8,0.7-1.5,1.5-1.5h9c0.7,0,1.3,0.5,1.5,1.2l2.4-1.4L13.5,5 z M12.5,6.2L7.7,12L2.8,5.5l4.9,1.6l4.8-2.9V4c0-0.3-0.2-0.5-0.5-0.5H3C2.7,3.5,2.5,3.7,2.5,4v9c0,0.3,0.2,0.5,0.5,0.5h9 c0.3,0,0.5-0.2,0.5-0.5V6.2z"/></symbol><symbol id="f-i-checkbox-group" viewBox="0 0 16 16" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><path d="M0,1h16V0H0V1z M0,3h16V2H0V3z M6,5v1h9V5H6z M15,14v-1H6v1H15z M6,10h9V9H6V10z M4,12l-2.5,1.5L0,13l1.5,2L4,12z M4,8 L1.5,9.5L0,9l1.5,2L4,8z M4,4L1.5,5.5L0,5l1.5,2L4,4z"/></symbol><symbol xml:space="preserve" viewBox="0 0 16 16" id="f-i-columns" xmlns="http://www.w3.org/2000/svg"><metadata id="agprefix__metadata4318"><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><cc:Work rdf:about="" xmlns:cc="http://creativecommons.org/ns#"><dc:format xmlns:dc="http://purl.org/dc/elements/1.1/">image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" xmlns:dc="http://purl.org/dc/elements/1.1/"/><dc:title xmlns:dc="http://purl.org/dc/elements/1.1/"/></cc:Work></rdf:RDF></metadata><path id="agprefix__rect4860-3-5" d="M 16,0.5 A 0.50004997,0.50004997 0 0 0 15.5,0 l -5,0 -5,0 -5,0 A 0.50004997,0.50004997 0 0 0 0,0.5 l 0,15 A 0.50004997,0.50004997 0 0 0 0.5,16 l 5,0 5,0 5,0 A 0.50004997,0.50004997 0 0 0 16,15.5 l 0,-15 z M 15,1 15,15 11,15 11,1 15,1 Z M 10,1 10,15 6,15 6,1 10,1 Z M 5,1 5,15 1,15 1,1 5,1 Z"/></symbol><symbol viewBox="0 0 32 32" id="f-i-copy" xmlns="http://www.w3.org/2000/svg"><path d="M20 8v-8h-14l-6 6v18h12v8h20v-24h-12zM6 2.828v3.172h-3.172l3.172-3.172zM2 22v-14h6v-6h10v6l-6 6v8h-10zM18 10.828v3.172h-3.172l3.172-3.172zM30 30h-16v-14h6v-6h10v20z"/></symbol><symbol id="f-i-divider" viewBox="0 0 15 15" xmlns="http://www.w3.org/2000/svg"><metadata id="aiprefix__metadata10"><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><cc:Work rdf:about="" xmlns:cc="http://creativecommons.org/ns#"><dc:format xmlns:dc="http://purl.org/dc/elements/1.1/">image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" xmlns:dc="http://purl.org/dc/elements/1.1/"/><dc:title xmlns:dc="http://purl.org/dc/elements/1.1/"/></cc:Work></rdf:RDF></metadata><rect y="7" x="0" height="1" width="15" id="aiprefix__rect4182"/></symbol><symbol viewBox="0 0 28 32" id="f-i-edit" xmlns="http://www.w3.org/2000/svg"><path d="M22 2l-4 4 6 6 4-4-6-6zM0 24l0.021 6.018 5.979-0.018 16-16-6-6-16 16zM6 28h-4v-4h2v2h2v2z"/></symbol><symbol fill="#000000" viewBox="0 0 24 24" id="f-i-email" xmlns="http://www.w3.org/2000/svg"><path d="M12,2 C17.4292399,2 21.8479317,6.32667079 21.9961582,11.7200952 L22,12 L22,13 C22,15.1729208 20.477434,17 18.5,17 C17.3269391,17 16.3139529,16.3570244 15.6839382,15.3803024 C14.770593,16.3757823 13.4581934,17 12,17 C9.23857625,17 7,14.7614237 7,12 C7,9.23857625 9.23857625,7 12,7 C14.6887547,7 16.8818181,9.12230671 16.9953805,11.7831104 L17,12 L17,13 C17,14.1407877 17.7160103,15 18.5,15 C19.2447902,15 19.928229,14.2245609 19.9947109,13.1689341 L20,13 L20,12 C20,7.581722 16.418278,4 12,4 C7.581722,4 4,7.581722 4,12 C4,16.418278 7.581722,20 12,20 C13.1630948,20 14.2892822,19.7522618 15.3225159,19.2798331 C15.8247876,19.0501777 16.4181317,19.271177 16.647787,19.7734487 C16.8774423,20.2757205 16.656443,20.8690646 16.1541713,21.0987199 C14.861218,21.689901 13.4515463,22 12,22 C6.4771525,22 2,17.5228475 2,12 C2,6.4771525 6.4771525,2 12,2 Z M12,9 C10.3431458,9 9,10.3431458 9,12 C9,13.6568542 10.3431458,15 12,15 C13.6568542,15 15,13.6568542 15,12 C15,10.3431458 13.6568542,9 12,9 Z"/></symbol><symbol viewBox="0 0 32 32" id="f-i-floppy-disk" xmlns="http://www.w3.org/2000/svg"><path d="M28 0h-28v32h32v-28l-4-4zM16 4h4v8h-4v-8zM28 28h-24v-24h2v10h18v-10h2.343l1.657 1.657v22.343z"/></symbol><symbol xml:space="preserve" viewBox="0 0 16 16" id="f-i-handle" xmlns="http://www.w3.org/2000/svg"><metadata id="aqprefix__metadata8"><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><cc:Work rdf:about="" xmlns:cc="http://creativecommons.org/ns#"><dc:format xmlns:dc="http://purl.org/dc/elements/1.1/">image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" xmlns:dc="http://purl.org/dc/elements/1.1/"/><dc:title xmlns:dc="http://purl.org/dc/elements/1.1/"/></cc:Work></rdf:RDF></metadata><g transform="translate(0,-2)" id="aqprefix__g4220"><rect id="aqprefix__rect4191" width="2" height="2" x="2" y="7"/><rect id="aqprefix__rect4191-2" width="2" height="2" x="7" y="7"/><rect id="aqprefix__rect4191-4" width="2" height="2" x="12" y="7"/></g><g transform="translate(0,2)" id="aqprefix__g4220-6"><rect id="aqprefix__rect4191-40" width="2" height="2" x="2" y="7"/><rect id="aqprefix__rect4191-2-3" width="2" height="2" x="7" y="7"/><rect id="aqprefix__rect4191-4-9" width="2" height="2" x="12" y="7"/></g></symbol><symbol xml:space="preserve" viewBox="0 0 16 16" id="f-i-handle-column" xmlns="http://www.w3.org/2000/svg"><path d="M2 7h2v2H2zM7 7h2v2H7zM12 7h2v2h-2zM2 12h2v2H2zM7 12h2v2H7zM12 12h2v2h-2z" transform="rotate(90 9.25 9.25)"/></symbol><symbol xml:space="preserve" viewBox="0 0 16 16" id="f-i-handle-field" xmlns="http://www.w3.org/2000/svg"><path d="M9.5-6.5h2v2h-2zm-5 0h2v2h-2zm5-5h2v2h-2zm-5 0h2v2h-2z" transform="rotate(90)"/></symbol><symbol xml:space="preserve" viewBox="0 0 16 16" id="f-i-handle-row" xmlns="http://www.w3.org/2000/svg"><path d="M12 9.5h2v2h-2zm-5 0h2v2H7Zm-5 0h2v2H2Zm10-5h2v2h-2zm-5 0h2v2H7Zm-5 0h2v2H2Z"/></symbol><symbol xml:space="preserve" viewBox="0 0 16 16" id="f-i-handle-stage" xmlns="http://www.w3.org/2000/svg"><path d="M2 4.5h2v2H2zM7 4.5h2v2H7zM12 4.5h2v2h-2zM2 9.5h2v2H2zM7 9.5h2v2H7zM12 9.5h2v2h-2zM2-.5h2v2H2zM7-.5h2v2H7zM12-.5h2v2h-2z" transform="translate(0 2.5)"/></symbol><symbol viewBox="0 0 448 512" id="f-i-hash" xmlns="http://www.w3.org/2000/svg"><g id="arprefix__icomoon-ignore"/><path fill="#000" d="M448 192v-64h-80.064l16-128h-64l-16 128h-127.968l16-128h-64l-16 128h-111.968v64h103.968l-15.968 128h-88v64h80l-16 128h64l16-128h127.968l-16 128h64.032l16-128h112v-64h-104l15.936-128h88.064zM279.968 320h-127.968l15.968-128h127.968l-15.968 128z"/></symbol><symbol viewBox="0 0 28 28" id="f-i-header" xmlns="http://www.w3.org/2000/svg"><path fill="#444" d="M26.281 26q-0.688 0-2.070-0.055t-2.086-0.055q-0.688 0-2.063 0.055t-2.063 0.055q-0.375 0-0.578-0.32t-0.203-0.711q0-0.484 0.266-0.719t0.609-0.266 0.797-0.109 0.703-0.234q0.516-0.328 0.516-2.188l-0.016-6.109q0-0.328-0.016-0.484-0.203-0.063-0.781-0.063h-10.547q-0.594 0-0.797 0.063-0.016 0.156-0.016 0.484l-0.016 5.797q0 2.219 0.578 2.562 0.25 0.156 0.75 0.203t0.891 0.055 0.703 0.234 0.313 0.711q0 0.406-0.195 0.75t-0.57 0.344q-0.734 0-2.18-0.055t-2.164-0.055q-0.672 0-2 0.055t-1.984 0.055q-0.359 0-0.555-0.328t-0.195-0.703q0-0.469 0.242-0.703t0.562-0.273 0.742-0.117 0.656-0.234q0.516-0.359 0.516-2.234l-0.016-0.891v-12.703q0-0.047 0.008-0.406t0-0.57-0.023-0.602-0.055-0.656-0.102-0.57-0.172-0.492-0.25-0.281q-0.234-0.156-0.703-0.187t-0.828-0.031-0.641-0.219-0.281-0.703q0-0.406 0.187-0.75t0.562-0.344q0.719 0 2.164 0.055t2.164 0.055q0.656 0 1.977-0.055t1.977-0.055q0.391 0 0.586 0.344t0.195 0.75q0 0.469-0.266 0.68t-0.602 0.227-0.773 0.063-0.672 0.203q-0.547 0.328-0.547 2.5l0.016 5q0 0.328 0.016 0.5 0.203 0.047 0.609 0.047h10.922q0.391 0 0.594-0.047 0.016-0.172 0.016-0.5l0.016-5q0-2.172-0.547-2.5-0.281-0.172-0.914-0.195t-1.031-0.203-0.398-0.773q0-0.406 0.195-0.75t0.586-0.344q0.688 0 2.063 0.055t2.063 0.055q0.672 0 2.016-0.055t2.016-0.055q0.391 0 0.586 0.344t0.195 0.75q0 0.469-0.273 0.688t-0.625 0.227-0.805 0.047-0.688 0.195q-0.547 0.359-0.547 2.516l0.016 14.734q0 1.859 0.531 2.188 0.25 0.156 0.719 0.211t0.836 0.070 0.648 0.242 0.281 0.695q0 0.406-0.187 0.75t-0.562 0.344z"/></symbol><symbol xml:space="preserve" viewBox="0 0 16 16" id="f-i-hidden" xmlns="http://www.w3.org/2000/svg"><path d="M0 12h1v-1H0Zm15-7h1V4h-1zm-1 7h1v-1h-1zm-2 0h1v-1h-1zm-2 0h1v-1h-1Zm-2 0h1v-1H8Zm-2 0h1v-1H6Zm-2 0h1v-1H4Zm-2 0h1v-1H2Zm13-1h1v-1h-1ZM0 10h1V9H0Zm15-1h1V8h-1ZM0 8h1V7H0Zm15-1h1V6h-1ZM0 6h1V5H0Zm13-1h1V4h-1zm-2 0h1V4h-1ZM9 5h1V4H9ZM7 5h1V4H7ZM5 5h1V4H5ZM3 5h1V4H3ZM1 5h1V4H1Z"/></symbol><symbol viewBox="0 0 384 512" id="f-i-menu" xmlns="http://www.w3.org/2000/svg"><g id="auprefix__icomoon-ignore"/><path d="M0 96v64h384v-64h-384zM0 288h384v-64h-384v64zM0 416h384v-64h-384v64z"/></symbol><symbol viewBox="0 0 24 24" fill="none" id="f-i-minus" xmlns="http://www.w3.org/2000/svg"><path d="M6 12L18 12" stroke="#000000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></symbol><symbol viewBox="0 0 512 512" id="f-i-move" xmlns="http://www.w3.org/2000/svg"><path d="M287.744 94.736v129.008h128v-64l96.256 96.256-96.256 96.24v-65.488h-128v129.008h64.496l-96.24 96.24-96.256-96.24h64v-129.008h-128v64.992l-95.744-95.744 95.744-95.744v63.488h128v-129.008h-62.496l94.752-94.736 94.752 94.736h-63.008z"/></symbol><symbol viewBox="0 0 512 512" id="f-i-move-vertical" xmlns="http://www.w3.org/2000/svg"><metadata id="awprefix__metadata10"><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><cc:Work rdf:about="" xmlns:cc="http://creativecommons.org/ns#"><dc:format xmlns:dc="http://purl.org/dc/elements/1.1/">image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" xmlns:dc="http://purl.org/dc/elements/1.1/"/><dc:title xmlns:dc="http://purl.org/dc/elements/1.1/"/></cc:Work></rdf:RDF></metadata><sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="3440" inkscape:window-height="1416" id="awprefix__namedview6" showgrid="false" inkscape:zoom="1.84375" inkscape:cx="421.4312" inkscape:cy="218.56484" inkscape:window-x="0" inkscape:window-y="24" inkscape:window-maximized="1" inkscape:current-layer="svg2" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"/><path d="m 287.744,94.736 0,321.024 64.496,0 L 256,512 l -96.256,-96.24 64,0 0,-321.024 -62.496,0 L 256,0 350.752,94.736 Z" id="awprefix__path4" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" inkscape:connector-curvature="0" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" sodipodi:nodetypes="ccccccccccc"/></symbol><symbol viewBox="0 0 20 28" id="f-i-paragraph" xmlns="http://www.w3.org/2000/svg"><path fill="#444" d="M19.969 2.953v1.141q0 0.453-0.289 0.953t-0.664 0.5q-0.781 0-0.844 0.016-0.406 0.094-0.5 0.484-0.047 0.172-0.047 1v18q0 0.391-0.281 0.672t-0.672 0.281h-1.687q-0.391 0-0.672-0.281t-0.281-0.672v-19.031h-2.234v19.031q0 0.391-0.273 0.672t-0.68 0.281h-1.687q-0.406 0-0.68-0.281t-0.273-0.672v-7.75q-2.297-0.187-3.828-0.922-1.969-0.906-3-2.797-1-1.828-1-4.047 0-2.594 1.375-4.469 1.375-1.844 3.266-2.484 1.734-0.578 6.516-0.578h7.484q0.391 0 0.672 0.281t0.281 0.672z"/></symbol><symbol id="f-i-phone-receiver" viewBox="0 0 578.106 578.106" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><g><g><path d="M577.83,456.128c1.225,9.385-1.635,17.545-8.568,24.48l-81.396,80.781 c-3.672,4.08-8.465,7.551-14.381,10.404c-5.916,2.857-11.729,4.693-17.439,5.508c-0.408,0-1.635,0.105-3.676,0.309 c-2.037,0.203-4.689,0.307-7.953,0.307c-7.754,0-20.301-1.326-37.641-3.979s-38.555-9.182-63.645-19.584 c-25.096-10.404-53.553-26.012-85.376-46.818c-31.823-20.805-65.688-49.367-101.592-85.68 c-28.56-28.152-52.224-55.08-70.992-80.783c-18.768-25.705-33.864-49.471-45.288-71.299 c-11.425-21.828-19.993-41.616-25.705-59.364S4.59,177.362,2.55,164.51s-2.856-22.95-2.448-30.294 c0.408-7.344,0.612-11.424,0.612-12.24c0.816-5.712,2.652-11.526,5.508-17.442s6.324-10.71,10.404-14.382L98.022,8.756 c5.712-5.712,12.24-8.568,19.584-8.568c5.304,0,9.996,1.53,14.076,4.59s7.548,6.834,10.404,11.322l65.484,124.236 c3.672,6.528,4.692,13.668,3.06,21.42c-1.632,7.752-5.1,14.28-10.404,19.584l-29.988,29.988c-0.816,0.816-1.53,2.142-2.142,3.978 s-0.918,3.366-0.918,4.59c1.632,8.568,5.304,18.36,11.016,29.376c4.896,9.792,12.444,21.726,22.644,35.802 s24.684,30.293,43.452,48.653c18.36,18.77,34.68,33.354,48.96,43.76c14.277,10.4,26.215,18.053,35.803,22.949 c9.588,4.896,16.932,7.854,22.031,8.871l7.648,1.531c0.816,0,2.145-0.307,3.979-0.918c1.836-0.613,3.162-1.326,3.979-2.143 l34.883-35.496c7.348-6.527,15.912-9.791,25.705-9.791c6.938,0,12.443,1.223,16.523,3.672h0.611l118.115,69.768 C571.098,441.238,576.197,447.968,577.83,456.128z"/></g></g><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/></symbol><symbol viewBox="0 0 24 24" fill="none" id="f-i-plus" xmlns="http://www.w3.org/2000/svg"><path d="M6 12H18M12 6V18" stroke="#000000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></symbol><symbol id="f-i-radio-group" viewBox="0 0 16 16" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><path d="M0,1h16V0H0V1z M0,3h16V2H0V3z M5,6h10V5H5V6z M15,9H5v1h10V9z M15,14v-1H5v1H15z M1.5,7C0.7,7,0,6.3,0,5.5S0.7,4,1.5,4 S3,4.7,3,5.5S2.3,7,1.5,7z M1.5,5C1.2,5,1,5.2,1,5.5S1.2,6,1.5,6S2,5.8,2,5.5S1.8,5,1.5,5z M1.5,11.1C0.7,11.1,0,10.4,0,9.6 s0.7-1.5,1.5-1.5S3,8.7,3,9.6S2.3,11.1,1.5,11.1z M1.5,9.1C1.2,9.1,1,9.3,1,9.6s0.2,0.5,0.5,0.5S2,9.8,2,9.6S1.8,9.1,1.5,9.1z M1.5,15C0.7,15,0,14.3,0,13.5S0.7,12,1.5,12S3,12.7,3,13.5S2.3,15,1.5,15z M1.5,13C1.2,13,1,13.2,1,13.5S1.2,14,1.5,14 S2,13.8,2,13.5S1.8,13,1.5,13z"/></symbol><symbol viewBox="0 0 512 512" id="f-i-remove" xmlns="http://www.w3.org/2000/svg"><path d="M193.694-139.2h87.322v510.916h-87.322zM-18.103 159.92V72.597h510.915v87.322z" transform="rotate(45 77.994 208.636)"/></symbol><symbol id="f-i-rich-text" viewBox="0 0 16 16" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><path d="M15,1H1C0.4,1,0,1.4,0,2v12c0,0.6,0.4,1,1,1h14c0.6,0,1-0.4,1-1V2C16,1.4,15.6,1,15,1z M1,3.1h0.8v0.3H1V3.1z M1,3.6h0.8 v0.3H1V3.6z M15,14H1V5.1h14V14z M15,4.9H1V4.6h14V4.9z M15,4.4H1V4.1h0.8v0.2h1.5V4.1h1.3v0.2H6V4.1h1.3v0.2h1.5V4.1H10v0.2h1.5 V4.1h1.3v0.2h1.5V4.1H15V4.4z M4.5,3.6v0.3H3.3V3.6H4.5z M3.3,3.4V3.1h1.3v0.3H3.3z M7.3,3.6v0.3H6V3.6H7.3z M6,3.4V3.1h1.3v0.3H6z M10,3.6v0.3H8.8V3.6H10z M8.8,3.4V3.1H10v0.3H8.8z M12.8,3.6v0.3h-1.3V3.6H12.8z M11.5,3.4V3.1h1.3v0.3H11.5z M15,3.9h-0.8V3.6H15 V3.9z M15,3.4h-0.8V3.1H15V3.4z M15,2.9h-0.8V2.8h-1.5v0.2h-1.3V2.8H10v0.2H8.8V2.8H7.3v0.2H6V2.8H4.5v0.2H3.3V2.8H1.8v0.2H1V2.6h14 V2.9z M15,2.4H1V2.1h14V2.4z M3,12v-1h10v1H3z M13,10H3V9h10V10z M11,8H3V7h8V8z"/></symbol><symbol xml:space="preserve" viewBox="0 0 16 16" id="f-i-rows" xmlns="http://www.w3.org/2000/svg"><metadata id="beprefix__metadata4318"><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><cc:Work rdf:about="" xmlns:cc="http://creativecommons.org/ns#"><dc:format xmlns:dc="http://purl.org/dc/elements/1.1/">image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" xmlns:dc="http://purl.org/dc/elements/1.1/"/><dc:title xmlns:dc="http://purl.org/dc/elements/1.1/"/></cc:Work></rdf:RDF></metadata><g transform="matrix(0,1,-1,0,3.0984025,11.835155)" id="beprefix__g7209"><path id="beprefix__rect4860-3-5" d="m 4.1640625,-12.402344 a 0.50004997,0.50004997 0 0 0 -0.5,-0.5 l -5,0 -5,0 -5.0000005,0 a 0.50004997,0.50004997 0 0 0 -0.5,0.5 l 0,15.0000002 a 0.50004997,0.50004997 0 0 0 0.5,0.5 l 4.9648442,0 a 0.50004997,0.50004997 0 0 0 0.035156,0 l 4.9648437,0 a 0.50004997,0.50004997 0 0 0 0.035156,0 l 5,0 a 0.50004997,0.50004997 0 0 0 0.5,-0.5 l 0,-15.0000002 z m -1,0.5 0,14.0000002 -4,0 0,-14.0000002 4,0 z m -5,0 0,14.0000002 -4,0 0,-14.0000002 4,0 z m -5,0 0,14.0000002 -4.0000005,0 0,-14.0000002 4.0000005,0 z"/></g></symbol><symbol id="f-i-select" viewBox="0 0 16 16" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><path id="bfprefix__XMLID_1_" d="M0,0v14h0c0,0.6,0.4,1,1,1h10c0.6,0,1-0.4,1-1h0V5h4V0H0z M1,1h10v3H1V1z M1,7h10v3H1V7z M1,14v-3h10v3H1z M15,4h-3V1h3V4z M2,2h1v1H2V2z M2,12h1v1H2V12z M4,12h1v1H4V12z M6,12h1v1H6V12z M9,12v1H8v-1H9z M2,8h1v1H2V8z M4,8h1v1H4V8z M6,8 h1v1H6V8z M13.5,3.1l-1-1.1h1.9L13.5,3.1z M2,6V5h1v1H2L2,6z M4,6V5h1v1H4L4,6z"/></symbol><symbol viewBox="0 0 448 512" id="f-i-settings" xmlns="http://www.w3.org/2000/svg"><g id="bgprefix__icomoon-ignore"/><path d="M223.969 175c-44.703 0-80.969 36.266-80.969 81 0 44.688 36.266 81.031 80.969 81.031 44.719 0 80.719-36.344 80.719-81.031-0-44.734-36-81-80.719-81zM386.313 302.531l-14.594 35.156 29.469 57.875-36.094 36.094-59.218-27.969-35.156 14.438-17.844 54.625-2.281 7.25h-51.016l-22.078-61.656-35.156-14.5-57.952 29.344-36.078-36.063 27.938-59.25-14.484-35.125-61.767-20.156v-50.984l61.703-22.109 14.485-35.094-25.953-51.234-3.422-6.719 36.031-36.031 59.297 27.922 35.109-14.516 17.828-54.594 2.297-7.234h51l22.094 61.734 35.063 14.516 58.031-29.406 36.063 36.031-27.938 59.203 14.438 35.172 61.875 20.125v50.969l-61.688 22.187z"/></symbol><symbol id="f-i-text-input" viewBox="0 0 16 16" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><path id="bhprefix__XMLID_10_" d="M15,4H4.5V3H6V2H4.5h-1H2v1h1.5v1H1C0.4,4,0,4.5,0,5v6c0,0.6,0.4,1,1,1h2.5v1H2v1h4v-1H4.5v-1H15 c0.6,0,1-0.4,1-1V5C16,4.5,15.6,4,15,4z M1,11V5h2.5v6H1z M15,11H4.5V5H15V11z"/></symbol><symbol id="f-i-textarea" viewBox="0 0 16 16" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><path id="biprefix__XMLID_1_" d="M3,11v-1h8v1H3L3,11z M3,7h10V6H3V7L3,7z M3,8v1h10V8H3L3,8z M13,4H3v1h10V4L13,4z M16,14V2c0-0.6-0.4-1-1-1 H1C0.4,1,0,1.4,0,2v12c0,0.6,0.4,1,1,1h14C15.6,15,16,14.6,16,14z M15,2v12H1V2H15z"/></symbol><symbol viewBox="0 0 24 32" id="f-i-triangle-down" xmlns="http://www.w3.org/2000/svg"><path fill="#444" d="M0 12l11.992 11.992 11.992-11.992h-23.984z"/></symbol><symbol viewBox="0 0 12 32" id="f-i-triangle-left" xmlns="http://www.w3.org/2000/svg"><path fill="#444" d="M0 15.996l11.992 11.992v-23.984l-11.992 11.992z"/></symbol><symbol viewBox="0 0 12 32" id="f-i-triangle-right" xmlns="http://www.w3.org/2000/svg"><path fill="#444" d="M0.002 4.008l11.992 11.992-11.992 11.992v-23.984z"/></symbol><symbol viewBox="0 0 24 32" id="f-i-triangle-up" xmlns="http://www.w3.org/2000/svg"><path fill="#444" d="M11.992 8l-11.992 11.992h23.984l-11.992-11.992z"/></symbol><symbol viewBox="0 0 512 512" id="f-i-upload" xmlns="http://www.w3.org/2000/svg"><g id="bnprefix__icomoon-ignore"/><path d="M240 352h-240v128h480v-128h-240zM448 416h-64v-32h64v32zM112 160l128-128 128 128h-80v160h-96v-160z"/></symbol></svg>';
2170
+ const BUNDLED_SVG_SPRITE = '<?xml version="1.0" encoding="utf-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><symbol id="f-i-autocomplete" viewBox="0 0 16 16" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><path d="M6,5h1v1H6V5z M4,4H3v1h1V4z M6,4H5v1h1V4z M2,5v1h1V5H2z M3,7h1V6H3V7z M5,7h1V6H5V7z M4,5v1h1V5H4z M2,14h1v-1H2V14z M4,14h1v-1H4V14z M6,14h1v-1H6V14z M9,13H8v1h1V13z M16,3.5v4C16,8.3,15.3,9,14.5,9H14v3v3c0,0.6-0.4,1-1,1H1c-0.6,0-1-0.4-1-1V3.5 C0,2.7,0.7,2,1.5,2h3H8V1.5V1H7H6V0.5V0h2.5H11v0.5V1h-1H9v0.5V2h3h2.5C15.3,2,16,2.7,16,3.5z M13,12H7H1v3h12V12z M3,11v-1H2v1H3z M5,11v-1H4v1H5z M15,3.5C15,3.2,14.8,3,14.5,3H9v2.5V8H8.5H8V7.5V7H7V6h1V5.5V5H7V4h1V3.5V3H1.5C1.2,3,1,3.2,1,3.5v4 C1,7.8,1.2,8,1.5,8H8v1H6v0.5V10h2.5H11V9.5V9H9V8h5.5C14.8,8,15,7.8,15,7.5V3.5z"/></symbol><symbol viewBox="0 0 32 32" id="f-i-bin" xmlns="http://www.w3.org/2000/svg"><path d="M4 10v20c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2v-20h-22zM10 28h-2v-14h2v14zM14 28h-2v-14h2v14zM18 28h-2v-14h2v14zM22 28h-2v-14h2v14zM26.5 4h-6.5v-2.5c0-.825-.675-1.5-1.5-1.5h-7c-.825 0-1.5.675-1.5 1.5v2.5h-6.5c-.825 0-1.5.675-1.5 1.5v2.5h26v-2.5c0-.825-.675-1.5-1.5-1.5zM18 4h-6v-1.975h6v1.975z"/></symbol><symbol id="f-i-button" viewBox="0 0 16 16" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><metadata id="acprefix__metadata8"><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><cc:Work rdf:about="" xmlns:cc="http://creativecommons.org/ns#"><dc:format xmlns:dc="http://purl.org/dc/elements/1.1/">image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" xmlns:dc="http://purl.org/dc/elements/1.1/"/><dc:title xmlns:dc="http://purl.org/dc/elements/1.1/"/></cc:Work></rdf:RDF></metadata><path id="acprefix__rect4140" d="M 0.4765625,4 A 0.47706934,0.47706934 0 0 0 0,4.4765625 L 0,11.523438 A 0.47706934,0.47706934 0 0 0 0.4765625,12 L 15.523438,12 A 0.47706934,0.47706934 0 0 0 16,11.523438 L 16,4.4765625 A 0.47706934,0.47706934 0 0 0 15.523438,4 L 0.4765625,4 Z m 0.4765625,0.953125 14.09375,0 0,6.09375 -14.09375,0 0,-6.09375 z"/><g id="acprefix__layer1"><g id="acprefix__text4203"><g id="acprefix__g4212" transform="translate(0.10112835,0.1001358)"><path id="acprefix__path4208" d="m 6.0690374,6.4093857 q -0.5371093,0 -0.8544922,0.4003906 -0.3149414,0.4003906 -0.3149414,1.0913086 0,0.6884766 0.3149414,1.0888672 0.3173829,0.4003906 0.8544922,0.4003906 0.5371094,0 0.8496094,-0.4003906 0.3149414,-0.4003906 0.3149414,-1.0888672 0,-0.690918 -0.3149414,-1.0913086 -0.3125,-0.4003906 -0.8496094,-0.4003906 z m 0,-0.4003906 q 0.7666016,0 1.225586,0.5151367 0.4589843,0.5126953 0.4589843,1.3769531 0,0.8618164 -0.4589843,1.3769531 -0.4589844,0.5126953 -1.225586,0.5126953 -0.7690429,0 -1.2304687,-0.5126953 -0.4589844,-0.5126953 -0.4589844,-1.3769531 0,-0.8642578 0.4589844,-1.3769531 0.4614258,-0.5151367 1.2304687,-0.5151367 z"/><path id="acprefix__path4210" d="m 8.5250921,6.074913 0.4931641,0 0,1.5405274 1.6357418,-1.5405274 0.634766,0 -1.809082,1.6992188 1.938477,1.9458008 -0.649415,0 -1.7504878,-1.7553711 0,1.7553711 -0.4931641,0 0,-3.6450196 z"/></g></g></g></symbol><symbol viewBox="0 0 32 32" id="f-i-calendar" xmlns="http://www.w3.org/2000/svg"><path d="M12.048 16.961c-0.178 0.257-0.395 0.901-0.652 1.059-0.257 0.157-0.547 0.267-0.869 0.328-0.323 0.062-0.657 0.089-1.002 0.079v1.527h2.467v6.046h1.991v-9.996h-1.584c-0.056 0.381-0.173 0.7-0.351 0.957zM23 8h2c0.553 0 1-0.448 1-1v-6c0-0.552-0.447-1-1-1h-2c-0.553 0-1 0.448-1 1v6c0 0.552 0.447 1 1 1zM7 8h2c0.552 0 1-0.448 1-1v-6c0-0.552-0.448-1-1-1h-2c-0.552 0-1 0.448-1 1v6c0 0.552 0.448 1 1 1zM30 4h-2v5c0 0.552-0.447 1-1 1h-6c-0.553 0-1-0.448-1-1v-5h-8v5c0 0.552-0.448 1-1 1h-6c-0.552 0-1-0.448-1-1v-5h-2c-1.104 0-2 0.896-2 2v24c0 1.104 0.896 2 2 2h28c1.104 0 2-0.896 2-2v-24c0-1.104-0.896-2-2-2zM30 29c0 0.553-0.447 1-1 1h-26c-0.552 0-1-0.447-1-1v-16c0-0.552 0.448-1 1-1h26c0.553 0 1 0.448 1 1v16zM15.985 17.982h4.968c-0.936 1.152-1.689 2.325-2.265 3.705-0.575 1.381-0.638 2.818-0.749 4.312h2.131c0.009-0.666-0.195-1.385-0.051-2.156 0.146-0.771 0.352-1.532 0.617-2.285 0.267-0.752 0.598-1.461 0.996-2.127 0.396-0.667 0.853-1.229 1.367-1.686v-1.742h-7.015v1.979z"/></symbol><symbol id="f-i-checkbox" viewBox="0 0 16 16" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><path d="M13.5,5v8c0,0.8-0.7,1.5-1.5,1.5H3c-0.8,0-1.5-0.7-1.5-1.5V4c0-0.8,0.7-1.5,1.5-1.5h9c0.7,0,1.3,0.5,1.5,1.2l2.4-1.4L13.5,5 z M12.5,6.2L7.7,12L2.8,5.5l4.9,1.6l4.8-2.9V4c0-0.3-0.2-0.5-0.5-0.5H3C2.7,3.5,2.5,3.7,2.5,4v9c0,0.3,0.2,0.5,0.5,0.5h9 c0.3,0,0.5-0.2,0.5-0.5V6.2z"/></symbol><symbol id="f-i-checkbox-group" viewBox="0 0 16 16" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><path d="M0,1h16V0H0V1z M0,3h16V2H0V3z M6,5v1h9V5H6z M15,14v-1H6v1H15z M6,10h9V9H6V10z M4,12l-2.5,1.5L0,13l1.5,2L4,12z M4,8 L1.5,9.5L0,9l1.5,2L4,8z M4,4L1.5,5.5L0,5l1.5,2L4,4z"/></symbol><symbol xml:space="preserve" viewBox="0 0 16 16" id="f-i-columns" xmlns="http://www.w3.org/2000/svg"><metadata id="agprefix__metadata4318"><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><cc:Work rdf:about="" xmlns:cc="http://creativecommons.org/ns#"><dc:format xmlns:dc="http://purl.org/dc/elements/1.1/">image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" xmlns:dc="http://purl.org/dc/elements/1.1/"/><dc:title xmlns:dc="http://purl.org/dc/elements/1.1/"/></cc:Work></rdf:RDF></metadata><path id="agprefix__rect4860-3-5" d="M 16,0.5 A 0.50004997,0.50004997 0 0 0 15.5,0 l -5,0 -5,0 -5,0 A 0.50004997,0.50004997 0 0 0 0,0.5 l 0,15 A 0.50004997,0.50004997 0 0 0 0.5,16 l 5,0 5,0 5,0 A 0.50004997,0.50004997 0 0 0 16,15.5 l 0,-15 z M 15,1 15,15 11,15 11,1 15,1 Z M 10,1 10,15 6,15 6,1 10,1 Z M 5,1 5,15 1,15 1,1 5,1 Z"/></symbol><symbol viewBox="0 0 32 32" id="f-i-copy" xmlns="http://www.w3.org/2000/svg"><path d="M20 8v-8h-14l-6 6v18h12v8h20v-24h-12zM6 2.828v3.172h-3.172l3.172-3.172zM2 22v-14h6v-6h10v6l-6 6v8h-10zM18 10.828v3.172h-3.172l3.172-3.172zM30 30h-16v-14h6v-6h10v20z"/></symbol><symbol id="f-i-divider" viewBox="0 0 15 15" xmlns="http://www.w3.org/2000/svg"><metadata id="aiprefix__metadata10"><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><cc:Work rdf:about="" xmlns:cc="http://creativecommons.org/ns#"><dc:format xmlns:dc="http://purl.org/dc/elements/1.1/">image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" xmlns:dc="http://purl.org/dc/elements/1.1/"/><dc:title xmlns:dc="http://purl.org/dc/elements/1.1/"/></cc:Work></rdf:RDF></metadata><rect y="7" x="0" height="1" width="15" id="aiprefix__rect4182"/></symbol><symbol viewBox="0 0 28 32" id="f-i-edit" xmlns="http://www.w3.org/2000/svg"><path d="M22 2l-4 4 6 6 4-4-6-6zM0 24l0.021 6.018 5.979-0.018 16-16-6-6-16 16zM6 28h-4v-4h2v2h2v2z"/></symbol><symbol fill="#000000" viewBox="0 0 24 24" id="f-i-email" xmlns="http://www.w3.org/2000/svg"><path d="M12,2 C17.4292399,2 21.8479317,6.32667079 21.9961582,11.7200952 L22,12 L22,13 C22,15.1729208 20.477434,17 18.5,17 C17.3269391,17 16.3139529,16.3570244 15.6839382,15.3803024 C14.770593,16.3757823 13.4581934,17 12,17 C9.23857625,17 7,14.7614237 7,12 C7,9.23857625 9.23857625,7 12,7 C14.6887547,7 16.8818181,9.12230671 16.9953805,11.7831104 L17,12 L17,13 C17,14.1407877 17.7160103,15 18.5,15 C19.2447902,15 19.928229,14.2245609 19.9947109,13.1689341 L20,13 L20,12 C20,7.581722 16.418278,4 12,4 C7.581722,4 4,7.581722 4,12 C4,16.418278 7.581722,20 12,20 C13.1630948,20 14.2892822,19.7522618 15.3225159,19.2798331 C15.8247876,19.0501777 16.4181317,19.271177 16.647787,19.7734487 C16.8774423,20.2757205 16.656443,20.8690646 16.1541713,21.0987199 C14.861218,21.689901 13.4515463,22 12,22 C6.4771525,22 2,17.5228475 2,12 C2,6.4771525 6.4771525,2 12,2 Z M12,9 C10.3431458,9 9,10.3431458 9,12 C9,13.6568542 10.3431458,15 12,15 C13.6568542,15 15,13.6568542 15,12 C15,10.3431458 13.6568542,9 12,9 Z"/></symbol><symbol viewBox="0 0 32 32" id="f-i-floppy-disk" xmlns="http://www.w3.org/2000/svg"><path d="M28 0h-28v32h32v-28l-4-4zM16 4h4v8h-4v-8zM28 28h-24v-24h2v10h18v-10h2.343l1.657 1.657v22.343z"/></symbol><symbol xml:space="preserve" viewBox="0 0 16 16" id="f-i-handle" xmlns="http://www.w3.org/2000/svg"><metadata id="aqprefix__metadata8"><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><cc:Work rdf:about="" xmlns:cc="http://creativecommons.org/ns#"><dc:format xmlns:dc="http://purl.org/dc/elements/1.1/">image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" xmlns:dc="http://purl.org/dc/elements/1.1/"/><dc:title xmlns:dc="http://purl.org/dc/elements/1.1/"/></cc:Work></rdf:RDF></metadata><g transform="translate(0,-2)" id="aqprefix__g4220"><rect id="aqprefix__rect4191" width="2" height="2" x="2" y="7"/><rect id="aqprefix__rect4191-2" width="2" height="2" x="7" y="7"/><rect id="aqprefix__rect4191-4" width="2" height="2" x="12" y="7"/></g><g transform="translate(0,2)" id="aqprefix__g4220-6"><rect id="aqprefix__rect4191-40" width="2" height="2" x="2" y="7"/><rect id="aqprefix__rect4191-2-3" width="2" height="2" x="7" y="7"/><rect id="aqprefix__rect4191-4-9" width="2" height="2" x="12" y="7"/></g></symbol><symbol xml:space="preserve" viewBox="0 0 16 16" id="f-i-handle-column" xmlns="http://www.w3.org/2000/svg"><path d="M2 7h2v2H2zM7 7h2v2H7zM12 7h2v2h-2zM2 12h2v2H2zM7 12h2v2H7zM12 12h2v2h-2z" transform="rotate(90 9.25 9.25)"/></symbol><symbol xml:space="preserve" viewBox="0 0 16 16" id="f-i-handle-field" xmlns="http://www.w3.org/2000/svg"><path d="M9.5-6.5h2v2h-2zm-5 0h2v2h-2zm5-5h2v2h-2zm-5 0h2v2h-2z" transform="rotate(90)"/></symbol><symbol xml:space="preserve" viewBox="0 0 16 16" id="f-i-handle-row" xmlns="http://www.w3.org/2000/svg"><path d="M12 9.5h2v2h-2zm-5 0h2v2H7Zm-5 0h2v2H2Zm10-5h2v2h-2zm-5 0h2v2H7Zm-5 0h2v2H2Z"/></symbol><symbol xml:space="preserve" viewBox="0 0 16 16" id="f-i-handle-stage" xmlns="http://www.w3.org/2000/svg"><path d="M2 4.5h2v2H2zM7 4.5h2v2H7zM12 4.5h2v2h-2zM2 9.5h2v2H2zM7 9.5h2v2H7zM12 9.5h2v2h-2zM2-.5h2v2H2zM7-.5h2v2H7zM12-.5h2v2h-2z" transform="translate(0 2.5)"/></symbol><symbol viewBox="0 0 448 512" id="f-i-hash" xmlns="http://www.w3.org/2000/svg"><g id="arprefix__icomoon-ignore"/><path fill="#000" d="M448 192v-64h-80.064l16-128h-64l-16 128h-127.968l16-128h-64l-16 128h-111.968v64h103.968l-15.968 128h-88v64h80l-16 128h64l16-128h127.968l-16 128h64.032l16-128h112v-64h-104l15.936-128h88.064zM279.968 320h-127.968l15.968-128h127.968l-15.968 128z"/></symbol><symbol viewBox="0 0 28 28" id="f-i-header" xmlns="http://www.w3.org/2000/svg"><path fill="#444" d="M26.281 26q-0.688 0-2.070-0.055t-2.086-0.055q-0.688 0-2.063 0.055t-2.063 0.055q-0.375 0-0.578-0.32t-0.203-0.711q0-0.484 0.266-0.719t0.609-0.266 0.797-0.109 0.703-0.234q0.516-0.328 0.516-2.188l-0.016-6.109q0-0.328-0.016-0.484-0.203-0.063-0.781-0.063h-10.547q-0.594 0-0.797 0.063-0.016 0.156-0.016 0.484l-0.016 5.797q0 2.219 0.578 2.562 0.25 0.156 0.75 0.203t0.891 0.055 0.703 0.234 0.313 0.711q0 0.406-0.195 0.75t-0.57 0.344q-0.734 0-2.18-0.055t-2.164-0.055q-0.672 0-2 0.055t-1.984 0.055q-0.359 0-0.555-0.328t-0.195-0.703q0-0.469 0.242-0.703t0.562-0.273 0.742-0.117 0.656-0.234q0.516-0.359 0.516-2.234l-0.016-0.891v-12.703q0-0.047 0.008-0.406t0-0.57-0.023-0.602-0.055-0.656-0.102-0.57-0.172-0.492-0.25-0.281q-0.234-0.156-0.703-0.187t-0.828-0.031-0.641-0.219-0.281-0.703q0-0.406 0.187-0.75t0.562-0.344q0.719 0 2.164 0.055t2.164 0.055q0.656 0 1.977-0.055t1.977-0.055q0.391 0 0.586 0.344t0.195 0.75q0 0.469-0.266 0.68t-0.602 0.227-0.773 0.063-0.672 0.203q-0.547 0.328-0.547 2.5l0.016 5q0 0.328 0.016 0.5 0.203 0.047 0.609 0.047h10.922q0.391 0 0.594-0.047 0.016-0.172 0.016-0.5l0.016-5q0-2.172-0.547-2.5-0.281-0.172-0.914-0.195t-1.031-0.203-0.398-0.773q0-0.406 0.195-0.75t0.586-0.344q0.688 0 2.063 0.055t2.063 0.055q0.672 0 2.016-0.055t2.016-0.055q0.391 0 0.586 0.344t0.195 0.75q0 0.469-0.273 0.688t-0.625 0.227-0.805 0.047-0.688 0.195q-0.547 0.359-0.547 2.516l0.016 14.734q0 1.859 0.531 2.188 0.25 0.156 0.719 0.211t0.836 0.070 0.648 0.242 0.281 0.695q0 0.406-0.187 0.75t-0.562 0.344z"/></symbol><symbol xml:space="preserve" viewBox="0 0 16 16" id="f-i-hidden" xmlns="http://www.w3.org/2000/svg"><path d="M0 12h1v-1H0Zm15-7h1V4h-1zm-1 7h1v-1h-1zm-2 0h1v-1h-1zm-2 0h1v-1h-1Zm-2 0h1v-1H8Zm-2 0h1v-1H6Zm-2 0h1v-1H4Zm-2 0h1v-1H2Zm13-1h1v-1h-1ZM0 10h1V9H0Zm15-1h1V8h-1ZM0 8h1V7H0Zm15-1h1V6h-1ZM0 6h1V5H0Zm13-1h1V4h-1zm-2 0h1V4h-1ZM9 5h1V4H9ZM7 5h1V4H7ZM5 5h1V4H5ZM3 5h1V4H3ZM1 5h1V4H1Z"/></symbol><symbol xml:space="preserve" viewBox="0 0 32 32" id="f-i-info-circle" xmlns="http://www.w3.org/2000/svg"><path d="m17.962 24.725 1.806.096v2.531h-7.534v-2.406l1.045-.094c.568-.063.916-.254.916-1.014v-8.801c0-.699-.188-.92-.791-.92l-1.106-.062v-2.626h5.666zM15.747 4.648c1.394 0 2.405 1.047 2.405 2.374 0 1.331-1.014 2.313-2.438 2.313-1.454 0-2.404-.982-2.404-2.313 0-1.327.95-2.374 2.437-2.374M16 32C7.178 32 0 24.822 0 16S7.178 0 16 0c8.82 0 16 7.178 16 16s-7.18 16-16 16m0-29C8.832 3 3 8.832 3 16s5.832 13 13 13 13-5.832 13-13S23.168 3 16 3"/></symbol><symbol viewBox="0 0 384 512" id="f-i-menu" xmlns="http://www.w3.org/2000/svg"><g id="avprefix__icomoon-ignore"/><path d="M0 96v64h384v-64h-384zM0 288h384v-64h-384v64zM0 416h384v-64h-384v64z"/></symbol><symbol viewBox="0 0 24 24" fill="none" id="f-i-minus" xmlns="http://www.w3.org/2000/svg"><path d="M6 12L18 12" stroke="#000000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></symbol><symbol viewBox="0 0 512 512" id="f-i-move" xmlns="http://www.w3.org/2000/svg"><path d="M287.744 94.736v129.008h128v-64l96.256 96.256-96.256 96.24v-65.488h-128v129.008h64.496l-96.24 96.24-96.256-96.24h64v-129.008h-128v64.992l-95.744-95.744 95.744-95.744v63.488h128v-129.008h-62.496l94.752-94.736 94.752 94.736h-63.008z"/></symbol><symbol viewBox="0 0 512 512" id="f-i-move-vertical" xmlns="http://www.w3.org/2000/svg"><metadata id="axprefix__metadata10"><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><cc:Work rdf:about="" xmlns:cc="http://creativecommons.org/ns#"><dc:format xmlns:dc="http://purl.org/dc/elements/1.1/">image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" xmlns:dc="http://purl.org/dc/elements/1.1/"/><dc:title xmlns:dc="http://purl.org/dc/elements/1.1/"/></cc:Work></rdf:RDF></metadata><sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="3440" inkscape:window-height="1416" id="axprefix__namedview6" showgrid="false" inkscape:zoom="1.84375" inkscape:cx="421.4312" inkscape:cy="218.56484" inkscape:window-x="0" inkscape:window-y="24" inkscape:window-maximized="1" inkscape:current-layer="svg2" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"/><path d="m 287.744,94.736 0,321.024 64.496,0 L 256,512 l -96.256,-96.24 64,0 0,-321.024 -62.496,0 L 256,0 350.752,94.736 Z" id="axprefix__path4" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" inkscape:connector-curvature="0" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" sodipodi:nodetypes="ccccccccccc"/></symbol><symbol viewBox="0 0 20 28" id="f-i-paragraph" xmlns="http://www.w3.org/2000/svg"><path fill="#444" d="M19.969 2.953v1.141q0 0.453-0.289 0.953t-0.664 0.5q-0.781 0-0.844 0.016-0.406 0.094-0.5 0.484-0.047 0.172-0.047 1v18q0 0.391-0.281 0.672t-0.672 0.281h-1.687q-0.391 0-0.672-0.281t-0.281-0.672v-19.031h-2.234v19.031q0 0.391-0.273 0.672t-0.68 0.281h-1.687q-0.406 0-0.68-0.281t-0.273-0.672v-7.75q-2.297-0.187-3.828-0.922-1.969-0.906-3-2.797-1-1.828-1-4.047 0-2.594 1.375-4.469 1.375-1.844 3.266-2.484 1.734-0.578 6.516-0.578h7.484q0.391 0 0.672 0.281t0.281 0.672z"/></symbol><symbol id="f-i-phone-receiver" viewBox="0 0 578.106 578.106" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><g><g><path d="M577.83,456.128c1.225,9.385-1.635,17.545-8.568,24.48l-81.396,80.781 c-3.672,4.08-8.465,7.551-14.381,10.404c-5.916,2.857-11.729,4.693-17.439,5.508c-0.408,0-1.635,0.105-3.676,0.309 c-2.037,0.203-4.689,0.307-7.953,0.307c-7.754,0-20.301-1.326-37.641-3.979s-38.555-9.182-63.645-19.584 c-25.096-10.404-53.553-26.012-85.376-46.818c-31.823-20.805-65.688-49.367-101.592-85.68 c-28.56-28.152-52.224-55.08-70.992-80.783c-18.768-25.705-33.864-49.471-45.288-71.299 c-11.425-21.828-19.993-41.616-25.705-59.364S4.59,177.362,2.55,164.51s-2.856-22.95-2.448-30.294 c0.408-7.344,0.612-11.424,0.612-12.24c0.816-5.712,2.652-11.526,5.508-17.442s6.324-10.71,10.404-14.382L98.022,8.756 c5.712-5.712,12.24-8.568,19.584-8.568c5.304,0,9.996,1.53,14.076,4.59s7.548,6.834,10.404,11.322l65.484,124.236 c3.672,6.528,4.692,13.668,3.06,21.42c-1.632,7.752-5.1,14.28-10.404,19.584l-29.988,29.988c-0.816,0.816-1.53,2.142-2.142,3.978 s-0.918,3.366-0.918,4.59c1.632,8.568,5.304,18.36,11.016,29.376c4.896,9.792,12.444,21.726,22.644,35.802 s24.684,30.293,43.452,48.653c18.36,18.77,34.68,33.354,48.96,43.76c14.277,10.4,26.215,18.053,35.803,22.949 c9.588,4.896,16.932,7.854,22.031,8.871l7.648,1.531c0.816,0,2.145-0.307,3.979-0.918c1.836-0.613,3.162-1.326,3.979-2.143 l34.883-35.496c7.348-6.527,15.912-9.791,25.705-9.791c6.938,0,12.443,1.223,16.523,3.672h0.611l118.115,69.768 C571.098,441.238,576.197,447.968,577.83,456.128z"/></g></g><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/></symbol><symbol viewBox="0 0 24 24" fill="none" id="f-i-plus" xmlns="http://www.w3.org/2000/svg"><path d="M6 12H18M12 6V18" stroke="#000000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></symbol><symbol id="f-i-radio-group" viewBox="0 0 16 16" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><path d="M0,1h16V0H0V1z M0,3h16V2H0V3z M5,6h10V5H5V6z M15,9H5v1h10V9z M15,14v-1H5v1H15z M1.5,7C0.7,7,0,6.3,0,5.5S0.7,4,1.5,4 S3,4.7,3,5.5S2.3,7,1.5,7z M1.5,5C1.2,5,1,5.2,1,5.5S1.2,6,1.5,6S2,5.8,2,5.5S1.8,5,1.5,5z M1.5,11.1C0.7,11.1,0,10.4,0,9.6 s0.7-1.5,1.5-1.5S3,8.7,3,9.6S2.3,11.1,1.5,11.1z M1.5,9.1C1.2,9.1,1,9.3,1,9.6s0.2,0.5,0.5,0.5S2,9.8,2,9.6S1.8,9.1,1.5,9.1z M1.5,15C0.7,15,0,14.3,0,13.5S0.7,12,1.5,12S3,12.7,3,13.5S2.3,15,1.5,15z M1.5,13C1.2,13,1,13.2,1,13.5S1.2,14,1.5,14 S2,13.8,2,13.5S1.8,13,1.5,13z"/></symbol><symbol viewBox="0 0 512 512" id="f-i-remove" xmlns="http://www.w3.org/2000/svg"><path d="M193.694-139.2h87.322v510.916h-87.322zM-18.103 159.92V72.597h510.915v87.322z" transform="rotate(45 77.994 208.636)"/></symbol><symbol id="f-i-rich-text" viewBox="0 0 16 16" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><path d="M15,1H1C0.4,1,0,1.4,0,2v12c0,0.6,0.4,1,1,1h14c0.6,0,1-0.4,1-1V2C16,1.4,15.6,1,15,1z M1,3.1h0.8v0.3H1V3.1z M1,3.6h0.8 v0.3H1V3.6z M15,14H1V5.1h14V14z M15,4.9H1V4.6h14V4.9z M15,4.4H1V4.1h0.8v0.2h1.5V4.1h1.3v0.2H6V4.1h1.3v0.2h1.5V4.1H10v0.2h1.5 V4.1h1.3v0.2h1.5V4.1H15V4.4z M4.5,3.6v0.3H3.3V3.6H4.5z M3.3,3.4V3.1h1.3v0.3H3.3z M7.3,3.6v0.3H6V3.6H7.3z M6,3.4V3.1h1.3v0.3H6z M10,3.6v0.3H8.8V3.6H10z M8.8,3.4V3.1H10v0.3H8.8z M12.8,3.6v0.3h-1.3V3.6H12.8z M11.5,3.4V3.1h1.3v0.3H11.5z M15,3.9h-0.8V3.6H15 V3.9z M15,3.4h-0.8V3.1H15V3.4z M15,2.9h-0.8V2.8h-1.5v0.2h-1.3V2.8H10v0.2H8.8V2.8H7.3v0.2H6V2.8H4.5v0.2H3.3V2.8H1.8v0.2H1V2.6h14 V2.9z M15,2.4H1V2.1h14V2.4z M3,12v-1h10v1H3z M13,10H3V9h10V10z M11,8H3V7h8V8z"/></symbol><symbol xml:space="preserve" viewBox="0 0 16 16" id="f-i-rows" xmlns="http://www.w3.org/2000/svg"><metadata id="bfprefix__metadata4318"><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><cc:Work rdf:about="" xmlns:cc="http://creativecommons.org/ns#"><dc:format xmlns:dc="http://purl.org/dc/elements/1.1/">image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" xmlns:dc="http://purl.org/dc/elements/1.1/"/><dc:title xmlns:dc="http://purl.org/dc/elements/1.1/"/></cc:Work></rdf:RDF></metadata><g transform="matrix(0,1,-1,0,3.0984025,11.835155)" id="bfprefix__g7209"><path id="bfprefix__rect4860-3-5" d="m 4.1640625,-12.402344 a 0.50004997,0.50004997 0 0 0 -0.5,-0.5 l -5,0 -5,0 -5.0000005,0 a 0.50004997,0.50004997 0 0 0 -0.5,0.5 l 0,15.0000002 a 0.50004997,0.50004997 0 0 0 0.5,0.5 l 4.9648442,0 a 0.50004997,0.50004997 0 0 0 0.035156,0 l 4.9648437,0 a 0.50004997,0.50004997 0 0 0 0.035156,0 l 5,0 a 0.50004997,0.50004997 0 0 0 0.5,-0.5 l 0,-15.0000002 z m -1,0.5 0,14.0000002 -4,0 0,-14.0000002 4,0 z m -5,0 0,14.0000002 -4,0 0,-14.0000002 4,0 z m -5,0 0,14.0000002 -4.0000005,0 0,-14.0000002 4.0000005,0 z"/></g></symbol><symbol id="f-i-select" viewBox="0 0 16 16" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><path id="bgprefix__XMLID_1_" d="M0,0v14h0c0,0.6,0.4,1,1,1h10c0.6,0,1-0.4,1-1h0V5h4V0H0z M1,1h10v3H1V1z M1,7h10v3H1V7z M1,14v-3h10v3H1z M15,4h-3V1h3V4z M2,2h1v1H2V2z M2,12h1v1H2V12z M4,12h1v1H4V12z M6,12h1v1H6V12z M9,12v1H8v-1H9z M2,8h1v1H2V8z M4,8h1v1H4V8z M6,8 h1v1H6V8z M13.5,3.1l-1-1.1h1.9L13.5,3.1z M2,6V5h1v1H2L2,6z M4,6V5h1v1H4L4,6z"/></symbol><symbol viewBox="0 0 448 512" id="f-i-settings" xmlns="http://www.w3.org/2000/svg"><g id="bhprefix__icomoon-ignore"/><path d="M223.969 175c-44.703 0-80.969 36.266-80.969 81 0 44.688 36.266 81.031 80.969 81.031 44.719 0 80.719-36.344 80.719-81.031-0-44.734-36-81-80.719-81zM386.313 302.531l-14.594 35.156 29.469 57.875-36.094 36.094-59.218-27.969-35.156 14.438-17.844 54.625-2.281 7.25h-51.016l-22.078-61.656-35.156-14.5-57.952 29.344-36.078-36.063 27.938-59.25-14.484-35.125-61.767-20.156v-50.984l61.703-22.109 14.485-35.094-25.953-51.234-3.422-6.719 36.031-36.031 59.297 27.922 35.109-14.516 17.828-54.594 2.297-7.234h51l22.094 61.734 35.063 14.516 58.031-29.406 36.063 36.031-27.938 59.203 14.438 35.172 61.875 20.125v50.969l-61.688 22.187z"/></symbol><symbol id="f-i-text-input" viewBox="0 0 16 16" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><path id="biprefix__XMLID_10_" d="M15,4H4.5V3H6V2H4.5h-1H2v1h1.5v1H1C0.4,4,0,4.5,0,5v6c0,0.6,0.4,1,1,1h2.5v1H2v1h4v-1H4.5v-1H15 c0.6,0,1-0.4,1-1V5C16,4.5,15.6,4,15,4z M1,11V5h2.5v6H1z M15,11H4.5V5H15V11z"/></symbol><symbol id="f-i-textarea" viewBox="0 0 16 16" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><path id="bjprefix__XMLID_1_" d="M3,11v-1h8v1H3L3,11z M3,7h10V6H3V7L3,7z M3,8v1h10V8H3L3,8z M13,4H3v1h10V4L13,4z M16,14V2c0-0.6-0.4-1-1-1 H1C0.4,1,0,1.4,0,2v12c0,0.6,0.4,1,1,1h14C15.6,15,16,14.6,16,14z M15,2v12H1V2H15z"/></symbol><symbol viewBox="0 0 24 32" id="f-i-triangle-down" xmlns="http://www.w3.org/2000/svg"><path fill="#444" d="M0 12l11.992 11.992 11.992-11.992h-23.984z"/></symbol><symbol viewBox="0 0 12 32" id="f-i-triangle-left" xmlns="http://www.w3.org/2000/svg"><path fill="#444" d="M0 15.996l11.992 11.992v-23.984l-11.992 11.992z"/></symbol><symbol viewBox="0 0 12 32" id="f-i-triangle-right" xmlns="http://www.w3.org/2000/svg"><path fill="#444" d="M0.002 4.008l11.992 11.992-11.992 11.992v-23.984z"/></symbol><symbol viewBox="0 0 24 32" id="f-i-triangle-up" xmlns="http://www.w3.org/2000/svg"><path fill="#444" d="M11.992 8l-11.992 11.992h23.984l-11.992-11.992z"/></symbol><symbol viewBox="0 0 512 512" id="f-i-upload" xmlns="http://www.w3.org/2000/svg"><g id="boprefix__icomoon-ignore"/><path d="M240 352h-240v128h480v-128h-240zM448 416h-64v-32h64v32zM112 160l128-128 128 128h-80v160h-96v-160z"/></symbol></svg>';
2170
2171
  const name = pkg.name;
2171
2172
  const version$1 = pkg.version;
2172
2173
  const PACKAGE_NAME = name;
@@ -2350,8 +2351,11 @@ const DEFAULT_FORMDATA = () => ({
2350
2351
  });
2351
2352
  const CHECKED_TYPES = ["selected", "checked"];
2352
2353
  const REVERSED_CHECKED_TYPES = CHECKED_TYPES.toReversed();
2353
- const 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) => `\\s${lower}\\s`);
2354
- const toTitleCaseRegex = new RegExp(`(?!${toTitleCaseLowers.join("|")})\\w\\S*`, "g");
2354
+ const FILTERED_PANEL_DATA_KEYS = /* @__PURE__ */ new Map([
2355
+ ["config", /* @__PURE__ */ new Set(["label", "helpText", "hideLabel", "labelAfter", "disableHtmlLabel", "tooltip"])]
2356
+ ]);
2357
+ const 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`);
2358
+ const toTitleCaseRegex = new RegExp(String.raw`(?!${toTitleCaseLowers.join("|")})\w\S*`, "g");
2355
2359
  const regexSpace = /\s+/g;
2356
2360
  function toTitleCase(str) {
2357
2361
  if (typeof str !== "string") {
@@ -2403,6 +2407,10 @@ const truncateByWord = (str, maxLength, tail = "…") => {
2403
2407
  }
2404
2408
  return truncatedWord;
2405
2409
  };
2410
+ const keyPrefixRegex = /^attrs\.|^meta\.|^options\.|^config\./g;
2411
+ function trimKeyPrefix(key) {
2412
+ return key.replaceAll(keyPrefixRegex, "");
2413
+ }
2406
2414
  var isSymbol_1;
2407
2415
  var hasRequiredIsSymbol;
2408
2416
  function requireIsSymbol() {
@@ -3973,14 +3981,14 @@ function calculateRealTime(animatingRect, fromRect, toRect, options) {
3973
3981
  return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation;
3974
3982
  }
3975
3983
  var plugins = [];
3976
- var defaults$3 = {
3984
+ var defaults$4 = {
3977
3985
  initializeByDefault: true
3978
3986
  };
3979
3987
  var PluginManager = {
3980
3988
  mount: function mount(plugin) {
3981
- for (var option2 in defaults$3) {
3982
- if (defaults$3.hasOwnProperty(option2) && !(option2 in plugin)) {
3983
- plugin[option2] = defaults$3[option2];
3989
+ for (var option2 in defaults$4) {
3990
+ if (defaults$4.hasOwnProperty(option2) && !(option2 in plugin)) {
3991
+ plugin[option2] = defaults$4[option2];
3984
3992
  }
3985
3993
  }
3986
3994
  plugins.forEach(function(p) {
@@ -5780,7 +5788,7 @@ const insertStyle = (srcs) => {
5780
5788
  },
5781
5789
  action: {
5782
5790
  load: () => onLoadStylesheet(styleLink, resolve),
5783
- error: () => reject(new Error(`${(void 0).src} failed to load.`))
5791
+ error: () => reject(new Error(`${src} failed to load.`))
5784
5792
  }
5785
5793
  });
5786
5794
  document.head.appendChild(styleLink);
@@ -5825,9 +5833,9 @@ const fetchDependencies = (dependencies) => {
5825
5833
  return Promise.all(promises);
5826
5834
  };
5827
5835
  const fetchFormeoStyle = async (cssUrl) => {
5828
- if (!loaded.css.has(cssUrl)) {
5836
+ if (cssUrl && !loaded.css.has(cssUrl)) {
5829
5837
  await insertStyle(cssUrl);
5830
- if (!loaded.css.has(FALLBACK_CSS_URL)) {
5838
+ if (!loaded.css.has(cssUrl) && !loaded.css.has(FALLBACK_CSS_URL)) {
5831
5839
  return await insertStyle(FALLBACK_CSS_URL);
5832
5840
  }
5833
5841
  }
@@ -6137,7 +6145,11 @@ class DOM {
6137
6145
  const safeAttrName2 = helpers.safeAttrName(attr);
6138
6146
  const value = this.processAttrValue(attrs[attr]);
6139
6147
  if (value !== false) {
6140
- element.setAttribute(safeAttrName2, value);
6148
+ try {
6149
+ element.setAttribute(safeAttrName2, value);
6150
+ } catch (e2) {
6151
+ console.warn(`Could not set attribute ${safeAttrName2} with value ${value}`, e2);
6152
+ }
6141
6153
  }
6142
6154
  }
6143
6155
  }
@@ -6297,7 +6309,7 @@ class DOM {
6297
6309
  * @return {Boolean} holdsContent
6298
6310
  */
6299
6311
  holdsContent(element) {
6300
- return element.outerHTML.indexOf("/") !== -1;
6312
+ return element.outerHTML.includes("/");
6301
6313
  }
6302
6314
  /**
6303
6315
  * Is this a textarea, select or other block input
@@ -6339,13 +6351,26 @@ class DOM {
6339
6351
  const type = helpers.get(elem, "attrs.type");
6340
6352
  const labelAfter = helpers.get(elem, "config.labelAfter");
6341
6353
  const isCB = type === "checkbox" || type === "radio";
6342
- return labelAfter !== void 0 ? labelAfter : isCB;
6354
+ return labelAfter === void 0 ? isCB : labelAfter;
6343
6355
  }
6344
6356
  requiredMark = () => ({
6345
6357
  tag: "span",
6346
6358
  className: "text-error",
6347
6359
  children: "*"
6348
6360
  });
6361
+ tooltip = (tooltip2) => ({
6362
+ tag: "span",
6363
+ className: "f-tooltip",
6364
+ dataset: {
6365
+ tooltip: tooltip2
6366
+ },
6367
+ content: dom.icon("info-circle")
6368
+ });
6369
+ helpText = (helpText) => ({
6370
+ tag: "small",
6371
+ className: "f-help-text",
6372
+ children: helpText
6373
+ });
6349
6374
  /**
6350
6375
  * Generate a label
6351
6376
  * @param {Object} elem config object
@@ -6355,7 +6380,7 @@ class DOM {
6355
6380
  label(elem, fMap) {
6356
6381
  const required = helpers.get(elem, "attrs.required");
6357
6382
  let {
6358
- config: { label: labelText = "" }
6383
+ config: { label: labelText = "", helpText = "", tooltip: tooltip2 = null }
6359
6384
  } = elem;
6360
6385
  const { id: elemId, attrs } = elem;
6361
6386
  if (typeof labelText === "function") {
@@ -6367,7 +6392,12 @@ class DOM {
6367
6392
  for: elemId || attrs?.id
6368
6393
  },
6369
6394
  className: [],
6370
- children: [labelText, required && this.requiredMark()],
6395
+ children: [
6396
+ labelText,
6397
+ required && this.requiredMark(),
6398
+ tooltip2 && this.tooltip(tooltip2),
6399
+ helpText && this.helpText(helpText)
6400
+ ],
6371
6401
  action: {}
6372
6402
  };
6373
6403
  if (fMap) {
@@ -7081,15 +7111,21 @@ class Autocomplete {
7081
7111
  this.onChange?.({ target: this.hiddenField });
7082
7112
  }
7083
7113
  }
7114
+ const keyToPlaceHolder = (key) => mi18n.get(`${key}.placeholder`) || toTitleCase(trimKeyPrefix(key));
7115
+ const keyToClassName = (key) => key.replaceAll(".", "-");
7116
+ const stringInputTypeMap = /* @__PURE__ */ new Map([
7117
+ ["config.helpText", (...args) => largeTextInputConfigBase(...args)],
7118
+ ["config.tooltip", (...args) => largeTextInputConfigBase(...args)]
7119
+ ]);
7084
7120
  function inputConfigBase({ key, value, type = "text", checked }) {
7085
7121
  const config = {
7086
7122
  tag: "input",
7087
7123
  attrs: {
7088
7124
  type,
7089
7125
  value,
7090
- placeholder: mi18n.get(`${key}.placeholder`) || toTitleCase(key)
7126
+ placeholder: keyToPlaceHolder(key)
7091
7127
  },
7092
- className: [key.replace(/\./g, "-")],
7128
+ className: [keyToClassName(key)],
7093
7129
  config: {}
7094
7130
  };
7095
7131
  if (checked) {
@@ -7097,17 +7133,33 @@ function inputConfigBase({ key, value, type = "text", checked }) {
7097
7133
  }
7098
7134
  return config;
7099
7135
  }
7136
+ function largeTextInputConfigBase({ key, value }) {
7137
+ return {
7138
+ tag: "textarea",
7139
+ attrs: {
7140
+ placeholder: keyToPlaceHolder(key)
7141
+ },
7142
+ className: [keyToClassName(key)],
7143
+ config: {},
7144
+ textContent: value
7145
+ };
7146
+ }
7100
7147
  function labelHelper(key) {
7101
7148
  const labelText = mi18n.get(key);
7102
7149
  if (labelText) {
7103
7150
  return labelText;
7104
7151
  }
7105
- const splitKey = key.split(".");
7106
- return mi18n.get(splitKey[splitKey.length - 1]);
7152
+ const trimmedKey = trimKeyPrefix(key);
7153
+ return mi18n.get(trimmedKey) || toTitleCase(trimmedKey);
7107
7154
  }
7108
7155
  const ITEM_INPUT_TYPE_MAP = {
7109
7156
  autocomplete: (...args) => new Autocomplete(...args).createProxy(),
7110
- string: ({ key, value }) => inputConfigBase({ key, value }),
7157
+ string: ({ key, value }) => {
7158
+ if (stringInputTypeMap.has(key)) {
7159
+ return stringInputTypeMap.get(key)({ key, value });
7160
+ }
7161
+ return inputConfigBase({ key, value });
7162
+ },
7111
7163
  boolean: ({ key, value }) => {
7112
7164
  const type = key === "selected" ? "radio" : "checkbox";
7113
7165
  return inputConfigBase({ key, value, type, checked: !!value });
@@ -7119,7 +7171,7 @@ const ITEM_INPUT_TYPE_MAP = {
7119
7171
  attrs: {
7120
7172
  placeholder: labelHelper(`placeholder.${key}`)
7121
7173
  },
7122
- className: [key.replace(/\./g, "-")],
7174
+ className: [keyToClassName(key)],
7123
7175
  options: value
7124
7176
  };
7125
7177
  },
@@ -7160,6 +7212,265 @@ const INPUT_TYPE_ACTION = {
7160
7212
  }),
7161
7213
  object: () => ({})
7162
7214
  };
7215
+ const defaults$3 = Object.freeze({
7216
+ title: "",
7217
+ content: null,
7218
+ confirmText: () => labelHelper("save"),
7219
+ cancelText: () => labelHelper("cancel"),
7220
+ onConfirm: () => {
7221
+ },
7222
+ onCancel: () => {
7223
+ },
7224
+ className: "",
7225
+ closeOnEscape: true,
7226
+ position: "top",
7227
+ // 'top' | 'center' | 'trigger'
7228
+ triggerElement: null,
7229
+ // Element that triggered the dialog (for position: 'trigger')
7230
+ triggerCoords: null
7231
+ // Or manual coords { x, y } (for position: 'trigger')
7232
+ });
7233
+ class Dialog {
7234
+ /**
7235
+ * Creates a new Dialog instance
7236
+ * @param {Object} options - Dialog configuration options
7237
+ * @param {string} [options.title] - Dialog title
7238
+ * @param {Object|Array} [options.content] - DOM config for dialog body content
7239
+ * @param {Function} [options.onConfirm] - Callback when form is submitted (receives FormData)
7240
+ * @param {Function} [options.onCancel] - Callback when dialog is cancelled
7241
+ * @param {string|Function} [options.confirmText] - Confirm button text
7242
+ * @param {string|Function} [options.cancelText] - Cancel button text
7243
+ * @param {string} [options.className] - Additional CSS class name(s)
7244
+ * @param {boolean} [options.closeOnEscape] - Whether Escape key closes dialog
7245
+ * @param {string} [options.position] - Positioning mode: 'top' (upper center), 'center', or 'trigger' (near trigger element)
7246
+ * @param {HTMLElement} [options.triggerElement] - Element that triggered dialog (for position: 'trigger')
7247
+ * @param {Object} [options.triggerCoords] - Manual coordinates {x, y} (for position: 'trigger')
7248
+ */
7249
+ constructor(options) {
7250
+ this.opts = merge(defaults$3, options);
7251
+ this.dialog = null;
7252
+ }
7253
+ /**
7254
+ * Creates the dialog DOM structure
7255
+ * @returns {HTMLDialogElement} The created dialog element
7256
+ */
7257
+ createDialog() {
7258
+ const { title, content, confirmText, cancelText, className, closeOnEscape, position } = this.opts;
7259
+ const positionClass = `dialog-position-${position}`;
7260
+ const formChildren = [];
7261
+ if (title) {
7262
+ formChildren.push({
7263
+ tag: "h3",
7264
+ className: "dialog-title",
7265
+ textContent: title
7266
+ });
7267
+ }
7268
+ if (content) {
7269
+ formChildren.push({
7270
+ tag: "div",
7271
+ className: "dialog-body",
7272
+ children: Array.isArray(content) ? content : [content]
7273
+ });
7274
+ }
7275
+ formChildren.push({
7276
+ tag: "div",
7277
+ className: "dialog-actions",
7278
+ children: [
7279
+ {
7280
+ tag: "button",
7281
+ type: "button",
7282
+ className: "btn btn-sm btn-secondary",
7283
+ textContent: typeof cancelText === "function" ? cancelText() : cancelText,
7284
+ action: {
7285
+ click: () => this.handleCancel()
7286
+ }
7287
+ },
7288
+ {
7289
+ tag: "button",
7290
+ type: "submit",
7291
+ className: "btn btn-sm btn-primary",
7292
+ textContent: typeof confirmText === "function" ? confirmText() : confirmText
7293
+ }
7294
+ ]
7295
+ });
7296
+ const dialogElement = dom.create({
7297
+ tag: "dialog",
7298
+ className: ["formeo-dialog", "formeo", positionClass, className],
7299
+ children: [
7300
+ {
7301
+ tag: "form",
7302
+ className: "dialog-form",
7303
+ method: "dialog",
7304
+ children: formChildren,
7305
+ action: {
7306
+ submit: (e2) => this.handleSubmit(e2)
7307
+ }
7308
+ }
7309
+ ],
7310
+ action: {
7311
+ cancel: (e2) => {
7312
+ if (closeOnEscape) {
7313
+ this.handleCancel();
7314
+ } else {
7315
+ e2.preventDefault();
7316
+ }
7317
+ }
7318
+ }
7319
+ });
7320
+ return dialogElement;
7321
+ }
7322
+ /**
7323
+ * Handles form submission
7324
+ * @param {Event} e - Submit event
7325
+ */
7326
+ handleSubmit(e2) {
7327
+ e2.preventDefault();
7328
+ const formData = new FormData(e2.target);
7329
+ this.opts.onConfirm(formData, this);
7330
+ this.close();
7331
+ }
7332
+ /**
7333
+ * Handles dialog cancellation
7334
+ */
7335
+ handleCancel() {
7336
+ this.opts.onCancel(this);
7337
+ this.close();
7338
+ }
7339
+ /**
7340
+ * Sets dialog position based on trigger element or coordinates
7341
+ */
7342
+ setPosition() {
7343
+ const { position, triggerElement, triggerCoords } = this.opts;
7344
+ if (position !== "trigger" || !this.dialog) return;
7345
+ let coords = triggerCoords;
7346
+ if (!coords && triggerElement) {
7347
+ const rect = triggerElement.getBoundingClientRect();
7348
+ coords = {
7349
+ x: rect.left + rect.width / 2,
7350
+ y: rect.bottom + 8
7351
+ // 8px gap below trigger
7352
+ };
7353
+ }
7354
+ if (coords) {
7355
+ const dialogRect = this.dialog.getBoundingClientRect();
7356
+ const viewportWidth = window.innerWidth;
7357
+ const viewportHeight = window.innerHeight;
7358
+ let left = coords.x - dialogRect.width / 2;
7359
+ let top = coords.y;
7360
+ const padding = 16;
7361
+ left = Math.max(padding, Math.min(left, viewportWidth - dialogRect.width - padding));
7362
+ top = Math.max(padding, Math.min(top, viewportHeight - dialogRect.height - padding));
7363
+ this.dialog.style.left = `${left}px`;
7364
+ this.dialog.style.top = `${top}px`;
7365
+ this.dialog.style.transform = "none";
7366
+ }
7367
+ }
7368
+ /**
7369
+ * Opens the dialog
7370
+ * @returns {Dialog} This dialog instance for chaining
7371
+ */
7372
+ open() {
7373
+ if (!this.dialog) {
7374
+ this.dialog = this.createDialog();
7375
+ }
7376
+ document.body.appendChild(this.dialog);
7377
+ this.dialog.showModal();
7378
+ if (this.opts.position === "trigger") {
7379
+ const setTimeoutId = setTimeout(() => {
7380
+ this.setPosition();
7381
+ clearTimeout(setTimeoutId);
7382
+ }, 0);
7383
+ }
7384
+ return this;
7385
+ }
7386
+ /**
7387
+ * Closes and removes the dialog
7388
+ */
7389
+ close() {
7390
+ if (this.dialog) {
7391
+ this.dialog.close();
7392
+ this.dialog.remove();
7393
+ this.dialog = null;
7394
+ }
7395
+ }
7396
+ /**
7397
+ * Static shorthand for simple alert dialog
7398
+ * @param {string} message - Alert message
7399
+ * @param {Function} [onConfirm] - Optional callback when confirmed
7400
+ * @returns {Dialog} Dialog instance
7401
+ */
7402
+ static alert(message, onConfirm = () => {
7403
+ }) {
7404
+ return new Dialog({
7405
+ content: {
7406
+ tag: "p",
7407
+ className: "dialog-message",
7408
+ textContent: message
7409
+ },
7410
+ confirmText: () => mi18n.get("ok") || "OK",
7411
+ cancelText: "",
7412
+ // Hide cancel button by returning empty string
7413
+ onConfirm: () => onConfirm()
7414
+ });
7415
+ }
7416
+ /**
7417
+ * Static shorthand for confirmation dialog
7418
+ * @param {string} message - Confirmation question
7419
+ * @param {Function} [onConfirm] - Callback when confirmed
7420
+ * @param {Function} [onCancel] - Callback when cancelled
7421
+ * @returns {Dialog} Dialog instance
7422
+ */
7423
+ static confirm(message, onConfirm = () => {
7424
+ }, onCancel = () => {
7425
+ }) {
7426
+ return new Dialog({
7427
+ content: {
7428
+ tag: "p",
7429
+ className: "dialog-message",
7430
+ textContent: message
7431
+ },
7432
+ confirmText: () => mi18n.get("confirm") || "Confirm",
7433
+ onConfirm: () => onConfirm(),
7434
+ onCancel: () => onCancel()
7435
+ });
7436
+ }
7437
+ /**
7438
+ * Static shorthand for prompt dialog
7439
+ * @param {string} message - Prompt message
7440
+ * @param {Function} onSubmit - Callback with user input value
7441
+ * @param {string} [defaultValue] - Default input value
7442
+ * @returns {Dialog} Dialog instance
7443
+ */
7444
+ static prompt(message, onSubmit = () => {
7445
+ }, defaultValue = "") {
7446
+ return new Dialog({
7447
+ content: [
7448
+ {
7449
+ tag: "label",
7450
+ className: "dialog-prompt-label",
7451
+ children: [
7452
+ {
7453
+ tag: "p",
7454
+ className: "dialog-message",
7455
+ textContent: message
7456
+ },
7457
+ {
7458
+ tag: "input",
7459
+ type: "text",
7460
+ name: "prompt-value",
7461
+ className: "dialog-prompt-input",
7462
+ value: defaultValue
7463
+ }
7464
+ ]
7465
+ }
7466
+ ],
7467
+ onConfirm: (formData) => {
7468
+ const value = formData.get("prompt-value");
7469
+ onSubmit(value);
7470
+ }
7471
+ });
7472
+ }
7473
+ }
7163
7474
  const hiddenPropertyClassname = "hidden-property";
7164
7475
  const hiddenOptionClassname = "hidden-option";
7165
7476
  const optionsAddressRegex = /\.options\[\d+\]$/;
@@ -7547,7 +7858,7 @@ class EditPanelItem {
7547
7858
  const conditionTypeWrap = this.conditionTypeWrap.get(conditionType);
7548
7859
  const conditionField = conditionTypeWrap.children[index2];
7549
7860
  conditionField.destroy();
7550
- conditionTypeWrap.removeChild(conditionField.dom);
7861
+ conditionField.dom.remove();
7551
7862
  };
7552
7863
  generateConditionFields = (conditionType, conditionVals) => {
7553
7864
  this.conditions = /* @__PURE__ */ new Map();
@@ -7598,24 +7909,52 @@ class EditPanelItem {
7598
7909
  };
7599
7910
  return controls;
7600
7911
  }
7912
+ /**
7913
+ * Get config-provided options for an attribute
7914
+ * @param {String} attrKey - The attribute key (e.g., 'attrs.type')
7915
+ * @returns {Array|null} Array of options if config provides them, null otherwise
7916
+ */
7917
+ getConfigAttrOptions(attrKey) {
7918
+ const attrName = attrKey.split(".").pop();
7919
+ const configValue = this.field.config?.attrs?.[attrName];
7920
+ if (Array.isArray(configValue)) {
7921
+ return configValue;
7922
+ }
7923
+ return null;
7924
+ }
7601
7925
  itemInput(key, value) {
7602
- const valType = dom.childType(value) || "string";
7926
+ if (this.isDisabled) {
7927
+ return null;
7928
+ }
7929
+ let valType = dom.childType(value) || "string";
7930
+ let effectiveValue = value;
7931
+ if (this.panelName === "attrs") {
7932
+ const configAttrOptions = this.getConfigAttrOptions(key);
7933
+ if (configAttrOptions) {
7934
+ effectiveValue = configAttrOptions.map((opt) => ({
7935
+ ...opt,
7936
+ selected: opt.value === value
7937
+ }));
7938
+ valType = "array";
7939
+ }
7940
+ }
7603
7941
  const dataKey = panelDataKeyMap.get(this.panelName)?.({ itemKey: this.itemKey, key }) || this.itemKey;
7604
7942
  const labelKey = dataKey.split(".").filter(Number.isNaN).join(".") || key;
7605
- const baseConfig = ITEM_INPUT_TYPE_MAP[valType]({ key, value });
7606
- const name2 = `${this.field.shortId}-${slugifyAddress(dataKey).replace(/-\d+-(selected)/g, "-$1")}`;
7943
+ const baseConfig = ITEM_INPUT_TYPE_MAP[valType]({ key, value: effectiveValue });
7944
+ const name2 = `${this.field.shortId}-${slugifyAddress(dataKey).replaceAll(/-\d+-(selected)/g, "-$1")}`;
7607
7945
  const config = {
7608
- label: this.panelName !== "options" && (labelHelper(labelKey) || toTitleCase(labelKey)),
7609
- labelAfter: false
7946
+ label: this.panelName !== "options" && labelHelper(labelKey),
7947
+ labelAfter: false,
7948
+ inputWrap: ["f-input-wrap", this.isLocked && "locked-prop", this.isDisabled && "disabled-prop"].filter(Boolean).join(" ")
7610
7949
  };
7611
7950
  const attrs = {
7612
7951
  name: baseConfig.attrs.type === "checkbox" ? `${name2}[]` : name2
7613
7952
  };
7614
7953
  attrs.disabled = this.isDisabled;
7615
- attrs.locked = this.isLocked;
7954
+ attrs.readonly = this.isLocked;
7616
7955
  const itemInputAction = itemInputActions.get(this.itemSlug)?.(this);
7617
7956
  const action = mergeActions(INPUT_TYPE_ACTION[valType](dataKey, this.field), itemInputAction || {});
7618
- const inputConfig = merge(ITEM_INPUT_TYPE_MAP[valType]({ key, value }), { action, attrs, config });
7957
+ const inputConfig = merge(ITEM_INPUT_TYPE_MAP[valType]({ key, value: effectiveValue }), { action, attrs, config });
7619
7958
  if (CHECKED_TYPES.includes(key)) {
7620
7959
  return {
7621
7960
  className: "f-addon",
@@ -7630,6 +7969,22 @@ const addAttributeActions = {
7630
7969
  toggleOptionMultiSelect(!!val, field2);
7631
7970
  }
7632
7971
  };
7972
+ const defaultConfigOptions = [
7973
+ { label: labelHelper("config.label"), value: "label" },
7974
+ { label: labelHelper("config.hideLabel"), value: "hideLabel" },
7975
+ { label: labelHelper("config.helpText"), value: "helpText" },
7976
+ { label: labelHelper("config.labelAfter"), value: "labelAfter" },
7977
+ { label: labelHelper("config.disableHtmlLabel"), value: "disableHtmlLabel" },
7978
+ { label: labelHelper("config.tooltip"), value: "tooltip" }
7979
+ ];
7980
+ const defaultConfigValues = {
7981
+ label: "New Field",
7982
+ hideLabel: false,
7983
+ helpText: "",
7984
+ labelAfter: false,
7985
+ disableHtmlLabel: false,
7986
+ tooltip: ""
7987
+ };
7633
7988
  class EditPanel {
7634
7989
  /**
7635
7990
  * Set defaults and load panelData
@@ -7670,16 +8025,23 @@ class EditPanel {
7670
8025
  createProps(data = this.data) {
7671
8026
  this.editPanelItems = Array.from(data).map((dataVal, index2) => {
7672
8027
  const isArray = this.type === "array";
8028
+ const keyBase = dataVal[0];
7673
8029
  const key = isArray ? `[${index2}]` : `.${dataVal[0]}`;
7674
8030
  const val = isArray ? dataVal : { [dataVal[0]]: dataVal[1] };
8031
+ const itemKey = `${this.name}${key}`;
8032
+ const isDisabledProp = this.component.isDisabledProp(itemKey, this.name);
8033
+ const isEditableProp = FILTERED_PANEL_DATA_KEYS.get(this.name)?.has(keyBase) ?? true;
8034
+ if (isDisabledProp || !isEditableProp) {
8035
+ return null;
8036
+ }
7675
8037
  return new EditPanelItem({
7676
- key: `${this.name}${key}`,
8038
+ key: itemKey,
7677
8039
  data: val,
7678
8040
  field: this.component,
7679
8041
  index: index2,
7680
8042
  panel: this
7681
8043
  });
7682
- });
8044
+ }).filter(Boolean);
7683
8045
  const editGroupConfig = {
7684
8046
  tag: "ul",
7685
8047
  attrs: {
@@ -7702,11 +8064,11 @@ class EditPanel {
7702
8064
  */
7703
8065
  createEditButtons() {
7704
8066
  const type = this.name;
7705
- const btnTitle = mi18n.get(`panelEditButtons.${type}`);
7706
8067
  const addActions = {
7707
8068
  attrs: this.addAttribute,
7708
8069
  options: this.addOption,
7709
- conditions: this.addCondition
8070
+ conditions: this.addCondition,
8071
+ config: this.addConfiguration
7710
8072
  };
7711
8073
  const editPanelButtons = [];
7712
8074
  if (type === "conditions") {
@@ -7727,8 +8089,9 @@ class EditPanel {
7727
8089
  };
7728
8090
  editPanelButtons.push(clearAllBtn);
7729
8091
  }
8092
+ const addBtnTitle = mi18n.get(`panelEditButtons.${type}`) || `+ Add ${toTitleCase(type)}`;
7730
8093
  const addBtn = {
7731
- ...dom.btnTemplate({ content: btnTitle, title: btnTitle }),
8094
+ ...dom.btnTemplate({ content: addBtnTitle, title: addBtnTitle }),
7732
8095
  className: `add-${type}`,
7733
8096
  action: {
7734
8097
  click: (evt) => {
@@ -7745,7 +8108,7 @@ class EditPanel {
7745
8108
  };
7746
8109
  }
7747
8110
  const eventType = toTitleCase(type);
7748
- const customEvt = new window.CustomEvent(`onAdd${eventType}`, {
8111
+ const customEvt = new globalThis.CustomEvent(`onAdd${eventType}`, {
7749
8112
  detail: addEvt
7750
8113
  });
7751
8114
  actions.add[type](addEvt);
@@ -7826,6 +8189,37 @@ class EditPanel {
7826
8189
  this.component.set(itemKey, evt.template);
7827
8190
  this.component.resizePanelWrap();
7828
8191
  };
8192
+ addConfiguration = () => {
8193
+ const configData = this.component.get("config");
8194
+ const dialog = new Dialog({
8195
+ className: "config-item-dialog",
8196
+ content: [
8197
+ {
8198
+ tag: "select",
8199
+ config: { label: mi18n.get("selectConfigKey") || "Select Configuration Key" },
8200
+ attrs: { name: "selectConfigKey", required: true, className: "config-key-select" },
8201
+ options: defaultConfigOptions.filter((opt) => !(opt.value in configData))
8202
+ }
8203
+ ],
8204
+ onConfirm: (formData) => {
8205
+ const configKey = formData.get("selectConfigKey").trim();
8206
+ const itemKey = `config.${configKey}`;
8207
+ if (configKey) {
8208
+ const newConfig = new EditPanelItem({
8209
+ key: itemKey,
8210
+ data: defaultConfigValues[configKey],
8211
+ field: this.component,
8212
+ panel: this
8213
+ });
8214
+ this.editPanelItems.push(newConfig);
8215
+ this.props.appendChild(newConfig.dom);
8216
+ this.component.debouncedUpdatePreview();
8217
+ this.component.resizePanelWrap();
8218
+ }
8219
+ }
8220
+ });
8221
+ dialog.open();
8222
+ };
7829
8223
  /**
7830
8224
  * Clears all items from the component property based on its type.
7831
8225
  * Sets the property to an empty array for 'array' type or empty object for other types.
@@ -7846,7 +8240,7 @@ class EditPanel {
7846
8240
  };
7847
8241
  actions.remove[this.name](removeEvt);
7848
8242
  const eventType = toTitleCase(this.name);
7849
- const customEvt = new window.CustomEvent(`onRemove${eventType}`, {
8243
+ const customEvt = new globalThis.CustomEvent(`onRemove${eventType}`, {
7850
8244
  detail: removeEvt
7851
8245
  });
7852
8246
  document.dispatchEvent(customEvt);
@@ -8001,10 +8395,6 @@ class Panels {
8001
8395
  title: mi18n.get("controlGroups.nextGroup"),
8002
8396
  type: "button"
8003
8397
  },
8004
- dataset: {
8005
- toggle: "tooltip",
8006
- placement: "top"
8007
- },
8008
8398
  action: {
8009
8399
  click: (e2) => this.nav.nextGroup(e2)
8010
8400
  },
@@ -8017,10 +8407,6 @@ class Panels {
8017
8407
  title: mi18n.get("controlGroups.prevGroup"),
8018
8408
  type: "button"
8019
8409
  },
8020
- dataset: {
8021
- toggle: "tooltip",
8022
- placement: "top"
8023
- },
8024
8410
  action: {
8025
8411
  click: (e2) => this.nav.prevGroup(e2)
8026
8412
  },
@@ -8151,8 +8537,7 @@ class Component extends Data {
8151
8537
  this.shortId = this.id.slice(0, this.id.indexOf("-"));
8152
8538
  this.name = name2;
8153
8539
  this.indexName = `${name2}s`;
8154
- this.config = components[`${this.name}s`].config;
8155
- merge(this.config, data.config);
8540
+ this.config = { ...data.config, ...components[`${this.name}s`].config };
8156
8541
  this.address = `${this.name}s.${this.id}`;
8157
8542
  this.dataPath = `${this.address}.`;
8158
8543
  this.editPanels = /* @__PURE__ */ new Map();
@@ -8282,7 +8667,7 @@ class Component extends Data {
8282
8667
  // copy array since children will be modified
8283
8668
  });
8284
8669
  forEach(children, (child) => child.remove());
8285
- this.dom.parentElement.removeChild(this.dom);
8670
+ this.dom.remove();
8286
8671
  remove(components.getAddress(`${parent.name}s.${parent.id}.children`), this.id);
8287
8672
  if (!parent.children.length) {
8288
8673
  parent.emptyClass();
@@ -8853,12 +9238,18 @@ class Component extends Data {
8853
9238
  * @return {Boolean}
8854
9239
  */
8855
9240
  isDisabledProp = (propName, kind = "attrs") => {
8856
- const propKind = this.config.panels[kind];
8857
- if (!propKind) {
9241
+ if (get(this.config, propName)) {
8858
9242
  return false;
8859
9243
  }
8860
- const disabledAttrs = propKind.disabled.concat(this.get("config.disabled"));
8861
- return disabledAttrs.includes(propName);
9244
+ const disabledConfigProps = this.config?.disabled || [];
9245
+ const isDisabledConfigProp = disabledConfigProps.includes(propName);
9246
+ if (isDisabledConfigProp) {
9247
+ return true;
9248
+ }
9249
+ const basePropName = trimKeyPrefix(propName);
9250
+ const disabledPanelProps = this.config?.panels[kind]?.disabled || [];
9251
+ const isDisabledPanelProp = disabledPanelProps.includes(basePropName);
9252
+ return isDisabledPanelProp;
8862
9253
  };
8863
9254
  /**
8864
9255
  * Checks if property can be removed
@@ -8866,12 +9257,18 @@ class Component extends Data {
8866
9257
  * @return {Boolean}
8867
9258
  */
8868
9259
  isLockedProp = (propName, kind = "attrs") => {
8869
- const propKind = this.config.panels[kind];
8870
- if (!propKind) {
8871
- return false;
9260
+ const lockedConfigProps = this.config?.locked || [];
9261
+ const isLockedConfigProp = lockedConfigProps.includes(propName);
9262
+ if (isLockedConfigProp) {
9263
+ return true;
9264
+ }
9265
+ const basePropName = trimKeyPrefix(propName);
9266
+ const lockedPanelProps = this.config?.panels[kind]?.locked || [];
9267
+ const isLockedPanelProp = lockedPanelProps.includes(basePropName);
9268
+ if (isLockedPanelProp) {
9269
+ return true;
8872
9270
  }
8873
- const lockedAttrs = propKind.locked.concat(this.get("config.locked"));
8874
- return lockedAttrs.includes(propName);
9271
+ return false;
8875
9272
  };
8876
9273
  /**
8877
9274
  * Generate the markup for field edit mode
@@ -8907,14 +9304,14 @@ class Component extends Data {
8907
9304
  if (!this.config) {
8908
9305
  return null;
8909
9306
  }
8910
- const editable = ["object", "array"];
9307
+ const editable = /* @__PURE__ */ new Set(["object", "array"]);
8911
9308
  const panelOrder = unique([...this.config.panels.order, ...Object.keys(this.data)]);
8912
- const noPanels = ["children", "config", "meta", "action", "events", ...this.config.panels.disabled];
8913
- const allowedPanels = panelOrder.filter((panelName) => !noPanels.includes(panelName));
9309
+ const noPanels = /* @__PURE__ */ new Set(["children", "meta", "action", "events", ...this.config.panels.disabled]);
9310
+ const allowedPanels = panelOrder.filter((panelName) => !noPanels.has(panelName));
8914
9311
  for (const panelName of allowedPanels) {
8915
9312
  const panelData = this.get(panelName);
8916
9313
  const propType = dom.childType(panelData);
8917
- if (editable.includes(propType)) {
9314
+ if (editable.has(propType)) {
8918
9315
  const editPanel = new EditPanel(panelData, panelName, this);
8919
9316
  this.editPanels.set(editPanel.name, editPanel);
8920
9317
  }
@@ -9096,7 +9493,7 @@ class ResizeColumn {
9096
9493
  return value;
9097
9494
  }
9098
9495
  }
9099
- const DEFAULT_DATA$3 = () => Object.freeze({
9496
+ const DEFAULT_DATA$2 = () => Object.freeze({
9100
9497
  config: {
9101
9498
  width: "100%"
9102
9499
  },
@@ -9122,7 +9519,7 @@ class Column extends Component {
9122
9519
  * @return {Object} Column config object
9123
9520
  */
9124
9521
  constructor(columnData) {
9125
- super("column", { ...DEFAULT_DATA$3(), ...columnData });
9522
+ super("column", { ...DEFAULT_DATA$2(), ...columnData });
9126
9523
  const childWrap = this.createChildWrap();
9127
9524
  this.dom = dom.create({
9128
9525
  tag: "li",
@@ -9221,7 +9618,7 @@ let Columns$1 = class Columns extends ComponentData {
9221
9618
  }
9222
9619
  };
9223
9620
  const columns = new Columns$1();
9224
- const DEFAULT_DATA$2 = () => Object.freeze({
9621
+ const DEFAULT_DATA$1 = () => Object.freeze({
9225
9622
  config: {
9226
9623
  fieldset: false,
9227
9624
  // wrap contents of row in fieldset
@@ -9240,7 +9637,7 @@ class Row extends Component {
9240
9637
  * @return {Object}
9241
9638
  */
9242
9639
  constructor(rowData) {
9243
- super("row", { ...DEFAULT_DATA$2(), ...rowData });
9640
+ super("row", { ...DEFAULT_DATA$1(), ...rowData });
9244
9641
  const children = this.createChildWrap();
9245
9642
  this.dom = dom.create({
9246
9643
  tag: "li",
@@ -9503,7 +9900,7 @@ let Rows$1 = class Rows extends ComponentData {
9503
9900
  }
9504
9901
  };
9505
9902
  const rows = new Rows$1();
9506
- const DEFAULT_DATA$1 = () => ({ conditions: [CONDITION_TEMPLATE()], children: [] });
9903
+ const DEFAULT_DATA = () => ({ conditions: [CONDITION_TEMPLATE()], children: [] });
9507
9904
  class Stage extends Component {
9508
9905
  /**
9509
9906
  * Process options and load existing fields from data to the stage
@@ -9512,7 +9909,7 @@ class Stage extends Component {
9512
9909
  * @return {Object} DOM element
9513
9910
  */
9514
9911
  constructor(stageData) {
9515
- super("stage", { ...DEFAULT_DATA$1(), ...stageData });
9912
+ super("stage", { ...DEFAULT_DATA(), ...stageData });
9516
9913
  this.updateEditPanels();
9517
9914
  this.debouncedUpdateEditPanels = debounce(this.updateEditPanels);
9518
9915
  ({
@@ -9695,9 +10092,9 @@ class Control {
9695
10092
  * @return {String} the translated label
9696
10093
  */
9697
10094
  i18n(lookup, args) {
9698
- const locale2 = mi18n.locale;
10095
+ const locale = mi18n.locale;
9699
10096
  const controlTranslations = this.definition?.i18n;
9700
- const localeTranslations = controlTranslations?.[locale2] || {};
10097
+ const localeTranslations = controlTranslations?.[locale] || {};
9701
10098
  return (localeTranslations[lookup]?.() ?? localeTranslations[lookup]) || mi18n.get(lookup, args);
9702
10099
  }
9703
10100
  }
@@ -10047,9 +10444,6 @@ const index$7 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
10047
10444
  Controls: Controls$1,
10048
10445
  default: Controls$2
10049
10446
  }, Symbol.toStringTag, { value: "Module" }));
10050
- const DEFAULT_DATA = () => ({
10051
- // conditions: [CONDITION_TEMPLATE()],
10052
- });
10053
10447
  const checkableTypes = /* @__PURE__ */ new Set(["checkbox", "radio"]);
10054
10448
  const isSelectableType = /* @__PURE__ */ new Set(["radio", "checkbox", "select-one", "select-multiple"]);
10055
10449
  class Field extends Component {
@@ -10059,7 +10453,7 @@ class Field extends Component {
10059
10453
  * @return {Object} field object
10060
10454
  */
10061
10455
  constructor(fieldData = /* @__PURE__ */ Object.create(null)) {
10062
- super("field", { ...DEFAULT_DATA(), ...fieldData });
10456
+ super("field", fieldData);
10063
10457
  this.debouncedUpdateEditPanels = debounce(this.updateEditPanels);
10064
10458
  this.debouncedUpdatePreview = debounce(this.updatePreview);
10065
10459
  this.label = dom.create(this.labelConfig);
@@ -10095,34 +10489,41 @@ class Field extends Component {
10095
10489
  if (hideLabel) {
10096
10490
  return null;
10097
10491
  }
10098
- const labelVal = this.get("config.editorLabel") || this.get("config.label");
10099
- const required = this.get("attrs.required");
10100
- const disableHTML = this.config.label.disableHTML;
10101
- const labelConfig = () => {
10102
- const config = {
10103
- tag: "label",
10104
- attrs: {}
10105
- };
10106
- if (disableHTML) {
10107
- config.tag = "input";
10108
- config.attrs.value = labelVal;
10109
- return config;
10110
- }
10111
- config.attrs.contenteditable = true;
10112
- config.children = labelVal;
10113
- return config;
10492
+ const { label, editorLabel, disableHtmlLabel, helpText, tooltip: tooltip2 } = this.get("config");
10493
+ const { required: isRequired } = this.get("attrs") || {};
10494
+ const labelVal = editorLabel || label;
10495
+ const labelBase = {
10496
+ tag: "label",
10497
+ attrs: {}
10114
10498
  };
10115
- const label = {
10116
- ...labelConfig(),
10499
+ if (disableHtmlLabel) {
10500
+ labelBase.tag = "input";
10501
+ labelBase.attrs.value = labelVal;
10502
+ } else {
10503
+ labelBase.attrs.contenteditable = true;
10504
+ labelBase.children = labelVal;
10505
+ }
10506
+ const labelObj = {
10507
+ ...labelBase,
10117
10508
  action: {
10118
- input: ({ target: { innerHTML, innerText } }) => {
10119
- super.set("config.label", disableHTML ? innerText : innerHTML);
10509
+ input: ({ target: { innerHTML, value } }) => {
10510
+ const labelVal2 = disableHtmlLabel ? value : innerHTML;
10511
+ super.set("config.label", labelVal2);
10512
+ const configPanelLabelInput = this.dom.querySelector(".config-label");
10513
+ if (configPanelLabelInput) {
10514
+ configPanelLabelInput.value = labelVal2;
10515
+ }
10120
10516
  }
10121
10517
  }
10122
10518
  };
10123
10519
  const labelWrap = {
10124
10520
  className: "prev-label",
10125
- children: [label, required && dom.requiredMark()]
10521
+ children: [
10522
+ labelObj,
10523
+ isRequired && dom.requiredMark(),
10524
+ tooltip2 && dom.tooltip(tooltip2),
10525
+ helpText && dom.helpText(helpText)
10526
+ ]
10126
10527
  };
10127
10528
  return labelWrap;
10128
10529
  }
@@ -10134,18 +10535,23 @@ class Field extends Component {
10134
10535
  */
10135
10536
  set(path, value) {
10136
10537
  const data = this.setData(path, value);
10137
- this.debouncedUpdatePreview();
10138
10538
  return data;
10139
10539
  }
10140
10540
  /**
10141
10541
  * Update the label dom when label data changes
10142
10542
  */
10143
10543
  updateLabel() {
10144
- if (!this.label) {
10145
- return null;
10146
- }
10147
10544
  const newLabel = dom.create(this.labelConfig);
10148
- this.label.replaceWith(newLabel);
10545
+ if (this.label || !newLabel) {
10546
+ this.label.remove();
10547
+ }
10548
+ if (newLabel) {
10549
+ if (this.data.config?.labelAfter) {
10550
+ this.dom.append(newLabel);
10551
+ } else {
10552
+ this.dom.prepend(newLabel);
10553
+ }
10554
+ }
10149
10555
  this.label = newLabel;
10150
10556
  }
10151
10557
  /**
@@ -10166,7 +10572,7 @@ class Field extends Component {
10166
10572
  if (isSelectableType.has(type)) {
10167
10573
  const selectedOptions = this.preview.querySelectorAll(":checked");
10168
10574
  const optionsData = this.get("options");
10169
- const checkedType = optionsData?.[0]?.selected !== void 0 ? "selected" : "checked";
10575
+ const checkedType = optionsData?.[0]?.selected === void 0 ? "checked" : "selected";
10170
10576
  const optionsDataMap = optionsData.reduce((acc, option2) => {
10171
10577
  acc[option2.value] = option2;
10172
10578
  acc[option2.value][checkedType] = false;
@@ -10417,6 +10823,7 @@ const index$6 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
10417
10823
  Columns: Columns2,
10418
10824
  Components,
10419
10825
  Controls: Controls2,
10826
+ Dialog,
10420
10827
  Fields: Fields2,
10421
10828
  Rows: Rows2,
10422
10829
  Stages: Stages2,
@@ -10448,19 +10855,19 @@ const defaults$1 = {
10448
10855
  onSave: (_evt) => {
10449
10856
  },
10450
10857
  confirmClearAll: (evt) => {
10451
- if (window.confirm(evt.confirmationMessage)) {
10858
+ if (globalThis.confirm(evt.confirmationMessage)) {
10452
10859
  evt.clearAllAction(evt);
10453
10860
  }
10454
10861
  }
10455
10862
  };
10456
10863
  const defaultCustomEvent = ({ src, ...evtData }, type = EVENT_FORMEO_UPDATED) => {
10457
- const evt = new window.CustomEvent(type, {
10864
+ const evt = new globalThis.CustomEvent(type, {
10458
10865
  detail: evtData,
10459
10866
  bubbles: events.opts?.debug || events.opts?.bubbles
10460
10867
  });
10461
10868
  evt.data = (src || document).dispatchEvent(evt);
10462
10869
  if (type === EVENT_FORMEO_UPDATED) {
10463
- const changedEvt = new window.CustomEvent(EVENT_FORMEO_CHANGED, {
10870
+ const changedEvt = new globalThis.CustomEvent(EVENT_FORMEO_CHANGED, {
10464
10871
  detail: evtData,
10465
10872
  bubbles: events.opts?.debug || events.opts?.bubbles
10466
10873
  });
@@ -10487,7 +10894,7 @@ const events = {
10487
10894
  };
10488
10895
  const formeoUpdatedThrottled = throttle$1(() => {
10489
10896
  const eventData = {
10490
- timeStamp: window.performance.now(),
10897
+ timeStamp: globalThis.performance.now(),
10491
10898
  type: EVENT_FORMEO_UPDATED,
10492
10899
  detail: components.formData
10493
10900
  };
@@ -10596,14 +11003,14 @@ window.addEventListener("resize", onResizeWindow);
10596
11003
  const defaultActions = {
10597
11004
  add: {
10598
11005
  attr: (evt) => {
10599
- const attr = window.prompt(evt.message.attr);
11006
+ const attr = globalThis.prompt(evt.message.attr);
10600
11007
  if (attr && evt.isDisabled(attr)) {
10601
- window.alert(mi18n.get("attributeNotPermitted", attr || ""));
11008
+ globalThis.alert(mi18n.get("attributeNotPermitted", attr));
10602
11009
  return actions.add.attrs(evt);
10603
11010
  }
10604
11011
  let val;
10605
11012
  if (attr) {
10606
- val = String(window.prompt(evt.message.value, ""));
11013
+ val = String(globalThis.prompt(evt.message.value, ""));
10607
11014
  evt.addAction(attr, val);
10608
11015
  }
10609
11016
  },
@@ -10612,6 +11019,9 @@ const defaultActions = {
10612
11019
  },
10613
11020
  condition: (evt) => {
10614
11021
  evt.addAction(evt);
11022
+ },
11023
+ config: (evt) => {
11024
+ evt.addAction(evt);
10615
11025
  }
10616
11026
  },
10617
11027
  remove: {
@@ -10653,6 +11063,9 @@ const actions = {
10653
11063
  conditions: (evt) => {
10654
11064
  evt.template = evt.template || CONDITION_TEMPLATE();
10655
11065
  return actions.opts.add.condition(evt);
11066
+ },
11067
+ config: (evt) => {
11068
+ return actions.opts.add.config(evt);
10656
11069
  }
10657
11070
  },
10658
11071
  remove: {
@@ -10681,10 +11094,6 @@ const actions = {
10681
11094
  }
10682
11095
  }
10683
11096
  };
10684
- const e = { "en-US": { "en-US": "English", dir: "ltr", "af-ZA": "Afrikaans (South Africa)", "ar-TN": "Arabic (Tunisia)", "cs-CZ": "Czech (Czechia)", "de-DE": "German (Germany)", "es-ES": "European Spanish", "fa-IR": "Persian (Iran)", "fi-FI": "Finnish (Finland)", "fr-FR": "French (France)", "hu-HU": "Hungarian (Hungary)", "it-IT": "Italian (Italy)", "ja-JP": "Japanese (Japan)", "nb-NO": "Norwegian Bokmål (Norway)", "pl-PL": "Polish (Poland)", "pt-BR": "Brazilian Portuguese", "pt-PT": "European Portuguese", "ro-RO": "Romanian (Romania)", "ru-RU": "Russian (Russia)", "th-TH": "Thai (Thailand)", "tr-TR": "Turkish (Türkiye)", "zh-CN": "Chinese (China)", "zh-HK": "Chinese (Hong Kong SAR China)", "action.add.attrs.attr": "What attribute would you like to add?", "action.add.attrs.value": "Default Value", addOption: "Add Option", allFieldsRemoved: "All fields were removed.", allowSelect: "Allow Select", and: "and", attribute: "Attribute", attributeNotPermitted: 'Attribute "{attribute}" is not permitted, please choose another.', attributes: "Attributes", "attrs.class": "Class", "attrs.className": "Class", "attrs.dir": "Direction", "attrs.id": "Id", "attrs.required": "Required", "attrs.style": "Style", "attrs.title": "Title", "attrs.type": "Type", "attrs.value": "Value", autocomplete: "Autocomplete", button: "Button", cannotBeEmpty: "This field cannot be empty", cannotClearFields: "There are no fields to clear", checkbox: "Checkbox", checkboxes: "Checkboxes", class: "Class", clear: "Clear", clearAllMessage: "Are you sure you want to clear all fields?", close: "Close", column: "Column", "condition.target.placeholder": "target", "condition.type.and": "And", "condition.type.if": "If", "condition.type.or": "Or", "condition.type.then": "Then", "condition.value.placeholder": "value", confirmClearAll: "Are you sure you want to remove all fields?", content: "Content", control: "Control", "controlGroups.nextGroup": "Next Group", "controlGroups.prevGroup": "Previous Group", "controls.filteringTerm": 'Filtering "{term}"', "controls.form.button": "Button", "controls.form.checkbox-group": "Checkbox Group", "controls.form.input.date": "Date", "controls.form.input.email": "Email", "controls.form.input.file": "File Upload", "controls.form.input.hidden": "Hidden Input", "controls.form.input.number": "Number", "controls.form.input.text": "Text Input", "controls.form.radio-group": "Radio Group", "controls.form.select": "Select", "controls.form.textarea": "TextArea", "controls.groups.form": "Form Fields", "controls.groups.html": "HTML Elements", "controls.groups.layout": "Layout", "controls.html.divider": "Divider", "controls.html.header": "Header", "controls.html.paragraph": "Paragraph", "controls.layout.column": "Column", "controls.layout.row": "Row", copy: "Copy To Clipboard", danger: "Danger", defineColumnLayout: "Define a column layout", defineColumnWidths: "Define column widths", description: "Help Text", descriptionField: "Description", "editing.row": "Editing Row", editorTitle: "Form Elements", field: "Field", "field.property.invalid": "not valid", "field.property.isChecked": "is checked", "field.property.isNotVisible": "is not visible", "field.property.isVisible": "is visible", "field.property.label": "label", "field.property.valid": "valid", "field.property.value": "value", fieldNonEditable: "This field cannot be edited.", fieldRemoveWarning: "Are you sure you want to remove this field?", fileUpload: "File Upload", formUpdated: "Form Updated", getStarted: "Drag a field from the right to get started.", group: "Group", grouped: "Grouped", hidden: "Hidden Input", hide: "Edit", htmlElements: "HTML Elements", if: "If", "if.condition.source.placeholder": "source", "if.condition.target.placeholder": "target / value", info: "Info", "input.date": "Date", "input.text": "Text", label: "Label", labelCount: "{label} {count}", labelEmpty: "Field Label cannot be empty", "lang.af": "Afrikaans", "lang.ar": "Arabic", "lang.cs": "Czech", "lang.de": "German", "lang.en": "English", "lang.es": "Spanish", "lang.fa": "Persian", "lang.fi": "Finnish", "lang.fr": "French", "lang.hu": "Hungarian", "lang.it": "Italian", "lang.ja": "Japanese", "lang.nb": "Norwegian Bokmål", "lang.pl": "Polish", "lang.pt": "Portuguese", "lang.ro": "Romanian", "lang.ru": "Russian", "lang.th": "Thai", "lang.tr": "Turkish", "lang.zh": "Chinese", layout: "Layout", limitRole: "Limit access to one or more of the following roles:", mandatory: "Mandatory", maxlength: "Max Length", "meta.group": "Group", "meta.icon": "Ico", "meta.label": "Label", minOptionMessage: "This field requires a minimum of 2 options", name: "Name", newOptionLabel: "New {type}", no: "No", number: "Number", off: "Off", on: "On", "operator.contains": "contains", "operator.equals": "equals", "operator.notContains": "not contains", "operator.notEquals": "not equal", "operator.notVisible": "not visible", "operator.visible": "visible", option: "Option", optional: "optional", optionEmpty: "Option value required", optionLabel: "Option {count}", options: "Options", or: "or", order: "Order", "panel.label.attrs": "Attributes", "panel.label.conditions": "Conditions", "panel.label.config": "Configuration", "panel.label.meta": "Meta", "panel.label.options": "Options", "panelEditButtons.attrs": "+ Attribute", "panelEditButtons.conditions": "+ Condition", "panelEditButtons.options": "+ Option", placeholder: "Placeholder", "placeholder.className": "space separated classes", "placeholder.email": "Enter you email", "placeholder.label": "Label", "placeholder.password": "Enter your password", "placeholder.placeholder": "Placeholder", "placeholder.text": "Enter some Text", "placeholder.textarea": "Enter a lot of text", "placeholder.value": "Value", preview: "Preview", primary: "Primary", remove: "Remove", removeMessage: "Remove Element", removeType: "Remove {type}", required: "Required", reset: "Reset", richText: "Rich Text Editor", roles: "Access", row: "Row", "row.makeInputGroup": "Make this row an input group.", "row.makeInputGroupDesc": "Input Groups enable users to add sets of inputs at a time.", "row.settings.fieldsetWrap": "Wrap row in a &lt;fieldset&gt; tag", "row.settings.fieldsetWrap.aria": "Wrap Row in Fieldset", save: "Save", secondary: "Secondary", select: "Select", selectColor: "Select Color", selectionsMessage: "Allow Multiple Selections", selectOptions: "Options", separator: "Separator", settings: "Settings", size: "Size", sizes: "Sizes", "sizes.lg": "Large", "sizes.m": "Default", "sizes.sm": "Small", "sizes.xs": "Extra Small", style: "Style", styles: "Styles", "styles.btn": "Button Style", "styles.btn.danger": "Danger", "styles.btn.default": "Default", "styles.btn.info": "Info", "styles.btn.primary": "Primary", "styles.btn.success": "Success", "styles.btn.warning": "Warning", subtype: "Type", success: "Success", text: "Text Field", then: "Then", "then.condition.target.placeholder": "target", toggle: "Toggle", ungrouped: "Un-Grouped", warning: "Warning", yes: "Yes" } }, i = e["en-US"];
10685
- const locale = "en-US";
10686
- mi18n.addLanguage(locale, i);
10687
- mi18n.setCurrent(locale);
10688
11097
  const defaults = {
10689
11098
  get editor() {
10690
11099
  return {
@@ -10698,7 +11107,6 @@ const defaults = {
10698
11107
  svgSprite: null,
10699
11108
  // null = use bundled sprite, or provide custom URL
10700
11109
  style: CSS_URL,
10701
- // change to null
10702
11110
  iconFont: null,
10703
11111
  // 'glyphicons' || 'font-awesome' || 'fontello'
10704
11112
  config: {},
@@ -10714,7 +11122,6 @@ const defaults = {
10714
11122
  };
10715
11123
  }
10716
11124
  };
10717
- new SmartTooltip();
10718
11125
  let FormeoEditor$1 = class FormeoEditor {
10719
11126
  /**
10720
11127
  * @param {Object} options formeo options
@@ -10769,12 +11176,15 @@ let FormeoEditor$1 = class FormeoEditor {
10769
11176
  */
10770
11177
  async loadResources() {
10771
11178
  document.removeEventListener("DOMContentLoaded", this.loadResources);
10772
- const promises = [];
10773
- promises.push(
11179
+ const promises = [
10774
11180
  fetchIcons(this.opts.svgSprite),
10775
11181
  fetchFormeoStyle(this.opts.style),
10776
- mi18n.init({ ...this.opts.i18n, locale: globalThis.sessionStorage?.getItem(SESSION_LOCALE_KEY) })
10777
- );
11182
+ mi18n.init({
11183
+ preloaded: { "en-US": i },
11184
+ ...this.opts.i18n,
11185
+ locale: globalThis.sessionStorage?.getItem(SESSION_LOCALE_KEY)
11186
+ })
11187
+ ].filter(Boolean);
10778
11188
  await Promise.all(promises);
10779
11189
  if (this.opts.allowEdit) {
10780
11190
  this.init();
@@ -10792,7 +11202,7 @@ let FormeoEditor$1 = class FormeoEditor {
10792
11202
  this.formId = components.get("id");
10793
11203
  this.i18n = {
10794
11204
  setLang: (formeoLocale) => {
10795
- window.sessionStorage?.setItem(SESSION_LOCALE_KEY, formeoLocale);
11205
+ globalThis.sessionStorage?.setItem(SESSION_LOCALE_KEY, formeoLocale);
10796
11206
  const loadLang = mi18n.setCurrent(formeoLocale);
10797
11207
  loadLang.then(() => {
10798
11208
  this.init();
@@ -10800,6 +11210,7 @@ let FormeoEditor$1 = class FormeoEditor {
10800
11210
  }
10801
11211
  };
10802
11212
  this.opts.onLoad?.(this);
11213
+ this.tooltipInstance = new SmartTooltip();
10803
11214
  });
10804
11215
  }
10805
11216
  load(formData = this.userFormData, opts = this.opts) {
@@ -10812,7 +11223,7 @@ let FormeoEditor$1 = class FormeoEditor {
10812
11223
  */
10813
11224
  render() {
10814
11225
  if (!this.controls) {
10815
- return window.requestAnimationFrame(() => this.render());
11226
+ return globalThis.requestAnimationFrame(() => this.render());
10816
11227
  }
10817
11228
  this.stages = Object.values(components.get("stages"));
10818
11229
  if (this.opts.controlOnLeft) {
@@ -11501,7 +11912,8 @@ class TextControl extends Control {
11501
11912
  className: ""
11502
11913
  },
11503
11914
  config: {
11504
- label: mi18n.get("controls.form.input.text")
11915
+ label: mi18n.get("controls.form.input.text"),
11916
+ hideLabel: false
11505
11917
  },
11506
11918
  meta: {
11507
11919
  group: "common",