@useinsider/guido 3.20.1-beta.c235b0d → 3.20.1-beta.d2cba14
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 +10 -11
- package/dist/components/Guido.vue.js +4 -4
- package/dist/components/Guido.vue2.js +51 -58
- package/dist/components/organisms/AutoSaveController.vue2.js +9 -19
- package/dist/components/organisms/header/AutoSaveToggle.vue.js +22 -0
- package/dist/components/organisms/header/AutoSaveToggle.vue2.js +19 -0
- package/dist/components/organisms/header/EditorActions.vue.js +13 -13
- package/dist/components/organisms/header/EditorActions.vue2.js +72 -57
- package/dist/components/organisms/header/HeaderWrapper.vue.js +6 -6
- package/dist/components/organisms/header/HeaderWrapper.vue2.js +17 -9
- package/dist/components/organisms/header/LeftSlot.vue.js +1 -1
- package/dist/components/organisms/header/LeftSlot.vue2.js +23 -28
- package/dist/components/organisms/header/MiddleSlot.vue.js +4 -4
- package/dist/components/organisms/header/MiddleSlot.vue2.js +7 -8
- package/dist/components/organisms/header/RightSlot.vue.js +8 -9
- package/dist/components/organisms/header/RightSlot.vue2.js +18 -13
- package/dist/components/organisms/onboarding/OnboardingWrapper.vue.js +12 -12
- package/dist/components/organisms/onboarding/OnboardingWrapper.vue2.js +38 -56
- package/dist/composables/useCustomInterfaceAppearance.js +41 -42
- package/dist/composables/useStripo.js +4 -3
- package/dist/config/i18n/en/labels.json.js +4 -36
- package/dist/config/i18n/en/tooltips.json.js +1 -2
- package/dist/extensions/Blocks/Items/block.js +43 -42
- package/dist/guido.css +1 -1
- package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js +271 -192
- package/dist/package.json.js +1 -1
- package/dist/sprite.svg +0 -10
- package/dist/src/@types/config/schemas.d.ts +0 -2
- package/dist/src/components/organisms/AutoSaveController.vue.d.ts +1 -19
- package/dist/src/components/organisms/header/HeaderWrapper.vue.d.ts +19 -1
- package/dist/src/components/organisms/header/RightSlot.vue.d.ts +19 -1
- package/dist/src/composables/useActionsApi.d.ts +2 -2
- package/dist/src/composables/useConfig.d.ts +0 -2
- package/dist/src/extensions/Blocks/Checkbox/controls/blockBackground/index.d.ts +1 -0
- package/dist/src/extensions/Blocks/CouponBlock/controls/index.d.ts +8 -0
- package/dist/src/extensions/Blocks/Items/controls/index.d.ts +40 -0
- package/dist/src/extensions/Blocks/RadioButton/controls/blockBackground/index.d.ts +1 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/blockBackground/index.d.ts +1 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/button/index.d.ts +11 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/customAttribute/index.d.ts +7 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/image/index.d.ts +2 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/name/index.d.ts +7 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/index.d.ts +7 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscount/index.d.ts +7 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPrice/index.d.ts +7 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/price/index.d.ts +7 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/title/index.d.ts +7 -0
- package/dist/src/extensions/Blocks/_Boilerplate/controls/blockBackground/index.d.ts +1 -0
- package/dist/src/extensions/Blocks/controlFactories.d.ts +22 -0
- package/dist/src/stores/autosave.d.ts +1 -73
- package/dist/src/stores/config.d.ts +0 -20
- package/dist/src/stores/editor.d.ts +0 -109
- package/dist/src/stores/onboarding.d.ts +21 -952
- package/dist/src/stores/version-history.d.ts +1 -1
- package/dist/src/utils/timeUtil.d.ts +0 -5
- package/dist/static/styles/components/button.css.js +5 -0
- package/dist/static/styles/variables.css.js +0 -2
- package/dist/stores/autosave.js +7 -12
- package/dist/stores/editor.js +4 -7
- package/dist/stores/onboarding.js +21 -43
- package/dist/utils/timeUtil.js +17 -6
- package/package.json +3 -3
- package/dist/components/organisms/header/AutoSaveStatus.vue.js +0 -17
- package/dist/components/organisms/header/AutoSaveStatus.vue2.js +0 -25
- package/dist/components/organisms/header/EditorActionsMenu.vue.js +0 -20
- package/dist/components/organisms/header/EditorActionsMenu.vue2.js +0 -98
- package/dist/components/organisms/header/accessibility/AccessibilityToolbar.vue.js +0 -18
- package/dist/components/organisms/header/accessibility/AccessibilityToolbar.vue2.js +0 -37
- package/dist/components/organisms/header/accessibility/ColorVisionSelect.vue.js +0 -22
- package/dist/components/organisms/header/accessibility/ColorVisionSelect.vue2.js +0 -48
- package/dist/components/organisms/onboarding/EditorTabBarOnboarding.vue.js +0 -19
- package/dist/components/organisms/onboarding/EditorTabBarOnboarding.vue2.js +0 -90
- package/dist/composables/useAccessibilityApi.js +0 -45
- package/dist/src/components/organisms/header/EditorActionsMenu.vue.d.ts +0 -2
- package/dist/src/components/organisms/header/accessibility/AccessibilityToolbar.vue.d.ts +0 -2
- package/dist/src/components/organisms/header/accessibility/ColorVisionSelect.vue.d.ts +0 -2
- package/dist/src/components/organisms/onboarding/EditorTabBarOnboarding.vue.d.ts +0 -2
- package/dist/src/composables/useAccessibilityApi.d.ts +0 -13
- package/dist/static/styles/components/accessibility.css.js +0 -234
- /package/dist/src/components/organisms/header/{AutoSaveStatus.vue.d.ts → AutoSaveToggle.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 f } 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 I, union as h, lazy as T } 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
|
+
}), S = T(() => 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(S)),
|
|
85
85
|
// eslint-disable-next-line camelcase -- backend field name
|
|
86
|
-
select_items: e(c(
|
|
86
|
+
select_items: e(c(S))
|
|
87
87
|
})), N = g(
|
|
88
88
|
t(),
|
|
89
|
-
R(c(
|
|
89
|
+
R(c(S), [])
|
|
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(), f.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(), f.DEFAULT_MODULES)
|
|
216
216
|
}), F = a({
|
|
217
217
|
/** Whether to show the header bar */
|
|
218
218
|
showHeader: e(o(), !0),
|
|
@@ -237,7 +237,6 @@ 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),
|
|
241
240
|
/** Enable pre-save domain-allowlist validation (opt-in; Guido self-serves the block toaster) */
|
|
242
241
|
allowlistEnabled: e(o(), !1),
|
|
243
242
|
/** Enable persistent link tracking-id assignment for the click heatmap (opt-in) */
|
|
@@ -316,7 +315,7 @@ const p = {
|
|
|
316
315
|
(n) => typeof n == "function",
|
|
317
316
|
"processor must be a function"
|
|
318
317
|
)
|
|
319
|
-
}), V =
|
|
318
|
+
}), V = I("type", [
|
|
320
319
|
H,
|
|
321
320
|
_,
|
|
322
321
|
q,
|
|
@@ -368,7 +367,7 @@ export {
|
|
|
368
367
|
G as CustomRuleSchema,
|
|
369
368
|
w as DefaultBlockTypeSchema,
|
|
370
369
|
N as DynamicContentListSchema,
|
|
371
|
-
|
|
370
|
+
S as DynamicContentNodeSchema,
|
|
372
371
|
M as DynamicContentSchema,
|
|
373
372
|
O as EditorSchema,
|
|
374
373
|
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
|
|
6
|
+
return r("div", { ref: "wrapperRef", staticClass: "guido-editor__wrapper", class: { "guido-editor__no-header": e.noHeader } }, [r(e.HeaderWrapper, { ref: "headerWrapperRef" }), r(e.AutoSaveController), 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
|
+
"1b5c844a"
|
|
16
16
|
);
|
|
17
|
-
const
|
|
17
|
+
const v = n.exports;
|
|
18
18
|
export {
|
|
19
|
-
|
|
19
|
+
v as default
|
|
20
20
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { defineComponent as
|
|
1
|
+
import { defineComponent as se, defineAsyncComponent as m, ref as W, computed as p, watch as G, onMounted as ie, 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 V } from "../config/migrator/index.js";
|
|
11
|
+
import { ModuleFolderDefaults as $ } 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 De from "./organisms/LoadingWrapper.vue.js";
|
|
20
|
+
import Ce 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 Fe from "./organisms/validation/ValidationErrorDrawer.vue.js";
|
|
23
|
+
import { useStripoApi as Re } from "../services/stripoApi.js";
|
|
24
24
|
import { useConfigStore as Me } from "../stores/config.js";
|
|
25
|
-
import { useDynamicContentStore as
|
|
25
|
+
import { useDynamicContentStore as Te } 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 Ue } from "../stores/template.js";
|
|
30
|
+
import { useUnsubscribeStore as Ae } from "../stores/unsubscribe.js";
|
|
31
|
+
import { readTrackFloor as z } from "../utils/linkTrackingIds.js";
|
|
32
|
+
const lt = /* @__PURE__ */ se({
|
|
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(H, { expose: q, emit: r }) {
|
|
40
|
+
const s = H, K = m(
|
|
41
41
|
() => import("./organisms/email-preview/PreviewContainer.vue.js")
|
|
42
42
|
), j = m(
|
|
43
43
|
() => import("./organisms/onboarding/OnboardingWrapper.vue.js")
|
|
@@ -45,22 +45,15 @@ const lt = /* @__PURE__ */ ie({
|
|
|
45
45
|
() => import("./organisms/extensions/recommendation/AssignStrategyDrawer.vue.js")
|
|
46
46
|
), Q = m(
|
|
47
47
|
() => import("./organisms/extensions/recommendation/RemoveStrategyModal.vue.js")
|
|
48
|
-
),
|
|
48
|
+
), X = m(
|
|
49
49
|
() => import("./organisms/extensions/recommendation/LegacyStrategyUpdatedModal.vue.js")
|
|
50
|
-
), f =
|
|
51
|
-
|
|
52
|
-
const
|
|
50
|
+
), D = W(), f = W(), y = Te(), C = Ae(), o = Me();
|
|
51
|
+
s.ready && o.init(s.config);
|
|
52
|
+
const c = w(), Y = Ie(), l = p(() => c.hasChanges), { isTestPartner: Z } = pe(), { isEnabled: ee } = fe(), k = () => {
|
|
53
53
|
var t;
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
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;
|
|
54
|
+
return (t = D.value) == null ? void 0 : t.handleSave(!0);
|
|
55
|
+
}, F = (t) => {
|
|
56
|
+
c.loadingStatus = t;
|
|
64
57
|
};
|
|
65
58
|
de(), ue();
|
|
66
59
|
const g = () => {
|
|
@@ -70,12 +63,12 @@ const lt = /* @__PURE__ */ ie({
|
|
|
70
63
|
userId: o.userId,
|
|
71
64
|
username: o.username,
|
|
72
65
|
partnerName: o.partnerName,
|
|
73
|
-
savedModulesFolderName: ((t = o.editor) == null ? void 0 : t.savedModulesFolderName) ||
|
|
74
|
-
defaultModulesFolderName: ((e = o.editor) == null ? void 0 : e.defaultModulesFolderName) ||
|
|
66
|
+
savedModulesFolderName: ((t = o.editor) == null ? void 0 : t.savedModulesFolderName) || $.SAVED_MODULES,
|
|
67
|
+
defaultModulesFolderName: ((e = o.editor) == null ? void 0 : e.defaultModulesFolderName) || $.DEFAULT_MODULES
|
|
75
68
|
};
|
|
76
|
-
}, { initPlugin:
|
|
69
|
+
}, { initPlugin: R, preloadRuntime: M } = ye(), { runExclusive: T, beginMount: I, isCurrentMount: S } = me();
|
|
77
70
|
let u = 0;
|
|
78
|
-
const { getDefaultTemplate: L } =
|
|
71
|
+
const { getDefaultTemplate: L } = Re(), { cloneTimersOnSave: U, hasTimerBlocks: A } = ge(), te = p(() => {
|
|
79
72
|
var t;
|
|
80
73
|
return !((t = o.ui) != null && t.showHeader);
|
|
81
74
|
}), oe = p(() => o.isFeatureEnabled("reusableRecommendationStrategy")), ne = p(
|
|
@@ -96,19 +89,19 @@ const lt = /* @__PURE__ */ ie({
|
|
|
96
89
|
console.debug("guido:test-email:click"), r("test-email:click");
|
|
97
90
|
}
|
|
98
91
|
});
|
|
99
|
-
const
|
|
92
|
+
const B = (t) => {
|
|
100
93
|
console.debug("dynamic-content:close", t), y.setSelectedDynamicContent(t), document.dispatchEvent(new CustomEvent("dynamic-content:close", { detail: t }));
|
|
101
94
|
}, N = () => {
|
|
102
95
|
console.debug("dynamic-content:close", "Without Data"), document.dispatchEvent(new CustomEvent("dynamic-content:close", { detail: { text: "", value: "" } }));
|
|
103
96
|
};
|
|
104
|
-
|
|
97
|
+
G(() => l.value, () => {
|
|
105
98
|
r("on-change", l.value);
|
|
106
99
|
});
|
|
107
100
|
const v = (t) => {
|
|
108
|
-
const e = t, { attribute:
|
|
109
|
-
console.debug("dynamic-content:open", e.detail), r("dynamic-content:open",
|
|
101
|
+
const e = t, { attribute: a, position: d } = e.detail;
|
|
102
|
+
console.debug("dynamic-content:open", e.detail), r("dynamic-content:open", a, d);
|
|
110
103
|
};
|
|
111
|
-
let
|
|
104
|
+
let i = null;
|
|
112
105
|
const b = () => {
|
|
113
106
|
var e;
|
|
114
107
|
const t = document.querySelector(Se);
|
|
@@ -116,52 +109,52 @@ const lt = /* @__PURE__ */ ie({
|
|
|
116
109
|
}, h = async () => {
|
|
117
110
|
var t;
|
|
118
111
|
try {
|
|
119
|
-
o.initialized || o.init(
|
|
120
|
-
const e = o.template,
|
|
121
|
-
|
|
122
|
-
const
|
|
112
|
+
o.initialized || o.init(s.config), c.templateId = o.templateId;
|
|
113
|
+
const e = o.template, a = (e == null ? void 0 : e.html) || "", d = (e == null ? void 0 : e.css) || "", P = (e == null ? void 0 : e.preselectedDynamicContent) || [];
|
|
114
|
+
C.selectedUnsubscribePages = (e == null ? void 0 : e.selectedUnsubscribePages) || [];
|
|
115
|
+
const _ = ((t = e == null ? void 0 : e.migration) == null ? void 0 : t.recommendationConfigs) ?? {}, O = o.isFeatureEnabled("linkTrackingIds"), x = {
|
|
123
116
|
partnerName: o.partnerName,
|
|
124
117
|
campaignUrls: e == null ? void 0 : e.recommendationCampaignUrls,
|
|
125
118
|
rrsEnabled: o.isFeatureEnabled("reusableRecommendationStrategy")
|
|
126
119
|
};
|
|
127
120
|
let n = {
|
|
128
|
-
html:
|
|
121
|
+
html: a && await V(a, _, x),
|
|
129
122
|
css: d
|
|
130
123
|
};
|
|
131
|
-
n.html || (n = await L(), n.html = await
|
|
132
|
-
const re =
|
|
133
|
-
|
|
134
|
-
const
|
|
135
|
-
preselectedDynamicContentList:
|
|
124
|
+
n.html || (n = await L(), n.html = await V(n.html, _, x));
|
|
125
|
+
const re = O ? z(n.html, (e == null ? void 0 : e.trackIdCounter) || 0) : 0;
|
|
126
|
+
A(n.html) && (n.html = await U(n.html)), O && (c.trackIdSessionFloor = Math.max(re, z(n.html)));
|
|
127
|
+
const ae = {
|
|
128
|
+
preselectedDynamicContentList: P,
|
|
136
129
|
onReady: () => {
|
|
137
130
|
console.debug("guido:ready"), r("ready");
|
|
138
131
|
}
|
|
139
132
|
};
|
|
140
|
-
u = I(), await
|
|
133
|
+
u = I(), await R(n, g(), ae), y.selectedDynamicContentList = P;
|
|
141
134
|
} catch (e) {
|
|
142
135
|
console.error("Failed to initialize Stripo editor:", e);
|
|
143
136
|
}
|
|
144
137
|
};
|
|
145
|
-
return
|
|
138
|
+
return ie(async () => {
|
|
146
139
|
var e;
|
|
147
|
-
console.debug("Guido says happy coding 🎉"), console.debug("🚗 Ka-Chow"), E().$reset(), w().$reset(),
|
|
140
|
+
console.debug("Guido says happy coding 🎉"), console.debug("🚗 Ka-Chow"), E().$reset(), w().$reset(), Ue().$reset(), Le().$reset(), b();
|
|
148
141
|
const t = (e = f.value) == null ? void 0 : e.parentElement;
|
|
149
|
-
if (t && (
|
|
142
|
+
if (t && (i = new ResizeObserver(b), i.observe(t)), M(), s.ready)
|
|
150
143
|
await h();
|
|
151
144
|
else {
|
|
152
|
-
const
|
|
153
|
-
d && (
|
|
145
|
+
const a = G(() => s.ready, (d) => {
|
|
146
|
+
d && (a(), h());
|
|
154
147
|
});
|
|
155
148
|
}
|
|
156
149
|
document.addEventListener("dynamic-content:open", v);
|
|
157
150
|
}), ce(() => {
|
|
158
|
-
if (
|
|
151
|
+
if (i == null || i.disconnect(), document.removeEventListener("dynamic-content:open", v), E().disposeStrategyPageReturn(), S(u))
|
|
159
152
|
try {
|
|
160
153
|
w().isStripoInitialized = !1;
|
|
161
154
|
} catch (t) {
|
|
162
155
|
console.debug("Failed to close the editor readiness gate on unmount", t);
|
|
163
156
|
}
|
|
164
|
-
|
|
157
|
+
T(async () => {
|
|
165
158
|
if (S(u))
|
|
166
159
|
try {
|
|
167
160
|
window.UIEditor.removeEditor();
|
|
@@ -171,13 +164,13 @@ const lt = /* @__PURE__ */ ie({
|
|
|
171
164
|
}), o.reset();
|
|
172
165
|
}), q({
|
|
173
166
|
dynamicContent: {
|
|
174
|
-
insert:
|
|
167
|
+
insert: B,
|
|
175
168
|
close: N
|
|
176
169
|
},
|
|
177
170
|
hasChanges: l,
|
|
178
171
|
saveSilent: k,
|
|
179
|
-
setLoading:
|
|
180
|
-
}), { __sfc: !0, PreviewContainer: K, OnboardingWrapper: j, AssignStrategyDrawer: J, RemoveStrategyModal: Q,
|
|
172
|
+
setLoading: F
|
|
173
|
+
}), { __sfc: !0, PreviewContainer: K, OnboardingWrapper: j, AssignStrategyDrawer: J, RemoveStrategyModal: Q, LegacyStrategyUpdatedModal: X, headerWrapperRef: D, wrapperRef: f, dynamicContentStore: y, unsubscribeStore: C, props: s, configStore: o, editorStore: c, previewStore: Y, hasChanges: l, isTestPartner: Z, isSaveValidationEnabled: ee, saveSilent: k, setLoading: F, emit: r, buildMetadata: g, initPlugin: R, preloadRuntime: M, runExclusive: T, beginMount: I, isCurrentMount: S, mountGeneration: u, getDefaultTemplate: L, cloneTimersOnSave: U, hasTimerBlocks: A, noHeader: te, isRrsEnabled: oe, hasAssignedStrategy: ne, insertDynamicContent: B, closeDynamicContent: N, handleDynamicContentOpen: v, ribbonObserver: i, updateRibbonOffset: b, startEditor: h, AutoSaveController: ve, AuthErrorModal: be, Toaster: he, FilterSelectionDrawer: Ee, HeaderWrapper: we, LoadingWrapper: De, SaveAsTemplateDrawer: Ce, UnsubscribeWrapper: ke, ValidationErrorDrawer: Fe };
|
|
181
174
|
}
|
|
182
175
|
});
|
|
183
176
|
export {
|
|
@@ -1,24 +1,14 @@
|
|
|
1
|
-
import { defineComponent as
|
|
2
|
-
import { useAutoSave as
|
|
3
|
-
import { useSave as
|
|
4
|
-
import { useSaveValidationRollout as
|
|
5
|
-
|
|
6
|
-
const b = /* @__PURE__ */ i({
|
|
1
|
+
import { defineComponent as r } from "vue";
|
|
2
|
+
import { useAutoSave as s } from "../../composables/useAutoSave.js";
|
|
3
|
+
import { useSave as n } from "../../composables/useSave.js";
|
|
4
|
+
import { useSaveValidationRollout as u } from "../../composables/useSaveValidationRollout.js";
|
|
5
|
+
const v = /* @__PURE__ */ r({
|
|
7
6
|
__name: "AutoSaveController",
|
|
8
|
-
setup(
|
|
9
|
-
const { save: e, saveRawOnly:
|
|
10
|
-
|
|
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 };
|
|
7
|
+
setup(m) {
|
|
8
|
+
const { save: e, saveRawOnly: o } = n(), { isEnabled: t } = u(), a = () => t.value ? o() : e(!1, !0);
|
|
9
|
+
return s(a), { __sfc: !0, save: e, saveRawOnly: o, isEnabled: t, backgroundSave: a };
|
|
20
10
|
}
|
|
21
11
|
});
|
|
22
12
|
export {
|
|
23
|
-
|
|
13
|
+
v as default
|
|
24
14
|
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import o from "./AutoSaveToggle.vue2.js";
|
|
2
|
+
/* empty css */
|
|
3
|
+
import i from "../../../_virtual/_plugin-vue2_normalizer.js";
|
|
4
|
+
var n = function() {
|
|
5
|
+
var e = this, a = e._self._c, t = e._self._setupProxy;
|
|
6
|
+
return t.isFeatureEnabled("autosave") ? a("div", { staticClass: "d-f a-i-c mr-3 auto-save-toggle", on: { mouseenter: function(s) {
|
|
7
|
+
t.isHovered = !0;
|
|
8
|
+
}, mouseleave: function(s) {
|
|
9
|
+
t.isHovered = !1;
|
|
10
|
+
} } }, [a(t.InToggle, { attrs: { id: "guido__autosave-toggle", name: "guido-autosave-toggle", checked: t.autosaveStore.isOn, disable: t.editorStore.loadingStatus }, on: { click: t.toggle } }), a("span", { staticClass: "ml-2 auto-save-toggle__label t-c-55" }, [e._v(" " + e._s(t.trans("email-editor.auto-save")) + " ")]), t.autosaveStore.status === t.AUTOSAVE_STATUS.SAVING ? a("span", { staticClass: "ml-2 d-f a-i-c f-s-1" }, [a(t.InLoading, { attrs: { "color-class": "i-c-53", size: "16" } }), a("span", { staticClass: "ml-1 t-c-53" }, [e._v(" " + e._s(t.trans("newsletter.saving")) + " ")])], 1) : t.lastSavedLabel ? a("span", { staticClass: "ml-2 f-s-1 t-c-53" }, [e._v(" " + e._s(t.lastSavedLabel) + " ")]) : e._e(), t.isHovered ? a(t.InInfoBox, { staticClass: "auto-save-toggle__info-box", attrs: { id: "guido__autosave-info-box", size: "small", variant: "information", "description-text": t.trans("email-editor.auto-save-description"), "title-text": t.trans("email-editor.auto-save-title") } }) : e._e()], 1) : e._e();
|
|
11
|
+
}, l = [], r = /* @__PURE__ */ i(
|
|
12
|
+
o,
|
|
13
|
+
n,
|
|
14
|
+
l,
|
|
15
|
+
!1,
|
|
16
|
+
null,
|
|
17
|
+
"2c964af4"
|
|
18
|
+
);
|
|
19
|
+
const d = r.exports;
|
|
20
|
+
export {
|
|
21
|
+
d as default
|
|
22
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { defineComponent as i, ref as f, computed as u } from "vue";
|
|
2
|
+
import { useConfig as l } from "../../../composables/useConfig.js";
|
|
3
|
+
import { useTranslations as p } from "../../../composables/useTranslations.js";
|
|
4
|
+
import { useAutosaveStore as c, AUTOSAVE_STATUS as t } from "../../../stores/autosave.js";
|
|
5
|
+
import { useEditorStore as S } from "../../../stores/editor.js";
|
|
6
|
+
import { formatLocalTime as d } from "../../../utils/timeUtil.js";
|
|
7
|
+
import { InToggle as g, InLoading as _, InInfoBox as A } from "@useinsider/design-system-vue";
|
|
8
|
+
const U = /* @__PURE__ */ i({
|
|
9
|
+
__name: "AutoSaveToggle",
|
|
10
|
+
setup(v) {
|
|
11
|
+
const { isFeatureEnabled: e } = l(), r = S(), o = c(), s = p(), n = f(!1), a = u(() => o.status !== t.SAVED || !o.lastSavedAt ? "" : d(o.lastSavedAt));
|
|
12
|
+
return { __sfc: !0, isFeatureEnabled: e, editorStore: r, autosaveStore: o, trans: s, isHovered: n, lastSavedLabel: a, toggle: (m) => {
|
|
13
|
+
o.isOn = m;
|
|
14
|
+
}, AUTOSAVE_STATUS: t, InInfoBox: A, InLoading: _, InToggle: g };
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
export {
|
|
18
|
+
U as default
|
|
19
|
+
};
|
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
import
|
|
1
|
+
import l from "./EditorActions.vue2.js";
|
|
2
2
|
/* empty css */
|
|
3
|
-
import
|
|
4
|
-
var
|
|
5
|
-
var
|
|
6
|
-
var
|
|
7
|
-
return e("div", { staticClass: "d-f
|
|
3
|
+
import d from "../../../_virtual/_plugin-vue2_normalizer.js";
|
|
4
|
+
var u = function() {
|
|
5
|
+
var s, i, n, a;
|
|
6
|
+
var o = this, e = o._self._c, t = o._self._setupProxy;
|
|
7
|
+
return e("div", { staticClass: "d-f editor-actions" }, [t.isVersionHistoryButtonVisible ? e(t.InButtonV2, { attrs: { id: "guido__history-button", "left-icon": "line-architect-version-history", styling: "ghost", type: "secondary", "disabled-status": t.editorStore.isVersionHistoryButtonDisabled, "label-text-status": !1, "selected-status": t.editorStore.isVersionHistoryOpen, "tooltip-options": t.getTooltipOptions("guido__history-button"), "tooltip-text": t.versionHistoryTooltipText }, on: { click: t.handleVersionHistory } }) : o._e(), e(t.InButtonV2, { attrs: { id: "guido__export-button", "left-icon": "line-export", styling: "ghost", type: "secondary", "disabled-status": t.editorStore.isExportButtonDisabled, "label-text-status": !1, "loading-status": t.isExporting, "tooltip-options": t.getTooltipOptions("guido__export-button"), "tooltip-text": t.trans("newsletter.export") }, on: { click: t.handleExport } }), (i = (s = t.config) == null ? void 0 : s.features) != null && i.saveAsTemplate ? e(t.InButtonV2, { attrs: { id: "guido__save-as-button", "left-icon": "line-newsletter-save-as-template", styling: "ghost", type: "secondary", "disabled-status": t.editorStore.isSaveAsButtonDisabled, "label-text-status": !1, "tooltip-options": t.getTooltipOptions("guido__save-as-button"), "tooltip-text": t.trans("newsletter.save-templates") }, on: { click: t.handleSaveAs } }) : o._e(), (a = (n = t.config) == null ? void 0 : n.features) != null && a.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 } }) : o._e(), t.editorStore.isPreviewModeOpen ? o._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(r) {
|
|
8
8
|
return t.handleSave(!1);
|
|
9
|
-
} } }), e(t.MigrationConfirmModal, { ref: "migrationModalRef", on: { confirm: function(
|
|
9
|
+
} } }), e(t.MigrationConfirmModal, { ref: "migrationModalRef", on: { confirm: function(r) {
|
|
10
10
|
return t.executeSave(!1);
|
|
11
11
|
} } })], 1);
|
|
12
|
-
},
|
|
13
|
-
a,
|
|
14
|
-
d,
|
|
12
|
+
}, c = [], p = /* @__PURE__ */ d(
|
|
15
13
|
l,
|
|
14
|
+
u,
|
|
15
|
+
c,
|
|
16
16
|
!1,
|
|
17
17
|
null,
|
|
18
|
-
"
|
|
18
|
+
"2cccbd44"
|
|
19
19
|
);
|
|
20
|
-
const
|
|
20
|
+
const v = p.exports;
|
|
21
21
|
export {
|
|
22
|
-
|
|
22
|
+
v as default
|
|
23
23
|
};
|
|
@@ -1,68 +1,83 @@
|
|
|
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 I, computed as c, ref as u } from "vue";
|
|
2
|
+
import { useActionsApi as P } from "../../../composables/useActionsApi.js";
|
|
3
|
+
import { useConfig as W } from "../../../composables/useConfig.js";
|
|
4
|
+
import { useExport as j } from "../../../composables/useExport.js";
|
|
5
|
+
import { useTestEmailClick as G } from "../../../composables/useGuidoActions.js";
|
|
6
|
+
import { useHtmlCompiler as J } from "../../../composables/useHtmlCompiler.js";
|
|
7
|
+
import { useSave as K } from "../../../composables/useSave.js";
|
|
8
|
+
import { useSaveValidation as N } from "../../../composables/useSaveValidation.js";
|
|
9
|
+
import { useSaveValidationRollout as Q } from "../../../composables/useSaveValidationRollout.js";
|
|
10
|
+
import { useToaster as U } from "../../../composables/useToaster.js";
|
|
11
|
+
import { useTranslations as X } from "../../../composables/useTranslations.js";
|
|
12
|
+
import { useVersionHistoryApi as Y } from "../../../composables/useVersionHistoryApi.js";
|
|
13
|
+
import { useLiquidValidator as Z } from "../../../composables/validators/useLiquidValidator.js";
|
|
14
|
+
import { ToasterTypeOptions as $ } from "../../../enums/toaster.js";
|
|
15
|
+
import { useConfigStore as tt } from "../../../stores/config.js";
|
|
16
|
+
import { useEditorStore as ot } from "../../../stores/editor.js";
|
|
17
|
+
import { useSaveValidationStore as et } from "../../../stores/save-validation.js";
|
|
18
|
+
import { useTemplateStore as rt } from "../../../stores/template.js";
|
|
19
|
+
import { getTooltipOptions as it } from "../../../utils/tooltipUtils.js";
|
|
20
|
+
import { InButtonV2 as st } from "@useinsider/design-system-vue";
|
|
21
|
+
import { storeToRefs as at } from "pinia";
|
|
22
|
+
import nt from "./MigrationConfirmModal.vue.js";
|
|
23
|
+
const bt = /* @__PURE__ */ I({
|
|
24
24
|
__name: "EditorActions",
|
|
25
|
-
setup(
|
|
26
|
-
const { config:
|
|
27
|
-
|
|
28
|
-
|
|
25
|
+
setup(lt, { expose: k }) {
|
|
26
|
+
const { config: p, isFeatureEnabled: f } = W(), { exportHtml: d } = j(), { save: v } = K(), { validateCurrentTemplate: y } = N(), { isEnabled: i } = Q(), { showToaster: S, handleError: s } = U(), { openVersionHistory: g, closeVersionHistory: h } = Y(), { getCompiledEmail: T } = P(), { compileHtml: w } = J(), { validateLiquidSyntax: E } = Z(), V = tt(), o = ot(), H = et(), x = rt(), { hasMigrations: C } = at(x), r = X(), F = c(() => i.value && V.allowSaveWithErrors ? r("email-editor.save-and-continue") : "Save"), a = u(!1), n = u(!1), _ = u(), l = G(), q = () => {
|
|
27
|
+
if (o.isVersionHistoryOpen) {
|
|
28
|
+
h();
|
|
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;
|
|
29
44
|
try {
|
|
30
|
-
|
|
31
|
-
} catch (
|
|
32
|
-
s(
|
|
45
|
+
e = await v(t);
|
|
46
|
+
} catch (b) {
|
|
47
|
+
s(b, "Failed to save template");
|
|
33
48
|
} finally {
|
|
34
|
-
n.value = !1, !t && !
|
|
49
|
+
n.value = !1, !t && !e && (o.loadingStatus = !1);
|
|
35
50
|
}
|
|
36
|
-
return
|
|
37
|
-
},
|
|
38
|
-
var
|
|
39
|
-
if (!t &&
|
|
40
|
-
(
|
|
51
|
+
return e;
|
|
52
|
+
}, O = (t) => {
|
|
53
|
+
var e;
|
|
54
|
+
if (!t && C.value) {
|
|
55
|
+
(e = _.value) == null || e.open();
|
|
41
56
|
return;
|
|
42
57
|
}
|
|
43
|
-
return
|
|
58
|
+
return A(t);
|
|
44
59
|
}, m = async () => {
|
|
45
|
-
|
|
60
|
+
o.loadingStatus = !0;
|
|
46
61
|
try {
|
|
47
|
-
return await
|
|
62
|
+
return await y();
|
|
48
63
|
} catch (t) {
|
|
49
64
|
return console.warn("Test-path validation failed; sending without the drawer.", t), [];
|
|
50
65
|
} finally {
|
|
51
|
-
|
|
66
|
+
o.loadingStatus = !1;
|
|
52
67
|
}
|
|
53
|
-
},
|
|
68
|
+
}, M = async () => {
|
|
54
69
|
const t = await m();
|
|
55
|
-
t.length &&
|
|
56
|
-
},
|
|
70
|
+
t.length && H.open(t, "test");
|
|
71
|
+
}, z = async () => {
|
|
57
72
|
if (i.value) {
|
|
58
73
|
if ((await m()).length) {
|
|
59
|
-
|
|
60
|
-
type:
|
|
61
|
-
message:
|
|
74
|
+
S({
|
|
75
|
+
type: $.Error,
|
|
76
|
+
message: r("email-editor.validation-errors-found"),
|
|
62
77
|
actionButton: {
|
|
63
|
-
text:
|
|
78
|
+
text: r("email-editor.check-errors"),
|
|
64
79
|
onClick: () => {
|
|
65
|
-
|
|
80
|
+
M();
|
|
66
81
|
}
|
|
67
82
|
},
|
|
68
83
|
autoHide: !1
|
|
@@ -72,26 +87,26 @@ const Vt = /* @__PURE__ */ F({
|
|
|
72
87
|
l();
|
|
73
88
|
return;
|
|
74
89
|
}
|
|
75
|
-
if (
|
|
76
|
-
|
|
90
|
+
if (f("liquidSyntax")) {
|
|
91
|
+
o.loadingStatus = !0;
|
|
77
92
|
try {
|
|
78
|
-
const { html: t } = await
|
|
79
|
-
if (!await
|
|
93
|
+
const { html: t } = await T({ minimize: !0, resetDataSavedFlag: !1 }), { compiledHtml: e } = w(t);
|
|
94
|
+
if (!await E(e))
|
|
80
95
|
return;
|
|
81
96
|
} catch (t) {
|
|
82
97
|
s(t, "Failed to prepare test email");
|
|
83
98
|
return;
|
|
84
99
|
} finally {
|
|
85
|
-
|
|
100
|
+
o.loadingStatus = !1;
|
|
86
101
|
}
|
|
87
102
|
}
|
|
88
103
|
l();
|
|
89
104
|
};
|
|
90
|
-
return
|
|
91
|
-
handleSave:
|
|
92
|
-
}), { __sfc: !0, config:
|
|
105
|
+
return k({
|
|
106
|
+
handleSave: O
|
|
107
|
+
}), { __sfc: !0, config: p, isFeatureEnabled: f, exportHtml: d, save: v, validateCurrentTemplate: y, isEnabled: i, showToaster: S, handleError: s, openVersionHistory: g, closeVersionHistory: h, getCompiledEmail: T, compileHtml: w, validateLiquidSyntax: E, configStore: V, editorStore: o, saveValidationStore: H, templateStore: x, hasMigrations: C, trans: r, saveLabel: F, isExporting: a, isSaving: n, migrationModalRef: _, testEmailClick: l, handleVersionHistory: q, handleExport: B, handleSaveAs: L, versionHistoryTooltipText: R, isVersionHistoryButtonVisible: D, executeSave: A, handleSave: O, collectTestErrors: m, openTestErrors: M, handleTestEmail: z, getTooltipOptions: it, InButtonV2: st, MigrationConfirmModal: nt };
|
|
93
108
|
}
|
|
94
109
|
});
|
|
95
110
|
export {
|
|
96
|
-
|
|
111
|
+
bt as default
|
|
97
112
|
};
|