@useinsider/guido 3.20.1-beta.8a05319 → 3.20.1-beta.c235b0d
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.
- package/dist/@types/config/schemas.js +11 -10
- package/dist/components/Guido.vue.js +4 -4
- package/dist/components/Guido.vue2.js +58 -51
- package/dist/components/organisms/AutoSaveController.vue2.js +19 -9
- package/dist/components/organisms/header/AutoSaveStatus.vue.js +17 -0
- package/dist/components/organisms/header/AutoSaveStatus.vue2.js +25 -0
- package/dist/components/organisms/header/EditorActions.vue.js +13 -13
- package/dist/components/organisms/header/EditorActions.vue2.js +57 -72
- package/dist/components/organisms/header/EditorActionsMenu.vue.js +20 -0
- package/dist/components/organisms/header/EditorActionsMenu.vue2.js +98 -0
- package/dist/components/organisms/header/HeaderWrapper.vue.js +6 -6
- package/dist/components/organisms/header/HeaderWrapper.vue2.js +9 -17
- package/dist/components/organisms/header/LeftSlot.vue.js +1 -1
- package/dist/components/organisms/header/LeftSlot.vue2.js +28 -23
- package/dist/components/organisms/header/MiddleSlot.vue.js +4 -4
- package/dist/components/organisms/header/MiddleSlot.vue2.js +8 -7
- package/dist/components/organisms/header/RightSlot.vue.js +9 -8
- package/dist/components/organisms/header/RightSlot.vue2.js +13 -18
- package/dist/components/organisms/header/accessibility/AccessibilityToolbar.vue.js +18 -0
- package/dist/components/organisms/header/accessibility/AccessibilityToolbar.vue2.js +37 -0
- package/dist/components/organisms/header/accessibility/ColorVisionSelect.vue.js +22 -0
- package/dist/components/organisms/header/accessibility/ColorVisionSelect.vue2.js +48 -0
- package/dist/components/organisms/onboarding/EditorTabBarOnboarding.vue.js +19 -0
- package/dist/components/organisms/onboarding/EditorTabBarOnboarding.vue2.js +90 -0
- package/dist/components/organisms/onboarding/OnboardingWrapper.vue.js +12 -12
- package/dist/components/organisms/onboarding/OnboardingWrapper.vue2.js +56 -38
- package/dist/composables/useAccessibilityApi.js +45 -0
- package/dist/composables/useCustomInterfaceAppearance.js +42 -41
- package/dist/config/compiler/itemsCompilerRules.js +12 -5
- package/dist/config/compiler/utils/itemsCompilerUtils.js +65 -45
- package/dist/config/i18n/en/labels.json.js +36 -4
- package/dist/config/i18n/en/tooltips.json.js +2 -1
- package/dist/extensions/Blocks/Recommendation/controls/cardComposition/index.js +103 -91
- package/dist/extensions/Blocks/Recommendation/utils/captureStyleTemplates.js +72 -70
- package/dist/extensions/Blocks/Recommendation/utils/compositionKeys.js +69 -60
- package/dist/guido.css +1 -1
- package/dist/sprite.svg +10 -0
- package/dist/src/@types/config/schemas.d.ts +2 -0
- package/dist/src/components/organisms/AutoSaveController.vue.d.ts +19 -1
- package/dist/src/components/organisms/header/EditorActionsMenu.vue.d.ts +2 -0
- package/dist/src/components/organisms/header/HeaderWrapper.vue.d.ts +1 -19
- package/dist/src/components/organisms/header/RightSlot.vue.d.ts +1 -19
- package/dist/src/components/organisms/header/accessibility/AccessibilityToolbar.vue.d.ts +2 -0
- package/dist/src/components/organisms/header/accessibility/ColorVisionSelect.vue.d.ts +2 -0
- package/dist/src/components/organisms/onboarding/EditorTabBarOnboarding.vue.d.ts +2 -0
- package/dist/src/composables/useAccessibilityApi.d.ts +13 -0
- package/dist/src/composables/useActionsApi.d.ts +2 -2
- package/dist/src/composables/useConfig.d.ts +2 -0
- package/dist/src/config/compiler/utils/itemsCompilerUtils.d.ts +5 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/cardComposition/index.d.ts +3 -0
- package/dist/src/extensions/Blocks/Recommendation/utils/compositionKeys.d.ts +4 -0
- package/dist/src/stores/autosave.d.ts +73 -1
- package/dist/src/stores/config.d.ts +20 -0
- package/dist/src/stores/editor.d.ts +109 -0
- package/dist/src/stores/onboarding.d.ts +952 -21
- package/dist/src/stores/version-history.d.ts +1 -1
- package/dist/src/utils/timeUtil.d.ts +5 -0
- package/dist/static/styles/components/accessibility.css.js +234 -0
- package/dist/static/styles/variables.css.js +2 -0
- package/dist/stores/autosave.js +12 -7
- package/dist/stores/editor.js +7 -4
- package/dist/stores/onboarding.js +43 -21
- package/dist/utils/timeUtil.js +6 -17
- package/package.json +1 -1
- package/dist/components/organisms/header/AutoSaveToggle.vue.js +0 -22
- package/dist/components/organisms/header/AutoSaveToggle.vue2.js +0 -19
- /package/dist/src/components/organisms/header/{AutoSaveToggle.vue.d.ts → AutoSaveStatus.vue.d.ts} +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ModuleFolderDefaults as
|
|
2
|
-
import { object as a, number as s, optional as e, string as t, picklist as m, pipe as i, minLength as b, custom as k, boolean as o, array as c, transform as y, unknown as r, record as g, fallback as R, literal as u, looseObject as C, variant as
|
|
1
|
+
import { ModuleFolderDefaults as S } from "../../enums/defaults.js";
|
|
2
|
+
import { object as a, number as s, optional as e, string as t, picklist as m, pipe as i, minLength as b, custom as k, boolean as o, array as c, transform as y, unknown as r, record as g, fallback as R, literal as u, looseObject as C, variant as T, union as h, lazy as I } from "../../node_modules/valibot/dist/index.js";
|
|
3
3
|
const p = {
|
|
4
4
|
/** Promotional/marketing emails */
|
|
5
5
|
PROMOTIONAL: 1,
|
|
@@ -76,17 +76,17 @@ const p = {
|
|
|
76
76
|
value: t()
|
|
77
77
|
})
|
|
78
78
|
)
|
|
79
|
-
}),
|
|
79
|
+
}), f = I(() => C({
|
|
80
80
|
text: e(t()),
|
|
81
81
|
// eslint-disable-next-line camelcase -- backend field name
|
|
82
82
|
tag_text: e(t()),
|
|
83
83
|
value: e(t()),
|
|
84
|
-
children: e(c(
|
|
84
|
+
children: e(c(f)),
|
|
85
85
|
// eslint-disable-next-line camelcase -- backend field name
|
|
86
|
-
select_items: e(c(
|
|
86
|
+
select_items: e(c(f))
|
|
87
87
|
})), N = g(
|
|
88
88
|
t(),
|
|
89
|
-
R(c(
|
|
89
|
+
R(c(f), [])
|
|
90
90
|
), P = C({
|
|
91
91
|
/** Block ID (matches the dictionary key and the legacy HTML element id) */
|
|
92
92
|
id: e(s()),
|
|
@@ -210,9 +210,9 @@ const p = {
|
|
|
210
210
|
/** Email header settings */
|
|
211
211
|
emailHeader: e(D, { senderName: "", subject: "" }),
|
|
212
212
|
/** Folder name for user-saved modules (used by Stripo plugin panel for path construction) */
|
|
213
|
-
savedModulesFolderName: e(t(),
|
|
213
|
+
savedModulesFolderName: e(t(), S.SAVED_MODULES),
|
|
214
214
|
/** Folder name for default/prebuilt modules (used by Stripo plugin panel for path construction) */
|
|
215
|
-
defaultModulesFolderName: e(t(),
|
|
215
|
+
defaultModulesFolderName: e(t(), S.DEFAULT_MODULES)
|
|
216
216
|
}), F = a({
|
|
217
217
|
/** Whether to show the header bar */
|
|
218
218
|
showHeader: e(o(), !0),
|
|
@@ -237,6 +237,7 @@ const p = {
|
|
|
237
237
|
liquidSyntax: e(o(), !1),
|
|
238
238
|
/** Enable autosave (3-min interval + tab-hide). User toggles on/off from the header. */
|
|
239
239
|
autosave: e(o(), !1),
|
|
240
|
+
accessibilityTesting: e(o(), !1),
|
|
240
241
|
/** Enable pre-save domain-allowlist validation (opt-in; Guido self-serves the block toaster) */
|
|
241
242
|
allowlistEnabled: e(o(), !1),
|
|
242
243
|
/** Enable persistent link tracking-id assignment for the click heatmap (opt-in) */
|
|
@@ -315,7 +316,7 @@ const p = {
|
|
|
315
316
|
(n) => typeof n == "function",
|
|
316
317
|
"processor must be a function"
|
|
317
318
|
)
|
|
318
|
-
}), V =
|
|
319
|
+
}), V = T("type", [
|
|
319
320
|
H,
|
|
320
321
|
_,
|
|
321
322
|
q,
|
|
@@ -367,7 +368,7 @@ export {
|
|
|
367
368
|
G as CustomRuleSchema,
|
|
368
369
|
w as DefaultBlockTypeSchema,
|
|
369
370
|
N as DynamicContentListSchema,
|
|
370
|
-
|
|
371
|
+
f as DynamicContentNodeSchema,
|
|
371
372
|
M as DynamicContentSchema,
|
|
372
373
|
O as EditorSchema,
|
|
373
374
|
D as EmailHeaderSchema,
|
|
@@ -3,7 +3,7 @@ import o from "./Guido.vue2.js";
|
|
|
3
3
|
import i from "../_virtual/_plugin-vue2_normalizer.js";
|
|
4
4
|
var t = function() {
|
|
5
5
|
var a = this, r = a._self._c, e = a._self._setupProxy;
|
|
6
|
-
return r("div", { ref: "wrapperRef", staticClass: "guido-editor__wrapper", class: { "guido-editor__no-header": e.noHeader } }, [r(e.HeaderWrapper, { ref: "
|
|
6
|
+
return r("div", { ref: "wrapperRef", staticClass: "guido-editor__wrapper", class: { "guido-editor__no-header": e.noHeader } }, [r(e.HeaderWrapper), r(e.AutoSaveController, { ref: "autoSaveControllerRef" }), e.editorStore.isPreviewModeOpen ? r(e.PreviewContainer) : a._e(), r("div", { directives: [{ name: "show", rawName: "v-show", value: !e.previewStore.isLoaded, expression: "!previewStore.isLoaded" }], staticClass: "guido-editor__container", class: { "guido-editor__no-header": e.noHeader }, attrs: { id: "guido-editor" } }), r(e.Toaster), r(e.AuthErrorModal), r(e.FilterSelectionDrawer), e.isRrsEnabled || e.hasAssignedStrategy ? r(e.AssignStrategyDrawer) : a._e(), e.isRrsEnabled || e.hasAssignedStrategy ? r(e.RemoveStrategyModal) : a._e(), e.isRrsEnabled ? r(e.LegacyStrategyUpdatedModal) : a._e(), r(e.SaveAsTemplateDrawer), e.isSaveValidationEnabled ? r(e.ValidationErrorDrawer) : a._e(), e.isTestPartner() ? a._e() : r(e.OnboardingWrapper, { on: { "onboarding-finished": function(_) {
|
|
7
7
|
return e.emit("onboarding:finished");
|
|
8
8
|
} } }), r(e.UnsubscribeWrapper), r(e.LoadingWrapper)], 1);
|
|
9
9
|
}, s = [], n = /* @__PURE__ */ i(
|
|
@@ -12,9 +12,9 @@ var t = function() {
|
|
|
12
12
|
s,
|
|
13
13
|
!1,
|
|
14
14
|
null,
|
|
15
|
-
"
|
|
15
|
+
"6a54dbe6"
|
|
16
16
|
);
|
|
17
|
-
const
|
|
17
|
+
const c = n.exports;
|
|
18
18
|
export {
|
|
19
|
-
|
|
19
|
+
c as default
|
|
20
20
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { defineComponent as
|
|
1
|
+
import { defineComponent as ie, defineAsyncComponent as m, ref as V, computed as p, watch as H, onMounted as ae, onUnmounted as ce } from "vue";
|
|
2
2
|
import { useCortexBlueprintBridge as de } from "../composables/useCortexBlueprintBridge.js";
|
|
3
3
|
import { useEditorLock as me } from "../composables/useEditorLock.js";
|
|
4
4
|
import { provideGuidoActions as le } from "../composables/useGuidoActions.js";
|
|
@@ -7,8 +7,8 @@ import { usePartner as pe } from "../composables/usePartner.js";
|
|
|
7
7
|
import { useSaveValidationRollout as fe } from "../composables/useSaveValidationRollout.js";
|
|
8
8
|
import { useStripo as ye } from "../composables/useStripo.js";
|
|
9
9
|
import { useTimerClone as ge } from "../composables/useTimerClone.js";
|
|
10
|
-
import { migrate as
|
|
11
|
-
import { ModuleFolderDefaults as
|
|
10
|
+
import { migrate as W } from "../config/migrator/index.js";
|
|
11
|
+
import { ModuleFolderDefaults as G } from "../enums/defaults.js";
|
|
12
12
|
import { RIBBON_SELECTOR as Se } from "../enums/onboarding.js";
|
|
13
13
|
import { useRecommendationExtensionStore as E } from "../extensions/Blocks/Recommendation/store/recommendation.js";
|
|
14
14
|
import ve from "./organisms/AutoSaveController.vue.js";
|
|
@@ -16,28 +16,28 @@ import be from "./organisms/base/AuthErrorModal.vue.js";
|
|
|
16
16
|
import he from "./organisms/base/Toaster.vue.js";
|
|
17
17
|
import Ee from "./organisms/extensions/recommendation/FilterSelectionDrawer.vue.js";
|
|
18
18
|
import we from "./organisms/header/HeaderWrapper.vue.js";
|
|
19
|
-
import
|
|
20
|
-
import
|
|
19
|
+
import Ce from "./organisms/LoadingWrapper.vue.js";
|
|
20
|
+
import De from "./organisms/save-as-template/SaveAsTemplateDrawer.vue.js";
|
|
21
21
|
import ke from "./organisms/unsubscribe/UnsubscribeWrapper.vue.js";
|
|
22
|
-
import
|
|
23
|
-
import { useStripoApi as
|
|
22
|
+
import Te from "./organisms/validation/ValidationErrorDrawer.vue.js";
|
|
23
|
+
import { useStripoApi as Fe } from "../services/stripoApi.js";
|
|
24
24
|
import { useConfigStore as Me } from "../stores/config.js";
|
|
25
|
-
import { useDynamicContentStore as
|
|
25
|
+
import { useDynamicContentStore as Re } from "../stores/dynamic-content.js";
|
|
26
26
|
import { useEditorStore as w } from "../stores/editor.js";
|
|
27
27
|
import { usePreviewStore as Ie } from "../stores/preview.js";
|
|
28
28
|
import { useSaveValidationStore as Le } from "../stores/save-validation.js";
|
|
29
|
-
import { useTemplateStore as
|
|
30
|
-
import { useUnsubscribeStore as
|
|
31
|
-
import { readTrackFloor as
|
|
32
|
-
const lt = /* @__PURE__ */
|
|
29
|
+
import { useTemplateStore as Ae } from "../stores/template.js";
|
|
30
|
+
import { useUnsubscribeStore as Oe } from "../stores/unsubscribe.js";
|
|
31
|
+
import { readTrackFloor as $ } from "../utils/linkTrackingIds.js";
|
|
32
|
+
const lt = /* @__PURE__ */ ie({
|
|
33
33
|
__name: "Guido",
|
|
34
34
|
props: {
|
|
35
35
|
config: null,
|
|
36
36
|
ready: { type: Boolean, default: !0 }
|
|
37
37
|
},
|
|
38
38
|
emits: ["dynamic-content:open", "back", "save:start", "save:complete", "on-change", "ready", "onboarding:finished", "test-email:click"],
|
|
39
|
-
setup(
|
|
40
|
-
const
|
|
39
|
+
setup(z, { expose: q, emit: r }) {
|
|
40
|
+
const a = z, K = m(
|
|
41
41
|
() => import("./organisms/email-preview/PreviewContainer.vue.js")
|
|
42
42
|
), j = m(
|
|
43
43
|
() => import("./organisms/onboarding/OnboardingWrapper.vue.js")
|
|
@@ -45,15 +45,22 @@ const lt = /* @__PURE__ */ se({
|
|
|
45
45
|
() => import("./organisms/extensions/recommendation/AssignStrategyDrawer.vue.js")
|
|
46
46
|
), Q = m(
|
|
47
47
|
() => import("./organisms/extensions/recommendation/RemoveStrategyModal.vue.js")
|
|
48
|
-
), X = m(
|
|
48
|
+
), C = V(), X = m(
|
|
49
49
|
() => import("./organisms/extensions/recommendation/LegacyStrategyUpdatedModal.vue.js")
|
|
50
|
-
),
|
|
51
|
-
|
|
52
|
-
const
|
|
50
|
+
), f = V(), y = Re(), D = Oe(), o = Me();
|
|
51
|
+
a.ready && o.init(a.config);
|
|
52
|
+
const s = w(), Y = Ie(), l = p(() => s.hasChanges), { isTestPartner: Z } = pe(), { isEnabled: ee } = fe(), k = () => {
|
|
53
53
|
var t;
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
54
|
+
if (!s.isNormalMode) {
|
|
55
|
+
console.debug("guido:save:silent:blocked", {
|
|
56
|
+
isVersionHistoryOpen: s.isVersionHistoryOpen,
|
|
57
|
+
isAccessibilityTestingOpen: s.isAccessibilityTestingOpen
|
|
58
|
+
});
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
return (t = C.value) == null ? void 0 : t.saveSilent();
|
|
62
|
+
}, T = (t) => {
|
|
63
|
+
s.loadingStatus = t;
|
|
57
64
|
};
|
|
58
65
|
de(), ue();
|
|
59
66
|
const g = () => {
|
|
@@ -63,12 +70,12 @@ const lt = /* @__PURE__ */ se({
|
|
|
63
70
|
userId: o.userId,
|
|
64
71
|
username: o.username,
|
|
65
72
|
partnerName: o.partnerName,
|
|
66
|
-
savedModulesFolderName: ((t = o.editor) == null ? void 0 : t.savedModulesFolderName) ||
|
|
67
|
-
defaultModulesFolderName: ((e = o.editor) == null ? void 0 : e.defaultModulesFolderName) ||
|
|
73
|
+
savedModulesFolderName: ((t = o.editor) == null ? void 0 : t.savedModulesFolderName) || G.SAVED_MODULES,
|
|
74
|
+
defaultModulesFolderName: ((e = o.editor) == null ? void 0 : e.defaultModulesFolderName) || G.DEFAULT_MODULES
|
|
68
75
|
};
|
|
69
|
-
}, { initPlugin:
|
|
76
|
+
}, { initPlugin: F, preloadRuntime: M } = ye(), { runExclusive: R, beginMount: I, isCurrentMount: S } = me();
|
|
70
77
|
let u = 0;
|
|
71
|
-
const { getDefaultTemplate: L } =
|
|
78
|
+
const { getDefaultTemplate: L } = Fe(), { cloneTimersOnSave: A, hasTimerBlocks: O } = ge(), te = p(() => {
|
|
72
79
|
var t;
|
|
73
80
|
return !((t = o.ui) != null && t.showHeader);
|
|
74
81
|
}), oe = p(() => o.isFeatureEnabled("reusableRecommendationStrategy")), ne = p(
|
|
@@ -89,19 +96,19 @@ const lt = /* @__PURE__ */ se({
|
|
|
89
96
|
console.debug("guido:test-email:click"), r("test-email:click");
|
|
90
97
|
}
|
|
91
98
|
});
|
|
92
|
-
const
|
|
99
|
+
const U = (t) => {
|
|
93
100
|
console.debug("dynamic-content:close", t), y.setSelectedDynamicContent(t), document.dispatchEvent(new CustomEvent("dynamic-content:close", { detail: t }));
|
|
94
101
|
}, N = () => {
|
|
95
102
|
console.debug("dynamic-content:close", "Without Data"), document.dispatchEvent(new CustomEvent("dynamic-content:close", { detail: { text: "", value: "" } }));
|
|
96
103
|
};
|
|
97
|
-
|
|
104
|
+
H(() => l.value, () => {
|
|
98
105
|
r("on-change", l.value);
|
|
99
106
|
});
|
|
100
107
|
const v = (t) => {
|
|
101
|
-
const e = t, { attribute:
|
|
102
|
-
console.debug("dynamic-content:open", e.detail), r("dynamic-content:open",
|
|
108
|
+
const e = t, { attribute: i, position: d } = e.detail;
|
|
109
|
+
console.debug("dynamic-content:open", e.detail), r("dynamic-content:open", i, d);
|
|
103
110
|
};
|
|
104
|
-
let
|
|
111
|
+
let c = null;
|
|
105
112
|
const b = () => {
|
|
106
113
|
var e;
|
|
107
114
|
const t = document.querySelector(Se);
|
|
@@ -109,52 +116,52 @@ const lt = /* @__PURE__ */ se({
|
|
|
109
116
|
}, h = async () => {
|
|
110
117
|
var t;
|
|
111
118
|
try {
|
|
112
|
-
o.initialized || o.init(
|
|
113
|
-
const e = o.template,
|
|
114
|
-
|
|
115
|
-
const
|
|
119
|
+
o.initialized || o.init(a.config), s.templateId = o.templateId;
|
|
120
|
+
const e = o.template, i = (e == null ? void 0 : e.html) || "", d = (e == null ? void 0 : e.css) || "", B = (e == null ? void 0 : e.preselectedDynamicContent) || [];
|
|
121
|
+
D.selectedUnsubscribePages = (e == null ? void 0 : e.selectedUnsubscribePages) || [];
|
|
122
|
+
const P = ((t = e == null ? void 0 : e.migration) == null ? void 0 : t.recommendationConfigs) ?? {}, _ = o.isFeatureEnabled("linkTrackingIds"), x = {
|
|
116
123
|
partnerName: o.partnerName,
|
|
117
124
|
campaignUrls: e == null ? void 0 : e.recommendationCampaignUrls,
|
|
118
125
|
rrsEnabled: o.isFeatureEnabled("reusableRecommendationStrategy")
|
|
119
126
|
};
|
|
120
127
|
let n = {
|
|
121
|
-
html:
|
|
128
|
+
html: i && await W(i, P, x),
|
|
122
129
|
css: d
|
|
123
130
|
};
|
|
124
|
-
n.html || (n = await L(), n.html = await
|
|
125
|
-
const re =
|
|
126
|
-
|
|
127
|
-
const
|
|
128
|
-
preselectedDynamicContentList:
|
|
131
|
+
n.html || (n = await L(), n.html = await W(n.html, P, x));
|
|
132
|
+
const re = _ ? $(n.html, (e == null ? void 0 : e.trackIdCounter) || 0) : 0;
|
|
133
|
+
O(n.html) && (n.html = await A(n.html)), _ && (s.trackIdSessionFloor = Math.max(re, $(n.html)));
|
|
134
|
+
const se = {
|
|
135
|
+
preselectedDynamicContentList: B,
|
|
129
136
|
onReady: () => {
|
|
130
137
|
console.debug("guido:ready"), r("ready");
|
|
131
138
|
}
|
|
132
139
|
};
|
|
133
|
-
u = I(), await
|
|
140
|
+
u = I(), await F(n, g(), se), y.selectedDynamicContentList = B;
|
|
134
141
|
} catch (e) {
|
|
135
142
|
console.error("Failed to initialize Stripo editor:", e);
|
|
136
143
|
}
|
|
137
144
|
};
|
|
138
|
-
return
|
|
145
|
+
return ae(async () => {
|
|
139
146
|
var e;
|
|
140
|
-
console.debug("Guido says happy coding 🎉"), console.debug("🚗 Ka-Chow"), E().$reset(), w().$reset(),
|
|
147
|
+
console.debug("Guido says happy coding 🎉"), console.debug("🚗 Ka-Chow"), E().$reset(), w().$reset(), Ae().$reset(), Le().$reset(), b();
|
|
141
148
|
const t = (e = f.value) == null ? void 0 : e.parentElement;
|
|
142
|
-
if (t && (
|
|
149
|
+
if (t && (c = new ResizeObserver(b), c.observe(t)), M(), a.ready)
|
|
143
150
|
await h();
|
|
144
151
|
else {
|
|
145
|
-
const
|
|
146
|
-
d && (
|
|
152
|
+
const i = H(() => a.ready, (d) => {
|
|
153
|
+
d && (i(), h());
|
|
147
154
|
});
|
|
148
155
|
}
|
|
149
156
|
document.addEventListener("dynamic-content:open", v);
|
|
150
157
|
}), ce(() => {
|
|
151
|
-
if (
|
|
158
|
+
if (c == null || c.disconnect(), document.removeEventListener("dynamic-content:open", v), E().disposeStrategyPageReturn(), S(u))
|
|
152
159
|
try {
|
|
153
160
|
w().isStripoInitialized = !1;
|
|
154
161
|
} catch (t) {
|
|
155
162
|
console.debug("Failed to close the editor readiness gate on unmount", t);
|
|
156
163
|
}
|
|
157
|
-
|
|
164
|
+
R(async () => {
|
|
158
165
|
if (S(u))
|
|
159
166
|
try {
|
|
160
167
|
window.UIEditor.removeEditor();
|
|
@@ -164,13 +171,13 @@ const lt = /* @__PURE__ */ se({
|
|
|
164
171
|
}), o.reset();
|
|
165
172
|
}), q({
|
|
166
173
|
dynamicContent: {
|
|
167
|
-
insert:
|
|
174
|
+
insert: U,
|
|
168
175
|
close: N
|
|
169
176
|
},
|
|
170
177
|
hasChanges: l,
|
|
171
178
|
saveSilent: k,
|
|
172
|
-
setLoading:
|
|
173
|
-
}), { __sfc: !0, PreviewContainer: K, OnboardingWrapper: j, AssignStrategyDrawer: J, RemoveStrategyModal: Q,
|
|
179
|
+
setLoading: T
|
|
180
|
+
}), { __sfc: !0, PreviewContainer: K, OnboardingWrapper: j, AssignStrategyDrawer: J, RemoveStrategyModal: Q, autoSaveControllerRef: C, LegacyStrategyUpdatedModal: X, wrapperRef: f, dynamicContentStore: y, unsubscribeStore: D, props: a, configStore: o, editorStore: s, previewStore: Y, hasChanges: l, isTestPartner: Z, isSaveValidationEnabled: ee, saveSilent: k, setLoading: T, emit: r, buildMetadata: g, initPlugin: F, preloadRuntime: M, runExclusive: R, beginMount: I, isCurrentMount: S, mountGeneration: u, getDefaultTemplate: L, cloneTimersOnSave: A, hasTimerBlocks: O, noHeader: te, isRrsEnabled: oe, hasAssignedStrategy: ne, insertDynamicContent: U, closeDynamicContent: N, handleDynamicContentOpen: v, ribbonObserver: c, updateRibbonOffset: b, startEditor: h, AutoSaveController: ve, AuthErrorModal: be, Toaster: he, FilterSelectionDrawer: Ee, HeaderWrapper: we, LoadingWrapper: Ce, SaveAsTemplateDrawer: De, UnsubscribeWrapper: ke, ValidationErrorDrawer: Te };
|
|
174
181
|
}
|
|
175
182
|
});
|
|
176
183
|
export {
|
|
@@ -1,14 +1,24 @@
|
|
|
1
|
-
import { defineComponent as
|
|
2
|
-
import { useAutoSave as
|
|
3
|
-
import { useSave as
|
|
4
|
-
import { useSaveValidationRollout as
|
|
5
|
-
|
|
1
|
+
import { defineComponent as i } from "vue";
|
|
2
|
+
import { useAutoSave as l } from "../../composables/useAutoSave.js";
|
|
3
|
+
import { useSave as m } from "../../composables/useSave.js";
|
|
4
|
+
import { useSaveValidationRollout as c } from "../../composables/useSaveValidationRollout.js";
|
|
5
|
+
import { useToaster as p } from "../../composables/useToaster.js";
|
|
6
|
+
const b = /* @__PURE__ */ i({
|
|
6
7
|
__name: "AutoSaveController",
|
|
7
|
-
setup(
|
|
8
|
-
const { save: e, saveRawOnly:
|
|
9
|
-
|
|
8
|
+
setup(v, { expose: n }) {
|
|
9
|
+
const { save: e, saveRawOnly: t } = m(), { isEnabled: o } = c(), { handleError: r } = p(), a = () => o.value ? t() : e(!1, !0);
|
|
10
|
+
l(a);
|
|
11
|
+
const s = async () => {
|
|
12
|
+
try {
|
|
13
|
+
return await e(!0);
|
|
14
|
+
} catch (u) {
|
|
15
|
+
r(u, "Failed to save template");
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
return n({ saveSilent: s }), { __sfc: !0, save: e, saveRawOnly: t, isEnabled: o, handleError: r, backgroundSave: a, saveSilent: s };
|
|
10
20
|
}
|
|
11
21
|
});
|
|
12
22
|
export {
|
|
13
|
-
|
|
23
|
+
b as default
|
|
14
24
|
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import t from "./AutoSaveStatus.vue2.js";
|
|
2
|
+
import r from "../../../_virtual/_plugin-vue2_normalizer.js";
|
|
3
|
+
var _ = function() {
|
|
4
|
+
var s = this, e = s._self._c, a = s._self._setupProxy;
|
|
5
|
+
return a.isFeatureEnabled("autosave") ? e("div", { staticClass: "d-f a-i-c auto-save-status" }, [a.autosaveStore.status === a.AUTOSAVE_STATUS.SAVING ? e("span", { staticClass: "d-f a-i-c f-s-1" }, [e(a.InLoading, { attrs: { "color-class": "i-c-53", size: "16" } }), e("span", { staticClass: "ml-1 t-c-53" }, [s._v(s._s(a.trans("newsletter.saving")))])], 1) : a.savedLabel ? e("span", { staticClass: "f-s-1 t-c-53" }, [s._v(s._s(a.savedLabel.before)), a.savedLabel.word ? e("span", { staticClass: "f-w-600" }, [s._v(s._s(a.savedLabel.word))]) : s._e(), s._v(s._s(a.savedLabel.after))]) : s._e()]) : s._e();
|
|
6
|
+
}, n = [], o = /* @__PURE__ */ r(
|
|
7
|
+
t,
|
|
8
|
+
_,
|
|
9
|
+
n,
|
|
10
|
+
!1,
|
|
11
|
+
null,
|
|
12
|
+
null
|
|
13
|
+
);
|
|
14
|
+
const v = o.exports;
|
|
15
|
+
export {
|
|
16
|
+
v as default
|
|
17
|
+
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { defineComponent as p, computed as S } from "vue";
|
|
2
|
+
import { useConfig as A } from "../../../composables/useConfig.js";
|
|
3
|
+
import { useTranslations as T } from "../../../composables/useTranslations.js";
|
|
4
|
+
import { useAutosaveStore as v, AUTOSAVE_STATUS as m } from "../../../stores/autosave.js";
|
|
5
|
+
import { autoSaveTimestamp as b } from "../../../utils/timeUtil.js";
|
|
6
|
+
import { InLoading as D } from "@useinsider/design-system-vue";
|
|
7
|
+
const j = /* @__PURE__ */ p({
|
|
8
|
+
__name: "AutoSaveStatus",
|
|
9
|
+
setup(O) {
|
|
10
|
+
const { isFeatureEnabled: u } = A(), a = v(), n = T(), t = "__BOLD_START__", o = "__BOLD_END__", s = (i) => i.split(t).join("").split(o).join(""), _ = S(() => {
|
|
11
|
+
if (a.status !== m.SAVED || !a.lastSavedAt)
|
|
12
|
+
return null;
|
|
13
|
+
const { isToday: i, time: c, date: f } = b(a.lastSavedAt), l = { boldStart: t, boldEnd: o }, e = i ? n("email-editor.autosaved-at-today", { ...l, time: c }) : n("email-editor.autosaved-at-date", { ...l, date: f }), r = e.indexOf(t), d = e.indexOf(o, r + t.length);
|
|
14
|
+
return r === -1 || d === -1 ? { before: s(e), word: "", after: "" } : {
|
|
15
|
+
before: s(e.slice(0, r)),
|
|
16
|
+
word: s(e.slice(r + t.length, d)),
|
|
17
|
+
after: s(e.slice(d + o.length))
|
|
18
|
+
};
|
|
19
|
+
});
|
|
20
|
+
return { __sfc: !0, isFeatureEnabled: u, autosaveStore: a, trans: n, BOLD_START: t, BOLD_END: o, stripMarkers: s, savedLabel: _, AUTOSAVE_STATUS: m, InLoading: D };
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
export {
|
|
24
|
+
j as default
|
|
25
|
+
};
|
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
import
|
|
1
|
+
import a from "./EditorActions.vue2.js";
|
|
2
2
|
/* empty css */
|
|
3
|
-
import
|
|
4
|
-
var
|
|
5
|
-
var
|
|
6
|
-
var
|
|
7
|
-
return e("div", { staticClass: "d-f editor-actions" }, [
|
|
3
|
+
import r from "../../../_virtual/_plugin-vue2_normalizer.js";
|
|
4
|
+
var d = function() {
|
|
5
|
+
var o, s;
|
|
6
|
+
var i = this, e = i._self._c, t = i._self._setupProxy;
|
|
7
|
+
return e("div", { staticClass: "d-f a-i-c editor-actions" }, [!t.editorStore.isPreviewModeOpen && t.hasContentOnTheLeft ? e("div", { staticClass: "editor-actions__divider" }) : i._e(), (s = (o = t.config) == null ? void 0 : o.features) != null && s.testMessage ? e(t.InButtonV2, { attrs: { id: "guido__test-button", "left-icon": "line-architect-test-journey", styling: "ghost", type: "secondary", "disabled-status": t.editorStore.isTestButtonDisabled, "label-text-status": !1, "tooltip-options": t.getTooltipOptions("guido__test-button", { staticPosition: "bottom right" }), "tooltip-text": t.trans("newsletter.test-email") }, on: { click: t.handleTestEmail } }) : i._e(), e(t.EditorActionsMenu), t.editorStore.isPreviewModeOpen ? i._e() : e("div", { staticClass: "editor-actions__divider" }), t.editorStore.isPreviewModeOpen ? i._e() : e(t.InButtonV2, { staticClass: "ml-3", attrs: { id: "guido__save-button", "disabled-status": !t.isSaving && t.editorStore.isSaveButtonDisabled, "label-text": t.saveLabel, "loading-status": t.isSaving }, on: { click: function(n) {
|
|
8
8
|
return t.handleSave(!1);
|
|
9
|
-
} } }), e(t.MigrationConfirmModal, { ref: "migrationModalRef", on: { confirm: function(
|
|
9
|
+
} } }), e(t.MigrationConfirmModal, { ref: "migrationModalRef", on: { confirm: function(n) {
|
|
10
10
|
return t.executeSave(!1);
|
|
11
11
|
} } })], 1);
|
|
12
|
-
},
|
|
12
|
+
}, l = [], c = /* @__PURE__ */ r(
|
|
13
|
+
a,
|
|
14
|
+
d,
|
|
13
15
|
l,
|
|
14
|
-
u,
|
|
15
|
-
c,
|
|
16
16
|
!1,
|
|
17
17
|
null,
|
|
18
|
-
"
|
|
18
|
+
"f36a9d0c"
|
|
19
19
|
);
|
|
20
|
-
const
|
|
20
|
+
const p = c.exports;
|
|
21
21
|
export {
|
|
22
|
-
|
|
22
|
+
p as default
|
|
23
23
|
};
|
|
@@ -1,83 +1,68 @@
|
|
|
1
|
-
import { defineComponent as
|
|
2
|
-
import { useActionsApi as
|
|
3
|
-
import { useConfig as
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
import
|
|
22
|
-
import
|
|
23
|
-
const
|
|
1
|
+
import { defineComponent as F, computed as x, ref as A } from "vue";
|
|
2
|
+
import { useActionsApi as H } from "../../../composables/useActionsApi.js";
|
|
3
|
+
import { useConfig as O } from "../../../composables/useConfig.js";
|
|
4
|
+
import { useTestEmailClick as R } from "../../../composables/useGuidoActions.js";
|
|
5
|
+
import { useHtmlCompiler as B } from "../../../composables/useHtmlCompiler.js";
|
|
6
|
+
import { useSave as z } from "../../../composables/useSave.js";
|
|
7
|
+
import { useSaveValidation as D } from "../../../composables/useSaveValidation.js";
|
|
8
|
+
import { useSaveValidationRollout as I } from "../../../composables/useSaveValidationRollout.js";
|
|
9
|
+
import { useToaster as W } from "../../../composables/useToaster.js";
|
|
10
|
+
import { useTranslations as j } from "../../../composables/useTranslations.js";
|
|
11
|
+
import { useLiquidValidator as G } from "../../../composables/validators/useLiquidValidator.js";
|
|
12
|
+
import { ToasterTypeOptions as J } from "../../../enums/toaster.js";
|
|
13
|
+
import { useAutosaveStore as K } from "../../../stores/autosave.js";
|
|
14
|
+
import { useConfigStore as N } from "../../../stores/config.js";
|
|
15
|
+
import { useEditorStore as P } from "../../../stores/editor.js";
|
|
16
|
+
import { useSaveValidationStore as Q } from "../../../stores/save-validation.js";
|
|
17
|
+
import { useTemplateStore as U } from "../../../stores/template.js";
|
|
18
|
+
import { getTooltipOptions as X } from "../../../utils/tooltipUtils.js";
|
|
19
|
+
import { InButtonV2 as Y } from "@useinsider/design-system-vue";
|
|
20
|
+
import { storeToRefs as Z } from "pinia";
|
|
21
|
+
import $ from "./EditorActionsMenu.vue.js";
|
|
22
|
+
import tt from "./MigrationConfirmModal.vue.js";
|
|
23
|
+
const Vt = /* @__PURE__ */ F({
|
|
24
24
|
__name: "EditorActions",
|
|
25
|
-
setup(
|
|
26
|
-
const { config:
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
return;
|
|
30
|
-
}
|
|
31
|
-
g();
|
|
32
|
-
}, B = async () => {
|
|
33
|
-
a.value = !0, await d(), a.value = !1;
|
|
34
|
-
}, L = () => {
|
|
35
|
-
o.isSaveAsTemplateDrawerOpen = !0;
|
|
36
|
-
}, R = c(() => o.isVersionHistoryOpen ? r("newsletter.close-version-history") : r("newsletter.version-history")), D = c(
|
|
37
|
-
() => {
|
|
38
|
-
var t, e;
|
|
39
|
-
return ((e = (t = p.value) == null ? void 0 : t.features) == null ? void 0 : e.versionHistory) && !o.isPreviewModeOpen;
|
|
40
|
-
}
|
|
41
|
-
), A = async (t) => {
|
|
42
|
-
n.value = !0, t || (o.loadingStatus = !0);
|
|
43
|
-
let e;
|
|
25
|
+
setup(ot, { expose: L }) {
|
|
26
|
+
const { config: M, isFeatureEnabled: r } = O(), { save: u } = z(), { validateCurrentTemplate: c } = D(), { isEnabled: i } = I(), { showToaster: f, handleError: s } = W(), { getCompiledEmail: d } = H(), { compileHtml: p } = B(), { validateLiquidSyntax: v } = G(), S = N(), e = P(), g = Q(), h = U(), y = K(), { hasMigrations: T } = Z(h), b = x(() => r("liquidSyntax") || r("autosave") && y.hasStatusLabel), a = j(), k = x(() => i.value && S.allowSaveWithErrors ? a("email-editor.save-and-continue") : "Save"), n = A(!1), E = A(), l = R(), w = async (t) => {
|
|
27
|
+
n.value = !0, t || (e.loadingStatus = !0);
|
|
28
|
+
let o;
|
|
44
29
|
try {
|
|
45
|
-
|
|
46
|
-
} catch (
|
|
47
|
-
s(
|
|
30
|
+
o = await u(t);
|
|
31
|
+
} catch (_) {
|
|
32
|
+
s(_, "Failed to save template");
|
|
48
33
|
} finally {
|
|
49
|
-
n.value = !1, !t && !
|
|
34
|
+
n.value = !1, !t && !o && (e.loadingStatus = !1);
|
|
50
35
|
}
|
|
51
|
-
return
|
|
52
|
-
},
|
|
53
|
-
var
|
|
54
|
-
if (!t &&
|
|
55
|
-
(
|
|
36
|
+
return o;
|
|
37
|
+
}, C = (t) => {
|
|
38
|
+
var o;
|
|
39
|
+
if (!t && T.value) {
|
|
40
|
+
(o = E.value) == null || o.open();
|
|
56
41
|
return;
|
|
57
42
|
}
|
|
58
|
-
return
|
|
43
|
+
return w(t);
|
|
59
44
|
}, m = async () => {
|
|
60
|
-
|
|
45
|
+
e.loadingStatus = !0;
|
|
61
46
|
try {
|
|
62
|
-
return await
|
|
47
|
+
return await c();
|
|
63
48
|
} catch (t) {
|
|
64
49
|
return console.warn("Test-path validation failed; sending without the drawer.", t), [];
|
|
65
50
|
} finally {
|
|
66
|
-
|
|
51
|
+
e.loadingStatus = !1;
|
|
67
52
|
}
|
|
68
|
-
},
|
|
53
|
+
}, V = async () => {
|
|
69
54
|
const t = await m();
|
|
70
|
-
t.length &&
|
|
71
|
-
},
|
|
55
|
+
t.length && g.open(t, "test");
|
|
56
|
+
}, q = async () => {
|
|
72
57
|
if (i.value) {
|
|
73
58
|
if ((await m()).length) {
|
|
74
|
-
|
|
75
|
-
type:
|
|
76
|
-
message:
|
|
59
|
+
f({
|
|
60
|
+
type: J.Error,
|
|
61
|
+
message: a("email-editor.validation-errors-found"),
|
|
77
62
|
actionButton: {
|
|
78
|
-
text:
|
|
63
|
+
text: a("email-editor.check-errors"),
|
|
79
64
|
onClick: () => {
|
|
80
|
-
|
|
65
|
+
V();
|
|
81
66
|
}
|
|
82
67
|
},
|
|
83
68
|
autoHide: !1
|
|
@@ -87,26 +72,26 @@ const bt = /* @__PURE__ */ I({
|
|
|
87
72
|
l();
|
|
88
73
|
return;
|
|
89
74
|
}
|
|
90
|
-
if (
|
|
91
|
-
|
|
75
|
+
if (r("liquidSyntax")) {
|
|
76
|
+
e.loadingStatus = !0;
|
|
92
77
|
try {
|
|
93
|
-
const { html: t } = await
|
|
94
|
-
if (!await
|
|
78
|
+
const { html: t } = await d({ minimize: !0, resetDataSavedFlag: !1 }), { compiledHtml: o } = p(t);
|
|
79
|
+
if (!await v(o))
|
|
95
80
|
return;
|
|
96
81
|
} catch (t) {
|
|
97
82
|
s(t, "Failed to prepare test email");
|
|
98
83
|
return;
|
|
99
84
|
} finally {
|
|
100
|
-
|
|
85
|
+
e.loadingStatus = !1;
|
|
101
86
|
}
|
|
102
87
|
}
|
|
103
88
|
l();
|
|
104
89
|
};
|
|
105
|
-
return
|
|
106
|
-
handleSave:
|
|
107
|
-
}), { __sfc: !0, config:
|
|
90
|
+
return L({
|
|
91
|
+
handleSave: C
|
|
92
|
+
}), { __sfc: !0, config: M, isFeatureEnabled: r, save: u, validateCurrentTemplate: c, isEnabled: i, showToaster: f, handleError: s, getCompiledEmail: d, compileHtml: p, validateLiquidSyntax: v, configStore: S, editorStore: e, saveValidationStore: g, templateStore: h, autosaveStore: y, hasMigrations: T, hasContentOnTheLeft: b, trans: a, saveLabel: k, isSaving: n, migrationModalRef: E, testEmailClick: l, executeSave: w, handleSave: C, collectTestErrors: m, openTestErrors: V, handleTestEmail: q, getTooltipOptions: X, InButtonV2: Y, EditorActionsMenu: $, MigrationConfirmModal: tt };
|
|
108
93
|
}
|
|
109
94
|
});
|
|
110
95
|
export {
|
|
111
|
-
|
|
96
|
+
Vt as default
|
|
112
97
|
};
|