@useinsider/guido 1.0.0-beta.7c7bcef → 1.0.0-beta.7e9f048

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 (145) hide show
  1. package/README.md +384 -24
  2. package/dist/@types/generic.d.ts +19 -0
  3. package/dist/App.vue.d.ts +1 -1
  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 +16 -3
  49. package/dist/components/Guido.vue.js +1 -1
  50. package/dist/components/Guido.vue2.js +61 -24
  51. package/dist/components/organisms/header/LeftSlot.vue.js +5 -5
  52. package/dist/components/organisms/header/LeftSlot.vue2.js +10 -8
  53. package/dist/components/organisms/header/MiddleSlot.vue.js +7 -7
  54. package/dist/components/organisms/header/MiddleSlot.vue2.js +15 -17
  55. package/dist/components/organisms/header/RightSlot.vue.d.ts +1 -1
  56. package/dist/components/organisms/header/RightSlot.vue.js +7 -7
  57. package/dist/components/organisms/header/RightSlot.vue2.js +30 -14
  58. package/dist/components/organisms/header/ViewOptions.vue.d.ts +1 -1
  59. package/dist/components/organisms/header/ViewOptions.vue.js +1 -1
  60. package/dist/components/organisms/header/ViewOptions.vue2.js +29 -10
  61. package/dist/components/organisms/header/version-history/RestoreButton.vue.d.ts +1 -1
  62. package/dist/components/organisms/header/version-history/VersionHistoryItem.vue.d.ts +1 -1
  63. package/dist/components/organisms/header/version-history/VersionHistoryItem.vue.js +1 -1
  64. package/dist/components/organisms/header/version-history/ViewOptions.vue.d.ts +1 -1
  65. package/dist/components/organisms/header/version-history/ViewOptions.vue.js +3 -3
  66. package/dist/components/organisms/header/version-history/ViewOptions.vue2.js +34 -16
  67. package/dist/composables/useActionsApi.d.ts +1 -0
  68. package/dist/composables/useActionsApi.js +14 -12
  69. package/dist/composables/useExport.d.ts +1 -1
  70. package/dist/composables/useExport.js +35 -20
  71. package/dist/composables/useGuidoActions.d.ts +46 -0
  72. package/dist/composables/useGuidoActions.js +37 -0
  73. package/dist/composables/useHtmlCompiler.d.ts +4 -0
  74. package/dist/composables/useHtmlCompiler.js +16 -0
  75. package/dist/composables/useProvideInject.d.ts +14 -0
  76. package/dist/composables/useProvideInject.js +17 -0
  77. package/dist/composables/useStripo.js +41 -29
  78. package/dist/config/compiler/htmlCompilerRules.d.ts +2 -0
  79. package/dist/config/compiler/htmlCompilerRules.js +145 -0
  80. package/dist/config/compiler/outlookCompilerRules.d.ts +0 -0
  81. package/dist/extensions/DynamicContent/dynamic-content-modal.d.ts +6 -0
  82. package/dist/extensions/DynamicContent/dynamic-content-modal.js +27 -0
  83. package/dist/extensions/DynamicContent/dynamic-content.css.js +24 -0
  84. package/dist/extensions/DynamicContent/dynamic-content.d.ts +16 -0
  85. package/dist/extensions/DynamicContent/dynamic-content.js +63 -0
  86. package/dist/extensions/DynamicContent/extension.d.ts +2 -0
  87. package/dist/extensions/DynamicContent/extension.js +11 -0
  88. package/dist/guido.css +1 -1
  89. package/dist/mock/api/default-template.d.ts +2 -0
  90. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/Extension.js +51 -0
  91. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/ExtensionBuilder.js +52 -0
  92. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/blocks/Block.js +41 -0
  93. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/blocks/BlockRenderer.js +18 -0
  94. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/blocks/BlocksPanel.js +32 -0
  95. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/blocks/ContextAction.js +18 -0
  96. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/constants/AddCustomFont.js +8 -0
  97. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/constants/AiAssistantValueType.js +13 -0
  98. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/constants/BlockAttributes.js +34 -0
  99. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/constants/BlockCompositionType.js +13 -0
  100. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/constants/BlockType.js +13 -0
  101. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/constants/BuiltInControlTypes.js +104 -0
  102. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/constants/ContextActionType.js +13 -0
  103. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/constants/EditorStatePropertyType.js +13 -0
  104. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/constants/PanelPosition.js +13 -0
  105. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/constants/PreviewDeviceMode.js +13 -0
  106. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/constants/SettingsTab.js +13 -0
  107. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/constants/UIElementType.js +13 -0
  108. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/constants/UIElementsAttributes.js +45 -0
  109. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/BackgroundColorBuiltInControl.js +43 -0
  110. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/BackgroundImageBuiltInControl.js +46 -0
  111. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/BlockPaddingsBuiltInControl.js +44 -0
  112. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/BuiltInControl.js +22 -0
  113. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/ButtonBorderBuiltInControl.js +46 -0
  114. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/ButtonColorBuiltInControl.js +46 -0
  115. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/ButtonFontColorBuiltInControl.js +45 -0
  116. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/ButtonInternalIndentsBuiltInControl.js +45 -0
  117. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/ButtonTextBuiltInControl.js +45 -0
  118. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/Control.js +20 -0
  119. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/FontFamilyBuiltInControl.js +43 -0
  120. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/LinkColorBuiltInControl.js +45 -0
  121. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/SettingsPanelRegistry.js +18 -0
  122. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/SettingsPanelTab.js +32 -0
  123. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/StructureBorderBuiltInControl.js +46 -0
  124. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/StructurePaddingsBuiltInControl.js +44 -0
  125. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/TextColorBuiltInControl.js +43 -0
  126. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/TextLineSpacingBuiltInControl.js +43 -0
  127. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/TextSizeBuiltInControl.js +45 -0
  128. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/TextStyleBuiltInControl.js +43 -0
  129. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/index.js +266 -0
  130. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/modifications/ModificationDescription.js +26 -0
  131. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/ui-elements/UIElement.js +22 -0
  132. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/ui-elements/UIElementTagRegistry.js +18 -0
  133. package/dist/services/stripoApi.d.ts +2 -1
  134. package/dist/services/stripoApi.js +27 -7
  135. package/dist/stores/editor.d.ts +1 -0
  136. package/dist/stores/editor.js +3 -2
  137. package/dist/utils/htmlCompiler.d.ts +12 -0
  138. package/dist/utils/htmlCompiler.js +70 -0
  139. package/dist/utils/tooltipUtils.d.ts +2 -0
  140. package/dist/utils/tooltipUtils.js +11 -0
  141. package/package.json +6 -5
  142. package/dist/composables/useTemplates.d.ts +0 -5
  143. package/dist/composables/useTemplates.js +0 -27
  144. package/dist/static/templates/default/index.html.js +0 -5
  145. package/dist/static/templates/default/style.css.js +0 -119
@@ -1,5 +1,5 @@
1
- const d = () => ({ getCompiledEmail: (t = {}) => new Promise((a, i) => {
2
- const m = { ...{
1
+ const g = () => ({ getCompiledEmail: (t = {}) => new Promise((i, a) => {
2
+ const s = { ...{
3
3
  minimize: !0,
4
4
  utmEntity: {
5
5
  utmSource: "",
@@ -18,19 +18,21 @@ const d = () => ({ getCompiledEmail: (t = {}) => new Promise((a, i) => {
18
18
  forseAmp: !1,
19
19
  resetDataSavedFlag: !1,
20
20
  disableLineHeightsReplace: !0
21
- }, ...t }, s = {
22
- callback: (e, l, n, o, c) => {
23
- e ? i(e) : a({
24
- html: l,
25
- ampHtml: n,
26
- ampErrors: o,
21
+ }, ...t }, o = {
22
+ callback: (e, m, l, n, c) => {
23
+ e ? a(e) : i({
24
+ html: m,
25
+ ampHtml: l,
26
+ ampErrors: n,
27
27
  displayConditions: c
28
28
  });
29
29
  },
30
- ...m
30
+ ...s
31
31
  };
32
- window.StripoEditorApi.actionsApi.compileEmail(s);
33
- }) });
32
+ window.StripoEditorApi.actionsApi.compileEmail(o);
33
+ }), activateCustomViewStyles: (t = !0) => {
34
+ window.StripoEditorApi.actionsApi.activateCustomViewStyles(t);
35
+ } });
34
36
  export {
35
- d as useActionsApi
37
+ g as useActionsApi
36
38
  };
@@ -1,3 +1,3 @@
1
1
  export declare const useExport: () => {
2
- exportHtml: () => Promise<void>;
2
+ exportHtml: (compile?: boolean) => Promise<void>;
3
3
  };
@@ -1,30 +1,45 @@
1
1
  import { useActionsApi as l } from "./useActionsApi.js";
2
- import { useToaster as m } from "./useToaster.js";
3
- const u = () => {
4
- const a = (r, t, e) => {
5
- const n = new Blob([r], { type: e }), s = URL.createObjectURL(n), o = document.createElement("a");
6
- o.href = s, o.download = t, document.body.appendChild(o), o.click(), document.body.removeChild(o), URL.revokeObjectURL(s);
7
- }, c = (r) => {
8
- const t = /* @__PURE__ */ new Date(), e = String(t.getDate()).padStart(2, "0"), n = String(t.getMonth() + 1).padStart(2, "0"), s = t.getFullYear(), o = String(t.getHours()).padStart(2, "0"), i = String(t.getMinutes()).padStart(2, "0");
9
- return `${r}_${e}-${n}-${s}_${o}-${i}.html`;
2
+ import { useHtmlCompiler as m } from "./useHtmlCompiler.js";
3
+ import { useToaster as d } from "./useToaster.js";
4
+ const h = () => {
5
+ const a = (s, o, r) => {
6
+ const i = new Blob([s], { type: r }), t = URL.createObjectURL(i), e = document.createElement("a");
7
+ e.href = t, e.download = o, document.body.appendChild(e), e.click(), document.body.removeChild(e), URL.revokeObjectURL(t);
8
+ }, c = (s) => {
9
+ const o = /* @__PURE__ */ new Date(), r = String(o.getDate()).padStart(2, "0"), i = String(o.getMonth() + 1).padStart(2, "0"), t = o.getFullYear(), e = String(o.getHours()).padStart(2, "0"), n = String(o.getMinutes()).padStart(2, "0");
10
+ return `${s}_${r}-${i}-${t}_${e}-${n}.html`;
10
11
  };
11
- return { exportHtml: async () => {
12
- const { getCompiledEmail: r } = l(), { showToaster: t } = m();
12
+ return { exportHtml: async (s = !0) => {
13
+ const { getCompiledEmail: o } = l(), { showToaster: r } = d(), { compileHtml: i } = m();
13
14
  try {
14
- const { html: e } = await r();
15
- e ? a(e, c("HTML"), "text/html") : t({
15
+ const { html: t } = await o();
16
+ if (t) {
17
+ let e = t;
18
+ if (s) {
19
+ const n = i(t);
20
+ e = n.compiledHtml, console.debug("HTML Compilation Stats:", {
21
+ originalSize: n.stats.originalSize,
22
+ compiledSize: n.stats.compiledSize,
23
+ reduction: `${n.stats.reductionPercentage.toFixed(2)}%`,
24
+ appliedRules: n.appliedRules,
25
+ executionTime: `${n.stats.executionTime.toFixed(2)}ms`
26
+ });
27
+ }
28
+ a(e, c("HTML"), "text/html");
29
+ } else
30
+ r({
31
+ type: "error",
32
+ message: "No HTML content to download"
33
+ });
34
+ } catch (t) {
35
+ const e = t instanceof Error ? t.message : String(t);
36
+ r({
16
37
  type: "error",
17
- message: "No HTML content to download"
18
- });
19
- } catch (e) {
20
- const n = e instanceof Error ? e.message : String(e);
21
- t({
22
- type: "error",
23
- message: `Error compiling email: ${n}`
38
+ message: `Error compiling email: ${e}`
24
39
  });
25
40
  }
26
41
  } };
27
42
  };
28
43
  export {
29
- u as useExport
44
+ h as useExport
30
45
  };
@@ -0,0 +1,46 @@
1
+ import type { Template } from '@@/Types/stripo';
2
+ import type { InjectionKey } from 'vue';
3
+ export type BackHandler = () => void;
4
+ export type SaveStartHandler = () => void;
5
+ export type SaveCompleteHandler = (template: Omit<Template, 'forceRecreate'>) => void;
6
+ export declare const BACK_KEY: InjectionKey<BackHandler>;
7
+ export declare const SAVE_START_KEY: InjectionKey<SaveStartHandler>;
8
+ export declare const SAVE_COMPLETE_KEY: InjectionKey<SaveCompleteHandler>;
9
+ /**
10
+ * Provides Guido action handlers to child components
11
+ */
12
+ export declare const provideGuidoActions: (actions: {
13
+ onBack: BackHandler;
14
+ onSaveStart: SaveStartHandler;
15
+ onSaveComplete: SaveCompleteHandler;
16
+ }) => void;
17
+ /**
18
+ * Provides individual Guido action handlers
19
+ */
20
+ export declare const provideBackHandler: (handler: BackHandler) => void;
21
+ export declare const provideSaveStartHandler: (handler: SaveStartHandler) => void;
22
+ export declare const provideSaveCompleteHandler: (handler: SaveCompleteHandler) => void;
23
+ /**
24
+ * Hook to use the back navigation handler
25
+ * @returns Back navigation function
26
+ */
27
+ export declare const useBack: () => BackHandler;
28
+ /**
29
+ * Hook to use the save start handler
30
+ * @returns Save start function
31
+ */
32
+ export declare const useSaveStart: () => SaveStartHandler;
33
+ /**
34
+ * Hook to use the save complete handler
35
+ * @returns Save complete function
36
+ */
37
+ export declare const useSaveComplete: () => SaveCompleteHandler;
38
+ /**
39
+ * Convenience hook to get all Guido actions
40
+ * @returns Object containing all action handlers
41
+ */
42
+ export declare const useGuidoActions: () => {
43
+ back: BackHandler;
44
+ saveStart: SaveStartHandler;
45
+ saveComplete: SaveCompleteHandler;
46
+ };
@@ -0,0 +1,37 @@
1
+ import { provideValue as o, useInjectedValue as t } from "./useProvideInject.js";
2
+ const r = Symbol.for("guido.back"), n = Symbol.for("guido.save.start"), a = Symbol.for("guido.save.complete"), s = (e) => {
3
+ o(r, e.onBack), o(n, e.onSaveStart), o(a, e.onSaveComplete);
4
+ }, u = () => {
5
+ try {
6
+ return t(r);
7
+ } catch {
8
+ throw new Error(
9
+ "useBack: No back handler provided. Make sure Guido component is in the component tree."
10
+ );
11
+ }
12
+ }, d = () => {
13
+ try {
14
+ return t(n);
15
+ } catch {
16
+ throw new Error(
17
+ "useSaveStart: No save start handler provided. Make sure Guido component is in the component tree."
18
+ );
19
+ }
20
+ }, i = () => {
21
+ try {
22
+ return t(a);
23
+ } catch {
24
+ throw new Error(
25
+ "useSaveComplete: No save complete handler provided. Make sure Guido component is in the component tree."
26
+ );
27
+ }
28
+ };
29
+ export {
30
+ r as BACK_KEY,
31
+ a as SAVE_COMPLETE_KEY,
32
+ n as SAVE_START_KEY,
33
+ s as provideGuidoActions,
34
+ u as useBack,
35
+ i as useSaveComplete,
36
+ d as useSaveStart
37
+ };
@@ -0,0 +1,4 @@
1
+ import type { CompilationResult } from '@@/Types/html-compiler';
2
+ export declare const useHtmlCompiler: () => {
3
+ compileHtml: (html: string) => CompilationResult;
4
+ };
@@ -0,0 +1,16 @@
1
+ import { defaultHtmlCompilerRules as r } from "../config/compiler/htmlCompilerRules.js";
2
+ import { createHtmlCompiler as p } from "../utils/htmlCompiler.js";
3
+ const a = () => {
4
+ const e = typeof window < "u" ? window.GuidoConfig : void 0, l = (e == null ? void 0 : e.htmlCompilerRules) || [], t = [
5
+ ...!!(e != null && e.ignoreDefaultHtmlCompilerRules) ? [] : r,
6
+ ...l.map((o, m) => ({
7
+ ...o,
8
+ priority: o.priority + 1e3 + m
9
+ // Ensure additional rules run after default rules
10
+ }))
11
+ ], i = p(t);
12
+ return { compileHtml: (o) => i.compile(o) };
13
+ };
14
+ export {
15
+ a as useHtmlCompiler
16
+ };
@@ -0,0 +1,14 @@
1
+ import { type InjectionKey } from 'vue';
2
+ /**
3
+ * Provides a value using Vue's provide/inject system
4
+ * @param key - The injection key
5
+ * @param value - The value to provide
6
+ */
7
+ export declare const provideValue: <T>(key: InjectionKey<T>, value: T) => void;
8
+ /**
9
+ * Injects a value using Vue's provide/inject system
10
+ * @param key - The injection key
11
+ * @param defaultValue - Optional default value if injection fails
12
+ * @returns The injected value
13
+ */
14
+ export declare const useInjectedValue: <T>(key: InjectionKey<T>, defaultValue?: T) => T;
@@ -0,0 +1,17 @@
1
+ import { provide as t, inject as i } from "vue";
2
+ const d = (e, o) => {
3
+ t(e, o);
4
+ }, s = (e, o) => {
5
+ const r = i(e, o);
6
+ if (r === void 0 && o === void 0) {
7
+ const n = e.description || String(e);
8
+ throw new Error(
9
+ `useInjectedValue: No provider found for key "${n}". Make sure a parent component provides this value.`
10
+ );
11
+ }
12
+ return r;
13
+ };
14
+ export {
15
+ d as provideValue,
16
+ s as useInjectedValue
17
+ };
@@ -1,79 +1,91 @@
1
- import { useCustomInterfaceAppearance as m } from "./useCustomInterfaceAppearance.js";
2
- import { useToaster as g } from "./useToaster.js";
3
- import { displayConditions as E } from "../enums/displayConditions.js";
4
- import { useStripoApi as S } from "../services/stripoApi.js";
1
+ import { useActionsApi as g } from "./useActionsApi.js";
2
+ import { useCustomInterfaceAppearance as f } from "./useCustomInterfaceAppearance.js";
3
+ import { useToaster as E } from "./useToaster.js";
4
+ import { displayConditions as S } from "../enums/displayConditions.js";
5
+ import y from "../extensions/DynamicContent/extension.js";
6
+ import { useStripoApi as C } from "../services/stripoApi.js";
5
7
  import { useEditorStore as w } from "../stores/editor.js";
6
- const F = (c) => {
7
- const { handleError: d } = g(), { getToken: a, getCustomFonts: u } = S(), l = (e, i = []) => {
8
- const r = w(), { html: t, css: n } = e;
8
+ const A = (a) => {
9
+ const { handleError: d } = E(), { getToken: c, getCustomFonts: u } = C(), l = (e, r = []) => {
10
+ const i = w(), { html: t, css: s, forceRecreate: m } = e;
9
11
  window.UIEditor.initEditor(
10
12
  document.querySelector("#guido-editor"),
11
13
  {
12
- metadata: c,
14
+ metadata: a,
13
15
  html: t,
14
- css: n,
16
+ css: s,
17
+ forceRecreate: m,
15
18
  locale: "en",
16
19
  undoButtonSelector: "#guido__undo-button",
17
20
  redoButtonSelector: "#guido__redo-button",
18
21
  mobileViewButtonSelector: ".guido__view-option-selection-mobile",
19
22
  desktopViewButtonSelector: ".guido__view-option-selection-desktop",
20
23
  codeEditorButtonSelector: "#guido__code-button",
24
+ customAppearanceMergetags: !0,
25
+ customAppearanceMergetagsBorderColor: "#f1f3fe",
26
+ customAppearanceMergetagsBackgroundColor: "#f1f3fe",
27
+ customViewStyles: `
28
+ .esd-x, .esd-merge-tag {color: #0a2ecc !important; box-shadow: none !important;}
29
+ .esd-merge-tag {border: 1px solid #b5c1f1; border-radius: 4px !important;}
30
+ `,
21
31
  conditionsEnabled: !0,
22
32
  customConditionsEnabled: !0,
23
- conditionCategories: E,
33
+ conditionCategories: S,
24
34
  messageSettingsEnabled: !1,
25
35
  editorFonts: {
26
36
  showDefaultStandardFonts: !0,
27
37
  showDefaultNotStandardFonts: !0,
28
- customFonts: i
38
+ customFonts: r
29
39
  },
30
40
  async onTokenRefreshRequest(o) {
31
41
  try {
32
- const s = await a();
33
- o(s);
34
- } catch (s) {
35
- d(s, "Failed to refresh token");
42
+ const n = await c();
43
+ o(n);
44
+ } catch (n) {
45
+ d(n, "Failed to refresh token");
36
46
  }
37
47
  },
38
48
  onTemplateLoaded() {
39
49
  try {
40
- const { importCss: o } = m();
41
- o();
50
+ const { importCss: o } = f(), { activateCustomViewStyles: n } = g();
51
+ o(), n();
42
52
  } catch (o) {
43
53
  d(o, "Failed to load custom interface appearance");
44
54
  }
45
55
  },
46
56
  onCodeEditorVisibilityChanged(o) {
47
- r.isCodeEditorOpen = o;
57
+ i.isCodeEditorOpen = o;
48
58
  },
49
59
  onEditorVisualModeChanged(o) {
50
- r.editorVisualMode = o.toLowerCase();
60
+ i.editorVisualMode = o.toLowerCase();
51
61
  },
52
62
  onVersionHistoryVisibilityChanged(o) {
53
- r.isVersionHistoryOpen = o;
54
- }
63
+ i.isVersionHistoryOpen = o;
64
+ },
65
+ ignoreClickOutsideSelectors: ["#guido-dynamic-content-modal"],
66
+ extensions: [y]
55
67
  }
56
68
  );
57
- }, p = (e) => new Promise((i, r) => {
69
+ }, p = (e) => new Promise((r, i) => {
58
70
  if (document.getElementById("UiEditorScript")) {
59
- e(), i();
71
+ e(), r();
60
72
  return;
61
73
  }
62
74
  const t = document.createElement("script");
63
75
  t.id = "UiEditorScript", t.type = "module", t.src = "https://plugins.stripo.email/resources/uieditor/latest/UIEditor.js", t.onload = () => {
64
- e(), i();
76
+ e(), r();
65
77
  }, t.onerror = () => {
66
- const n = new Error("Failed to load Stripo UIEditor script");
67
- r(n);
78
+ const s = new Error("Failed to load Stripo UIEditor script");
79
+ i(s);
68
80
  }, document.body.appendChild(t);
69
81
  });
70
82
  return { initPlugin: async (e) => {
71
83
  await p(async () => {
72
- const i = await u();
73
- l(e, i);
84
+ const r = await u();
85
+ l(e, r);
74
86
  });
75
87
  } };
76
88
  };
77
89
  export {
78
- F as useStripo
90
+ A as useStripo
79
91
  };
@@ -0,0 +1,2 @@
1
+ import type { CompilerRule } from '@@/Types/html-compiler';
2
+ export declare const defaultHtmlCompilerRules: CompilerRule[];
@@ -0,0 +1,145 @@
1
+ const a = [
2
+ {
3
+ id: "fix-url-encoding-start",
4
+ description: "Replace {%22 with %7B%22 to fix URL encoding",
5
+ type: "replace",
6
+ search: "{%22",
7
+ replacement: "%7B%22",
8
+ replaceAll: !0,
9
+ priority: 10
10
+ },
11
+ {
12
+ id: "fix-url-encoding-end",
13
+ description: "Replace %22} with %22%7D to fix URL encoding",
14
+ type: "replace",
15
+ search: "%22}",
16
+ replacement: "%22%7D",
17
+ replaceAll: !0,
18
+ priority: 10
19
+ },
20
+ {
21
+ id: "fix-tags-start",
22
+ description: "Replace %7B%7B with {{ to fix URL encoding",
23
+ type: "replace",
24
+ search: "%7B%7B",
25
+ replacement: "{{",
26
+ replaceAll: !0,
27
+ priority: 11
28
+ },
29
+ {
30
+ id: "fix-tags-end",
31
+ description: "Replace %7D%7D with }} to fix URL encoding",
32
+ type: "replace",
33
+ search: "%7D%7D",
34
+ replacement: "}}",
35
+ replaceAll: !0,
36
+ priority: 12
37
+ },
38
+ {
39
+ id: "unescape-inequality-operators-start",
40
+ description: "Replace &lt; with < to fix URL encoding",
41
+ type: "replace",
42
+ search: "&lt;",
43
+ replacement: "<",
44
+ replaceAll: !0,
45
+ priority: 13
46
+ },
47
+ {
48
+ id: "unescape-inequality-operators-end",
49
+ description: "Replace &gt; with > to fix URL encoding",
50
+ type: "replace",
51
+ search: "&gt;",
52
+ replacement: ">",
53
+ replaceAll: !0,
54
+ priority: 14
55
+ },
56
+ {
57
+ id: "remove-apty-iframe",
58
+ description: "Cleanup Apty Iframe Code",
59
+ type: "remove",
60
+ targets: [
61
+ '<iframe src="about:blank" id="letznav-iframe-script" allowtransparency="true" style="width:1px;height:1px"></iframe>',
62
+ 'src="about:blank" id="letznav-iframe-script" allowtransparency="true" style="width:1px;height:1px"></iframe>'
63
+ ],
64
+ priority: 20
65
+ },
66
+ {
67
+ id: "remove-apty-styles",
68
+ description: "Removing Apty Styles",
69
+ type: "regex",
70
+ pattern: '<styles*data-styles="apty_styles"s* type="text/css"s*>((s|.)*?)</style>',
71
+ replacement: "",
72
+ flags: "g",
73
+ priority: 21
74
+ },
75
+ {
76
+ id: "remove-mso-conditions",
77
+ description: "Removing MSO Conditions",
78
+ type: "remove",
79
+ targets: [
80
+ /<!--\[if\s\(mso 16\)\]>\s*<style\s*\S*>\s*a\s*\{\s*text-decoration\s*:\s*none\s*;*\s*\}\s*<\/style>\s*<!\[endif\]-->/g,
81
+ /<!--\[if\sgte mso 9\]>\s*<style\s*\S*>\s*sup\s*\{\s*font-size\s*:\s*100%\s*!important\s*;*\s*\}\s*<\/style>\s*<!\[endif\]-->/g,
82
+ /<!--\[if\sgte mso 9\]>\s*<noscript>\s*<xml>\s*<o:OfficeDocumentSettings>\s*<o:AllowPNG>\s*<\/o:AllowPNG>\s*<o:PixelsPerInch>\d+<\/o:PixelsPerInch>\s*<\/o:OfficeDocumentSettings>\s*<\/xml>\s*<\/noscript>\s*<!\[endif\]-->/g,
83
+ /<!--\[if mso\]>\s*<xml>\s*<w:WordDocument\s+xmlns:w="urn:schemas-microsoft-com:office:word">\s*<w:DontUseAdvancedTypographyReadingMail><\/w:DontUseAdvancedTypographyReadingMail>\s*<\/w:WordDocument>\s*<\/xml>\s*<!\[endif\]-->/g,
84
+ /<\!--\[if \!mso\]><\!--\s*\d*\s*-->\s*<\!--\[if \!mso\]><\!--\s*\d*\s*-->\s*<\!--<!\[endif\]-->/g,
85
+ /<!--\[if\s\!mso\]>\s*<!-- \d -->/g
86
+ ],
87
+ priority: 22
88
+ },
89
+ {
90
+ id: "add-mso-conditions",
91
+ description: "Adding MSO Conditions",
92
+ type: "custom",
93
+ processor: (e) => {
94
+ const t = [
95
+ `<!--[if gte mso 9]>
96
+ <style>sup {
97
+ font-size: 100% !important;
98
+ }</style><![endif]-->`,
99
+ `<!--[if gte mso 9]>
100
+ <noscript>
101
+ <xml>
102
+ <o:OfficeDocumentSettings>
103
+ <o:AllowPNG></o:AllowPNG>
104
+ <o:PixelsPerInch>96</o:PixelsPerInch>
105
+ </o:OfficeDocumentSettings>
106
+ </xml>
107
+ </noscript><![endif]-->`,
108
+ `<!--[if mso]>
109
+ <xml>
110
+ <w:WordDocument xmlns:w="urn:schemas-microsoft-com:office:word">
111
+ <w:DontUseAdvancedTypographyReadingMail></w:DontUseAdvancedTypographyReadingMail>
112
+ </w:WordDocument>
113
+ </xml><![endif]-->`
114
+ ], s = /<head>([\S\s]*)<\/head>/, o = new RegExp(s);
115
+ if (!e.match(o))
116
+ return e;
117
+ let i = e;
118
+ return t.forEach((r) => {
119
+ i = i.replace("</head>", `${r}</head>`);
120
+ }), i;
121
+ },
122
+ priority: 30
123
+ },
124
+ {
125
+ id: "replace-old-image-domain",
126
+ description: "Replacing old image domains",
127
+ type: "replace",
128
+ search: "stripo-editor-image.s3-eu-west-1.amazonaws.com",
129
+ replacement: "email-static.useinsider.com",
130
+ replaceAll: !0,
131
+ priority: 40
132
+ },
133
+ {
134
+ id: "replace-old-v2-image-domain",
135
+ description: "Replacing old image domains",
136
+ type: "replace",
137
+ search: "email.static.useinsider.com",
138
+ replacement: "email-static.useinsider.com",
139
+ replaceAll: !0,
140
+ priority: 41
141
+ }
142
+ ];
143
+ export {
144
+ a as defaultHtmlCompilerRules
145
+ };
File without changes
@@ -0,0 +1,6 @@
1
+ import type { DynamicContent } from '@@/Types/generic';
2
+ export declare class ExternalMergeTagsLibrary {
3
+ selectedDynamicContent: DynamicContent | null;
4
+ dataSelectCallback: (data: DynamicContent) => void;
5
+ openMergeTagsLibrary(dynamicContent: DynamicContent, onDataSelectCallback: (data: DynamicContent) => void): void;
6
+ }
@@ -0,0 +1,27 @@
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
+ constructor() {
6
+ a(this, "selectedDynamicContent", null);
7
+ a(this, "dataSelectCallback", () => {
8
+ });
9
+ }
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
+ }
16
+ });
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);
23
+ }
24
+ }
25
+ export {
26
+ y as ExternalMergeTagsLibrary
27
+ };
@@ -0,0 +1,24 @@
1
+ const n = `
2
+ #guido__btn-add-dynamic-content {
3
+ background-color: transparent;
4
+ }
5
+
6
+ #guido__btn-add-dynamic-content > button {
7
+ color: var(--guido-color-primary-500);
8
+ background-color: transparent;
9
+ box-shadow: none;
10
+ padding: 0;
11
+ border: none;
12
+ }
13
+
14
+ #guido__btn-add-dynamic-content > button:hover {
15
+ text-decoration: underline;
16
+ }
17
+
18
+ .color-primary {
19
+ color: var(--guido-color-primary-500) !important;
20
+ }
21
+ `;
22
+ export {
23
+ n as default
24
+ };
@@ -0,0 +1,16 @@
1
+ import { UIElementType, UIElement, UIElementTagRegistry } from '@stripoinc/ui-editor-extensions';
2
+ export declare class DynamicContentTagRegistry extends UIElementTagRegistry {
3
+ registerUiElements(uiElementsTagsMap: Record<UIElementType, string>): void;
4
+ }
5
+ export declare class DynamicContentUiElementExtension extends UIElement {
6
+ private mergeTagsButton;
7
+ private listener;
8
+ private mergeTagsLibrary;
9
+ private selectedDynamicContent;
10
+ getId(): string;
11
+ onRender(container: HTMLElement): void;
12
+ onDestroy(): void;
13
+ _onClick(): void;
14
+ openMergeTagLibrary(): void;
15
+ getTemplate(): string;
16
+ }
@@ -0,0 +1,63 @@
1
+ var l = Object.defineProperty;
2
+ var o = (i, t, e) => t in i ? l(i, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : i[t] = e;
3
+ var r = (i, t, e) => o(i, typeof t != "symbol" ? t + "" : t, e);
4
+ import { d as n } from "../../_virtual/index.js";
5
+ import { ExternalMergeTagsLibrary as c } from "./dynamic-content-modal.js";
6
+ const a = "external-dynamic-content-ui-element", m = "button-add-dynamic-content";
7
+ class d extends n.UIElementTagRegistry {
8
+ registerUiElements(t) {
9
+ t[n.UIElementType.MERGETAGS] = a;
10
+ }
11
+ }
12
+ class b extends n.UIElement {
13
+ constructor() {
14
+ super(...arguments);
15
+ r(this, "mergeTagsButton", null);
16
+ r(this, "listener", () => {
17
+ });
18
+ r(this, "mergeTagsLibrary", null);
19
+ r(this, "selectedDynamicContent", { value: "", text: "" });
20
+ }
21
+ getId() {
22
+ return a;
23
+ }
24
+ onRender(e) {
25
+ var s;
26
+ this.listener = this._onClick.bind(this), this.mergeTagsButton = e.querySelector("#guido__btn-add-dynamic-content"), (s = this.mergeTagsButton) == null || s.addEventListener("click", this.listener);
27
+ }
28
+ onDestroy() {
29
+ var e;
30
+ (e = this.mergeTagsButton) == null || e.removeEventListener("click", this.listener);
31
+ }
32
+ _onClick() {
33
+ this.openMergeTagLibrary();
34
+ }
35
+ openMergeTagLibrary() {
36
+ this.mergeTagsLibrary || (this.mergeTagsLibrary = new c()), this.mergeTagsLibrary.openMergeTagsLibrary(
37
+ this.selectedDynamicContent,
38
+ (e) => {
39
+ this.api.onValueChanged({
40
+ label: e.fallback ? `${e.text} | ${e.fallback}` : e.text,
41
+ value: e.fallback ? `{{${e.value}|${e.fallback}}}` : `{{${e.value}}}`
42
+ });
43
+ }
44
+ );
45
+ }
46
+ getTemplate() {
47
+ return `
48
+ <div>
49
+ <${n.UIElementType.BUTTON}
50
+ id="guido__btn-add-dynamic-content"
51
+ class="btn btn-primary"
52
+ ${n.UEAttr.BUTTON.name}="${m}">
53
+ <${n.UIElementType.ICON} src="plus" class="icon icon-button color-primary">
54
+ </${n.UIElementType.ICON}>
55
+ ${this.api.translate("Add Dynamic Content")}
56
+ </${n.UIElementType.BUTTON}>
57
+ </div>`;
58
+ }
59
+ }
60
+ export {
61
+ d as DynamicContentTagRegistry,
62
+ b as DynamicContentUiElementExtension
63
+ };