@useinsider/guido 3.20.1-beta.24b6c72 → 3.20.1-beta.49b58ed
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/README.md +1 -0
- package/dist/@types/config/schemas.js +11 -10
- package/dist/components/Guido.vue.js +2 -2
- package/dist/components/Guido.vue2.js +114 -101
- 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 +60 -35
- package/dist/composables/useAccessibilityApi.js +45 -0
- package/dist/composables/useCustomInterfaceAppearance.js +42 -41
- package/dist/config/i18n/en/labels.json.js +36 -4
- package/dist/config/i18n/en/tooltips.json.js +2 -1
- 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/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 +953 -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 +48 -21
- package/dist/utils/timeUtil.js +6 -17
- package/package.json +2 -2
- 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
package/README.md
CHANGED
|
@@ -166,6 +166,7 @@ const config: GuidoConfigInput = {
|
|
|
166
166
|
allowlistEnabled?: boolean, // Default: false - Pre-save domain-allowlist check (opt-in). Guido self-serves the block toaster (role lookup, deep-link, copy from window.trans).
|
|
167
167
|
allowSaveWithErrors?: boolean, // Default: true - Allow the validation drawer's "Save and Continue" soft-save. Set false to hard-block invalid saves (transactional + unsubscribe pages).
|
|
168
168
|
reusableRecommendationStrategy?: boolean, // Default: false - Assign an RRS strategy to recommendation blocks instead of per-block algorithm/filters/shuffle/product-count settings.
|
|
169
|
+
accessibilityTesting?: boolean, // Default: false - Show the Accessibility Test entry in the header kebab menu (Stripo's checker: contrast, image alternatives, colour-vision simulation) and the tab-bar onboarding tour that points at it.
|
|
169
170
|
},
|
|
170
171
|
|
|
171
172
|
// Optional: Callbacks
|
|
@@ -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,7 +12,7 @@ var t = function() {
|
|
|
12
12
|
s,
|
|
13
13
|
!1,
|
|
14
14
|
null,
|
|
15
|
-
"
|
|
15
|
+
"40eca1bd"
|
|
16
16
|
);
|
|
17
17
|
const v = n.exports;
|
|
18
18
|
export {
|
|
@@ -1,178 +1,191 @@
|
|
|
1
|
-
import { defineComponent as
|
|
2
|
-
import { useCortexBlueprintBridge as
|
|
3
|
-
import { useEditorLock as
|
|
4
|
-
import { provideGuidoActions as
|
|
5
|
-
import { useGuidoStateBridge as
|
|
6
|
-
import { usePartner as
|
|
7
|
-
import { useSaveValidationRollout as
|
|
8
|
-
import { useStripo as
|
|
9
|
-
import { useTimerClone as
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
1
|
+
import { defineComponent as ce, defineAsyncComponent as m, ref as H, computed as p, watch as G, onMounted as de, onUnmounted as me } from "vue";
|
|
2
|
+
import { useCortexBlueprintBridge as le } from "../composables/useCortexBlueprintBridge.js";
|
|
3
|
+
import { useEditorLock as ue } from "../composables/useEditorLock.js";
|
|
4
|
+
import { provideGuidoActions as pe } from "../composables/useGuidoActions.js";
|
|
5
|
+
import { useGuidoStateBridge as fe } from "../composables/useGuidoStateBridge.js";
|
|
6
|
+
import { usePartner as ye } from "../composables/usePartner.js";
|
|
7
|
+
import { useSaveValidationRollout as ge } from "../composables/useSaveValidationRollout.js";
|
|
8
|
+
import { useStripo as ve } from "../composables/useStripo.js";
|
|
9
|
+
import { useTimerClone as Se } from "../composables/useTimerClone.js";
|
|
10
|
+
import { useToaster as be } from "../composables/useToaster.js";
|
|
11
|
+
import { useTranslations as he } from "../composables/useTranslations.js";
|
|
12
|
+
import { migrate as $ } from "../config/migrator/index.js";
|
|
13
|
+
import { ModuleFolderDefaults as z } from "../enums/defaults.js";
|
|
14
|
+
import { RIBBON_SELECTOR as Ee } from "../enums/onboarding.js";
|
|
15
|
+
import { ToasterTypeOptions as we } from "../enums/toaster.js";
|
|
13
16
|
import { useRecommendationExtensionStore as E } from "../extensions/Blocks/Recommendation/store/recommendation.js";
|
|
14
|
-
import
|
|
15
|
-
import
|
|
16
|
-
import
|
|
17
|
-
import
|
|
18
|
-
import
|
|
19
|
-
import
|
|
20
|
-
import
|
|
21
|
-
import
|
|
22
|
-
import
|
|
23
|
-
import { useStripoApi as
|
|
24
|
-
import { useConfigStore as
|
|
25
|
-
import { useDynamicContentStore as
|
|
17
|
+
import Te from "./organisms/AutoSaveController.vue.js";
|
|
18
|
+
import ke from "./organisms/base/AuthErrorModal.vue.js";
|
|
19
|
+
import Ce from "./organisms/base/Toaster.vue.js";
|
|
20
|
+
import De from "./organisms/extensions/recommendation/FilterSelectionDrawer.vue.js";
|
|
21
|
+
import Fe from "./organisms/header/HeaderWrapper.vue.js";
|
|
22
|
+
import Me from "./organisms/LoadingWrapper.vue.js";
|
|
23
|
+
import Re from "./organisms/save-as-template/SaveAsTemplateDrawer.vue.js";
|
|
24
|
+
import Ie from "./organisms/unsubscribe/UnsubscribeWrapper.vue.js";
|
|
25
|
+
import Le from "./organisms/validation/ValidationErrorDrawer.vue.js";
|
|
26
|
+
import { useStripoApi as Oe } from "../services/stripoApi.js";
|
|
27
|
+
import { useConfigStore as Ae } from "../stores/config.js";
|
|
28
|
+
import { useDynamicContentStore as Ue } from "../stores/dynamic-content.js";
|
|
26
29
|
import { useEditorStore as w } from "../stores/editor.js";
|
|
27
|
-
import { usePreviewStore as
|
|
28
|
-
import { useSaveValidationStore as
|
|
29
|
-
import { useTemplateStore as
|
|
30
|
-
import { useUnsubscribeStore as
|
|
31
|
-
import { readTrackFloor as
|
|
32
|
-
const
|
|
30
|
+
import { usePreviewStore as Ne } from "../stores/preview.js";
|
|
31
|
+
import { useSaveValidationStore as Be } from "../stores/save-validation.js";
|
|
32
|
+
import { useTemplateStore as Pe } from "../stores/template.js";
|
|
33
|
+
import { useUnsubscribeStore as _e } from "../stores/unsubscribe.js";
|
|
34
|
+
import { readTrackFloor as q } from "../utils/linkTrackingIds.js";
|
|
35
|
+
const ho = /* @__PURE__ */ ce({
|
|
33
36
|
__name: "Guido",
|
|
34
37
|
props: {
|
|
35
38
|
config: null,
|
|
36
39
|
ready: { type: Boolean, default: !0 }
|
|
37
40
|
},
|
|
38
41
|
emits: ["dynamic-content:open", "back", "save:start", "save:complete", "on-change", "ready", "onboarding:finished", "test-email:click"],
|
|
39
|
-
setup(
|
|
40
|
-
const
|
|
42
|
+
setup(K, { expose: j, emit: r }) {
|
|
43
|
+
const a = K, J = m(
|
|
41
44
|
() => import("./organisms/email-preview/PreviewContainer.vue.js")
|
|
42
|
-
),
|
|
45
|
+
), Q = m(
|
|
43
46
|
() => import("./organisms/onboarding/OnboardingWrapper.vue.js")
|
|
44
|
-
),
|
|
47
|
+
), X = m(
|
|
45
48
|
() => import("./organisms/extensions/recommendation/AssignStrategyDrawer.vue.js")
|
|
46
|
-
),
|
|
49
|
+
), Y = m(
|
|
47
50
|
() => import("./organisms/extensions/recommendation/RemoveStrategyModal.vue.js")
|
|
48
|
-
),
|
|
51
|
+
), T = H(), Z = m(
|
|
49
52
|
() => import("./organisms/extensions/recommendation/LegacyStrategyUpdatedModal.vue.js")
|
|
50
|
-
),
|
|
51
|
-
|
|
52
|
-
const
|
|
53
|
-
var
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
53
|
+
), f = H(), y = Ue(), k = _e(), t = Ae();
|
|
54
|
+
a.ready && t.init(a.config);
|
|
55
|
+
const s = w(), ee = Ne(), l = p(() => s.hasChanges), { isTestPartner: oe } = ye(), { isEnabled: te } = ge(), { showToaster: C } = be(), D = he(), F = () => {
|
|
56
|
+
var o;
|
|
57
|
+
if (!s.isNormalMode) {
|
|
58
|
+
console.debug("guido:save:silent:blocked", {
|
|
59
|
+
isVersionHistoryOpen: s.isVersionHistoryOpen,
|
|
60
|
+
isAccessibilityTestingOpen: s.isAccessibilityTestingOpen
|
|
61
|
+
}), C({
|
|
62
|
+
type: we.Warning,
|
|
63
|
+
message: D("email-editor.save-blocked-outside-editor")
|
|
64
|
+
});
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
return (o = T.value) == null ? void 0 : o.saveSilent();
|
|
68
|
+
}, M = (o) => {
|
|
69
|
+
s.loadingStatus = o;
|
|
57
70
|
};
|
|
58
|
-
|
|
71
|
+
le(), fe();
|
|
59
72
|
const g = () => {
|
|
60
|
-
var
|
|
73
|
+
var o, e;
|
|
61
74
|
return {
|
|
62
|
-
emailId:
|
|
63
|
-
userId:
|
|
64
|
-
username:
|
|
65
|
-
partnerName:
|
|
66
|
-
savedModulesFolderName: ((
|
|
67
|
-
defaultModulesFolderName: ((e =
|
|
75
|
+
emailId: t.templateId,
|
|
76
|
+
userId: t.userId,
|
|
77
|
+
username: t.username,
|
|
78
|
+
partnerName: t.partnerName,
|
|
79
|
+
savedModulesFolderName: ((o = t.editor) == null ? void 0 : o.savedModulesFolderName) || z.SAVED_MODULES,
|
|
80
|
+
defaultModulesFolderName: ((e = t.editor) == null ? void 0 : e.defaultModulesFolderName) || z.DEFAULT_MODULES
|
|
68
81
|
};
|
|
69
|
-
}, { initPlugin: R, preloadRuntime:
|
|
82
|
+
}, { initPlugin: R, preloadRuntime: I } = ve(), { runExclusive: L, beginMount: O, isCurrentMount: v } = ue();
|
|
70
83
|
let u = 0;
|
|
71
|
-
const { getDefaultTemplate:
|
|
72
|
-
var
|
|
73
|
-
return !((
|
|
74
|
-
}),
|
|
84
|
+
const { getDefaultTemplate: A } = Oe(), { cloneTimersOnSave: U, hasTimerBlocks: N } = Se(), ne = p(() => {
|
|
85
|
+
var o;
|
|
86
|
+
return !((o = t.ui) != null && o.showHeader);
|
|
87
|
+
}), re = p(() => t.isFeatureEnabled("reusableRecommendationStrategy")), se = p(
|
|
75
88
|
() => !!E().recommendationConfigs.strategyId
|
|
76
89
|
);
|
|
77
|
-
|
|
90
|
+
pe({
|
|
78
91
|
onBack: () => {
|
|
79
92
|
console.debug("guido:back"), r("back");
|
|
80
93
|
},
|
|
81
94
|
onSaveStart: () => {
|
|
82
95
|
console.debug("guido:save:start"), r("save:start");
|
|
83
96
|
},
|
|
84
|
-
onSaveComplete: (
|
|
85
|
-
const e = { ...
|
|
97
|
+
onSaveComplete: (o) => {
|
|
98
|
+
const e = { ...o, metadata: g() };
|
|
86
99
|
console.debug("guido:save:complete", e), r("save:complete", e);
|
|
87
100
|
},
|
|
88
101
|
onTestEmailClick: () => {
|
|
89
102
|
console.debug("guido:test-email:click"), r("test-email:click");
|
|
90
103
|
}
|
|
91
104
|
});
|
|
92
|
-
const B = (
|
|
93
|
-
console.debug("dynamic-content:close",
|
|
94
|
-
},
|
|
105
|
+
const B = (o) => {
|
|
106
|
+
console.debug("dynamic-content:close", o), y.setSelectedDynamicContent(o), document.dispatchEvent(new CustomEvent("dynamic-content:close", { detail: o }));
|
|
107
|
+
}, P = () => {
|
|
95
108
|
console.debug("dynamic-content:close", "Without Data"), document.dispatchEvent(new CustomEvent("dynamic-content:close", { detail: { text: "", value: "" } }));
|
|
96
109
|
};
|
|
97
110
|
G(() => l.value, () => {
|
|
98
111
|
r("on-change", l.value);
|
|
99
112
|
});
|
|
100
|
-
const
|
|
101
|
-
const e =
|
|
102
|
-
console.debug("dynamic-content:open", e.detail), r("dynamic-content:open",
|
|
113
|
+
const S = (o) => {
|
|
114
|
+
const e = o, { attribute: i, position: d } = e.detail;
|
|
115
|
+
console.debug("dynamic-content:open", e.detail), r("dynamic-content:open", i, d);
|
|
103
116
|
};
|
|
104
|
-
let
|
|
117
|
+
let c = null;
|
|
105
118
|
const b = () => {
|
|
106
119
|
var e;
|
|
107
|
-
const
|
|
108
|
-
(e = f.value) == null || e.style.setProperty("--ribbon-offset", `${(
|
|
120
|
+
const o = document.querySelector(Ee);
|
|
121
|
+
(e = f.value) == null || e.style.setProperty("--ribbon-offset", `${(o == null ? void 0 : o.offsetHeight) ?? 0}px`);
|
|
109
122
|
}, h = async () => {
|
|
110
|
-
var
|
|
123
|
+
var o;
|
|
111
124
|
try {
|
|
112
|
-
|
|
113
|
-
const e =
|
|
114
|
-
|
|
115
|
-
const
|
|
116
|
-
partnerName:
|
|
125
|
+
t.initialized || t.init(a.config), s.templateId = t.templateId;
|
|
126
|
+
const e = t.template, i = (e == null ? void 0 : e.html) || "", d = (e == null ? void 0 : e.css) || "", _ = (e == null ? void 0 : e.preselectedDynamicContent) || [];
|
|
127
|
+
k.selectedUnsubscribePages = (e == null ? void 0 : e.selectedUnsubscribePages) || [];
|
|
128
|
+
const x = ((o = e == null ? void 0 : e.migration) == null ? void 0 : o.recommendationConfigs) ?? {}, V = t.isFeatureEnabled("linkTrackingIds"), W = {
|
|
129
|
+
partnerName: t.partnerName,
|
|
117
130
|
campaignUrls: e == null ? void 0 : e.recommendationCampaignUrls,
|
|
118
|
-
rrsEnabled:
|
|
131
|
+
rrsEnabled: t.isFeatureEnabled("reusableRecommendationStrategy")
|
|
119
132
|
};
|
|
120
133
|
let n = {
|
|
121
|
-
html:
|
|
134
|
+
html: i && await $(i, x, W),
|
|
122
135
|
css: d
|
|
123
136
|
};
|
|
124
|
-
n.html || (n = await
|
|
125
|
-
const
|
|
126
|
-
|
|
137
|
+
n.html || (n = await A(), n.html = await $(n.html, x, W));
|
|
138
|
+
const ie = V ? q(n.html, (e == null ? void 0 : e.trackIdCounter) || 0) : 0;
|
|
139
|
+
N(n.html) && (n.html = await U(n.html)), V && (s.trackIdSessionFloor = Math.max(ie, q(n.html)));
|
|
127
140
|
const ae = {
|
|
128
|
-
preselectedDynamicContentList:
|
|
141
|
+
preselectedDynamicContentList: _,
|
|
129
142
|
onReady: () => {
|
|
130
143
|
console.debug("guido:ready"), r("ready");
|
|
131
144
|
}
|
|
132
145
|
};
|
|
133
|
-
u =
|
|
146
|
+
u = O(), await R(n, g(), ae), y.selectedDynamicContentList = _;
|
|
134
147
|
} catch (e) {
|
|
135
148
|
console.error("Failed to initialize Stripo editor:", e);
|
|
136
149
|
}
|
|
137
150
|
};
|
|
138
|
-
return
|
|
151
|
+
return de(async () => {
|
|
139
152
|
var e;
|
|
140
|
-
console.debug("Guido says happy coding 🎉"), console.debug("🚗 Ka-Chow"), E().$reset(), w().$reset(),
|
|
141
|
-
const
|
|
142
|
-
if (
|
|
153
|
+
console.debug("Guido says happy coding 🎉"), console.debug("🚗 Ka-Chow"), E().$reset(), w().$reset(), Pe().$reset(), Be().$reset(), b();
|
|
154
|
+
const o = (e = f.value) == null ? void 0 : e.parentElement;
|
|
155
|
+
if (o && (c = new ResizeObserver(b), c.observe(o)), I(), a.ready)
|
|
143
156
|
await h();
|
|
144
157
|
else {
|
|
145
|
-
const
|
|
146
|
-
d && (
|
|
158
|
+
const i = G(() => a.ready, (d) => {
|
|
159
|
+
d && (i(), h());
|
|
147
160
|
});
|
|
148
161
|
}
|
|
149
|
-
document.addEventListener("dynamic-content:open",
|
|
150
|
-
}),
|
|
151
|
-
if (
|
|
162
|
+
document.addEventListener("dynamic-content:open", S);
|
|
163
|
+
}), me(() => {
|
|
164
|
+
if (c == null || c.disconnect(), document.removeEventListener("dynamic-content:open", S), E().disposeStrategyPageReturn(), v(u))
|
|
152
165
|
try {
|
|
153
166
|
w().isStripoInitialized = !1;
|
|
154
|
-
} catch (
|
|
155
|
-
console.debug("Failed to close the editor readiness gate on unmount",
|
|
167
|
+
} catch (o) {
|
|
168
|
+
console.debug("Failed to close the editor readiness gate on unmount", o);
|
|
156
169
|
}
|
|
157
|
-
|
|
158
|
-
if (
|
|
170
|
+
L(async () => {
|
|
171
|
+
if (v(u))
|
|
159
172
|
try {
|
|
160
173
|
window.UIEditor.removeEditor();
|
|
161
174
|
} catch {
|
|
162
175
|
console.debug("Failed to remove Stripo editor: No editor found");
|
|
163
176
|
}
|
|
164
|
-
}),
|
|
165
|
-
}),
|
|
177
|
+
}), t.reset();
|
|
178
|
+
}), j({
|
|
166
179
|
dynamicContent: {
|
|
167
180
|
insert: B,
|
|
168
|
-
close:
|
|
181
|
+
close: P
|
|
169
182
|
},
|
|
170
183
|
hasChanges: l,
|
|
171
|
-
saveSilent:
|
|
172
|
-
setLoading:
|
|
173
|
-
}), { __sfc: !0, PreviewContainer:
|
|
184
|
+
saveSilent: F,
|
|
185
|
+
setLoading: M
|
|
186
|
+
}), { __sfc: !0, PreviewContainer: J, OnboardingWrapper: Q, AssignStrategyDrawer: X, RemoveStrategyModal: Y, autoSaveControllerRef: T, LegacyStrategyUpdatedModal: Z, wrapperRef: f, dynamicContentStore: y, unsubscribeStore: k, props: a, configStore: t, editorStore: s, previewStore: ee, hasChanges: l, isTestPartner: oe, isSaveValidationEnabled: te, showToaster: C, trans: D, saveSilent: F, setLoading: M, emit: r, buildMetadata: g, initPlugin: R, preloadRuntime: I, runExclusive: L, beginMount: O, isCurrentMount: v, mountGeneration: u, getDefaultTemplate: A, cloneTimersOnSave: U, hasTimerBlocks: N, noHeader: ne, isRrsEnabled: re, hasAssignedStrategy: se, insertDynamicContent: B, closeDynamicContent: P, handleDynamicContentOpen: S, ribbonObserver: c, updateRibbonOffset: b, startEditor: h, AutoSaveController: Te, AuthErrorModal: ke, Toaster: Ce, FilterSelectionDrawer: De, HeaderWrapper: Fe, LoadingWrapper: Me, SaveAsTemplateDrawer: Re, UnsubscribeWrapper: Ie, ValidationErrorDrawer: Le };
|
|
174
187
|
}
|
|
175
188
|
});
|
|
176
189
|
export {
|
|
177
|
-
|
|
190
|
+
ho as default
|
|
178
191
|
};
|
|
@@ -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
|
};
|