@servicetitan/dte-unlayer 0.153.0 → 0.155.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.
Files changed (85) hide show
  1. package/dist/display-conditions/ConditionRow.d.ts.map +1 -1
  2. package/dist/display-conditions/ConditionRow.js +111 -95
  3. package/dist/display-conditions/ConditionRow.js.map +1 -1
  4. package/dist/display-conditions/DisplayConditionModal.d.ts +3 -3
  5. package/dist/display-conditions/DisplayConditionModal.d.ts.map +1 -1
  6. package/dist/display-conditions/DisplayConditionModal.js +8 -95
  7. package/dist/display-conditions/DisplayConditionModal.js.map +1 -1
  8. package/dist/display-conditions/useConditionForms.d.ts +22 -0
  9. package/dist/display-conditions/useConditionForms.d.ts.map +1 -0
  10. package/dist/display-conditions/useConditionForms.js +110 -0
  11. package/dist/display-conditions/useConditionForms.js.map +1 -0
  12. package/dist/e-sign-offset/ESignDateSignedOffsetModal.d.ts +11 -0
  13. package/dist/e-sign-offset/ESignDateSignedOffsetModal.d.ts.map +1 -0
  14. package/dist/e-sign-offset/ESignDateSignedOffsetModal.js +192 -0
  15. package/dist/e-sign-offset/ESignDateSignedOffsetModal.js.map +1 -0
  16. package/dist/e-sign-offset/ESignOffsetRuleRow.d.ts +20 -0
  17. package/dist/e-sign-offset/ESignOffsetRuleRow.d.ts.map +1 -0
  18. package/dist/e-sign-offset/ESignOffsetRuleRow.js +87 -0
  19. package/dist/e-sign-offset/ESignOffsetRuleRow.js.map +1 -0
  20. package/dist/e-sign-offset/eSignOffsetController.d.ts +10 -0
  21. package/dist/e-sign-offset/eSignOffsetController.d.ts.map +1 -0
  22. package/dist/e-sign-offset/eSignOffsetController.js +27 -0
  23. package/dist/e-sign-offset/eSignOffsetController.js.map +1 -0
  24. package/dist/editor-core-source.d.ts +2 -2
  25. package/dist/editor-core-source.d.ts.map +1 -1
  26. package/dist/editor-core-source.js +2 -2
  27. package/dist/editor-core-source.js.map +1 -1
  28. package/dist/editor.d.ts.map +1 -1
  29. package/dist/editor.js +8 -0
  30. package/dist/editor.js.map +1 -1
  31. package/dist/index.d.ts +2 -2
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +1 -1
  34. package/dist/index.js.map +1 -1
  35. package/dist/merge-tags.d.ts +6 -10
  36. package/dist/merge-tags.d.ts.map +1 -1
  37. package/dist/merge-tags.js +35 -44
  38. package/dist/merge-tags.js.map +1 -1
  39. package/dist/shared/const.d.ts +30 -0
  40. package/dist/shared/const.d.ts.map +1 -1
  41. package/dist/shared/const.js +5 -0
  42. package/dist/shared/const.js.map +1 -1
  43. package/dist/shared/e-sign-offset.d.ts +21 -0
  44. package/dist/shared/e-sign-offset.d.ts.map +1 -0
  45. package/dist/shared/e-sign-offset.js +130 -0
  46. package/dist/shared/e-sign-offset.js.map +1 -0
  47. package/dist/shared/instance-id.d.ts +13 -0
  48. package/dist/shared/instance-id.d.ts.map +1 -0
  49. package/dist/shared/instance-id.js +22 -0
  50. package/dist/shared/instance-id.js.map +1 -0
  51. package/dist/store.d.ts +15 -1
  52. package/dist/store.d.ts.map +1 -1
  53. package/dist/store.js +80 -5
  54. package/dist/store.js.map +1 -1
  55. package/dist/tools.d.ts +18 -0
  56. package/dist/tools.d.ts.map +1 -1
  57. package/dist/tools.js +68 -1
  58. package/dist/tools.js.map +1 -1
  59. package/dist/unlayer-interface.d.ts +11 -1
  60. package/dist/unlayer-interface.d.ts.map +1 -1
  61. package/dist/unlayer-interface.js.map +1 -1
  62. package/dist/unlayer.d.ts.map +1 -1
  63. package/dist/unlayer.js +5 -3
  64. package/dist/unlayer.js.map +1 -1
  65. package/package.json +1 -1
  66. package/src/__tests__/e-sign-offset.test.ts +281 -0
  67. package/src/__tests__/merge-tags.test.ts +98 -76
  68. package/src/__tests__/store.merge-tags.test.ts +186 -0
  69. package/src/display-conditions/ConditionRow.tsx +86 -81
  70. package/src/display-conditions/DisplayConditionModal.tsx +12 -116
  71. package/src/display-conditions/useConditionForms.ts +146 -0
  72. package/src/e-sign-offset/ESignDateSignedOffsetModal.tsx +197 -0
  73. package/src/e-sign-offset/ESignOffsetRuleRow.tsx +101 -0
  74. package/src/e-sign-offset/eSignOffsetController.ts +39 -0
  75. package/src/editor-core-source.ts +2 -2
  76. package/src/editor.tsx +9 -0
  77. package/src/index.ts +1 -2
  78. package/src/merge-tags.ts +41 -60
  79. package/src/shared/const.ts +37 -0
  80. package/src/shared/e-sign-offset.ts +173 -0
  81. package/src/shared/instance-id.ts +23 -0
  82. package/src/store.ts +106 -5
  83. package/src/tools.ts +87 -1
  84. package/src/unlayer-interface.tsx +11 -1
  85. package/src/unlayer.tsx +5 -3
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/shared/instance-id.ts"],"sourcesContent":["/**\n * Custom tools whose `values.id` is a per-instance GUID that must stay unique\n * within a design. When such a tool is duplicated (content or row duplicate),\n * Unlayer copies the values as-is, so the host regenerates the id of the copy.\n */\nexport const INSTANCE_ID_TOOL_SLUGS = ['embedded-image'];\n\n/**\n * Generates an RFC 4122 v4 GUID (`3fa85f64-5717-4562-b3fc-2c963f66afa6`) with the\n * platform `crypto.randomUUID()`. It is only exposed in secure contexts (https /\n * localhost); when missing the error is logged and no id is produced.\n */\nexport const generateInstanceId = (): string | undefined => {\n if (typeof globalThis.crypto?.randomUUID !== 'function') {\n // eslint-disable-next-line no-console\n console.error(\n 'crypto.randomUUID is not available (insecure context?), cannot generate an instance id',\n );\n return undefined;\n }\n\n return globalThis.crypto.randomUUID();\n};\n"],"names":["INSTANCE_ID_TOOL_SLUGS","generateInstanceId","globalThis","crypto","randomUUID","console","error","undefined"],"mappings":"AAAA;;;;CAIC,GACD,OAAO,MAAMA,yBAAyB;IAAC;CAAiB,CAAC;AAEzD;;;;CAIC,GACD,OAAO,MAAMC,qBAAqB;QACnBC;IAAX,IAAI,SAAOA,qBAAAA,WAAWC,MAAM,cAAjBD,yCAAAA,mBAAmBE,UAAU,MAAK,YAAY;QACrD,sCAAsC;QACtCC,QAAQC,KAAK,CACT;QAEJ,OAAOC;IACX;IAEA,OAAOL,WAAWC,MAAM,CAACC,UAAU;AACvC,EAAE"}
package/dist/store.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import type { UnlayerEditorTwin } from './shared/const';
2
2
  import { FormFieldInfo, FormInfo } from './shared/forms';
3
- import { CreateUnlayerEditorProps, UnlayerDesignFormat, UnlayerRef } from './unlayer-interface';
3
+ import { CreateUnlayerEditorProps, UnlayerDesignFormat, UnlayerEditorMergeTagInfo, UnlayerRef } from './unlayer-interface';
4
4
  export interface UnlayerDesignChangeInfo {
5
5
  isToolsListChanged: boolean;
6
6
  }
@@ -18,6 +18,9 @@ export declare class UnlayerStore {
18
18
  private toolsReadyWatchdogId?;
19
19
  private formFieldsByFormId;
20
20
  private formFieldSamples;
21
+ private isEditorReady;
22
+ private isMergeTagsApplied;
23
+ private mergeTagsConfig?;
21
24
  private onMessageCB?;
22
25
  private onChangeCB?;
23
26
  private onSnapshotSaveCB?;
@@ -44,9 +47,20 @@ export declare class UnlayerStore {
44
47
  sendFormList: (forms: FormInfo[]) => void;
45
48
  sendFormFields: (formId: number, fields: FormFieldInfo[]) => void;
46
49
  sendCalcFieldLabels: (labels: Record<string, string>) => void;
50
+ /**
51
+ * Replaces the editor's merge tag menu. Nested groups passed to `createEditor` stop DTE
52
+ * custom tools from registering, so init only carries the flat shape and the grouped
53
+ * config is applied here once the editor is ready. A call before that (including the
54
+ * initial props) is parked; a later call replaces it. A failed apply is retried on the
55
+ * next `design:loaded`.
56
+ */
57
+ setMergeTags: (tags: UnlayerEditorMergeTagInfo[] | undefined) => void;
58
+ private applyMergeTags;
59
+ private onEditorReady;
47
60
  private onDesignLoaded;
48
61
  private onDesignUpdated;
49
62
  private onPostMessage;
63
+ private openESignOffsetRules;
50
64
  private updateFormFieldSamples;
51
65
  private collectCalculatedFieldKeys;
52
66
  private resolveDemoValue;
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAA4C,MAAM,gBAAgB,CAAC;AAElG,OAAO,EACH,aAAa,EACb,QAAQ,EAGX,MAAM,gBAAgB,CAAC;AAUxB,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AA0IhG,MAAM,WAAW,uBAAuB;IACpC,kBAAkB,EAAE,OAAO,CAAC;CAC/B;AAmBD,qBAAa,YAAY;IAyBT,QAAQ,CAAC,KAAK,EAAE,wBAAwB;IAxBpD,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA0B;IAC1D,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAc;IAElD,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAC,CAAoB;IACnC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,oBAAoB,CAAC,CAAS;IACtC,OAAO,CAAC,kBAAkB,CAAuC;IACjE,OAAO,CAAC,gBAAgB,CAA+B;IAEvD,OAAO,CAAC,WAAW,CAAC,CAAoC;IACxD,OAAO,CAAC,UAAU,CAAC,CAA0C;IAC7D,OAAO,CAAC,gBAAgB,CAAC,CAAwC;IACjE,OAAO,CAAC,SAAS,CAAC,CAAa;IAC/B,OAAO,CAAC,SAAS,CAAC,CAA2C;IAC7D,OAAO,CAAC,SAAS,CAAC,CAAgD;IAClE,OAAO,CAAC,cAAc,CAAC,CAA2B;IAClD,OAAO,CAAC,iBAAiB,CAAC,CAAkC;IAC5D,OAAO,CAAC,mBAAmB,CAAC,CAAgC;gBAEvC,KAAK,EAAE,wBAAwB;IAqCpD,IAAI,GAAU,WAAW,cAAc,mBAkCrC;IAEF,OAAO,aAWL;IAEF,OAAO,GAAI,MAAM,iBAAiB,UAGhC;IAEF,SAAS,GAAI,SAAS,mBAAmB,UAUvC;IAEF,WAAW,GAAI,WAAW,YAAY,CAAC,YAAY,CAAC,UAElD;IAEF,iBAAiB,GAAI,iBAAiB,YAAY,CAAC,kBAAkB,CAAC,UAEpE;IAEF,UAAU,GAAI,UAAU,YAAY,CAAC,WAAW,CAAC,UAE/C;IAEF,UAAU,GAAI,UAAU,YAAY,CAAC,WAAW,CAAC,UAE/C;IAEF,UAAU,GAAI,UAAU,YAAY,CAAC,WAAW,CAAC,UAE/C;IAEF,YAAY,GAAI,YAAY,YAAY,CAAC,aAAa,CAAC,UAErD;IAEF,eAAe,GAAI,eAAe,YAAY,CAAC,gBAAgB,CAAC,UAE9D;IAEF,kBAAkB,GAAI,kBAAkB,YAAY,CAAC,mBAAmB,CAAC,UAEvE;IAEF,oBAAoB,GAAI,oBAAoB,YAAY,CAAC,qBAAqB,CAAC,UAE7E;IAEF,YAAY,GAAI,OAAO,QAAQ,EAAE,UAE/B;IAEF,cAAc,GAAI,QAAQ,MAAM,EAAE,QAAQ,aAAa,EAAE,UAIvD;IAEF,mBAAmB,GAAI,QAAQ,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,UAEnD;IAEF,OAAO,CAAC,cAAc,CAQpB;IAEF,OAAO,CAAC,eAAe,CAmCrB;IAEF,OAAO,CAAC,aAAa,CA0EnB;IAEF,OAAO,CAAC,sBAAsB,CAgB5B;IAEF,OAAO,CAAC,0BAA0B,CAyBhC;IAEF,OAAO,CAAC,gBAAgB,CAqCtB;IAEF,OAAO,CAAC,4BAA4B,CAiBlC;IAEF,OAAO,CAAC,WAAW,CAUjB;IAEF,OAAO,CAAC,WAAW,CAuCjB;IAEF,OAAO,CAAC,uBAAuB,CAmB7B;IAEF,OAAO,CAAC,uBAAuB,CAO7B;IAEF,OAAO,CAAC,aAAa,CA+CnB;CACL"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
package/dist/store.js CHANGED
@@ -11,14 +11,17 @@ function _define_property(obj, key, value) {
11
11
  }
12
12
  return obj;
13
13
  }
14
+ import { emitESignOffsetRequest } from './e-sign-offset/eSignOffsetController';
14
15
  import { loadScript } from './loadScript';
15
16
  import { logUnlayerError } from './log';
17
+ import { toUnlayerMergeTags } from './merge-tags';
16
18
  import { defaultImageValidation } from './shared/configs';
19
+ import { normalizeESignOffsetSettings } from './shared/e-sign-offset';
17
20
  import { unlayerSupportedFonts } from './shared/fonts';
18
21
  import { getFormFieldSampleValue, parseFormFieldKey } from './shared/forms';
19
22
  import { schemaBuildMap, schemaIsDate } from './shared/schema';
20
23
  import { unlayerToolsParseTwinKey } from './shared/tools';
21
- import { unlayerToolsIterate } from './tools';
24
+ import { unlayerToolsDedupeInstanceIds, unlayerToolsIterate, unlayerToolsNormalizeESignOffsets } from './tools';
22
25
  import { createUnlayerEditor, DesignUpdatedEventType } from './unlayer';
23
26
  const defaultScriptUrl = 'https://editor.unlayer.com/embed.js?2';
24
27
  const UNLAYER_TOOLS_READY_TIMEOUT_MS = 30000;
@@ -159,6 +162,9 @@ export class UnlayerStore {
159
162
  _define_property(this, "toolsReadyWatchdogId", void 0);
160
163
  _define_property(this, "formFieldsByFormId", void 0);
161
164
  _define_property(this, "formFieldSamples", void 0);
165
+ _define_property(this, "isEditorReady", void 0);
166
+ _define_property(this, "isMergeTagsApplied", void 0);
167
+ _define_property(this, "mergeTagsConfig", void 0);
162
168
  _define_property(this, "onMessageCB", void 0);
163
169
  _define_property(this, "onChangeCB", void 0);
164
170
  _define_property(this, "onSnapshotSaveCB", void 0);
@@ -184,9 +190,19 @@ export class UnlayerStore {
184
190
  _define_property(this, "sendFormList", void 0);
185
191
  _define_property(this, "sendFormFields", void 0);
186
192
  _define_property(this, "sendCalcFieldLabels", void 0);
193
+ /**
194
+ * Replaces the editor's merge tag menu. Nested groups passed to `createEditor` stop DTE
195
+ * custom tools from registering, so init only carries the flat shape and the grouped
196
+ * config is applied here once the editor is ready. A call before that (including the
197
+ * initial props) is parked; a later call replaces it. A failed apply is retried on the
198
+ * next `design:loaded`.
199
+ */ _define_property(this, "setMergeTags", void 0);
200
+ _define_property(this, "applyMergeTags", void 0);
201
+ _define_property(this, "onEditorReady", void 0);
187
202
  _define_property(this, "onDesignLoaded", void 0);
188
203
  _define_property(this, "onDesignUpdated", void 0);
189
204
  _define_property(this, "onPostMessage", void 0);
205
+ _define_property(this, "openESignOffsetRules", void 0);
190
206
  _define_property(this, "updateFormFieldSamples", void 0);
191
207
  _define_property(this, "collectCalculatedFieldKeys", void 0);
192
208
  _define_property(this, "resolveDemoValue", void 0);
@@ -203,19 +219,24 @@ export class UnlayerStore {
203
219
  this.hasToolsRegistered = false;
204
220
  this.formFieldsByFormId = {};
205
221
  this.formFieldSamples = {};
222
+ this.isEditorReady = false;
223
+ this.isMergeTagsApplied = false;
206
224
  this.init = async (container)=>{
207
225
  if (this.isInit) {
208
226
  return;
209
227
  }
210
228
  this.isInit = true;
211
229
  try {
212
- var _container_querySelector;
230
+ var // The host may already have pushed a newer set through `setMergeTags`; keep it.
231
+ _this_mergeTagsConfig, _container_querySelector;
213
232
  setTimeout(()=>window.addEventListener('message', this.onPostMessage));
214
233
  await loadScript(defaultScriptUrl);
215
234
  if (!window.unlayer) {
216
235
  throw new Error('Unlayer embed script loaded but window.unlayer is missing');
217
236
  }
218
237
  this.editor = createUnlayerEditor(container, this.props);
238
+ (_this_mergeTagsConfig = this.mergeTagsConfig) !== null && _this_mergeTagsConfig !== void 0 ? _this_mergeTagsConfig : this.mergeTagsConfig = toUnlayerMergeTags(this.props.mergeTags);
239
+ this.editor.addEventListener('editor:ready', this.onEditorReady);
219
240
  this.editor.addEventListener('design:loaded', this.onDesignLoaded);
220
241
  this.editor.addEventListener('design:updated', this.onDesignUpdated);
221
242
  this.editor.registerCallback('image', this.uploadImage);
@@ -235,6 +256,7 @@ export class UnlayerStore {
235
256
  this.clearToolsReadyWatchdog();
236
257
  window.removeEventListener('message', this.onPostMessage);
237
258
  if (this.editor) {
259
+ this.editor.removeEventListener('editor:ready', this.onEditorReady);
238
260
  this.editor.removeEventListener('design:loaded', this.onDesignLoaded);
239
261
  this.editor.removeEventListener('design:updated', this.onDesignUpdated);
240
262
  this.editor.unregisterCallback('image', this.uploadImage);
@@ -300,7 +322,29 @@ export class UnlayerStore {
300
322
  labels
301
323
  });
302
324
  };
325
+ this.setMergeTags = (tags)=>{
326
+ this.mergeTagsConfig = toUnlayerMergeTags(tags);
327
+ this.isMergeTagsApplied = false;
328
+ this.applyMergeTags();
329
+ };
330
+ this.applyMergeTags = ()=>{
331
+ if (!this.editor || !this.isEditorReady || this.isMergeTagsApplied || !this.mergeTagsConfig) {
332
+ return;
333
+ }
334
+ try {
335
+ this.editor.setMergeTags(this.mergeTagsConfig);
336
+ this.isMergeTagsApplied = true;
337
+ } catch (error) {
338
+ logUnlayerError('Failed to apply merge tags', error);
339
+ }
340
+ };
341
+ this.onEditorReady = ()=>{
342
+ this.isEditorReady = true;
343
+ this.applyMergeTags();
344
+ };
303
345
  this.onDesignLoaded = ()=>{
346
+ // A loaded design means the editor is up even if `editor:ready` never reached us.
347
+ this.onEditorReady();
304
348
  if (!this.hasDesign) {
305
349
  var _this_editor;
306
350
  this.hasDesign = true;
@@ -316,7 +360,7 @@ export class UnlayerStore {
316
360
  if (isToolAdded) {
317
361
  var _this_editor;
318
362
  (_this_editor = this.editor) === null || _this_editor === void 0 ? void 0 : _this_editor.exportHtml((data)=>{
319
- var _this_onChangeCB, _this;
363
+ var _event_item_values__meta, _event_item_values, _event_item, _this_onChangeCB, _this;
320
364
  let hasChanges = false;
321
365
  unlayerToolsIterate(data.design, (tool)=>{
322
366
  var _tool_slug;
@@ -331,6 +375,10 @@ export class UnlayerStore {
331
375
  tool.slug = realTool.slug;
332
376
  }
333
377
  });
378
+ // Duplicated contents/rows carry the original's instance GUIDs; give copies new ones.
379
+ if (unlayerToolsDedupeInstanceIds(data.design, (_event_item = event.item) === null || _event_item === void 0 ? void 0 : (_event_item_values = _event_item.values) === null || _event_item_values === void 0 ? void 0 : (_event_item_values__meta = _event_item_values._meta) === null || _event_item_values__meta === void 0 ? void 0 : _event_item_values__meta.htmlID)) {
380
+ hasChanges = true;
381
+ }
334
382
  if (hasChanges) {
335
383
  this.setDesign(data.design);
336
384
  }
@@ -368,7 +416,8 @@ export class UnlayerStore {
368
416
  generics: this.props.generics,
369
417
  genericConfigMode: this.props.genericConfigMode,
370
418
  isSnapshotMode: this.props.isSnapshotMode,
371
- holidays: this.props.holidays
419
+ holidays: this.props.holidays,
420
+ conditionalRulesEnabled: !!this.props.displayConditions || !!this.props.onConditionalsOpen
372
421
  };
373
422
  this.sendMessage('--config', JSON.parse(JSON.stringify(configData)));
374
423
  } else if (type === '--form-select') {
@@ -378,6 +427,8 @@ export class UnlayerStore {
378
427
  var _ref;
379
428
  var _this_onCalcFieldOpenCB, _this3;
380
429
  (_this_onCalcFieldOpenCB = (_this3 = this).onCalcFieldOpenCB) === null || _this_onCalcFieldOpenCB === void 0 ? void 0 : _this_onCalcFieldOpenCB.call(_this3, (_ref = data === null || data === void 0 ? void 0 : data.usedFormIds) !== null && _ref !== void 0 ? _ref : []);
430
+ } else if (type === '--esign-offset-open') {
431
+ this.openESignOffsetRules(data);
381
432
  } else if (type === '--calc-field-select') {
382
433
  if (this.onCalcFieldSelectCB) {
383
434
  var _ref1;
@@ -425,6 +476,22 @@ export class UnlayerStore {
425
476
  }
426
477
  (_this_onMessageCB = (_this = this).onMessageCB) === null || _this_onMessageCB === void 0 ? void 0 : _this_onMessageCB.call(_this, type, data);
427
478
  };
479
+ this.openESignOffsetRules = (data)=>{
480
+ const requestId = data === null || data === void 0 ? void 0 : data.requestId;
481
+ if (!requestId) {
482
+ return;
483
+ }
484
+ emitESignOffsetRequest({
485
+ value: normalizeESignOffsetSettings(data.value),
486
+ done: (value)=>{
487
+ const result = {
488
+ requestId,
489
+ value
490
+ };
491
+ this.sendMessage('--esign-offset-result', JSON.parse(JSON.stringify(result)));
492
+ }
493
+ });
494
+ };
428
495
  this.updateFormFieldSamples = (formId, fields)=>{
429
496
  fields.forEach((field, index)=>{
430
497
  var _field_id;
@@ -615,6 +682,7 @@ export class UnlayerStore {
615
682
  'Signature',
616
683
  'Initials',
617
684
  'Date Signed',
685
+ 'Date Signed Offset',
618
686
  'Full Name'
619
687
  ];
620
688
  this.unlayerRef = {
@@ -624,12 +692,16 @@ export class UnlayerStore {
624
692
  },
625
693
  saveDesign: (cb)=>{
626
694
  var _this_editor;
627
- (_this_editor = this.editor) === null || _this_editor === void 0 ? void 0 : _this_editor.saveDesign(cb);
695
+ (_this_editor = this.editor) === null || _this_editor === void 0 ? void 0 : _this_editor.saveDesign((design)=>{
696
+ unlayerToolsNormalizeESignOffsets(design);
697
+ cb(design);
698
+ });
628
699
  },
629
700
  exportHtml: (cb)=>{
630
701
  var _this_editor;
631
702
  (_this_editor = this.editor) === null || _this_editor === void 0 ? void 0 : _this_editor.exportHtml((data)=>{
632
703
  const result = ensureChunksFonts(data);
704
+ unlayerToolsNormalizeESignOffsets(result === null || result === void 0 ? void 0 : result.design);
633
705
  result.demoData = this.buildCalculatedFieldDemoData(result.design);
634
706
  cb(result);
635
707
  });
@@ -642,6 +714,9 @@ export class UnlayerStore {
642
714
  },
643
715
  sendCalcFieldLabels: (labels)=>{
644
716
  this.sendCalcFieldLabels(labels);
717
+ },
718
+ setMergeTags: (tags)=>{
719
+ this.setMergeTags(tags);
645
720
  }
646
721
  };
647
722
  }
package/dist/store.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/store.ts"],"sourcesContent":["import { loadScript } from './loadScript';\nimport { logUnlayerError } from './log';\nimport { defaultImageValidation } from './shared/configs';\nimport type { UnlayerEditorTwin, UnlayerEventConfig, UnlayerEventRegister } from './shared/const';\nimport { unlayerSupportedFonts } from './shared/fonts';\nimport {\n FormFieldInfo,\n FormInfo,\n getFormFieldSampleValue,\n parseFormFieldKey,\n} from './shared/forms';\nimport { schemaBuildMap, schemaIsDate } from './shared/schema';\nimport { unlayerToolsParseTwinKey } from './shared/tools';\nimport { unlayerToolsIterate } from './tools';\nimport {\n createUnlayerEditor,\n DesignUpdatedEventType,\n EventDesignUpdated,\n Unlayer,\n} from './unlayer';\nimport { CreateUnlayerEditorProps, UnlayerDesignFormat, UnlayerRef } from './unlayer-interface';\n\nconst defaultScriptUrl = 'https://editor.unlayer.com/embed.js?2';\nconst UNLAYER_TOOLS_READY_TIMEOUT_MS = 30000;\n\nconst normalizeFontToken = (font: string) =>\n font.replace(/[\"']/g, '').split(',')[0].trim().toLowerCase();\n\nconst getDesignFontTokens = (value: any, out: Set<string>) => {\n if (!value || typeof value !== 'object') {\n return;\n }\n\n if (Array.isArray(value)) {\n for (const item of value) {\n getDesignFontTokens(item, out);\n }\n\n return;\n }\n\n for (const [key, fieldValue] of Object.entries(value)) {\n if (key === 'fontFamily') {\n if (typeof fieldValue === 'string') {\n out.add(normalizeFontToken(fieldValue));\n } else if (fieldValue && typeof fieldValue === 'object') {\n const fontFamilyValue = fieldValue as { label?: string; value?: string };\n\n if (typeof fontFamilyValue.label === 'string') {\n out.add(normalizeFontToken(fontFamilyValue.label));\n }\n\n if (typeof fontFamilyValue.value === 'string') {\n out.add(normalizeFontToken(fontFamilyValue.value));\n }\n }\n }\n\n if (fieldValue && typeof fieldValue === 'object') {\n getDesignFontTokens(fieldValue, out);\n }\n }\n};\n\nconst ensureChunksFonts = (data: any) => {\n if (!data || typeof data !== 'object') {\n return data;\n }\n\n data.chunks ??= {};\n\n const existingFonts: any[] = Array.isArray(data.chunks.fonts) ? data.chunks.fonts : [];\n const existingLabels = new Set(existingFonts.map((f: any) => f.label));\n\n const usedFontTokens = new Set<string>();\n getDesignFontTokens(data.design, usedFontTokens);\n\n const html = typeof data.html === 'string' ? data.html.toLowerCase() : '';\n\n for (const font of unlayerSupportedFonts) {\n const labelToken = normalizeFontToken(font.label);\n const valueToken = normalizeFontToken(font.value);\n const isUsedInDesign = usedFontTokens.has(labelToken) || usedFontTokens.has(valueToken);\n const isUsedInHtml = [labelToken, valueToken].some(token => html.includes(token));\n\n if ((isUsedInDesign || isUsedInHtml) && !existingLabels.has(font.label)) {\n existingFonts.push(font);\n existingLabels.add(font.label);\n }\n }\n\n data.chunks.fonts = existingFonts;\n return data;\n};\n\nconst FORM_FIELD_DATA_POINT_PREFIX = 'FORM_FIELD_';\n\nconst getByPath = (data: unknown, path: string): unknown => {\n if (!data || typeof data !== 'object') {\n return undefined;\n }\n\n return path.split('.').reduce<unknown>((current, part) => {\n if (!current || typeof current !== 'object') {\n return undefined;\n }\n\n return (current as Record<string, unknown>)[part];\n }, data);\n};\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> =>\n !!value && typeof value === 'object' && !Array.isArray(value);\n\nconst deepMerge = (...sources: unknown[]): Record<string, unknown> => {\n const out: Record<string, unknown> = {};\n\n for (const source of sources) {\n if (!isPlainObject(source)) {\n continue;\n }\n\n for (const [key, value] of Object.entries(source)) {\n if (isPlainObject(value) && isPlainObject(out[key])) {\n out[key] = deepMerge(out[key], value);\n } else {\n out[key] = value;\n }\n }\n }\n\n return out;\n};\n\nconst setByPath = (target: Record<string, unknown>, path: string, value: unknown) => {\n const parts = path.split('.');\n if (!parts.length) {\n return;\n }\n\n let node: Record<string, unknown> = target;\n\n for (let i = 0; i < parts.length - 1; i += 1) {\n const key = parts[i];\n if (!isPlainObject(node[key])) {\n node[key] = {};\n }\n node = node[key] as Record<string, unknown>;\n }\n\n node[parts[parts.length - 1]] = value;\n};\n\nconst tokenizeFormulaFields = (expression: string): string[] => {\n const regex = /[A-Za-z_][A-Za-z0-9_.]*/g;\n return expression.match(regex) ?? [];\n};\n\nexport interface UnlayerDesignChangeInfo {\n isToolsListChanged: boolean;\n}\n\n// We are using exclusive lists here, because we can't be sure that we know all unlayer event types\nconst eventsNotChangingToolsList: DesignUpdatedEventType[] = [\n DesignUpdatedEventType.ContentMoved,\n DesignUpdatedEventType.ContentModified,\n DesignUpdatedEventType.ColumnModified,\n DesignUpdatedEventType.RowMoved,\n DesignUpdatedEventType.RowModified,\n DesignUpdatedEventType.BodyModified,\n];\n\nconst eventsNotAddingTools: DesignUpdatedEventType[] = [\n ...eventsNotChangingToolsList,\n DesignUpdatedEventType.ContentRemoved,\n DesignUpdatedEventType.ColumnRemoved,\n DesignUpdatedEventType.RowRemoved,\n];\n\nexport class UnlayerStore {\n readonly unlayerRef: UnlayerRef;\n private readonly schemaDummyData: Record<string, unknown>;\n private readonly dateSchemaFieldKeys: Set<string>;\n\n private editor: Unlayer | undefined;\n private isInit = false;\n private iframe?: HTMLIFrameElement;\n private hasDesign = false;\n private hasCoreLoaded = false;\n private hasToolsRegistered = false;\n private toolsReadyWatchdogId?: number;\n private formFieldsByFormId: Record<number, FormFieldInfo[]> = {};\n private formFieldSamples: Record<string, unknown> = {};\n\n private onMessageCB?: (type: string, data: any) => void;\n private onChangeCB?: (info: UnlayerDesignChangeInfo) => void;\n private onSnapshotSaveCB?: (snapshot: UnlayerEditorTwin) => void;\n private onReadyCB?: () => void;\n private onImageCB?: (file: File) => Promise<{ url: string }>;\n private onErrorCB?: (title: string, description?: string) => void;\n private onFormSelectCB?: (formId: number) => void;\n private onCalcFieldOpenCB?: (usedFormIds: number[]) => void;\n private onCalcFieldSelectCB?: (fieldKeys: string[]) => void;\n\n constructor(readonly props: CreateUnlayerEditorProps) {\n const schemaData = this.props.schema ? schemaBuildMap(this.props.schema) : undefined;\n this.schemaDummyData = (schemaData?.dummyData ?? {}) as Record<string, unknown>;\n this.dateSchemaFieldKeys = new Set(\n Object.values(schemaData?.map ?? {})\n .filter(field => field.isValue && schemaIsDate(field.node))\n .map(field => field.fullKey),\n );\n\n this.props.eSignFieldTypes = ['Signature', 'Initials', 'Date Signed', 'Full Name'];\n\n this.unlayerRef = {\n loadDesign: design => {\n this.editor?.loadDesign(design);\n },\n saveDesign: cb => {\n this.editor?.saveDesign(cb);\n },\n exportHtml: cb => {\n this.editor?.exportHtml(data => {\n const result = ensureChunksFonts(data);\n result.demoData = this.buildCalculatedFieldDemoData(result.design);\n cb(result);\n });\n },\n sendFormList: forms => {\n this.sendFormList(forms);\n },\n sendFormFields: (formId, fields) => {\n this.sendFormFields(formId, fields);\n },\n sendCalcFieldLabels: labels => {\n this.sendCalcFieldLabels(labels);\n },\n };\n }\n\n init = async (container: HTMLDivElement) => {\n if (this.isInit) {\n return;\n }\n\n this.isInit = true;\n\n try {\n setTimeout(() => window.addEventListener('message', this.onPostMessage));\n\n await loadScript(defaultScriptUrl);\n\n if (!(window as any).unlayer) {\n throw new Error('Unlayer embed script loaded but window.unlayer is missing');\n }\n\n this.editor = createUnlayerEditor(container, this.props);\n this.editor.addEventListener('design:loaded', this.onDesignLoaded);\n this.editor.addEventListener('design:updated', this.onDesignUpdated);\n this.editor.registerCallback('image', this.uploadImage);\n\n this.iframe = container.querySelector(`iframe`) ?? undefined;\n\n if (!this.iframe) {\n logUnlayerError('Unlayer iframe was not created after createEditor');\n }\n\n this.startToolsReadyWatchdog();\n } catch (error: unknown) {\n this.isInit = false;\n this.clearToolsReadyWatchdog();\n logUnlayerError('Failed to initialize Unlayer editor', error);\n throw error;\n }\n };\n\n destroy = () => {\n this.clearToolsReadyWatchdog();\n window.removeEventListener('message', this.onPostMessage);\n\n if (this.editor) {\n this.editor.removeEventListener('design:loaded', this.onDesignLoaded);\n this.editor.removeEventListener('design:updated', this.onDesignUpdated);\n this.editor.unregisterCallback('image', this.uploadImage);\n\n this.editor = undefined;\n }\n };\n\n addTwin = (twin: UnlayerEditorTwin) => {\n this.props.toolTwins?.push(twin);\n this.sendMessage('--add-twin', JSON.parse(JSON.stringify(twin)));\n };\n\n setDesign = (design?: UnlayerDesignFormat) => {\n if (!this.editor) {\n return;\n }\n\n this.hasDesign = !!design;\n\n if (design) {\n this.editor.loadDesign(design);\n }\n };\n\n setOnChange = (onChange?: UnlayerStore['onChangeCB']) => {\n this.onChangeCB = onChange;\n };\n\n setOnSnapshotSave = (onSnapshotSave?: UnlayerStore['onSnapshotSaveCB']) => {\n this.onSnapshotSaveCB = onSnapshotSave;\n };\n\n setOnReady = (onReady?: UnlayerStore['onReadyCB']) => {\n this.onReadyCB = onReady;\n };\n\n setOnImage = (onImage?: UnlayerStore['onImageCB']) => {\n this.onImageCB = onImage;\n };\n\n setOnError = (onError?: UnlayerStore['onErrorCB']) => {\n this.onErrorCB = onError;\n };\n\n setOnMessage = (onMessage?: UnlayerStore['onMessageCB']) => {\n this.onMessageCB = onMessage;\n };\n\n setOnFormSelect = (onFormSelect?: UnlayerStore['onFormSelectCB']) => {\n this.onFormSelectCB = onFormSelect;\n };\n\n setOnCalcFieldOpen = (onCalcFieldOpen?: UnlayerStore['onCalcFieldOpenCB']) => {\n this.onCalcFieldOpenCB = onCalcFieldOpen;\n };\n\n setOnCalcFieldSelect = (onCalcFieldSelect?: UnlayerStore['onCalcFieldSelectCB']) => {\n this.onCalcFieldSelectCB = onCalcFieldSelect;\n };\n\n sendFormList = (forms: FormInfo[]) => {\n this.sendMessage('--form-list', { forms });\n };\n\n sendFormFields = (formId: number, fields: FormFieldInfo[]) => {\n this.formFieldsByFormId[formId] = fields;\n this.updateFormFieldSamples(formId, fields);\n this.sendMessage('--form-fields', { formId, fields });\n };\n\n sendCalcFieldLabels = (labels: Record<string, string>) => {\n this.sendMessage('--calc-field-labels', { labels });\n };\n\n private onDesignLoaded = () => {\n if (!this.hasDesign) {\n this.hasDesign = true;\n this.editor?.setBodyValues({\n backgroundColor: 'rgba(0,0,0,0)',\n contentWidth: '100%',\n });\n }\n };\n\n private onDesignUpdated = (event: EventDesignUpdated) => {\n const isToolAdded = !eventsNotAddingTools.includes(event.type);\n const isToolsListChanged = !eventsNotChangingToolsList.includes(event.type);\n\n if (isToolAdded) {\n this.editor?.exportHtml(data => {\n let hasChanges = false;\n\n unlayerToolsIterate(data.design, tool => {\n const realTool = tool.slug\n ? unlayerToolsParseTwinKey(tool.slug ?? '')\n : undefined;\n\n if (realTool) {\n hasChanges = true;\n\n if (tool.slug) {\n delete data.design.counters[`u_content_custom_${tool.slug}`];\n delete tool.values._meta.htmlID;\n }\n\n tool.type = realTool.type;\n tool.slug = realTool.slug;\n }\n });\n\n if (hasChanges) {\n this.setDesign(data.design);\n }\n\n this.onChangeCB?.({ isToolsListChanged });\n });\n } else {\n this.onChangeCB?.({ isToolsListChanged });\n }\n };\n\n private onPostMessage = (e: MessageEvent) => {\n if (!e.data?.['-dte-message-from']) {\n return;\n }\n\n const type = e.data?.['-dte-message-from']?.type;\n const data = e.data?.['-dte-message-from']?.data;\n\n if (!type) {\n return;\n }\n\n if (type === '--ready' || type === '--registered') {\n this.hasToolsRegistered = true;\n this.clearToolsReadyWatchdog();\n this.onReadyCB?.();\n } else if (type === '--core-loaded') {\n this.hasCoreLoaded = true;\n const configData: UnlayerEventConfig = {\n dummyData: this.props.dummyData,\n schema: this.props.schema,\n generics: this.props.generics,\n genericConfigMode: this.props.genericConfigMode,\n isSnapshotMode: this.props.isSnapshotMode,\n holidays: this.props.holidays,\n };\n\n this.sendMessage('--config', JSON.parse(JSON.stringify(configData)));\n } else if (type === '--form-select') {\n this.onFormSelectCB?.(data?.formId);\n } else if (type === '--calc-field-open') {\n this.onCalcFieldOpenCB?.(data?.usedFormIds ?? []);\n } else if (type === '--calc-field-select') {\n if (this.onCalcFieldSelectCB) {\n this.onCalcFieldSelectCB(data?.fieldKeys ?? []);\n } else {\n this.sendCalcFieldLabels({});\n }\n } else if (type === '--data-loaded') {\n const data: UnlayerEventRegister = {\n customTools: this.props.tools.map(tool => ({ key: tool.key })),\n toolTwins: this.props.toolTwins,\n eSignRecipients: this.props.eSignRecipients,\n eSignFieldTypes: this.props.eSignFieldTypes,\n units: this.props.units?.map(unit => ({\n ...unit,\n values: {\n ...unit.values,\n adminConfig: undefined,\n },\n })),\n };\n\n this.sendMessage('--register', JSON.parse(JSON.stringify(data)));\n } else if (type === '--save-snapshot') {\n this.editor?.exportHtml(template => {\n unlayerToolsIterate(template.design, tool => {\n if (tool.values?.twin?.id === data.id) {\n if (!tool.slug) {\n return;\n }\n\n this.onSnapshotSaveCB?.({\n title: '',\n tool: tool.slug,\n values: tool.values,\n });\n return false;\n }\n });\n });\n }\n\n this.onMessageCB?.(type, data);\n };\n\n private updateFormFieldSamples = (formId: number, fields: FormFieldInfo[]) => {\n fields.forEach((field, index) => {\n const normalizedFieldId = String(field.id ?? '').replaceAll('-', '');\n if (!normalizedFieldId) {\n return;\n }\n\n const sampleValue = getFormFieldSampleValue(field, index);\n setByPath(\n this.formFieldSamples,\n `__submission_fields.${formId}.${normalizedFieldId}`,\n sampleValue,\n );\n this.formFieldSamples[`${FORM_FIELD_DATA_POINT_PREFIX}${normalizedFieldId}`] =\n sampleValue;\n });\n };\n\n private collectCalculatedFieldKeys = (design?: UnlayerDesignFormat): Set<string> => {\n const keys = new Set<string>();\n\n if (!design) {\n return keys;\n }\n\n unlayerToolsIterate(design, tool => {\n const calc = tool.values?.calculation;\n if (!calc || typeof calc !== 'object') {\n return;\n }\n\n if (typeof calc.expression === 'string') {\n for (const key of tokenizeFormulaFields(calc.expression)) {\n keys.add(key);\n }\n }\n\n if (calc.fieldLabels && typeof calc.fieldLabels === 'object') {\n Object.keys(calc.fieldLabels).forEach(key => keys.add(key));\n }\n });\n\n return keys;\n };\n\n private resolveDemoValue = (\n key: string,\n fallbackIndex: number,\n sourceData: Record<string, unknown>,\n ): unknown => {\n const parsedFormField = parseFormFieldKey(key);\n if (parsedFormField) {\n const normalizedFieldId = parsedFormField.fieldId;\n const formFields = this.formFieldsByFormId[parsedFormField.formId] ?? [];\n const fieldIndex = formFields.findIndex(\n field => String(field.id ?? '').replaceAll('-', '') === normalizedFieldId,\n );\n const field = fieldIndex >= 0 ? formFields[fieldIndex] : undefined;\n const sample = field\n ? getFormFieldSampleValue(field, fieldIndex)\n : getByPath(\n this.formFieldSamples,\n `__submission_fields.${parsedFormField.formId}.${normalizedFieldId}`,\n );\n\n if (sample !== undefined) {\n return sample;\n }\n\n return this.dateSchemaFieldKeys.has(key) ? '2026-01-15' : 44 + fallbackIndex;\n }\n\n const existing = getByPath(sourceData, key);\n if (existing !== undefined) {\n return existing;\n }\n\n if (this.dateSchemaFieldKeys.has(key)) {\n return '2026-01-15';\n }\n\n return 44 + fallbackIndex;\n };\n\n private buildCalculatedFieldDemoData = (\n design?: UnlayerDesignFormat,\n ): Record<string, unknown> => {\n const demoData: Record<string, unknown> = {};\n const usedKeys = Array.from(this.collectCalculatedFieldKeys(design));\n const sourceData = deepMerge(\n this.schemaDummyData,\n this.props.dummyData,\n this.formFieldSamples,\n );\n\n usedKeys.forEach((key, index) => {\n const value = this.resolveDemoValue(key, index, sourceData);\n setByPath(demoData, key, value);\n });\n\n return demoData;\n };\n\n private sendMessage = (type: string, data?: any) => {\n this.iframe?.contentWindow?.postMessage(\n {\n '-dte-message-to': {\n type,\n data,\n },\n },\n '*',\n );\n };\n\n private uploadImage = async (\n data: { attachments: File[] },\n done: (result: { progress: number; url?: string }) => void,\n ) => {\n if (!this.onImageCB) {\n done({ progress: 100 });\n throw new Error('image upload is not implemented');\n }\n\n if (!data.attachments?.length) {\n return;\n }\n\n const file = data.attachments[0];\n\n const res = await this.validateImage(file, {\n ...defaultImageValidation,\n ...(this.props.imageValidation ?? {}),\n });\n\n if (!res.isValid) {\n logUnlayerError(`Image validation failed: ${res.title}`, res.description);\n this.onErrorCB?.(res.title, res.description);\n return;\n }\n\n done({ progress: 0 });\n\n try {\n const { url } = await this.onImageCB(file);\n done({ progress: 100, url });\n } catch (error: unknown) {\n logUnlayerError('Image upload failed', error);\n this.onErrorCB?.(\n 'Image upload failed',\n 'Something went wrong while uploading the image. Please try again or select another image.',\n );\n done({ progress: 100 });\n }\n };\n\n private startToolsReadyWatchdog = () => {\n this.clearToolsReadyWatchdog();\n this.toolsReadyWatchdogId = window.setTimeout(() => {\n if (this.hasToolsRegistered) {\n return;\n }\n\n logUnlayerError(\n 'Unlayer custom tools did not finish loading. customJS may not have run, or tool registration stalled.',\n {\n hasCoreLoaded: this.hasCoreLoaded,\n hasToolsRegistered: this.hasToolsRegistered,\n },\n );\n this.onErrorCB?.(\n 'Editor failed to load custom tools',\n 'Unlayer custom tools did not finish loading. Check the browser console for [dte-unlayer] details.',\n );\n }, UNLAYER_TOOLS_READY_TIMEOUT_MS);\n };\n\n private clearToolsReadyWatchdog = () => {\n if (this.toolsReadyWatchdogId === undefined) {\n return;\n }\n\n window.clearTimeout(this.toolsReadyWatchdogId);\n this.toolsReadyWatchdogId = undefined;\n };\n\n private validateImage = async (\n file: File,\n imageValidation: { maxFileSize: number; maxWidth: number; maxHeight: number },\n ): Promise<{ isValid: boolean; title: string; description: string }> => {\n const { maxFileSize, maxHeight, maxWidth } = imageValidation;\n\n if (file.size > maxFileSize) {\n const maxSizeMB = (maxFileSize / 1024 / 1024).toFixed(2);\n const fileSizeMB = (file.size / 1024 / 1024).toFixed(2);\n return {\n isValid: false,\n title: 'Image size limit reached',\n description: `This image is ${fileSizeMB}MB, which is above the ${maxSizeMB}MB limit. Please upload a smaller file to continue.`,\n };\n }\n\n return new Promise(resolve => {\n const img = new Image();\n const objectUrl = URL.createObjectURL(file);\n\n img.onload = () => {\n URL.revokeObjectURL(objectUrl);\n const { height, width } = img;\n\n if (width > maxWidth || height > maxHeight) {\n resolve({\n isValid: false,\n title: 'Dimension limit reached',\n description: `These image dimensions (${width}x${height}px) exceed the ${maxWidth}x${maxHeight}px limit. Please resize the image and try again.`,\n });\n } else {\n resolve({ isValid: true, title: '', description: '' });\n }\n };\n\n img.onerror = () => {\n URL.revokeObjectURL(objectUrl);\n resolve({\n isValid: false,\n title: 'The image is broken',\n description:\n 'Looks like this image isn’t valid. Please choose another image and try again.',\n });\n };\n\n img.src = objectUrl;\n });\n };\n}\n"],"names":["loadScript","logUnlayerError","defaultImageValidation","unlayerSupportedFonts","getFormFieldSampleValue","parseFormFieldKey","schemaBuildMap","schemaIsDate","unlayerToolsParseTwinKey","unlayerToolsIterate","createUnlayerEditor","DesignUpdatedEventType","defaultScriptUrl","UNLAYER_TOOLS_READY_TIMEOUT_MS","normalizeFontToken","font","replace","split","trim","toLowerCase","getDesignFontTokens","value","out","Array","isArray","item","key","fieldValue","Object","entries","add","fontFamilyValue","label","ensureChunksFonts","data","chunks","existingFonts","fonts","existingLabels","Set","map","f","usedFontTokens","design","html","labelToken","valueToken","isUsedInDesign","has","isUsedInHtml","some","token","includes","push","FORM_FIELD_DATA_POINT_PREFIX","getByPath","path","undefined","reduce","current","part","isPlainObject","deepMerge","sources","source","setByPath","target","parts","length","node","i","tokenizeFormulaFields","expression","regex","match","eventsNotChangingToolsList","ContentMoved","ContentModified","ColumnModified","RowMoved","RowModified","BodyModified","eventsNotAddingTools","ContentRemoved","ColumnRemoved","RowRemoved","UnlayerStore","props","unlayerRef","schemaDummyData","dateSchemaFieldKeys","editor","isInit","iframe","hasDesign","hasCoreLoaded","hasToolsRegistered","toolsReadyWatchdogId","formFieldsByFormId","formFieldSamples","onMessageCB","onChangeCB","onSnapshotSaveCB","onReadyCB","onImageCB","onErrorCB","onFormSelectCB","onCalcFieldOpenCB","onCalcFieldSelectCB","init","destroy","addTwin","setDesign","setOnChange","setOnSnapshotSave","setOnReady","setOnImage","setOnError","setOnMessage","setOnFormSelect","setOnCalcFieldOpen","setOnCalcFieldSelect","sendFormList","sendFormFields","sendCalcFieldLabels","onDesignLoaded","onDesignUpdated","onPostMessage","updateFormFieldSamples","collectCalculatedFieldKeys","resolveDemoValue","buildCalculatedFieldDemoData","sendMessage","uploadImage","startToolsReadyWatchdog","clearToolsReadyWatchdog","validateImage","container","setTimeout","window","addEventListener","unlayer","Error","registerCallback","querySelector","error","removeEventListener","unregisterCallback","twin","toolTwins","JSON","parse","stringify","loadDesign","onChange","onSnapshotSave","onReady","onImage","onError","onMessage","onFormSelect","onCalcFieldOpen","onCalcFieldSelect","forms","formId","fields","labels","setBodyValues","backgroundColor","contentWidth","event","isToolAdded","type","isToolsListChanged","exportHtml","hasChanges","tool","realTool","slug","counters","values","_meta","htmlID","e","configData","dummyData","schema","generics","genericConfigMode","isSnapshotMode","holidays","usedFormIds","fieldKeys","customTools","tools","eSignRecipients","eSignFieldTypes","units","unit","adminConfig","template","id","title","forEach","field","index","normalizedFieldId","String","replaceAll","sampleValue","keys","calc","calculation","fieldLabels","fallbackIndex","sourceData","parsedFormField","fieldId","formFields","fieldIndex","findIndex","sample","existing","demoData","usedKeys","from","contentWindow","postMessage","done","progress","attachments","file","res","imageValidation","isValid","description","url","clearTimeout","maxFileSize","maxHeight","maxWidth","size","maxSizeMB","toFixed","fileSizeMB","Promise","resolve","img","Image","objectUrl","URL","createObjectURL","onload","revokeObjectURL","height","width","onerror","src","schemaData","filter","isValue","fullKey","saveDesign","cb","result"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/store.ts"],"sourcesContent":["import { emitESignOffsetRequest } from './e-sign-offset/eSignOffsetController';\nimport { loadScript } from './loadScript';\nimport { logUnlayerError } from './log';\nimport { toUnlayerMergeTags, type UnlayerMergeTagsConfig } from './merge-tags';\nimport { defaultImageValidation } from './shared/configs';\nimport type {\n UnlayerEditorTwin,\n UnlayerEventConfig,\n UnlayerEventESignOffset,\n UnlayerEventRegister,\n} from './shared/const';\nimport { normalizeESignOffsetSettings } from './shared/e-sign-offset';\nimport { unlayerSupportedFonts } from './shared/fonts';\nimport {\n FormFieldInfo,\n FormInfo,\n getFormFieldSampleValue,\n parseFormFieldKey,\n} from './shared/forms';\nimport { schemaBuildMap, schemaIsDate } from './shared/schema';\nimport { unlayerToolsParseTwinKey } from './shared/tools';\nimport {\n unlayerToolsDedupeInstanceIds,\n unlayerToolsIterate,\n unlayerToolsNormalizeESignOffsets,\n} from './tools';\nimport {\n createUnlayerEditor,\n DesignUpdatedEventType,\n EventDesignUpdated,\n Unlayer,\n} from './unlayer';\nimport {\n CreateUnlayerEditorProps,\n UnlayerDesignFormat,\n UnlayerEditorMergeTagInfo,\n UnlayerRef,\n} from './unlayer-interface';\n\nconst defaultScriptUrl = 'https://editor.unlayer.com/embed.js?2';\nconst UNLAYER_TOOLS_READY_TIMEOUT_MS = 30000;\n\nconst normalizeFontToken = (font: string) =>\n font.replace(/[\"']/g, '').split(',')[0].trim().toLowerCase();\n\nconst getDesignFontTokens = (value: any, out: Set<string>) => {\n if (!value || typeof value !== 'object') {\n return;\n }\n\n if (Array.isArray(value)) {\n for (const item of value) {\n getDesignFontTokens(item, out);\n }\n\n return;\n }\n\n for (const [key, fieldValue] of Object.entries(value)) {\n if (key === 'fontFamily') {\n if (typeof fieldValue === 'string') {\n out.add(normalizeFontToken(fieldValue));\n } else if (fieldValue && typeof fieldValue === 'object') {\n const fontFamilyValue = fieldValue as { label?: string; value?: string };\n\n if (typeof fontFamilyValue.label === 'string') {\n out.add(normalizeFontToken(fontFamilyValue.label));\n }\n\n if (typeof fontFamilyValue.value === 'string') {\n out.add(normalizeFontToken(fontFamilyValue.value));\n }\n }\n }\n\n if (fieldValue && typeof fieldValue === 'object') {\n getDesignFontTokens(fieldValue, out);\n }\n }\n};\n\nconst ensureChunksFonts = (data: any) => {\n if (!data || typeof data !== 'object') {\n return data;\n }\n\n data.chunks ??= {};\n\n const existingFonts: any[] = Array.isArray(data.chunks.fonts) ? data.chunks.fonts : [];\n const existingLabels = new Set(existingFonts.map((f: any) => f.label));\n\n const usedFontTokens = new Set<string>();\n getDesignFontTokens(data.design, usedFontTokens);\n\n const html = typeof data.html === 'string' ? data.html.toLowerCase() : '';\n\n for (const font of unlayerSupportedFonts) {\n const labelToken = normalizeFontToken(font.label);\n const valueToken = normalizeFontToken(font.value);\n const isUsedInDesign = usedFontTokens.has(labelToken) || usedFontTokens.has(valueToken);\n const isUsedInHtml = [labelToken, valueToken].some(token => html.includes(token));\n\n if ((isUsedInDesign || isUsedInHtml) && !existingLabels.has(font.label)) {\n existingFonts.push(font);\n existingLabels.add(font.label);\n }\n }\n\n data.chunks.fonts = existingFonts;\n return data;\n};\n\nconst FORM_FIELD_DATA_POINT_PREFIX = 'FORM_FIELD_';\n\nconst getByPath = (data: unknown, path: string): unknown => {\n if (!data || typeof data !== 'object') {\n return undefined;\n }\n\n return path.split('.').reduce<unknown>((current, part) => {\n if (!current || typeof current !== 'object') {\n return undefined;\n }\n\n return (current as Record<string, unknown>)[part];\n }, data);\n};\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> =>\n !!value && typeof value === 'object' && !Array.isArray(value);\n\nconst deepMerge = (...sources: unknown[]): Record<string, unknown> => {\n const out: Record<string, unknown> = {};\n\n for (const source of sources) {\n if (!isPlainObject(source)) {\n continue;\n }\n\n for (const [key, value] of Object.entries(source)) {\n if (isPlainObject(value) && isPlainObject(out[key])) {\n out[key] = deepMerge(out[key], value);\n } else {\n out[key] = value;\n }\n }\n }\n\n return out;\n};\n\nconst setByPath = (target: Record<string, unknown>, path: string, value: unknown) => {\n const parts = path.split('.');\n if (!parts.length) {\n return;\n }\n\n let node: Record<string, unknown> = target;\n\n for (let i = 0; i < parts.length - 1; i += 1) {\n const key = parts[i];\n if (!isPlainObject(node[key])) {\n node[key] = {};\n }\n node = node[key] as Record<string, unknown>;\n }\n\n node[parts[parts.length - 1]] = value;\n};\n\nconst tokenizeFormulaFields = (expression: string): string[] => {\n const regex = /[A-Za-z_][A-Za-z0-9_.]*/g;\n return expression.match(regex) ?? [];\n};\n\nexport interface UnlayerDesignChangeInfo {\n isToolsListChanged: boolean;\n}\n\n// We are using exclusive lists here, because we can't be sure that we know all unlayer event types\nconst eventsNotChangingToolsList: DesignUpdatedEventType[] = [\n DesignUpdatedEventType.ContentMoved,\n DesignUpdatedEventType.ContentModified,\n DesignUpdatedEventType.ColumnModified,\n DesignUpdatedEventType.RowMoved,\n DesignUpdatedEventType.RowModified,\n DesignUpdatedEventType.BodyModified,\n];\n\nconst eventsNotAddingTools: DesignUpdatedEventType[] = [\n ...eventsNotChangingToolsList,\n DesignUpdatedEventType.ContentRemoved,\n DesignUpdatedEventType.ColumnRemoved,\n DesignUpdatedEventType.RowRemoved,\n];\n\nexport class UnlayerStore {\n readonly unlayerRef: UnlayerRef;\n private readonly schemaDummyData: Record<string, unknown>;\n private readonly dateSchemaFieldKeys: Set<string>;\n\n private editor: Unlayer | undefined;\n private isInit = false;\n private iframe?: HTMLIFrameElement;\n private hasDesign = false;\n private hasCoreLoaded = false;\n private hasToolsRegistered = false;\n private toolsReadyWatchdogId?: number;\n private formFieldsByFormId: Record<number, FormFieldInfo[]> = {};\n private formFieldSamples: Record<string, unknown> = {};\n private isEditorReady = false;\n private isMergeTagsApplied = false;\n private mergeTagsConfig?: UnlayerMergeTagsConfig;\n\n private onMessageCB?: (type: string, data: any) => void;\n private onChangeCB?: (info: UnlayerDesignChangeInfo) => void;\n private onSnapshotSaveCB?: (snapshot: UnlayerEditorTwin) => void;\n private onReadyCB?: () => void;\n private onImageCB?: (file: File) => Promise<{ url: string }>;\n private onErrorCB?: (title: string, description?: string) => void;\n private onFormSelectCB?: (formId: number) => void;\n private onCalcFieldOpenCB?: (usedFormIds: number[]) => void;\n private onCalcFieldSelectCB?: (fieldKeys: string[]) => void;\n\n constructor(readonly props: CreateUnlayerEditorProps) {\n const schemaData = this.props.schema ? schemaBuildMap(this.props.schema) : undefined;\n this.schemaDummyData = (schemaData?.dummyData ?? {}) as Record<string, unknown>;\n this.dateSchemaFieldKeys = new Set(\n Object.values(schemaData?.map ?? {})\n .filter(field => field.isValue && schemaIsDate(field.node))\n .map(field => field.fullKey),\n );\n\n this.props.eSignFieldTypes = [\n 'Signature',\n 'Initials',\n 'Date Signed',\n 'Date Signed Offset',\n 'Full Name',\n ];\n\n this.unlayerRef = {\n loadDesign: design => {\n this.editor?.loadDesign(design);\n },\n saveDesign: cb => {\n this.editor?.saveDesign(design => {\n unlayerToolsNormalizeESignOffsets(design);\n cb(design);\n });\n },\n exportHtml: cb => {\n this.editor?.exportHtml(data => {\n const result = ensureChunksFonts(data);\n unlayerToolsNormalizeESignOffsets(result?.design);\n result.demoData = this.buildCalculatedFieldDemoData(result.design);\n cb(result);\n });\n },\n sendFormList: forms => {\n this.sendFormList(forms);\n },\n sendFormFields: (formId, fields) => {\n this.sendFormFields(formId, fields);\n },\n sendCalcFieldLabels: labels => {\n this.sendCalcFieldLabels(labels);\n },\n setMergeTags: tags => {\n this.setMergeTags(tags);\n },\n };\n }\n\n init = async (container: HTMLDivElement) => {\n if (this.isInit) {\n return;\n }\n\n this.isInit = true;\n\n try {\n setTimeout(() => window.addEventListener('message', this.onPostMessage));\n\n await loadScript(defaultScriptUrl);\n\n if (!(window as any).unlayer) {\n throw new Error('Unlayer embed script loaded but window.unlayer is missing');\n }\n\n this.editor = createUnlayerEditor(container, this.props);\n // The host may already have pushed a newer set through `setMergeTags`; keep it.\n this.mergeTagsConfig ??= toUnlayerMergeTags(this.props.mergeTags);\n this.editor.addEventListener('editor:ready', this.onEditorReady);\n this.editor.addEventListener('design:loaded', this.onDesignLoaded);\n this.editor.addEventListener('design:updated', this.onDesignUpdated);\n this.editor.registerCallback('image', this.uploadImage);\n\n this.iframe = container.querySelector(`iframe`) ?? undefined;\n\n if (!this.iframe) {\n logUnlayerError('Unlayer iframe was not created after createEditor');\n }\n\n this.startToolsReadyWatchdog();\n } catch (error: unknown) {\n this.isInit = false;\n this.clearToolsReadyWatchdog();\n logUnlayerError('Failed to initialize Unlayer editor', error);\n throw error;\n }\n };\n\n destroy = () => {\n this.clearToolsReadyWatchdog();\n window.removeEventListener('message', this.onPostMessage);\n\n if (this.editor) {\n this.editor.removeEventListener('editor:ready', this.onEditorReady);\n this.editor.removeEventListener('design:loaded', this.onDesignLoaded);\n this.editor.removeEventListener('design:updated', this.onDesignUpdated);\n this.editor.unregisterCallback('image', this.uploadImage);\n\n this.editor = undefined;\n }\n };\n\n addTwin = (twin: UnlayerEditorTwin) => {\n this.props.toolTwins?.push(twin);\n this.sendMessage('--add-twin', JSON.parse(JSON.stringify(twin)));\n };\n\n setDesign = (design?: UnlayerDesignFormat) => {\n if (!this.editor) {\n return;\n }\n\n this.hasDesign = !!design;\n\n if (design) {\n this.editor.loadDesign(design);\n }\n };\n\n setOnChange = (onChange?: UnlayerStore['onChangeCB']) => {\n this.onChangeCB = onChange;\n };\n\n setOnSnapshotSave = (onSnapshotSave?: UnlayerStore['onSnapshotSaveCB']) => {\n this.onSnapshotSaveCB = onSnapshotSave;\n };\n\n setOnReady = (onReady?: UnlayerStore['onReadyCB']) => {\n this.onReadyCB = onReady;\n };\n\n setOnImage = (onImage?: UnlayerStore['onImageCB']) => {\n this.onImageCB = onImage;\n };\n\n setOnError = (onError?: UnlayerStore['onErrorCB']) => {\n this.onErrorCB = onError;\n };\n\n setOnMessage = (onMessage?: UnlayerStore['onMessageCB']) => {\n this.onMessageCB = onMessage;\n };\n\n setOnFormSelect = (onFormSelect?: UnlayerStore['onFormSelectCB']) => {\n this.onFormSelectCB = onFormSelect;\n };\n\n setOnCalcFieldOpen = (onCalcFieldOpen?: UnlayerStore['onCalcFieldOpenCB']) => {\n this.onCalcFieldOpenCB = onCalcFieldOpen;\n };\n\n setOnCalcFieldSelect = (onCalcFieldSelect?: UnlayerStore['onCalcFieldSelectCB']) => {\n this.onCalcFieldSelectCB = onCalcFieldSelect;\n };\n\n sendFormList = (forms: FormInfo[]) => {\n this.sendMessage('--form-list', { forms });\n };\n\n sendFormFields = (formId: number, fields: FormFieldInfo[]) => {\n this.formFieldsByFormId[formId] = fields;\n this.updateFormFieldSamples(formId, fields);\n this.sendMessage('--form-fields', { formId, fields });\n };\n\n sendCalcFieldLabels = (labels: Record<string, string>) => {\n this.sendMessage('--calc-field-labels', { labels });\n };\n\n /**\n * Replaces the editor's merge tag menu. Nested groups passed to `createEditor` stop DTE\n * custom tools from registering, so init only carries the flat shape and the grouped\n * config is applied here once the editor is ready. A call before that (including the\n * initial props) is parked; a later call replaces it. A failed apply is retried on the\n * next `design:loaded`.\n */\n setMergeTags = (tags: UnlayerEditorMergeTagInfo[] | undefined) => {\n this.mergeTagsConfig = toUnlayerMergeTags(tags);\n this.isMergeTagsApplied = false;\n this.applyMergeTags();\n };\n\n private applyMergeTags = () => {\n if (\n !this.editor ||\n !this.isEditorReady ||\n this.isMergeTagsApplied ||\n !this.mergeTagsConfig\n ) {\n return;\n }\n\n try {\n this.editor.setMergeTags(this.mergeTagsConfig);\n this.isMergeTagsApplied = true;\n } catch (error: unknown) {\n logUnlayerError('Failed to apply merge tags', error);\n }\n };\n\n private onEditorReady = () => {\n this.isEditorReady = true;\n this.applyMergeTags();\n };\n\n private onDesignLoaded = () => {\n // A loaded design means the editor is up even if `editor:ready` never reached us.\n this.onEditorReady();\n\n if (!this.hasDesign) {\n this.hasDesign = true;\n this.editor?.setBodyValues({\n backgroundColor: 'rgba(0,0,0,0)',\n contentWidth: '100%',\n });\n }\n };\n\n private onDesignUpdated = (event: EventDesignUpdated) => {\n const isToolAdded = !eventsNotAddingTools.includes(event.type);\n const isToolsListChanged = !eventsNotChangingToolsList.includes(event.type);\n\n if (isToolAdded) {\n this.editor?.exportHtml(data => {\n let hasChanges = false;\n\n unlayerToolsIterate(data.design, tool => {\n const realTool = tool.slug\n ? unlayerToolsParseTwinKey(tool.slug ?? '')\n : undefined;\n\n if (realTool) {\n hasChanges = true;\n\n if (tool.slug) {\n delete data.design.counters[`u_content_custom_${tool.slug}`];\n delete tool.values._meta.htmlID;\n }\n\n tool.type = realTool.type;\n tool.slug = realTool.slug;\n }\n });\n\n // Duplicated contents/rows carry the original's instance GUIDs; give copies new ones.\n if (unlayerToolsDedupeInstanceIds(data.design, event.item?.values?._meta?.htmlID)) {\n hasChanges = true;\n }\n\n if (hasChanges) {\n this.setDesign(data.design);\n }\n\n this.onChangeCB?.({ isToolsListChanged });\n });\n } else {\n this.onChangeCB?.({ isToolsListChanged });\n }\n };\n\n private onPostMessage = (e: MessageEvent) => {\n if (!e.data?.['-dte-message-from']) {\n return;\n }\n\n const type = e.data?.['-dte-message-from']?.type;\n const data = e.data?.['-dte-message-from']?.data;\n\n if (!type) {\n return;\n }\n\n if (type === '--ready' || type === '--registered') {\n this.hasToolsRegistered = true;\n this.clearToolsReadyWatchdog();\n this.onReadyCB?.();\n } else if (type === '--core-loaded') {\n this.hasCoreLoaded = true;\n const configData: UnlayerEventConfig = {\n dummyData: this.props.dummyData,\n schema: this.props.schema,\n generics: this.props.generics,\n genericConfigMode: this.props.genericConfigMode,\n isSnapshotMode: this.props.isSnapshotMode,\n holidays: this.props.holidays,\n conditionalRulesEnabled:\n !!this.props.displayConditions || !!this.props.onConditionalsOpen,\n };\n\n this.sendMessage('--config', JSON.parse(JSON.stringify(configData)));\n } else if (type === '--form-select') {\n this.onFormSelectCB?.(data?.formId);\n } else if (type === '--calc-field-open') {\n this.onCalcFieldOpenCB?.(data?.usedFormIds ?? []);\n } else if (type === '--esign-offset-open') {\n this.openESignOffsetRules(data);\n } else if (type === '--calc-field-select') {\n if (this.onCalcFieldSelectCB) {\n this.onCalcFieldSelectCB(data?.fieldKeys ?? []);\n } else {\n this.sendCalcFieldLabels({});\n }\n } else if (type === '--data-loaded') {\n const data: UnlayerEventRegister = {\n customTools: this.props.tools.map(tool => ({ key: tool.key })),\n toolTwins: this.props.toolTwins,\n eSignRecipients: this.props.eSignRecipients,\n eSignFieldTypes: this.props.eSignFieldTypes,\n units: this.props.units?.map(unit => ({\n ...unit,\n values: {\n ...unit.values,\n adminConfig: undefined,\n },\n })),\n };\n\n this.sendMessage('--register', JSON.parse(JSON.stringify(data)));\n } else if (type === '--save-snapshot') {\n this.editor?.exportHtml(template => {\n unlayerToolsIterate(template.design, tool => {\n if (tool.values?.twin?.id === data.id) {\n if (!tool.slug) {\n return;\n }\n\n this.onSnapshotSaveCB?.({\n title: '',\n tool: tool.slug,\n values: tool.values,\n });\n return false;\n }\n });\n });\n }\n\n this.onMessageCB?.(type, data);\n };\n\n private openESignOffsetRules = (data?: Partial<UnlayerEventESignOffset>) => {\n const requestId = data?.requestId;\n\n if (!requestId) {\n return;\n }\n\n emitESignOffsetRequest({\n value: normalizeESignOffsetSettings(data.value),\n done: value => {\n const result: UnlayerEventESignOffset = { requestId, value };\n this.sendMessage('--esign-offset-result', JSON.parse(JSON.stringify(result)));\n },\n });\n };\n\n private updateFormFieldSamples = (formId: number, fields: FormFieldInfo[]) => {\n fields.forEach((field, index) => {\n const normalizedFieldId = String(field.id ?? '').replaceAll('-', '');\n if (!normalizedFieldId) {\n return;\n }\n\n const sampleValue = getFormFieldSampleValue(field, index);\n setByPath(\n this.formFieldSamples,\n `__submission_fields.${formId}.${normalizedFieldId}`,\n sampleValue,\n );\n this.formFieldSamples[`${FORM_FIELD_DATA_POINT_PREFIX}${normalizedFieldId}`] =\n sampleValue;\n });\n };\n\n private collectCalculatedFieldKeys = (design?: UnlayerDesignFormat): Set<string> => {\n const keys = new Set<string>();\n\n if (!design) {\n return keys;\n }\n\n unlayerToolsIterate(design, tool => {\n const calc = tool.values?.calculation;\n if (!calc || typeof calc !== 'object') {\n return;\n }\n\n if (typeof calc.expression === 'string') {\n for (const key of tokenizeFormulaFields(calc.expression)) {\n keys.add(key);\n }\n }\n\n if (calc.fieldLabels && typeof calc.fieldLabels === 'object') {\n Object.keys(calc.fieldLabels).forEach(key => keys.add(key));\n }\n });\n\n return keys;\n };\n\n private resolveDemoValue = (\n key: string,\n fallbackIndex: number,\n sourceData: Record<string, unknown>,\n ): unknown => {\n const parsedFormField = parseFormFieldKey(key);\n if (parsedFormField) {\n const normalizedFieldId = parsedFormField.fieldId;\n const formFields = this.formFieldsByFormId[parsedFormField.formId] ?? [];\n const fieldIndex = formFields.findIndex(\n field => String(field.id ?? '').replaceAll('-', '') === normalizedFieldId,\n );\n const field = fieldIndex >= 0 ? formFields[fieldIndex] : undefined;\n const sample = field\n ? getFormFieldSampleValue(field, fieldIndex)\n : getByPath(\n this.formFieldSamples,\n `__submission_fields.${parsedFormField.formId}.${normalizedFieldId}`,\n );\n\n if (sample !== undefined) {\n return sample;\n }\n\n return this.dateSchemaFieldKeys.has(key) ? '2026-01-15' : 44 + fallbackIndex;\n }\n\n const existing = getByPath(sourceData, key);\n if (existing !== undefined) {\n return existing;\n }\n\n if (this.dateSchemaFieldKeys.has(key)) {\n return '2026-01-15';\n }\n\n return 44 + fallbackIndex;\n };\n\n private buildCalculatedFieldDemoData = (\n design?: UnlayerDesignFormat,\n ): Record<string, unknown> => {\n const demoData: Record<string, unknown> = {};\n const usedKeys = Array.from(this.collectCalculatedFieldKeys(design));\n const sourceData = deepMerge(\n this.schemaDummyData,\n this.props.dummyData,\n this.formFieldSamples,\n );\n\n usedKeys.forEach((key, index) => {\n const value = this.resolveDemoValue(key, index, sourceData);\n setByPath(demoData, key, value);\n });\n\n return demoData;\n };\n\n private sendMessage = (type: string, data?: any) => {\n this.iframe?.contentWindow?.postMessage(\n {\n '-dte-message-to': {\n type,\n data,\n },\n },\n '*',\n );\n };\n\n private uploadImage = async (\n data: { attachments: File[] },\n done: (result: { progress: number; url?: string }) => void,\n ) => {\n if (!this.onImageCB) {\n done({ progress: 100 });\n throw new Error('image upload is not implemented');\n }\n\n if (!data.attachments?.length) {\n return;\n }\n\n const file = data.attachments[0];\n\n const res = await this.validateImage(file, {\n ...defaultImageValidation,\n ...(this.props.imageValidation ?? {}),\n });\n\n if (!res.isValid) {\n logUnlayerError(`Image validation failed: ${res.title}`, res.description);\n this.onErrorCB?.(res.title, res.description);\n return;\n }\n\n done({ progress: 0 });\n\n try {\n const { url } = await this.onImageCB(file);\n done({ progress: 100, url });\n } catch (error: unknown) {\n logUnlayerError('Image upload failed', error);\n this.onErrorCB?.(\n 'Image upload failed',\n 'Something went wrong while uploading the image. Please try again or select another image.',\n );\n done({ progress: 100 });\n }\n };\n\n private startToolsReadyWatchdog = () => {\n this.clearToolsReadyWatchdog();\n this.toolsReadyWatchdogId = window.setTimeout(() => {\n if (this.hasToolsRegistered) {\n return;\n }\n\n logUnlayerError(\n 'Unlayer custom tools did not finish loading. customJS may not have run, or tool registration stalled.',\n {\n hasCoreLoaded: this.hasCoreLoaded,\n hasToolsRegistered: this.hasToolsRegistered,\n },\n );\n this.onErrorCB?.(\n 'Editor failed to load custom tools',\n 'Unlayer custom tools did not finish loading. Check the browser console for [dte-unlayer] details.',\n );\n }, UNLAYER_TOOLS_READY_TIMEOUT_MS);\n };\n\n private clearToolsReadyWatchdog = () => {\n if (this.toolsReadyWatchdogId === undefined) {\n return;\n }\n\n window.clearTimeout(this.toolsReadyWatchdogId);\n this.toolsReadyWatchdogId = undefined;\n };\n\n private validateImage = async (\n file: File,\n imageValidation: { maxFileSize: number; maxWidth: number; maxHeight: number },\n ): Promise<{ isValid: boolean; title: string; description: string }> => {\n const { maxFileSize, maxHeight, maxWidth } = imageValidation;\n\n if (file.size > maxFileSize) {\n const maxSizeMB = (maxFileSize / 1024 / 1024).toFixed(2);\n const fileSizeMB = (file.size / 1024 / 1024).toFixed(2);\n return {\n isValid: false,\n title: 'Image size limit reached',\n description: `This image is ${fileSizeMB}MB, which is above the ${maxSizeMB}MB limit. Please upload a smaller file to continue.`,\n };\n }\n\n return new Promise(resolve => {\n const img = new Image();\n const objectUrl = URL.createObjectURL(file);\n\n img.onload = () => {\n URL.revokeObjectURL(objectUrl);\n const { height, width } = img;\n\n if (width > maxWidth || height > maxHeight) {\n resolve({\n isValid: false,\n title: 'Dimension limit reached',\n description: `These image dimensions (${width}x${height}px) exceed the ${maxWidth}x${maxHeight}px limit. Please resize the image and try again.`,\n });\n } else {\n resolve({ isValid: true, title: '', description: '' });\n }\n };\n\n img.onerror = () => {\n URL.revokeObjectURL(objectUrl);\n resolve({\n isValid: false,\n title: 'The image is broken',\n description:\n 'Looks like this image isn’t valid. Please choose another image and try again.',\n });\n };\n\n img.src = objectUrl;\n });\n };\n}\n"],"names":["emitESignOffsetRequest","loadScript","logUnlayerError","toUnlayerMergeTags","defaultImageValidation","normalizeESignOffsetSettings","unlayerSupportedFonts","getFormFieldSampleValue","parseFormFieldKey","schemaBuildMap","schemaIsDate","unlayerToolsParseTwinKey","unlayerToolsDedupeInstanceIds","unlayerToolsIterate","unlayerToolsNormalizeESignOffsets","createUnlayerEditor","DesignUpdatedEventType","defaultScriptUrl","UNLAYER_TOOLS_READY_TIMEOUT_MS","normalizeFontToken","font","replace","split","trim","toLowerCase","getDesignFontTokens","value","out","Array","isArray","item","key","fieldValue","Object","entries","add","fontFamilyValue","label","ensureChunksFonts","data","chunks","existingFonts","fonts","existingLabels","Set","map","f","usedFontTokens","design","html","labelToken","valueToken","isUsedInDesign","has","isUsedInHtml","some","token","includes","push","FORM_FIELD_DATA_POINT_PREFIX","getByPath","path","undefined","reduce","current","part","isPlainObject","deepMerge","sources","source","setByPath","target","parts","length","node","i","tokenizeFormulaFields","expression","regex","match","eventsNotChangingToolsList","ContentMoved","ContentModified","ColumnModified","RowMoved","RowModified","BodyModified","eventsNotAddingTools","ContentRemoved","ColumnRemoved","RowRemoved","UnlayerStore","props","unlayerRef","schemaDummyData","dateSchemaFieldKeys","editor","isInit","iframe","hasDesign","hasCoreLoaded","hasToolsRegistered","toolsReadyWatchdogId","formFieldsByFormId","formFieldSamples","isEditorReady","isMergeTagsApplied","mergeTagsConfig","onMessageCB","onChangeCB","onSnapshotSaveCB","onReadyCB","onImageCB","onErrorCB","onFormSelectCB","onCalcFieldOpenCB","onCalcFieldSelectCB","init","destroy","addTwin","setDesign","setOnChange","setOnSnapshotSave","setOnReady","setOnImage","setOnError","setOnMessage","setOnFormSelect","setOnCalcFieldOpen","setOnCalcFieldSelect","sendFormList","sendFormFields","sendCalcFieldLabels","setMergeTags","applyMergeTags","onEditorReady","onDesignLoaded","onDesignUpdated","onPostMessage","openESignOffsetRules","updateFormFieldSamples","collectCalculatedFieldKeys","resolveDemoValue","buildCalculatedFieldDemoData","sendMessage","uploadImage","startToolsReadyWatchdog","clearToolsReadyWatchdog","validateImage","container","setTimeout","window","addEventListener","unlayer","Error","mergeTags","registerCallback","querySelector","error","removeEventListener","unregisterCallback","twin","toolTwins","JSON","parse","stringify","loadDesign","onChange","onSnapshotSave","onReady","onImage","onError","onMessage","onFormSelect","onCalcFieldOpen","onCalcFieldSelect","forms","formId","fields","labels","tags","setBodyValues","backgroundColor","contentWidth","event","isToolAdded","type","isToolsListChanged","exportHtml","hasChanges","tool","realTool","slug","counters","values","_meta","htmlID","e","configData","dummyData","schema","generics","genericConfigMode","isSnapshotMode","holidays","conditionalRulesEnabled","displayConditions","onConditionalsOpen","usedFormIds","fieldKeys","customTools","tools","eSignRecipients","eSignFieldTypes","units","unit","adminConfig","template","id","title","requestId","done","result","forEach","field","index","normalizedFieldId","String","replaceAll","sampleValue","keys","calc","calculation","fieldLabels","fallbackIndex","sourceData","parsedFormField","fieldId","formFields","fieldIndex","findIndex","sample","existing","demoData","usedKeys","from","contentWindow","postMessage","progress","attachments","file","res","imageValidation","isValid","description","url","clearTimeout","maxFileSize","maxHeight","maxWidth","size","maxSizeMB","toFixed","fileSizeMB","Promise","resolve","img","Image","objectUrl","URL","createObjectURL","onload","revokeObjectURL","height","width","onerror","src","schemaData","filter","isValue","fullKey","saveDesign","cb"],"mappings":"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"}
package/dist/tools.d.ts CHANGED
@@ -18,6 +18,24 @@ export declare const unlayerToolsCustomStat: (design: UnlayerDesignFormat, tools
18
18
  isRequired?: boolean;
19
19
  }[]) => UnlayerCustomToolsStat;
20
20
  export declare const unlayerToolsListCustom: (design: UnlayerDesignFormat) => UnlayerDesignCustomTool[];
21
+ /**
22
+ * Makes `values.id` unique across all instance-id tools (see `INSTANCE_ID_TOOL_SLUGS`)
23
+ * in the design. Duplicating content/rows in Unlayer copies the values verbatim, so
24
+ * every copy ends up with the original's GUID; this gives each copy a fresh one.
25
+ *
26
+ * Of the contents sharing an id, the one that keeps it is the first in document
27
+ * order that is not the just-added content (`addedHtmlID`), so the original always
28
+ * wins over its duplicate regardless of where the copy was inserted.
29
+ *
30
+ * @returns `true` when at least one id was regenerated.
31
+ */
32
+ export declare const unlayerToolsDedupeInstanceIds: (design: UnlayerDesignFormat, addedHtmlID?: string) => boolean;
33
+ /**
34
+ * Gives every "Date Signed Offset" e-sign placement valid settings. Unlayer never applies an
35
+ * option's default to placements saved before the option existed, and the backend rejects a
36
+ * design whose dateSignedOffset recipient has no settings.
37
+ */
38
+ export declare const unlayerToolsNormalizeESignOffsets: (design: UnlayerDesignFormat) => boolean;
21
39
  export declare const unlayerToolsBuildDesign: (tools: UnlayerDesignTool[]) => UnlayerDesignFormat;
22
40
  export declare const unlayerUnitsGetIdFromValues: (values?: any) => string | undefined;
23
41
  export declare const unlayerUnitsGetTitleFromValues: (values?: any) => string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACR,uBAAuB,EACvB,mBAAmB,EACnB,iBAAiB,EACjB,uBAAuB,EAC1B,MAAM,qBAAqB,CAAC;AAG7B,eAAO,MAAM,uBAAuB,QAAO,mBAiFzC,CAAC;AAGH,eAAO,MAAM,mBAAmB,GAC5B,QAAQ,mBAAmB,EAC3B,IAAI,CAAC,IAAI,EAAE,iBAAiB,KAAK,OAAO,GAAG,SAAS,GAAG,IAAI,SAW9D,CAAC;AAEF,eAAO,MAAM,yBAAyB,GAClC,QAAQ,mBAAmB,EAC3B,IAAI,CAAC,IAAI,EAAE,uBAAuB,KAAK,OAAO,GAAG,SAAS,GAAG,IAAI,SAOpE,CAAC;AAEF,eAAO,MAAM,0BAA0B,GAAI,QAAQ,mBAAmB,KAAG,MAAM,EAE9E,CAAC;AAEF,eAAO,MAAM,gBAAgB,GACzB,QAAQ,mBAAmB,EAC3B,IAAI,CAAC,IAAI,EAAE,iBAAiB,KAAK,OAAO,GAAG,IAAI,KAChD,iBAAiB,GAAG,SAWtB,CAAC;AAEF,MAAM,WAAW,sBAAsB;IACnC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,eAAO,MAAM,sBAAsB,GAC/B,QAAQ,mBAAmB,EAC3B,QAAQ;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,EAAE,EAC/C,QAAQ;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,EAAE,KAChE,sBAuCF,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,QAAQ,mBAAmB,KAAG,uBAAuB,EAQ3F,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,OAAO,iBAAiB,EAAE,KAAG,mBAKpE,CAAC;AAEF,eAAO,MAAM,2BAA2B,GAAI,SAAS,GAAG,KAAG,MAAM,GAAG,SACN,CAAC;AAC/D,eAAO,MAAM,8BAA8B,GAAI,SAAS,GAAG,KAAG,MAAM,GAAG,SACX,CAAC;AAE7D,eAAO,MAAM,iBAAiB,GAAI,MAAM,iBAAiB,KAAG,MAAM,GAAG,SACzB,CAAC;AAC7C,eAAO,MAAM,oBAAoB,GAAI,MAAM,iBAAiB,KAAG,MAAM,GAAG,SACzB,CAAC;AAEhD,eAAO,MAAM,iCAAiC,GAAI,OAAO,uBAAuB,EAAE,KAAG,MAAM,EAGtF,CAAC;AAEN,eAAO,MAAM,yBAAyB,GAAI,OAAO,uBAAuB,EAAE,KAAG,MAY5E,CAAC;AAEF,eAAO,MAAM,2BAA2B,QAAO,MAgB9C,CAAC"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EACR,uBAAuB,EACvB,mBAAmB,EACnB,iBAAiB,EACjB,uBAAuB,EAC1B,MAAM,qBAAqB,CAAC;AAG7B,eAAO,MAAM,uBAAuB,QAAO,mBAiFzC,CAAC;AAGH,eAAO,MAAM,mBAAmB,GAC5B,QAAQ,mBAAmB,EAC3B,IAAI,CAAC,IAAI,EAAE,iBAAiB,KAAK,OAAO,GAAG,SAAS,GAAG,IAAI,SAW9D,CAAC;AAEF,eAAO,MAAM,yBAAyB,GAClC,QAAQ,mBAAmB,EAC3B,IAAI,CAAC,IAAI,EAAE,uBAAuB,KAAK,OAAO,GAAG,SAAS,GAAG,IAAI,SAOpE,CAAC;AAEF,eAAO,MAAM,0BAA0B,GAAI,QAAQ,mBAAmB,KAAG,MAAM,EAE9E,CAAC;AAEF,eAAO,MAAM,gBAAgB,GACzB,QAAQ,mBAAmB,EAC3B,IAAI,CAAC,IAAI,EAAE,iBAAiB,KAAK,OAAO,GAAG,IAAI,KAChD,iBAAiB,GAAG,SAWtB,CAAC;AAEF,MAAM,WAAW,sBAAsB;IACnC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,eAAO,MAAM,sBAAsB,GAC/B,QAAQ,mBAAmB,EAC3B,QAAQ;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,EAAE,EAC/C,QAAQ;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,EAAE,KAChE,sBAuCF,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,QAAQ,mBAAmB,KAAG,uBAAuB,EAQ3F,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,6BAA6B,GACtC,QAAQ,mBAAmB,EAC3B,cAAc,MAAM,KACrB,OAkCF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,iCAAiC,GAAI,QAAQ,mBAAmB,KAAG,OAqB/E,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,OAAO,iBAAiB,EAAE,KAAG,mBAKpE,CAAC;AAEF,eAAO,MAAM,2BAA2B,GAAI,SAAS,GAAG,KAAG,MAAM,GAAG,SACN,CAAC;AAC/D,eAAO,MAAM,8BAA8B,GAAI,SAAS,GAAG,KAAG,MAAM,GAAG,SACX,CAAC;AAE7D,eAAO,MAAM,iBAAiB,GAAI,MAAM,iBAAiB,KAAG,MAAM,GAAG,SACzB,CAAC;AAC7C,eAAO,MAAM,oBAAoB,GAAI,MAAM,iBAAiB,KAAG,MAAM,GAAG,SACzB,CAAC;AAEhD,eAAO,MAAM,iCAAiC,GAAI,OAAO,uBAAuB,EAAE,KAAG,MAAM,EAGtF,CAAC;AAEN,eAAO,MAAM,yBAAyB,GAAI,OAAO,uBAAuB,EAAE,KAAG,MAY5E,CAAC;AAEF,eAAO,MAAM,2BAA2B,QAAO,MAgB9C,CAAC"}
package/dist/tools.js CHANGED
@@ -1,5 +1,7 @@
1
- import { constGenericsEditor } from './shared/const';
1
+ import { constGenericsEditor, E_SIGN_DATE_SIGNED_OFFSET_TYPE, E_SIGN_DATE_SIGNED_OFFSET_VALUES_KEY, E_SIGN_TOOL_SLUG } from './shared/const';
2
+ import { isESignOffsetSettings, normalizeESignOffsetSettings } from './shared/e-sign-offset';
2
3
  import { editIconSvg } from './shared/edit-icon';
4
+ import { generateInstanceId, INSTANCE_ID_TOOL_SLUGS } from './shared/instance-id';
3
5
  import { unlayerToolsParseUnitKey } from './shared/tools';
4
6
  import { versions } from './unlayer';
5
7
  /* eslint-disable @typescript-eslint/naming-convention */ export const unlayerGetDefaultDesign = ()=>({
@@ -154,6 +156,71 @@ export const unlayerToolsListCustom = (design)=>{
154
156
  });
155
157
  return tools;
156
158
  };
159
+ /**
160
+ * Makes `values.id` unique across all instance-id tools (see `INSTANCE_ID_TOOL_SLUGS`)
161
+ * in the design. Duplicating content/rows in Unlayer copies the values verbatim, so
162
+ * every copy ends up with the original's GUID; this gives each copy a fresh one.
163
+ *
164
+ * Of the contents sharing an id, the one that keeps it is the first in document
165
+ * order that is not the just-added content (`addedHtmlID`), so the original always
166
+ * wins over its duplicate regardless of where the copy was inserted.
167
+ *
168
+ * @returns `true` when at least one id was regenerated.
169
+ */ export const unlayerToolsDedupeInstanceIds = (design, addedHtmlID)=>{
170
+ const byId = new Map();
171
+ unlayerToolsIterateCustom(design, (tool)=>{
172
+ var _tool_values;
173
+ const id = (_tool_values = tool.values) === null || _tool_values === void 0 ? void 0 : _tool_values.id;
174
+ if (INSTANCE_ID_TOOL_SLUGS.includes(tool.slug) && typeof id === 'string' && id) {
175
+ var _byId_get;
176
+ const key = `${tool.slug}|${id}`;
177
+ byId.set(key, [
178
+ ...(_byId_get = byId.get(key)) !== null && _byId_get !== void 0 ? _byId_get : [],
179
+ tool
180
+ ]);
181
+ }
182
+ });
183
+ let hasChanges = false;
184
+ byId.forEach((tools)=>{
185
+ var _tools_find;
186
+ if (tools.length < 2) {
187
+ return;
188
+ }
189
+ const keeper = (_tools_find = tools.find((tool)=>{
190
+ var _tool_values__meta, _tool_values;
191
+ return ((_tool_values = tool.values) === null || _tool_values === void 0 ? void 0 : (_tool_values__meta = _tool_values._meta) === null || _tool_values__meta === void 0 ? void 0 : _tool_values__meta.htmlID) !== addedHtmlID;
192
+ })) !== null && _tools_find !== void 0 ? _tools_find : tools[0];
193
+ for (const tool of tools){
194
+ if (tool !== keeper) {
195
+ /*
196
+ * If no id can be generated the copy is left without one, which is still
197
+ * better than two instances bound to the same image.
198
+ */ tool.values.id = generateInstanceId();
199
+ hasChanges = true;
200
+ }
201
+ }
202
+ });
203
+ return hasChanges;
204
+ };
205
+ /**
206
+ * Gives every "Date Signed Offset" e-sign placement valid settings. Unlayer never applies an
207
+ * option's default to placements saved before the option existed, and the backend rejects a
208
+ * design whose dateSignedOffset recipient has no settings.
209
+ */ export const unlayerToolsNormalizeESignOffsets = (design)=>{
210
+ let hasChanges = false;
211
+ unlayerToolsIterateCustom(design, (tool)=>{
212
+ var _tool_values;
213
+ if (tool.slug !== E_SIGN_TOOL_SLUG || ((_tool_values = tool.values) === null || _tool_values === void 0 ? void 0 : _tool_values.eSignFieldType) !== E_SIGN_DATE_SIGNED_OFFSET_TYPE) {
214
+ return;
215
+ }
216
+ const settings = tool.values[E_SIGN_DATE_SIGNED_OFFSET_VALUES_KEY];
217
+ if (!isESignOffsetSettings(settings)) {
218
+ tool.values[E_SIGN_DATE_SIGNED_OFFSET_VALUES_KEY] = normalizeESignOffsetSettings(settings);
219
+ hasChanges = true;
220
+ }
221
+ });
222
+ return hasChanges;
223
+ };
157
224
  export const unlayerToolsBuildDesign = (tools)=>{
158
225
  const design = unlayerGetDefaultDesign();
159
226
  design.body.rows[0].columns[0].contents = tools;