@useinsider/guido 1.0.0-beta.e73b90d → 1.0.0-beta.e830eab

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 (146) hide show
  1. package/README.md +11 -259
  2. package/dist/@types/generic.d.ts +0 -8
  3. package/dist/App.vue.d.ts +1 -1
  4. package/dist/components/Guido.vue.d.ts +3 -12
  5. package/dist/components/Guido.vue.js +8 -8
  6. package/dist/components/Guido.vue2.js +28 -46
  7. package/dist/components/organisms/header/MiddleSlot.vue.js +1 -1
  8. package/dist/components/organisms/header/RightSlot.vue.d.ts +1 -1
  9. package/dist/components/organisms/header/RightSlot.vue.js +1 -1
  10. package/dist/components/organisms/header/RightSlot.vue2.js +12 -10
  11. package/dist/components/organisms/header/ViewOptions.vue.d.ts +1 -1
  12. package/dist/components/organisms/header/version-history/RestoreButton.vue.d.ts +1 -1
  13. package/dist/components/organisms/header/version-history/VersionHistoryItem.vue.d.ts +1 -1
  14. package/dist/components/organisms/header/version-history/VersionHistoryItem.vue.js +1 -1
  15. package/dist/components/organisms/header/version-history/ViewOptions.vue.d.ts +1 -1
  16. package/dist/components/organisms/save-template/SaveTemplateModal.vue.d.ts +16 -0
  17. package/dist/components/organisms/save-template/SaveTemplateModal.vue.js +22 -0
  18. package/dist/components/organisms/save-template/SaveTemplateModal.vue2.js +79 -0
  19. package/dist/components/wrappers/ModalWrapper.vue.d.ts +72 -0
  20. package/dist/components/wrappers/ModalWrapper.vue.js +19 -0
  21. package/dist/components/wrappers/ModalWrapper.vue2.js +43 -0
  22. package/dist/composables/useActionsApi.d.ts +0 -1
  23. package/dist/composables/useActionsApi.js +12 -14
  24. package/dist/composables/useExport.d.ts +1 -1
  25. package/dist/composables/useExport.js +20 -35
  26. package/dist/composables/useSaveAsTemplate.d.ts +7 -0
  27. package/dist/composables/useSaveAsTemplate.js +44 -0
  28. package/dist/composables/useStripo.js +28 -40
  29. package/dist/composables/useTemplateNameValidation.d.ts +13 -0
  30. package/dist/composables/useTemplateNameValidation.js +57 -0
  31. package/dist/composables/useTemplates.d.ts +5 -0
  32. package/dist/composables/useTemplates.js +27 -0
  33. package/dist/guido.css +1 -1
  34. package/dist/services/stripoApi.d.ts +1 -2
  35. package/dist/services/stripoApi.js +7 -23
  36. package/dist/static/templates/default/index.html.js +5 -0
  37. package/dist/static/templates/default/style.css.js +119 -0
  38. package/dist/stores/editor.d.ts +1 -0
  39. package/dist/stores/editor.js +2 -1
  40. package/dist/stores/template-categories.d.ts +41 -0
  41. package/dist/stores/template-categories.js +91 -0
  42. package/dist/utils/base64.d.ts +2 -0
  43. package/dist/utils/base64.js +14 -0
  44. package/package.json +5 -6
  45. package/dist/_virtual/AddCustomFont.js +0 -4
  46. package/dist/_virtual/AiAssistantValueType.js +0 -4
  47. package/dist/_virtual/BackgroundColorBuiltInControl.js +0 -4
  48. package/dist/_virtual/BackgroundImageBuiltInControl.js +0 -4
  49. package/dist/_virtual/Block.js +0 -4
  50. package/dist/_virtual/BlockAttributes.js +0 -4
  51. package/dist/_virtual/BlockCompositionType.js +0 -4
  52. package/dist/_virtual/BlockPaddingsBuiltInControl.js +0 -4
  53. package/dist/_virtual/BlockRenderer.js +0 -4
  54. package/dist/_virtual/BlockType.js +0 -4
  55. package/dist/_virtual/BlocksPanel.js +0 -4
  56. package/dist/_virtual/BuiltInControl.js +0 -4
  57. package/dist/_virtual/BuiltInControlTypes.js +0 -4
  58. package/dist/_virtual/ButtonBorderBuiltInControl.js +0 -4
  59. package/dist/_virtual/ButtonColorBuiltInControl.js +0 -4
  60. package/dist/_virtual/ButtonFontColorBuiltInControl.js +0 -4
  61. package/dist/_virtual/ButtonInternalIndentsBuiltInControl.js +0 -4
  62. package/dist/_virtual/ButtonTextBuiltInControl.js +0 -4
  63. package/dist/_virtual/ContextAction.js +0 -4
  64. package/dist/_virtual/ContextActionType.js +0 -4
  65. package/dist/_virtual/Control.js +0 -4
  66. package/dist/_virtual/EditorStatePropertyType.js +0 -4
  67. package/dist/_virtual/Extension.js +0 -4
  68. package/dist/_virtual/ExtensionBuilder.js +0 -4
  69. package/dist/_virtual/FontFamilyBuiltInControl.js +0 -4
  70. package/dist/_virtual/LinkColorBuiltInControl.js +0 -4
  71. package/dist/_virtual/ModificationDescription.js +0 -4
  72. package/dist/_virtual/PanelPosition.js +0 -4
  73. package/dist/_virtual/PreviewDeviceMode.js +0 -4
  74. package/dist/_virtual/SettingsPanelRegistry.js +0 -4
  75. package/dist/_virtual/SettingsPanelTab.js +0 -4
  76. package/dist/_virtual/SettingsTab.js +0 -4
  77. package/dist/_virtual/StructureBorderBuiltInControl.js +0 -4
  78. package/dist/_virtual/StructurePaddingsBuiltInControl.js +0 -4
  79. package/dist/_virtual/TextColorBuiltInControl.js +0 -4
  80. package/dist/_virtual/TextLineSpacingBuiltInControl.js +0 -4
  81. package/dist/_virtual/TextSizeBuiltInControl.js +0 -4
  82. package/dist/_virtual/TextStyleBuiltInControl.js +0 -4
  83. package/dist/_virtual/UIElement.js +0 -4
  84. package/dist/_virtual/UIElementTagRegistry.js +0 -4
  85. package/dist/_virtual/UIElementType.js +0 -4
  86. package/dist/_virtual/UIElementsAttributes.js +0 -4
  87. package/dist/_virtual/index.js +0 -5
  88. package/dist/_virtual/index2.js +0 -4
  89. package/dist/composables/useHtmlCompiler.d.ts +0 -4
  90. package/dist/composables/useHtmlCompiler.js +0 -16
  91. package/dist/config/compiler/htmlCompilerRules.d.ts +0 -2
  92. package/dist/config/compiler/htmlCompilerRules.js +0 -145
  93. package/dist/config/compiler/outlookCompilerRules.d.ts +0 -0
  94. package/dist/extensions/DynamicContent/dynamic-content-modal.d.ts +0 -6
  95. package/dist/extensions/DynamicContent/dynamic-content-modal.js +0 -27
  96. package/dist/extensions/DynamicContent/dynamic-content.css.js +0 -24
  97. package/dist/extensions/DynamicContent/dynamic-content.d.ts +0 -16
  98. package/dist/extensions/DynamicContent/dynamic-content.js +0 -63
  99. package/dist/extensions/DynamicContent/extension.d.ts +0 -2
  100. package/dist/extensions/DynamicContent/extension.js +0 -11
  101. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/Extension.js +0 -51
  102. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/ExtensionBuilder.js +0 -52
  103. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/blocks/Block.js +0 -41
  104. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/blocks/BlockRenderer.js +0 -18
  105. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/blocks/BlocksPanel.js +0 -32
  106. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/blocks/ContextAction.js +0 -18
  107. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/constants/AddCustomFont.js +0 -8
  108. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/constants/AiAssistantValueType.js +0 -13
  109. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/constants/BlockAttributes.js +0 -34
  110. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/constants/BlockCompositionType.js +0 -13
  111. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/constants/BlockType.js +0 -13
  112. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/constants/BuiltInControlTypes.js +0 -104
  113. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/constants/ContextActionType.js +0 -13
  114. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/constants/EditorStatePropertyType.js +0 -13
  115. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/constants/PanelPosition.js +0 -13
  116. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/constants/PreviewDeviceMode.js +0 -13
  117. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/constants/SettingsTab.js +0 -13
  118. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/constants/UIElementType.js +0 -13
  119. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/constants/UIElementsAttributes.js +0 -45
  120. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/BackgroundColorBuiltInControl.js +0 -43
  121. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/BackgroundImageBuiltInControl.js +0 -46
  122. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/BlockPaddingsBuiltInControl.js +0 -44
  123. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/BuiltInControl.js +0 -22
  124. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/ButtonBorderBuiltInControl.js +0 -46
  125. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/ButtonColorBuiltInControl.js +0 -46
  126. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/ButtonFontColorBuiltInControl.js +0 -45
  127. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/ButtonInternalIndentsBuiltInControl.js +0 -45
  128. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/ButtonTextBuiltInControl.js +0 -45
  129. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/Control.js +0 -20
  130. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/FontFamilyBuiltInControl.js +0 -43
  131. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/LinkColorBuiltInControl.js +0 -45
  132. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/SettingsPanelRegistry.js +0 -18
  133. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/SettingsPanelTab.js +0 -32
  134. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/StructureBorderBuiltInControl.js +0 -46
  135. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/StructurePaddingsBuiltInControl.js +0 -44
  136. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/TextColorBuiltInControl.js +0 -43
  137. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/TextLineSpacingBuiltInControl.js +0 -43
  138. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/TextSizeBuiltInControl.js +0 -45
  139. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/TextStyleBuiltInControl.js +0 -43
  140. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/index.js +0 -266
  141. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/modifications/ModificationDescription.js +0 -26
  142. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/ui-elements/UIElement.js +0 -22
  143. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/ui-elements/UIElementTagRegistry.js +0 -18
  144. package/dist/utils/htmlCompiler.d.ts +0 -12
  145. package/dist/utils/htmlCompiler.js +0 -70
  146. /package/dist/mock/api/{default-template.d.ts → template-library.d.ts} +0 -0
@@ -0,0 +1,79 @@
1
+ import { defineComponent as M, ref as l, watch as T } from "vue";
2
+ import b from "../../wrappers/ModalWrapper.vue.js";
3
+ import { useActionsApi as A } from "../../../composables/useActionsApi.js";
4
+ import { useToaster as L } from "../../../composables/useToaster.js";
5
+ import { useTranslations as N } from "../../../composables/useTranslations.js";
6
+ import { useTemplateCategoriesStore as O } from "../../../stores/template-categories.js";
7
+ import { InMultiSelect as j, InBasicTextInput as x } from "@useinsider/design-system-vue";
8
+ import { useSaveAsTemplate as B } from "../../../composables/useSaveAsTemplate.js";
9
+ import { useTemplateNameValidation as D } from "../../../composables/useTemplateNameValidation.js";
10
+ const G = /* @__PURE__ */ M({
11
+ __name: "SaveTemplateModal",
12
+ props: {
13
+ isOpen: { type: Boolean }
14
+ },
15
+ emits: ["close"],
16
+ setup(S, { emit: p }) {
17
+ const f = S, r = N(), { showToaster: n } = L(), { getCompiledEmail: v } = A(), a = O(), {
18
+ state: h,
19
+ saveTemplate: d
20
+ } = B(), {
21
+ validationError: C,
22
+ validateTemplateName: i,
23
+ clearValidation: c
24
+ } = D(), t = l(""), s = l(!1), m = l(!1), o = l(""), I = 40, u = () => {
25
+ t.value = "", o.value = "", a.resetSelection(), c();
26
+ }, y = () => {
27
+ u(), p("close");
28
+ }, w = async () => {
29
+ s.value = !0;
30
+ try {
31
+ if (!(await i(t.value)).isValid) {
32
+ s.value = !1;
33
+ return;
34
+ }
35
+ await d({
36
+ name: t.value,
37
+ htmlContent: o.value,
38
+ categoryIds: a.getSelectedCategoryIds
39
+ }) && (n({
40
+ message: r(
41
+ "journey-builder.template-saved-successfully",
42
+ { name: t.value }
43
+ ),
44
+ type: "success"
45
+ }), y(), s.value = !1);
46
+ } catch {
47
+ n({
48
+ message: r("journey-builder.template-save-error", { name: t.value }),
49
+ type: "error"
50
+ }), s.value = !1;
51
+ }
52
+ };
53
+ T(t, (e) => {
54
+ e.trim() ? i(e) : c();
55
+ });
56
+ const g = async () => {
57
+ m.value = !0;
58
+ try {
59
+ const { html: e } = await v();
60
+ o.value = e || "";
61
+ } catch {
62
+ o.value = "";
63
+ } finally {
64
+ m.value = !1;
65
+ }
66
+ }, _ = async (e) => {
67
+ await a.createCategory(e);
68
+ };
69
+ return T(() => f.isOpen, async (e) => {
70
+ e ? await Promise.all([
71
+ g(),
72
+ a.fetchCategories()
73
+ ]) : u();
74
+ }), { __sfc: !0, props: f, emit: p, trans: r, showToaster: n, getCompiledEmail: v, categoriesStore: a, saveState: h, saveTemplateToLibrary: d, validationError: C, validateTemplateName: i, clearValidation: c, templateNameInput: t, isSaving: s, isLoadingHtml: m, htmlData: o, templateCategorySearchInputLimit: I, resetModalState: u, closeModal: y, saveTemplate: w, fetchHtmlData: g, addOption: _, ModalWrapper: b, InBasicTextInput: x, InMultiSelect: j };
75
+ }
76
+ });
77
+ export {
78
+ G as default
79
+ };
@@ -0,0 +1,72 @@
1
+ interface ModalWrapperProps {
2
+ isOpen: boolean;
3
+ title: string;
4
+ description?: string;
5
+ size?: 'small' | 'medium' | 'large';
6
+ primaryButtonText?: string;
7
+ primaryButtonDisabled?: boolean;
8
+ primaryButtonLoading?: boolean;
9
+ cancelButtonText?: string;
10
+ showCancelButton?: boolean;
11
+ className?: string;
12
+ }
13
+ declare var __VLS_12: {};
14
+ type __VLS_Slots = {} & {
15
+ default?: (props: typeof __VLS_12) => any;
16
+ };
17
+ declare const __VLS_component: import("vue").DefineComponent<__VLS_WithDefaults<__VLS_TypePropsToOption<ModalWrapperProps>, {
18
+ description: string;
19
+ size: string;
20
+ primaryButtonText: string;
21
+ primaryButtonDisabled: boolean;
22
+ primaryButtonLoading: boolean;
23
+ cancelButtonText: string;
24
+ showCancelButton: boolean;
25
+ className: string;
26
+ }>, {}, {}, {}, {}, import("vue/types/v3-component-options").ComponentOptionsMixin, import("vue/types/v3-component-options").ComponentOptionsMixin, {
27
+ close: () => void;
28
+ save: () => void;
29
+ cancel: () => void;
30
+ }, string, Readonly<import("vue").ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToOption<ModalWrapperProps>, {
31
+ description: string;
32
+ size: string;
33
+ primaryButtonText: string;
34
+ primaryButtonDisabled: boolean;
35
+ primaryButtonLoading: boolean;
36
+ cancelButtonText: string;
37
+ showCancelButton: boolean;
38
+ className: string;
39
+ }>>>, {
40
+ className: string;
41
+ size: "small" | "medium" | "large";
42
+ description: string;
43
+ primaryButtonText: string;
44
+ primaryButtonDisabled: boolean;
45
+ primaryButtonLoading: boolean;
46
+ cancelButtonText: string;
47
+ showCancelButton: boolean;
48
+ }>;
49
+ declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
50
+ export default _default;
51
+ type __VLS_WithDefaults<P, D> = {
52
+ [K in keyof Pick<P, keyof P>]: K extends keyof D ? __VLS_PrettifyLocal<P[K] & {
53
+ default: D[K];
54
+ }> : P[K];
55
+ };
56
+ type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
57
+ type __VLS_TypePropsToOption<T> = {
58
+ [K in keyof T]-?: {} extends Pick<T, K> ? {
59
+ type: import('vue').PropType<__VLS_NonUndefinedable<T[K]>>;
60
+ } : {
61
+ type: import('vue').PropType<T[K]>;
62
+ required: true;
63
+ };
64
+ };
65
+ type __VLS_WithSlots<T, S> = T & {
66
+ new (): {
67
+ $scopedSlots: S;
68
+ };
69
+ };
70
+ type __VLS_PrettifyLocal<T> = {
71
+ [K in keyof T]: T[K];
72
+ } & {};
@@ -0,0 +1,19 @@
1
+ import r from "./ModalWrapper.vue2.js";
2
+ import o from "../../_virtual/_plugin-vue2_normalizer.js";
3
+ var s = function() {
4
+ var t = this, n = t._self._c, e = t._self._setupProxy;
5
+ return n(e.InDrawer, { attrs: { id: "modal-wrapper", "description-text": t.description, "footer-button-group-options": e.drawerFooterOptions, size: t.size, status: t.isOpen, "title-text": t.title }, on: { cancelOrBackButtonEvent: e.handleCancel, onCloseEvent: e.handleClose, primaryButtonEvent: e.handleSave }, scopedSlots: t._u([{ key: "contentSlot", fn: function() {
6
+ return [n("div", { staticClass: "modal-content-wrapper", class: t.className }, [t._t("default")], 2)];
7
+ }, proxy: !0 }], null, !0) });
8
+ }, a = [], l = /* @__PURE__ */ o(
9
+ r,
10
+ s,
11
+ a,
12
+ !1,
13
+ null,
14
+ null
15
+ );
16
+ const u = l.exports;
17
+ export {
18
+ u as default
19
+ };
@@ -0,0 +1,43 @@
1
+ import { defineComponent as o, computed as l } from "vue";
2
+ import { InDrawer as s } from "@useinsider/design-system-vue";
3
+ const i = /* @__PURE__ */ o({
4
+ __name: "ModalWrapper",
5
+ props: {
6
+ isOpen: { type: Boolean },
7
+ title: null,
8
+ description: { default: "" },
9
+ size: { default: "small" },
10
+ primaryButtonText: { default: "" },
11
+ primaryButtonDisabled: { type: Boolean, default: !1 },
12
+ primaryButtonLoading: { type: Boolean, default: !1 },
13
+ cancelButtonText: { default: "" },
14
+ showCancelButton: { type: Boolean, default: !0 },
15
+ className: { default: "" }
16
+ },
17
+ emits: ["close", "save", "cancel"],
18
+ setup(a, { emit: t }) {
19
+ const e = a, n = l(() => ({
20
+ primaryButton: {
21
+ styling: "solid",
22
+ type: "primary",
23
+ labelText: e.primaryButtonText,
24
+ disabled: e.primaryButtonDisabled || e.primaryButtonLoading
25
+ },
26
+ cancelOrBackButton: e.showCancelButton ? {
27
+ type: "secondary",
28
+ styling: "ghost",
29
+ labelText: e.cancelButtonText
30
+ } : void 0
31
+ }));
32
+ return { __sfc: !0, props: e, emit: t, drawerFooterOptions: n, handleClose: () => {
33
+ t("close");
34
+ }, handleSave: () => {
35
+ t("save");
36
+ }, handleCancel: () => {
37
+ t("cancel");
38
+ }, InDrawer: s };
39
+ }
40
+ });
41
+ export {
42
+ i as default
43
+ };
@@ -1,5 +1,4 @@
1
1
  import { GetCompiledEmailOptions, CompiledEmailResult } from '@@/Types/actions-api';
2
2
  export declare const useActionsApi: () => {
3
3
  getCompiledEmail: (options?: GetCompiledEmailOptions) => Promise<CompiledEmailResult>;
4
- activateCustomViewStyles: (isActive?: boolean) => void;
5
4
  };
@@ -1,5 +1,5 @@
1
- const g = () => ({ getCompiledEmail: (t = {}) => new Promise((i, a) => {
2
- const s = { ...{
1
+ const d = () => ({ getCompiledEmail: (t = {}) => new Promise((a, i) => {
2
+ const m = { ...{
3
3
  minimize: !0,
4
4
  utmEntity: {
5
5
  utmSource: "",
@@ -18,21 +18,19 @@ const g = () => ({ getCompiledEmail: (t = {}) => new Promise((i, a) => {
18
18
  forseAmp: !1,
19
19
  resetDataSavedFlag: !1,
20
20
  disableLineHeightsReplace: !0
21
- }, ...t }, o = {
22
- callback: (e, m, l, n, c) => {
23
- e ? a(e) : i({
24
- html: m,
25
- ampHtml: l,
26
- ampErrors: n,
21
+ }, ...t }, s = {
22
+ callback: (e, l, n, o, c) => {
23
+ e ? i(e) : a({
24
+ html: l,
25
+ ampHtml: n,
26
+ ampErrors: o,
27
27
  displayConditions: c
28
28
  });
29
29
  },
30
- ...s
30
+ ...m
31
31
  };
32
- window.StripoEditorApi.actionsApi.compileEmail(o);
33
- }), activateCustomViewStyles: (t = !0) => {
34
- window.StripoEditorApi.actionsApi.activateCustomViewStyles(t);
35
- } });
32
+ window.StripoEditorApi.actionsApi.compileEmail(s);
33
+ }) });
36
34
  export {
37
- g as useActionsApi
35
+ d as useActionsApi
38
36
  };
@@ -1,3 +1,3 @@
1
1
  export declare const useExport: () => {
2
- exportHtml: (compile?: boolean) => Promise<void>;
2
+ exportHtml: () => Promise<void>;
3
3
  };
@@ -1,45 +1,30 @@
1
1
  import { useActionsApi as l } from "./useActionsApi.js";
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`;
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`;
11
10
  };
12
- return { exportHtml: async (s = !0) => {
13
- const { getCompiledEmail: o } = l(), { showToaster: r } = d(), { compileHtml: i } = m();
11
+ return { exportHtml: async () => {
12
+ const { getCompiledEmail: r } = l(), { showToaster: t } = m();
14
13
  try {
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({
14
+ const { html: e } = await r();
15
+ e ? a(e, c("HTML"), "text/html") : t({
37
16
  type: "error",
38
- message: `Error compiling email: ${e}`
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}`
39
24
  });
40
25
  }
41
26
  } };
42
27
  };
43
28
  export {
44
- h as useExport
29
+ u as useExport
45
30
  };
@@ -0,0 +1,7 @@
1
+ import type { SaveTemplatePayload } from '@@/Types/save-as-template';
2
+ export declare const useSaveAsTemplate: () => {
3
+ state: {
4
+ saving: boolean;
5
+ };
6
+ saveTemplate: (data: SaveTemplatePayload) => Promise<boolean>;
7
+ };
@@ -0,0 +1,44 @@
1
+ import { useHttp as o } from "./useHttp.js";
2
+ import { base64EncodeWithSpecialChars as n } from "../utils/base64.js";
3
+ import { reactive as a } from "vue";
4
+ const l = () => {
5
+ const { post: i } = o(), s = a({
6
+ saving: !1
7
+ });
8
+ return {
9
+ state: s,
10
+ saveTemplate: async (e) => {
11
+ s.saving = !0;
12
+ try {
13
+ const t = {
14
+ name: e.name,
15
+ categories: e.categoryIds,
16
+ productId: 60,
17
+ editorType: 2,
18
+ content: n(e.htmlContent),
19
+ unsubscriptionPreferencePages: [],
20
+ unsubscriptionPreferencePageStatus: !1
21
+ };
22
+ e.css && (t.css = n(e.css)), e.stripoConfig && (t.stripoConfig = n(
23
+ JSON.stringify(e.stripoConfig)
24
+ )), e.recommendationConfigs && (t.recommendationConfigs = n(
25
+ JSON.stringify(e.recommendationConfigs)
26
+ )), e.recommendationCampaignUrls && (t.recommendationCampaignUrls = n(
27
+ JSON.stringify(e.recommendationCampaignUrls)
28
+ ));
29
+ const r = await i(
30
+ "/newsletter/template-library/create-template",
31
+ t
32
+ );
33
+ return !(!r.data || r.data.type === "error");
34
+ } catch {
35
+ return !1;
36
+ } finally {
37
+ s.saving = !1;
38
+ }
39
+ }
40
+ };
41
+ };
42
+ export {
43
+ l as useSaveAsTemplate
44
+ };
@@ -1,33 +1,23 @@
1
- import { useActionsApi as m } from "./useActionsApi.js";
2
- import { useCustomInterfaceAppearance as g } from "./useCustomInterfaceAppearance.js";
3
- import { useToaster as f } from "./useToaster.js";
1
+ import { useCustomInterfaceAppearance as m } from "./useCustomInterfaceAppearance.js";
2
+ import { useToaster as g } from "./useToaster.js";
4
3
  import { displayConditions as E } from "../enums/displayConditions.js";
5
- import S from "../extensions/DynamicContent/extension.js";
6
- import { useStripoApi as y } from "../services/stripoApi.js";
7
- import { useEditorStore as C } from "../stores/editor.js";
8
- const x = (a) => {
9
- const { handleError: d } = f(), { getToken: c, getCustomFonts: u } = y(), l = (e, r = []) => {
10
- const i = C(), { html: t, css: s } = e;
4
+ import { useStripoApi as S } from "../services/stripoApi.js";
5
+ 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;
11
9
  window.UIEditor.initEditor(
12
10
  document.querySelector("#guido-editor"),
13
11
  {
14
- metadata: a,
12
+ metadata: c,
15
13
  html: t,
16
- css: s,
17
- forceRecreate: !0,
14
+ css: n,
18
15
  locale: "en",
19
16
  undoButtonSelector: "#guido__undo-button",
20
17
  redoButtonSelector: "#guido__redo-button",
21
18
  mobileViewButtonSelector: ".guido__view-option-selection-mobile",
22
19
  desktopViewButtonSelector: ".guido__view-option-selection-desktop",
23
20
  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
- `,
31
21
  conditionsEnabled: !0,
32
22
  customConditionsEnabled: !0,
33
23
  conditionCategories: E,
@@ -35,57 +25,55 @@ const x = (a) => {
35
25
  editorFonts: {
36
26
  showDefaultStandardFonts: !0,
37
27
  showDefaultNotStandardFonts: !0,
38
- customFonts: r
28
+ customFonts: i
39
29
  },
40
30
  async onTokenRefreshRequest(o) {
41
31
  try {
42
- const n = await c();
43
- o(n);
44
- } catch (n) {
45
- d(n, "Failed to refresh token");
32
+ const s = await a();
33
+ o(s);
34
+ } catch (s) {
35
+ d(s, "Failed to refresh token");
46
36
  }
47
37
  },
48
38
  onTemplateLoaded() {
49
39
  try {
50
- const { importCss: o } = g(), { activateCustomViewStyles: n } = m();
51
- o(), n();
40
+ const { importCss: o } = m();
41
+ o();
52
42
  } catch (o) {
53
43
  d(o, "Failed to load custom interface appearance");
54
44
  }
55
45
  },
56
46
  onCodeEditorVisibilityChanged(o) {
57
- i.isCodeEditorOpen = o;
47
+ r.isCodeEditorOpen = o;
58
48
  },
59
49
  onEditorVisualModeChanged(o) {
60
- i.editorVisualMode = o.toLowerCase();
50
+ r.editorVisualMode = o.toLowerCase();
61
51
  },
62
52
  onVersionHistoryVisibilityChanged(o) {
63
- i.isVersionHistoryOpen = o;
64
- },
65
- ignoreClickOutsideSelectors: ["#guido-dynamic-content-modal"],
66
- extensions: [S]
53
+ r.isVersionHistoryOpen = o;
54
+ }
67
55
  }
68
56
  );
69
- }, p = (e) => new Promise((r, i) => {
57
+ }, p = (e) => new Promise((i, r) => {
70
58
  if (document.getElementById("UiEditorScript")) {
71
- e(), r();
59
+ e(), i();
72
60
  return;
73
61
  }
74
62
  const t = document.createElement("script");
75
63
  t.id = "UiEditorScript", t.type = "module", t.src = "https://plugins.stripo.email/resources/uieditor/latest/UIEditor.js", t.onload = () => {
76
- e(), r();
64
+ e(), i();
77
65
  }, t.onerror = () => {
78
- const s = new Error("Failed to load Stripo UIEditor script");
79
- i(s);
66
+ const n = new Error("Failed to load Stripo UIEditor script");
67
+ r(n);
80
68
  }, document.body.appendChild(t);
81
69
  });
82
70
  return { initPlugin: async (e) => {
83
71
  await p(async () => {
84
- const r = await u();
85
- l(e, r);
72
+ const i = await u();
73
+ l(e, i);
86
74
  });
87
75
  } };
88
76
  };
89
77
  export {
90
- x as useStripo
78
+ F as useStripo
91
79
  };
@@ -0,0 +1,13 @@
1
+ export interface ValidationResult {
2
+ isValid: boolean;
3
+ message: string;
4
+ }
5
+ export declare const useTemplateNameValidation: () => {
6
+ validationError: import("vue").Ref<string>;
7
+ isValidating: import("vue").Ref<boolean>;
8
+ validateTemplateName: (name: string) => Promise<ValidationResult>;
9
+ clearValidation: () => void;
10
+ VALIDATION_RULES: {
11
+ DEBOUNCE_TIME: number;
12
+ };
13
+ };
@@ -0,0 +1,57 @@
1
+ import { useHttp as v } from "./useHttp.js";
2
+ import { useToaster as T } from "./useToaster.js";
3
+ import { useTranslations as E } from "./useTranslations.js";
4
+ import { ref as m } from "vue";
5
+ const c = {
6
+ DEBOUNCE_TIME: 500
7
+ }, x = () => {
8
+ const { get: u } = v(), { handleError: d } = T(), l = E(), s = m(""), o = m(!1), r = m(null), p = (a) => a.trim() ? {
9
+ isValid: !0,
10
+ message: ""
11
+ } : {
12
+ isValid: !1,
13
+ message: l("validation.required-product-name-to-continue", { product: "template" })
14
+ }, f = async (a) => {
15
+ try {
16
+ const i = `/template-library/template-name-exists?name=${encodeURIComponent(a)}`;
17
+ return (await u(i)).data.status;
18
+ } catch (e) {
19
+ return d(e, "Error checking template name:"), !1;
20
+ }
21
+ };
22
+ return {
23
+ validationError: s,
24
+ isValidating: o,
25
+ validateTemplateName: (a) => (r.value && clearTimeout(r.value), new Promise((e) => {
26
+ const i = p(a);
27
+ if (!i.isValid) {
28
+ s.value = i.message, e(i);
29
+ return;
30
+ }
31
+ o.value = !0, r.value = setTimeout(async () => {
32
+ try {
33
+ const t = await f(a.trim()), n = {
34
+ isValid: !t,
35
+ message: t ? l("whatsapp-business.template-name-exists") : ""
36
+ };
37
+ s.value = n.message, e(n);
38
+ } catch (t) {
39
+ const n = {
40
+ isValid: !1,
41
+ message: t instanceof Error ? t.message : l("validation.unknown-error")
42
+ };
43
+ s.value = n.message, e(n);
44
+ } finally {
45
+ o.value = !1;
46
+ }
47
+ }, c.DEBOUNCE_TIME);
48
+ })),
49
+ clearValidation: () => {
50
+ s.value = "", o.value = !1, r.value && clearTimeout(r.value);
51
+ },
52
+ VALIDATION_RULES: c
53
+ };
54
+ };
55
+ export {
56
+ x as useTemplateNameValidation
57
+ };
@@ -0,0 +1,5 @@
1
+ import type { Template } from '@@/Types/stripo';
2
+ export declare const useTemplates: () => {
3
+ getDefaultTemplate: () => Promise<Template>;
4
+ getTemplate: (templateName: string) => Promise<Template>;
5
+ };
@@ -0,0 +1,27 @@
1
+ const s = () => {
2
+ const t = async () => {
3
+ const [e, a] = await Promise.all([
4
+ // eslint-disable-next-line import/extensions
5
+ import("../static/templates/default/index.html.js"),
6
+ import("../static/templates/default/style.css.js")
7
+ ]);
8
+ return {
9
+ html: e.default,
10
+ css: a.default
11
+ };
12
+ };
13
+ return {
14
+ getDefaultTemplate: t,
15
+ getTemplate: async (e) => {
16
+ switch (e) {
17
+ case "default":
18
+ return t();
19
+ default:
20
+ return t();
21
+ }
22
+ }
23
+ };
24
+ };
25
+ export {
26
+ s as useTemplates
27
+ };
package/dist/guido.css CHANGED
@@ -1 +1 @@
1
- .version-history-item[data-v-ee4b9c3f]{flex-basis:200px}.version-history-wrapper[data-v-52a77eec]{gap:8px}[data-v-6a2bde67] .guido__verion-history-view-option-selection-desktop svg,[data-v-6a2bde67] .guido__verion-history-view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-6a2bde67] .in-segments-wrapper__button_selected,[data-v-6a2bde67] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}[data-v-0fff376c] .guido__view-option-selection-desktop svg,[data-v-0fff376c] .guido__view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-0fff376c] .in-segments-wrapper__button_selected,[data-v-0fff376c] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}.guido-editor__wrapper[data-v-f7e1afcb],.guido-editor__container[data-v-f7e1afcb]{width:100%;height:calc(100vh - 75px)}
1
+ .version-history-item[data-v-0e2ff42d]{flex-basis:200px}.version-history-wrapper[data-v-52a77eec]{gap:8px}[data-v-6a2bde67] .guido__verion-history-view-option-selection-desktop svg,[data-v-6a2bde67] .guido__verion-history-view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-6a2bde67] .in-segments-wrapper__button_selected,[data-v-6a2bde67] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}[data-v-0fff376c] .guido__view-option-selection-desktop svg,[data-v-0fff376c] .guido__view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-0fff376c] .in-segments-wrapper__button_selected,[data-v-0fff376c] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}.guido-editor__wrapper[data-v-69c35c60],.guido-editor__container[data-v-69c35c60]{width:100%;height:calc(100vh - 75px)}
@@ -1,8 +1,7 @@
1
- import type { CustomFont, Template } from '@@/Types/stripo';
1
+ import type { CustomFont } from '@@/Types/stripo';
2
2
  export declare const useStripoApi: () => {
3
3
  getToken: () => Promise<string>;
4
4
  getCustomFonts: () => Promise<(CustomFont & {
5
5
  active: boolean;
6
6
  })[]>;
7
- getDefaultTemplate: () => Promise<Template>;
8
7
  };