formeo 5.5.0 → 5.7.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/demo/assets/css/demo.min.css +2 -2
- package/dist/demo/assets/css/demo.min.css.gz +0 -0
- package/dist/demo/assets/css/formeo.min.css +2 -2
- package/dist/demo/assets/img/formeo-sprite.svg +1 -1
- package/dist/demo/assets/js/demo.min.js +76 -92
- package/dist/demo/assets/js/demo.min.js.gz +0 -0
- package/dist/demo/assets/js/form.min.js +1 -1
- package/dist/demo/assets/js/formeo.cjs.js +1008 -38
- package/dist/demo/assets/js/formeo.es.js +1008 -38
- package/dist/demo/assets/js/formeo.min.cjs.js +2 -2
- package/dist/demo/assets/js/formeo.min.es.js +2 -2
- package/dist/demo/assets/js/formeo.min.js +1008 -38
- package/dist/demo/assets/js/formeo.min.umd.js +2 -2
- package/dist/demo/assets/js/formeo.umd.js +1008 -38
- package/dist/demo/assets/js/html.min.js +1 -1
- package/dist/demo/assets/js/layout.min.js +1 -1
- package/dist/demo/assets/js/mode-json.min.js +1 -1
- package/dist/demo/assets/js/mode-json.min.js.gz +0 -0
- package/dist/demo/assets/js/theme-github_light_default.min.js +1 -1
- package/dist/demo/index.html +1 -1
- package/dist/formeo-sprite.svg +1 -1
- package/dist/formeo.cjs.js +1008 -38
- package/dist/formeo.css +138 -2
- package/dist/formeo.es.js +1008 -38
- package/dist/formeo.min.cjs.js +2 -2
- package/dist/formeo.min.css +2 -2
- package/dist/formeo.min.es.js +2 -2
- package/dist/formeo.min.js +1008 -38
- package/dist/formeo.min.umd.js +2 -2
- package/dist/formeo.umd.js +1008 -38
- package/package.json +1 -1
package/dist/formeo.umd.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
|
|
2
2
|
/**
|
|
3
3
|
formeo - https://formeo.io
|
|
4
|
-
Version: 5.
|
|
4
|
+
Version: 5.6.0
|
|
5
5
|
Author: Draggable https://draggable.io
|
|
6
6
|
*/
|
|
7
7
|
|
|
@@ -6064,7 +6064,7 @@ Author: Draggable https://draggable.io
|
|
|
6064
6064
|
var name$1, version$2, type, main, module$1, unpkg, exports$1, files, homepage, repository, author, contributors, bugs, description, keywords, ignore, config, scripts, devDependencies, dependencies, release, commitlint, package_default;
|
|
6065
6065
|
var init_package = __esmMin((() => {
|
|
6066
6066
|
name$1 = "formeo";
|
|
6067
|
-
version$2 = "5.
|
|
6067
|
+
version$2 = "5.6.0";
|
|
6068
6068
|
type = "module";
|
|
6069
6069
|
main = "dist/formeo.cjs.js";
|
|
6070
6070
|
module$1 = "dist/formeo.es.js";
|
|
@@ -8337,7 +8337,7 @@ Author: Draggable https://draggable.io
|
|
|
8337
8337
|
}
|
|
8338
8338
|
return result;
|
|
8339
8339
|
}
|
|
8340
|
-
var import_mergeWith, uuidv4, shortId, match, remove, componentType, unique, uuid, merge, clone$1, percent, numToPercent, formDataStorageKey, sessionStorage, isAddress, isInternalAddress, cleanFormData;
|
|
8340
|
+
var import_mergeWith, uuidv4, shortId, match, remove, componentType, unique, uuid, looksLikeArrayIndex, nonIndexId, merge, clone$1, percent, numToPercent, formDataStorageKey, sessionStorage, isAddress, isInternalAddress, cleanFormData;
|
|
8341
8341
|
var init_utils = __esmMin((() => {
|
|
8342
8342
|
import_mergeWith = /* @__PURE__ */ __toESM(require_mergeWith(), 1);
|
|
8343
8343
|
init_constants();
|
|
@@ -8369,6 +8369,12 @@ Author: Draggable https://draggable.io
|
|
|
8369
8369
|
uuid = (elem) => {
|
|
8370
8370
|
return elem?.attrs?.id || elem?.id || shortId();
|
|
8371
8371
|
};
|
|
8372
|
+
looksLikeArrayIndex = (id) => /^(?:0|[1-9]\d*)$/.test(id) && Number(id) < 2 ** 32 - 1;
|
|
8373
|
+
nonIndexId = () => {
|
|
8374
|
+
let id = uuid();
|
|
8375
|
+
while (looksLikeArrayIndex(id)) id = uuid();
|
|
8376
|
+
return id;
|
|
8377
|
+
};
|
|
8372
8378
|
merge = (obj1, obj2) => {
|
|
8373
8379
|
const customizer = (objValue, srcValue) => {
|
|
8374
8380
|
if (Array.isArray(objValue)) {
|
|
@@ -8435,8 +8441,8 @@ Author: Draggable https://draggable.io
|
|
|
8435
8441
|
//#region src/lib/icons/formeo-sprite.svg?raw
|
|
8436
8442
|
var formeo_sprite_default;
|
|
8437
8443
|
var init_formeo_sprite = __esmMin((() => {
|
|
8438
|
-
formeo_sprite_default = "<?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 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 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 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=\"currentColor\" 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\"><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\"/></symbol><symbol viewBox=\"0 0 20 28\" id=\"f-i-paragraph\" xmlns=\"http://www.w3.org/2000/svg\"><path 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=\"currentColor\" 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 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 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 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 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>";
|
|
8439
|
-
})), name, version$1, PACKAGE_NAME, formeoSpriteId, FALLBACK_SVG_SPRITE_URL, CSS_URL, FALLBACK_CSS_URL, PANEL_CLASSNAME, CONTROL_GROUP_CLASSNAME, STAGE_CLASSNAME, ROW_CLASSNAME, COLUMN_CLASSNAME, FIELD_CLASSNAME, HIDDEN_BY_CONDITION_SELECTOR, CUSTOM_COLUMN_OPTION_CLASSNAME, COLUMN_PRESET_CLASSNAME, COLUMN_RESIZE_CLASSNAME, CHILD_CLASSNAME_MAP, INTERNAL_COMPONENT_TYPES, INTERNAL_COMPONENT_INDEX_TYPES, INTERNAL_COMPONENT_INDEX_REGEX, COMPONENT_TYPES, COMPONENT_INDEX_TYPES, COMPONENT_INDEX_TYPE_MAP, COMPONENT_TYPE_MAP, COMPONENT_TYPE_CONFIGS, COMPONENT_TYPE_CLASSNAMES, COMPONENT_TYPE_CLASSNAMES_LOOKUP, COMPONENT_TYPE_CLASSNAMES_ARRAY, COMPONENT_TYPE_CLASSNAMES_REGEXP, childTypeMapVals, childTypeIndexMapVals, parentTypeMap, CHILD_TYPE_MAP, CHILD_TYPE_INDEX_MAP, PARENT_TYPE_MAP, columnTemplates, COLUMN_TEMPLATES, SESSION_FORMDATA_KEY, SESSION_LOCALE_KEY, ANIMATION_SPEED_FAST, ANIMATION_SPEED_SLOW, EVENT_FORMEO_SAVED, EVENT_FORMEO_UPDATED, EVENT_FORMEO_CHANGED, EVENT_FORMEO_UPDATED_STAGE, EVENT_FORMEO_UPDATED_ROW, EVENT_FORMEO_UPDATED_COLUMN, EVENT_FORMEO_UPDATED_FIELD, EVENT_FORMEO_CLEARED, EVENT_FORMEO_ON_RENDER, EVENT_FORMEO_CONDITION_UPDATED, EVENT_FORMEO_ADDED_ROW, EVENT_FORMEO_ADDED_COLUMN, EVENT_FORMEO_ADDED_FIELD, EVENT_FORMEO_REMOVED_ROW, EVENT_FORMEO_REMOVED_COLUMN, EVENT_FORMEO_REMOVED_FIELD, COMPARISON_OPERATORS, LOGICAL_OPERATORS, ASSIGNMENT_OPERATORS, CONDITION_INPUT_ORDER, CHECKABLE_OPTIONS, VISIBLE_OPTIONS, PROPERTY_OPTIONS, OPERATORS, conditionTypeThen, CONDITION_TEMPLATE, UUID_REGEXP, bsColRegExp, iconPrefix, DEFAULT_FORMDATA, CHECKED_TYPES, REVERSED_CHECKED_TYPES, FILTERED_PANEL_DATA_KEYS;
|
|
8444
|
+
formeo_sprite_default = "<?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 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 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 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=\"currentColor\" 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\"><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\"/></symbol><symbol viewBox=\"0 0 512 512\" id=\"f-i-page-move\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M96 32h224l96 96v96h-48v-64h-80v-80h-192v384h192v48h-240v-480zM352 288l128 96-128 96v-64h-128v-64h128v-64z\"/></symbol><symbol viewBox=\"0 0 20 28\" id=\"f-i-paragraph\" xmlns=\"http://www.w3.org/2000/svg\"><path 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=\"currentColor\" 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=\"bgprefix__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=\"bgprefix__g7209\"><path id=\"bgprefix__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=\"bhprefix__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=\"biprefix__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=\"bjprefix__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=\"bkprefix__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 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 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 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 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=\"bpprefix__icomoon-ignore\"/><path d=\"M240 352h-240v128h480v-128h-240zM448 416h-64v-32h64v32zM112 160l128-128 128 128h-80v160h-96v-160z\"/></symbol></svg>";
|
|
8445
|
+
})), name, version$1, PACKAGE_NAME, formeoSpriteId, FALLBACK_SVG_SPRITE_URL, CSS_URL, FALLBACK_CSS_URL, PANEL_CLASSNAME, CONTROL_GROUP_CLASSNAME, STAGE_CLASSNAME, ROW_CLASSNAME, COLUMN_CLASSNAME, FIELD_CLASSNAME, HIDDEN_BY_CONDITION_SELECTOR, CUSTOM_COLUMN_OPTION_CLASSNAME, COLUMN_PRESET_CLASSNAME, COLUMN_RESIZE_CLASSNAME, CHILD_CLASSNAME_MAP, INTERNAL_COMPONENT_TYPES, INTERNAL_COMPONENT_INDEX_TYPES, INTERNAL_COMPONENT_INDEX_REGEX, COMPONENT_TYPES, COMPONENT_INDEX_TYPES, COMPONENT_INDEX_TYPE_MAP, COMPONENT_TYPE_MAP, COMPONENT_TYPE_CONFIGS, COMPONENT_TYPE_CLASSNAMES, COMPONENT_TYPE_CLASSNAMES_LOOKUP, COMPONENT_TYPE_CLASSNAMES_ARRAY, COMPONENT_TYPE_CLASSNAMES_REGEXP, childTypeMapVals, childTypeIndexMapVals, parentTypeMap, CHILD_TYPE_MAP, CHILD_TYPE_INDEX_MAP, PARENT_TYPE_MAP, columnTemplates, COLUMN_TEMPLATES, SESSION_FORMDATA_KEY, SESSION_LOCALE_KEY, ANIMATION_SPEED_FAST, ANIMATION_SPEED_SLOW, EVENT_FORMEO_SAVED, EVENT_FORMEO_UPDATED, EVENT_FORMEO_CHANGED, EVENT_FORMEO_UPDATED_STAGE, EVENT_FORMEO_UPDATED_ROW, EVENT_FORMEO_UPDATED_COLUMN, EVENT_FORMEO_UPDATED_FIELD, EVENT_FORMEO_CLEARED, EVENT_FORMEO_ON_RENDER, EVENT_FORMEO_CONDITION_UPDATED, EVENT_FORMEO_ADDED_ROW, EVENT_FORMEO_ADDED_COLUMN, EVENT_FORMEO_ADDED_FIELD, EVENT_FORMEO_REMOVED_ROW, EVENT_FORMEO_REMOVED_COLUMN, EVENT_FORMEO_REMOVED_FIELD, EVENT_FORMEO_ADDED_STAGE, EVENT_FORMEO_REMOVED_STAGE, EVENT_FORMEO_PAGE_CHANGED, COMPARISON_OPERATORS, LOGICAL_OPERATORS, ASSIGNMENT_OPERATORS, CONDITION_INPUT_ORDER, CHECKABLE_OPTIONS, VISIBLE_OPTIONS, PROPERTY_OPTIONS, OPERATORS, conditionTypeThen, CONDITION_TEMPLATE, UUID_REGEXP, bsColRegExp, iconPrefix, DEFAULT_FORMDATA, CHECKED_TYPES, REVERSED_CHECKED_TYPES, FILTERED_PANEL_DATA_KEYS;
|
|
8440
8446
|
var init_constants = __esmMin((() => {
|
|
8441
8447
|
init_package();
|
|
8442
8448
|
init_utils();
|
|
@@ -8604,6 +8610,9 @@ Author: Draggable https://draggable.io
|
|
|
8604
8610
|
EVENT_FORMEO_REMOVED_ROW = "formeoRemovedRow";
|
|
8605
8611
|
EVENT_FORMEO_REMOVED_COLUMN = "formeoRemovedColumn";
|
|
8606
8612
|
EVENT_FORMEO_REMOVED_FIELD = "formeoRemovedField";
|
|
8613
|
+
EVENT_FORMEO_ADDED_STAGE = "formeoAddedStage";
|
|
8614
|
+
EVENT_FORMEO_REMOVED_STAGE = "formeoRemovedStage";
|
|
8615
|
+
EVENT_FORMEO_PAGE_CHANGED = "formeoPageChanged";
|
|
8607
8616
|
COMPARISON_OPERATORS = {
|
|
8608
8617
|
equals: "==",
|
|
8609
8618
|
notEquals: "!=",
|
|
@@ -8654,7 +8663,7 @@ Author: Draggable https://draggable.io
|
|
|
8654
8663
|
iconPrefix = "f-i-";
|
|
8655
8664
|
DEFAULT_FORMDATA = () => ({
|
|
8656
8665
|
id: uuid(),
|
|
8657
|
-
stages: { [
|
|
8666
|
+
stages: { [nonIndexId()]: {} },
|
|
8658
8667
|
rows: {},
|
|
8659
8668
|
columns: {},
|
|
8660
8669
|
fields: {}
|
|
@@ -10695,19 +10704,19 @@ Author: Draggable https://draggable.io
|
|
|
10695
10704
|
field.set("options", updatedOptions);
|
|
10696
10705
|
}
|
|
10697
10706
|
field.set(dataKey, target.checked);
|
|
10698
|
-
field.updatePreview();
|
|
10707
|
+
field.updatePreview?.();
|
|
10699
10708
|
} }),
|
|
10700
10709
|
string: (dataKey, field) => ({ input: ({ target: { value } }) => {
|
|
10701
10710
|
field.set(dataKey, value);
|
|
10702
|
-
field.debouncedUpdatePreview();
|
|
10711
|
+
field.debouncedUpdatePreview?.();
|
|
10703
10712
|
} }),
|
|
10704
10713
|
number: (dataKey, field) => ({ input: ({ target: { value } }) => {
|
|
10705
10714
|
field.set(dataKey, Number(value));
|
|
10706
|
-
field.debouncedUpdatePreview();
|
|
10715
|
+
field.debouncedUpdatePreview?.();
|
|
10707
10716
|
} }),
|
|
10708
10717
|
array: (dataKey, field) => ({ change: ({ target: { value } }) => {
|
|
10709
10718
|
field.set(dataKey, value);
|
|
10710
|
-
field.debouncedUpdatePreview();
|
|
10719
|
+
field.debouncedUpdatePreview?.();
|
|
10711
10720
|
} }),
|
|
10712
10721
|
object: () => ({})
|
|
10713
10722
|
};
|
|
@@ -10948,9 +10957,29 @@ Author: Draggable https://draggable.io
|
|
|
10948
10957
|
};
|
|
10949
10958
|
}));
|
|
10950
10959
|
//#endregion
|
|
10960
|
+
//#region src/lib/js/components/stages/page-text.mjs
|
|
10961
|
+
var PAGE_TEXT, fill, pageText;
|
|
10962
|
+
var init_page_text = __esmMin((() => {
|
|
10963
|
+
init_i18n_es_min();
|
|
10964
|
+
PAGE_TEXT = Object.freeze({
|
|
10965
|
+
"pages.label": "Pages",
|
|
10966
|
+
"pages.add": "Add page",
|
|
10967
|
+
"pages.untitled": "Page {n}",
|
|
10968
|
+
"pages.rename": "Rename page",
|
|
10969
|
+
"pages.remove": "Remove page \"{title}\"",
|
|
10970
|
+
"pages.removeConfirm": "Remove \"{title}\" and everything on it?",
|
|
10971
|
+
"pages.moveTo": "Move to page",
|
|
10972
|
+
"pages.move": "Move",
|
|
10973
|
+
"pages.moved": "Moved to {title}"
|
|
10974
|
+
});
|
|
10975
|
+
fill = (text, vars) => text.replace(/\{(\w+)\}/g, (token, name) => name in vars ? String(vars[name]) : token);
|
|
10976
|
+
pageText = (key, vars = {}) => fill(s.get(key) || PAGE_TEXT[key] || key, vars);
|
|
10977
|
+
}));
|
|
10978
|
+
//#endregion
|
|
10951
10979
|
//#region src/lib/js/common/actions.js
|
|
10952
10980
|
init_i18n_es_min();
|
|
10953
10981
|
init_dialog();
|
|
10982
|
+
init_page_text();
|
|
10954
10983
|
init_constants();
|
|
10955
10984
|
init_utils();
|
|
10956
10985
|
var ATTRIBUTE_NAME = /^[A-Za-z_:][-A-Za-z0-9_:]*$/;
|
|
@@ -10999,6 +11028,24 @@ Author: Draggable https://draggable.io
|
|
|
10999
11028
|
if (attr && !attributeProblem(attr, evt)) evt.addAction(attr, String(formData.get("attrValue") ?? ""));
|
|
11000
11029
|
}
|
|
11001
11030
|
}).open();
|
|
11031
|
+
/**
|
|
11032
|
+
* Default page removal (#122): an empty page goes at once, a page with content asks first
|
|
11033
|
+
* @param {Object} evt { stage, stageId, index, title, isEmpty, removeAction }
|
|
11034
|
+
* @return {Dialog|*}
|
|
11035
|
+
*/
|
|
11036
|
+
var removePage = (evt) => {
|
|
11037
|
+
if (evt.isEmpty) return evt.removeAction();
|
|
11038
|
+
return new Dialog({
|
|
11039
|
+
className: "remove-page-dialog",
|
|
11040
|
+
content: {
|
|
11041
|
+
tag: "p",
|
|
11042
|
+
className: "remove-page-message",
|
|
11043
|
+
textContent: pageText("pages.removeConfirm", { title: evt.title })
|
|
11044
|
+
},
|
|
11045
|
+
confirmText: () => s.get("remove") || "Remove",
|
|
11046
|
+
onConfirm: () => evt.removeAction()
|
|
11047
|
+
}).open();
|
|
11048
|
+
};
|
|
11002
11049
|
var defaultActions = {
|
|
11003
11050
|
add: {
|
|
11004
11051
|
attr: (evt) => openAddAttributeDialog(evt),
|
|
@@ -11021,7 +11068,8 @@ Author: Draggable https://draggable.io
|
|
|
11021
11068
|
},
|
|
11022
11069
|
conditions: (evt) => {
|
|
11023
11070
|
evt.removeAction();
|
|
11024
|
-
}
|
|
11071
|
+
},
|
|
11072
|
+
page: removePage
|
|
11025
11073
|
},
|
|
11026
11074
|
click: { btn: (evt) => {
|
|
11027
11075
|
evt.action();
|
|
@@ -11079,6 +11127,9 @@ Author: Draggable https://draggable.io
|
|
|
11079
11127
|
},
|
|
11080
11128
|
conditions: (evt) => {
|
|
11081
11129
|
return this.opts.remove.conditions(evt);
|
|
11130
|
+
},
|
|
11131
|
+
page: (evt) => {
|
|
11132
|
+
return (this.opts?.remove?.page || defaultActions.remove.page)(evt);
|
|
11082
11133
|
}
|
|
11083
11134
|
};
|
|
11084
11135
|
click = { btn: (evt) => {
|
|
@@ -11105,12 +11156,15 @@ Author: Draggable https://draggable.io
|
|
|
11105
11156
|
[EVENT_FORMEO_UPDATED_ROW, ["onUpdate", "onUpdateRow"]],
|
|
11106
11157
|
[EVENT_FORMEO_UPDATED_COLUMN, ["onUpdate", "onUpdateColumn"]],
|
|
11107
11158
|
[EVENT_FORMEO_UPDATED_FIELD, ["onUpdate", "onUpdateField"]],
|
|
11159
|
+
[EVENT_FORMEO_ADDED_STAGE, ["onAdd", "onAddStage"]],
|
|
11108
11160
|
[EVENT_FORMEO_ADDED_ROW, ["onAdd", "onAddRow"]],
|
|
11109
11161
|
[EVENT_FORMEO_ADDED_COLUMN, ["onAdd", "onAddColumn"]],
|
|
11110
11162
|
[EVENT_FORMEO_ADDED_FIELD, ["onAdd", "onAddField"]],
|
|
11163
|
+
[EVENT_FORMEO_REMOVED_STAGE, ["onRemove", "onRemoveStage"]],
|
|
11111
11164
|
[EVENT_FORMEO_REMOVED_ROW, ["onRemove", "onRemoveRow"]],
|
|
11112
11165
|
[EVENT_FORMEO_REMOVED_COLUMN, ["onRemove", "onRemoveColumn"]],
|
|
11113
11166
|
[EVENT_FORMEO_REMOVED_FIELD, ["onRemove", "onRemoveField"]],
|
|
11167
|
+
[EVENT_FORMEO_PAGE_CHANGED, ["onPageChange"]],
|
|
11114
11168
|
[EVENT_FORMEO_ON_RENDER, ["onRender"]]
|
|
11115
11169
|
]);
|
|
11116
11170
|
var reachesDocument = (evt) => evt.target === document || Boolean(evt.bubbles && evt.target?.isConnected);
|
|
@@ -11120,9 +11174,11 @@ Author: Draggable https://draggable.io
|
|
|
11120
11174
|
*/
|
|
11121
11175
|
var Events = class {
|
|
11122
11176
|
components = null;
|
|
11177
|
+
destroyed = false;
|
|
11123
11178
|
constructor() {
|
|
11124
11179
|
this.opts = this.defaults();
|
|
11125
11180
|
this.formeoUpdatedThrottled = throttle$1(() => {
|
|
11181
|
+
if (this.destroyed) return;
|
|
11126
11182
|
const eventData = {
|
|
11127
11183
|
timeStamp: globalThis.performance.now(),
|
|
11128
11184
|
type: EVENT_FORMEO_UPDATED,
|
|
@@ -11146,13 +11202,16 @@ Author: Draggable https://draggable.io
|
|
|
11146
11202
|
onUpdateRow: log,
|
|
11147
11203
|
onUpdateColumn: log,
|
|
11148
11204
|
onUpdateField: log,
|
|
11205
|
+
onAddStage: log,
|
|
11149
11206
|
onAddRow: log,
|
|
11150
11207
|
onAddColumn: log,
|
|
11151
11208
|
onAddField: log,
|
|
11209
|
+
onRemoveStage: log,
|
|
11152
11210
|
onRemoveRow: log,
|
|
11153
11211
|
onRemoveColumn: log,
|
|
11154
11212
|
onRemoveField: log,
|
|
11155
11213
|
onRender: log,
|
|
11214
|
+
onPageChange: () => {},
|
|
11156
11215
|
onSave: (_evt) => {},
|
|
11157
11216
|
confirmClearAll: (evt) => {
|
|
11158
11217
|
if (globalThis.confirm(evt.confirmationMessage)) evt.clearAllAction(evt);
|
|
@@ -11178,6 +11237,7 @@ Author: Draggable https://draggable.io
|
|
|
11178
11237
|
return evt;
|
|
11179
11238
|
}
|
|
11180
11239
|
runCallbacks({ type, timeStamp, detail }) {
|
|
11240
|
+
if (this.destroyed) return;
|
|
11181
11241
|
if (type === "formeoUpdated") return this.formeoUpdatedThrottled();
|
|
11182
11242
|
if (type === "formeoSaved") return this.opts.onSave({
|
|
11183
11243
|
timeStamp,
|
|
@@ -11195,16 +11255,20 @@ Author: Draggable https://draggable.io
|
|
|
11195
11255
|
formeoCleared = (evt) => this.dispatch(EVENT_FORMEO_CLEARED, evt);
|
|
11196
11256
|
formeoOnRender = (evt) => this.dispatch(EVENT_FORMEO_ON_RENDER, evt);
|
|
11197
11257
|
formeoConditionUpdated = (evt) => this.dispatch(EVENT_FORMEO_CONDITION_UPDATED, evt);
|
|
11258
|
+
formeoAddedStage = (evt) => this.dispatch(EVENT_FORMEO_ADDED_STAGE, evt);
|
|
11198
11259
|
formeoAddedRow = (evt) => this.dispatch(EVENT_FORMEO_ADDED_ROW, evt);
|
|
11199
11260
|
formeoAddedColumn = (evt) => this.dispatch(EVENT_FORMEO_ADDED_COLUMN, evt);
|
|
11200
11261
|
formeoAddedField = (evt) => this.dispatch(EVENT_FORMEO_ADDED_FIELD, evt);
|
|
11262
|
+
formeoRemovedStage = (evt) => this.dispatch(EVENT_FORMEO_REMOVED_STAGE, evt);
|
|
11201
11263
|
formeoRemovedRow = (evt) => this.dispatch(EVENT_FORMEO_REMOVED_ROW, evt);
|
|
11202
11264
|
formeoRemovedColumn = (evt) => this.dispatch(EVENT_FORMEO_REMOVED_COLUMN, evt);
|
|
11203
11265
|
formeoRemovedField = (evt) => this.dispatch(EVENT_FORMEO_REMOVED_FIELD, evt);
|
|
11266
|
+
formeoPageChanged = (evt) => this.dispatch(EVENT_FORMEO_PAGE_CHANGED, evt);
|
|
11204
11267
|
/** detail: { confirmationMessage, clearAllAction, btnCoords } */
|
|
11205
11268
|
confirmClearAll = (detail) => {
|
|
11206
11269
|
const evt = new globalThis.CustomEvent("confirmClearAll", { detail });
|
|
11207
11270
|
document.dispatchEvent(evt);
|
|
11271
|
+
if (this.destroyed) return;
|
|
11208
11272
|
this.opts.confirmClearAll({
|
|
11209
11273
|
timeStamp: evt.timeStamp,
|
|
11210
11274
|
type: evt.type,
|
|
@@ -11213,7 +11277,7 @@ Author: Draggable https://draggable.io
|
|
|
11213
11277
|
};
|
|
11214
11278
|
formeoLoaded = (formeo) => {
|
|
11215
11279
|
document.dispatchEvent(new globalThis.CustomEvent("formeoLoaded", { detail: { formeo } }));
|
|
11216
|
-
this.opts.formeoLoaded(formeo);
|
|
11280
|
+
if (!this.destroyed) this.opts.formeoLoaded(formeo);
|
|
11217
11281
|
};
|
|
11218
11282
|
columnResized = (detail) => document.dispatchEvent(new globalThis.CustomEvent("columnResized", { detail }));
|
|
11219
11283
|
/**
|
|
@@ -11223,7 +11287,7 @@ Author: Draggable https://draggable.io
|
|
|
11223
11287
|
*/
|
|
11224
11288
|
onResizeWindow = () => {
|
|
11225
11289
|
const { columns, controls } = this.components || {};
|
|
11226
|
-
if (!columns || !controls?.dom?.isConnected || this.resizeFrame) return;
|
|
11290
|
+
if (this.destroyed || !columns || !controls?.dom?.isConnected || this.resizeFrame) return;
|
|
11227
11291
|
this.resizeFrame = window.requestAnimationFrame(() => {
|
|
11228
11292
|
this.resizeFrame = null;
|
|
11229
11293
|
for (const column of Object.values(columns.data)) {
|
|
@@ -11238,6 +11302,18 @@ Author: Draggable https://draggable.io
|
|
|
11238
11302
|
}
|
|
11239
11303
|
});
|
|
11240
11304
|
};
|
|
11305
|
+
/**
|
|
11306
|
+
* Stop calling this editor's option callbacks, including a trailing onUpdate/onChange that is
|
|
11307
|
+
* already scheduled, and cancel a pending resize frame. FormeoEditor#destroy (#166) calls it.
|
|
11308
|
+
* DOM events are still dispatched, so page listeners are unaffected.
|
|
11309
|
+
*/
|
|
11310
|
+
destroy() {
|
|
11311
|
+
this.destroyed = true;
|
|
11312
|
+
if (this.resizeFrame) {
|
|
11313
|
+
window.cancelAnimationFrame(this.resizeFrame);
|
|
11314
|
+
this.resizeFrame = null;
|
|
11315
|
+
}
|
|
11316
|
+
}
|
|
11241
11317
|
};
|
|
11242
11318
|
var events = new Events();
|
|
11243
11319
|
//#endregion
|
|
@@ -13110,6 +13186,24 @@ Author: Draggable https://draggable.io
|
|
|
13110
13186
|
Sortable.mount(Remove, Revert);
|
|
13111
13187
|
}));
|
|
13112
13188
|
//#endregion
|
|
13189
|
+
//#region src/lib/js/common/sortable.js
|
|
13190
|
+
var destroySortables;
|
|
13191
|
+
var init_sortable = __esmMin((() => {
|
|
13192
|
+
init_sortable_esm();
|
|
13193
|
+
destroySortables = (root) => {
|
|
13194
|
+
if (!root) return 0;
|
|
13195
|
+
let count = 0;
|
|
13196
|
+
for (const el of [root, ...root.querySelectorAll("*")]) {
|
|
13197
|
+
const sortable = Sortable.get(el);
|
|
13198
|
+
if (sortable) {
|
|
13199
|
+
sortable.destroy();
|
|
13200
|
+
count++;
|
|
13201
|
+
}
|
|
13202
|
+
}
|
|
13203
|
+
return count;
|
|
13204
|
+
};
|
|
13205
|
+
}));
|
|
13206
|
+
//#endregion
|
|
13113
13207
|
//#region src/lib/js/components/panels.js
|
|
13114
13208
|
var defaults$1, getTransition, Panels;
|
|
13115
13209
|
var init_panels = __esmMin((() => {
|
|
@@ -13139,18 +13233,25 @@ Author: Draggable https://draggable.io
|
|
|
13139
13233
|
const panelsWrap = this.createPanelsWrap();
|
|
13140
13234
|
this.nav = this.navActions();
|
|
13141
13235
|
this.nav.groupChange(this.activePanelIndex);
|
|
13142
|
-
|
|
13236
|
+
this.resizeObserver = new window.ResizeObserver(([{ contentRect: { width } }]) => {
|
|
13143
13237
|
if (this.currentWidth !== width) {
|
|
13144
13238
|
this.toggleTabbedLayout();
|
|
13145
13239
|
this.currentWidth = width;
|
|
13146
13240
|
this.nav.setTranslateX(this.activePanelIndex, false);
|
|
13147
13241
|
}
|
|
13148
13242
|
});
|
|
13149
|
-
|
|
13150
|
-
resizeObserver
|
|
13151
|
-
window.clearTimeout(observeTimeout);
|
|
13243
|
+
this.observeTimeout = window.setTimeout(() => {
|
|
13244
|
+
this.resizeObserver?.observe(panelsWrap);
|
|
13152
13245
|
}, ANIMATION_SPEED_SLOW);
|
|
13153
13246
|
}
|
|
13247
|
+
/**
|
|
13248
|
+
* Stop watching the panels' size
|
|
13249
|
+
*/
|
|
13250
|
+
destroy() {
|
|
13251
|
+
window.clearTimeout(this.observeTimeout);
|
|
13252
|
+
this.resizeObserver?.disconnect();
|
|
13253
|
+
this.resizeObserver = null;
|
|
13254
|
+
}
|
|
13154
13255
|
getPanelDisplay() {
|
|
13155
13256
|
const column = this.panelsWrap;
|
|
13156
13257
|
const autoDisplayType = Number.parseInt(dom.getStyle(column, "width"), 10) > 390 ? "tabbed" : "slider";
|
|
@@ -13449,7 +13550,7 @@ Author: Draggable https://draggable.io
|
|
|
13449
13550
|
}));
|
|
13450
13551
|
//#endregion
|
|
13451
13552
|
//#region src/lib/js/components/controls/options.js
|
|
13452
|
-
|
|
13553
|
+
init_sortable();
|
|
13453
13554
|
init_panels();
|
|
13454
13555
|
init_control();
|
|
13455
13556
|
var defaultOptions = Object.freeze({
|
|
@@ -14767,6 +14868,7 @@ Author: Draggable https://draggable.io
|
|
|
14767
14868
|
var addAttributeActions, defaultConfigOptions, defaultConfigValues, EditPanel;
|
|
14768
14869
|
var init_edit_panel = __esmMin((() => {
|
|
14769
14870
|
init_i18n_es_min();
|
|
14871
|
+
init_sortable_esm();
|
|
14770
14872
|
init_dom();
|
|
14771
14873
|
init_helpers$2();
|
|
14772
14874
|
init_string();
|
|
@@ -14839,6 +14941,14 @@ Author: Draggable https://draggable.io
|
|
|
14839
14941
|
};
|
|
14840
14942
|
}
|
|
14841
14943
|
/**
|
|
14944
|
+
* A stage's config.title is its page title (#122): editable only while the editor's page tabs are on
|
|
14945
|
+
* @param {String} keyBase
|
|
14946
|
+
* @return {Boolean}
|
|
14947
|
+
*/
|
|
14948
|
+
isPageTitle(keyBase) {
|
|
14949
|
+
return this.name === "config" && keyBase === "title" && this.component.name === "stage" && Boolean(this.component.components?.opts?.pages);
|
|
14950
|
+
}
|
|
14951
|
+
/**
|
|
14842
14952
|
* Generates the edit panel for attrs, meta and options for a fields(s)
|
|
14843
14953
|
* @param {String} panelName
|
|
14844
14954
|
* @param {Object} dataObj field config object
|
|
@@ -14852,7 +14962,8 @@ Author: Draggable https://draggable.io
|
|
|
14852
14962
|
const val = isArray ? dataVal : { [dataVal[0]]: dataVal[1] };
|
|
14853
14963
|
const itemKey = `${this.name}${key}`;
|
|
14854
14964
|
const isDisabledProp = this.component.isDisabledProp(itemKey, this.name);
|
|
14855
|
-
const
|
|
14965
|
+
const allowedKeys = FILTERED_PANEL_DATA_KEYS.get(this.name);
|
|
14966
|
+
const isEditableProp = !allowedKeys || allowedKeys.has(keyBase) || this.isPageTitle(keyBase);
|
|
14856
14967
|
if (isDisabledProp || !isEditableProp) return null;
|
|
14857
14968
|
return new EditPanelItem({
|
|
14858
14969
|
key: itemKey,
|
|
@@ -15092,6 +15203,7 @@ Author: Draggable https://draggable.io
|
|
|
15092
15203
|
//#region src/lib/js/components/component.js
|
|
15093
15204
|
var propertyOptions, Component;
|
|
15094
15205
|
var init_component = __esmMin((() => {
|
|
15206
|
+
init_sortable_esm();
|
|
15095
15207
|
init_animation();
|
|
15096
15208
|
init_dom();
|
|
15097
15209
|
init_helpers$2();
|
|
@@ -15101,6 +15213,7 @@ Author: Draggable https://draggable.io
|
|
|
15101
15213
|
init_constants();
|
|
15102
15214
|
init_data();
|
|
15103
15215
|
init_edit_panel();
|
|
15216
|
+
init_page_text();
|
|
15104
15217
|
propertyOptions = objectFromStringArray(PROPERTY_OPTIONS);
|
|
15105
15218
|
Component = class extends Data {
|
|
15106
15219
|
/**
|
|
@@ -15234,7 +15347,7 @@ Author: Draggable https://draggable.io
|
|
|
15234
15347
|
}
|
|
15235
15348
|
return parent;
|
|
15236
15349
|
}
|
|
15237
|
-
if (this.name === "stage") return
|
|
15350
|
+
if (this.name === "stage") return this.removeStage();
|
|
15238
15351
|
const parent = this.parent;
|
|
15239
15352
|
const children = this.children;
|
|
15240
15353
|
const siblingsPath = `${parent.name}s.${parent.id}.children`;
|
|
@@ -15246,6 +15359,8 @@ Author: Draggable https://draggable.io
|
|
|
15246
15359
|
});
|
|
15247
15360
|
forEach(children, (child) => child.remove());
|
|
15248
15361
|
this.dom.remove();
|
|
15362
|
+
this.panels?.destroy();
|
|
15363
|
+
this.releaseSortables();
|
|
15249
15364
|
remove(this.components.getAddress(siblingsPath), this.id);
|
|
15250
15365
|
if (!parent.children.length) parent.emptyClass();
|
|
15251
15366
|
if (parent.name === "row") parent.autoColumnWidths();
|
|
@@ -15407,10 +15522,29 @@ Author: Draggable https://draggable.io
|
|
|
15407
15522
|
if (this.name === "column") this.parent.autoColumnWidths();
|
|
15408
15523
|
} }
|
|
15409
15524
|
};
|
|
15410
|
-
}
|
|
15525
|
+
},
|
|
15526
|
+
page: (icon = "page-move") => ({
|
|
15527
|
+
...dom.btnTemplate({
|
|
15528
|
+
content: dom.icon(icon),
|
|
15529
|
+
title: pageText("pages.moveTo")
|
|
15530
|
+
}),
|
|
15531
|
+
className: ["item-page"],
|
|
15532
|
+
meta: { id: "page" },
|
|
15533
|
+
action: { click: () => this.components.pages?.openMoveDialog(this) }
|
|
15534
|
+
})
|
|
15411
15535
|
};
|
|
15412
15536
|
const { buttons, disabled } = this.config.actionButtons;
|
|
15413
|
-
const
|
|
15537
|
+
const pagesOn = Boolean(this.components.opts?.pages);
|
|
15538
|
+
let rowButtons = buttons;
|
|
15539
|
+
if (pagesOn && this.name === "row" && !buttons.includes("page")) {
|
|
15540
|
+
const at = buttons.indexOf("remove");
|
|
15541
|
+
rowButtons = at === -1 ? [...buttons, "page"] : [
|
|
15542
|
+
...buttons.slice(0, at),
|
|
15543
|
+
"page",
|
|
15544
|
+
...buttons.slice(at)
|
|
15545
|
+
];
|
|
15546
|
+
}
|
|
15547
|
+
const actionButtonsConfigs = rowButtons.filter((btn) => !disabled.includes(btn) && (btn !== "page" || pagesOn && this.name === "row")).map((btn) => buttonConfig[btn]?.() || btn);
|
|
15414
15548
|
this.actionButtons = actionButtonsConfigs;
|
|
15415
15549
|
return this.actionButtons;
|
|
15416
15550
|
}
|
|
@@ -15594,6 +15728,20 @@ Author: Draggable https://draggable.io
|
|
|
15594
15728
|
return this.saveChildOrder();
|
|
15595
15729
|
};
|
|
15596
15730
|
/**
|
|
15731
|
+
* Destroy the Sortables of this removed component and its descendants, so Sortable's page-wide
|
|
15732
|
+
* list stops holding them (and through them the editor). A column emptied by a drag is removed
|
|
15733
|
+
* from inside Sortable's drop handler; destroying that Sortable there would end the drop early,
|
|
15734
|
+
* so during a drag it is released once the drop has finished.
|
|
15735
|
+
*/
|
|
15736
|
+
releaseSortables() {
|
|
15737
|
+
const { dom: removedDom } = this;
|
|
15738
|
+
if (Sortable.active) {
|
|
15739
|
+
queueMicrotask(() => destroySortables(removedDom));
|
|
15740
|
+
return;
|
|
15741
|
+
}
|
|
15742
|
+
destroySortables(removedDom);
|
|
15743
|
+
}
|
|
15744
|
+
/**
|
|
15597
15745
|
* Handler for removing content from a sortable component
|
|
15598
15746
|
* @param {Object} evt
|
|
15599
15747
|
* @return {Array} updated child order
|
|
@@ -15819,6 +15967,7 @@ Author: Draggable https://draggable.io
|
|
|
15819
15967
|
id: this.id,
|
|
15820
15968
|
displayType: "auto"
|
|
15821
15969
|
};
|
|
15970
|
+
this.panels?.destroy();
|
|
15822
15971
|
this.panels = new Panels(panelsData);
|
|
15823
15972
|
if (this.dom) {
|
|
15824
15973
|
this.dom.querySelector(".panel-nav").replaceWith(this.panels.panelNav);
|
|
@@ -16597,6 +16746,7 @@ Author: Draggable https://draggable.io
|
|
|
16597
16746
|
init_sortable_esm();
|
|
16598
16747
|
init_dom();
|
|
16599
16748
|
init_helpers$2();
|
|
16749
|
+
init_sortable();
|
|
16600
16750
|
init_utils();
|
|
16601
16751
|
init_object();
|
|
16602
16752
|
init_constants();
|
|
@@ -16886,6 +17036,22 @@ Author: Draggable https://draggable.io
|
|
|
16886
17036
|
if (group === "layout") return this.layoutTypes[metaId.replace("layout-", "")]();
|
|
16887
17037
|
return this.layoutTypes.field(elementData);
|
|
16888
17038
|
};
|
|
17039
|
+
/**
|
|
17040
|
+
* Remove the controls from the page and release their Sortables and Panels. A control drag in
|
|
17041
|
+
* progress in these controls is ended: its ghost is removed and the page overflow it hid is
|
|
17042
|
+
* restored. Safe to call more than once, and before init().
|
|
17043
|
+
*/
|
|
17044
|
+
destroy() {
|
|
17045
|
+
const element = this.dom;
|
|
17046
|
+
if (element && Sortable.active?.el && element.contains(Sortable.active.el)) Sortable.ghost?.remove();
|
|
17047
|
+
if (this.originalDocumentOverflow != null) {
|
|
17048
|
+
document.documentElement.style.overflow = this.originalDocumentOverflow;
|
|
17049
|
+
this.originalDocumentOverflow = null;
|
|
17050
|
+
}
|
|
17051
|
+
destroySortables(element);
|
|
17052
|
+
this.panels?.destroy();
|
|
17053
|
+
element?.remove();
|
|
17054
|
+
}
|
|
16889
17055
|
applyOptions = async (controlOptions = {}) => {
|
|
16890
17056
|
const { container, elements, groupOrder, ...options } = merge(defaultOptions, controlOptions);
|
|
16891
17057
|
this.container = dom.resolveContainer(container);
|
|
@@ -16931,6 +17097,13 @@ Author: Draggable https://draggable.io
|
|
|
16931
17097
|
*/
|
|
16932
17098
|
get = (path) => path ? get(this.data, path) : this.add();
|
|
16933
17099
|
/**
|
|
17100
|
+
* Generates an id for a new component when none is given. Stores where key order is meaningful (Stages: page
|
|
17101
|
+
* order is `Object.keys(this.data)` order, #122) override this, since JS objects always list an integer-like
|
|
17102
|
+
* key ("1", "2") before any string key, regardless of insertion order.
|
|
17103
|
+
* @returns {String}
|
|
17104
|
+
*/
|
|
17105
|
+
generateId = () => uuid();
|
|
17106
|
+
/**
|
|
16934
17107
|
* Adds a new component with the given id and data.
|
|
16935
17108
|
*
|
|
16936
17109
|
* @param {string} id - The unique identifier for the component. If not provided, a new UUID will be generated.
|
|
@@ -16940,7 +17113,7 @@ Author: Draggable https://draggable.io
|
|
|
16940
17113
|
* @returns {Object} The newly created component.
|
|
16941
17114
|
*/
|
|
16942
17115
|
add = (id, data = Object.create(null), { silent = false } = {}) => {
|
|
16943
|
-
const elemId = id ||
|
|
17116
|
+
const elemId = id || this.generateId();
|
|
16944
17117
|
const component = this.Component({
|
|
16945
17118
|
...data,
|
|
16946
17119
|
id: elemId
|
|
@@ -16948,6 +17121,7 @@ Author: Draggable https://draggable.io
|
|
|
16948
17121
|
this.data[elemId] = component;
|
|
16949
17122
|
this.active = component;
|
|
16950
17123
|
const addEvent = {
|
|
17124
|
+
stages: EVENT_FORMEO_ADDED_STAGE,
|
|
16951
17125
|
rows: EVENT_FORMEO_ADDED_ROW,
|
|
16952
17126
|
columns: EVENT_FORMEO_ADDED_COLUMN,
|
|
16953
17127
|
fields: EVENT_FORMEO_ADDED_FIELD
|
|
@@ -17724,9 +17898,47 @@ Author: Draggable https://draggable.io
|
|
|
17724
17898
|
const component = super.onAdd(...args);
|
|
17725
17899
|
if (component?.name === "column") component.parent.autoColumnWidths();
|
|
17726
17900
|
}
|
|
17901
|
+
/**
|
|
17902
|
+
* Removes this stage, a page with the editor's `pages` option (#122), with everything on it.
|
|
17903
|
+
* formData always keeps one stage, so the last one is never removed.
|
|
17904
|
+
* @return {String|null} the removed id, or null when nothing was removed
|
|
17905
|
+
*/
|
|
17906
|
+
removeStage() {
|
|
17907
|
+
const { stages, events } = this.components;
|
|
17908
|
+
if (stages.size <= 1) return null;
|
|
17909
|
+
const previousValue = Object.keys(stages.data);
|
|
17910
|
+
const children = [...this.children];
|
|
17911
|
+
this.dispatchComponentEvent("onRemove", {
|
|
17912
|
+
parent: null,
|
|
17913
|
+
children
|
|
17914
|
+
});
|
|
17915
|
+
for (const row of children) row.remove();
|
|
17916
|
+
this.dom.remove();
|
|
17917
|
+
this.panels?.destroy();
|
|
17918
|
+
this.releaseSortables();
|
|
17919
|
+
stages.delete(this.id);
|
|
17920
|
+
if (stages.active === this) stages.active = Object.values(stages.data)[0];
|
|
17921
|
+
events.formeoRemovedStage({
|
|
17922
|
+
componentId: this.id,
|
|
17923
|
+
componentType: this.name
|
|
17924
|
+
});
|
|
17925
|
+
events.formeoUpdated({
|
|
17926
|
+
entity: this,
|
|
17927
|
+
componentId: this.id,
|
|
17928
|
+
componentType: this.name,
|
|
17929
|
+
dataPath: "stages",
|
|
17930
|
+
changePath: "stages",
|
|
17931
|
+
value: Object.keys(stages.data),
|
|
17932
|
+
previousValue,
|
|
17933
|
+
changeType: "removed"
|
|
17934
|
+
});
|
|
17935
|
+
return this.id;
|
|
17936
|
+
}
|
|
17727
17937
|
};
|
|
17728
17938
|
//#endregion
|
|
17729
17939
|
//#region src/lib/js/components/stages/index.js
|
|
17940
|
+
init_utils();
|
|
17941
|
+
init_page_text();
|
|
17730
17942
|
var DEFAULT_CONFIG = () => ({
|
|
17731
17943
|
actionButtons: {
|
|
17732
17944
|
buttons: ["edit"],
|
|
@@ -17747,7 +17959,67 @@ Author: Draggable https://draggable.io
|
|
|
17747
17959
|
this.config = { all: DEFAULT_CONFIG() };
|
|
17748
17960
|
}
|
|
17749
17961
|
Component(data) {
|
|
17750
|
-
return new Stage(data, this.components);
|
|
17962
|
+
return new Stage(this.withPageTitle(data), this.components);
|
|
17963
|
+
}
|
|
17964
|
+
/**
|
|
17965
|
+
* A fresh id that never looks like an array index: page order is this store's key order, and an integer-like
|
|
17966
|
+
* key would jump to the front regardless of when it was added (#122).
|
|
17967
|
+
* @returns {String}
|
|
17968
|
+
*/
|
|
17969
|
+
generateId = () => nonIndexId();
|
|
17970
|
+
/**
|
|
17971
|
+
* With the editor's `pages` option every stage carries a string `config.title` (#122), so its edit panel always
|
|
17972
|
+
* offers one. An empty title shows as "Page {n}".
|
|
17973
|
+
* @param {Object} data stage data
|
|
17974
|
+
* @return {Object}
|
|
17975
|
+
*/
|
|
17976
|
+
withPageTitle(data) {
|
|
17977
|
+
const title = data.config?.title;
|
|
17978
|
+
if (!this.components?.opts?.pages || typeof title === "string") return data;
|
|
17979
|
+
return {
|
|
17980
|
+
...data,
|
|
17981
|
+
config: {
|
|
17982
|
+
...data.config,
|
|
17983
|
+
title: title == null ? "" : String(title)
|
|
17984
|
+
}
|
|
17985
|
+
};
|
|
17986
|
+
}
|
|
17987
|
+
/**
|
|
17988
|
+
* A page's title: its config.title, or "Page {n}" (1-based) when that is empty
|
|
17989
|
+
* @param {Stage} stage
|
|
17990
|
+
* @param {Number} [index] the page's 0-based position, when the caller already knows it
|
|
17991
|
+
* @return {String}
|
|
17992
|
+
*/
|
|
17993
|
+
pageTitle(stage, index = Object.keys(this.data).indexOf(stage.id)) {
|
|
17994
|
+
const title = stage.get("config.title");
|
|
17995
|
+
return typeof title === "string" && title.trim() ? title : pageText("pages.untitled", { n: index + 1 });
|
|
17996
|
+
}
|
|
17997
|
+
/**
|
|
17998
|
+
* Puts the stages (pages) in a new order. Page order is the key order of this store's data, the same object as
|
|
17999
|
+
* the editor's formData.stages, so the keys are re-inserted in place.
|
|
18000
|
+
* @param {String[]} ids stage ids in the new order; unknown ids are ignored, missing ones keep their order at the end
|
|
18001
|
+
* @return {Boolean} whether the order changed
|
|
18002
|
+
*/
|
|
18003
|
+
reorder(ids) {
|
|
18004
|
+
const current = Object.keys(this.data);
|
|
18005
|
+
const wanted = unique([...ids.filter((id) => Object.hasOwn(this.data, id)), ...current]);
|
|
18006
|
+
if (wanted.every((id, i) => id === current[i])) return false;
|
|
18007
|
+
if (wanted.some(looksLikeArrayIndex)) {
|
|
18008
|
+
console.warn("formeo: pages whose ids look like array indexes (\"1\", \"2\") keep their order; use other ids to reorder them.");
|
|
18009
|
+
return false;
|
|
18010
|
+
}
|
|
18011
|
+
const entries = wanted.map((id) => [id, this.data[id]]);
|
|
18012
|
+
for (const id of current) delete this.data[id];
|
|
18013
|
+
for (const [id, stage] of entries) this.data[id] = stage;
|
|
18014
|
+
this.events?.formeoUpdated({
|
|
18015
|
+
entity: this,
|
|
18016
|
+
dataPath: "stages",
|
|
18017
|
+
changePath: "stages",
|
|
18018
|
+
value: wanted,
|
|
18019
|
+
previousValue: current,
|
|
18020
|
+
changeType: "reordered"
|
|
18021
|
+
});
|
|
18022
|
+
return true;
|
|
17751
18023
|
}
|
|
17752
18024
|
};
|
|
17753
18025
|
var stages = new Stages();
|
|
@@ -17899,6 +18171,603 @@ Author: Draggable https://draggable.io
|
|
|
17899
18171
|
});
|
|
17900
18172
|
actions.events = events;
|
|
17901
18173
|
//#endregion
|
|
18174
|
+
//#region src/lib/js/components/stages/pages.js
|
|
18175
|
+
init_sortable_esm();
|
|
18176
|
+
init_dom();
|
|
18177
|
+
init_sortable();
|
|
18178
|
+
init_dialog();
|
|
18179
|
+
init_page_text();
|
|
18180
|
+
/** How long a tab stays highlighted after content moves to its page, in ms */
|
|
18181
|
+
var FLASH_DURATION = 1e3;
|
|
18182
|
+
/**
|
|
18183
|
+
* Creates an element with attributes, text and children. Titles are user data, so text is never parsed as HTML.
|
|
18184
|
+
* @param {String} tag
|
|
18185
|
+
* @param {Object} [props] className, text, and attributes to set
|
|
18186
|
+
* @param {Array<Node>} [children]
|
|
18187
|
+
* @return {HTMLElement}
|
|
18188
|
+
*/
|
|
18189
|
+
var el = (tag, { className, text, ...attrs } = {}, children = []) => {
|
|
18190
|
+
const node = document.createElement(tag);
|
|
18191
|
+
if (className) node.className = className;
|
|
18192
|
+
if (text !== void 0) node.textContent = text;
|
|
18193
|
+
for (const [name, value] of Object.entries(attrs)) node.setAttribute(name, value);
|
|
18194
|
+
node.append(...children);
|
|
18195
|
+
return node;
|
|
18196
|
+
};
|
|
18197
|
+
/**
|
|
18198
|
+
* Page tabs for one editor (#122): each stage is a page. Created by FormeoEditor when its `pages` option is on.
|
|
18199
|
+
* Holds no page-wide state, so every editor on a page has its own tabs.
|
|
18200
|
+
*/
|
|
18201
|
+
var EditorPages = class {
|
|
18202
|
+
/**
|
|
18203
|
+
* @param {Components} components the editor's Components
|
|
18204
|
+
*/
|
|
18205
|
+
constructor(components) {
|
|
18206
|
+
this.components = components;
|
|
18207
|
+
this.activeId = null;
|
|
18208
|
+
this.activeIndex = -1;
|
|
18209
|
+
this.wrapper = null;
|
|
18210
|
+
this.tablist = null;
|
|
18211
|
+
this.status = null;
|
|
18212
|
+
this.renaming = null;
|
|
18213
|
+
this.flashTimers = /* @__PURE__ */ new Map();
|
|
18214
|
+
this.announceTimer = null;
|
|
18215
|
+
this.stageListeners = /* @__PURE__ */ new Map();
|
|
18216
|
+
}
|
|
18217
|
+
get stages() {
|
|
18218
|
+
return this.components.stages;
|
|
18219
|
+
}
|
|
18220
|
+
/** @return {String[]} stage ids in page order */
|
|
18221
|
+
get ids() {
|
|
18222
|
+
return Object.keys(this.stages.data);
|
|
18223
|
+
}
|
|
18224
|
+
get count() {
|
|
18225
|
+
return this.ids.length;
|
|
18226
|
+
}
|
|
18227
|
+
/** @return {Number} 0-based index of the active page */
|
|
18228
|
+
get index() {
|
|
18229
|
+
return Math.max(0, this.ids.indexOf(this.activeId));
|
|
18230
|
+
}
|
|
18231
|
+
tabId(stageId) {
|
|
18232
|
+
return `${this.components.instanceId}-page-tab-${stageId}`;
|
|
18233
|
+
}
|
|
18234
|
+
wrapFor(stageId) {
|
|
18235
|
+
return [...this.tablist?.children || []].find((wrap) => wrap.dataset.stageId === stageId);
|
|
18236
|
+
}
|
|
18237
|
+
tabFor(stageId) {
|
|
18238
|
+
return this.wrapFor(stageId)?.querySelector(".formeo-page-tab");
|
|
18239
|
+
}
|
|
18240
|
+
titleOf(stageId) {
|
|
18241
|
+
return this.stages.pageTitle(this.stages.get(stageId), this.ids.indexOf(stageId));
|
|
18242
|
+
}
|
|
18243
|
+
stageAt(stageIdOrIndex) {
|
|
18244
|
+
const id = typeof stageIdOrIndex === "number" ? this.ids[stageIdOrIndex] : stageIdOrIndex;
|
|
18245
|
+
return id && Object.hasOwn(this.stages.data, id) ? this.stages.get(id) : void 0;
|
|
18246
|
+
}
|
|
18247
|
+
isRtl() {
|
|
18248
|
+
return this.tablist?.closest("[dir]")?.getAttribute("dir") === "rtl";
|
|
18249
|
+
}
|
|
18250
|
+
/**
|
|
18251
|
+
* Builds the tab bar and a wrapper holding it and every stage. Called by FormeoEditor#render; keeps the active
|
|
18252
|
+
* page when it still exists, otherwise starts on the first page. Never fires onPageChange.
|
|
18253
|
+
* @return {HTMLElement} .formeo-pages-editor
|
|
18254
|
+
*/
|
|
18255
|
+
render() {
|
|
18256
|
+
this.teardown();
|
|
18257
|
+
const ids = this.ids;
|
|
18258
|
+
if (!ids.includes(this.activeId)) this.activeId = ids[0] ?? null;
|
|
18259
|
+
for (const [id, { stage }] of [...this.stageListeners]) if (!ids.includes(id) || this.stages.get(id) !== stage) this.unwatchStage(id);
|
|
18260
|
+
for (const id of ids) this.watchStage(this.stages.get(id));
|
|
18261
|
+
this.tablist = el("div", {
|
|
18262
|
+
className: "formeo-page-tabs",
|
|
18263
|
+
role: "tablist",
|
|
18264
|
+
"aria-label": pageText("pages.label")
|
|
18265
|
+
});
|
|
18266
|
+
this.tablist.addEventListener("click", this.onClick);
|
|
18267
|
+
this.tablist.addEventListener("dblclick", this.onDblClick);
|
|
18268
|
+
this.tablist.addEventListener("keydown", this.onKeydown);
|
|
18269
|
+
const addLabel = pageText("pages.add");
|
|
18270
|
+
const addButton = el("button", {
|
|
18271
|
+
className: "formeo-page-add",
|
|
18272
|
+
type: "button",
|
|
18273
|
+
"aria-label": addLabel,
|
|
18274
|
+
title: addLabel
|
|
18275
|
+
});
|
|
18276
|
+
addButton.innerHTML = dom.icon("plus");
|
|
18277
|
+
addButton.addEventListener("click", () => this.add());
|
|
18278
|
+
this.status = el("span", {
|
|
18279
|
+
className: "formeo-pages-status",
|
|
18280
|
+
"aria-live": "polite"
|
|
18281
|
+
});
|
|
18282
|
+
const bar = el("div", { className: "formeo-pages-bar" }, [
|
|
18283
|
+
this.tablist,
|
|
18284
|
+
addButton,
|
|
18285
|
+
this.status
|
|
18286
|
+
]);
|
|
18287
|
+
this.wrapper = el("div", { className: "formeo-pages-editor" }, [bar, ...ids.map((id) => this.stages.get(id).dom)]);
|
|
18288
|
+
this.createTabSorter();
|
|
18289
|
+
this.rebuildTabs();
|
|
18290
|
+
if (this.activeId) this.stages.active = this.stages.get(this.activeId);
|
|
18291
|
+
return this.wrapper;
|
|
18292
|
+
}
|
|
18293
|
+
renderTab(stageId, index) {
|
|
18294
|
+
const title = this.stages.pageTitle(this.stages.get(stageId), index);
|
|
18295
|
+
const tab = el("button", {
|
|
18296
|
+
className: "formeo-page-tab",
|
|
18297
|
+
type: "button",
|
|
18298
|
+
role: "tab",
|
|
18299
|
+
id: this.tabId(stageId),
|
|
18300
|
+
"aria-controls": stageId,
|
|
18301
|
+
text: title
|
|
18302
|
+
});
|
|
18303
|
+
const wrap = el("div", {
|
|
18304
|
+
className: "formeo-page-tab-wrap",
|
|
18305
|
+
role: "presentation",
|
|
18306
|
+
"data-stage-id": stageId
|
|
18307
|
+
}, [tab]);
|
|
18308
|
+
if (this.count > 1) {
|
|
18309
|
+
const label = pageText("pages.remove", { title });
|
|
18310
|
+
const remove = el("button", {
|
|
18311
|
+
className: "formeo-page-remove",
|
|
18312
|
+
type: "button",
|
|
18313
|
+
tabindex: "-1",
|
|
18314
|
+
"aria-label": label,
|
|
18315
|
+
title: label
|
|
18316
|
+
});
|
|
18317
|
+
remove.innerHTML = dom.icon("remove");
|
|
18318
|
+
wrap.append(remove);
|
|
18319
|
+
}
|
|
18320
|
+
return wrap;
|
|
18321
|
+
}
|
|
18322
|
+
/** Re-creates every tab (after an add or a removal) */
|
|
18323
|
+
rebuildTabs() {
|
|
18324
|
+
this.commitRename();
|
|
18325
|
+
for (const wrap of this.tablist.children) destroySortables(wrap);
|
|
18326
|
+
this.tablist.replaceChildren(...this.ids.map((id, index) => this.renderTab(id, index)));
|
|
18327
|
+
for (const wrap of this.tablist.children) this.createDropTarget(wrap, wrap.dataset.stageId);
|
|
18328
|
+
this.sync();
|
|
18329
|
+
}
|
|
18330
|
+
/** Shows the active stage, hides the rest, and updates the tabs' selection state */
|
|
18331
|
+
sync() {
|
|
18332
|
+
const ids = this.ids;
|
|
18333
|
+
this.activeIndex = ids.indexOf(this.activeId);
|
|
18334
|
+
for (const id of ids) {
|
|
18335
|
+
const selected = id === this.activeId;
|
|
18336
|
+
const { dom: stageDom } = this.stages.get(id);
|
|
18337
|
+
stageDom.hidden = !selected;
|
|
18338
|
+
stageDom.setAttribute("role", "tabpanel");
|
|
18339
|
+
stageDom.setAttribute("aria-labelledby", this.tabId(id));
|
|
18340
|
+
const tab = this.tabFor(id);
|
|
18341
|
+
if (tab) {
|
|
18342
|
+
tab.setAttribute("aria-selected", String(selected));
|
|
18343
|
+
tab.tabIndex = selected ? 0 : -1;
|
|
18344
|
+
}
|
|
18345
|
+
}
|
|
18346
|
+
this.wrapper?.setAttribute("data-page-count", String(ids.length));
|
|
18347
|
+
}
|
|
18348
|
+
/** Re-titles every tab, e.g. after a rename, or renumbers untitled pages after a move */
|
|
18349
|
+
refreshLabels() {
|
|
18350
|
+
this.ids.forEach((id, index) => {
|
|
18351
|
+
const title = this.stages.pageTitle(this.stages.get(id), index);
|
|
18352
|
+
const tab = this.tabFor(id);
|
|
18353
|
+
if (tab) tab.textContent = title;
|
|
18354
|
+
const remove = this.wrapFor(id)?.querySelector(".formeo-page-remove");
|
|
18355
|
+
if (remove) {
|
|
18356
|
+
const label = pageText("pages.remove", { title });
|
|
18357
|
+
remove.setAttribute("aria-label", label);
|
|
18358
|
+
remove.title = label;
|
|
18359
|
+
}
|
|
18360
|
+
});
|
|
18361
|
+
}
|
|
18362
|
+
/**
|
|
18363
|
+
* Shows a page
|
|
18364
|
+
* @param {String|Number} stageIdOrIndex
|
|
18365
|
+
* @param {Object} [options]
|
|
18366
|
+
* @param {Boolean} [options.focus] move focus to its tab
|
|
18367
|
+
*/
|
|
18368
|
+
activate(stageIdOrIndex, { focus = false } = {}) {
|
|
18369
|
+
const stage = this.stageAt(stageIdOrIndex);
|
|
18370
|
+
if (!stage) return;
|
|
18371
|
+
this.commitRename();
|
|
18372
|
+
const previousStageId = this.activeId;
|
|
18373
|
+
const previousPage = this.activeIndex;
|
|
18374
|
+
this.activeId = stage.id;
|
|
18375
|
+
this.stages.active = stage;
|
|
18376
|
+
this.sync();
|
|
18377
|
+
if (focus) this.tabFor(stage.id)?.focus();
|
|
18378
|
+
if (previousStageId && previousStageId !== stage.id) this.components.events.formeoPageChanged({
|
|
18379
|
+
src: this.tablist?.isConnected ? this.tablist : void 0,
|
|
18380
|
+
page: this.activeIndex,
|
|
18381
|
+
previousPage,
|
|
18382
|
+
stageId: stage.id,
|
|
18383
|
+
previousStageId
|
|
18384
|
+
});
|
|
18385
|
+
}
|
|
18386
|
+
/**
|
|
18387
|
+
* Appends a page and switches to it
|
|
18388
|
+
* @param {Object} [options]
|
|
18389
|
+
* @param {String} [options.title] its config.title; empty shows "Page {n}"
|
|
18390
|
+
* @return {Stage}
|
|
18391
|
+
*/
|
|
18392
|
+
add({ title = "" } = {}) {
|
|
18393
|
+
const previousValue = this.ids;
|
|
18394
|
+
const stage = this.stages.add(null, { config: { title } });
|
|
18395
|
+
this.components.events.formeoUpdated({
|
|
18396
|
+
entity: stage,
|
|
18397
|
+
componentId: stage.id,
|
|
18398
|
+
componentType: stage.name,
|
|
18399
|
+
dataPath: "stages",
|
|
18400
|
+
changePath: "stages",
|
|
18401
|
+
value: this.ids,
|
|
18402
|
+
previousValue,
|
|
18403
|
+
changeType: "added"
|
|
18404
|
+
});
|
|
18405
|
+
this.watchStage(stage);
|
|
18406
|
+
this.wrapper?.append(stage.dom);
|
|
18407
|
+
if (this.tablist) this.rebuildTabs();
|
|
18408
|
+
this.activate(stage.id, { focus: true });
|
|
18409
|
+
return stage;
|
|
18410
|
+
}
|
|
18411
|
+
/** Relabels a tab when its stage's config.title changes, from its tab or from the edit panel */
|
|
18412
|
+
watchStage(stage) {
|
|
18413
|
+
if (!stage || this.stageListeners.has(stage.id)) return;
|
|
18414
|
+
const listener = ({ path }) => {
|
|
18415
|
+
const changed = Array.isArray(path) ? path.join(".") : String(path);
|
|
18416
|
+
if (changed === "config" || changed === "config.title") this.refreshLabels();
|
|
18417
|
+
};
|
|
18418
|
+
stage.addEventListener("onUpdate", listener);
|
|
18419
|
+
this.stageListeners.set(stage.id, {
|
|
18420
|
+
stage,
|
|
18421
|
+
listener
|
|
18422
|
+
});
|
|
18423
|
+
}
|
|
18424
|
+
unwatchStage(stageId) {
|
|
18425
|
+
const watched = this.stageListeners.get(stageId);
|
|
18426
|
+
if (watched) {
|
|
18427
|
+
watched.stage.removeEventListener("onUpdate", watched.listener);
|
|
18428
|
+
this.stageListeners.delete(stageId);
|
|
18429
|
+
}
|
|
18430
|
+
}
|
|
18431
|
+
/**
|
|
18432
|
+
* Says something to screen readers through the bar's live region
|
|
18433
|
+
* @param {String} text
|
|
18434
|
+
*/
|
|
18435
|
+
announce(text) {
|
|
18436
|
+
const { status } = this;
|
|
18437
|
+
if (!status) return;
|
|
18438
|
+
clearTimeout(this.announceTimer);
|
|
18439
|
+
status.textContent = "";
|
|
18440
|
+
this.announceTimer = setTimeout(() => {
|
|
18441
|
+
this.announceTimer = null;
|
|
18442
|
+
status.textContent = text;
|
|
18443
|
+
}, 100);
|
|
18444
|
+
}
|
|
18445
|
+
onClick = ({ target }) => {
|
|
18446
|
+
const remove = target.closest(".formeo-page-remove");
|
|
18447
|
+
if (remove) return this.requestRemove(remove.closest(".formeo-page-tab-wrap").dataset.stageId);
|
|
18448
|
+
const tab = target.closest(".formeo-page-tab");
|
|
18449
|
+
if (tab) this.activate(tab.closest(".formeo-page-tab-wrap").dataset.stageId, { focus: true });
|
|
18450
|
+
};
|
|
18451
|
+
onDblClick = ({ target }) => {
|
|
18452
|
+
const tab = target.closest(".formeo-page-tab");
|
|
18453
|
+
if (tab) this.startRename(tab.closest(".formeo-page-tab-wrap").dataset.stageId);
|
|
18454
|
+
};
|
|
18455
|
+
onKeydown = (evt) => {
|
|
18456
|
+
const tab = evt.target.closest?.(".formeo-page-tab");
|
|
18457
|
+
if (!tab) return;
|
|
18458
|
+
const stageId = tab.closest(".formeo-page-tab-wrap").dataset.stageId;
|
|
18459
|
+
const ids = this.ids;
|
|
18460
|
+
const index = ids.indexOf(stageId);
|
|
18461
|
+
const rtl = this.isRtl();
|
|
18462
|
+
const step = {
|
|
18463
|
+
ArrowRight: rtl ? -1 : 1,
|
|
18464
|
+
ArrowLeft: rtl ? 1 : -1
|
|
18465
|
+
}[evt.key];
|
|
18466
|
+
const handled = () => {
|
|
18467
|
+
evt.preventDefault();
|
|
18468
|
+
evt.stopPropagation();
|
|
18469
|
+
};
|
|
18470
|
+
if (step && evt.altKey) {
|
|
18471
|
+
handled();
|
|
18472
|
+
return this.movePage(stageId, index + step);
|
|
18473
|
+
}
|
|
18474
|
+
const target = {
|
|
18475
|
+
ArrowRight: () => ids[(index + step + ids.length) % ids.length],
|
|
18476
|
+
ArrowLeft: () => ids[(index + step + ids.length) % ids.length],
|
|
18477
|
+
Home: () => ids[0],
|
|
18478
|
+
End: () => ids.at(-1)
|
|
18479
|
+
}[evt.key]?.();
|
|
18480
|
+
if (target) {
|
|
18481
|
+
handled();
|
|
18482
|
+
return this.activate(target, { focus: true });
|
|
18483
|
+
}
|
|
18484
|
+
if (evt.key === "F2") {
|
|
18485
|
+
handled();
|
|
18486
|
+
return this.startRename(stageId);
|
|
18487
|
+
}
|
|
18488
|
+
if (evt.key === "Delete") {
|
|
18489
|
+
handled();
|
|
18490
|
+
return this.requestRemove(stageId);
|
|
18491
|
+
}
|
|
18492
|
+
};
|
|
18493
|
+
/**
|
|
18494
|
+
* Swaps a tab for a text input holding the page's title
|
|
18495
|
+
* @param {String} stageId
|
|
18496
|
+
*/
|
|
18497
|
+
startRename(stageId) {
|
|
18498
|
+
this.commitRename();
|
|
18499
|
+
const tab = this.tabFor(stageId);
|
|
18500
|
+
if (!tab) return;
|
|
18501
|
+
const stage = this.stages.get(stageId);
|
|
18502
|
+
const input = el("input", {
|
|
18503
|
+
className: "formeo-page-title-input",
|
|
18504
|
+
type: "text",
|
|
18505
|
+
"aria-label": pageText("pages.rename"),
|
|
18506
|
+
placeholder: this.titleOf(stageId)
|
|
18507
|
+
});
|
|
18508
|
+
input.value = stage.get("config.title") || "";
|
|
18509
|
+
input.addEventListener("keydown", (evt) => {
|
|
18510
|
+
if (evt.key === "Enter" || evt.key === "Escape") {
|
|
18511
|
+
evt.preventDefault();
|
|
18512
|
+
evt.stopPropagation();
|
|
18513
|
+
this.commitRename({
|
|
18514
|
+
save: evt.key === "Enter",
|
|
18515
|
+
focus: true
|
|
18516
|
+
});
|
|
18517
|
+
}
|
|
18518
|
+
});
|
|
18519
|
+
input.addEventListener("blur", () => this.commitRename());
|
|
18520
|
+
tab.hidden = true;
|
|
18521
|
+
tab.after(input);
|
|
18522
|
+
this.renaming = {
|
|
18523
|
+
stageId,
|
|
18524
|
+
input,
|
|
18525
|
+
tab
|
|
18526
|
+
};
|
|
18527
|
+
input.focus();
|
|
18528
|
+
input.select();
|
|
18529
|
+
}
|
|
18530
|
+
/**
|
|
18531
|
+
* Ends a rename in progress
|
|
18532
|
+
* @param {Object} [options]
|
|
18533
|
+
* @param {Boolean} [options.save] keep the typed title (false on Escape)
|
|
18534
|
+
* @param {Boolean} [options.focus] focus the tab afterwards
|
|
18535
|
+
*/
|
|
18536
|
+
commitRename({ save = true, focus = false } = {}) {
|
|
18537
|
+
const renaming = this.renaming;
|
|
18538
|
+
if (!renaming) return;
|
|
18539
|
+
this.renaming = null;
|
|
18540
|
+
const stage = this.stages.get(renaming.stageId);
|
|
18541
|
+
const title = renaming.input.value.trim();
|
|
18542
|
+
if (save && stage && title !== (stage.get("config.title") || "")) stage.set("config.title", title);
|
|
18543
|
+
renaming.input.remove();
|
|
18544
|
+
renaming.tab.hidden = false;
|
|
18545
|
+
this.refreshLabels();
|
|
18546
|
+
if (focus) renaming.tab.focus();
|
|
18547
|
+
}
|
|
18548
|
+
/**
|
|
18549
|
+
* Asks the editor's actions.remove.page to remove a page; the last page is never offered
|
|
18550
|
+
* @param {String} stageId
|
|
18551
|
+
*/
|
|
18552
|
+
requestRemove(stageId) {
|
|
18553
|
+
const stage = this.stageAt(stageId);
|
|
18554
|
+
if (!stage || this.count <= 1) return;
|
|
18555
|
+
this.commitRename();
|
|
18556
|
+
const index = this.ids.indexOf(stageId);
|
|
18557
|
+
this.components.actions.remove.page({
|
|
18558
|
+
stage,
|
|
18559
|
+
stageId,
|
|
18560
|
+
index,
|
|
18561
|
+
title: this.titleOf(stageId),
|
|
18562
|
+
isEmpty: !stage.children.length,
|
|
18563
|
+
removeAction: () => this.removePage(stageId)
|
|
18564
|
+
});
|
|
18565
|
+
}
|
|
18566
|
+
/**
|
|
18567
|
+
* Removes a page with everything on it, then shows its neighbour
|
|
18568
|
+
* @param {String} stageId
|
|
18569
|
+
* @return {Boolean} whether it was removed
|
|
18570
|
+
*/
|
|
18571
|
+
removePage(stageId) {
|
|
18572
|
+
const stage = this.stageAt(stageId);
|
|
18573
|
+
if (!stage || this.count <= 1) return false;
|
|
18574
|
+
const index = this.ids.indexOf(stageId);
|
|
18575
|
+
const wasActive = this.activeId === stageId;
|
|
18576
|
+
const previousPage = this.activeIndex;
|
|
18577
|
+
this.unwatchStage(stageId);
|
|
18578
|
+
stage.remove();
|
|
18579
|
+
const remaining = this.ids;
|
|
18580
|
+
this.rebuildTabs();
|
|
18581
|
+
if (wasActive) {
|
|
18582
|
+
this.activeIndex = previousPage;
|
|
18583
|
+
this.activate(remaining[Math.max(0, index - 1)], { focus: true });
|
|
18584
|
+
} else this.tabFor(this.activeId)?.focus();
|
|
18585
|
+
return true;
|
|
18586
|
+
}
|
|
18587
|
+
/** Tabs can be dragged along the tablist to reorder pages */
|
|
18588
|
+
createTabSorter() {
|
|
18589
|
+
Sortable.create(this.tablist, {
|
|
18590
|
+
animation: 150,
|
|
18591
|
+
direction: "horizontal",
|
|
18592
|
+
draggable: ".formeo-page-tab-wrap",
|
|
18593
|
+
handle: ".formeo-page-tab",
|
|
18594
|
+
filter: ".formeo-page-title-input",
|
|
18595
|
+
preventOnFilter: false,
|
|
18596
|
+
forceFallback: true,
|
|
18597
|
+
fallbackTolerance: 5,
|
|
18598
|
+
group: {
|
|
18599
|
+
name: `page-tabs-${this.components.instanceId}`,
|
|
18600
|
+
pull: false,
|
|
18601
|
+
put: false
|
|
18602
|
+
},
|
|
18603
|
+
onEnd: () => this.reorderFromDom()
|
|
18604
|
+
});
|
|
18605
|
+
}
|
|
18606
|
+
/** Puts the pages in the order their tabs now have; a rename in progress on another tab is committed first */
|
|
18607
|
+
reorderFromDom() {
|
|
18608
|
+
this.commitRename();
|
|
18609
|
+
const ids = [...this.tablist.children].map((wrap) => wrap.dataset.stageId);
|
|
18610
|
+
if (this.stages.reorder(ids)) this.afterReorder();
|
|
18611
|
+
else this.orderTabs();
|
|
18612
|
+
}
|
|
18613
|
+
/**
|
|
18614
|
+
* Moves a page to a new position (Alt+ArrowLeft/Right)
|
|
18615
|
+
* @param {String} stageId
|
|
18616
|
+
* @param {Number} toIndex
|
|
18617
|
+
*/
|
|
18618
|
+
movePage(stageId, toIndex) {
|
|
18619
|
+
const ids = this.ids;
|
|
18620
|
+
if (toIndex < 0 || toIndex >= ids.length || ids.indexOf(stageId) === toIndex) return;
|
|
18621
|
+
const order = ids.filter((id) => id !== stageId);
|
|
18622
|
+
order.splice(toIndex, 0, stageId);
|
|
18623
|
+
if (this.stages.reorder(order)) {
|
|
18624
|
+
this.afterReorder();
|
|
18625
|
+
this.tabFor(stageId)?.focus();
|
|
18626
|
+
}
|
|
18627
|
+
}
|
|
18628
|
+
/** Puts the tabs back in page order, e.g. when a reorder was refused */
|
|
18629
|
+
orderTabs() {
|
|
18630
|
+
for (const id of this.ids) {
|
|
18631
|
+
const wrap = this.wrapFor(id);
|
|
18632
|
+
if (wrap) this.tablist.append(wrap);
|
|
18633
|
+
}
|
|
18634
|
+
}
|
|
18635
|
+
afterReorder() {
|
|
18636
|
+
this.orderTabs();
|
|
18637
|
+
for (const id of this.ids) this.wrapper?.append(this.stages.get(id).dom);
|
|
18638
|
+
this.refreshLabels();
|
|
18639
|
+
this.sync();
|
|
18640
|
+
}
|
|
18641
|
+
/**
|
|
18642
|
+
* Makes a tab accept rows, columns, fields and controls from this editor; what lands on it goes to the end
|
|
18643
|
+
* of its page, and the page on screen stays the same
|
|
18644
|
+
* @param {HTMLElement} wrap .formeo-page-tab-wrap
|
|
18645
|
+
* @param {String} stageId
|
|
18646
|
+
*/
|
|
18647
|
+
createDropTarget(wrap, stageId) {
|
|
18648
|
+
const group = (name) => `${name}-${this.components.instanceId}`;
|
|
18649
|
+
Sortable.create(wrap, {
|
|
18650
|
+
group: {
|
|
18651
|
+
name: group("page-tab"),
|
|
18652
|
+
pull: false,
|
|
18653
|
+
put: [
|
|
18654
|
+
"stage",
|
|
18655
|
+
"row",
|
|
18656
|
+
"column",
|
|
18657
|
+
"controls"
|
|
18658
|
+
].map(group)
|
|
18659
|
+
},
|
|
18660
|
+
sort: false,
|
|
18661
|
+
draggable: ".formeo-page-drop-item",
|
|
18662
|
+
onAdd: (evt) => this.onTabDrop(evt, stageId)
|
|
18663
|
+
});
|
|
18664
|
+
}
|
|
18665
|
+
/**
|
|
18666
|
+
* Moves what was dropped on a tab to the end of that tab's page. The target stage's own onAdd sorts out
|
|
18667
|
+
* what it becomes: a row moves, a column gets a new row, a field a new row and column, a control its field.
|
|
18668
|
+
*/
|
|
18669
|
+
onTabDrop({ item, from }, stageId) {
|
|
18670
|
+
const stage = this.stageAt(stageId);
|
|
18671
|
+
if (!stage) return;
|
|
18672
|
+
const children = stage.dom.querySelector(".children");
|
|
18673
|
+
children.appendChild(item);
|
|
18674
|
+
stage.onAdd({
|
|
18675
|
+
from,
|
|
18676
|
+
to: children,
|
|
18677
|
+
item,
|
|
18678
|
+
newIndex: children.children.length - 1
|
|
18679
|
+
});
|
|
18680
|
+
this.afterMove(stageId);
|
|
18681
|
+
}
|
|
18682
|
+
/**
|
|
18683
|
+
* Moves a row to the end of another page ("Move to page")
|
|
18684
|
+
* @param {Row} row
|
|
18685
|
+
* @param {String} stageId
|
|
18686
|
+
* @return {Boolean} whether it moved
|
|
18687
|
+
*/
|
|
18688
|
+
moveToPage(row, stageId) {
|
|
18689
|
+
const stage = this.stageAt(stageId);
|
|
18690
|
+
const source = row?.parent;
|
|
18691
|
+
if (row?.name !== "row" || !stage || !source || source === stage) return false;
|
|
18692
|
+
stage.dom.querySelector(".children").appendChild(row.dom);
|
|
18693
|
+
for (const changed of [stage, source]) {
|
|
18694
|
+
changed.saveChildOrder();
|
|
18695
|
+
changed.emptyClass();
|
|
18696
|
+
}
|
|
18697
|
+
this.afterMove(stageId);
|
|
18698
|
+
return true;
|
|
18699
|
+
}
|
|
18700
|
+
/**
|
|
18701
|
+
* Asks which page a row should move to, then moves it there
|
|
18702
|
+
* @param {Row} row
|
|
18703
|
+
*/
|
|
18704
|
+
openMoveDialog(row) {
|
|
18705
|
+
const currentId = row?.parent?.id;
|
|
18706
|
+
const targets = this.ids.filter((id) => id !== currentId);
|
|
18707
|
+
if (row?.name !== "row" || !targets.length) return;
|
|
18708
|
+
const label = pageText("pages.moveTo");
|
|
18709
|
+
new Dialog({
|
|
18710
|
+
title: label,
|
|
18711
|
+
className: "move-to-page-dialog",
|
|
18712
|
+
content: el("select", {
|
|
18713
|
+
name: "page",
|
|
18714
|
+
className: "move-to-page-select",
|
|
18715
|
+
"aria-label": label
|
|
18716
|
+
}, targets.map((id) => el("option", {
|
|
18717
|
+
value: id,
|
|
18718
|
+
text: this.titleOf(id)
|
|
18719
|
+
}))),
|
|
18720
|
+
confirmText: () => pageText("pages.move"),
|
|
18721
|
+
onConfirm: (formData) => this.moveToPage(row, String(formData.get("page")))
|
|
18722
|
+
}).open();
|
|
18723
|
+
}
|
|
18724
|
+
/**
|
|
18725
|
+
* Highlights a page's tab for a moment and announces "Moved to {title}"
|
|
18726
|
+
* @param {String} stageId
|
|
18727
|
+
*/
|
|
18728
|
+
afterMove(stageId) {
|
|
18729
|
+
const wrap = this.wrapFor(stageId);
|
|
18730
|
+
if (wrap) {
|
|
18731
|
+
clearTimeout(this.flashTimers.get(stageId));
|
|
18732
|
+
wrap.classList.add("formeo-page-tab-flash");
|
|
18733
|
+
this.flashTimers.set(stageId, setTimeout(() => {
|
|
18734
|
+
wrap.classList.remove("formeo-page-tab-flash");
|
|
18735
|
+
this.flashTimers.delete(stageId);
|
|
18736
|
+
}, FLASH_DURATION));
|
|
18737
|
+
}
|
|
18738
|
+
this.announce(pageText("pages.moved", { title: this.titleOf(stageId) }));
|
|
18739
|
+
}
|
|
18740
|
+
/** Releases the bar's Sortables (the tab sorter and every tab's drop target) and timers; the stages keep their DOM */
|
|
18741
|
+
teardown() {
|
|
18742
|
+
this.commitRename();
|
|
18743
|
+
if (this.tablist) destroySortables(this.tablist);
|
|
18744
|
+
for (const timer of this.flashTimers.values()) clearTimeout(timer);
|
|
18745
|
+
this.flashTimers.clear();
|
|
18746
|
+
clearTimeout(this.announceTimer);
|
|
18747
|
+
this.announceTimer = null;
|
|
18748
|
+
}
|
|
18749
|
+
/**
|
|
18750
|
+
* Releases everything this editor's page tabs hold. FormeoEditor#destroy calls it, after the editor's events are
|
|
18751
|
+
* gone, so an open rename is discarded rather than saved: nothing may change the form while it is torn down.
|
|
18752
|
+
*/
|
|
18753
|
+
destroy() {
|
|
18754
|
+
this.commitRename({ save: false });
|
|
18755
|
+
this.teardown();
|
|
18756
|
+
for (const id of [...this.stageListeners.keys()]) this.unwatchStage(id);
|
|
18757
|
+
for (const id of this.ids) {
|
|
18758
|
+
const stageDom = this.stages.get(id)?.dom;
|
|
18759
|
+
if (stageDom?.getAttribute("aria-labelledby") === this.tabId(id)) {
|
|
18760
|
+
stageDom.hidden = false;
|
|
18761
|
+
stageDom.removeAttribute("role");
|
|
18762
|
+
stageDom.removeAttribute("aria-labelledby");
|
|
18763
|
+
}
|
|
18764
|
+
}
|
|
18765
|
+
this.wrapper = null;
|
|
18766
|
+
this.tablist = null;
|
|
18767
|
+
this.status = null;
|
|
18768
|
+
}
|
|
18769
|
+
};
|
|
18770
|
+
//#endregion
|
|
17902
18771
|
//#region src/lib/js/config.js
|
|
17903
18772
|
init_constants();
|
|
17904
18773
|
var defaults = { get editor() {
|
|
@@ -17908,6 +18777,7 @@ Author: Draggable https://draggable.io
|
|
|
17908
18777
|
dataType: "json",
|
|
17909
18778
|
debug: false,
|
|
17910
18779
|
sessionStorage: false,
|
|
18780
|
+
pages: false,
|
|
17911
18781
|
editorContainer: null,
|
|
17912
18782
|
svgSprite: null,
|
|
17913
18783
|
style: CSS_URL,
|
|
@@ -17925,6 +18795,7 @@ Author: Draggable https://draggable.io
|
|
|
17925
18795
|
init_i18n_es_min();
|
|
17926
18796
|
init_dom();
|
|
17927
18797
|
init_loaders();
|
|
18798
|
+
init_sortable();
|
|
17928
18799
|
init_utils();
|
|
17929
18800
|
init_constants();
|
|
17930
18801
|
/**
|
|
@@ -17935,9 +18806,11 @@ Author: Draggable https://draggable.io
|
|
|
17935
18806
|
LOADING_RESOURCES: "loading",
|
|
17936
18807
|
INITIALIZING: "initializing",
|
|
17937
18808
|
READY: "ready",
|
|
17938
|
-
ERROR: "error"
|
|
18809
|
+
ERROR: "error",
|
|
18810
|
+
DESTROYED: "destroyed"
|
|
17939
18811
|
};
|
|
17940
18812
|
var storageKeyHolders = /* @__PURE__ */ new Map();
|
|
18813
|
+
var pageTooltip = null;
|
|
17941
18814
|
/**
|
|
17942
18815
|
* Whether an editor is still on the page, or still on its way there. An editor whose container
|
|
17943
18816
|
* left the page or no longer holds its DOM (a remount, a demo switch) no longer owns its key.
|
|
@@ -17945,7 +18818,7 @@ Author: Draggable https://draggable.io
|
|
|
17945
18818
|
* @return {Boolean}
|
|
17946
18819
|
*/
|
|
17947
18820
|
var isLiveEditor = (editor) => {
|
|
17948
|
-
if (editor.initState === INIT_STATES.ERROR) return false;
|
|
18821
|
+
if (editor.initState === INIT_STATES.ERROR || editor.initState === INIT_STATES.DESTROYED) return false;
|
|
17949
18822
|
if (!editor.editor) return !editor.editorContainer || editor.editorContainer.isConnected;
|
|
17950
18823
|
return Boolean(editor.editorContainer?.isConnected && editor.editorContainer.contains(editor.editor));
|
|
17951
18824
|
};
|
|
@@ -17957,6 +18830,7 @@ Author: Draggable https://draggable.io
|
|
|
17957
18830
|
#initPromise = null;
|
|
17958
18831
|
#lockedFormData = null;
|
|
17959
18832
|
#dataLoadedOnce = false;
|
|
18833
|
+
#onDOMContentLoaded = () => this.loadResources();
|
|
17960
18834
|
/**
|
|
17961
18835
|
* @param {Object} options formeo options
|
|
17962
18836
|
* @param {String|Object} userFormData loaded formData
|
|
@@ -17986,13 +18860,15 @@ Author: Draggable https://draggable.io
|
|
|
17986
18860
|
actions: this.actions
|
|
17987
18861
|
});
|
|
17988
18862
|
this.Components.config = config;
|
|
18863
|
+
this.pages = opts.pages ? new EditorPages(this.Components) : null;
|
|
18864
|
+
this.Components.pages = this.pages;
|
|
17989
18865
|
if (opts.sessionStorage) {
|
|
17990
18866
|
const key = formDataStorageKey(opts.sessionStorage);
|
|
17991
18867
|
const holder = storageKeyHolders.get(key);
|
|
17992
18868
|
if (holder && isLiveEditor(holder)) console.warn(`formeo: another editor on this page already saves to sessionStorage key "${key}". Give each editor its own key, e.g. sessionStorage: 'orders-form'.`);
|
|
17993
18869
|
storageKeyHolders.set(key, this);
|
|
17994
18870
|
}
|
|
17995
|
-
if (document.readyState === "loading") document.addEventListener("DOMContentLoaded", this
|
|
18871
|
+
if (document.readyState === "loading") document.addEventListener("DOMContentLoaded", this.#onDOMContentLoaded, { once: true });
|
|
17996
18872
|
else this.loadResources();
|
|
17997
18873
|
}
|
|
17998
18874
|
get formData() {
|
|
@@ -18015,6 +18891,7 @@ Author: Draggable https://draggable.io
|
|
|
18015
18891
|
* @return {void}
|
|
18016
18892
|
*/
|
|
18017
18893
|
clear() {
|
|
18894
|
+
if (this.isDestroyed) return;
|
|
18018
18895
|
const defaultData = DEFAULT_FORMDATA();
|
|
18019
18896
|
this.#lockedFormData = defaultData;
|
|
18020
18897
|
this.userFormData = defaultData;
|
|
@@ -18026,7 +18903,8 @@ Author: Draggable https://draggable.io
|
|
|
18026
18903
|
* @return {Promise} asynchronously loaded remote resources
|
|
18027
18904
|
*/
|
|
18028
18905
|
async loadResources() {
|
|
18029
|
-
document.removeEventListener("DOMContentLoaded", this
|
|
18906
|
+
document.removeEventListener("DOMContentLoaded", this.#onDOMContentLoaded);
|
|
18907
|
+
if (this.isDestroyed) return;
|
|
18030
18908
|
this.#initState = INIT_STATES.LOADING_RESOURCES;
|
|
18031
18909
|
const promises = [
|
|
18032
18910
|
fetchIcons(this.opts.svgSprite),
|
|
@@ -18039,8 +18917,10 @@ Author: Draggable https://draggable.io
|
|
|
18039
18917
|
].filter(Boolean);
|
|
18040
18918
|
try {
|
|
18041
18919
|
await Promise.all(promises);
|
|
18920
|
+
if (this.isDestroyed) return;
|
|
18042
18921
|
if (this.opts.allowEdit) this.init();
|
|
18043
18922
|
} catch (error) {
|
|
18923
|
+
if (this.isDestroyed) return;
|
|
18044
18924
|
this.#initState = INIT_STATES.ERROR;
|
|
18045
18925
|
console.error("Failed to load resources:", error);
|
|
18046
18926
|
throw error;
|
|
@@ -18052,10 +18932,15 @@ Author: Draggable https://draggable.io
|
|
|
18052
18932
|
* dom elements, actions events and more.
|
|
18053
18933
|
*/
|
|
18054
18934
|
init() {
|
|
18935
|
+
if (this.isDestroyed) return Promise.resolve(this);
|
|
18055
18936
|
if (this.#initState === INIT_STATES.INITIALIZING) return this.#initPromise;
|
|
18056
18937
|
if (this.#initState === INIT_STATES.READY) return this.#refreshUI();
|
|
18057
18938
|
this.#initState = INIT_STATES.INITIALIZING;
|
|
18058
18939
|
this.#initPromise = new Controls(this.Components).init(this.opts.controls, this.opts.stickyControls).then((controls) => {
|
|
18940
|
+
if (this.isDestroyed) {
|
|
18941
|
+
controls.destroy();
|
|
18942
|
+
return this;
|
|
18943
|
+
}
|
|
18059
18944
|
this.controls = controls;
|
|
18060
18945
|
this.Components.controls = controls;
|
|
18061
18946
|
if (!this.#dataLoadedOnce) {
|
|
@@ -18065,13 +18950,17 @@ Author: Draggable https://draggable.io
|
|
|
18065
18950
|
this.formId = this.Components.get("id");
|
|
18066
18951
|
this.i18n = { setLang: this.#setLanguage.bind(this) };
|
|
18067
18952
|
this.render();
|
|
18953
|
+
if (this.isDestroyed) return this;
|
|
18068
18954
|
this.onResize = this.events.onResizeWindow;
|
|
18069
18955
|
window.addEventListener("resize", this.onResize);
|
|
18070
18956
|
this.#initState = INIT_STATES.READY;
|
|
18071
18957
|
this.opts.onLoad?.(this);
|
|
18958
|
+
if (this.isDestroyed) return this;
|
|
18072
18959
|
this.tooltipInstance = new SmartTooltip();
|
|
18960
|
+
pageTooltip = this.tooltipInstance;
|
|
18073
18961
|
return this;
|
|
18074
18962
|
}).catch((error) => {
|
|
18963
|
+
if (this.isDestroyed) return this;
|
|
18075
18964
|
this.#initState = INIT_STATES.ERROR;
|
|
18076
18965
|
console.error("Failed to initialize editor:", error);
|
|
18077
18966
|
throw error;
|
|
@@ -18093,7 +18982,13 @@ Author: Draggable https://draggable.io
|
|
|
18093
18982
|
* @return {Promise}
|
|
18094
18983
|
*/
|
|
18095
18984
|
async #refreshUI() {
|
|
18096
|
-
|
|
18985
|
+
if (this.isDestroyed) return this;
|
|
18986
|
+
const controls = await new Controls(this.Components).init(this.opts.controls, this.opts.stickyControls);
|
|
18987
|
+
if (this.isDestroyed) {
|
|
18988
|
+
controls.destroy();
|
|
18989
|
+
return this;
|
|
18990
|
+
}
|
|
18991
|
+
this.controls = controls;
|
|
18097
18992
|
this.Components.controls = this.controls;
|
|
18098
18993
|
this.render();
|
|
18099
18994
|
return this;
|
|
@@ -18121,6 +19016,7 @@ Author: Draggable https://draggable.io
|
|
|
18121
19016
|
return DEFAULT_FORMDATA();
|
|
18122
19017
|
}
|
|
18123
19018
|
load(formData = this.userFormData, opts = this.opts) {
|
|
19019
|
+
if (this.isDestroyed) return;
|
|
18124
19020
|
this.Components.load(formData, opts);
|
|
18125
19021
|
this.render();
|
|
18126
19022
|
}
|
|
@@ -18139,16 +19035,28 @@ Author: Draggable https://draggable.io
|
|
|
18139
19035
|
return this.#initState === INIT_STATES.READY;
|
|
18140
19036
|
}
|
|
18141
19037
|
/**
|
|
19038
|
+
* Check if destroy() was called
|
|
19039
|
+
* @return {boolean}
|
|
19040
|
+
*/
|
|
19041
|
+
get isDestroyed() {
|
|
19042
|
+
return this.#initState === INIT_STATES.DESTROYED;
|
|
19043
|
+
}
|
|
19044
|
+
/**
|
|
18142
19045
|
* Wait for the editor to be ready
|
|
18143
19046
|
* @return {Promise} resolves when editor is ready
|
|
18144
19047
|
*/
|
|
18145
19048
|
async whenReady() {
|
|
18146
19049
|
if (this.#initState === INIT_STATES.READY) return this;
|
|
19050
|
+
if (this.isDestroyed) return Promise.reject(/* @__PURE__ */ new Error("Editor was destroyed"));
|
|
18147
19051
|
if (this.#initState === INIT_STATES.ERROR) return Promise.reject(/* @__PURE__ */ new Error("Editor initialization failed"));
|
|
18148
|
-
if (this.#initPromise) return this.#initPromise
|
|
19052
|
+
if (this.#initPromise) return this.#initPromise.then((editor) => {
|
|
19053
|
+
if (this.isDestroyed) throw new Error("Editor was destroyed");
|
|
19054
|
+
return editor;
|
|
19055
|
+
});
|
|
18149
19056
|
return new Promise((resolve, reject) => {
|
|
18150
19057
|
const checkReady = () => {
|
|
18151
19058
|
if (this.#initState === INIT_STATES.READY) resolve(this);
|
|
19059
|
+
else if (this.isDestroyed) reject(/* @__PURE__ */ new Error("Editor was destroyed"));
|
|
18152
19060
|
else if (this.#initState === INIT_STATES.ERROR) reject(/* @__PURE__ */ new Error("Editor initialization failed"));
|
|
18153
19061
|
else globalThis.requestAnimationFrame(checkReady);
|
|
18154
19062
|
};
|
|
@@ -18160,15 +19068,17 @@ Author: Draggable https://draggable.io
|
|
|
18160
19068
|
* @return {void}
|
|
18161
19069
|
*/
|
|
18162
19070
|
render() {
|
|
19071
|
+
if (this.isDestroyed) return;
|
|
18163
19072
|
if (!this.controls) return globalThis.requestAnimationFrame(() => this.render());
|
|
18164
19073
|
this.stages = Object.values(this.Components.get("stages"));
|
|
18165
|
-
|
|
19074
|
+
const stageArea = this.pages ? [this.pages.render()] : this.stages.map(({ dom }) => dom);
|
|
19075
|
+
if (this.opts.controlOnLeft) for (const element of stageArea) element.style.order = 1;
|
|
18166
19076
|
const elemConfig = {
|
|
18167
19077
|
attrs: {
|
|
18168
19078
|
className: "formeo formeo-editor",
|
|
18169
19079
|
id: this.formId
|
|
18170
19080
|
},
|
|
18171
|
-
content: [
|
|
19081
|
+
content: [stageArea]
|
|
18172
19082
|
};
|
|
18173
19083
|
if (s.current.dir) {
|
|
18174
19084
|
elemConfig.attrs.dir = s.current.dir;
|
|
@@ -18190,6 +19100,47 @@ Author: Draggable https://draggable.io
|
|
|
18190
19100
|
}
|
|
18191
19101
|
this.events.formeoLoaded(this);
|
|
18192
19102
|
}
|
|
19103
|
+
/**
|
|
19104
|
+
* Remove the editor from the page and release what it holds: its Sortable instances, resize
|
|
19105
|
+
* observers, window resize listener, pending callbacks and loaded components. Other editors on
|
|
19106
|
+
* the page keep working, and a new editor can mount in the same container.
|
|
19107
|
+
* Safe to call more than once, and before the editor is ready.
|
|
19108
|
+
* @return {void}
|
|
19109
|
+
*/
|
|
19110
|
+
destroy() {
|
|
19111
|
+
if (this.isDestroyed) return;
|
|
19112
|
+
this.#initState = INIT_STATES.DESTROYED;
|
|
19113
|
+
document.removeEventListener("DOMContentLoaded", this.#onDOMContentLoaded);
|
|
19114
|
+
window.removeEventListener("resize", this.onResize);
|
|
19115
|
+
this.events.destroy();
|
|
19116
|
+
this.controls?.destroy();
|
|
19117
|
+
this.pages?.destroy();
|
|
19118
|
+
if (this.opts.sessionStorage) {
|
|
19119
|
+
const key = formDataStorageKey(this.opts.sessionStorage);
|
|
19120
|
+
if (storageKeyHolders.get(key) === this) storageKeyHolders.delete(key);
|
|
19121
|
+
}
|
|
19122
|
+
destroySortables(this.editor);
|
|
19123
|
+
for (const type of [
|
|
19124
|
+
"stages",
|
|
19125
|
+
"rows",
|
|
19126
|
+
"columns",
|
|
19127
|
+
"fields"
|
|
19128
|
+
]) {
|
|
19129
|
+
for (const component of Object.values(this.Components[type]?.data || {})) component.panels?.destroy();
|
|
19130
|
+
this.Components[type]?.empty();
|
|
19131
|
+
}
|
|
19132
|
+
this.editor?.remove();
|
|
19133
|
+
this.Components.empty();
|
|
19134
|
+
if (pageTooltip && !document.querySelector(".formeo-editor")) {
|
|
19135
|
+
pageTooltip.destroy();
|
|
19136
|
+
pageTooltip = null;
|
|
19137
|
+
}
|
|
19138
|
+
this.tooltipInstance = null;
|
|
19139
|
+
this.editor = null;
|
|
19140
|
+
this.controls = null;
|
|
19141
|
+
this.Components.controls = null;
|
|
19142
|
+
this.stages = [];
|
|
19143
|
+
}
|
|
18193
19144
|
};
|
|
18194
19145
|
//#endregion
|
|
18195
19146
|
//#region src/lib/js/renderer/helpers.js
|
|
@@ -18471,7 +19422,7 @@ Author: Draggable https://draggable.io
|
|
|
18471
19422
|
* `progress` only affects the wizard, adding a clickable step list above the pages
|
|
18472
19423
|
* @param {Array<Object>} stages stage data in render order, for page titles
|
|
18473
19424
|
* @param {Function} [onChange] called with (page, previousPage) whenever the page changes
|
|
18474
|
-
* @return {{show: Function, index: Number, count: Number}|null} null when there is only one page
|
|
19425
|
+
* @return {{show: Function, index: Number, count: Number, destroy: Function}|null} null when there is only one page
|
|
18475
19426
|
*/
|
|
18476
19427
|
var paginate = (form, { type, progress, labels }, stages, onChange) => {
|
|
18477
19428
|
const pages = Array.from(form.children).filter((elem) => elem.classList.contains(STAGE_CLASSNAME));
|
|
@@ -18664,14 +19615,16 @@ Author: Draggable https://draggable.io
|
|
|
18664
19615
|
}
|
|
18665
19616
|
};
|
|
18666
19617
|
const ownerDocument = form.ownerDocument;
|
|
18667
|
-
|
|
19618
|
+
const onDocumentClick = ({ target }) => {
|
|
18668
19619
|
const control = target.closest?.("button, input");
|
|
18669
19620
|
if (control?.form !== form) return;
|
|
18670
19621
|
if (control?.type === "submit" || control?.tagName === "INPUT" && control.type === "image") markReported();
|
|
18671
|
-
}
|
|
18672
|
-
|
|
19622
|
+
};
|
|
19623
|
+
const onDocumentKeydown = ({ key, target }) => {
|
|
18673
19624
|
if (key === "Enter" && target.tagName === "INPUT" && target.form === form) markReported();
|
|
18674
|
-
}
|
|
19625
|
+
};
|
|
19626
|
+
ownerDocument.addEventListener("click", onDocumentClick, true);
|
|
19627
|
+
ownerDocument.addEventListener("keydown", onDocumentKeydown, true);
|
|
18675
19628
|
for (const method of ["requestSubmit", "reportValidity"]) {
|
|
18676
19629
|
const native = HTMLFormElement.prototype[method];
|
|
18677
19630
|
if (typeof native !== "function") continue;
|
|
@@ -18691,7 +19644,11 @@ Author: Draggable https://draggable.io
|
|
|
18691
19644
|
get index() {
|
|
18692
19645
|
return current;
|
|
18693
19646
|
},
|
|
18694
|
-
count
|
|
19647
|
+
count,
|
|
19648
|
+
destroy() {
|
|
19649
|
+
ownerDocument.removeEventListener("click", onDocumentClick, true);
|
|
19650
|
+
ownerDocument.removeEventListener("keydown", onDocumentKeydown, true);
|
|
19651
|
+
}
|
|
18695
19652
|
};
|
|
18696
19653
|
};
|
|
18697
19654
|
//#endregion
|
|
@@ -18818,8 +19775,21 @@ Author: Draggable https://draggable.io
|
|
|
18818
19775
|
formData: this.form
|
|
18819
19776
|
});
|
|
18820
19777
|
}
|
|
19778
|
+
/**
|
|
19779
|
+
* Remove the rendered form from the page and stop its pagination. render() can be called again afterwards.
|
|
19780
|
+
* @return {void}
|
|
19781
|
+
*/
|
|
19782
|
+
destroy() {
|
|
19783
|
+
this.pager?.destroy();
|
|
19784
|
+
this.pager = null;
|
|
19785
|
+
this.renderedForm?.remove();
|
|
19786
|
+
this.renderedForm = null;
|
|
19787
|
+
this.components = Object.create(null);
|
|
19788
|
+
}
|
|
18821
19789
|
getRenderedForm(formData = this.form) {
|
|
18822
19790
|
this.form = cleanFormData(formData);
|
|
19791
|
+
this.pager?.destroy();
|
|
19792
|
+
this.pager = null;
|
|
18823
19793
|
const renderCount = document.getElementsByClassName("formeo-render").length;
|
|
18824
19794
|
const config = {
|
|
18825
19795
|
...this.config,
|