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