@useinsider/guido 1.0.2-beta.91efff4 → 1.0.2-beta.94d67e3

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 (201) hide show
  1. package/README.md +2 -32
  2. package/dist/@types/events.d.ts +0 -6
  3. package/dist/@types/generic.d.ts +0 -4
  4. package/dist/_virtual/AddCustomFont.js +4 -0
  5. package/dist/_virtual/AiAssistantValueType.js +4 -0
  6. package/dist/_virtual/BackgroundColorBuiltInControl.js +4 -0
  7. package/dist/_virtual/BackgroundImageBuiltInControl.js +4 -0
  8. package/dist/_virtual/Block.js +4 -0
  9. package/dist/_virtual/BlockAttributes.js +4 -0
  10. package/dist/_virtual/BlockCompositionType.js +4 -0
  11. package/dist/_virtual/BlockPaddingsBuiltInControl.js +4 -0
  12. package/dist/_virtual/BlockRenderer.js +4 -0
  13. package/dist/_virtual/BlockType.js +4 -0
  14. package/dist/_virtual/BlocksPanel.js +4 -0
  15. package/dist/_virtual/BuiltInControl.js +4 -0
  16. package/dist/_virtual/BuiltInControlTypes.js +4 -0
  17. package/dist/_virtual/ButtonBorderBuiltInControl.js +4 -0
  18. package/dist/_virtual/ButtonColorBuiltInControl.js +4 -0
  19. package/dist/_virtual/ButtonFontColorBuiltInControl.js +4 -0
  20. package/dist/_virtual/ButtonInternalIndentsBuiltInControl.js +4 -0
  21. package/dist/_virtual/ButtonTextBuiltInControl.js +4 -0
  22. package/dist/_virtual/ContextAction.js +4 -0
  23. package/dist/_virtual/ContextActionType.js +4 -0
  24. package/dist/_virtual/Control.js +4 -0
  25. package/dist/_virtual/EditorStatePropertyType.js +4 -0
  26. package/dist/_virtual/Extension.js +4 -0
  27. package/dist/_virtual/ExtensionBuilder.js +4 -0
  28. package/dist/_virtual/FontFamilyBuiltInControl.js +4 -0
  29. package/dist/_virtual/LinkColorBuiltInControl.js +4 -0
  30. package/dist/_virtual/ModificationDescription.js +4 -0
  31. package/dist/_virtual/PanelPosition.js +4 -0
  32. package/dist/_virtual/PreviewDeviceMode.js +4 -0
  33. package/dist/_virtual/SettingsPanelRegistry.js +4 -0
  34. package/dist/_virtual/SettingsPanelTab.js +4 -0
  35. package/dist/_virtual/SettingsTab.js +4 -0
  36. package/dist/_virtual/StructureBorderBuiltInControl.js +4 -0
  37. package/dist/_virtual/StructurePaddingsBuiltInControl.js +4 -0
  38. package/dist/_virtual/TextColorBuiltInControl.js +4 -0
  39. package/dist/_virtual/TextLineSpacingBuiltInControl.js +4 -0
  40. package/dist/_virtual/TextSizeBuiltInControl.js +4 -0
  41. package/dist/_virtual/TextStyleBuiltInControl.js +4 -0
  42. package/dist/_virtual/UIElement.js +4 -0
  43. package/dist/_virtual/UIElementTagRegistry.js +4 -0
  44. package/dist/_virtual/UIElementType.js +4 -0
  45. package/dist/_virtual/UIElementsAttributes.js +4 -0
  46. package/dist/_virtual/index.js +5 -0
  47. package/dist/_virtual/index2.js +4 -0
  48. package/dist/components/Guido.vue.d.ts +1 -3
  49. package/dist/components/Guido.vue.js +5 -5
  50. package/dist/components/Guido.vue2.js +60 -72
  51. package/dist/components/organisms/LoadingWrapper.vue.js +1 -1
  52. package/dist/components/organisms/email-preview/amp/AmpToggle.vue.js +2 -3
  53. package/dist/components/organisms/email-preview/amp/AmpToggle.vue2.js +15 -14
  54. package/dist/components/organisms/header/HeaderWrapper.vue.d.ts +1 -3
  55. package/dist/components/organisms/header/HeaderWrapper.vue.js +6 -6
  56. package/dist/components/organisms/header/HeaderWrapper.vue2.js +9 -15
  57. package/dist/components/organisms/header/RightSlot.vue.d.ts +1 -3
  58. package/dist/components/organisms/header/RightSlot.vue.js +3 -5
  59. package/dist/components/organisms/header/RightSlot.vue2.js +27 -25
  60. package/dist/components/organisms/header/ViewOptions.vue.js +4 -4
  61. package/dist/components/organisms/header/ViewOptions.vue2.js +14 -14
  62. package/dist/components/organisms/header/version-history/ViewOptions.vue.js +11 -11
  63. package/dist/components/organisms/header/version-history/ViewOptions.vue2.js +5 -5
  64. package/dist/components/organisms/onboarding/AMPOnboarding.vue.js +13 -13
  65. package/dist/components/organisms/onboarding/AMPOnboarding.vue2.js +23 -21
  66. package/dist/components/organisms/onboarding/GenericOnboarding.vue.js +14 -14
  67. package/dist/components/organisms/onboarding/GenericOnboarding.vue2.js +27 -25
  68. package/dist/components/organisms/onboarding/NewVersionPopup.vue.js +1 -1
  69. package/dist/components/organisms/onboarding/OnboardingWrapper.vue2.js +20 -36
  70. package/dist/components/organisms/onboarding/TextBlockOnboarding.vue.js +13 -13
  71. package/dist/components/organisms/onboarding/TextBlockOnboarding.vue2.js +29 -39
  72. package/dist/components/organisms/onboarding/VersionHistoryOnboarding.vue.js +14 -14
  73. package/dist/components/organisms/onboarding/VersionHistoryOnboarding.vue2.js +23 -21
  74. package/dist/composables/useCustomInterfaceAppearance.js +18 -22
  75. package/dist/composables/useHtmlCompiler.js +9 -17
  76. package/dist/composables/usePreviewMode.js +15 -14
  77. package/dist/composables/useStripo.js +36 -40
  78. package/dist/composables/useStripoEventHandler.js +8 -8
  79. package/dist/composables/useToaster.js +17 -17
  80. package/dist/config/compiler/outlookCompilerRules.d.ts +0 -2
  81. package/dist/enums/defaults.d.ts +1 -5
  82. package/dist/enums/defaults.js +10 -14
  83. package/dist/extensions/DynamicContent/dynamic-content.js +27 -41
  84. package/dist/extensions/DynamicContent/extension.js +6 -18
  85. package/dist/guido.css +1 -1
  86. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/Extension.js +48 -72
  87. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/ExtensionBuilder.js +49 -74
  88. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/blocks/Block.js +38 -120
  89. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/blocks/BlockRenderer.js +18 -0
  90. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/blocks/BlocksPanel.js +32 -0
  91. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/blocks/ContextAction.js +18 -0
  92. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/constants/AddCustomFont.js +8 -0
  93. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/constants/AiAssistantValueType.js +11 -5
  94. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/constants/BlockAttributes.js +34 -0
  95. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/constants/BlockCompositionType.js +11 -5
  96. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/constants/BlockType.js +11 -5
  97. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/constants/BuiltInControlTypes.js +101 -116
  98. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/constants/ContextActionType.js +11 -5
  99. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/constants/EditorStatePropertyType.js +11 -5
  100. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/constants/PanelPosition.js +11 -5
  101. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/constants/PreviewDeviceMode.js +11 -5
  102. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/constants/SettingsTab.js +11 -5
  103. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/constants/UIElementType.js +11 -5
  104. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/constants/UIElementsAttributes.js +43 -22
  105. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/BackgroundColorBuiltInControl.js +43 -0
  106. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/BackgroundImageBuiltInControl.js +46 -0
  107. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/BlockPaddingsBuiltInControl.js +44 -0
  108. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/BuiltInControl.js +22 -0
  109. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/ButtonBorderBuiltInControl.js +46 -0
  110. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/ButtonColorBuiltInControl.js +46 -0
  111. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/ButtonFontColorBuiltInControl.js +45 -0
  112. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/ButtonInternalIndentsBuiltInControl.js +45 -0
  113. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/ButtonTextBuiltInControl.js +45 -0
  114. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/Control.js +17 -21
  115. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/FontFamilyBuiltInControl.js +43 -0
  116. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/LinkColorBuiltInControl.js +45 -0
  117. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/SettingsPanelRegistry.js +15 -8
  118. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/SettingsPanelTab.js +29 -30
  119. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/StructureBorderBuiltInControl.js +46 -0
  120. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/StructurePaddingsBuiltInControl.js +44 -0
  121. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/TextColorBuiltInControl.js +43 -0
  122. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/TextLineSpacingBuiltInControl.js +43 -0
  123. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/TextSizeBuiltInControl.js +45 -0
  124. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/TextStyleBuiltInControl.js +43 -0
  125. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/index.js +266 -0
  126. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/modifications/ModificationDescription.js +23 -19
  127. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/ui-elements/UIElement.js +19 -37
  128. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/ui-elements/UIElementTagRegistry.js +15 -2
  129. package/dist/services/onboardingApi.d.ts +2 -2
  130. package/dist/services/onboardingApi.js +9 -9
  131. package/dist/static/styles/components/alert-message.css.js +2 -32
  132. package/dist/static/styles/components/button.css.js +2 -32
  133. package/dist/static/styles/components/wide-panel.css.js +1 -5
  134. package/dist/static/styles/customEditorStyle.css.js +0 -6
  135. package/dist/static/styles/variables.css.js +0 -10
  136. package/dist/stores/dynamic-content.d.ts +0 -12
  137. package/dist/stores/dynamic-content.js +6 -7
  138. package/dist/stores/onboarding.d.ts +592 -133
  139. package/dist/stores/onboarding.js +55 -38
  140. package/dist/stores/preview.js +14 -6
  141. package/dist/utils/genericUtil.d.ts +0 -5
  142. package/dist/utils/genericUtil.js +6 -9
  143. package/dist/utils/templatePreparation.js +14 -21
  144. package/package.json +3 -5
  145. package/dist/composables/useHtmlValidator.d.ts +0 -4
  146. package/dist/composables/useHtmlValidator.js +0 -139
  147. package/dist/composables/useRecommendation.d.ts +0 -19
  148. package/dist/composables/useRecommendation.js +0 -27
  149. package/dist/composables/useSave.d.ts +0 -4
  150. package/dist/composables/useSave.js +0 -15
  151. package/dist/config/compiler/outlookCompilerRules.js +0 -36
  152. package/dist/config/compiler/recommendationCompilerRules.d.ts +0 -2
  153. package/dist/config/compiler/recommendationCompilerRules.js +0 -83
  154. package/dist/config/compiler/socialCompilerRules.d.ts +0 -2
  155. package/dist/config/compiler/socialCompilerRules.js +0 -21
  156. package/dist/config/compiler/unsubscribeCompilerRules.d.ts +0 -2
  157. package/dist/config/compiler/unsubscribeCompilerRules.js +0 -64
  158. package/dist/config/migrator/checkboxMigrator.d.ts +0 -1
  159. package/dist/config/migrator/checkboxMigrator.js +0 -83
  160. package/dist/config/migrator/index.d.ts +0 -1
  161. package/dist/config/migrator/index.js +0 -5
  162. package/dist/enums/html-validator.d.ts +0 -6
  163. package/dist/enums/html-validator.js +0 -7
  164. package/dist/enums/recommendation.d.ts +0 -54
  165. package/dist/enums/recommendation.js +0 -56
  166. package/dist/enums/unsubscribe.d.ts +0 -15
  167. package/dist/enums/unsubscribe.js +0 -17
  168. package/dist/extensions/Blocks/Checkbox/block.d.ts +0 -10
  169. package/dist/extensions/Blocks/Checkbox/block.js +0 -39
  170. package/dist/extensions/Blocks/Checkbox/control.d.ts +0 -22
  171. package/dist/extensions/Blocks/Checkbox/control.js +0 -104
  172. package/dist/extensions/Blocks/Checkbox/extension.d.ts +0 -2
  173. package/dist/extensions/Blocks/Checkbox/extension.js +0 -20
  174. package/dist/extensions/Blocks/Checkbox/settingsPanel.d.ts +0 -4
  175. package/dist/extensions/Blocks/Checkbox/settingsPanel.js +0 -38
  176. package/dist/extensions/Blocks/Checkbox/template.d.ts +0 -6
  177. package/dist/extensions/Blocks/Checkbox/template.js +0 -75
  178. package/dist/extensions/Blocks/CouponBlock/block.d.ts +0 -11
  179. package/dist/extensions/Blocks/CouponBlock/block.js +0 -42
  180. package/dist/extensions/Blocks/CouponBlock/extension.d.ts +0 -2
  181. package/dist/extensions/Blocks/CouponBlock/extension.js +0 -19
  182. package/dist/extensions/Blocks/CouponBlock/settingsPanel.d.ts +0 -4
  183. package/dist/extensions/Blocks/CouponBlock/settingsPanel.js +0 -37
  184. package/dist/extensions/Blocks/CouponBlock/template.d.ts +0 -3
  185. package/dist/extensions/Blocks/CouponBlock/template.js +0 -13
  186. package/dist/extensions/Blocks/_Boilerplate/block.d.ts +0 -10
  187. package/dist/extensions/Blocks/_Boilerplate/control.d.ts +0 -17
  188. package/dist/extensions/Blocks/_Boilerplate/extension.d.ts +0 -2
  189. package/dist/extensions/Blocks/_Boilerplate/settingsPanel.d.ts +0 -4
  190. package/dist/extensions/Blocks/_Boilerplate/template.d.ts +0 -6
  191. package/dist/icons/coupon.svg +0 -3
  192. package/dist/mock/api/unsubscribe.d.ts +0 -2
  193. package/dist/mock/api/validator.d.ts +0 -2
  194. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/constants/BlockName.js +0 -12
  195. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/constants/Popover.js +0 -12
  196. package/dist/static/styles/components/notification.css.js +0 -55
  197. package/dist/static/styles/components/popup.css.js +0 -68
  198. package/dist/stores/recommendation.d.ts +0 -10
  199. package/dist/stores/recommendation.js +0 -9
  200. package/dist/stores/unsubscribe.d.ts +0 -8
  201. package/dist/stores/unsubscribe.js +0 -9
@@ -1,70 +1,80 @@
1
- import { useOnboardingApi as t } from "../services/onboardingApi.js";
1
+ import { useOnboardingApi as i } from "../services/onboardingApi.js";
2
2
  import { defineStore as s } from "pinia";
3
- const e = () => ({
3
+ const t = () => ({
4
4
  cardIndex: 0,
5
5
  isActive: !1,
6
6
  config: []
7
7
  }), a = () => ({
8
8
  onboardings: {
9
- newVersionPopup: e(),
10
- genericOnboarding: e(),
11
- textBlockOnboarding: e(),
12
- versionHistoryOnboarding: e(),
13
- ampOnboarding: e()
9
+ newVersionPopup: t(),
10
+ genericOnboarding: t(),
11
+ textBlockOnboarding: t(),
12
+ versionHistoryOnboarding: t(),
13
+ ampOnboarding: t()
14
14
  },
15
15
  userModalState: {},
16
16
  isFetched: !1
17
- }), g = s("onboarding", {
17
+ }), b = s("onboarding", {
18
18
  state: () => a(),
19
19
  getters: {
20
- getOnboarding: (n) => (o) => n.onboardings[o],
20
+ get: (n) => (o) => n.onboardings[o],
21
21
  isActive: (n) => (o) => n.onboardings[o].isActive,
22
22
  getCurrentCard: (n) => (o) => {
23
- const i = n.onboardings[o];
24
- return i.config[i.cardIndex];
25
- },
26
- getGenericCurrentCard: (n) => {
23
+ const e = n.onboardings[o];
24
+ return e.config[e.cardIndex];
25
+ },
26
+ genericOnboarding: (n) => n.onboardings.genericOnboarding,
27
+ textBlockOnboarding: (n) => n.onboardings.textBlockOnboarding,
28
+ versionHistoryOnboarding: (n) => n.onboardings.versionHistoryOnboarding,
29
+ ampOnboarding: (n) => n.onboardings.ampOnboarding,
30
+ genericCurrentCard: (n) => {
27
31
  const { genericOnboarding: o } = n.onboardings;
28
32
  return o.config[o.cardIndex];
29
33
  },
30
- getTextBlockCurrentCard: (n) => {
34
+ textBlockCurrentCard: (n) => {
31
35
  const { textBlockOnboarding: o } = n.onboardings;
32
36
  return o.config[o.cardIndex];
33
37
  },
34
- getVersionHistoryCurrentCard: (n) => {
38
+ versionHistoryCurrentCard: (n) => {
35
39
  const { versionHistoryOnboarding: o } = n.onboardings;
36
40
  return o.config[o.cardIndex];
37
41
  },
38
- getAmpCurrentCard: (n) => {
42
+ ampCurrentCard: (n) => {
39
43
  const { ampOnboarding: o } = n.onboardings;
40
44
  return o.config[o.cardIndex];
41
45
  },
42
46
  shouldShowOnboarding: (n) => (o) => {
43
- const i = n.userModalState.Guido;
44
- return o === "newVersionPopup" && (i != null && i.genericOnboarding) ? !1 : i ? !i[o] : !0;
47
+ const e = n.userModalState.Guido;
48
+ return o === "newVersionPopup" && (e != null && e.genericOnboarding) ? !1 : e ? !e[o] : !0;
45
49
  }
46
50
  },
47
51
  actions: {
48
- closeOtherOnboardings(n) {
49
- Object.keys(this.onboardings).forEach((o) => {
50
- const i = o;
51
- i !== n && this.onboardings[i].isActive && (this.onboardings[i].isActive = !1, this.onboardings[i].cardIndex = 0, this.onboardings[i].config = []);
52
- });
53
- },
54
52
  start(n) {
55
- this.closeOtherOnboardings(n), this.onboardings[n].cardIndex = 0, this.onboardings[n].isActive = !0;
53
+ Object.keys(this.onboardings).forEach((e) => {
54
+ if (e !== n) {
55
+ const r = this.onboardings[e];
56
+ r.isActive && (r.isActive = !1, r.cardIndex = 0, r.config = []);
57
+ }
58
+ });
59
+ const o = this.onboardings[n];
60
+ o.cardIndex = 0, o.isActive = !0;
56
61
  },
57
62
  async close(n) {
58
- await this.setUserModalState(n, "true", "Guido"), this.onboardings[n].isActive = !1, this.onboardings[n].cardIndex = 0, this.onboardings[n].config = [];
63
+ await this.setUserModalState(n, "true", "Guido");
64
+ const o = this.onboardings[n];
65
+ o.isActive = !1, o.cardIndex = 0, o.config = [];
59
66
  },
60
67
  next(n) {
61
- this.onboardings[n].cardIndex < this.onboardings[n].config.length - 1 && this.onboardings[n].cardIndex++;
68
+ const o = this.onboardings[n];
69
+ o.cardIndex < o.config.length - 1 && o.cardIndex++;
62
70
  },
63
71
  previous(n) {
64
- this.onboardings[n].cardIndex > 0 && this.onboardings[n].cardIndex--;
72
+ const o = this.onboardings[n];
73
+ o.cardIndex > 0 && o.cardIndex--;
65
74
  },
66
75
  setConfig(n, o) {
67
- this.onboardings[n].config = o ?? [], this.onboardings[n].cardIndex >= this.onboardings[n].config.length && (this.onboardings[n].cardIndex = 0);
76
+ const e = this.onboardings[n];
77
+ e.config = o ?? [], e.cardIndex >= e.config.length && (e.cardIndex = 0);
68
78
  },
69
79
  async onDiscoverNowClicked() {
70
80
  await this.setUserModalState("newVersionPopup", "true", "Guido"), await this.setUserModalState("genericOnboarding", "true", "Guido"), this.start("genericOnboarding");
@@ -79,17 +89,24 @@ const e = () => ({
79
89
  return Object.values(this.onboardings).some((n) => n.isActive);
80
90
  },
81
91
  async fetchUserModalState() {
82
- if (this.isFetched)
83
- return;
84
- const { fetchUserModalState: n } = t(), o = await n();
85
- this.userModalState = o, this.isFetched = !0;
86
- },
87
- async setUserModalState(n, o, i) {
88
- const { setUserModalState: r } = t();
89
- await r(n, o, i), this.isFetched = !1, await this.fetchUserModalState();
92
+ if (!this.isFetched)
93
+ try {
94
+ const { fetchUserModalState: n } = i(), o = await n();
95
+ this.userModalState = o.data, this.isFetched = !0;
96
+ } catch (n) {
97
+ console.error("Failed to fetch user modal state:", n);
98
+ }
99
+ },
100
+ async setUserModalState(n, o, e) {
101
+ try {
102
+ const { setUserModalState: r } = i();
103
+ (await r(n, o, e)).data === 1 && (this.userModalState[e] || (this.userModalState[e] = {}), this.userModalState[e][n] = o === "true");
104
+ } catch (r) {
105
+ console.error("Failed to set user modal state:", r);
106
+ }
90
107
  }
91
108
  }
92
109
  });
93
110
  export {
94
- g as useOnboardingStore
111
+ b as useOnboardingStore
95
112
  };
@@ -1,13 +1,14 @@
1
- import { defineStore as e } from "pinia";
2
- const s = () => ({
1
+ import { useOnboardingStore as i } from "./onboarding.js";
2
+ import { defineStore as a } from "pinia";
3
+ const m = () => ({
3
4
  emailFormat: "html",
4
5
  ampHtml: "",
5
6
  ampErrors: [],
6
7
  templateHtml: "",
7
8
  isLoaded: !1,
8
9
  isAMPErrorModalVisible: !1
9
- }), a = e("preview", {
10
- state: () => s(),
10
+ }), h = a("preview", {
11
+ state: () => m(),
11
12
  getters: {
12
13
  isAMPModeEnabled: (t) => t.emailFormat === "AMP",
13
14
  previewHtml() {
@@ -27,7 +28,14 @@ const s = () => ({
27
28
  },
28
29
  actions: {
29
30
  updateAMPData(t) {
30
- this.ampHtml = t.ampHtml ?? "", this.ampErrors = t.ampErrors ?? [], this.emailFormat = t.ampHtml ? "AMP" : "html";
31
+ var s;
32
+ const r = !!((s = this.ampHtml) != null && s.trim());
33
+ this.ampHtml = t.ampHtml ?? "", this.ampErrors = t.ampErrors ?? [];
34
+ const o = t.ampHtml ? "AMP" : "html";
35
+ if (this.emailFormat = o, !r && o === "AMP") {
36
+ const e = i();
37
+ e.shouldShowOnboarding("ampOnboarding") && e.start("ampOnboarding");
38
+ }
31
39
  },
32
40
  setEmailFormat(t) {
33
41
  this.emailFormat = t;
@@ -41,5 +49,5 @@ const s = () => ({
41
49
  }
42
50
  });
43
51
  export {
44
- a as usePreviewStore
52
+ h as usePreviewStore
45
53
  };
@@ -1,8 +1,3 @@
1
1
  import type { DynamicContent, MergeTag } from '@@/Types/generic';
2
2
  export declare const dynamicContentToMergeTags: (dynamicContentList: DynamicContent[]) => MergeTag[];
3
3
  export declare const getCsrfToken: () => string;
4
- /**
5
- * URL Parameter utilities
6
- */
7
- export declare const getUrlParams: () => URLSearchParams;
8
- export declare const getUrlParam: (paramName: string, defaultValue?: string) => string;
@@ -1,14 +1,11 @@
1
- const e = (l) => l.map((a) => a.format ? {
2
- label: `${a.text} | ${a.format.key}=${a.format.value}`,
3
- value: `{{${a.value}|${a.format.key}=${a.format.value}}}`
4
- } : {
1
+ const l = (e) => e.map((a) => ({
5
2
  label: a.fallback ? `${a.text} | ${a.fallback}` : a.text,
6
3
  value: a.fallback ? `{{${a.value}|${a.fallback}}}` : `{{${a.value}}}`
7
- }), r = () => {
8
- var l;
9
- return ((l = document.head.querySelector('meta[name="csrf-token"]')) == null ? void 0 : l.getAttribute("content")) ?? "";
4
+ })), t = () => {
5
+ var e;
6
+ return ((e = document.head.querySelector('meta[name="csrf-token"]')) == null ? void 0 : e.getAttribute("content")) ?? "";
10
7
  };
11
8
  export {
12
- e as dynamicContentToMergeTags,
13
- r as getCsrfToken
9
+ l as dynamicContentToMergeTags,
10
+ t as getCsrfToken
14
11
  };
@@ -1,28 +1,21 @@
1
- import { useActionsApi as g } from "../composables/useActionsApi.js";
2
- import { useHtmlCompiler as S } from "../composables/useHtmlCompiler.js";
3
- import { useDynamicContentStore as f } from "../stores/dynamic-content.js";
4
- const H = () => {
5
- const t = f(), { getCompiledEmail: i, getTemplateData: o } = g(), { compileHtml: n } = S();
1
+ import { useActionsApi as c } from "../composables/useActionsApi.js";
2
+ import { useDynamicContentStore as l } from "../stores/dynamic-content.js";
3
+ const y = () => {
4
+ const t = l(), { getCompiledEmail: e, getTemplateData: a } = c();
6
5
  return {
7
6
  prepareTemplateDetails: async () => {
8
- const { html: a, ampHtml: s = "", ampErrors: m = [] } = await i({
7
+ const { html: n, ampHtml: s = "", ampErrors: o = [] } = await e({
9
8
  minimize: !0,
10
9
  resetDataSavedFlag: !1
11
- }), { html: r, css: c, syncModulesIds: l = [] } = await o(), { compiledHtml: p, stats: e, appliedRules: d } = n(a), u = t.getSelectedDynamicContentList;
12
- return console.debug("HTML Compilation Stats:", {
13
- originalSize: e.originalSize,
14
- compiledSize: e.compiledSize,
15
- reduction: `${e.reductionPercentage.toFixed(2)}%`,
16
- appliedRules: d,
17
- executionTime: `${e.executionTime.toFixed(2)}ms`
18
- }), {
19
- dynamicContentList: u,
20
- compiledHtml: p,
21
- rawHtml: r,
22
- css: c,
10
+ }), { html: m, css: i, syncModulesIds: r = [] } = await a();
11
+ return {
12
+ dynamicContentList: t.getSelectedDynamicContentList,
13
+ compiledHtml: n,
14
+ rawHtml: m,
15
+ css: i,
23
16
  ampHtml: s,
24
- ampErrors: m,
25
- modules: l,
17
+ ampErrors: o,
18
+ modules: r,
26
19
  recommendation: {
27
20
  campaignUrls: {},
28
21
  configs: {}
@@ -36,5 +29,5 @@ const H = () => {
36
29
  };
37
30
  };
38
31
  export {
39
- H as useTemplatePreparation
32
+ y as useTemplatePreparation
40
33
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@useinsider/guido",
3
- "version": "1.0.2-beta.91efff4",
3
+ "version": "1.0.2-beta.94d67e3",
4
4
  "description": "Guido is a Vue + TypeScript wrapper for Email Plugin. Easily embed the email editor in your Vue applications.",
5
5
  "main": "./dist/guido.umd.cjs",
6
6
  "module": "./dist/library.js",
@@ -24,14 +24,13 @@
24
24
  "lint": "NODE_OPTIONS=--max-old-space-size=2048 eslint ./ && bun run type-check",
25
25
  "lint:fix": "NODE_OPTIONS=--max-old-space-size=2048 eslint --fix ./",
26
26
  "type-check": "vue-tsc --noEmit --project tsconfig.config.json && vue-tsc --noEmit --project tsconfig.app.json",
27
- "test:visual-update": "npx playwright test --update-snapshots --reporter html",
28
- "prepare": "husky"
27
+ "test:visual-update": "npx playwright test --update-snapshots --reporter html"
29
28
  },
30
29
  "keywords": [],
31
30
  "author": "",
32
31
  "license": "ISC",
33
32
  "dependencies": {
34
- "@stripoinc/ui-editor-extensions": "2.0.2",
33
+ "@stripoinc/ui-editor-extensions": "1.0.6",
35
34
  "@useinsider/design-system-vue": "0.14.8",
36
35
  "@vueuse/core": "11.3.0",
37
36
  "lodash-es": "4.17.21",
@@ -66,7 +65,6 @@
66
65
  "eslint-plugin-vue": "10.1.0",
67
66
  "eslint-plugin-vue-scoped-css": "2.6.1",
68
67
  "globals": "16.0.0",
69
- "husky": "9.1.7",
70
68
  "msw": "2.10.3",
71
69
  "sass": "1.69.7",
72
70
  "typescript": "5.5.4",
@@ -1,4 +0,0 @@
1
- import type { DynamicContent } from '@@/Types/generic';
2
- export declare const useHtmlValidator: () => {
3
- validateHtml: (html: string, customFields: DynamicContent[], isOnSaveValidation?: boolean) => Promise<boolean>;
4
- };
@@ -1,139 +0,0 @@
1
- import { useConfig as H } from "./useConfig.js";
2
- import { TemplateTypes as V } from "../enums/defaults.js";
3
- import { DISPLAY_CONDITIONS_REGEX as B, DISPLAY_CONDITIONS_EXCEPTIONS_REGEX as _, CampaignCouldNotBeSavedKey as D, CanNotMakeAnyChangesForRunningKey as P } from "../enums/html-validator.js";
4
- import { ToasterTypeOptions as l } from "../enums/toaster.js";
5
- import { useRecommendationStore as R } from "../stores/recommendation.js";
6
- import { base64EncodeWithSpecialChars as $ } from "../utils/base64.js";
7
- import { useHttp as j } from "./useHttp.js";
8
- import { useToaster as G } from "./useToaster.js";
9
- import { useTranslations as X } from "./useTranslations.js";
10
- const te = () => {
11
- var d;
12
- const { showToaster: c } = G(), { post: y } = j(), { config: h } = H(), o = X(), m = R(), u = ((d = h.partner) == null ? void 0 : d.messageType) === V.transactional, C = async (e) => {
13
- const t = await y(
14
- "/newsletter/template-library/check-template-html-body",
15
- { html: $(e) }
16
- ), { status: n, message: a } = t.data;
17
- return n || c({
18
- type: l.Alert,
19
- message: n === void 0 ? a : o("newsletter.invalid-url-link-for-toaster")
20
- }), o(D), a === o(P) && c({
21
- type: l.Alert,
22
- message: o("newsletter.already-in-progress")
23
- }), n;
24
- }, v = (e) => !["if", "endif", "else", "elif", "now"].includes(e.toLowerCase()), w = (e) => ["if", "endif"].includes(e.toLowerCase()), S = (e, s) => {
25
- const t = e.match(/({%(.*?)%})/g);
26
- let n = !0;
27
- return t !== null && !u && t.forEach((a) => {
28
- const i = a.slice(2, -2).trim().match(/(".*?"|[^"\s]+)(?=\s*|\s*$)/g);
29
- if (i && i.length > 0) {
30
- const [r] = i;
31
- v(r) && !s.includes(r) && (c({
32
- type: l.Warning,
33
- message: o("custom-fields.invalid-custom-fields")
34
- }), n = !1);
35
- }
36
- }), n;
37
- }, b = async (e, s, t) => {
38
- const n = t ? await C(e) : !0;
39
- return S(e, s) && n;
40
- }, E = (e) => e.length > 0 ? !0 : (c({
41
- type: l.Warning,
42
- message: o("newsletter.html-content-is-empty")
43
- }), !1), A = (e) => {
44
- const s = (e.match(/{/gm) || []).length, t = (e.match(/}/gm) || []).length;
45
- return s > t && c({
46
- type: l.Warning,
47
- message: o("custom-fields.missing-closing-braces")
48
- }), s < t && c({
49
- type: l.Warning,
50
- message: o("custom-fields.missing-opening-braces")
51
- }), s === t;
52
- }, x = (e) => {
53
- const s = e.match(/{{\s*(\w+\s+((\w+\|\w+)|(\w+)))\s*}}/gm) === null;
54
- return s || c({
55
- type: l.Warning,
56
- message: o("custom-fields.invalid-custom-fields")
57
- }), s;
58
- }, T = (e, s) => {
59
- const t = e.match(/{{([a-zA-Z0-9_\s]*)}}/gm);
60
- if (t && !u) {
61
- const n = new Set(s.map((i) => i.toLowerCase())), a = [];
62
- if (t.forEach((i) => {
63
- const r = i.slice(2, -2).trim().toLowerCase();
64
- (!n.has(r) || r === "") && a.push(r);
65
- }), a.length > 0) {
66
- const i = `
67
- <ul>
68
- ${a.map((r) => `<li>${r}</li>`).join("")}
69
- </ul>
70
- `;
71
- return c({
72
- type: l.Alert,
73
- message: o("custom-fields.invalid-custom-fields") + i
74
- }), !1;
75
- }
76
- }
77
- return !0;
78
- }, k = (e) => {
79
- const s = e.match(/{%(.*?)%}/g), t = [];
80
- let n = !0;
81
- if (s && s.forEach((a) => {
82
- const i = a.match(B), r = a.match(_), O = (i == null ? void 0 : i.join("")) || "";
83
- (!i || a !== O) && !r && (c({
84
- type: l.Alert,
85
- message: o("newsletter.display-conditions-invalid-syntax")
86
- }), n = !1), i && i.forEach((f) => {
87
- f.trim() === "=" && (c({
88
- type: l.Alert,
89
- message: o("custom-conditions.wrong-equality-operators")
90
- }), n = !1);
91
- const g = f.match(/^[a-zA-Z]*$/g);
92
- g && g.forEach((p) => {
93
- w(p) && t.push(p);
94
- });
95
- });
96
- }), t.length) {
97
- const a = t.filter((r) => r === "if"), i = t.filter((r) => r === "endif");
98
- a.length !== i.length && (c({
99
- type: l.Alert,
100
- message: o("custom-conditions.missing-if-endif-tag")
101
- }), n = !1);
102
- }
103
- return n;
104
- }, F = (e) => {
105
- const s = (e.match(/{% /gm) || []).length, t = (e.match(/ %}/gm) || []).length, n = s === t;
106
- return n || c({
107
- type: l.Warning,
108
- message: o("custom-conditions.no-space-after-braces")
109
- }), n;
110
- }, I = (e) => (e.match(/({%(.*?)%})/g) || []).filter((t) => t.includes("if")).map((t) => (t.match(/{{.*}}/gm) || []).length).reduce((t, n) => t + n, 0) > 0 ? (c({
111
- type: l.Warning,
112
- message: o("custom-conditions.no-braces-inside-if-tag")
113
- }), !1) : !0, W = () => m.recommendationConfigs && Object.values(m.recommendationConfigs).find((s) => s.filters.find((t) => t.value === "")) !== void 0 ? (c({
114
- type: l.Alert,
115
- message: o("newsletter.fill-all-necessary-fields")
116
- }), !1) : !0, L = (e) => {
117
- const s = /src="[^"]*\.(svg|pst)"/gm;
118
- return e.match(s) === null ? !0 : (c({
119
- type: l.Alert,
120
- message: o("newsletter.invalid-image-type")
121
- }), !1);
122
- }, N = (e) => {
123
- const n = new DOMParser().parseFromString(e, "text/html").querySelectorAll(".checkbox-block-v2");
124
- return Array.from(n).find((i) => {
125
- var r;
126
- return !((r = i.id) != null && r.trim());
127
- }) ? (c({
128
- type: l.Alert,
129
- message: o("unsubscribe-templates.select-checkbox-groups")
130
- }), !1) : !0;
131
- };
132
- return { validateHtml: async (e, s, t = !1) => {
133
- const n = s.map((i) => i.value);
134
- return await b(e, n, t) && E(e) && A(e) && x(e) && T(e, n) && k(e) && F(e) && I(e) && W() && L(e) && N(e);
135
- } };
136
- };
137
- export {
138
- te as useHtmlValidator
139
- };
@@ -1,19 +0,0 @@
1
- type CardWidthParams = {
2
- mobileLeftPadding: number;
3
- mobileRightPadding: number;
4
- cardsInRow: number;
5
- unresponsive: boolean;
6
- };
7
- interface CampaignData extends CardWidthParams {
8
- textTrimming: boolean;
9
- orientation: string;
10
- priceBeforeTextValue: string;
11
- priceAfterTextValue: string;
12
- discountBeforeTextValue: string;
13
- discountAfterTextValue: string;
14
- }
15
- export declare const useRecommendation: () => {
16
- calculateCardWidth: ({ mobileLeftPadding, mobileRightPadding, cardsInRow, unresponsive, }: CardWidthParams) => number;
17
- getRecommendationCampaignData: (id: string) => CampaignData;
18
- };
19
- export {};
@@ -1,27 +0,0 @@
1
- import { MinDeviceViewport as r, DefaultPadding as c } from "../enums/recommendation.js";
2
- const m = () => ({
3
- calculateCardWidth: ({
4
- mobileLeftPadding: e,
5
- mobileRightPadding: a,
6
- cardsInRow: n,
7
- unresponsive: i
8
- }) => {
9
- const t = i ? n : 1, o = e + a + (t - 1) * c;
10
- return (r - o) / t;
11
- },
12
- getRecommendationCampaignData: (e) => (console.debug(e), {
13
- textTrimming: !1,
14
- orientation: "vertical",
15
- mobileLeftPadding: 0,
16
- mobileRightPadding: 0,
17
- cardsInRow: 2,
18
- unresponsive: !1,
19
- priceBeforeTextValue: "",
20
- priceAfterTextValue: "",
21
- discountBeforeTextValue: "",
22
- discountAfterTextValue: ""
23
- })
24
- });
25
- export {
26
- m as useRecommendation
27
- };
@@ -1,4 +0,0 @@
1
- import { SavedTemplateDetails } from '@@/Types/stripo';
2
- export declare const useSave: () => {
3
- save: (isSilent?: boolean) => Promise<SavedTemplateDetails | undefined>;
4
- };
@@ -1,15 +0,0 @@
1
- import { useSaveStart as i, useSaveComplete as m } from "./useGuidoActions.js";
2
- import { useTemplatePreparation as n } from "../utils/templatePreparation.js";
3
- import { useHtmlValidator as l } from "./useHtmlValidator.js";
4
- const f = () => {
5
- const e = i(), a = m(), { validateHtml: s } = l();
6
- return { save: async (o = !1) => {
7
- e();
8
- const { prepareTemplateDetails: r } = n(), t = await r();
9
- if (await s(t.compiledHtml, t.dynamicContentList, !0))
10
- return o || a(t), t;
11
- } };
12
- };
13
- export {
14
- f as useSave
15
- };
@@ -1,36 +0,0 @@
1
- const c = `
2
- <!--[if gte mso 9]>
3
- <xml>
4
- <o:OfficeDocumentSettings>
5
- <o:AllowPNG></o:AllowPNG>
6
- <o:PixelsPerInch>96</o:PixelsPerInch>
7
- </o:OfficeDocumentSettings>
8
- </xml>
9
- <![endif]-->`, s = {
10
- xmlns: "http://www.w3.org/1999/xhtml",
11
- "xmlns:o": "urn:schemas-microsoft-com:office:office"
12
- }, r = [
13
- {
14
- id: "append-office-xml",
15
- description: "Appending office XML into the head if it does not exist.",
16
- type: "custom",
17
- processor: (e) => e.includes("<o:OfficeDocumentSettings>") ? e : e.replace("</head>", `${c}</head>`),
18
- priority: 70
19
- },
20
- {
21
- id: "set-html-attributes",
22
- description: "Appending office XML into the head if it does not exist.",
23
- type: "custom",
24
- processor: (e) => {
25
- let t = e;
26
- return Object.entries(s).forEach(([o, i]) => {
27
- const n = new RegExp(`${o}="[^"]*"`);
28
- t.search(n) === -1 && (t = t.replace("<html", `<html ${o}="${i}"`));
29
- }), t;
30
- },
31
- priority: 71
32
- }
33
- ];
34
- export {
35
- r as outlookCompilerRules
36
- };
@@ -1,2 +0,0 @@
1
- import type { CompilerRule } from '@@/Types/html-compiler';
2
- export declare const recommendationCompilerRules: CompilerRule[];
@@ -1,83 +0,0 @@
1
- import { useRecommendation as u } from "../../composables/useRecommendation.js";
2
- import { DUMMY_IMAGE_MAPPINGS as P, REGEX as i, CSS as e, CONDITIONS as E, ATTRIBUTES as r, HTML as h } from "../../enums/recommendation.js";
3
- const H = [
4
- {
5
- id: "replace-images-with-variable-names",
6
- description: "Replacing dummy images with variable names in recommendation module",
7
- type: "custom",
8
- processor: (a) => {
9
- let t = a;
10
- return Object.entries(P).forEach(([, n]) => {
11
- Object.entries(n).forEach(([s, o]) => {
12
- t = t.replaceAll(o, `{{${s}}}`);
13
- });
14
- }), t;
15
- },
16
- priority: 50
17
- },
18
- {
19
- id: "replace-recommendation-button-span-css",
20
- description: "Replacing recommendation button span css",
21
- type: "replace",
22
- search: ".ext-product-button span,",
23
- replacement: ".ext-product-button,",
24
- replaceAll: !0,
25
- priority: 51
26
- },
27
- {
28
- id: "add-recommendation-unresponsive-css",
29
- description: "Adding recommendation unresponsive css",
30
- type: "custom",
31
- processor: (a) => {
32
- const { getRecommendationCampaignData: t } = u();
33
- let n = a;
34
- const s = n.match(i.ID);
35
- if (s) {
36
- const o = [];
37
- if (s.forEach((c) => {
38
- const m = c.slice(35, c.length - 1).trim();
39
- t(m);
40
- }), o.length) {
41
- const c = `width:${Math.min(...o)}px!important;`;
42
- n = n.replace(e.REGULAR_NAME_HEIGHT, `${e.TRIMMED_NAME_HEIGHT} ${c} ${e.ELLIPSIS}`).replace(e.REGULAR_NAME_CONTAINER_HEIGHT, e.TRIMMED_NAME_CONTAINER_CSS).replace(e.RESPONSIVE_NAME_SIZE, `${e.RESPONSIVE_NAME_HEIGHT} ${c} ${e.ELLIPSIS}`).replace(e.RESPONSIVE_NAME_CONTAINER_HEIGHT, e.TRIMMED_RESPONSIVE_NAME_CONTAINER_CSS);
43
- }
44
- }
45
- return n;
46
- },
47
- priority: 52
48
- },
49
- // TODO: prepareRecommendations
50
- // TODO: addRecommendationCustomFields
51
- {
52
- id: "add-discount-conditions",
53
- description: "Adding discount conditions to the recommendation block",
54
- type: "custom",
55
- processor: (a) => {
56
- let t = a;
57
- const n = t.match(i.ATTRIBUTE_PARAGRAPH), { getRecommendationCampaignData: s } = u();
58
- return n !== null && n.forEach((o) => {
59
- const c = o.match(i.CUSTOM_FIELD);
60
- if (!c)
61
- return;
62
- const [m] = c, p = m.match(i.CUSTOM_FIELD_INDEXES_PART), A = m.match(i.CUSTOM_FIELD_NAME_PART), _ = o.match(i.ATTRIBUTE_PARAGRAPH_START_TAG);
63
- if (!p || !A || !_)
64
- return;
65
- const [l] = p, [T] = A, [d] = _, N = T.substring(1, T.length - 2), R = d.match(i.COMPOSITION) !== null;
66
- let O = m;
67
- if (R) {
68
- const M = l.substring(2, l.length - 3);
69
- s(M);
70
- }
71
- const I = l.substring(2);
72
- let S = "";
73
- N in E.IF && (S = E.IF[N].replaceAll(`{${r.DISCOUNT}}`, `${I}${r.DISCOUNT}`).replaceAll(`{${r.OMNIBUS_DISCOUNT}}`, `${I}${r.OMNIBUS_DISCOUNT}`).replaceAll(`{${r.OMNIBUS_PRICE}}`, `${I}${r.OMNIBUS_PRICE}`));
74
- const $ = `${d}${O}${h.PARAGRAPH_END_TAG}`, C = `${S}${R ? $ : o}${E.ELSE}${d}${h.PARAGRAPH_END_TAG}${E.END_IF}`;
75
- t = t.replace(o, C);
76
- }), t;
77
- },
78
- priority: 53
79
- }
80
- ];
81
- export {
82
- H as recommendationCompilerRules
83
- };
@@ -1,2 +0,0 @@
1
- import type { CompilerRule } from '@@/Types/html-compiler';
2
- export declare const socialCompilerRules: CompilerRule[];