@useinsider/guido 1.0.3-beta.e9bec65 → 1.0.3-beta.ea69f4a

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 (161) hide show
  1. package/README.md +0 -3
  2. package/dist/components/organisms/onboarding/ItemsOnboarding.vue.js +21 -0
  3. package/dist/components/organisms/onboarding/ItemsOnboarding.vue2.js +99 -0
  4. package/dist/components/organisms/onboarding/OnboardingWrapper.vue2.js +20 -18
  5. package/dist/composables/useActionsApi.js +33 -24
  6. package/dist/composables/useBlocksConfig.js +1 -2
  7. package/dist/composables/useHtmlCompiler.js +15 -13
  8. package/dist/composables/useHtmlValidator.js +36 -35
  9. package/dist/composables/useStripo.js +58 -52
  10. package/dist/composables/useTimerClone.js +67 -0
  11. package/dist/config/compiler/itemsCompilerRules.js +14 -0
  12. package/dist/enums/extensions/recommendationBlock.js +2 -2
  13. package/dist/enums/onboarding.js +7 -3
  14. package/dist/extensions/Blocks/Checkbox/block.js +5 -2
  15. package/dist/extensions/Blocks/Checkbox/control.js +15 -14
  16. package/dist/extensions/Blocks/Checkbox/template.js +14 -9
  17. package/dist/extensions/Blocks/Items/block.js +67 -0
  18. package/dist/extensions/Blocks/Items/controls/button/link.js +68 -0
  19. package/dist/extensions/Blocks/Items/controls/cardComposition.js +193 -0
  20. package/dist/extensions/Blocks/Items/controls/image/link.js +68 -0
  21. package/dist/extensions/Blocks/Items/controls/index.js +217 -0
  22. package/dist/extensions/Blocks/Items/controls/name/trimming.js +70 -0
  23. package/dist/extensions/Blocks/Items/controls/price/currencyLocation.js +107 -0
  24. package/dist/extensions/Blocks/Items/controls/price/currencySymbol.js +123 -0
  25. package/dist/extensions/Blocks/Items/controls/price/formattedPrice.js +76 -0
  26. package/dist/extensions/Blocks/Items/controls/price/hideDiscount.js +61 -0
  27. package/dist/extensions/Blocks/Items/controls/settingsControl.js +312 -0
  28. package/dist/extensions/Blocks/Items/enums/controlEnums.js +5 -0
  29. package/dist/extensions/Blocks/Items/enums/productEnums.js +273 -0
  30. package/dist/extensions/Blocks/Items/enums/settingsEnums.js +76 -0
  31. package/dist/extensions/Blocks/Items/extension.js +19 -0
  32. package/dist/extensions/Blocks/Items/iconsRegistry.js +32 -0
  33. package/dist/extensions/Blocks/Items/items.css.js +23 -0
  34. package/dist/extensions/Blocks/Items/layouts/horizontal.html.js +62 -0
  35. package/dist/extensions/Blocks/Items/layouts/vertical.html.js +60 -0
  36. package/dist/extensions/Blocks/Items/settingsPanel.js +131 -0
  37. package/dist/extensions/Blocks/Items/store/items-block.js +71 -0
  38. package/dist/extensions/Blocks/Items/template.js +189 -0
  39. package/dist/extensions/Blocks/Items/utils/configBlockUtils.js +17 -0
  40. package/dist/extensions/Blocks/Items/utils/syncAttributeFromConfigBlock.js +28 -0
  41. package/dist/extensions/Blocks/Items/utils/syncAttributesFromConfigBlock.js +67 -0
  42. package/dist/extensions/Blocks/Items/utils/updateAttributes.js +44 -0
  43. package/dist/extensions/Blocks/RadioButton/block.js +5 -2
  44. package/dist/extensions/Blocks/RadioButton/control.js +18 -17
  45. package/dist/extensions/Blocks/RadioButton/template.js +18 -9
  46. package/dist/extensions/Blocks/Recommendation/iconsRegistry.js +43 -43
  47. package/dist/extensions/Blocks/Unsubscribe/block.js +27 -27
  48. package/dist/extensions/Blocks/common-control.js +174 -110
  49. package/dist/extensions/Blocks/controlFactories.js +223 -0
  50. package/dist/guido.css +1 -1
  51. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js +213 -168
  52. package/dist/node_modules/lodash-es/_DataView.js +6 -0
  53. package/dist/node_modules/lodash-es/_Promise.js +6 -0
  54. package/dist/node_modules/lodash-es/_Set.js +6 -0
  55. package/dist/node_modules/lodash-es/_SetCache.js +13 -0
  56. package/dist/node_modules/lodash-es/_WeakMap.js +6 -0
  57. package/dist/node_modules/lodash-es/_arrayFilter.js +10 -0
  58. package/dist/node_modules/lodash-es/_arrayLikeKeys.js +13 -12
  59. package/dist/node_modules/lodash-es/_arrayMap.js +8 -0
  60. package/dist/node_modules/lodash-es/_arrayPush.js +8 -0
  61. package/dist/node_modules/lodash-es/_arraySome.js +9 -0
  62. package/dist/node_modules/lodash-es/_baseEach.js +6 -0
  63. package/dist/node_modules/lodash-es/_baseFlatten.js +13 -0
  64. package/dist/node_modules/lodash-es/_baseForOwn.js +8 -0
  65. package/dist/node_modules/lodash-es/_baseGet.js +11 -0
  66. package/dist/node_modules/lodash-es/_baseGetAllKeys.js +9 -0
  67. package/dist/node_modules/lodash-es/_baseHasIn.js +6 -0
  68. package/dist/node_modules/lodash-es/_baseIsEqual.js +8 -0
  69. package/dist/node_modules/lodash-es/_baseIsEqualDeep.js +32 -0
  70. package/dist/node_modules/lodash-es/_baseIsMatch.js +29 -0
  71. package/dist/node_modules/lodash-es/_baseIteratee.js +11 -0
  72. package/dist/node_modules/lodash-es/_baseKeys.js +14 -0
  73. package/dist/node_modules/lodash-es/_baseMap.js +11 -0
  74. package/dist/node_modules/lodash-es/_baseMatches.js +12 -0
  75. package/dist/node_modules/lodash-es/_baseMatchesProperty.js +17 -0
  76. package/dist/node_modules/lodash-es/_baseProperty.js +8 -0
  77. package/dist/node_modules/lodash-es/_basePropertyDeep.js +9 -0
  78. package/dist/node_modules/lodash-es/_baseRange.js +9 -0
  79. package/dist/node_modules/lodash-es/_baseToString.js +18 -0
  80. package/dist/node_modules/lodash-es/_baseTrim.js +8 -0
  81. package/dist/node_modules/lodash-es/_cacheHas.js +6 -0
  82. package/dist/node_modules/lodash-es/_castPath.js +10 -0
  83. package/dist/node_modules/lodash-es/_createBaseEach.js +15 -0
  84. package/dist/node_modules/lodash-es/_createRange.js +11 -0
  85. package/dist/node_modules/lodash-es/_equalArrays.js +40 -0
  86. package/dist/node_modules/lodash-es/_equalByTag.js +45 -0
  87. package/dist/node_modules/lodash-es/_equalObjects.js +36 -0
  88. package/dist/node_modules/lodash-es/_getAllKeys.js +9 -0
  89. package/dist/node_modules/lodash-es/_getMatchData.js +12 -0
  90. package/dist/node_modules/lodash-es/_getSymbols.js +10 -0
  91. package/dist/node_modules/lodash-es/_getTag.js +28 -0
  92. package/dist/node_modules/lodash-es/_hasPath.js +19 -0
  93. package/dist/node_modules/lodash-es/_isFlattenable.js +10 -0
  94. package/dist/node_modules/lodash-es/_isKey.js +12 -0
  95. package/dist/node_modules/lodash-es/_isStrictComparable.js +7 -0
  96. package/dist/node_modules/lodash-es/_mapToArray.js +9 -0
  97. package/dist/node_modules/lodash-es/_matchesStrictComparable.js +8 -0
  98. package/dist/node_modules/lodash-es/_memoizeCapped.js +11 -0
  99. package/dist/node_modules/lodash-es/_nativeKeys.js +5 -0
  100. package/dist/node_modules/lodash-es/_setCacheAdd.js +7 -0
  101. package/dist/node_modules/lodash-es/_setCacheHas.js +6 -0
  102. package/dist/node_modules/lodash-es/_setToArray.js +9 -0
  103. package/dist/node_modules/lodash-es/_stringToPath.js +10 -0
  104. package/dist/node_modules/lodash-es/_toKey.js +10 -0
  105. package/dist/node_modules/lodash-es/_trimmedEndIndex.js +9 -0
  106. package/dist/node_modules/lodash-es/flatMap.js +8 -0
  107. package/dist/node_modules/lodash-es/get.js +8 -0
  108. package/dist/node_modules/lodash-es/hasIn.js +8 -0
  109. package/dist/node_modules/lodash-es/isSymbol.js +9 -0
  110. package/dist/node_modules/lodash-es/keys.js +9 -0
  111. package/dist/node_modules/lodash-es/keysIn.js +3 -3
  112. package/dist/node_modules/lodash-es/map.js +11 -0
  113. package/dist/node_modules/lodash-es/property.js +10 -0
  114. package/dist/node_modules/lodash-es/range.js +5 -0
  115. package/dist/node_modules/lodash-es/stubArray.js +6 -0
  116. package/dist/node_modules/lodash-es/toFinite.js +14 -0
  117. package/dist/node_modules/lodash-es/toNumber.js +22 -0
  118. package/dist/node_modules/lodash-es/toString.js +7 -0
  119. package/dist/package.json.js +1 -1
  120. package/dist/services/recommendationApi.js +13 -19
  121. package/dist/src/components/organisms/onboarding/ItemsOnboarding.vue.d.ts +2 -0
  122. package/dist/src/composables/useActionsApi.d.ts +1 -0
  123. package/dist/src/composables/useTimerClone.d.ts +5 -0
  124. package/dist/src/config/compiler/itemsCompilerRules.d.ts +2 -0
  125. package/dist/src/enums/onboarding.d.ts +4 -0
  126. package/dist/src/extensions/Blocks/Checkbox/block.d.ts +1 -0
  127. package/dist/src/extensions/Blocks/Checkbox/template.d.ts +1 -1
  128. package/dist/src/extensions/Blocks/Items/block.d.ts +27 -0
  129. package/dist/src/extensions/Blocks/Items/controls/button/link.d.ts +14 -0
  130. package/dist/src/extensions/Blocks/Items/controls/cardComposition.d.ts +33 -0
  131. package/dist/src/extensions/Blocks/Items/controls/image/link.d.ts +14 -0
  132. package/dist/src/extensions/Blocks/Items/controls/index.d.ts +501 -0
  133. package/dist/src/extensions/Blocks/Items/controls/name/trimming.d.ts +14 -0
  134. package/dist/src/extensions/Blocks/Items/controls/price/currencyLocation.d.ts +19 -0
  135. package/dist/src/extensions/Blocks/Items/controls/price/currencySymbol.d.ts +21 -0
  136. package/dist/src/extensions/Blocks/Items/controls/price/formattedPrice.d.ts +14 -0
  137. package/dist/src/extensions/Blocks/Items/controls/price/hideDiscount.d.ts +13 -0
  138. package/dist/src/extensions/Blocks/Items/controls/settingsControl.d.ts +48 -0
  139. package/dist/src/extensions/Blocks/Items/enums/controlEnums.d.ts +61 -0
  140. package/dist/src/extensions/Blocks/Items/enums/productEnums.d.ts +162 -0
  141. package/dist/src/extensions/Blocks/Items/enums/settingsEnums.d.ts +49 -0
  142. package/dist/src/extensions/Blocks/Items/extension.d.ts +2 -0
  143. package/dist/src/extensions/Blocks/Items/iconsRegistry.d.ts +4 -0
  144. package/dist/src/extensions/Blocks/Items/settingsPanel.d.ts +4 -0
  145. package/dist/src/extensions/Blocks/Items/store/items-block.d.ts +41 -0
  146. package/dist/src/extensions/Blocks/Items/template.d.ts +24 -0
  147. package/dist/src/extensions/Blocks/Items/utils/configBlockUtils.d.ts +23 -0
  148. package/dist/src/extensions/Blocks/Items/utils/syncAttributeFromConfigBlock.d.ts +32 -0
  149. package/dist/src/extensions/Blocks/Items/utils/syncAttributesFromConfigBlock.d.ts +44 -0
  150. package/dist/src/extensions/Blocks/Items/utils/updateAttributes.d.ts +8 -0
  151. package/dist/src/extensions/Blocks/RadioButton/block.d.ts +1 -0
  152. package/dist/src/extensions/Blocks/RadioButton/template.d.ts +1 -1
  153. package/dist/src/extensions/Blocks/common-control.d.ts +44 -7
  154. package/dist/src/extensions/Blocks/controlFactories.d.ts +312 -0
  155. package/dist/src/stores/onboarding.d.ts +334 -0
  156. package/dist/src/utils/pairProductVariables.d.ts +7 -0
  157. package/dist/static/styles/customEditorStyle.css.js +1 -1
  158. package/dist/stores/onboarding.js +20 -12
  159. package/dist/utils/genericUtil.js +16 -17
  160. package/dist/utils/pairProductVariables.js +136 -0
  161. package/package.json +3 -3
@@ -0,0 +1,67 @@
1
+ import { useToaster as I } from "./useToaster.js";
2
+ const M = () => {
3
+ const { handleError: d } = I(), a = (n) => /esd-timer-id="(\d+)"/.test(n), c = async (n, s) => {
4
+ try {
5
+ console.debug("[TIMER CLONE] Calling Stripo API to clone timers...");
6
+ const e = await fetch("https://plugins.stripo.email/api/v1/timers/clone", {
7
+ method: "POST",
8
+ headers: {
9
+ "ES-PLUGIN-AUTH": `Bearer ${s}`,
10
+ "Content-Type": "application/json"
11
+ },
12
+ body: JSON.stringify({ html: n })
13
+ });
14
+ if (console.debug("[TIMER CLONE] API response status:", e.status), !e.ok) {
15
+ const r = await e.text();
16
+ throw console.debug("[TIMER CLONE] API error:", r), new Error(`Stripo API error: ${e.status} ${e.statusText}`);
17
+ }
18
+ const t = await e.json();
19
+ return console.debug("[TIMER CLONE] Timers cloned successfully. Map:", t.timersMap), console.debug("[TIMER CLONE] Old HTML length:", n.length), console.debug("[TIMER CLONE] New HTML length:", t.html.length), t.html;
20
+ } catch (e) {
21
+ return console.debug("[TIMER CLONE] Error:", e), d(e, "Failed to clone timer IDs"), null;
22
+ }
23
+ };
24
+ return {
25
+ hasTimerBlocks: a,
26
+ cloneTimersInHtml: c,
27
+ updateTimersOnLoad: async (n) => {
28
+ var s, e, t, r, l, u;
29
+ try {
30
+ console.debug("[TIMER CLONE] Starting timer update on template load...");
31
+ const o = (e = (s = window.UIEditor) == null ? void 0 : s.getHtml) == null ? void 0 : e.call(s);
32
+ if (!o) {
33
+ console.debug("[TIMER CLONE] No HTML found, skipping timer update");
34
+ return;
35
+ }
36
+ const E = a(o);
37
+ if (console.debug("[TIMER CLONE] Has timer blocks?", E), !E)
38
+ return;
39
+ const T = o.match(/esd-timer-id="(\d+)"/g);
40
+ console.debug("[TIMER CLONE] Current timer IDs:", T), console.debug("[TIMER CLONE] Getting auth token...");
41
+ const p = await n();
42
+ if (!p) {
43
+ console.debug("[TIMER CLONE] No auth token available, skipping timer update");
44
+ return;
45
+ }
46
+ const i = await c(o, p);
47
+ if (!i) {
48
+ console.debug("[TIMER CLONE] API returned no updated HTML");
49
+ return;
50
+ }
51
+ if (i === o) {
52
+ console.debug("[TIMER CLONE] HTML unchanged, no update needed");
53
+ return;
54
+ }
55
+ const m = i.match(/esd-timer-id="(\d+)"/g);
56
+ console.debug("[TIMER CLONE] New timer IDs:", m);
57
+ const g = ((r = (t = window.UIEditor) == null ? void 0 : t.getCss) == null ? void 0 : r.call(t)) || "";
58
+ console.debug("[TIMER CLONE] Updating editor with new HTML..."), (u = (l = window.StripoEditorApi) == null ? void 0 : l.actionsApi) != null && u.updateHtmlAndCss ? (window.StripoEditorApi.actionsApi.updateHtmlAndCss(i, g), console.debug("[TIMER CLONE] ✅ Editor updated successfully!")) : console.debug("[TIMER CLONE] updateHtmlAndCss method not available");
59
+ } catch (o) {
60
+ console.debug("[TIMER CLONE] Error updating timers:", o), d(o, "Failed to update timer blocks");
61
+ }
62
+ }
63
+ };
64
+ };
65
+ export {
66
+ M as useTimerClone
67
+ };
@@ -0,0 +1,14 @@
1
+ import { pairProductVariables as r } from "../../utils/pairProductVariables.js";
2
+ const t = [
3
+ {
4
+ id: "pair-product-variables",
5
+ description: "Replace product default values with template variables",
6
+ type: "custom",
7
+ processor: r,
8
+ priority: 60
9
+ // After recommendation rules (priority 50-53)
10
+ }
11
+ ];
12
+ export {
13
+ t as itemsCompilerRules
14
+ };
@@ -12,8 +12,8 @@ const s = {
12
12
  { id: 61, key: "mostPopular", name: "Most Popular Items", path: "most-popular" },
13
13
  { id: 62, key: "mostPurchased", name: "Top Sellers", path: "top-sellers" }
14
14
  ], u = ["discount", "omnibus_price", "omnibus_discount", "price", "original_price"], l = [
15
- { text: "after the amount", value: "1" },
16
- { text: "before the amount", value: "0" }
15
+ { text: "before the amount", value: "0" },
16
+ { text: "after the amount", value: "1" }
17
17
  ], c = [
18
18
  { text: "dot(.)", value: "." },
19
19
  { text: "comma(,)", value: "," }
@@ -2,8 +2,12 @@ const e = [
2
2
  ".service-element.stacked-panel-item.ng-tns-c1014751574-3.level-bottom-0.ng-star-inserted",
3
3
  ".service-element.stacked-panel-item.ng-tns-c1014751574-3.level-bottom-1.ng-star-inserted",
4
4
  ".service-element.stacked-panel-item.ng-tns-c1014751574-3.level-bottom-2.ng-star-inserted"
5
- ], t = "https://academy.useinsider.com/docs/email-drag-drop-editor";
5
+ ], t = "ui-editor", n = 'button[role="tab"][aria-label="Card Composition"]', s = 'button[role="tab"][aria-label="Settings"]', o = ".in-ribbons-wrapper", a = "https://academy.useinsider.com/docs/email-drag-drop-editor";
6
6
  export {
7
- t as ACADEMY_LINK,
8
- e as SERVICE_HOVER_SELECTORS
7
+ a as ACADEMY_LINK,
8
+ n as CARD_COMPOSITION_TAB_SELECTOR,
9
+ o as RIBBON_SELECTOR,
10
+ e as SERVICE_HOVER_SELECTORS,
11
+ s as SETTINGS_TAB_SELECTOR,
12
+ t as UI_EDITOR_SELECTOR
9
13
  };
@@ -1,7 +1,7 @@
1
1
  import { Block as e, BlockCompositionType as t } from "../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
2
2
  import { getDefaultTemplate as o } from "./template.js";
3
3
  const r = "checkbox-block";
4
- class p extends e {
4
+ class s extends e {
5
5
  constructor() {
6
6
  super();
7
7
  }
@@ -23,8 +23,11 @@ class p extends e {
23
23
  getTemplate() {
24
24
  return o();
25
25
  }
26
+ allowInnerBlocksDND() {
27
+ return !1;
28
+ }
26
29
  }
27
30
  export {
28
31
  r as CHECKBOX_BLOCK_ID,
29
- p as CheckboxBlock
32
+ s as CheckboxBlock
30
33
  };
@@ -2,9 +2,9 @@ var d = Object.defineProperty;
2
2
  var l = (r, n, e) => n in r ? d(r, n, { enumerable: !0, configurable: !0, writable: !0, value: e }) : r[n] = e;
3
3
  var o = (r, n, e) => l(r, typeof n != "symbol" ? n + "" : n, e);
4
4
  import { useHttp as L } from "../../../composables/useHttp.js";
5
- import { DEFAULT_UNSUBSCRIBE_GROUP as u } from "../../../enums/unsubscribe.js";
5
+ import { DEFAULT_UNSUBSCRIBE_GROUP as c } from "../../../enums/unsubscribe.js";
6
6
  import { Control as h, UIElementType as i, UEAttr as t, ModificationDescription as p } from "../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
7
- const m = "ui-elements-checkbox", a = "select", { get: C } = L();
7
+ const m = "ui-elements-checkbox", u = "select", { get: C } = L();
8
8
  class S extends h {
9
9
  constructor() {
10
10
  super(...arguments);
@@ -16,15 +16,16 @@ class S extends h {
16
16
  return m;
17
17
  }
18
18
  _setFormValues() {
19
- if (this.currentNode && "getAttribute" in this.currentNode) {
19
+ if (this.selectedUnsubGroup = "", this.currentNode && "getAttribute" in this.currentNode) {
20
20
  const e = this.currentNode.getAttribute("id");
21
21
  if (e) {
22
- const s = e === u.sendGridId ? e : Number(e);
23
- s && (this.selectedUnsubGroup = s, this.api.updateValues({
24
- [a]: this.selectedUnsubGroup
25
- }));
22
+ const s = e === c.sendGridId ? e : Number(e);
23
+ s && (this.selectedUnsubGroup = s);
26
24
  }
27
25
  }
26
+ this.api.updateValues({
27
+ [u]: this.selectedUnsubGroup
28
+ });
28
29
  }
29
30
  _getLabel(e, s = `${Math.random()}`) {
30
31
  return `
@@ -54,7 +55,7 @@ class S extends h {
54
55
  </${i.LABEL}>
55
56
 
56
57
  <${i.SELECTPICKER}
57
- ${t.SELECTPICKER.name}="${a}"
58
+ ${t.SELECTPICKER.name}="${u}"
58
59
  ${t.SELECTPICKER.placeholder}="${this.api.translate("Select Unsubscribe Group")}">
59
60
  ${this._getSelect()}
60
61
  </${i.SELECTPICKER}>
@@ -66,21 +67,21 @@ class S extends h {
66
67
  this.currentNode && this.api.getDocumentModifier().modifyHtml(this.currentNode).setAttribute("id", e.toString()).apply(new p(`Updated text to ${e}`));
67
68
  }
68
69
  _listenToFormUpdates() {
69
- this.api.onValueChanged(a, (e) => this._onSelectChange(e));
70
+ this.api.onValueChanged(u, (e) => this._onSelectChange(e));
70
71
  }
71
72
  onTemplateNodeUpdated(e) {
72
- this.currentNode = e;
73
+ this.currentNode = e, this._setFormValues();
73
74
  }
74
75
  // eslint-disable-next-line @typescript-eslint/no-misused-promises
75
76
  async onRender() {
76
77
  const e = await C(
77
78
  "/unsubscribe-groups/unsubscribe-list"
78
- ), s = [u, ...e.data], E = s.map((c) => ({
79
- [t.SELECT_ITEM.text]: c.name,
80
- [t.SELECT_ITEM.value]: c.sendGridId
79
+ ), s = [c, ...e.data], E = s.map((a) => ({
80
+ [t.SELECT_ITEM.text]: a.name,
81
+ [t.SELECT_ITEM.value]: a.sendGridId
81
82
  }));
82
83
  this.unsubList = s, this.api.setUIEAttribute(
83
- a,
84
+ u,
84
85
  t.SELECTPICKER.items,
85
86
  E
86
87
  ), this._setFormValues(), this._listenToFormUpdates();
@@ -3,7 +3,7 @@ const e = {
3
3
  TITLE: "Unsubscribe From All Email Lists",
4
4
  DESCRIPTION: "You will still receive important transactional and billing-related emails."
5
5
  }, l = `
6
- <td align="left" class="checkbox-block-v2 esd-block-checkbox es-p20">
6
+ <td align="left" class="checkbox-block checkbox-block-v2 esd-block-checkbox es-p20">
7
7
  <table cellpadding="0" cellspacing="0" role="presentation" width="100%">
8
8
  <tbody>
9
9
  <tr>
@@ -26,11 +26,16 @@ const e = {
26
26
  </tbody>
27
27
  </table>
28
28
  </td>
29
- `, i = `
30
- <td
31
- align="left"
32
- esd-extension-block-id="checkbox-block"
33
- class="checkbox-block-v2 esd-block-checkbox esd-checkbox-block esd-extension-block es-p20"
29
+ `, o = `
30
+ <td
31
+ align="left"
32
+ esd-extension-block-id="checkbox-block"
33
+ class="
34
+ checkbox-block
35
+ checkbox-block-v2
36
+ esd-block-checkbox
37
+ esd-checkbox-block
38
+ esd-extension-block es-p20"
34
39
  >
35
40
  <table cellpadding="0" cellspacing="0" role="presentation" width="100%">
36
41
  <tbody>
@@ -55,10 +60,10 @@ const e = {
55
60
  </table>
56
61
  </td>
57
62
  `;
58
- function c() {
63
+ function a() {
59
64
  return l.replace("{-{-TITLE-}-}", `<p path="1">${e.TITLE}</p>`).replace("{-{-DESCRIPTION-}-}", `<p path="1">${e.DESCRIPTION}</p>`);
60
65
  }
61
66
  export {
62
- i as default,
63
- c as getDefaultTemplate
67
+ o as default,
68
+ a as getDefaultTemplate
64
69
  };
@@ -0,0 +1,67 @@
1
+ import { useOnboardingStore as y } from "../../../stores/onboarding.js";
2
+ import { Block as R, BlockCompositionType as L, ModificationDescription as a } from "../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
3
+ import { configAttributes as t } from "./enums/productEnums.js";
4
+ import { DefaultConfigValues as e, SETTINGS_ENUMS as l } from "./enums/settingsEnums.js";
5
+ import { useItemsBlockStore as S } from "./store/items-block.js";
6
+ import { getDefaultTemplate as V } from "./template.js";
7
+ import { syncCurrencySymbolFromAttributes as B, syncCurrencyLocationFromAttributes as U, syncFormattedPriceFromAttributes as k } from "./utils/syncAttributesFromConfigBlock.js";
8
+ const M = "items-block";
9
+ class x extends R {
10
+ getId() {
11
+ return M;
12
+ }
13
+ getIcon() {
14
+ return "items-icon";
15
+ }
16
+ getBlockCompositionType() {
17
+ return L.CONTAINER;
18
+ }
19
+ getName() {
20
+ return this.api.translate("Items");
21
+ }
22
+ getDescription() {
23
+ return this.api.translate("Items lets you display personalized products based on user behavior.");
24
+ }
25
+ getTemplate() {
26
+ return V({
27
+ orientation: l.ORIENTATION.HORIZONTAL,
28
+ itemsType: l.ITEMS_TYPE.CART_ITEMS,
29
+ itemId: "{{Abandoned Cart Item (1) Url}}",
30
+ currencySymbol: e.productPriceCurrencySymbolControlValue,
31
+ currencyLocation: e.productPriceCurrencyLocationControlValue,
32
+ formattedPrice: e.productPriceFormattedControlValue === "1"
33
+ });
34
+ }
35
+ allowInnerBlocksDND() {
36
+ return !1;
37
+ }
38
+ onCreated(r) {
39
+ const n = r.querySelector("esd-config-block");
40
+ if (!n)
41
+ return;
42
+ const o = n, s = o.getAttribute("data-initialized") || "0", u = o.getAttribute(t.BLOCK_INSTANCE_ID), c = () => String(Date.now() + Math.floor(Math.random() * 1e3));
43
+ if (Number(s)) {
44
+ if (!u) {
45
+ const i = c();
46
+ this.api.getDocumentModifier().modifyHtml(o).setAttribute(t.BLOCK_INSTANCE_ID, i).apply(new a("Assign block instance ID to legacy block"));
47
+ }
48
+ } else {
49
+ const i = e.itemsType, I = e.cartItemsSelectControlValue, d = e.cardOrientationControlValue, m = e.productNameTrimmingControlValue, C = e.productPriceHideDiscountControlValue, b = e.productPriceFormattedControlValue, T = e.productPriceCurrencySymbolControlValue, A = e.productPriceCurrencyLocationControlValue, E = e.productButtonLinkControlValue, O = e.productImageLinkControlValue, _ = e.productImageVisible, p = e.productNameVisible, N = e.productQuantityVisible, f = e.productPriceVisible, g = e.productOriginalPriceVisible, D = e.productButtonVisible, P = c();
50
+ this.api.getDocumentModifier().modifyHtml(o).setAttribute("data-source", i).setAttribute(t.TYPE, i).setAttribute(t.ITEMS_INDEX_SELECT_CONTROL_VALUE, I).setAttribute(t.ORIENTATION, d).setAttribute(t.PRODUCT_NAME_TRIMMING, m).setAttribute(t.PRODUCT_PRICE_HIDE_DISCOUNT, C).setAttribute(t.PRODUCT_PRICE_FORMATTED, b).setAttribute(t.PRODUCT_PRICE_CURRENCY_SYMBOL, T).setAttribute(t.PRODUCT_PRICE_CURRENCY_LOCATION, A).setAttribute(t.PRODUCT_BUTTON_LINK, E).setAttribute(t.PRODUCT_IMAGE_LINK, O).setAttribute(t.BLOCK_INSTANCE_ID, P).setAttribute("data-initialized", "1").setAttribute(t.NAME_CONTROL_ENABLED, e.productNameControlEnabled).setAttribute(
51
+ t.QUANTITY_CONTROL_ENABLED,
52
+ e.productQuantityControlEnabled
53
+ ).setAttribute(t.PRICE_CONTROL_OPENED, e.productPriceControlOpened).setAttribute(t.PRODUCT_IMAGE_VISIBLE, _).setAttribute(t.PRODUCT_NAME_VISIBLE, p).setAttribute(t.PRODUCT_QUANTITY_VISIBLE, N).setAttribute(t.PRODUCT_PRICE_VISIBLE, f).setAttribute(t.PRODUCT_ORIGINAL_PRICE_VISIBLE, g).setAttribute(t.PRODUCT_BUTTON_VISIBLE, D).apply(new a("Initialize config block attributes with defaults")), y().startOnboarding("itemsOnboarding");
54
+ }
55
+ }
56
+ onSelect(r) {
57
+ const n = r.querySelector("esd-config-block"), o = S();
58
+ if (!n)
59
+ return;
60
+ const s = n, u = s.getAttribute(t.TYPE) || e.itemsType, c = s.getAttribute(t.ITEMS_INDEX_SELECT_CONTROL_VALUE) || e.cartItemsSelectControlValue, i = s.getAttribute(t.ORIENTATION) || e.cardOrientationControlValue;
61
+ o.setItemsType(u), o.setItemIds(c), o.setOrientation(i), B(r), U(r), k(r);
62
+ }
63
+ }
64
+ export {
65
+ M as BLOCK_ID,
66
+ x as ItemsBlock
67
+ };
@@ -0,0 +1,68 @@
1
+ var r = Object.defineProperty;
2
+ var a = (o, e, t) => e in o ? r(o, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : o[e] = t;
3
+ var s = (o, e, t) => a(o, typeof e != "symbol" ? e + "" : e, t);
4
+ import { CommonControl as u } from "../../../common-control.js";
5
+ import { ItemsBlockControlId as d } from "../../enums/controlEnums.js";
6
+ import { useItemsBlockStore as l } from "../../store/items-block.js";
7
+ import { syncButtonLinkFromAttributes as h } from "../../utils/syncAttributesFromConfigBlock.js";
8
+ import { updateConfigBlockAttributes as m } from "../../utils/updateAttributes.js";
9
+ const i = d.BUTTON_LINK, n = {
10
+ LINK: "link"
11
+ };
12
+ class C extends u {
13
+ constructor() {
14
+ super(...arguments);
15
+ s(this, "store", l());
16
+ }
17
+ getId() {
18
+ return i;
19
+ }
20
+ getTemplate() {
21
+ return `
22
+ <div class="${i}">
23
+ ${this._getLink()}
24
+ </div>
25
+ `;
26
+ }
27
+ onRender() {
28
+ this.api.updateValues({
29
+ [n.LINK]: this.store.buttonLink
30
+ }), this._listenToFormUpdates();
31
+ }
32
+ onTemplateNodeUpdated(t) {
33
+ super.onTemplateNodeUpdated(t), this.handleBlockInstanceChange(
34
+ () => h(this.currentNode),
35
+ () => {
36
+ this.api.updateValues({
37
+ [n.LINK]: this.store.buttonLink
38
+ });
39
+ }
40
+ );
41
+ }
42
+ _listenToFormUpdates() {
43
+ this.api.onValueChanged(
44
+ n.LINK,
45
+ (t) => this._onLinkChange(t)
46
+ );
47
+ }
48
+ _onLinkChange(t) {
49
+ console.debug("Button link changed to: ", t), this.store.setButtonLink(t), m(this.currentNode, this.api);
50
+ }
51
+ _getLink() {
52
+ return `
53
+ ${this._GuOneColumn([
54
+ this._GuLabel({ text: "Link" }),
55
+ this._GuTextInput({
56
+ name: n.LINK,
57
+ placeholder: "Enter Link",
58
+ className: "es-100",
59
+ disabled: !0
60
+ })
61
+ ])}
62
+ `;
63
+ }
64
+ }
65
+ export {
66
+ C as ButtonLinkControl,
67
+ i as CONTROL_BLOCK_ID
68
+ };
@@ -0,0 +1,193 @@
1
+ var c = Object.defineProperty;
2
+ var I = (a, n, t) => n in a ? c(a, n, { enumerable: !0, configurable: !0, writable: !0, value: t }) : a[n] = t;
3
+ var _ = (a, n, t) => I(a, typeof n != "symbol" ? n + "" : n, t);
4
+ import { ModificationDescription as l } from "../../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
5
+ import { CommonControl as R } from "../../common-control.js";
6
+ import { ItemsBlockId as s } from "../enums/controlEnums.js";
7
+ import { configAttributes as C } from "../enums/productEnums.js";
8
+ import { SETTINGS_ENUMS as u } from "../enums/settingsEnums.js";
9
+ import { useItemsBlockStore as O } from "../store/items-block.js";
10
+ import { getConfigBlock as P, attributeToBoolean as U } from "../utils/configBlockUtils.js";
11
+ const h = "ui-elements-items-card-composition-block", i = {
12
+ PRODUCT_IMAGE: "image",
13
+ PRODUCT_NAME: "name",
14
+ PRODUCT_QUANTITY: "quantity",
15
+ PRODUCT_PRICE: "price",
16
+ PRODUCT_ORIGINAL_PRICE: "originalPrice",
17
+ PRODUCT_BUTTON: "button"
18
+ };
19
+ class g extends R {
20
+ constructor() {
21
+ super(...arguments);
22
+ _(this, "store", O());
23
+ _(this, "visibilityState", {
24
+ [i.PRODUCT_IMAGE]: !0,
25
+ [i.PRODUCT_NAME]: !0,
26
+ [i.PRODUCT_QUANTITY]: !0,
27
+ [i.PRODUCT_PRICE]: !0,
28
+ [i.PRODUCT_ORIGINAL_PRICE]: !0,
29
+ [i.PRODUCT_BUTTON]: !0
30
+ });
31
+ }
32
+ getId() {
33
+ return h;
34
+ }
35
+ getTemplate() {
36
+ return `
37
+ <div class="items-controls-container">
38
+ ${[
39
+ { name: i.PRODUCT_IMAGE, label: "Product Image" },
40
+ { name: i.PRODUCT_NAME, label: "Product Name" },
41
+ { name: i.PRODUCT_QUANTITY, label: "Product Quantity" },
42
+ { name: i.PRODUCT_PRICE, label: "Product Price" },
43
+ { name: i.PRODUCT_ORIGINAL_PRICE, label: "Product Original Price" },
44
+ { name: i.PRODUCT_BUTTON, label: "Product Button" }
45
+ ].map((e) => this._getToggleContainer(e)).join("")}
46
+ </div>
47
+ `;
48
+ }
49
+ onRender() {
50
+ this._syncVisibilityFromAttributes(), this._handleBrowsedItemsQuantity(), this._initializeToggles(), this._listenToFormUpdates();
51
+ }
52
+ onTemplateNodeUpdated(t) {
53
+ super.onTemplateNodeUpdated(t), this.handleBlockInstanceChange(
54
+ () => {
55
+ this._syncVisibilityFromAttributes(), this._handleBrowsedItemsQuantity(), this._applyVisibilityStyles();
56
+ },
57
+ () => {
58
+ this._updateTogglesFromState();
59
+ }
60
+ );
61
+ }
62
+ _getToggleContainer({ name: t, label: e }) {
63
+ return `
64
+ <div class="container" name="${t}Container">
65
+ <div class="display-flex align-items-center justify-content-between">
66
+ ${this._GuLabel({ text: e, name: `${t}Label` })}
67
+ ${this._GuToggle(t)}
68
+ </div>
69
+ </div>
70
+ `;
71
+ }
72
+ _initializeToggles() {
73
+ this._updateTogglesFromState();
74
+ }
75
+ _updateTogglesFromState() {
76
+ this.api.updateValues({
77
+ [i.PRODUCT_IMAGE]: this.visibilityState[i.PRODUCT_IMAGE],
78
+ [i.PRODUCT_NAME]: this.visibilityState[i.PRODUCT_NAME],
79
+ [i.PRODUCT_QUANTITY]: this.visibilityState[i.PRODUCT_QUANTITY],
80
+ [i.PRODUCT_PRICE]: this.visibilityState[i.PRODUCT_PRICE],
81
+ [i.PRODUCT_ORIGINAL_PRICE]: this.visibilityState[i.PRODUCT_ORIGINAL_PRICE],
82
+ [i.PRODUCT_BUTTON]: this.visibilityState[i.PRODUCT_BUTTON]
83
+ });
84
+ }
85
+ _syncVisibilityFromAttributes() {
86
+ const t = P(this.currentNode);
87
+ if (!t)
88
+ return;
89
+ const e = {
90
+ [i.PRODUCT_IMAGE]: "PRODUCT_IMAGE_VISIBLE",
91
+ [i.PRODUCT_NAME]: "PRODUCT_NAME_VISIBLE",
92
+ [i.PRODUCT_QUANTITY]: "PRODUCT_QUANTITY_VISIBLE",
93
+ [i.PRODUCT_PRICE]: "PRODUCT_PRICE_VISIBLE",
94
+ [i.PRODUCT_ORIGINAL_PRICE]: "PRODUCT_ORIGINAL_PRICE_VISIBLE",
95
+ [i.PRODUCT_BUTTON]: "PRODUCT_BUTTON_VISIBLE"
96
+ };
97
+ Object.entries(e).forEach(([o, r]) => {
98
+ const T = t.getAttribute(C[r]);
99
+ this.visibilityState[o] = U(T, !0);
100
+ });
101
+ }
102
+ /**
103
+ * If itemsType is not BROWSED_ITEMS, show quantity
104
+ * If itemsType is BROWSED_ITEMS, hide quantity
105
+ * and mark it as '0'
106
+ */
107
+ _handleBrowsedItemsQuantity() {
108
+ var r;
109
+ const t = this.store.itemsType !== u.ITEMS_TYPE.BROWSED_ITEMS, e = (r = this.currentNode) == null ? void 0 : r.querySelector("esd-config-block");
110
+ if (!e)
111
+ return;
112
+ const o = e.getAttribute(C.PRODUCT_QUANTITY_VISIBLE) === "1";
113
+ this.visibilityState[i.PRODUCT_QUANTITY] = t && o, this.api.setVisibility(`${i.PRODUCT_QUANTITY}Container`, t), this._updateVisibilityAttribute(i.PRODUCT_QUANTITY, t && o);
114
+ }
115
+ _applyVisibilityStyles() {
116
+ const t = {
117
+ [i.PRODUCT_IMAGE]: s.IMAGE,
118
+ [i.PRODUCT_NAME]: s.NAME,
119
+ [i.PRODUCT_QUANTITY]: s.QUANTITY,
120
+ [i.PRODUCT_PRICE]: s.PRICE,
121
+ [i.PRODUCT_ORIGINAL_PRICE]: s.ORIGINAL_PRICE,
122
+ [i.PRODUCT_BUTTON]: s.BUTTON
123
+ };
124
+ Object.entries(t).forEach(([e, o]) => {
125
+ var d;
126
+ const r = (d = this.currentNode) == null ? void 0 : d.querySelector(`[esd-extension-block-id="${o}"]`);
127
+ if (!r)
128
+ return;
129
+ const T = this.visibilityState[e];
130
+ this.api.getDocumentModifier().modifyHtml(r).setStyle("display", T ? "table-cell" : "none").apply(new l(`Applied ${e} visibility from attributes`));
131
+ });
132
+ }
133
+ _updateVisibilityAttribute(t, e) {
134
+ const o = P(this.currentNode);
135
+ if (!o)
136
+ return;
137
+ const T = {
138
+ [i.PRODUCT_IMAGE]: "PRODUCT_IMAGE_VISIBLE",
139
+ [i.PRODUCT_NAME]: "PRODUCT_NAME_VISIBLE",
140
+ [i.PRODUCT_QUANTITY]: "PRODUCT_QUANTITY_VISIBLE",
141
+ [i.PRODUCT_PRICE]: "PRODUCT_PRICE_VISIBLE",
142
+ [i.PRODUCT_ORIGINAL_PRICE]: "PRODUCT_ORIGINAL_PRICE_VISIBLE",
143
+ [i.PRODUCT_BUTTON]: "PRODUCT_BUTTON_VISIBLE"
144
+ }[t];
145
+ T && this.api.getDocumentModifier().modifyHtml(o).setAttribute(C[T], e ? "1" : "0").apply(new l(`Updated ${t} visibility attribute`));
146
+ }
147
+ _listenToFormUpdates() {
148
+ this.api.onValueChanged(i.PRODUCT_IMAGE, (t) => this._onProductImageChange(t)), this.api.onValueChanged(i.PRODUCT_NAME, (t) => this._onProductNameChange(t)), this.api.onValueChanged(i.PRODUCT_QUANTITY, (t) => this._onProductQuantityChange(t)), this.api.onValueChanged(i.PRODUCT_PRICE, (t) => this._onProductPriceChange(t)), this.api.onValueChanged(
149
+ i.PRODUCT_ORIGINAL_PRICE,
150
+ (t) => this._onProductOriginalPriceChange(t)
151
+ ), this.api.onValueChanged(i.PRODUCT_BUTTON, (t) => this._onProductButtonChange(t));
152
+ }
153
+ _onProductImageChange(t) {
154
+ var o;
155
+ const e = (o = this.currentNode) == null ? void 0 : o.querySelector(`[esd-extension-block-id="${s.IMAGE}"]`);
156
+ e && (this.visibilityState[i.PRODUCT_IMAGE] = t, this.api.getDocumentModifier().modifyHtml(e).setStyle("display", t ? "table-cell" : "none").apply(new l(`Product image visibility changed to ${t ? "visible" : "hidden"}`)), this._updateVisibilityAttribute(i.PRODUCT_IMAGE, t));
157
+ }
158
+ _onProductNameChange(t) {
159
+ var o;
160
+ const e = (o = this.currentNode) == null ? void 0 : o.querySelector(`[esd-extension-block-id="${s.NAME}"]`);
161
+ e && (this.visibilityState[i.PRODUCT_NAME] = t, this.api.getDocumentModifier().modifyHtml(e).setStyle("display", t ? "table-cell" : "none").apply(new l(`Product name visibility changed to ${t ? "visible" : "hidden"}`)), this._updateVisibilityAttribute(i.PRODUCT_NAME, t));
162
+ }
163
+ _onProductQuantityChange(t) {
164
+ var o;
165
+ const e = (o = this.currentNode) == null ? void 0 : o.querySelector(`[esd-extension-block-id="${s.QUANTITY}"]`);
166
+ e && (this.visibilityState[i.PRODUCT_QUANTITY] = t, this.api.getDocumentModifier().modifyHtml(e).setStyle("display", t ? "table-cell" : "none").apply(new l(
167
+ `Product quantity visibility changed to ${t ? "visible" : "hidden"}`
168
+ )), this._updateVisibilityAttribute(i.PRODUCT_QUANTITY, t));
169
+ }
170
+ _onProductPriceChange(t) {
171
+ var o;
172
+ const e = (o = this.currentNode) == null ? void 0 : o.querySelector(`[esd-extension-block-id="${s.PRICE}"]`);
173
+ e && (this.visibilityState[i.PRODUCT_PRICE] = t, this.api.getDocumentModifier().modifyHtml(e).setStyle("display", t ? "table-cell" : "none").apply(new l(`Product price visibility changed to ${t ? "visible" : "hidden"}`)), this._updateVisibilityAttribute(i.PRODUCT_PRICE, t));
174
+ }
175
+ _onProductOriginalPriceChange(t) {
176
+ var o;
177
+ const e = (o = this.currentNode) == null ? void 0 : o.querySelector(
178
+ `[esd-extension-block-id="${s.ORIGINAL_PRICE}"]`
179
+ );
180
+ e && (this.visibilityState[i.PRODUCT_ORIGINAL_PRICE] = t, this.api.getDocumentModifier().modifyHtml(e).setStyle("display", t ? "table-cell" : "none").apply(new l(
181
+ `Product original price visibility changed to ${t ? "visible" : "hidden"}`
182
+ )), this._updateVisibilityAttribute(i.PRODUCT_ORIGINAL_PRICE, t));
183
+ }
184
+ _onProductButtonChange(t) {
185
+ var o;
186
+ const e = (o = this.currentNode) == null ? void 0 : o.querySelector(`[esd-extension-block-id="${s.BUTTON}"]`);
187
+ e && (this.visibilityState[i.PRODUCT_BUTTON] = t, this.api.getDocumentModifier().modifyHtml(e).setStyle("display", t ? "table-cell" : "none").apply(new l(`Product button visibility changed to ${t ? "visible" : "hidden"}`)), this._updateVisibilityAttribute(i.PRODUCT_BUTTON, t));
188
+ }
189
+ }
190
+ export {
191
+ h as COMPOSITION_CONTROL_BLOCK_ID,
192
+ g as ItemsBlockCardCompositionControl
193
+ };
@@ -0,0 +1,68 @@
1
+ var r = Object.defineProperty;
2
+ var a = (o, t, e) => t in o ? r(o, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : o[t] = e;
3
+ var i = (o, t, e) => a(o, typeof t != "symbol" ? t + "" : t, e);
4
+ import { CommonControl as m } from "../../../common-control.js";
5
+ import { ItemsBlockControlId as d } from "../../enums/controlEnums.js";
6
+ import { useItemsBlockStore as l } from "../../store/items-block.js";
7
+ import { syncImageLinkFromAttributes as h } from "../../utils/syncAttributesFromConfigBlock.js";
8
+ import { updateConfigBlockAttributes as p } from "../../utils/updateAttributes.js";
9
+ const s = d.IMAGE_LINK, n = {
10
+ LINK: "link"
11
+ };
12
+ class N extends m {
13
+ constructor() {
14
+ super(...arguments);
15
+ i(this, "store", l());
16
+ }
17
+ getId() {
18
+ return s;
19
+ }
20
+ getTemplate() {
21
+ return `
22
+ <div class="${s}">
23
+ ${this._getLink()}
24
+ </div>
25
+ `;
26
+ }
27
+ onRender() {
28
+ this.api.updateValues({
29
+ [n.LINK]: this.store.imageLink
30
+ }), this._listenToFormUpdates();
31
+ }
32
+ onTemplateNodeUpdated(e) {
33
+ super.onTemplateNodeUpdated(e), this.handleBlockInstanceChange(
34
+ () => h(this.currentNode),
35
+ () => {
36
+ this.api.updateValues({
37
+ [n.LINK]: this.store.imageLink
38
+ });
39
+ }
40
+ );
41
+ }
42
+ _listenToFormUpdates() {
43
+ this.api.onValueChanged(
44
+ n.LINK,
45
+ (e) => this._onLinkChange(e)
46
+ );
47
+ }
48
+ _onLinkChange(e) {
49
+ console.debug("Image link changed to: ", e), this.store.setImageLink(e), p(this.currentNode, this.api);
50
+ }
51
+ _getLink() {
52
+ return `
53
+ ${this._GuOneColumn([
54
+ this._GuLabel({ text: "Link" }),
55
+ this._GuTextInput({
56
+ name: n.LINK,
57
+ placeholder: "Enter Link",
58
+ className: "es-100",
59
+ disabled: !0
60
+ })
61
+ ])}
62
+ `;
63
+ }
64
+ }
65
+ export {
66
+ s as CONTROL_BLOCK_ID,
67
+ N as ImageLinkControl
68
+ };