formeo 4.1.4 → 4.2.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: 4.1.3
4
+ Version: 4.1.4
5
5
  Author: Draggable https://draggable.io
6
6
  */
7
7
 
@@ -435,7 +435,7 @@ Author: Draggable https://draggable.io
435
435
  window.SmartTooltip = SmartTooltip;
436
436
  }
437
437
  const name$1 = "formeo";
438
- const version$2 = "4.1.3";
438
+ const version$2 = "4.1.4";
439
439
  const pkg = {
440
440
  name: name$1,
441
441
  version: version$2
@@ -2283,6 +2283,7 @@ Author: Draggable https://draggable.io
2283
2283
  const ANIMATION_SPEED_SLOW = Math.round(ANIMATION_SPEED_BASE * 2);
2284
2284
  const EVENT_FORMEO_SAVED = "formeoSaved";
2285
2285
  const EVENT_FORMEO_UPDATED = "formeoUpdated";
2286
+ const EVENT_FORMEO_CHANGED = "formeoChanged";
2286
2287
  const EVENT_FORMEO_UPDATED_STAGE = "formeoUpdatedStage";
2287
2288
  const EVENT_FORMEO_UPDATED_ROW = "formeoUpdatedRow";
2288
2289
  const EVENT_FORMEO_UPDATED_COLUMN = "formeoUpdatedColumn";
@@ -2290,6 +2291,12 @@ Author: Draggable https://draggable.io
2290
2291
  const EVENT_FORMEO_CLEARED = "formeoCleared";
2291
2292
  const EVENT_FORMEO_ON_RENDER = "formeoOnRender";
2292
2293
  const EVENT_FORMEO_CONDITION_UPDATED = "formeoConditionUpdated";
2294
+ const EVENT_FORMEO_ADDED_ROW = "formeoAddedRow";
2295
+ const EVENT_FORMEO_ADDED_COLUMN = "formeoAddedColumn";
2296
+ const EVENT_FORMEO_ADDED_FIELD = "formeoAddedField";
2297
+ const EVENT_FORMEO_REMOVED_ROW = "formeoRemovedRow";
2298
+ const EVENT_FORMEO_REMOVED_COLUMN = "formeoRemovedColumn";
2299
+ const EVENT_FORMEO_REMOVED_FIELD = "formeoRemovedField";
2293
2300
  const COMPARISON_OPERATORS = {
2294
2301
  equals: "==",
2295
2302
  notEquals: "!=",
@@ -3296,6 +3303,18 @@ Author: Draggable https://draggable.io
3296
3303
  evtData.previousValue = oldVal;
3297
3304
  }
3298
3305
  events.formeoUpdated(evtData);
3306
+ if (this.name) {
3307
+ const componentEventMap = {
3308
+ stage: EVENT_FORMEO_UPDATED_STAGE,
3309
+ row: EVENT_FORMEO_UPDATED_ROW,
3310
+ column: EVENT_FORMEO_UPDATED_COLUMN,
3311
+ field: EVENT_FORMEO_UPDATED_FIELD
3312
+ };
3313
+ const specificEvent = componentEventMap[this.name];
3314
+ if (specificEvent) {
3315
+ events.formeoUpdated(evtData, specificEvent);
3316
+ }
3317
+ }
3299
3318
  }
3300
3319
  return data;
3301
3320
  }
@@ -3365,6 +3384,23 @@ Author: Draggable https://draggable.io
3365
3384
  const component = this.Component({ ...data, id: elemId });
3366
3385
  this.data[elemId] = component;
3367
3386
  this.active = component;
3387
+ const componentEventMap = {
3388
+ row: EVENT_FORMEO_ADDED_ROW,
3389
+ column: EVENT_FORMEO_ADDED_COLUMN,
3390
+ field: EVENT_FORMEO_ADDED_FIELD
3391
+ };
3392
+ const addEvent = componentEventMap[this.name];
3393
+ if (addEvent) {
3394
+ events.formeoUpdated(
3395
+ {
3396
+ entity: component,
3397
+ componentId: elemId,
3398
+ componentType: this.name,
3399
+ data: component.data
3400
+ },
3401
+ addEvent
3402
+ );
3403
+ }
3368
3404
  return component;
3369
3405
  };
3370
3406
  /**
@@ -7570,7 +7606,7 @@ Author: Draggable https://draggable.io
7570
7606
  };
7571
7607
  const editPanelButtons = [];
7572
7608
  if (type === "conditions") {
7573
- if (!mi18n.current.clearAll) {
7609
+ if (mi18n.current && !mi18n.current.clearAll) {
7574
7610
  mi18n.put("clearAll", "Clear All");
7575
7611
  }
7576
7612
  const clearAllBtn = {
@@ -8064,6 +8100,7 @@ Author: Draggable https://draggable.io
8064
8100
  dispatchComponentEvent(eventName, eventData = {}) {
8065
8101
  const fullEventData = {
8066
8102
  component: this,
8103
+ target: this,
8067
8104
  type: eventName,
8068
8105
  timestamp: Date.now(),
8069
8106
  ...eventData
@@ -8149,6 +8186,22 @@ Author: Draggable https://draggable.io
8149
8186
  if (parent.name === "row") {
8150
8187
  parent.autoColumnWidths();
8151
8188
  }
8189
+ const componentEventMap = {
8190
+ row: EVENT_FORMEO_REMOVED_ROW,
8191
+ column: EVENT_FORMEO_REMOVED_COLUMN,
8192
+ field: EVENT_FORMEO_REMOVED_FIELD
8193
+ };
8194
+ const removeEvent = componentEventMap[this.name];
8195
+ if (removeEvent) {
8196
+ events.formeoUpdated(
8197
+ {
8198
+ componentId: this.id,
8199
+ componentType: this.name,
8200
+ parent
8201
+ },
8202
+ removeEvent
8203
+ );
8204
+ }
8152
8205
  return components[`${this.name}s`].delete(this.id);
8153
8206
  };
8154
8207
  /**
@@ -9445,7 +9498,7 @@ Author: Draggable https://draggable.io
9445
9498
  }
9446
9499
  onAdd(...args) {
9447
9500
  const component = super.onAdd(...args);
9448
- if (component && component.name === "column") {
9501
+ if (component?.name === "column") {
9449
9502
  component.parent.autoColumnWidths();
9450
9503
  }
9451
9504
  }
@@ -10398,12 +10451,18 @@ Author: Draggable https://draggable.io
10398
10451
  },
10399
10452
  onAdd: () => {
10400
10453
  },
10401
- onChange: (...args) => defaults$1.onUpdate(...args),
10454
+ onChange: (evt) => events.opts?.debug && console.log(evt),
10402
10455
  onUpdate: (evt) => events.opts?.debug && console.log(evt),
10403
10456
  onUpdateStage: (evt) => events.opts?.debug && console.log(evt),
10404
10457
  onUpdateRow: (evt) => events.opts?.debug && console.log(evt),
10405
10458
  onUpdateColumn: (evt) => events.opts?.debug && console.log(evt),
10406
10459
  onUpdateField: (evt) => events.opts?.debug && console.log(evt),
10460
+ onAddRow: (evt) => events.opts?.debug && console.log(evt),
10461
+ onAddColumn: (evt) => events.opts?.debug && console.log(evt),
10462
+ onAddField: (evt) => events.opts?.debug && console.log(evt),
10463
+ onRemoveRow: (evt) => events.opts?.debug && console.log(evt),
10464
+ onRemoveColumn: (evt) => events.opts?.debug && console.log(evt),
10465
+ onRemoveField: (evt) => events.opts?.debug && console.log(evt),
10407
10466
  onRender: (evt) => events.opts?.debug && console.log(evt),
10408
10467
  onSave: (_evt) => {
10409
10468
  },
@@ -10419,6 +10478,13 @@ Author: Draggable https://draggable.io
10419
10478
  bubbles: events.opts?.debug || events.opts?.bubbles
10420
10479
  });
10421
10480
  evt.data = (src || document).dispatchEvent(evt);
10481
+ if (type === EVENT_FORMEO_UPDATED) {
10482
+ const changedEvt = new window.CustomEvent(EVENT_FORMEO_CHANGED, {
10483
+ detail: evtData,
10484
+ bubbles: events.opts?.debug || events.opts?.bubbles
10485
+ });
10486
+ (src || document).dispatchEvent(changedEvt);
10487
+ }
10422
10488
  return evt;
10423
10489
  };
10424
10490
  const events = {
@@ -10427,50 +10493,82 @@ Author: Draggable https://draggable.io
10427
10493
  return this;
10428
10494
  },
10429
10495
  formeoSaved: (evt) => defaultCustomEvent(evt, EVENT_FORMEO_SAVED),
10430
- formeoUpdated: (evt) => defaultCustomEvent(evt, EVENT_FORMEO_UPDATED),
10496
+ formeoUpdated: (evt, eventType) => defaultCustomEvent(evt, eventType || EVENT_FORMEO_UPDATED),
10431
10497
  formeoCleared: (evt) => defaultCustomEvent(evt, EVENT_FORMEO_CLEARED),
10432
10498
  formeoOnRender: (evt) => defaultCustomEvent(evt, EVENT_FORMEO_ON_RENDER),
10433
- formeoConditionUpdated: (evt) => defaultCustomEvent(evt, EVENT_FORMEO_CONDITION_UPDATED)
10499
+ formeoConditionUpdated: (evt) => defaultCustomEvent(evt, EVENT_FORMEO_CONDITION_UPDATED),
10500
+ formeoAddedRow: (evt) => defaultCustomEvent(evt, EVENT_FORMEO_ADDED_ROW),
10501
+ formeoAddedColumn: (evt) => defaultCustomEvent(evt, EVENT_FORMEO_ADDED_COLUMN),
10502
+ formeoAddedField: (evt) => defaultCustomEvent(evt, EVENT_FORMEO_ADDED_FIELD),
10503
+ formeoRemovedRow: (evt) => defaultCustomEvent(evt, EVENT_FORMEO_REMOVED_ROW),
10504
+ formeoRemovedColumn: (evt) => defaultCustomEvent(evt, EVENT_FORMEO_REMOVED_COLUMN),
10505
+ formeoRemovedField: (evt) => defaultCustomEvent(evt, EVENT_FORMEO_REMOVED_FIELD)
10434
10506
  };
10435
10507
  const formeoUpdatedThrottled = throttle$1(() => {
10436
- events.opts.onUpdate({
10508
+ const eventData = {
10437
10509
  timeStamp: window.performance.now(),
10438
10510
  type: EVENT_FORMEO_UPDATED,
10439
10511
  detail: components.formData
10440
- });
10512
+ };
10513
+ events.opts.onUpdate(eventData);
10514
+ if (events.opts.onChange !== events.opts.onUpdate) {
10515
+ events.opts.onChange(eventData);
10516
+ }
10441
10517
  }, ANIMATION_SPEED_FAST);
10442
10518
  document.addEventListener(EVENT_FORMEO_UPDATED, formeoUpdatedThrottled);
10443
10519
  document.addEventListener(EVENT_FORMEO_UPDATED_STAGE, (evt) => {
10444
10520
  const { timeStamp, type, detail } = evt;
10445
- events.opts.onUpdate({
10446
- timeStamp,
10447
- type,
10448
- detail
10449
- });
10521
+ const eventData = { timeStamp, type, detail };
10522
+ events.opts.onUpdate(eventData);
10523
+ events.opts.onUpdateStage(eventData);
10450
10524
  });
10451
10525
  document.addEventListener(EVENT_FORMEO_UPDATED_ROW, (evt) => {
10452
10526
  const { timeStamp, type, detail } = evt;
10453
- events.opts.onUpdate({
10454
- timeStamp,
10455
- type,
10456
- detail
10457
- });
10527
+ const eventData = { timeStamp, type, detail };
10528
+ events.opts.onUpdate(eventData);
10529
+ events.opts.onUpdateRow(eventData);
10458
10530
  });
10459
10531
  document.addEventListener(EVENT_FORMEO_UPDATED_COLUMN, (evt) => {
10460
10532
  const { timeStamp, type, detail } = evt;
10461
- events.opts.onUpdate({
10462
- timeStamp,
10463
- type,
10464
- detail
10465
- });
10533
+ const eventData = { timeStamp, type, detail };
10534
+ events.opts.onUpdate(eventData);
10535
+ events.opts.onUpdateColumn(eventData);
10466
10536
  });
10467
10537
  document.addEventListener(EVENT_FORMEO_UPDATED_FIELD, (evt) => {
10468
10538
  const { timeStamp, type, detail } = evt;
10469
- events.opts.onUpdate({
10470
- timeStamp,
10471
- type,
10472
- detail
10473
- });
10539
+ const eventData = { timeStamp, type, detail };
10540
+ events.opts.onUpdate(eventData);
10541
+ events.opts.onUpdateField(eventData);
10542
+ });
10543
+ document.addEventListener(EVENT_FORMEO_ADDED_ROW, (evt) => {
10544
+ const { timeStamp, type, detail } = evt;
10545
+ const eventData = { timeStamp, type, detail };
10546
+ events.opts.onAddRow(eventData);
10547
+ });
10548
+ document.addEventListener(EVENT_FORMEO_ADDED_COLUMN, (evt) => {
10549
+ const { timeStamp, type, detail } = evt;
10550
+ const eventData = { timeStamp, type, detail };
10551
+ events.opts.onAddColumn(eventData);
10552
+ });
10553
+ document.addEventListener(EVENT_FORMEO_ADDED_FIELD, (evt) => {
10554
+ const { timeStamp, type, detail } = evt;
10555
+ const eventData = { timeStamp, type, detail };
10556
+ events.opts.onAddField(eventData);
10557
+ });
10558
+ document.addEventListener(EVENT_FORMEO_REMOVED_ROW, (evt) => {
10559
+ const { timeStamp, type, detail } = evt;
10560
+ const eventData = { timeStamp, type, detail };
10561
+ events.opts.onRemoveRow(eventData);
10562
+ });
10563
+ document.addEventListener(EVENT_FORMEO_REMOVED_COLUMN, (evt) => {
10564
+ const { timeStamp, type, detail } = evt;
10565
+ const eventData = { timeStamp, type, detail };
10566
+ events.opts.onRemoveColumn(eventData);
10567
+ });
10568
+ document.addEventListener(EVENT_FORMEO_REMOVED_FIELD, (evt) => {
10569
+ const { timeStamp, type, detail } = evt;
10570
+ const eventData = { timeStamp, type, detail };
10571
+ events.opts.onRemoveField(eventData);
10474
10572
  });
10475
10573
  document.addEventListener(EVENT_FORMEO_ON_RENDER, (evt) => {
10476
10574
  const { timeStamp, type, detail } = evt;
@@ -10669,6 +10767,9 @@ Author: Draggable https://draggable.io
10669
10767
  this.userFormData = cleanFormData(data);
10670
10768
  this.load(this.userFormData, this.opts);
10671
10769
  }
10770
+ loadData(data = {}) {
10771
+ this.formData = data;
10772
+ }
10672
10773
  get json() {
10673
10774
  return this.Components.json;
10674
10775
  }
@@ -1,7 +1,7 @@
1
1
 
2
2
  /**
3
3
  formeo - https://formeo.io
4
- Version: 4.1.3
4
+ Version: 4.1.4
5
5
  Author: Draggable https://draggable.io
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
 
2
2
  /**
3
3
  formeo - https://formeo.io
4
- Version: 4.1.3
4
+ Version: 4.1.4
5
5
  Author: Draggable https://draggable.io
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
 
2
2
  /**
3
3
  formeo - https://formeo.io
4
- Version: 4.1.3
4
+ Version: 4.1.4
5
5
  Author: Draggable https://draggable.io
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
 
2
2
  /**
3
3
  formeo - https://formeo.io
4
- Version: 4.1.3
4
+ Version: 4.1.4
5
5
  Author: Draggable https://draggable.io
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
 
2
2
  /**
3
3
  formeo - https://formeo.io
4
- Version: 4.1.3
4
+ Version: 4.1.4
5
5
  Author: Draggable https://draggable.io
6
6
  */
7
7
 
@@ -1 +1 @@
1
- <!doctype html><html lang="en" xml:lang="en"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="chrome=1"><meta name="viewport" content="user-scalable=no,width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1"><meta name="description" content="Vanilla Javascript form building module"><meta name="theme-color" content="#232323"><title>Formeo | Drag &amp; Drop Form Creation</title><script type="module" crossorigin src="/formeo/assets/js/demo.min.js"></script><link rel="stylesheet" crossorigin href="/formeo/assets/css/demo.min.css"></head><body><div class="site-wrap"><header id="demo-header"><div class="header-inner"><img id="formeo-logo" src="/formeo/assets/img/formeo-logo.svg" alt="Formeo Logo" width="100"><nav aria-label="Framework navigation"><ul><li><label for="framework-select">Framework:</label> <select name="framework-select" id="framework-select" class="form-control"><option value="vanilla">Vanilla JavaScript</option><option value="angular">Angular</option><option value="react">React</option></select></li><li><label for="locale">Language</label> <select name="locale" id="locale" class="form-control"><option value="af-ZA" dir="ltr">Afrikaans (Suid-Afrika)</option><option value="ar-TN" dir="rtl">العربية (تونس)</option><option value="cs-CZ" dir="ltr">čeština (Česko)</option><option value="de-DE" dir="ltr">Deutsch (Deutschland)</option><option value="en-US" dir="ltr">English</option><option value="es-ES" dir="ltr">español de España</option><option value="fa-IR" dir="rtl">فارسی (ایران)</option><option value="fi-FI" dir="ltr">suomi (Suomi)</option><option value="fr-FR" dir="ltr">français (France)</option><option value="he-IL" dir="rtl">עברית (ישראל)</option><option value="hi-IN" dir="ltr">हिन्दी (भारत)</option><option value="hu-HU" dir="ltr">magyar (Magyarország)</option><option value="it-IT" dir="ltr">italiano (Italia)</option><option value="ja-JP" dir="ltr">日本語 (日本)</option><option value="nb-NO" dir="ltr">norsk bokmål (Norge)</option><option value="pl-PL" dir="ltr">polski (Polska)</option><option value="pt-BR" dir="ltr">português (Brasil)</option><option value="pt-PT" dir="ltr">português europeu</option><option value="ro-RO" dir="ltr">română (România)</option><option value="ru-RU" dir="ltr">русский (Россия)</option><option value="th-TH" dir="ltr">ไทย (ไทย)</option><option value="tr-TR" dir="ltr">Türkçe (Türkiye)</option><option value="zh-CN" dir="ltr">中文(中国)</option><option value="zh-HK" dir="ltr">中文(中國香港特別行政區)</option></select></li><li><label for="control-filter">Control Filter:</label> <input id="control-filter" placeholder="ex. text" class="form-control"></li><li style="float:right">v4.1.3</li></ul></nav></div></header><section id="main_content" class="inner"><div id="framework-container"></div></section><div class="container render-btn-wrap" id="editor-action-buttons"></div><div id="formData-popover" popover><div class="popover-header"><h3>Test formData</h3><div><button type="button" id="format-json">Format</button> <button type="button" id="collapse-json">Collapse</button> <button type="button" id="copy-json">Copy to Clipboard</button></div></div><pre id="formData-editor"></pre><div class="formData-actions"><button popovertarget="formData-popover" popovertargetaction="hide" type="button">Cancel</button> <button id="submit-formData" type="button">Submit</button></div></div><footer id="demo-footer"><nav aria-label="Footer navigation"><ul><li><a href="https://github.com/Draggable/formeo" target="_blank" title="View project on GitHub"><img src="/formeo/assets/img/github.png" width="77" alt="GitHub"></a></li></ul></nav></footer></div></body></html>
1
+ <!doctype html><html lang="en" xml:lang="en"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="chrome=1"><meta name="viewport" content="user-scalable=no,width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1"><meta name="description" content="Vanilla Javascript form building module"><meta name="theme-color" content="#232323"><title>Formeo | Drag &amp; Drop Form Creation</title><script type="module" crossorigin src="/formeo/assets/js/demo.min.js"></script><link rel="stylesheet" crossorigin href="/formeo/assets/css/demo.min.css"></head><body><div class="site-wrap"><header id="demo-header"><div class="header-inner"><img id="formeo-logo" src="/formeo/assets/img/formeo-logo.svg" alt="Formeo Logo" width="100"><nav aria-label="Framework navigation"><ul><li><label for="framework-select">Framework:</label> <select name="framework-select" id="framework-select" class="form-control"><option value="vanilla">Vanilla JavaScript</option><option value="angular">Angular</option><option value="react">React</option></select></li><li><label for="locale">Language</label> <select name="locale" id="locale" class="form-control"><option value="af-ZA" dir="ltr">Afrikaans (Suid-Afrika)</option><option value="ar-TN" dir="rtl">العربية (تونس)</option><option value="cs-CZ" dir="ltr">čeština (Česko)</option><option value="de-DE" dir="ltr">Deutsch (Deutschland)</option><option value="en-US" dir="ltr">English</option><option value="es-ES" dir="ltr">español de España</option><option value="fa-IR" dir="rtl">فارسی (ایران)</option><option value="fi-FI" dir="ltr">suomi (Suomi)</option><option value="fr-FR" dir="ltr">français (France)</option><option value="he-IL" dir="rtl">עברית (ישראל)</option><option value="hi-IN" dir="ltr">हिन्दी (भारत)</option><option value="hu-HU" dir="ltr">magyar (Magyarország)</option><option value="it-IT" dir="ltr">italiano (Italia)</option><option value="ja-JP" dir="ltr">日本語 (日本)</option><option value="nb-NO" dir="ltr">norsk bokmål (Norge)</option><option value="pl-PL" dir="ltr">polski (Polska)</option><option value="pt-BR" dir="ltr">português (Brasil)</option><option value="pt-PT" dir="ltr">português europeu</option><option value="ro-RO" dir="ltr">română (România)</option><option value="ru-RU" dir="ltr">русский (Россия)</option><option value="th-TH" dir="ltr">ไทย (ไทย)</option><option value="tr-TR" dir="ltr">Türkçe (Türkiye)</option><option value="zh-CN" dir="ltr">中文(中国)</option><option value="zh-HK" dir="ltr">中文(中國香港特別行政區)</option></select></li><li><label for="control-filter">Control Filter:</label> <input id="control-filter" placeholder="ex. text" class="form-control"></li><li style="float:right">v4.1.4</li></ul></nav></div></header><section id="main_content" class="inner"><div id="framework-container"></div></section><div class="container render-btn-wrap" id="editor-action-buttons"></div><div id="formData-popover" popover><div class="popover-header"><h3>Test formData</h3><div><button type="button" id="format-json">Format</button> <button type="button" id="collapse-json">Collapse</button> <button type="button" id="copy-json">Copy to Clipboard</button></div></div><pre id="formData-editor"></pre><div class="formData-actions"><button popovertarget="formData-popover" popovertargetaction="hide" type="button">Cancel</button> <button id="submit-formData" type="button">Submit</button></div></div><footer id="demo-footer"><nav aria-label="Footer navigation"><ul><li><a href="https://github.com/Draggable/formeo" target="_blank" title="View project on GitHub"><img src="/formeo/assets/img/github.png" width="77" alt="GitHub"></a></li></ul></nav></footer></div></body></html>
@@ -1,7 +1,7 @@
1
1
 
2
2
  /**
3
3
  formeo - https://formeo.io
4
- Version: 4.1.3
4
+ Version: 4.1.4
5
5
  Author: Draggable https://draggable.io
6
6
  */
7
7
 
@@ -433,7 +433,7 @@ if (window !== void 0) {
433
433
  window.SmartTooltip = SmartTooltip;
434
434
  }
435
435
  const name$1 = "formeo";
436
- const version$2 = "4.1.3";
436
+ const version$2 = "4.1.4";
437
437
  const pkg = {
438
438
  name: name$1,
439
439
  version: version$2
@@ -2281,6 +2281,7 @@ const ANIMATION_SPEED_FAST = Math.round(ANIMATION_SPEED_BASE / 2);
2281
2281
  const ANIMATION_SPEED_SLOW = Math.round(ANIMATION_SPEED_BASE * 2);
2282
2282
  const EVENT_FORMEO_SAVED = "formeoSaved";
2283
2283
  const EVENT_FORMEO_UPDATED = "formeoUpdated";
2284
+ const EVENT_FORMEO_CHANGED = "formeoChanged";
2284
2285
  const EVENT_FORMEO_UPDATED_STAGE = "formeoUpdatedStage";
2285
2286
  const EVENT_FORMEO_UPDATED_ROW = "formeoUpdatedRow";
2286
2287
  const EVENT_FORMEO_UPDATED_COLUMN = "formeoUpdatedColumn";
@@ -2288,6 +2289,12 @@ const EVENT_FORMEO_UPDATED_FIELD = "formeoUpdatedField";
2288
2289
  const EVENT_FORMEO_CLEARED = "formeoCleared";
2289
2290
  const EVENT_FORMEO_ON_RENDER = "formeoOnRender";
2290
2291
  const EVENT_FORMEO_CONDITION_UPDATED = "formeoConditionUpdated";
2292
+ const EVENT_FORMEO_ADDED_ROW = "formeoAddedRow";
2293
+ const EVENT_FORMEO_ADDED_COLUMN = "formeoAddedColumn";
2294
+ const EVENT_FORMEO_ADDED_FIELD = "formeoAddedField";
2295
+ const EVENT_FORMEO_REMOVED_ROW = "formeoRemovedRow";
2296
+ const EVENT_FORMEO_REMOVED_COLUMN = "formeoRemovedColumn";
2297
+ const EVENT_FORMEO_REMOVED_FIELD = "formeoRemovedField";
2291
2298
  const COMPARISON_OPERATORS = {
2292
2299
  equals: "==",
2293
2300
  notEquals: "!=",
@@ -3294,6 +3301,18 @@ class Data {
3294
3301
  evtData.previousValue = oldVal;
3295
3302
  }
3296
3303
  events.formeoUpdated(evtData);
3304
+ if (this.name) {
3305
+ const componentEventMap = {
3306
+ stage: EVENT_FORMEO_UPDATED_STAGE,
3307
+ row: EVENT_FORMEO_UPDATED_ROW,
3308
+ column: EVENT_FORMEO_UPDATED_COLUMN,
3309
+ field: EVENT_FORMEO_UPDATED_FIELD
3310
+ };
3311
+ const specificEvent = componentEventMap[this.name];
3312
+ if (specificEvent) {
3313
+ events.formeoUpdated(evtData, specificEvent);
3314
+ }
3315
+ }
3297
3316
  }
3298
3317
  return data;
3299
3318
  }
@@ -3363,6 +3382,23 @@ class ComponentData extends Data {
3363
3382
  const component = this.Component({ ...data, id: elemId });
3364
3383
  this.data[elemId] = component;
3365
3384
  this.active = component;
3385
+ const componentEventMap = {
3386
+ row: EVENT_FORMEO_ADDED_ROW,
3387
+ column: EVENT_FORMEO_ADDED_COLUMN,
3388
+ field: EVENT_FORMEO_ADDED_FIELD
3389
+ };
3390
+ const addEvent = componentEventMap[this.name];
3391
+ if (addEvent) {
3392
+ events.formeoUpdated(
3393
+ {
3394
+ entity: component,
3395
+ componentId: elemId,
3396
+ componentType: this.name,
3397
+ data: component.data
3398
+ },
3399
+ addEvent
3400
+ );
3401
+ }
3366
3402
  return component;
3367
3403
  };
3368
3404
  /**
@@ -7568,7 +7604,7 @@ class EditPanel {
7568
7604
  };
7569
7605
  const editPanelButtons = [];
7570
7606
  if (type === "conditions") {
7571
- if (!mi18n.current.clearAll) {
7607
+ if (mi18n.current && !mi18n.current.clearAll) {
7572
7608
  mi18n.put("clearAll", "Clear All");
7573
7609
  }
7574
7610
  const clearAllBtn = {
@@ -8062,6 +8098,7 @@ class Component extends Data {
8062
8098
  dispatchComponentEvent(eventName, eventData = {}) {
8063
8099
  const fullEventData = {
8064
8100
  component: this,
8101
+ target: this,
8065
8102
  type: eventName,
8066
8103
  timestamp: Date.now(),
8067
8104
  ...eventData
@@ -8147,6 +8184,22 @@ class Component extends Data {
8147
8184
  if (parent.name === "row") {
8148
8185
  parent.autoColumnWidths();
8149
8186
  }
8187
+ const componentEventMap = {
8188
+ row: EVENT_FORMEO_REMOVED_ROW,
8189
+ column: EVENT_FORMEO_REMOVED_COLUMN,
8190
+ field: EVENT_FORMEO_REMOVED_FIELD
8191
+ };
8192
+ const removeEvent = componentEventMap[this.name];
8193
+ if (removeEvent) {
8194
+ events.formeoUpdated(
8195
+ {
8196
+ componentId: this.id,
8197
+ componentType: this.name,
8198
+ parent
8199
+ },
8200
+ removeEvent
8201
+ );
8202
+ }
8150
8203
  return components[`${this.name}s`].delete(this.id);
8151
8204
  };
8152
8205
  /**
@@ -9443,7 +9496,7 @@ class Stage extends Component {
9443
9496
  }
9444
9497
  onAdd(...args) {
9445
9498
  const component = super.onAdd(...args);
9446
- if (component && component.name === "column") {
9499
+ if (component?.name === "column") {
9447
9500
  component.parent.autoColumnWidths();
9448
9501
  }
9449
9502
  }
@@ -10396,12 +10449,18 @@ const defaults$1 = {
10396
10449
  },
10397
10450
  onAdd: () => {
10398
10451
  },
10399
- onChange: (...args) => defaults$1.onUpdate(...args),
10452
+ onChange: (evt) => events.opts?.debug && console.log(evt),
10400
10453
  onUpdate: (evt) => events.opts?.debug && console.log(evt),
10401
10454
  onUpdateStage: (evt) => events.opts?.debug && console.log(evt),
10402
10455
  onUpdateRow: (evt) => events.opts?.debug && console.log(evt),
10403
10456
  onUpdateColumn: (evt) => events.opts?.debug && console.log(evt),
10404
10457
  onUpdateField: (evt) => events.opts?.debug && console.log(evt),
10458
+ onAddRow: (evt) => events.opts?.debug && console.log(evt),
10459
+ onAddColumn: (evt) => events.opts?.debug && console.log(evt),
10460
+ onAddField: (evt) => events.opts?.debug && console.log(evt),
10461
+ onRemoveRow: (evt) => events.opts?.debug && console.log(evt),
10462
+ onRemoveColumn: (evt) => events.opts?.debug && console.log(evt),
10463
+ onRemoveField: (evt) => events.opts?.debug && console.log(evt),
10405
10464
  onRender: (evt) => events.opts?.debug && console.log(evt),
10406
10465
  onSave: (_evt) => {
10407
10466
  },
@@ -10417,6 +10476,13 @@ const defaultCustomEvent = ({ src, ...evtData }, type = EVENT_FORMEO_UPDATED) =>
10417
10476
  bubbles: events.opts?.debug || events.opts?.bubbles
10418
10477
  });
10419
10478
  evt.data = (src || document).dispatchEvent(evt);
10479
+ if (type === EVENT_FORMEO_UPDATED) {
10480
+ const changedEvt = new window.CustomEvent(EVENT_FORMEO_CHANGED, {
10481
+ detail: evtData,
10482
+ bubbles: events.opts?.debug || events.opts?.bubbles
10483
+ });
10484
+ (src || document).dispatchEvent(changedEvt);
10485
+ }
10420
10486
  return evt;
10421
10487
  };
10422
10488
  const events = {
@@ -10425,50 +10491,82 @@ const events = {
10425
10491
  return this;
10426
10492
  },
10427
10493
  formeoSaved: (evt) => defaultCustomEvent(evt, EVENT_FORMEO_SAVED),
10428
- formeoUpdated: (evt) => defaultCustomEvent(evt, EVENT_FORMEO_UPDATED),
10494
+ formeoUpdated: (evt, eventType) => defaultCustomEvent(evt, eventType || EVENT_FORMEO_UPDATED),
10429
10495
  formeoCleared: (evt) => defaultCustomEvent(evt, EVENT_FORMEO_CLEARED),
10430
10496
  formeoOnRender: (evt) => defaultCustomEvent(evt, EVENT_FORMEO_ON_RENDER),
10431
- formeoConditionUpdated: (evt) => defaultCustomEvent(evt, EVENT_FORMEO_CONDITION_UPDATED)
10497
+ formeoConditionUpdated: (evt) => defaultCustomEvent(evt, EVENT_FORMEO_CONDITION_UPDATED),
10498
+ formeoAddedRow: (evt) => defaultCustomEvent(evt, EVENT_FORMEO_ADDED_ROW),
10499
+ formeoAddedColumn: (evt) => defaultCustomEvent(evt, EVENT_FORMEO_ADDED_COLUMN),
10500
+ formeoAddedField: (evt) => defaultCustomEvent(evt, EVENT_FORMEO_ADDED_FIELD),
10501
+ formeoRemovedRow: (evt) => defaultCustomEvent(evt, EVENT_FORMEO_REMOVED_ROW),
10502
+ formeoRemovedColumn: (evt) => defaultCustomEvent(evt, EVENT_FORMEO_REMOVED_COLUMN),
10503
+ formeoRemovedField: (evt) => defaultCustomEvent(evt, EVENT_FORMEO_REMOVED_FIELD)
10432
10504
  };
10433
10505
  const formeoUpdatedThrottled = throttle$1(() => {
10434
- events.opts.onUpdate({
10506
+ const eventData = {
10435
10507
  timeStamp: window.performance.now(),
10436
10508
  type: EVENT_FORMEO_UPDATED,
10437
10509
  detail: components.formData
10438
- });
10510
+ };
10511
+ events.opts.onUpdate(eventData);
10512
+ if (events.opts.onChange !== events.opts.onUpdate) {
10513
+ events.opts.onChange(eventData);
10514
+ }
10439
10515
  }, ANIMATION_SPEED_FAST);
10440
10516
  document.addEventListener(EVENT_FORMEO_UPDATED, formeoUpdatedThrottled);
10441
10517
  document.addEventListener(EVENT_FORMEO_UPDATED_STAGE, (evt) => {
10442
10518
  const { timeStamp, type, detail } = evt;
10443
- events.opts.onUpdate({
10444
- timeStamp,
10445
- type,
10446
- detail
10447
- });
10519
+ const eventData = { timeStamp, type, detail };
10520
+ events.opts.onUpdate(eventData);
10521
+ events.opts.onUpdateStage(eventData);
10448
10522
  });
10449
10523
  document.addEventListener(EVENT_FORMEO_UPDATED_ROW, (evt) => {
10450
10524
  const { timeStamp, type, detail } = evt;
10451
- events.opts.onUpdate({
10452
- timeStamp,
10453
- type,
10454
- detail
10455
- });
10525
+ const eventData = { timeStamp, type, detail };
10526
+ events.opts.onUpdate(eventData);
10527
+ events.opts.onUpdateRow(eventData);
10456
10528
  });
10457
10529
  document.addEventListener(EVENT_FORMEO_UPDATED_COLUMN, (evt) => {
10458
10530
  const { timeStamp, type, detail } = evt;
10459
- events.opts.onUpdate({
10460
- timeStamp,
10461
- type,
10462
- detail
10463
- });
10531
+ const eventData = { timeStamp, type, detail };
10532
+ events.opts.onUpdate(eventData);
10533
+ events.opts.onUpdateColumn(eventData);
10464
10534
  });
10465
10535
  document.addEventListener(EVENT_FORMEO_UPDATED_FIELD, (evt) => {
10466
10536
  const { timeStamp, type, detail } = evt;
10467
- events.opts.onUpdate({
10468
- timeStamp,
10469
- type,
10470
- detail
10471
- });
10537
+ const eventData = { timeStamp, type, detail };
10538
+ events.opts.onUpdate(eventData);
10539
+ events.opts.onUpdateField(eventData);
10540
+ });
10541
+ document.addEventListener(EVENT_FORMEO_ADDED_ROW, (evt) => {
10542
+ const { timeStamp, type, detail } = evt;
10543
+ const eventData = { timeStamp, type, detail };
10544
+ events.opts.onAddRow(eventData);
10545
+ });
10546
+ document.addEventListener(EVENT_FORMEO_ADDED_COLUMN, (evt) => {
10547
+ const { timeStamp, type, detail } = evt;
10548
+ const eventData = { timeStamp, type, detail };
10549
+ events.opts.onAddColumn(eventData);
10550
+ });
10551
+ document.addEventListener(EVENT_FORMEO_ADDED_FIELD, (evt) => {
10552
+ const { timeStamp, type, detail } = evt;
10553
+ const eventData = { timeStamp, type, detail };
10554
+ events.opts.onAddField(eventData);
10555
+ });
10556
+ document.addEventListener(EVENT_FORMEO_REMOVED_ROW, (evt) => {
10557
+ const { timeStamp, type, detail } = evt;
10558
+ const eventData = { timeStamp, type, detail };
10559
+ events.opts.onRemoveRow(eventData);
10560
+ });
10561
+ document.addEventListener(EVENT_FORMEO_REMOVED_COLUMN, (evt) => {
10562
+ const { timeStamp, type, detail } = evt;
10563
+ const eventData = { timeStamp, type, detail };
10564
+ events.opts.onRemoveColumn(eventData);
10565
+ });
10566
+ document.addEventListener(EVENT_FORMEO_REMOVED_FIELD, (evt) => {
10567
+ const { timeStamp, type, detail } = evt;
10568
+ const eventData = { timeStamp, type, detail };
10569
+ events.opts.onRemoveField(eventData);
10472
10570
  });
10473
10571
  document.addEventListener(EVENT_FORMEO_ON_RENDER, (evt) => {
10474
10572
  const { timeStamp, type, detail } = evt;
@@ -10667,6 +10765,9 @@ let FormeoEditor$1 = class FormeoEditor {
10667
10765
  this.userFormData = cleanFormData(data);
10668
10766
  this.load(this.userFormData, this.opts);
10669
10767
  }
10768
+ loadData(data = {}) {
10769
+ this.formData = data;
10770
+ }
10670
10771
  get json() {
10671
10772
  return this.Components.json;
10672
10773
  }
package/dist/formeo.css CHANGED
@@ -1,7 +1,7 @@
1
1
 
2
2
  /**
3
3
  formeo - https://formeo.io
4
- Version: 4.1.3
4
+ Version: 4.1.4
5
5
  Author: Draggable https://draggable.io
6
6
  */
7
7