@useinsider/guido 1.0.3-beta.2f6a74d → 1.0.3-beta.2f9ae0f

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 (193) hide show
  1. package/README.md +5 -0
  2. package/dist/components/Guido.vue.js +1 -1
  3. package/dist/components/Guido.vue2.js +64 -61
  4. package/dist/components/organisms/onboarding/ItemsOnboarding.vue.js +21 -0
  5. package/dist/components/organisms/onboarding/ItemsOnboarding.vue2.js +99 -0
  6. package/dist/components/organisms/onboarding/OnboardingWrapper.vue2.js +20 -18
  7. package/dist/composables/useActionsApi.js +1 -1
  8. package/dist/composables/useBlocksConfig.js +1 -2
  9. package/dist/composables/useHtmlCompiler.js +15 -13
  10. package/dist/composables/useHtmlValidator.js +36 -35
  11. package/dist/composables/useStripo.js +47 -41
  12. package/dist/config/compiler/itemsCompilerRules.js +14 -0
  13. package/dist/enums/defaults.js +2 -1
  14. package/dist/enums/extensions/recommendationBlock.js +2 -2
  15. package/dist/enums/onboarding.js +7 -3
  16. package/dist/extensions/Blocks/Checkbox/block.js +5 -2
  17. package/dist/extensions/Blocks/Checkbox/control.js +15 -14
  18. package/dist/extensions/Blocks/Checkbox/template.js +14 -9
  19. package/dist/extensions/Blocks/Items/block.js +67 -0
  20. package/dist/extensions/Blocks/Items/controls/button/link.js +68 -0
  21. package/dist/extensions/Blocks/Items/controls/cardComposition.js +193 -0
  22. package/dist/extensions/Blocks/Items/controls/image/link.js +68 -0
  23. package/dist/extensions/Blocks/Items/controls/index.js +217 -0
  24. package/dist/extensions/Blocks/Items/controls/name/trimming.js +70 -0
  25. package/dist/extensions/Blocks/Items/controls/price/currencyLocation.js +107 -0
  26. package/dist/extensions/Blocks/Items/controls/price/currencySymbol.js +123 -0
  27. package/dist/extensions/Blocks/Items/controls/price/formattedPrice.js +76 -0
  28. package/dist/extensions/Blocks/Items/controls/price/hideDiscount.js +61 -0
  29. package/dist/extensions/Blocks/Items/controls/settingsControl.js +316 -0
  30. package/dist/extensions/Blocks/Items/enums/controlEnums.js +5 -0
  31. package/dist/extensions/Blocks/Items/enums/productEnums.js +273 -0
  32. package/dist/extensions/Blocks/Items/enums/settingsEnums.js +77 -0
  33. package/dist/extensions/Blocks/Items/extension.js +19 -0
  34. package/dist/extensions/Blocks/Items/iconsRegistry.js +32 -0
  35. package/dist/extensions/Blocks/Items/items.css.js +23 -0
  36. package/dist/extensions/Blocks/Items/layouts/horizontal.html.js +62 -0
  37. package/dist/extensions/Blocks/Items/layouts/vertical.html.js +60 -0
  38. package/dist/extensions/Blocks/Items/settingsPanel.js +131 -0
  39. package/dist/extensions/Blocks/Items/store/items-block.js +71 -0
  40. package/dist/extensions/Blocks/Items/template.js +195 -0
  41. package/dist/extensions/Blocks/Items/utils/configBlockUtils.js +17 -0
  42. package/dist/extensions/Blocks/Items/utils/syncAttributeFromConfigBlock.js +28 -0
  43. package/dist/extensions/Blocks/Items/utils/syncAttributesFromConfigBlock.js +67 -0
  44. package/dist/extensions/Blocks/Items/utils/updateAttributes.js +44 -0
  45. package/dist/extensions/Blocks/RadioButton/block.js +5 -2
  46. package/dist/extensions/Blocks/RadioButton/control.js +18 -17
  47. package/dist/extensions/Blocks/RadioButton/template.js +18 -9
  48. package/dist/extensions/Blocks/Recommendation/iconsRegistry.js +43 -43
  49. package/dist/extensions/Blocks/Recommendation/store/recommendation.js +1 -1
  50. package/dist/extensions/Blocks/Unsubscribe/block.js +45 -41
  51. package/dist/extensions/Blocks/common-control.js +174 -110
  52. package/dist/extensions/Blocks/controlFactories.js +223 -0
  53. package/dist/extensions/DynamicContent/dynamic-content-modal.js +25 -19
  54. package/dist/extensions/DynamicContent/dynamic-content.js +128 -33
  55. package/dist/guido.css +1 -1
  56. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js +213 -168
  57. package/dist/node_modules/lodash-es/_DataView.js +6 -0
  58. package/dist/node_modules/lodash-es/_Promise.js +6 -0
  59. package/dist/node_modules/lodash-es/_Set.js +6 -0
  60. package/dist/node_modules/lodash-es/_SetCache.js +13 -0
  61. package/dist/node_modules/lodash-es/_WeakMap.js +6 -0
  62. package/dist/node_modules/lodash-es/_arrayFilter.js +10 -0
  63. package/dist/node_modules/lodash-es/_arrayLikeKeys.js +13 -12
  64. package/dist/node_modules/lodash-es/_arrayMap.js +8 -0
  65. package/dist/node_modules/lodash-es/_arrayPush.js +8 -0
  66. package/dist/node_modules/lodash-es/_arraySome.js +9 -0
  67. package/dist/node_modules/lodash-es/_baseEach.js +6 -0
  68. package/dist/node_modules/lodash-es/_baseFlatten.js +13 -0
  69. package/dist/node_modules/lodash-es/_baseForOwn.js +8 -0
  70. package/dist/node_modules/lodash-es/_baseGet.js +11 -0
  71. package/dist/node_modules/lodash-es/_baseGetAllKeys.js +9 -0
  72. package/dist/node_modules/lodash-es/_baseHasIn.js +6 -0
  73. package/dist/node_modules/lodash-es/_baseIsEqual.js +8 -0
  74. package/dist/node_modules/lodash-es/_baseIsEqualDeep.js +32 -0
  75. package/dist/node_modules/lodash-es/_baseIsMatch.js +29 -0
  76. package/dist/node_modules/lodash-es/_baseIteratee.js +11 -0
  77. package/dist/node_modules/lodash-es/_baseKeys.js +14 -0
  78. package/dist/node_modules/lodash-es/_baseMap.js +11 -0
  79. package/dist/node_modules/lodash-es/_baseMatches.js +12 -0
  80. package/dist/node_modules/lodash-es/_baseMatchesProperty.js +17 -0
  81. package/dist/node_modules/lodash-es/_baseProperty.js +8 -0
  82. package/dist/node_modules/lodash-es/_basePropertyDeep.js +9 -0
  83. package/dist/node_modules/lodash-es/_baseRange.js +9 -0
  84. package/dist/node_modules/lodash-es/_baseToString.js +18 -0
  85. package/dist/node_modules/lodash-es/_baseTrim.js +8 -0
  86. package/dist/node_modules/lodash-es/_cacheHas.js +6 -0
  87. package/dist/node_modules/lodash-es/_castPath.js +10 -0
  88. package/dist/node_modules/lodash-es/_createBaseEach.js +15 -0
  89. package/dist/node_modules/lodash-es/_createRange.js +11 -0
  90. package/dist/node_modules/lodash-es/_equalArrays.js +40 -0
  91. package/dist/node_modules/lodash-es/_equalByTag.js +45 -0
  92. package/dist/node_modules/lodash-es/_equalObjects.js +36 -0
  93. package/dist/node_modules/lodash-es/_getAllKeys.js +9 -0
  94. package/dist/node_modules/lodash-es/_getMatchData.js +12 -0
  95. package/dist/node_modules/lodash-es/_getSymbols.js +10 -0
  96. package/dist/node_modules/lodash-es/_getTag.js +28 -0
  97. package/dist/node_modules/lodash-es/_hasPath.js +19 -0
  98. package/dist/node_modules/lodash-es/_isFlattenable.js +10 -0
  99. package/dist/node_modules/lodash-es/_isKey.js +12 -0
  100. package/dist/node_modules/lodash-es/_isStrictComparable.js +7 -0
  101. package/dist/node_modules/lodash-es/_mapToArray.js +9 -0
  102. package/dist/node_modules/lodash-es/_matchesStrictComparable.js +8 -0
  103. package/dist/node_modules/lodash-es/_memoizeCapped.js +11 -0
  104. package/dist/node_modules/lodash-es/_nativeKeys.js +5 -0
  105. package/dist/node_modules/lodash-es/_setCacheAdd.js +7 -0
  106. package/dist/node_modules/lodash-es/_setCacheHas.js +6 -0
  107. package/dist/node_modules/lodash-es/_setToArray.js +9 -0
  108. package/dist/node_modules/lodash-es/_stringToPath.js +10 -0
  109. package/dist/node_modules/lodash-es/_toKey.js +10 -0
  110. package/dist/node_modules/lodash-es/_trimmedEndIndex.js +9 -0
  111. package/dist/node_modules/lodash-es/flatMap.js +8 -0
  112. package/dist/node_modules/lodash-es/get.js +8 -0
  113. package/dist/node_modules/lodash-es/hasIn.js +8 -0
  114. package/dist/node_modules/lodash-es/isSymbol.js +9 -0
  115. package/dist/node_modules/lodash-es/keys.js +9 -0
  116. package/dist/node_modules/lodash-es/keysIn.js +3 -3
  117. package/dist/node_modules/lodash-es/map.js +11 -0
  118. package/dist/node_modules/lodash-es/property.js +10 -0
  119. package/dist/node_modules/lodash-es/range.js +5 -0
  120. package/dist/node_modules/lodash-es/stubArray.js +6 -0
  121. package/dist/node_modules/lodash-es/toFinite.js +14 -0
  122. package/dist/node_modules/lodash-es/toNumber.js +22 -0
  123. package/dist/node_modules/lodash-es/toString.js +7 -0
  124. package/dist/package.json.js +1 -1
  125. package/dist/services/recommendationApi.js +13 -19
  126. package/dist/src/@types/generic.d.ts +27 -6
  127. package/dist/src/components/Guido.vue.d.ts +2 -2
  128. package/dist/src/components/organisms/onboarding/ItemsOnboarding.vue.d.ts +2 -0
  129. package/dist/src/config/compiler/itemsCompilerRules.d.ts +2 -0
  130. package/dist/src/enums/onboarding.d.ts +4 -0
  131. package/dist/src/extensions/Blocks/Checkbox/block.d.ts +1 -0
  132. package/dist/src/extensions/Blocks/Checkbox/template.d.ts +1 -1
  133. package/dist/src/extensions/Blocks/Items/block.d.ts +27 -0
  134. package/dist/src/extensions/Blocks/Items/controls/button/link.d.ts +14 -0
  135. package/dist/src/extensions/Blocks/Items/controls/cardComposition.d.ts +33 -0
  136. package/dist/src/extensions/Blocks/Items/controls/image/link.d.ts +14 -0
  137. package/dist/src/extensions/Blocks/Items/controls/index.d.ts +501 -0
  138. package/dist/src/extensions/Blocks/Items/controls/name/trimming.d.ts +14 -0
  139. package/dist/src/extensions/Blocks/Items/controls/price/currencyLocation.d.ts +19 -0
  140. package/dist/src/extensions/Blocks/Items/controls/price/currencySymbol.d.ts +21 -0
  141. package/dist/src/extensions/Blocks/Items/controls/price/formattedPrice.d.ts +14 -0
  142. package/dist/src/extensions/Blocks/Items/controls/price/hideDiscount.d.ts +13 -0
  143. package/dist/src/extensions/Blocks/Items/controls/settingsControl.d.ts +48 -0
  144. package/dist/src/extensions/Blocks/Items/enums/controlEnums.d.ts +61 -0
  145. package/dist/src/extensions/Blocks/Items/enums/productEnums.d.ts +162 -0
  146. package/dist/src/extensions/Blocks/Items/enums/settingsEnums.d.ts +50 -0
  147. package/dist/src/extensions/Blocks/Items/extension.d.ts +2 -0
  148. package/dist/src/extensions/Blocks/Items/iconsRegistry.d.ts +4 -0
  149. package/dist/src/extensions/Blocks/Items/settingsPanel.d.ts +4 -0
  150. package/dist/src/extensions/Blocks/Items/store/items-block.d.ts +41 -0
  151. package/dist/src/extensions/Blocks/Items/template.d.ts +24 -0
  152. package/dist/src/extensions/Blocks/Items/utils/configBlockUtils.d.ts +23 -0
  153. package/dist/src/extensions/Blocks/Items/utils/syncAttributeFromConfigBlock.d.ts +32 -0
  154. package/dist/src/extensions/Blocks/Items/utils/syncAttributesFromConfigBlock.d.ts +44 -0
  155. package/dist/src/extensions/Blocks/Items/utils/updateAttributes.d.ts +8 -0
  156. package/dist/src/extensions/Blocks/RadioButton/block.d.ts +1 -0
  157. package/dist/src/extensions/Blocks/RadioButton/template.d.ts +1 -1
  158. package/dist/src/extensions/Blocks/Recommendation/store/recommendation.d.ts +1 -1
  159. package/dist/src/extensions/Blocks/Unsubscribe/block.d.ts +3 -4
  160. package/dist/src/extensions/Blocks/common-control.d.ts +44 -7
  161. package/dist/src/extensions/Blocks/controlFactories.d.ts +312 -0
  162. package/dist/src/extensions/DynamicContent/dynamic-content-modal.d.ts +9 -2
  163. package/dist/src/extensions/DynamicContent/dynamic-content.d.ts +52 -2
  164. package/dist/src/stores/config.d.ts +3 -2
  165. package/dist/src/stores/dynamic-content.d.ts +3 -3
  166. package/dist/src/stores/editor.d.ts +1 -1
  167. package/dist/src/stores/onboarding.d.ts +335 -1
  168. package/dist/src/stores/preview.d.ts +1 -1
  169. package/dist/src/stores/recommendation.d.ts +1 -1
  170. package/dist/src/stores/save-as-template.d.ts +1 -1
  171. package/dist/src/stores/toaster.d.ts +1 -1
  172. package/dist/src/stores/unsubscribe.d.ts +1 -1
  173. package/dist/src/stores/version-history.d.ts +1 -1
  174. package/dist/src/utils/environmentUtil.d.ts +2 -5
  175. package/dist/src/utils/genericUtil.d.ts +1 -0
  176. package/dist/src/utils/pairProductVariables.d.ts +7 -0
  177. package/dist/static/styles/customEditorStyle.css.js +1 -1
  178. package/dist/stores/config.js +5 -5
  179. package/dist/stores/dynamic-content.js +2 -2
  180. package/dist/stores/editor.js +1 -1
  181. package/dist/stores/onboarding.js +44 -36
  182. package/dist/stores/preview.js +1 -1
  183. package/dist/stores/recommendation.js +3 -3
  184. package/dist/stores/save-as-template.js +2 -2
  185. package/dist/stores/toaster.js +1 -1
  186. package/dist/stores/unsubscribe.js +1 -1
  187. package/dist/stores/version-history.js +4 -4
  188. package/dist/utils/environmentUtil.js +2 -4
  189. package/dist/utils/genericUtil.js +18 -8
  190. package/dist/utils/pairProductVariables.js +136 -0
  191. package/package.json +4 -4
  192. package/dist/enums/environment.js +0 -5
  193. package/dist/src/enums/environment.d.ts +0 -5
package/README.md CHANGED
@@ -198,6 +198,7 @@ interface GuidoConfig {
198
198
  saveAsTemplate: boolean;
199
199
  versionHistory: boolean;
200
200
  testMessage: boolean;
201
+ displayConditions: boolean;
201
202
  };
202
203
  blocks?: {
203
204
  excludeDefaults?: GuidoBlockType[];
@@ -216,6 +217,7 @@ interface GuidoConfig {
216
217
  | `features.dynamicContent` | `boolean` | `true` | Enable dynamic content insertion feature |
217
218
  | `features.saveAsTemplate` | `boolean` | `true` | Enable save as template feature |
218
219
  | `features.versionHistory` | `boolean` | `true` | Enable version history feature |
220
+ | `features.displayConditions` | `boolean` | `true` | Enable display conditions |
219
221
  | `blocks` | `BlocksConfig` | `{ excludeDefaults: [], includeCustoms: [] }` | Block configuration for excluding default blocks and including custom blocks. See [Blocks Configuration](#-blocks-configuration) section below |
220
222
  | `blocks.excludeDefaults` | `GuidoBlockType[]` | `[]` | Array of default Stripo blocks to exclude from the editor |
221
223
  | `blocks.includeCustoms` | `GuidoCustomBlockType[]` | `[]` | Array of custom blocks to include in the editor |
@@ -598,6 +600,9 @@ Create a `.env` file with the following variables: (You can get env variables fr
598
600
  VITE_STRIPO_PLUGIN_ID=your_plugin_id
599
601
  VITE_STRIPO_SECRET_KEY=your_secret_key
600
602
  VITE_STRIPO_ROLE=your_role
603
+
604
+ # Playwright Test Configuration (Optional - for local debugging only)
605
+ HEADED=false # Set to 'true' to run tests with visible browser
601
606
  ```
602
607
 
603
608
  ### Project Structure
@@ -12,7 +12,7 @@ var t = function() {
12
12
  n,
13
13
  !1,
14
14
  null,
15
- "e299731b"
15
+ "23c413c9"
16
16
  );
17
17
  const v = s.exports;
18
18
  export {
@@ -1,23 +1,23 @@
1
- import { defineComponent as R, defineAsyncComponent as G, ref as x, computed as I, watch as M, onMounted as z, onUnmounted as B } from "vue";
2
- import { provideGuidoActions as K } from "../composables/useGuidoActions.js";
3
- import { usePartner as O } from "../composables/usePartner.js";
4
- import { useStripo as j } from "../composables/useStripo.js";
5
- import { migrate as U } from "../config/migrator/index.js";
6
- import { DefaultUsername as q, DefaultMessageType as J, DefaultGuidoConfig as Q } from "../enums/defaults.js";
7
- import V from "./organisms/base/Toaster.vue.js";
8
- import X from "./organisms/extensions/recommendation/FilterSelectionDrawer.vue.js";
9
- import Y from "./organisms/header/HeaderWrapper.vue.js";
10
- import Z from "./organisms/LoadingWrapper.vue.js";
11
- import $ from "./organisms/save-as-template/SaveAsTemplateDrawer.vue.js";
12
- import ee from "./organisms/unsubscribe/UnsubscribeWrapper.vue.js";
13
- import { useStripoApi as oe } from "../services/stripoApi.js";
14
- import { useConfigStore as te } from "../stores/config.js";
15
- import { useDynamicContentStore as ne } from "../stores/dynamic-content.js";
16
- import { useEditorStore as re } from "../stores/editor.js";
17
- import { usePreviewStore as ie } from "../stores/preview.js";
18
- import { useUnsubscribeStore as se } from "../stores/unsubscribe.js";
19
- import ae from "../node_modules/lodash-es/merge.js";
20
- const ke = /* @__PURE__ */ R({
1
+ import { defineComponent as O, defineAsyncComponent as I, ref as z, computed as U, watch as B, onMounted as K, onUnmounted as j } from "vue";
2
+ import { provideGuidoActions as q } from "../composables/useGuidoActions.js";
3
+ import { usePartner as J } from "../composables/usePartner.js";
4
+ import { useStripo as Q } from "../composables/useStripo.js";
5
+ import { migrate as L } from "../config/migrator/index.js";
6
+ import { DefaultUsername as V, DefaultMessageType as X, DefaultGuidoConfig as Y } from "../enums/defaults.js";
7
+ import Z from "./organisms/base/Toaster.vue.js";
8
+ import $ from "./organisms/extensions/recommendation/FilterSelectionDrawer.vue.js";
9
+ import ee from "./organisms/header/HeaderWrapper.vue.js";
10
+ import oe from "./organisms/LoadingWrapper.vue.js";
11
+ import te from "./organisms/save-as-template/SaveAsTemplateDrawer.vue.js";
12
+ import ne from "./organisms/unsubscribe/UnsubscribeWrapper.vue.js";
13
+ import { useStripoApi as re } from "../services/stripoApi.js";
14
+ import { useConfigStore as ie } from "../stores/config.js";
15
+ import { useDynamicContentStore as se } from "../stores/dynamic-content.js";
16
+ import { useEditorStore as ae } from "../stores/editor.js";
17
+ import { usePreviewStore as ce } from "../stores/preview.js";
18
+ import { useUnsubscribeStore as me } from "../stores/unsubscribe.js";
19
+ import de from "../node_modules/lodash-es/merge.js";
20
+ const Ue = /* @__PURE__ */ O({
21
21
  __name: "Guido",
22
22
  props: {
23
23
  templateId: null,
@@ -33,45 +33,45 @@ const ke = /* @__PURE__ */ R({
33
33
  },
34
34
  emits: ["dynamic-content:open", "back", "save:start", "save:complete", "on-change", "ready", "onboarding:finished", "test-email:click"],
35
35
  setup(W, { expose: _, emit: o }) {
36
- const l = W, L = G(
36
+ const u = W, A = I(
37
37
  () => import("./organisms/email-preview/PreviewContainer.vue.js")
38
- ), A = G(
38
+ ), N = I(
39
39
  () => import("./organisms/onboarding/OnboardingWrapper.vue.js")
40
- ), u = x(), i = ne(), p = se(), g = te(), s = re(), N = ie(), n = I(() => s.hasChanges), { getPartnerName: f, getProductType: y, isTestPartner: F } = O(), v = () => {
40
+ ), p = z(), i = se(), g = me(), f = ie(), s = ae(), F = ce(), n = U(() => s.hasChanges), { getPartnerName: y, getProductType: v, isTestPartner: H } = J(), b = () => {
41
41
  var e;
42
- return (e = u.value) == null ? void 0 : e.handleSave(!0);
42
+ return (e = p.value) == null ? void 0 : e.handleSave(!0);
43
43
  }, {
44
44
  templateId: a,
45
- userId: b,
46
- guidoConfig: C,
45
+ userId: C,
46
+ guidoConfig: h,
47
47
  templateConfig: t,
48
48
  html: r = "",
49
- css: h = "",
50
- partnerName: c = f(),
51
- productType: d = y(),
52
- messageType: S = J,
53
- username: w = q
54
- } = l, m = (t == null ? void 0 : t.preselectedDynamicContentList) || [];
55
- s.templateId = a, window.GuidoConfig = ae(Q, C), window.GuidoConfig.partner = {
49
+ css: S = "",
50
+ partnerName: c = y(),
51
+ productType: m = v(),
52
+ messageType: w = X,
53
+ username: D = V
54
+ } = u, d = (t == null ? void 0 : t.preselectedDynamicContentList) || [];
55
+ s.templateId = a, window.GuidoConfig = de(Y, h), window.GuidoConfig.partner = {
56
56
  partnerName: c,
57
- productType: d,
58
- messageType: S
59
- }, g.templateConfig = t;
60
- const { initPlugin: D } = j({
57
+ productType: m,
58
+ messageType: w
59
+ }, f.templateConfig = t;
60
+ const { initPlugin: E } = Q({
61
61
  emailId: a,
62
- userId: b,
63
- username: w,
62
+ userId: C,
63
+ username: D,
64
64
  partnerName: c,
65
- productType: d,
66
- preselectedDynamicContentList: m,
65
+ productType: m,
66
+ preselectedDynamicContentList: d,
67
67
  onReady: () => {
68
68
  console.debug("guido:ready"), o("ready");
69
69
  }
70
- }), { getDefaultTemplate: T } = oe(), H = I(() => {
70
+ }), { getDefaultTemplate: T } = re(), R = U(() => {
71
71
  var e;
72
72
  return !((e = window.GuidoConfig) != null && e.useHeader);
73
73
  });
74
- K({
74
+ q({
75
75
  onBack: () => {
76
76
  console.debug("guido:back"), o("back");
77
77
  },
@@ -85,32 +85,35 @@ const ke = /* @__PURE__ */ R({
85
85
  console.debug("guido:test-email:click"), o("test-email:click");
86
86
  }
87
87
  });
88
- const E = (e) => {
88
+ const P = (e) => {
89
89
  console.debug("dynamic-content:close", e), i.setSelectedDynamicContent(e), document.dispatchEvent(new CustomEvent("dynamic-content:close", { detail: e }));
90
- }, P = () => {
90
+ }, k = () => {
91
91
  console.debug("dynamic-content:close", "Without Data"), document.dispatchEvent(new CustomEvent("dynamic-content:close", { detail: { text: "", value: "" } }));
92
92
  };
93
- return M(() => n.value, () => {
93
+ B(() => n.value, () => {
94
94
  o("on-change", n.value);
95
- }), z(async () => {
95
+ });
96
+ const l = (e) => {
97
+ const G = e, { attribute: x, position: M } = G.detail;
98
+ console.debug("dynamic-content:open", G.detail), o("dynamic-content:open", x, M);
99
+ };
100
+ return K(async () => {
96
101
  console.debug("Guido says happy coding 🎉"), console.debug("🚗 Ka-Chow");
97
102
  try {
98
- p.selectedUnsubscribePages = (t == null ? void 0 : t.selectedUnsubscribePages) || [];
103
+ g.selectedUnsubscribePages = (t == null ? void 0 : t.selectedUnsubscribePages) || [];
99
104
  let e = {
100
- html: r && await U(r),
101
- css: h,
105
+ html: r && await L(r),
106
+ css: S,
102
107
  forceRecreate: !0
103
108
  // TODO: It should be false for old templates. We will communicate with Stripo
104
109
  };
105
- e.html || (e = await T(), e.html = await U(e.html)), await D(e), i.selectedDynamicContentList = m;
110
+ e.html || (e = await T(), e.html = await L(e.html)), await E(e), i.selectedDynamicContentList = d;
106
111
  } catch (e) {
107
112
  console.error("Failed to initialize Stripo editor:", e);
108
113
  }
109
- document.addEventListener("dynamic-content:open", (e) => {
110
- const k = e;
111
- console.debug("dynamic-content:open", k.detail), o("dynamic-content:open", k.detail);
112
- });
113
- }), B(() => {
114
+ document.addEventListener("dynamic-content:open", l);
115
+ }), j(() => {
116
+ document.removeEventListener("dynamic-content:open", l);
114
117
  try {
115
118
  window.UIEditor.removeEditor();
116
119
  } catch {
@@ -118,14 +121,14 @@ const ke = /* @__PURE__ */ R({
118
121
  }
119
122
  }), _({
120
123
  dynamicContent: {
121
- insert: E,
122
- close: P
124
+ insert: P,
125
+ close: k
123
126
  },
124
127
  hasChanges: n,
125
- saveSilent: v
126
- }), { __sfc: !0, PreviewContainer: L, OnboardingWrapper: A, headerWrapperRef: u, dynamicContentStore: i, unsubscribeStore: p, props: l, configStore: g, editorStore: s, previewStore: N, hasChanges: n, getPartnerName: f, getProductType: y, isTestPartner: F, saveSilent: v, templateId: a, userId: b, guidoConfig: C, templateConfig: t, html: r, css: h, partnerName: c, productType: d, messageType: S, username: w, preselectedDynamicContentList: m, emit: o, initPlugin: D, getDefaultTemplate: T, noHeader: H, insertDynamicContent: E, closeDynamicContent: P, Toaster: V, FilterSelectionDrawer: X, HeaderWrapper: Y, LoadingWrapper: Z, SaveAsTemplateDrawer: $, UnsubscribeWrapper: ee };
128
+ saveSilent: b
129
+ }), { __sfc: !0, PreviewContainer: A, OnboardingWrapper: N, headerWrapperRef: p, dynamicContentStore: i, unsubscribeStore: g, props: u, configStore: f, editorStore: s, previewStore: F, hasChanges: n, getPartnerName: y, getProductType: v, isTestPartner: H, saveSilent: b, templateId: a, userId: C, guidoConfig: h, templateConfig: t, html: r, css: S, partnerName: c, productType: m, messageType: w, username: D, preselectedDynamicContentList: d, emit: o, initPlugin: E, getDefaultTemplate: T, noHeader: R, insertDynamicContent: P, closeDynamicContent: k, handleDynamicContentOpen: l, Toaster: Z, FilterSelectionDrawer: $, HeaderWrapper: ee, LoadingWrapper: oe, SaveAsTemplateDrawer: te, UnsubscribeWrapper: ne };
127
130
  }
128
131
  });
129
132
  export {
130
- ke as default
133
+ Ue as default
131
134
  };
@@ -0,0 +1,21 @@
1
+ import g from "./ItemsOnboarding.vue2.js";
2
+ /* empty css */
3
+ import m from "../../../_virtual/_plugin-vue2_normalizer.js";
4
+ var l = function() {
5
+ var e, n, r, i, s, a;
6
+ var o = this, d = o._self._c, t = o._self._setupProxy;
7
+ return t.isVisible ? d(t.InOnboard, { key: "guido__items-onboard", staticClass: "w-21-s p-a z-11", class: (e = t.onboardingStore.getItemsCurrentCard) == null ? void 0 : e.classes, attrs: { id: "guido__items-onboard", "is-multiple-page": "", visible: "", "image-source": "", title: "", "bottom-position": (n = t.onboardingStore.getItemsCurrentCard) == null ? void 0 : n.bottom, "left-position": (r = t.onboardingStore.getItemsCurrentCard) == null ? void 0 : r.left, "pages-config": t.onboardingStore.onboardings.itemsOnboarding.config, "pointer-position": (i = t.onboardingStore.getItemsCurrentCard) == null ? void 0 : i.position, "right-position": (s = t.onboardingStore.getItemsCurrentCard) == null ? void 0 : s.right, "top-position": (a = t.onboardingStore.getItemsCurrentCard) == null ? void 0 : a.top }, on: { backButtonClick: t.handleBack, close: function(b) {
8
+ return t.onboardingStore.close("itemsOnboarding");
9
+ }, nextButtonClick: t.handleNext } }) : o._e();
10
+ }, c = [], p = /* @__PURE__ */ m(
11
+ g,
12
+ l,
13
+ c,
14
+ !1,
15
+ null,
16
+ "dd1a237a"
17
+ );
18
+ const I = p.exports;
19
+ export {
20
+ I as default
21
+ };
@@ -0,0 +1,99 @@
1
+ import { defineComponent as l, computed as a, watch as u } from "vue";
2
+ import { useTranslations as x } from "../../../composables/useTranslations.js";
3
+ import { RIBBON_SELECTOR as T, UI_EDITOR_SELECTOR as O, CARD_COMPOSITION_TAB_SELECTOR as B, SETTINGS_TAB_SELECTOR as f } from "../../../enums/onboarding.js";
4
+ import { useOnboardingStore as C } from "../../../stores/onboarding.js";
5
+ import { InOnboard as k } from "@useinsider/design-system-vue";
6
+ const E = /* @__PURE__ */ l({
7
+ __name: "ItemsOnboarding",
8
+ setup(_) {
9
+ const e = x(), o = C(), c = a(() => {
10
+ const t = document.querySelector(T);
11
+ return (t == null ? void 0 : t.offsetHeight) ?? 0;
12
+ }), n = (t) => `${t + c.value}px`, r = (t) => {
13
+ const i = document.querySelector(O);
14
+ if (!(i != null && i.shadowRoot))
15
+ return;
16
+ const { shadowRoot: s } = i, m = s.querySelector(t);
17
+ m && m.click();
18
+ }, d = a(() => [
19
+ {
20
+ classes: "guido-items-onboarding-card-1",
21
+ right: "426px",
22
+ top: n(90),
23
+ position: "Right Top",
24
+ title: e("email-editor.onboarding-items-title"),
25
+ description: e("email-editor.onboarding-items-description"),
26
+ imageSource: "",
27
+ backButtonClick: () => {
28
+ },
29
+ nextButtonType: "text",
30
+ nextButtonText: e("products.next"),
31
+ nextButtonClick: () => {
32
+ o.next("itemsOnboarding");
33
+ }
34
+ },
35
+ {
36
+ classes: "guido-items-onboarding-card-2",
37
+ right: "426px",
38
+ top: n(218),
39
+ position: "Right Top",
40
+ title: e("email-editor.onboarding-items-item-type-title"),
41
+ description: e("email-editor.onboarding-items-item-type-description"),
42
+ imageSource: "",
43
+ backButtonType: "text",
44
+ backButtonText: e("ds-steps.back"),
45
+ backButtonClick: () => {
46
+ o.previous("itemsOnboarding");
47
+ },
48
+ nextButtonType: "text",
49
+ nextButtonText: e("products.next"),
50
+ nextButtonClick: () => {
51
+ o.next("itemsOnboarding");
52
+ }
53
+ },
54
+ {
55
+ classes: "guido-items-onboarding-card-3",
56
+ right: "426px",
57
+ top: n(140),
58
+ position: "Right Top",
59
+ title: e("email-editor.onboarding-items-composition-title"),
60
+ description: e("email-editor.onboarding-items-composition-description"),
61
+ imageSource: "",
62
+ backButtonType: "text",
63
+ backButtonText: e("ds-steps.back"),
64
+ backButtonClick: () => {
65
+ o.previous("itemsOnboarding");
66
+ },
67
+ nextButtonType: "text",
68
+ nextButtonText: e("action-builder.ok"),
69
+ nextButtonClick: () => {
70
+ o.close("itemsOnboarding");
71
+ }
72
+ }
73
+ ]), g = a(() => o.onboardings.itemsOnboarding.config.length > 0 && o.onboardings.itemsOnboarding.isActive), p = () => {
74
+ var t, i;
75
+ (i = (t = o.getItemsCurrentCard) == null ? void 0 : t.nextButtonClick) == null || i.call(t);
76
+ }, b = () => {
77
+ var t, i;
78
+ (i = (t = o.getItemsCurrentCard) == null ? void 0 : t.backButtonClick) == null || i.call(t);
79
+ };
80
+ return u(
81
+ () => o.isActive("itemsOnboarding"),
82
+ (t) => {
83
+ t && o.setConfig("itemsOnboarding", d.value);
84
+ },
85
+ { immediate: !0 }
86
+ ), u(
87
+ () => o.onboardings.itemsOnboarding.cardIndex,
88
+ (t, i) => {
89
+ if (!o.isActive("itemsOnboarding"))
90
+ return;
91
+ const s = `${i}-${t}`;
92
+ s === "1-2" && r(B), s === "2-1" && r(f);
93
+ }
94
+ ), { __sfc: !0, trans: e, onboardingStore: o, ribbonOffset: c, getTopPosition: n, switchTab: r, onboardingCardsConfig: d, isVisible: g, handleNext: p, handleBack: b, InOnboard: k };
95
+ }
96
+ });
97
+ export {
98
+ E as default
99
+ };
@@ -1,23 +1,25 @@
1
1
  import { defineComponent as b, computed as e, onMounted as O, watch as t } from "vue";
2
- import { usePartner as u } from "../../../composables/usePartner.js";
3
- import { useEditorStore as v } from "../../../stores/editor.js";
4
- import { useOnboardingStore as l } from "../../../stores/onboarding.js";
5
- import { usePreviewStore as y } from "../../../stores/preview.js";
6
- import S from "./AMPOnboarding.vue.js";
7
- import h from "./GenericOnboarding.vue.js";
8
- import w from "./NewVersionPopup.vue.js";
9
- import P from "./TextBlockOnboarding.vue.js";
10
- import _ from "./VersionHistoryOnboarding.vue.js";
11
- const F = /* @__PURE__ */ b({
2
+ import u from "./AMPOnboarding.vue.js";
3
+ import v from "./GenericOnboarding.vue.js";
4
+ import l from "./ItemsOnboarding.vue.js";
5
+ import y from "./NewVersionPopup.vue.js";
6
+ import S from "./TextBlockOnboarding.vue.js";
7
+ import h from "./VersionHistoryOnboarding.vue.js";
8
+ import { usePartner as w } from "../../../composables/usePartner.js";
9
+ import { useEditorStore as P } from "../../../stores/editor.js";
10
+ import { useOnboardingStore as _ } from "../../../stores/onboarding.js";
11
+ import { usePreviewStore as A } from "../../../stores/preview.js";
12
+ const G = /* @__PURE__ */ b({
12
13
  __name: "OnboardingWrapper",
13
14
  emits: ["onboarding-finished"],
14
- setup(A, { emit: f }) {
15
- const o = l(), r = v(), s = y(), { isTestPartner: a } = u(), p = e(() => r.isStripoInitialized), d = e(() => a()), m = [
16
- { type: "newVersionPopup", component: w },
17
- { type: "genericOnboarding", component: h },
18
- { type: "textBlockOnboarding", component: P },
19
- { type: "versionHistoryOnboarding", component: _ },
20
- { type: "ampOnboarding", component: S }
15
+ setup(H, { emit: f }) {
16
+ const o = _(), r = P(), s = A(), { isTestPartner: a } = w(), p = e(() => r.isStripoInitialized), d = e(() => a()), m = [
17
+ { type: "newVersionPopup", component: y },
18
+ { type: "genericOnboarding", component: v },
19
+ { type: "textBlockOnboarding", component: S },
20
+ { type: "versionHistoryOnboarding", component: h },
21
+ { type: "ampOnboarding", component: u },
22
+ { type: "itemsOnboarding", component: l }
21
23
  ], c = (n) => d.value || !p.value ? !1 : n === "newVersionPopup" ? o.shouldShowOnboarding(n) : o.isActive(n), g = e(() => m.filter((n) => c(n.type)));
22
24
  return O(async () => {
23
25
  await o.fetchUserModalState();
@@ -40,5 +42,5 @@ const F = /* @__PURE__ */ b({
40
42
  }
41
43
  });
42
44
  export {
43
- F as default
45
+ G as default
44
46
  };
@@ -17,7 +17,7 @@ const A = () => {
17
17
  ]
18
18
  },
19
19
  mergeTags: ["Tag1", "Tag2"],
20
- forseAmp: !1,
20
+ forceAmp: !1,
21
21
  resetDataSavedFlag: !1,
22
22
  disableLineHeightsReplace: !0
23
23
  }, ...t }, m = {
@@ -19,8 +19,7 @@ const l = {
19
19
  "recommendation-block": () => import("../extensions/Blocks/Recommendation/extension.js"),
20
20
  "unsubscribe-block": () => import("../extensions/Blocks/Unsubscribe/extension.js"),
21
21
  "coupon-block": () => import("../extensions/Blocks/CouponBlock/extension.js"),
22
- "items-block": null
23
- // TODO: Add ItemsBlock extension when available
22
+ "items-block": () => import("../extensions/Blocks/Items/extension.js")
24
23
  }, a = (n) => {
25
24
  if (!n || !n.length)
26
25
  return {};
@@ -1,25 +1,27 @@
1
1
  import { defaultHtmlCompilerRules as t } from "../config/compiler/htmlCompilerRules.js";
2
- import { outlookCompilerRules as p } from "../config/compiler/outlookCompilerRules.js";
3
- import { recommendationCompilerRules as s } from "../config/compiler/recommendationCompilerRules.js";
4
- import { socialCompilerRules as u } from "../config/compiler/socialCompilerRules.js";
5
- import { unsubscribeCompilerRules as n } from "../config/compiler/unsubscribeCompilerRules.js";
6
- import { createHtmlCompiler as c } from "../utils/htmlCompiler.js";
7
- import { useConfig as f } from "./useConfig.js";
8
- const h = () => {
9
- const { config: e } = f(), l = e.htmlCompilerRules || [], m = [
2
+ import { itemsCompilerRules as p } from "../config/compiler/itemsCompilerRules.js";
3
+ import { outlookCompilerRules as s } from "../config/compiler/outlookCompilerRules.js";
4
+ import { recommendationCompilerRules as u } from "../config/compiler/recommendationCompilerRules.js";
5
+ import { socialCompilerRules as n } from "../config/compiler/socialCompilerRules.js";
6
+ import { unsubscribeCompilerRules as c } from "../config/compiler/unsubscribeCompilerRules.js";
7
+ import { createHtmlCompiler as f } from "../utils/htmlCompiler.js";
8
+ import { useConfig as R } from "./useConfig.js";
9
+ const x = () => {
10
+ const { config: e } = R(), m = e.htmlCompilerRules || [], l = [
10
11
  ...!!e.ignoreDefaultHtmlCompilerRules ? [] : t,
12
+ ...u,
13
+ ...c,
14
+ ...p,
11
15
  ...s,
12
16
  ...n,
13
- ...p,
14
- ...u,
15
- ...l.map((o, i) => ({
17
+ ...m.map((o, i) => ({
16
18
  ...o,
17
19
  priority: o.priority + 1e3 + i
18
20
  // Ensure additional rules run after default rules
19
21
  }))
20
- ], r = c(m);
22
+ ], r = f(l);
21
23
  return { compileHtml: (o) => r.compile(o) };
22
24
  };
23
25
  export {
24
- h as useHtmlCompiler
26
+ x as useHtmlCompiler
25
27
  };
@@ -1,18 +1,19 @@
1
- import { useConfig as H } from "./useConfig.js";
2
- import { TemplateTypes as V } from "../enums/defaults.js";
3
- import { DISPLAY_CONDITIONS_REGEX as D, DISPLAY_CONDITIONS_EXCEPTIONS_REGEX as P, CampaignCouldNotBeSavedKey as R, CanNotMakeAnyChangesForRunningKey as _ } from "../enums/html-validator.js";
1
+ import { useConfig as V } from "./useConfig.js";
2
+ import { TemplateTypes as D } from "../enums/defaults.js";
3
+ import { DISPLAY_CONDITIONS_REGEX as H, DISPLAY_CONDITIONS_EXCEPTIONS_REGEX as P, CampaignCouldNotBeSavedKey as R, CanNotMakeAnyChangesForRunningKey as _ } from "../enums/html-validator.js";
4
4
  import { ToasterTypeOptions as l } from "../enums/toaster.js";
5
- import { useRecommendationStore as G } from "../stores/recommendation.js";
6
- import { base64EncodeWithSpecialChars as $ } from "../utils/base64.js";
7
- import { useHttp as j } from "./useHttp.js";
8
- import { useToaster as q } from "./useToaster.js";
9
- import { useTranslations as M } from "./useTranslations.js";
10
- const se = () => {
5
+ import { itemsBlockDynamicVariables as G } from "../extensions/Blocks/Items/enums/productEnums.js";
6
+ import { useRecommendationStore as $ } from "../stores/recommendation.js";
7
+ import { base64EncodeWithSpecialChars as j } from "../utils/base64.js";
8
+ import { useHttp as q } from "./useHttp.js";
9
+ import { useToaster as M } from "./useToaster.js";
10
+ import { useTranslations as X } from "./useTranslations.js";
11
+ const ie = () => {
11
12
  var d;
12
- const { showToaster: c } = q(), { post: y } = j(), { config: h } = H(), a = M(), m = G(), u = ((d = h.partner) == null ? void 0 : d.messageType) === V.transactional, v = async (e) => {
13
+ const { showToaster: c } = M(), { post: y } = q(), { config: h } = V(), a = X(), m = $(), u = ((d = h.partner) == null ? void 0 : d.messageType) === D.transactional, v = async (e) => {
13
14
  const t = await y(
14
15
  "/newsletter/template-library/check-template-html-body",
15
- { html: $(e) }
16
+ { html: j(e) }
16
17
  ), { status: n, message: r } = t.data;
17
18
  return n || c({
18
19
  type: l.Alert,
@@ -25,10 +26,10 @@ const se = () => {
25
26
  const t = e.match(/({%(.*?)%})/g);
26
27
  let n = !0;
27
28
  return t !== null && !u && t.forEach((r) => {
28
- const o = r.slice(2, -2).trim().match(/(".*?"|[^"\s]+)(?=\s*|\s*$)/g);
29
- if (o && o.length > 0) {
30
- const [i] = o;
31
- C(i) && !s.includes(i) && (c({
29
+ const i = r.slice(2, -2).trim().match(/(".*?"|[^"\s]+)(?=\s*|\s*$)/g);
30
+ if (i && i.length > 0) {
31
+ const [o] = i;
32
+ C(o) && !s.includes(o) && (c({
32
33
  type: l.Warning,
33
34
  message: a("custom-fields.invalid-custom-fields")
34
35
  }), n = !1);
@@ -58,19 +59,19 @@ const se = () => {
58
59
  }, k = (e, s) => {
59
60
  const t = e.match(/{{([a-zA-Z0-9_\s]*)}}/gm);
60
61
  if (t && !u) {
61
- const n = new Set(s.map((o) => o.toLowerCase())), r = [];
62
- if (t.forEach((o) => {
63
- const i = o.slice(2, -2).trim().toLowerCase();
64
- (!n.has(i) || i === "") && r.push(i);
62
+ const n = new Set(s.map((i) => i.toLowerCase())), r = [];
63
+ if (t.forEach((i) => {
64
+ const o = i.slice(2, -2).trim().toLowerCase();
65
+ (!n.has(o) || o === "") && r.push(o);
65
66
  }), r.length > 0) {
66
- const o = `
67
+ const i = `
67
68
  <ul>
68
- ${r.map((i) => `<li>${i}</li>`).join("")}
69
+ ${r.map((o) => `<li>${o}</li>`).join("")}
69
70
  </ul>
70
71
  `;
71
72
  return c({
72
73
  type: l.Alert,
73
- message: a("custom-fields.invalid-custom-fields") + o
74
+ message: a("custom-fields.invalid-custom-fields") + i
74
75
  }), !1;
75
76
  }
76
77
  }
@@ -79,11 +80,11 @@ const se = () => {
79
80
  const s = e.match(/{%(.*?)%}/g), t = [];
80
81
  let n = !0;
81
82
  if (s && s.forEach((r) => {
82
- const o = r.match(D), i = r.match(P), B = (o == null ? void 0 : o.join("")) || "";
83
- (!o || r !== B) && !i && (c({
83
+ const i = r.match(H), o = r.match(P), B = (i == null ? void 0 : i.join("")) || "";
84
+ (!i || r !== B) && !o && (c({
84
85
  type: l.Alert,
85
86
  message: a("newsletter.display-conditions-invalid-syntax")
86
- }), n = !1), o && o.forEach((f) => {
87
+ }), n = !1), i && i.forEach((f) => {
87
88
  f.trim() === "=" && (c({
88
89
  type: l.Alert,
89
90
  message: a("custom-conditions.wrong-equality-operators")
@@ -94,8 +95,8 @@ const se = () => {
94
95
  });
95
96
  });
96
97
  }), t.length) {
97
- const r = t.filter((i) => i === "if"), o = t.filter((i) => i === "endif");
98
- r.length !== o.length && (c({
98
+ const r = t.filter((o) => o === "if"), i = t.filter((o) => o === "endif");
99
+ r.length !== i.length && (c({
99
100
  type: l.Alert,
100
101
  message: a("custom-conditions.missing-if-endif-tag")
101
102
  }), n = !1);
@@ -121,28 +122,28 @@ const se = () => {
121
122
  }), !1);
122
123
  }, N = (e) => {
123
124
  const n = new DOMParser().parseFromString(e, "text/html").querySelectorAll(".checkbox-block-v2");
124
- return Array.from(n).find((o) => {
125
- var i;
126
- return !((i = o.id) != null && i.trim());
125
+ return Array.from(n).find((i) => {
126
+ var o;
127
+ return !((o = i.id) != null && o.trim());
127
128
  }) ? (c({
128
129
  type: l.Alert,
129
130
  message: a("unsubscribe-templates.select-checkbox-groups")
130
131
  }), !1) : !0;
131
132
  }, O = (e) => {
132
133
  const n = new DOMParser().parseFromString(e, "text/html").querySelectorAll(".radio-button-v2");
133
- return Array.from(n).find((o) => {
134
- var i;
135
- return !((i = o.id) != null && i.trim());
134
+ return Array.from(n).find((i) => {
135
+ var o;
136
+ return !((o = i.id) != null && o.trim());
136
137
  }) ? (c({
137
138
  type: l.Alert,
138
139
  message: a("unsubscribe-templates.select-radio-button-groups")
139
140
  }), !1) : !0;
140
141
  };
141
142
  return { validateHtml: async (e, s, t = !1) => {
142
- const n = s.map((o) => o.value);
143
+ const n = [...s.map((i) => i.value), ...G];
143
144
  return await b(e, n, t) && E(e) && A(e) && x(e) && k(e, n) && T(e) && F(e) && I(e) && W() && L(e) && N(e) && O(e);
144
145
  } };
145
146
  };
146
147
  export {
147
- se as useHtmlValidator
148
+ ie as useHtmlValidator
148
149
  };