@useinsider/guido 1.0.3-beta.dfb1fcf → 1.0.3-beta.e1adf59

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 (130) hide show
  1. package/README.md +3 -144
  2. package/dist/components/Guido.vue.js +10 -12
  3. package/dist/components/Guido.vue2.js +101 -84
  4. package/dist/components/organisms/header/LeftSlot.vue.js +1 -1
  5. package/dist/components/organisms/header/LeftSlot.vue2.js +15 -16
  6. package/dist/components/organisms/header/RightSlot.vue.js +11 -11
  7. package/dist/components/organisms/header/RightSlot.vue2.js +22 -23
  8. package/dist/components/organisms/onboarding/NewVersionPopup.vue.js +9 -9
  9. package/dist/components/organisms/onboarding/NewVersionPopup.vue2.js +17 -30
  10. package/dist/components/organisms/onboarding/OnboardingWrapper.vue.js +10 -12
  11. package/dist/components/organisms/onboarding/OnboardingWrapper.vue2.js +18 -19
  12. package/dist/composables/useApiErrorTracking.js +120 -0
  13. package/dist/composables/useErrorTracking.js +98 -0
  14. package/dist/composables/useGuidoActions.js +9 -19
  15. package/dist/composables/useHttp.js +89 -52
  16. package/dist/composables/useStripo.js +163 -66
  17. package/dist/composables/useStripoErrorCategory.js +86 -0
  18. package/dist/composables/useStripoSlackNotifier.js +47 -0
  19. package/dist/config/compiler/unsubscribeCompilerRules.js +28 -33
  20. package/dist/config/migrator/index.js +6 -7
  21. package/dist/enums/defaults.js +8 -16
  22. package/dist/enums/onboarding.js +1 -2
  23. package/dist/enums/unsubscribe.js +25 -27
  24. package/dist/extensions/Blocks/Checkbox/extension.js +2 -2
  25. package/dist/extensions/Blocks/CouponBlock/extension.js +2 -2
  26. package/dist/extensions/Blocks/Recommendation/block.js +3 -6
  27. package/dist/extensions/Blocks/Recommendation/control.js +65 -109
  28. package/dist/extensions/Blocks/Recommendation/extension.js +7 -18
  29. package/dist/extensions/Blocks/Recommendation/settingsPanel.js +21 -159
  30. package/dist/extensions/Blocks/Recommendation/store/recommendation.js +1 -1
  31. package/dist/extensions/Blocks/Recommendation/template.js +200 -0
  32. package/dist/extensions/Blocks/common-control.js +43 -125
  33. package/dist/extensions/DynamicContent/dynamic-content-modal.js +19 -25
  34. package/dist/extensions/DynamicContent/dynamic-content.js +33 -128
  35. package/dist/guido.css +1 -1
  36. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js +100 -312
  37. package/dist/package.json.js +1 -1
  38. package/dist/services/slackNotificationService.js +167 -0
  39. package/dist/services/stripoApi.js +49 -19
  40. package/dist/services/stripoErrorDeduplicationService.js +91 -0
  41. package/dist/src/@types/generic.d.ts +6 -42
  42. package/dist/src/components/Guido.vue.d.ts +3 -4
  43. package/dist/src/components/organisms/onboarding/NewVersionPopup.vue.d.ts +1 -3
  44. package/dist/src/components/organisms/onboarding/OnboardingWrapper.vue.d.ts +1 -3
  45. package/dist/src/components/wrappers/WpModal.vue.d.ts +1 -1
  46. package/dist/src/composables/useApiErrorTracking.d.ts +26 -0
  47. package/dist/src/composables/useErrorTracking.d.ts +30 -0
  48. package/dist/src/composables/useGuidoActions.d.ts +0 -9
  49. package/dist/src/composables/useStripoErrorCategory.d.ts +26 -0
  50. package/dist/src/composables/useStripoSlackNotifier.d.ts +8 -0
  51. package/dist/src/enums/onboarding.d.ts +0 -1
  52. package/dist/src/extensions/Blocks/Recommendation/block.d.ts +0 -1
  53. package/dist/src/extensions/Blocks/Recommendation/control.d.ts +2 -11
  54. package/dist/src/extensions/Blocks/Recommendation/store/recommendation.d.ts +1 -1
  55. package/dist/src/extensions/Blocks/Recommendation/template.d.ts +6 -0
  56. package/dist/src/extensions/Blocks/common-control.d.ts +0 -21
  57. package/dist/src/extensions/DynamicContent/dynamic-content-modal.d.ts +2 -9
  58. package/dist/src/extensions/DynamicContent/dynamic-content.d.ts +2 -52
  59. package/dist/src/services/slackNotificationService.d.ts +110 -0
  60. package/dist/src/services/stripoErrorDeduplicationService.d.ts +75 -0
  61. package/dist/src/stores/config.d.ts +2 -10
  62. package/dist/src/stores/dynamic-content.d.ts +3 -3
  63. package/dist/src/stores/editor.d.ts +1 -1
  64. package/dist/src/stores/onboarding.d.ts +1 -1
  65. package/dist/src/stores/preview.d.ts +1 -1
  66. package/dist/src/stores/recommendation.d.ts +1 -1
  67. package/dist/src/stores/save-as-template.d.ts +1 -1
  68. package/dist/src/stores/toaster.d.ts +1 -1
  69. package/dist/src/stores/unsubscribe.d.ts +1 -1
  70. package/dist/src/stores/version-history.d.ts +1 -1
  71. package/dist/src/utils/dateUtil.d.ts +0 -21
  72. package/dist/src/utils/genericUtil.d.ts +0 -1
  73. package/dist/static/styles/components/narrow-panel.css.js +0 -10
  74. package/dist/static/styles/components/wide-panel.css.js +4 -0
  75. package/dist/static/styles/customEditorStyle.css.js +0 -19
  76. package/dist/stores/config.js +5 -5
  77. package/dist/stores/dynamic-content.js +2 -2
  78. package/dist/stores/editor.js +1 -1
  79. package/dist/stores/onboarding.js +27 -27
  80. package/dist/stores/preview.js +1 -1
  81. package/dist/stores/recommendation.js +3 -3
  82. package/dist/stores/save-as-template.js +2 -2
  83. package/dist/stores/toaster.js +1 -1
  84. package/dist/stores/unsubscribe.js +1 -1
  85. package/dist/stores/version-history.js +4 -4
  86. package/dist/utils/dateUtil.js +3 -24
  87. package/dist/utils/genericUtil.js +9 -20
  88. package/package.json +3 -3
  89. package/dist/composables/useBlocksConfig.js +0 -49
  90. package/dist/config/migrator/recommendationMigrator.js +0 -293
  91. package/dist/enums/date.js +0 -6
  92. package/dist/extensions/Blocks/Recommendation/cardCompositionControl.js +0 -193
  93. package/dist/extensions/Blocks/Recommendation/constants.js +0 -14
  94. package/dist/extensions/Blocks/Recommendation/controls/cardBackgroundColorControl.js +0 -68
  95. package/dist/extensions/Blocks/Recommendation/controls/index.js +0 -272
  96. package/dist/extensions/Blocks/Recommendation/controls/nameTextTrimControl.js +0 -74
  97. package/dist/extensions/Blocks/Recommendation/controls/omnibusDiscountTextAfterControl.js +0 -71
  98. package/dist/extensions/Blocks/Recommendation/controls/omnibusDiscountTextBeforeControl.js +0 -71
  99. package/dist/extensions/Blocks/Recommendation/controls/omnibusPriceTextAfterControl.js +0 -71
  100. package/dist/extensions/Blocks/Recommendation/controls/omnibusPriceTextBeforeControl.js +0 -71
  101. package/dist/extensions/Blocks/Recommendation/controls/priceHideControl.js +0 -60
  102. package/dist/extensions/Blocks/Recommendation/controls/priceInlineLayoutControl.js +0 -160
  103. package/dist/extensions/Blocks/Recommendation/controls/spacingControl.js +0 -188
  104. package/dist/extensions/Blocks/Recommendation/templates/blockTemplate.js +0 -184
  105. package/dist/extensions/Blocks/Recommendation/templates/migrationTemplate.js +0 -189
  106. package/dist/extensions/Blocks/Recommendation/templates/templateUtils.js +0 -209
  107. package/dist/extensions/Blocks/Recommendation/utils/preserveTextStyles.js +0 -25
  108. package/dist/extensions/Blocks/controlFactories.js +0 -234
  109. package/dist/src/composables/useBlocksConfig.d.ts +0 -11
  110. package/dist/src/config/migrator/recommendationMigrator.d.ts +0 -1
  111. package/dist/src/enums/date.d.ts +0 -4
  112. package/dist/src/extensions/Blocks/Recommendation/cardCompositionControl.d.ts +0 -79
  113. package/dist/src/extensions/Blocks/Recommendation/constants.d.ts +0 -91
  114. package/dist/src/extensions/Blocks/Recommendation/controls/cardBackgroundColorControl.d.ts +0 -25
  115. package/dist/src/extensions/Blocks/Recommendation/controls/index.d.ts +0 -71
  116. package/dist/src/extensions/Blocks/Recommendation/controls/nameTextTrimControl.d.ts +0 -16
  117. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscountTextAfterControl.d.ts +0 -15
  118. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscountTextBeforeControl.d.ts +0 -15
  119. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPriceTextAfterControl.d.ts +0 -15
  120. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPriceTextBeforeControl.d.ts +0 -15
  121. package/dist/src/extensions/Blocks/Recommendation/controls/priceHideControl.d.ts +0 -16
  122. package/dist/src/extensions/Blocks/Recommendation/controls/priceInlineLayoutControl.d.ts +0 -50
  123. package/dist/src/extensions/Blocks/Recommendation/controls/spacingControl.d.ts +0 -60
  124. package/dist/src/extensions/Blocks/Recommendation/templates/blockTemplate.d.ts +0 -16
  125. package/dist/src/extensions/Blocks/Recommendation/templates/migrationTemplate.d.ts +0 -16
  126. package/dist/src/extensions/Blocks/Recommendation/templates/templateUtils.d.ts +0 -52
  127. package/dist/src/extensions/Blocks/Recommendation/utils/preserveTextStyles.d.ts +0 -19
  128. package/dist/src/extensions/Blocks/controlFactories.d.ts +0 -95
  129. package/dist/src/utils/environmentUtil.d.ts +0 -5
  130. package/dist/utils/environmentUtil.js +0 -4
@@ -0,0 +1,200 @@
1
+ const g = {
2
+ TITLE: "You May Also Like!"
3
+ }, h = `
4
+ <td align="left" class="ins-recommendation-v3-block-v2 esd-block-recommendation-v3-block">
5
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
6
+ <tr>
7
+ <td align="center" style="padding: 20px 0;">
8
+ <!-- Email Content Container -->
9
+ <table class="container"
10
+ width="600"
11
+ cellpadding="0"
12
+ cellspacing="0"
13
+ border="0"
14
+ style="max-width: 600px; width: 100%; background-color: #ffffff;">
15
+ <!-- Heading -->
16
+ <tr>
17
+ <td class="heading"
18
+ style="
19
+ font-size: 28px;
20
+ font-weight: bold;
21
+ color: #333333;
22
+ text-align: center;
23
+ padding: 30px 20px;">
24
+ {-{-TITLE-}-}
25
+ </td>
26
+ </tr>
27
+
28
+ <!-- Product Rows -->
29
+ {-{-PRODUCT_ROWS-}-}
30
+ </table>
31
+ <!-- End Email Content Container -->
32
+ </td>
33
+ </tr>
34
+ </table>
35
+ </td>
36
+ `, u = `
37
+ <tr>
38
+ <td style="padding: 0 20px;">
39
+ <table width="100%" height="100%" cellpadding="0" cellspacing="0" border="0">
40
+ {-{-PRODUCTS-}-}
41
+ </table>
42
+ </td>
43
+ </tr>
44
+ `, m = `
45
+ <td width="{-{-COLUMN_WIDTH-}-}" style="padding: 0 5px;" valign="top" height="100%">
46
+ <table width="100%"
47
+ height="100%"
48
+ cellpadding="0"
49
+ cellspacing="0"
50
+ border="0"
51
+ class="product-card-wrapper"
52
+ style="background-color: #f8f8f8;">
53
+ <tr>
54
+ <td class="product-image-cell"
55
+ valign="top"
56
+ style="background-color: #e8f0f2; padding: 30px; text-align: center;">
57
+ <img src="{-{-PRODUCT_IMAGE-}-}"
58
+ alt="{-{-PRODUCT_NAME-}-}" width="120" style="max-width: 100%; height: auto; margin: 0 auto;">
59
+ </td>
60
+ </tr>
61
+ </table>
62
+ </td>
63
+ `, b = `
64
+ <td width="{-{-COLUMN_WIDTH-}-}" style="padding: 0 5px;" valign="top" height="100%">
65
+ <table width="100%"
66
+ height="100%"
67
+ cellpadding="0"
68
+ cellspacing="0"
69
+ border="0"
70
+ class="product-card-wrapper"
71
+ style="background-color: #f8f8f8;">
72
+ <tr>
73
+ <td class="product-name-cell"
74
+ valign="top"
75
+ style="font-size: 16px; color: #333333; font-weight: 600; padding: 15px 10px; text-align: center;">
76
+ {-{-PRODUCT_NAME-}-}
77
+ </td>
78
+ </tr>
79
+ </table>
80
+ </td>
81
+ `, x = `
82
+ <td width="{-{-COLUMN_WIDTH-}-}" style="padding: 0 5px;" valign="top" height="100%">
83
+ <table width="100%"
84
+ height="100%"
85
+ cellpadding="0"
86
+ cellspacing="0"
87
+ border="0"
88
+ class="product-card-wrapper"
89
+ style="background-color: #f8f8f8;">
90
+ <tr>
91
+ <td class="price-cell" valign="top" style="padding: 10px; text-align: center;">
92
+ <span class="current-price" style="font-size: 16px; color: #333333; font-weight: bold;">
93
+ 18,00 TRY
94
+ </span>
95
+ <span class="old-price" style="font-size: 14px; color: #999999; text-decoration: line-through;">
96
+ 20,00 TRY
97
+ </span>
98
+ </td>
99
+ </tr>
100
+ </table>
101
+ </td>
102
+ `, w = `
103
+ <td width="{-{-COLUMN_WIDTH-}-}" style="padding: 0 5px;" valign="top" height="100%">
104
+ <table width="100%"
105
+ height="100%"
106
+ cellpadding="0"
107
+ cellspacing="0"
108
+ border="0"
109
+ class="product-card-wrapper"
110
+ style="background-color: #f8f8f8;">
111
+ <tr>
112
+ <td class="button-cell" valign="top" style="padding: 15px 10px 20px 10px; text-align: center;">
113
+ <a href="#"
114
+ class="buy-button"
115
+ style="
116
+ display: inline-block;
117
+ width: 90%;
118
+ max-width: 150px;
119
+ padding: 12px 20px;
120
+ background-color: #ffffff;
121
+ color: #333333;
122
+ text-decoration: none;
123
+ border: 2px solid #cccccc;
124
+ font-size: 16px;
125
+ box-sizing: border-box;">
126
+ Buy
127
+ </a>
128
+ </td>
129
+ </tr>
130
+ </table>
131
+ </td>
132
+ `, f = `
133
+ <tr>
134
+ <td class="spacer" style="height: 20px;"></td>
135
+ </tr>
136
+ `;
137
+ function T() {
138
+ const c = [
139
+ {
140
+ name: "Beanie with Logo",
141
+ image: "https://inshoppingcart.com/ins-html/wp-content/uploads/2018/08/beanie-with-logo-1.jpg",
142
+ price: "18,00 TRY",
143
+ oldPrice: "20,00 TRY",
144
+ url: "https://example.com/product/1"
145
+ },
146
+ {
147
+ name: "Belt",
148
+ image: "https://inshoppingcart.com/ins-html/wp-content/uploads/2018/09/belt-2.jpg",
149
+ price: "55,00 TRY",
150
+ oldPrice: "65,00 TRY",
151
+ url: "https://example.com/product/2"
152
+ },
153
+ {
154
+ name: "Beanie",
155
+ image: "https://inshoppingcart.com/ins-html/wp-content/uploads/2018/08/beanie-with-logo-1.jpg",
156
+ price: "18,00 TRY",
157
+ oldPrice: "20,00 TRY",
158
+ url: "https://example.com/product/3"
159
+ },
160
+ {
161
+ name: "Album",
162
+ image: "https://inshoppingcart.com/ins-html/wp-content/uploads/2018/12/poster_2_up.jpg",
163
+ price: "15,00 TRY",
164
+ oldPrice: "15,00 TRY",
165
+ url: "https://example.com/product/4"
166
+ },
167
+ {
168
+ name: "Flying Ninja with a very long product name",
169
+ image: "https://inshoppingcart.com/ins-html/wp-content/uploads/2018/09/belt-2.jpg",
170
+ price: "12,00 TRY",
171
+ oldPrice: "15,00 TRY",
172
+ url: "https://example.com/product/5"
173
+ },
174
+ {
175
+ name: "Single",
176
+ image: "https://inshoppingcart.com/ins-html/wp-content/uploads/2018/12/poster_2_up.jpg",
177
+ price: "22.555,00 TRY",
178
+ oldPrice: "33.989,00 TRY",
179
+ url: "https://example.com/product/6"
180
+ }
181
+ ], l = 3, d = (100 / l).toFixed(2), a = [];
182
+ for (let t = 0; t < c.length; t += l)
183
+ a.push(c.slice(t, t + l));
184
+ let e = "";
185
+ return a.forEach((t, s) => {
186
+ s > 0 && (e += f);
187
+ let p = "", r = "", n = "", i = "";
188
+ t.forEach((o) => {
189
+ p += m.replace("{-{-PRODUCT_IMAGE-}-}", o.image).replace("{-{-PRODUCT_NAME-}-}", o.name), r += b.replace("{-{-PRODUCT_NAME-}-}", o.name), n += x, i += w;
190
+ }), e += u.replace("{-{-PRODUCTS-}-}", `
191
+ <tr>${p}</tr>
192
+ <tr>${r}</tr>
193
+ <tr>${n}</tr>
194
+ <tr>${i}</tr>
195
+ `), e = e.replaceAll("{-{-COLUMN_WIDTH-}-}", `${d}%`);
196
+ }), h.replace("{-{-TITLE-}-}", g.TITLE).replace("{-{-PRODUCT_ROWS-}-}", e);
197
+ }
198
+ export {
199
+ T as getDefaultTemplate
200
+ };
@@ -1,77 +1,77 @@
1
- var u = Object.defineProperty;
2
- var C = (o, n, E) => n in o ? u(o, n, { enumerable: !0, configurable: !0, writable: !0, value: E }) : o[n] = E;
3
- var a = (o, n, E) => C(o, typeof n != "symbol" ? n + "" : n, E);
4
- import { Control as R, UIElementType as $, UEAttr as e } from "../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
5
- class N extends R {
1
+ var l = Object.defineProperty;
2
+ var C = (E, o, e) => o in E ? l(E, o, { enumerable: !0, configurable: !0, writable: !0, value: e }) : E[o] = e;
3
+ var u = (E, o, e) => C(E, typeof o != "symbol" ? o + "" : o, e);
4
+ import { Control as c, UIElementType as $, UEAttr as t } from "../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
5
+ class L extends c {
6
6
  constructor() {
7
7
  super(...arguments);
8
- a(this, "currentNode");
8
+ u(this, "currentNode");
9
9
  }
10
10
  getContainer() {
11
- var E;
12
- return (E = document.querySelector("ui-editor")) == null ? void 0 : E.shadowRoot;
11
+ var e;
12
+ return (e = document.querySelector("ui-editor")) == null ? void 0 : e.shadowRoot;
13
13
  }
14
- onTemplateNodeUpdated(E) {
15
- this.currentNode = E;
14
+ onTemplateNodeUpdated(e) {
15
+ this.currentNode = e;
16
16
  }
17
- _GuLabel({ text: E, name: t = "", position: T = "top" }) {
17
+ _GuLabel({ text: e, name: T = "", position: n = "top" }) {
18
18
  return `
19
19
  <${$.LABEL}
20
- style="${T === "top" ? "margin-bottom: 8px;" : ""}"
21
- ${e.LABEL.text}="${E}"
22
- ${e.LABEL.name}="${t || `${E} Label`}">
20
+ style="${n === "top" ? "margin-bottom: 8px;" : ""}"
21
+ ${t.LABEL.text}="${e}"
22
+ ${t.LABEL.name}="${T || `${e} Label`}">
23
23
  </${$.LABEL}>
24
24
  `;
25
25
  }
26
- _GuToggle(E) {
26
+ _GuToggle(e) {
27
27
  return `
28
28
  <${$.SWITCHER}
29
- ${e.SWITCHER.name}="${E}">
29
+ ${t.SWITCHER.name}="${e}">
30
30
  </${$.SWITCHER}>
31
31
  `;
32
32
  }
33
- _GuSelectItem({ text: E, value: t }) {
33
+ _GuSelectItem({ text: e, value: T }) {
34
34
  return `
35
35
  <${$.SELECT_ITEM}
36
- ${e.SELECT_ITEM.text}="${E}"
37
- ${e.SELECT_ITEM.value}="${t}">
36
+ ${t.SELECT_ITEM.text}="${e}"
37
+ ${t.SELECT_ITEM.value}="${T}">
38
38
  </${$.SELECT_ITEM}>`;
39
39
  }
40
- _GuSelect({ name: E, placeholder: t, options: T, className: r = "es-180w" }) {
40
+ _GuSelect({ name: e, placeholder: T, options: n, className: r = "es-180w" }) {
41
41
  return `
42
42
  <${$.SELECTPICKER}
43
43
  class="${r}"
44
- ${e.SELECTPICKER.name}="${E}"
45
- ${e.SELECTPICKER.placeholder}="${t}">
46
- ${T.map((O) => this._GuSelectItem(O)).join("")}
44
+ ${t.SELECTPICKER.name}="${e}"
45
+ ${t.SELECTPICKER.placeholder}="${T}">
46
+ ${n.map((a) => this._GuSelectItem(a)).join("")}
47
47
  </${$.SELECTPICKER}>
48
48
  `;
49
49
  }
50
- _GuTextInput({ name: E, placeholder: t, className: T = "" }) {
50
+ _GuTextInput({ name: e, placeholder: T, className: n = "" }) {
51
51
  return `
52
52
  <${$.TEXT}
53
- class=${T}
54
- ${e.TEXT.name}="${E}"
55
- placeholder="${t || E}">
53
+ class=${n}
54
+ ${t.TEXT.name}="${e}"
55
+ placeholder="${T || e}">
56
56
  </${$.TEXT}>
57
57
  `;
58
58
  }
59
- _GuCounter({ name: E, maxValue: t, minValue: T = 1, step: r = 1 }) {
59
+ _GuCounter({ name: e, maxValue: T, minValue: n = 1, step: r = 1 }) {
60
60
  return `
61
61
  <${$.COUNTER}
62
- ${e.COUNTER.name}="${E}"
63
- ${e.COUNTER.minValue}="${T}"
64
- ${e.COUNTER.maxValue}="${t}"
65
- ${e.COUNTER.step}="${r}">
62
+ ${t.COUNTER.name}="${e}"
63
+ ${t.COUNTER.minValue}="${n}"
64
+ ${t.COUNTER.maxValue}="${T}"
65
+ ${t.COUNTER.step}="${r}">
66
66
  </${$.COUNTER}>
67
67
  `;
68
68
  }
69
- _GuButton({ name: E, label: t, id: T = "" }) {
69
+ _GuButton({ name: e, label: T, id: n = "" }) {
70
70
  return `
71
71
  <${$.BUTTON}
72
- ${e.BUTTON.name}="${E}"
73
- ${T ? `id="${T}"` : ""}
74
- ${e.BUTTON.caption}="${t}"}>
72
+ ${t.BUTTON.name}="${e}"
73
+ ${n ? `id="${n}"` : ""}
74
+ ${t.BUTTON.caption}="${T}"}>
75
75
  </${$.BUTTON}>
76
76
  `;
77
77
  }
@@ -80,105 +80,23 @@ class N extends R {
80
80
  * @param param0
81
81
  * @returns It returns a button with an icon.
82
82
  */
83
- _GuIconButton({ name: E, icon: t, className: T = "" }) {
83
+ _GuIconButton({ name: e, icon: T, className: n = "" }) {
84
84
  return `
85
85
  <${$.BUTTON}
86
- class="${T}"
87
- ${e.BUTTON.name}="${E}"
88
- ${e.BUTTON.icon}="${t}">
86
+ class="${n}"
87
+ ${t.BUTTON.name}="${e}"
88
+ ${t.BUTTON.icon}="${T}">
89
89
  </${$.BUTTON}>
90
90
  `;
91
91
  }
92
- _GuTwoColumns(E) {
92
+ _GuTwoColumns(e) {
93
93
  return `
94
94
  <div class="checkbox-select-container container two-columns">
95
- ${E.join("")}
95
+ ${e.join("")}
96
96
  </div>
97
97
  `;
98
98
  }
99
- /**
100
- * Creates an orderable (sortable) list control
101
- * @param name - The control name for value binding
102
- * @param items - Array of item keys/values
103
- * @param itemLabels - Optional array of objects with key and label properties for display
104
- * @returns HTML string for the orderable control
105
- */
106
- _GuOrderable(E, t) {
107
- let T = "";
108
- t.forEach((O) => {
109
- const L = e.ORDERABLE_ITEM && "name" in e.ORDERABLE_ITEM ? e.ORDERABLE_ITEM.name : "name";
110
- T += `
111
- <${$.ORDERABLE_ITEM} ${L}="${O.key}">
112
- ${O.content}
113
- </${$.ORDERABLE_ITEM}>
114
- `;
115
- });
116
- const r = e.ORDERABLE && "name" in e.ORDERABLE ? e.ORDERABLE.name : "name";
117
- return `
118
- <${$.ORDERABLE} ${r}="${E}">
119
- ${T}
120
- </${$.ORDERABLE}>
121
- `;
122
- }
123
- _GuNestedControl(E, t) {
124
- return `
125
- <${$.NESTED_CONTROL} ${e.NESTED_CONTROL.controlId}="${E}">
126
- ${t}
127
- </${$.NESTED_CONTROL}>
128
- `;
129
- }
130
- _GuExpandable(E, t) {
131
- return `
132
- <${$.EXPANDABLE}>
133
- <${$.EXPANDABLE_HEADER}>
134
- <${$.LABEL} ${e.LABEL.text}="${E}"></${$.LABEL}>
135
- </${$.EXPANDABLE_HEADER}>
136
- <${$.EXPANDABLE_CONTENT}>
137
-
138
- ${t}
139
-
140
- </${$.EXPANDABLE_CONTENT}>
141
- </${$.EXPANDABLE}>
142
- `;
143
- }
144
- _GuColorPicker(E) {
145
- return `
146
- <${$.COLOR}
147
- ${e.COLOR.name}="${E}">
148
- </${$.COLOR}>
149
- `;
150
- }
151
- _GuFontFamily(E, t = "Select Font") {
152
- return `
153
- <${$.FONT_FAMILY_SELECT}
154
- ${e.FONT_FAMILY_SELECT.name}="${E}"
155
- ${e.FONT_FAMILY_SELECT.placeholder}="${t}">
156
- </${$.FONT_FAMILY_SELECT}>
157
- `;
158
- }
159
- _GuRadioButtons(E, t) {
160
- const T = t.map((r) => `
161
- <${$.RADIO_ITEM}
162
- ${e.RADIO_ITEM.text}="${r.text}"
163
- ${e.RADIO_ITEM.value}="${r.value}">
164
- </${$.RADIO_ITEM}>
165
- `).join("");
166
- return `
167
- <${$.RADIO_BUTTONS}
168
- ${e.RADIO_BUTTONS.name}="${E}">
169
- ${T}
170
- </${$.RADIO_BUTTONS}>
171
- `;
172
- }
173
- _GuCheckbox(E, t) {
174
- return `
175
- <${$.CHECKBOX}
176
- ${e.CHECKBOX.name}="${E}"
177
- ${e.CHECKBOX.caption}="${t}">
178
- </${$.CHECKBOX}>
179
- `;
180
- }
181
99
  }
182
100
  export {
183
- N as CommonControl
101
+ L as CommonControl
184
102
  };
@@ -1,33 +1,27 @@
1
- var d = Object.defineProperty;
2
- var m = (t, e, n) => e in t ? d(t, e, { enumerable: !0, configurable: !0, writable: !0, value: n }) : t[e] = n;
3
- var c = (t, e, n) => m(t, typeof e != "symbol" ? e + "" : e, n);
4
- class C {
1
+ var i = Object.defineProperty;
2
+ var d = (t, e, n) => e in t ? i(t, e, { enumerable: !0, configurable: !0, writable: !0, value: n }) : t[e] = n;
3
+ var a = (t, e, n) => d(t, typeof e != "symbol" ? e + "" : e, n);
4
+ class y {
5
5
  constructor() {
6
- c(this, "selectedDynamicContent", null);
7
- c(this, "dataSelectCallback", () => {
6
+ a(this, "selectedDynamicContent", null);
7
+ a(this, "dataSelectCallback", () => {
8
8
  });
9
- c(this, "closeDynamicContentHandler", null);
10
9
  }
11
- /**
12
- * Opens the merge tags library modal
13
- * @param dynamicContent - Currently selected dynamic content (if any)
14
- * @param onDataSelectCallback - Callback invoked when user selects a merge tag
15
- * @param position - Optional position data to place the modal
16
- */
17
- openMergeTagsLibrary(e, n, l) {
18
- this.closeDynamicContentHandler && (document.removeEventListener("dynamic-content:close", this.closeDynamicContentHandler), this.closeDynamicContentHandler = null), this.dataSelectCallback = n, this.selectedDynamicContent = e;
19
- const o = {
20
- attribute: e,
21
- position: l
22
- }, s = new CustomEvent("dynamic-content:open", {
23
- detail: o
10
+ openMergeTagsLibrary(e, n) {
11
+ this.dataSelectCallback = n, this.selectedDynamicContent = e;
12
+ const s = new CustomEvent("dynamic-content:open", {
13
+ detail: {
14
+ attribute: e
15
+ }
24
16
  });
25
- document.dispatchEvent(s), this.closeDynamicContentHandler = (i) => {
26
- const a = i.detail;
27
- this.selectedDynamicContent = a, a.text && a.value && this.dataSelectCallback(a);
28
- }, document.addEventListener("dynamic-content:close", this.closeDynamicContentHandler);
17
+ document.dispatchEvent(s);
18
+ const o = (l) => {
19
+ const c = l.detail;
20
+ this.selectedDynamicContent = c, c.text && c.value && this.dataSelectCallback(c), document.removeEventListener("dynamic-content:close", o);
21
+ };
22
+ document.addEventListener("dynamic-content:close", o);
29
23
  }
30
24
  }
31
25
  export {
32
- C as ExternalMergeTagsLibrary
26
+ y as ExternalMergeTagsLibrary
33
27
  };
@@ -1,156 +1,61 @@
1
- var c = Object.defineProperty;
2
- var g = (o, s, t) => s in o ? c(o, s, { enumerable: !0, configurable: !0, writable: !0, value: t }) : o[s] = t;
3
- var r = (o, s, t) => g(o, typeof s != "symbol" ? s + "" : s, t);
4
- import { mergeTagToDynamicContent as d, dynamicContentToMergeTags as m } from "../../utils/genericUtil.js";
5
- import { UIElement as u, UIElementType as a, UEAttr as h, UIElementTagRegistry as T } from "../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
6
- import { ExternalMergeTagsLibrary as y } from "./dynamic-content-modal.js";
7
- const l = "external-dynamic-content-ui-element", C = "button-add-dynamic-content";
8
- class p extends T {
9
- registerUiElements(s) {
10
- s[a.MERGETAGS] = l;
1
+ var o = Object.defineProperty;
2
+ var g = (n, t, e) => t in n ? o(n, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : n[t] = e;
3
+ var i = (n, t, e) => g(n, typeof t != "symbol" ? t + "" : t, e);
4
+ import { dynamicContentToMergeTags as m } from "../../utils/genericUtil.js";
5
+ import { UIElement as c, UIElementType as r, UEAttr as l, UIElementTagRegistry as d } from "../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
6
+ import { ExternalMergeTagsLibrary as T } from "./dynamic-content-modal.js";
7
+ const a = "external-dynamic-content-ui-element", y = "button-add-dynamic-content";
8
+ class p extends d {
9
+ registerUiElements(t) {
10
+ t[r.MERGETAGS] = a;
11
11
  }
12
12
  }
13
- class b extends u {
13
+ class C extends c {
14
14
  constructor() {
15
15
  super(...arguments);
16
- r(this, "mergeTagsButton", null);
17
- r(this, "mergeTagsLibrary", null);
18
- r(this, "clickListener", null);
19
- r(this, "lastClickedElement", null);
20
- r(this, "lastClickedFrame", null);
21
- r(this, "mousedownListener", null);
16
+ i(this, "mergeTagsButton", null);
17
+ i(this, "listener", () => {
18
+ });
19
+ i(this, "mergeTagsLibrary", null);
20
+ i(this, "selectedDynamicContent", { value: "", text: "" });
22
21
  }
23
22
  getId() {
24
- return l;
23
+ return a;
25
24
  }
26
- onRender(t) {
27
- var e;
28
- this.mergeTagsButton = t.querySelector("#guido__btn-add-dynamic-content"), this.clickListener = this._onClick.bind(this), (e = this.mergeTagsButton) == null || e.addEventListener("click", this.clickListener), this._setupCoordinateTracking();
25
+ onRender(e) {
26
+ var s;
27
+ this.listener = this._onClick.bind(this), this.mergeTagsButton = e.querySelector("#guido__btn-add-dynamic-content"), (s = this.mergeTagsButton) == null || s.addEventListener("click", this.listener);
29
28
  }
30
29
  onDestroy() {
31
- var t;
32
- this.clickListener && ((t = this.mergeTagsButton) == null || t.removeEventListener("click", this.clickListener)), this._cleanupCoordinateTracking(), this.mergeTagsButton = null, this.clickListener = null, this.lastClickedElement = null, this.lastClickedFrame = null;
30
+ var e;
31
+ (e = this.mergeTagsButton) == null || e.removeEventListener("click", this.listener);
33
32
  }
34
33
  _onClick() {
35
34
  this.openMergeTagLibrary();
36
35
  }
37
- /**
38
- * Called when Stripo detects merge tag interactions
39
- * This is the key method that receives notifications about merge tag clicks
40
- * @param name - Attribute name (e.g., 'mergeTag')
41
- * @param value - MergeTag object with label, value, selStart, selEnd, etc.
42
- */
43
- onAttributeUpdated(t, e) {
44
- if (t !== "mergeTag" || !(e != null && e.value))
45
- return;
46
- const n = d(e), i = this._getLastClickedPosition();
47
- this.lastClickedElement = null, this.lastClickedFrame = null, this._openDynamicContentLibrary(n, i);
48
- }
49
36
  openMergeTagLibrary() {
50
- const t = this._getButtonPosition(), e = { value: "", text: "" };
51
- this._openDynamicContentLibrary(e, t);
52
- }
53
- /**
54
- * Opens the dynamic content library for external apps
55
- * Dispatches event with dynamic content data and position
56
- */
57
- _openDynamicContentLibrary(t, e) {
58
- this.mergeTagsLibrary || (this.mergeTagsLibrary = new y()), this.mergeTagsLibrary.openMergeTagsLibrary(
59
- t,
60
- (n) => {
61
- n.text && n.value ? this.api.triggerValueChange(m([n])[0]) : this.api.triggerValueChange(null);
62
- },
63
- e
37
+ this.mergeTagsLibrary || (this.mergeTagsLibrary = new T()), this.mergeTagsLibrary.openMergeTagsLibrary(
38
+ this.selectedDynamicContent,
39
+ (e) => {
40
+ this.api.onValueChanged(m([e])[0]);
41
+ }
64
42
  );
65
43
  }
66
- /**
67
- * Gets the button's position on the screen
68
- * Used to position the modal or anything else near the button
69
- */
70
- _getButtonPosition() {
71
- if (!this.mergeTagsButton)
72
- return { x: 0, y: 0, width: 0, height: 0 };
73
- const { x: t, y: e, width: n, height: i } = this.mergeTagsButton.getBoundingClientRect();
74
- return { x: t, y: e, width: n, height: i };
75
- }
76
- /**
77
- * Sets up coordinate tracking for merge tag clicks in the iframe
78
- * Workaround from Stripo intercepting click events - tracks mousedown events instead
79
- */
80
- _setupCoordinateTracking() {
81
- var e;
82
- const t = this._getEditorFrame();
83
- (e = t == null ? void 0 : t.contentWindow) != null && e.document && (this.mousedownListener = (n) => {
84
- const i = this._findMergeTagElement(n.target);
85
- i && (this.lastClickedElement = i, this.lastClickedFrame = t);
86
- }, t.contentWindow.document.addEventListener("mousedown", this.mousedownListener));
87
- }
88
- /**
89
- * Gets the editor iframe element
90
- */
91
- _getEditorFrame() {
92
- var n;
93
- const t = document.querySelector("ui-editor");
94
- if (!(t != null && t.shadowRoot))
95
- return null;
96
- const e = t.shadowRoot.querySelector("iframe");
97
- return (n = e == null ? void 0 : e.contentWindow) != null && n.document ? e : null;
98
- }
99
- /**
100
- * Finds merge tag element in the element tree
101
- */
102
- _findMergeTagElement(t) {
103
- return t.closest(".target, .esd-merge-tag");
104
- }
105
- /**
106
- * Gets the position of the last clicked element, calculated on-demand
107
- * This ensures we always use the correct element's position even with rapid clicks
108
- */
109
- _getLastClickedPosition() {
110
- if (!(!this.lastClickedElement || !this.lastClickedFrame))
111
- return this._calculateAbsolutePosition(this.lastClickedFrame, this.lastClickedElement);
112
- }
113
- /**
114
- * Calculates absolute position of element relative to page
115
- */
116
- _calculateAbsolutePosition(t, e) {
117
- const n = t.getBoundingClientRect(), i = e.getBoundingClientRect();
118
- return {
119
- x: n.x + i.x,
120
- y: n.y + i.y,
121
- width: i.width,
122
- height: i.height
123
- };
124
- }
125
- /**
126
- * Cleans up the coordinate tracking event listener
127
- */
128
- _cleanupCoordinateTracking() {
129
- var e;
130
- if (!this.mousedownListener)
131
- return;
132
- const t = this._getEditorFrame();
133
- (e = t == null ? void 0 : t.contentWindow) != null && e.document && t.contentWindow.document.removeEventListener("mousedown", this.mousedownListener), this.mousedownListener = null;
134
- }
135
- /**
136
- * Returns the HTML template for the "Add Dynamic Content" button
137
- * This button is placed in the merge tags selector UI
138
- */
139
44
  getTemplate() {
140
45
  return `
141
46
  <div>
142
- <${a.BUTTON}
47
+ <${r.BUTTON}
143
48
  id="guido__btn-add-dynamic-content"
144
49
  class="btn btn-primary"
145
- ${h.BUTTON.name}="${C}">
146
- <${a.ICON} src="plus" class="icon icon-button color-primary">
147
- </${a.ICON}>
50
+ ${l.BUTTON.name}="${y}">
51
+ <${r.ICON} src="plus" class="icon icon-button color-primary">
52
+ </${r.ICON}>
148
53
  ${this.api.translate("Add Dynamic Content")}
149
- </${a.BUTTON}>
54
+ </${r.BUTTON}>
150
55
  </div>`;
151
56
  }
152
57
  }
153
58
  export {
154
59
  p as DynamicContentTagRegistry,
155
- b as DynamicContentUiElementExtension
60
+ C as DynamicContentUiElementExtension
156
61
  };