formeo 5.6.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.
@@ -1,7 +1,7 @@
1
1
 
2
2
  /**
3
3
  formeo - https://formeo.io
4
- Version: 5.5.0
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.5.0";
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: { [uuid()]: {} },
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);
@@ -11148,13 +11202,16 @@ Author: Draggable https://draggable.io
11148
11202
  onUpdateRow: log,
11149
11203
  onUpdateColumn: log,
11150
11204
  onUpdateField: log,
11205
+ onAddStage: log,
11151
11206
  onAddRow: log,
11152
11207
  onAddColumn: log,
11153
11208
  onAddField: log,
11209
+ onRemoveStage: log,
11154
11210
  onRemoveRow: log,
11155
11211
  onRemoveColumn: log,
11156
11212
  onRemoveField: log,
11157
11213
  onRender: log,
11214
+ onPageChange: () => {},
11158
11215
  onSave: (_evt) => {},
11159
11216
  confirmClearAll: (evt) => {
11160
11217
  if (globalThis.confirm(evt.confirmationMessage)) evt.clearAllAction(evt);
@@ -11198,12 +11255,15 @@ Author: Draggable https://draggable.io
11198
11255
  formeoCleared = (evt) => this.dispatch(EVENT_FORMEO_CLEARED, evt);
11199
11256
  formeoOnRender = (evt) => this.dispatch(EVENT_FORMEO_ON_RENDER, evt);
11200
11257
  formeoConditionUpdated = (evt) => this.dispatch(EVENT_FORMEO_CONDITION_UPDATED, evt);
11258
+ formeoAddedStage = (evt) => this.dispatch(EVENT_FORMEO_ADDED_STAGE, evt);
11201
11259
  formeoAddedRow = (evt) => this.dispatch(EVENT_FORMEO_ADDED_ROW, evt);
11202
11260
  formeoAddedColumn = (evt) => this.dispatch(EVENT_FORMEO_ADDED_COLUMN, evt);
11203
11261
  formeoAddedField = (evt) => this.dispatch(EVENT_FORMEO_ADDED_FIELD, evt);
11262
+ formeoRemovedStage = (evt) => this.dispatch(EVENT_FORMEO_REMOVED_STAGE, evt);
11204
11263
  formeoRemovedRow = (evt) => this.dispatch(EVENT_FORMEO_REMOVED_ROW, evt);
11205
11264
  formeoRemovedColumn = (evt) => this.dispatch(EVENT_FORMEO_REMOVED_COLUMN, evt);
11206
11265
  formeoRemovedField = (evt) => this.dispatch(EVENT_FORMEO_REMOVED_FIELD, evt);
11266
+ formeoPageChanged = (evt) => this.dispatch(EVENT_FORMEO_PAGE_CHANGED, evt);
11207
11267
  /** detail: { confirmationMessage, clearAllAction, btnCoords } */
11208
11268
  confirmClearAll = (detail) => {
11209
11269
  const evt = new globalThis.CustomEvent("confirmClearAll", { detail });
@@ -14881,6 +14941,14 @@ Author: Draggable https://draggable.io
14881
14941
  };
14882
14942
  }
14883
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
+ /**
14884
14952
  * Generates the edit panel for attrs, meta and options for a fields(s)
14885
14953
  * @param {String} panelName
14886
14954
  * @param {Object} dataObj field config object
@@ -14894,7 +14962,8 @@ Author: Draggable https://draggable.io
14894
14962
  const val = isArray ? dataVal : { [dataVal[0]]: dataVal[1] };
14895
14963
  const itemKey = `${this.name}${key}`;
14896
14964
  const isDisabledProp = this.component.isDisabledProp(itemKey, this.name);
14897
- const isEditableProp = FILTERED_PANEL_DATA_KEYS.get(this.name)?.has(keyBase) ?? true;
14965
+ const allowedKeys = FILTERED_PANEL_DATA_KEYS.get(this.name);
14966
+ const isEditableProp = !allowedKeys || allowedKeys.has(keyBase) || this.isPageTitle(keyBase);
14898
14967
  if (isDisabledProp || !isEditableProp) return null;
14899
14968
  return new EditPanelItem({
14900
14969
  key: itemKey,
@@ -15144,6 +15213,7 @@ Author: Draggable https://draggable.io
15144
15213
  init_constants();
15145
15214
  init_data();
15146
15215
  init_edit_panel();
15216
+ init_page_text();
15147
15217
  propertyOptions = objectFromStringArray(PROPERTY_OPTIONS);
15148
15218
  Component = class extends Data {
15149
15219
  /**
@@ -15277,7 +15347,7 @@ Author: Draggable https://draggable.io
15277
15347
  }
15278
15348
  return parent;
15279
15349
  }
15280
- if (this.name === "stage") return null;
15350
+ if (this.name === "stage") return this.removeStage();
15281
15351
  const parent = this.parent;
15282
15352
  const children = this.children;
15283
15353
  const siblingsPath = `${parent.name}s.${parent.id}.children`;
@@ -15452,10 +15522,29 @@ Author: Draggable https://draggable.io
15452
15522
  if (this.name === "column") this.parent.autoColumnWidths();
15453
15523
  } }
15454
15524
  };
15455
- }
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
+ })
15456
15535
  };
15457
15536
  const { buttons, disabled } = this.config.actionButtons;
15458
- const actionButtonsConfigs = buttons.filter((btn) => !disabled.includes(btn)).map((btn) => buttonConfig[btn]?.() || btn);
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);
15459
15548
  this.actionButtons = actionButtonsConfigs;
15460
15549
  return this.actionButtons;
15461
15550
  }
@@ -17008,6 +17097,13 @@ Author: Draggable https://draggable.io
17008
17097
  */
17009
17098
  get = (path) => path ? get(this.data, path) : this.add();
17010
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
+ /**
17011
17107
  * Adds a new component with the given id and data.
17012
17108
  *
17013
17109
  * @param {string} id - The unique identifier for the component. If not provided, a new UUID will be generated.
@@ -17017,7 +17113,7 @@ Author: Draggable https://draggable.io
17017
17113
  * @returns {Object} The newly created component.
17018
17114
  */
17019
17115
  add = (id, data = Object.create(null), { silent = false } = {}) => {
17020
- const elemId = id || uuid();
17116
+ const elemId = id || this.generateId();
17021
17117
  const component = this.Component({
17022
17118
  ...data,
17023
17119
  id: elemId
@@ -17025,6 +17121,7 @@ Author: Draggable https://draggable.io
17025
17121
  this.data[elemId] = component;
17026
17122
  this.active = component;
17027
17123
  const addEvent = {
17124
+ stages: EVENT_FORMEO_ADDED_STAGE,
17028
17125
  rows: EVENT_FORMEO_ADDED_ROW,
17029
17126
  columns: EVENT_FORMEO_ADDED_COLUMN,
17030
17127
  fields: EVENT_FORMEO_ADDED_FIELD
@@ -17801,9 +17898,47 @@ Author: Draggable https://draggable.io
17801
17898
  const component = super.onAdd(...args);
17802
17899
  if (component?.name === "column") component.parent.autoColumnWidths();
17803
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
+ }
17804
17937
  };
17805
17938
  //#endregion
17806
17939
  //#region src/lib/js/components/stages/index.js
17940
+ init_utils();
17941
+ init_page_text();
17807
17942
  var DEFAULT_CONFIG = () => ({
17808
17943
  actionButtons: {
17809
17944
  buttons: ["edit"],
@@ -17824,7 +17959,67 @@ Author: Draggable https://draggable.io
17824
17959
  this.config = { all: DEFAULT_CONFIG() };
17825
17960
  }
17826
17961
  Component(data) {
17827
- 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;
17828
18023
  }
17829
18024
  };
17830
18025
  var stages = new Stages();
@@ -17976,6 +18171,603 @@ Author: Draggable https://draggable.io
17976
18171
  });
17977
18172
  actions.events = events;
17978
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
17979
18771
  //#region src/lib/js/config.js
17980
18772
  init_constants();
17981
18773
  var defaults = { get editor() {
@@ -17985,6 +18777,7 @@ Author: Draggable https://draggable.io
17985
18777
  dataType: "json",
17986
18778
  debug: false,
17987
18779
  sessionStorage: false,
18780
+ pages: false,
17988
18781
  editorContainer: null,
17989
18782
  svgSprite: null,
17990
18783
  style: CSS_URL,
@@ -18067,6 +18860,8 @@ Author: Draggable https://draggable.io
18067
18860
  actions: this.actions
18068
18861
  });
18069
18862
  this.Components.config = config;
18863
+ this.pages = opts.pages ? new EditorPages(this.Components) : null;
18864
+ this.Components.pages = this.pages;
18070
18865
  if (opts.sessionStorage) {
18071
18866
  const key = formDataStorageKey(opts.sessionStorage);
18072
18867
  const holder = storageKeyHolders.get(key);
@@ -18276,13 +19071,14 @@ Author: Draggable https://draggable.io
18276
19071
  if (this.isDestroyed) return;
18277
19072
  if (!this.controls) return globalThis.requestAnimationFrame(() => this.render());
18278
19073
  this.stages = Object.values(this.Components.get("stages"));
18279
- if (this.opts.controlOnLeft) for (const stage of this.stages) stage.dom.style.order = 1;
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;
18280
19076
  const elemConfig = {
18281
19077
  attrs: {
18282
19078
  className: "formeo formeo-editor",
18283
19079
  id: this.formId
18284
19080
  },
18285
- content: [this.stages.map(({ dom }) => dom)]
19081
+ content: [stageArea]
18286
19082
  };
18287
19083
  if (s.current.dir) {
18288
19084
  elemConfig.attrs.dir = s.current.dir;
@@ -18317,11 +19113,12 @@ Author: Draggable https://draggable.io
18317
19113
  document.removeEventListener("DOMContentLoaded", this.#onDOMContentLoaded);
18318
19114
  window.removeEventListener("resize", this.onResize);
18319
19115
  this.events.destroy();
19116
+ this.controls?.destroy();
19117
+ this.pages?.destroy();
18320
19118
  if (this.opts.sessionStorage) {
18321
19119
  const key = formDataStorageKey(this.opts.sessionStorage);
18322
19120
  if (storageKeyHolders.get(key) === this) storageKeyHolders.delete(key);
18323
19121
  }
18324
- this.controls?.destroy();
18325
19122
  destroySortables(this.editor);
18326
19123
  for (const type of [
18327
19124
  "stages",