@useinsider/guido 3.20.1-beta.dfc8426 → 3.20.1-beta.f34075e
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 +0 -1
- package/dist/@types/config/schemas.js +39 -41
- package/dist/components/Guido.vue.js +6 -6
- package/dist/components/Guido.vue2.js +82 -84
- package/dist/components/organisms/AutoSaveController.vue2.js +10 -9
- package/dist/components/organisms/header/EditorActions.vue.js +4 -4
- package/dist/components/organisms/header/EditorActions.vue2.js +53 -51
- package/dist/components/organisms/validation/ValidationErrorDrawer.vue.js +3 -3
- package/dist/components/organisms/validation/ValidationErrorDrawer.vue2.js +23 -22
- package/dist/composables/useAutoSave.js +46 -44
- package/dist/composables/useBlocksConfig.js +24 -32
- package/dist/composables/useSave.js +26 -23
- package/dist/composables/useSaveValidation.js +113 -114
- package/dist/composables/useSaveValidationRollout.js +17 -6
- package/dist/enums/academy.js +0 -1
- package/dist/guido.css +1 -1
- package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js +92 -93
- package/dist/node_modules/valibot/dist/index.js +261 -297
- package/dist/services/settingsApi.js +11 -0
- package/dist/src/@types/config/schemas.d.ts +0 -4
- package/dist/src/components/Guido.vue.d.ts +1 -1
- package/dist/src/components/organisms/header/EditorActions.vue.d.ts +1 -1
- package/dist/src/components/organisms/header/HeaderWrapper.vue.d.ts +1 -1
- package/dist/src/components/organisms/header/RightSlot.vue.d.ts +1 -1
- package/dist/src/composables/useAutoSave.d.ts +4 -1
- package/dist/src/composables/useConfig.d.ts +0 -2
- package/dist/src/composables/useSaveValidationRollout.d.ts +1 -0
- package/dist/src/enums/academy.d.ts +0 -1
- package/dist/src/services/settingsApi.d.ts +6 -0
- package/dist/src/stores/config.d.ts +0 -166
- package/dist/src/stores/setup-settings.d.ts +4 -0
- package/dist/stores/config.js +0 -7
- package/dist/stores/setup-settings.js +10 -0
- package/dist/utils/pairProductVariables.js +14 -15
- package/package.json +1 -1
- package/dist/@types/display-condition.js +0 -25
- package/dist/components/organisms/display-conditions/CodeEditorField.vue.js +0 -20
- package/dist/components/organisms/display-conditions/CodeEditorField.vue2.js +0 -30
- package/dist/components/organisms/display-conditions/DisplayConditionCreateDrawer.vue.js +0 -30
- package/dist/components/organisms/display-conditions/DisplayConditionCreateDrawer.vue2.js +0 -71
- package/dist/components/organisms/display-conditions/DisplayConditionSelectDrawer.vue.js +0 -34
- package/dist/components/organisms/display-conditions/DisplayConditionSelectDrawer.vue2.js +0 -57
- package/dist/components/organisms/display-conditions/DisplayConditionsHost.vue.js +0 -17
- package/dist/components/organisms/display-conditions/DisplayConditionsHost.vue2.js +0 -22
- package/dist/composables/useDisplayConditions.js +0 -102
- package/dist/enums/display-condition.js +0 -12
- package/dist/extensions/DisplayConditions/bridge.js +0 -17
- package/dist/extensions/DisplayConditions/constants.js +0 -17
- package/dist/extensions/DisplayConditions/control.js +0 -178
- package/dist/extensions/DisplayConditions/display-conditions.css.js +0 -201
- package/dist/extensions/DisplayConditions/extension.js +0 -28
- package/dist/extensions/DisplayConditions/iconsRegistry.js +0 -20
- package/dist/extensions/DisplayConditions/library.js +0 -27
- package/dist/extensions/DisplayConditions/settingsPanel.js +0 -17
- package/dist/services/displayConditionApi.js +0 -39
- package/dist/src/@types/display-condition.d.ts +0 -59
- package/dist/src/components/organisms/display-conditions/CodeEditorField.vue.d.ts +0 -43
- package/dist/src/components/organisms/display-conditions/DisplayConditionCreateDrawer.vue.d.ts +0 -2
- package/dist/src/components/organisms/display-conditions/DisplayConditionSelectDrawer.vue.d.ts +0 -2
- package/dist/src/components/organisms/display-conditions/DisplayConditionsHost.vue.d.ts +0 -2
- package/dist/src/composables/useDisplayConditions.d.ts +0 -16
- package/dist/src/enums/display-condition.d.ts +0 -15
- package/dist/src/extensions/DisplayConditions/bridge.d.ts +0 -6
- package/dist/src/extensions/DisplayConditions/constants.d.ts +0 -14
- package/dist/src/extensions/DisplayConditions/control.d.ts +0 -23
- package/dist/src/extensions/DisplayConditions/extension.d.ts +0 -2
- package/dist/src/extensions/DisplayConditions/iconsRegistry.d.ts +0 -4
- package/dist/src/extensions/DisplayConditions/library.d.ts +0 -8
- package/dist/src/extensions/DisplayConditions/settingsPanel.d.ts +0 -5
- package/dist/src/mock/api/display-conditions.d.ts +0 -2
- package/dist/src/services/displayConditionApi.d.ts +0 -8
- package/dist/src/stores/display-condition.d.ts +0 -81
- package/dist/src/utils/displayCondition.d.ts +0 -10
- package/dist/src/utils/protectTableText.d.ts +0 -2
- package/dist/stores/display-condition.js +0 -28
- package/dist/utils/displayCondition.js +0 -26
- package/dist/utils/protectTableText.js +0 -22
|
@@ -1,83 +1,85 @@
|
|
|
1
|
-
import { defineComponent as I, computed as
|
|
1
|
+
import { defineComponent as I, computed as u, ref as c } from "vue";
|
|
2
2
|
import { useActionsApi as P } from "../../../composables/useActionsApi.js";
|
|
3
|
-
import { useConfig as
|
|
4
|
-
import { useExport as
|
|
5
|
-
import { useTestEmailClick as
|
|
6
|
-
import { useHtmlCompiler as
|
|
7
|
-
import { useSave as
|
|
8
|
-
import { useSaveValidation as
|
|
9
|
-
import { useSaveValidationRollout as
|
|
10
|
-
import { useToaster as
|
|
3
|
+
import { useConfig as j } from "../../../composables/useConfig.js";
|
|
4
|
+
import { useExport as G } from "../../../composables/useExport.js";
|
|
5
|
+
import { useTestEmailClick as J } from "../../../composables/useGuidoActions.js";
|
|
6
|
+
import { useHtmlCompiler as K } from "../../../composables/useHtmlCompiler.js";
|
|
7
|
+
import { useSave as N } from "../../../composables/useSave.js";
|
|
8
|
+
import { useSaveValidation as Q } from "../../../composables/useSaveValidation.js";
|
|
9
|
+
import { useSaveValidationRollout as U } from "../../../composables/useSaveValidationRollout.js";
|
|
10
|
+
import { useToaster as W } from "../../../composables/useToaster.js";
|
|
11
11
|
import { useTranslations as X } from "../../../composables/useTranslations.js";
|
|
12
12
|
import { useVersionHistoryApi as Y } from "../../../composables/useVersionHistoryApi.js";
|
|
13
13
|
import { useLiquidValidator as Z } from "../../../composables/validators/useLiquidValidator.js";
|
|
14
14
|
import { ToasterTypeOptions as $ } from "../../../enums/toaster.js";
|
|
15
|
-
import {
|
|
16
|
-
import { useEditorStore as ot } from "../../../stores/editor.js";
|
|
15
|
+
import { useEditorStore as tt } from "../../../stores/editor.js";
|
|
17
16
|
import { useSaveValidationStore as et } from "../../../stores/save-validation.js";
|
|
18
|
-
import { useTemplateStore as
|
|
19
|
-
import { getTooltipOptions as
|
|
20
|
-
import { InButtonV2 as
|
|
21
|
-
import { storeToRefs as
|
|
22
|
-
import
|
|
23
|
-
const
|
|
17
|
+
import { useTemplateStore as ot } from "../../../stores/template.js";
|
|
18
|
+
import { getTooltipOptions as rt } from "../../../utils/tooltipUtils.js";
|
|
19
|
+
import { InButtonV2 as it } from "@useinsider/design-system-vue";
|
|
20
|
+
import { storeToRefs as st } from "pinia";
|
|
21
|
+
import at from "./MigrationConfirmModal.vue.js";
|
|
22
|
+
const Ot = /* @__PURE__ */ I({
|
|
24
23
|
__name: "EditorActions",
|
|
25
|
-
setup(
|
|
26
|
-
const { config: p, isFeatureEnabled: f } =
|
|
27
|
-
if (
|
|
28
|
-
|
|
24
|
+
setup(nt, { expose: b }) {
|
|
25
|
+
const { config: p, isFeatureEnabled: f } = j(), { exportHtml: d } = G(), { save: v } = N(), { validateCurrentTemplate: y } = Q(), { isEnabled: s } = U(), { showToaster: S, hideToaster: g, handleError: i } = W(), { openVersionHistory: h, closeVersionHistory: T } = Y(), { getCompiledEmail: V } = P(), { compileHtml: E } = K(), { validateLiquidSyntax: H } = Z(), e = tt(), w = et(), x = ot(), { hasMigrations: C } = st(x), r = X(), k = u(() => s.value ? r("email-editor.save-and-continue") : "Save"), a = c(!1), n = c(!1), _ = c(), l = J(), q = () => {
|
|
26
|
+
if (e.isVersionHistoryOpen) {
|
|
27
|
+
T();
|
|
29
28
|
return;
|
|
30
29
|
}
|
|
31
|
-
|
|
30
|
+
h();
|
|
32
31
|
}, B = async () => {
|
|
33
32
|
a.value = !0, await d(), a.value = !1;
|
|
34
33
|
}, L = () => {
|
|
35
|
-
|
|
36
|
-
}, R =
|
|
34
|
+
e.isSaveAsTemplateDrawerOpen = !0;
|
|
35
|
+
}, R = u(() => e.isVersionHistoryOpen ? r("newsletter.close-version-history") : r("newsletter.version-history")), D = u(
|
|
37
36
|
() => {
|
|
38
|
-
var t,
|
|
39
|
-
return ((
|
|
37
|
+
var t, o;
|
|
38
|
+
return ((o = (t = p.value) == null ? void 0 : t.features) == null ? void 0 : o.versionHistory) && !e.isPreviewModeOpen;
|
|
40
39
|
}
|
|
41
40
|
), A = async (t) => {
|
|
42
|
-
n.value = !0, t || (
|
|
43
|
-
let
|
|
41
|
+
n.value = !0, t || (e.loadingStatus = !0);
|
|
42
|
+
let o;
|
|
44
43
|
try {
|
|
45
|
-
|
|
46
|
-
} catch (
|
|
47
|
-
|
|
44
|
+
o = await v(t);
|
|
45
|
+
} catch (M) {
|
|
46
|
+
i(M, "Failed to save template");
|
|
48
47
|
} finally {
|
|
49
|
-
n.value = !1, !t && !
|
|
48
|
+
n.value = !1, !t && !o && (e.loadingStatus = !1);
|
|
50
49
|
}
|
|
51
|
-
return
|
|
50
|
+
return o;
|
|
52
51
|
}, O = (t) => {
|
|
53
|
-
var
|
|
52
|
+
var o;
|
|
54
53
|
if (!t && C.value) {
|
|
55
|
-
(
|
|
54
|
+
(o = _.value) == null || o.open();
|
|
56
55
|
return;
|
|
57
56
|
}
|
|
58
57
|
return A(t);
|
|
59
58
|
}, m = async () => {
|
|
60
|
-
|
|
59
|
+
e.loadingStatus = !0;
|
|
61
60
|
try {
|
|
62
61
|
return await y();
|
|
63
62
|
} catch (t) {
|
|
64
|
-
return
|
|
63
|
+
return i(t, "Failed to prepare test email"), null;
|
|
65
64
|
} finally {
|
|
66
|
-
|
|
65
|
+
e.loadingStatus = !1;
|
|
67
66
|
}
|
|
68
|
-
},
|
|
67
|
+
}, F = async () => {
|
|
69
68
|
const t = await m();
|
|
70
|
-
t.length
|
|
69
|
+
t != null && t.length ? w.open(t, "test") : t && g();
|
|
71
70
|
}, z = async () => {
|
|
72
|
-
if (
|
|
73
|
-
|
|
71
|
+
if (s.value) {
|
|
72
|
+
const t = await m();
|
|
73
|
+
if (!t)
|
|
74
|
+
return;
|
|
75
|
+
if (t.length) {
|
|
74
76
|
S({
|
|
75
77
|
type: $.Error,
|
|
76
78
|
message: r("email-editor.validation-errors-found"),
|
|
77
79
|
actionButton: {
|
|
78
80
|
text: r("email-editor.check-errors"),
|
|
79
81
|
onClick: () => {
|
|
80
|
-
|
|
82
|
+
F();
|
|
81
83
|
}
|
|
82
84
|
},
|
|
83
85
|
autoHide: !1
|
|
@@ -88,25 +90,25 @@ const bt = /* @__PURE__ */ I({
|
|
|
88
90
|
return;
|
|
89
91
|
}
|
|
90
92
|
if (f("liquidSyntax")) {
|
|
91
|
-
|
|
93
|
+
e.loadingStatus = !0;
|
|
92
94
|
try {
|
|
93
|
-
const { html: t } = await
|
|
94
|
-
if (!await
|
|
95
|
+
const { html: t } = await V({ minimize: !0, resetDataSavedFlag: !1 }), { compiledHtml: o } = E(t);
|
|
96
|
+
if (!await H(o))
|
|
95
97
|
return;
|
|
96
98
|
} catch (t) {
|
|
97
|
-
|
|
99
|
+
i(t, "Failed to prepare test email");
|
|
98
100
|
return;
|
|
99
101
|
} finally {
|
|
100
|
-
|
|
102
|
+
e.loadingStatus = !1;
|
|
101
103
|
}
|
|
102
104
|
}
|
|
103
105
|
l();
|
|
104
106
|
};
|
|
105
|
-
return
|
|
107
|
+
return b({
|
|
106
108
|
handleSave: O
|
|
107
|
-
}), { __sfc: !0, config: p, isFeatureEnabled: f, exportHtml: d, save: v, validateCurrentTemplate: y, isEnabled:
|
|
109
|
+
}), { __sfc: !0, config: p, isFeatureEnabled: f, exportHtml: d, save: v, validateCurrentTemplate: y, isEnabled: s, showToaster: S, hideToaster: g, handleError: i, openVersionHistory: h, closeVersionHistory: T, getCompiledEmail: V, compileHtml: E, validateLiquidSyntax: H, editorStore: e, saveValidationStore: w, templateStore: x, hasMigrations: C, trans: r, saveLabel: k, isExporting: a, isSaving: n, migrationModalRef: _, testEmailClick: l, handleVersionHistory: q, handleExport: B, handleSaveAs: L, versionHistoryTooltipText: R, isVersionHistoryButtonVisible: D, executeSave: A, handleSave: O, collectTestErrors: m, openTestErrors: F, handleTestEmail: z, getTooltipOptions: rt, InButtonV2: it, MigrationConfirmModal: at };
|
|
108
110
|
}
|
|
109
111
|
});
|
|
110
112
|
export {
|
|
111
|
-
|
|
113
|
+
Ot as default
|
|
112
114
|
};
|
|
@@ -1,16 +1,17 @@
|
|
|
1
|
-
import { defineComponent as
|
|
2
|
-
import
|
|
1
|
+
import { defineComponent as c, ref as f, computed as s } from "vue";
|
|
2
|
+
import v from "../../wrappers/WpDrawer.vue.js";
|
|
3
3
|
import { useSave as S } from "../../../composables/useSave.js";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
|
|
4
|
+
import { useToaster as g } from "../../../composables/useToaster.js";
|
|
5
|
+
import { useTranslations as y } from "../../../composables/useTranslations.js";
|
|
6
|
+
import { useConfigStore as h } from "../../../stores/config.js";
|
|
7
|
+
import { useEditorStore as _ } from "../../../stores/editor.js";
|
|
8
|
+
import { useSaveValidationStore as w } from "../../../stores/save-validation.js";
|
|
9
|
+
import { escapeHtml as C } from "../../../utils/htmlEscape.js";
|
|
10
|
+
import { InIcons as E } from "@useinsider/design-system-vue";
|
|
11
|
+
const H = /* @__PURE__ */ c({
|
|
11
12
|
__name: "ValidationErrorDrawer",
|
|
12
|
-
setup(
|
|
13
|
-
const r =
|
|
13
|
+
setup(T) {
|
|
14
|
+
const r = y(), e = w(), a = _(), n = h(), { saveWithErrors: i } = S(), { handleError: l } = g(), o = f(!1), m = s(() => {
|
|
14
15
|
const t = {
|
|
15
16
|
primaryButton: {
|
|
16
17
|
styling: "solid",
|
|
@@ -18,32 +19,32 @@ const V = /* @__PURE__ */ p({
|
|
|
18
19
|
labelText: r("email-editor.update-design")
|
|
19
20
|
}
|
|
20
21
|
};
|
|
21
|
-
return
|
|
22
|
+
return n.allowSaveWithErrors && e.intent !== "test" && (t.secondaryButton = {
|
|
22
23
|
styling: "solid",
|
|
23
24
|
type: "subtle-primary",
|
|
24
25
|
labelText: r("email-editor.save-and-continue"),
|
|
25
26
|
loadingStatus: o.value
|
|
26
27
|
}), t;
|
|
27
|
-
}),
|
|
28
|
-
const
|
|
29
|
-
return `${t.message}${
|
|
30
|
-
}));
|
|
31
|
-
return { __sfc: !0, trans: r, store: e, editorStore:
|
|
28
|
+
}), u = s(() => e.errors.map((t) => {
|
|
29
|
+
const p = t.detail ? ` (${C(t.detail)})` : "";
|
|
30
|
+
return `${t.message}${p}`;
|
|
31
|
+
})), d = s(() => `${r("email-editor.validation-errors")} (${u.value.length})`);
|
|
32
|
+
return { __sfc: !0, trans: r, store: e, editorStore: a, configStore: n, saveWithErrors: i, handleError: l, isSaving: o, footerButtonGroupOptions: m, rows: u, titleText: d, handleClose: () => {
|
|
32
33
|
e.isDrawerOpen && e.close();
|
|
33
34
|
}, handleSaveAndContinue: async () => {
|
|
34
35
|
if (!o.value) {
|
|
35
|
-
o.value = !0,
|
|
36
|
+
o.value = !0, a.loadingStatus = !0;
|
|
36
37
|
try {
|
|
37
|
-
await i() ? e.close() :
|
|
38
|
+
await i() ? e.close() : a.loadingStatus = !1;
|
|
38
39
|
} catch (t) {
|
|
39
|
-
|
|
40
|
+
l(t, "Failed to save template"), a.loadingStatus = !1;
|
|
40
41
|
} finally {
|
|
41
42
|
o.value = !1;
|
|
42
43
|
}
|
|
43
44
|
}
|
|
44
|
-
}, WpDrawer:
|
|
45
|
+
}, WpDrawer: v, InIcons: E };
|
|
45
46
|
}
|
|
46
47
|
});
|
|
47
48
|
export {
|
|
48
|
-
|
|
49
|
+
H as default
|
|
49
50
|
};
|
|
@@ -1,76 +1,78 @@
|
|
|
1
|
-
import { useConfig as
|
|
2
|
-
import { useEditorLock as
|
|
3
|
-
import { useAutosaveStore as
|
|
4
|
-
import { useEditorStore as
|
|
5
|
-
import { computed as
|
|
6
|
-
const
|
|
7
|
-
const { isFeatureEnabled:
|
|
8
|
-
let
|
|
9
|
-
const
|
|
10
|
-
() =>
|
|
11
|
-
),
|
|
12
|
-
hasChanges:
|
|
13
|
-
isInSaveableState:
|
|
14
|
-
|
|
15
|
-
|
|
1
|
+
import { useConfig as p } from "./useConfig.js";
|
|
2
|
+
import { useEditorLock as y } from "./useEditorLock.js";
|
|
3
|
+
import { useAutosaveStore as I, AUTOSAVE_STATUS as a } from "../stores/autosave.js";
|
|
4
|
+
import { useEditorStore as L } from "../stores/editor.js";
|
|
5
|
+
import { computed as w, watch as V, onUnmounted as k } from "vue";
|
|
6
|
+
const D = 18e4, b = 6e4, _ = (g, { clearsChanges: h = () => !0 } = {}) => {
|
|
7
|
+
const { isFeatureEnabled: m } = p(), s = L(), t = I(), { isEditorBusy: f } = y();
|
|
8
|
+
let o = null, l = 0, u = -1;
|
|
9
|
+
const d = w(
|
|
10
|
+
() => m("autosave") && t.isOn
|
|
11
|
+
), A = () => s.hasChanges && s.isInSaveableState && s.changeSeq !== u, E = () => ({
|
|
12
|
+
hasChanges: s.hasChanges,
|
|
13
|
+
isInSaveableState: s.isInSaveableState,
|
|
14
|
+
isUnchangedSinceLastSave: s.changeSeq === u
|
|
15
|
+
}), r = async (e) => {
|
|
16
|
+
if (!d.value) {
|
|
16
17
|
console.debug("guido:autosave:skipped", { trigger: e, reason: "not-active" });
|
|
17
18
|
return;
|
|
18
19
|
}
|
|
19
|
-
if (!
|
|
20
|
-
console.debug("guido:autosave:skipped", { trigger: e, reason: "gates-blocked", gates:
|
|
20
|
+
if (!A()) {
|
|
21
|
+
console.debug("guido:autosave:skipped", { trigger: e, reason: "gates-blocked", gates: E() });
|
|
21
22
|
return;
|
|
22
23
|
}
|
|
23
|
-
if (t.status ===
|
|
24
|
+
if (t.status === a.SAVING) {
|
|
24
25
|
console.debug("guido:autosave:skipped", { trigger: e, reason: "already-saving" });
|
|
25
26
|
return;
|
|
26
27
|
}
|
|
27
|
-
if (
|
|
28
|
+
if (f()) {
|
|
28
29
|
console.debug("guido:autosave:skipped", { trigger: e, reason: "editor-busy" });
|
|
29
30
|
return;
|
|
30
31
|
}
|
|
31
|
-
e === "visibility" && (
|
|
32
|
+
e === "visibility" && (l = Date.now()), console.debug("guido:autosave:save-start", { trigger: e }), t.status = a.SAVING;
|
|
33
|
+
const n = s.changeSeq;
|
|
32
34
|
try {
|
|
33
|
-
if (await
|
|
34
|
-
console.debug("guido:autosave:blocked", { trigger: e, reason: "save-returned-undefined" }), t.status =
|
|
35
|
+
if (await g() === void 0) {
|
|
36
|
+
console.debug("guido:autosave:blocked", { trigger: e, reason: "save-returned-undefined" }), t.status = a.ERROR;
|
|
35
37
|
return;
|
|
36
38
|
}
|
|
37
|
-
|
|
38
|
-
} catch (
|
|
39
|
-
console.debug("guido:autosave:error", { trigger: e, error:
|
|
39
|
+
u = n, h() && (s.hasChanges = !1), t.status = a.SAVED, t.lastSavedAt = /* @__PURE__ */ new Date(), console.debug("guido:autosave:save-complete", { trigger: e, at: t.lastSavedAt });
|
|
40
|
+
} catch (S) {
|
|
41
|
+
console.debug("guido:autosave:error", { trigger: e, error: S }), t.status = a.ERROR;
|
|
40
42
|
}
|
|
41
|
-
},
|
|
43
|
+
}, i = () => {
|
|
42
44
|
const { visibilityState: e } = document;
|
|
43
45
|
if (console.debug("guido:autosave:visibility-change", {
|
|
44
46
|
visibilityState: e,
|
|
45
|
-
isActive:
|
|
47
|
+
isActive: d.value
|
|
46
48
|
}), e !== "hidden")
|
|
47
49
|
return;
|
|
48
|
-
const
|
|
49
|
-
if (
|
|
50
|
+
const n = Date.now() - l;
|
|
51
|
+
if (n < b) {
|
|
50
52
|
console.debug("guido:autosave:visibility-debounced", {
|
|
51
|
-
sinceLastMs:
|
|
52
|
-
debounceMs:
|
|
53
|
+
sinceLastMs: n,
|
|
54
|
+
debounceMs: b
|
|
53
55
|
});
|
|
54
56
|
return;
|
|
55
57
|
}
|
|
56
|
-
|
|
57
|
-
},
|
|
58
|
-
|
|
59
|
-
},
|
|
60
|
-
document.removeEventListener("visibilitychange",
|
|
58
|
+
r("visibility");
|
|
59
|
+
}, c = () => {
|
|
60
|
+
o && (clearInterval(o), o = null);
|
|
61
|
+
}, v = () => {
|
|
62
|
+
document.removeEventListener("visibilitychange", i), window.removeEventListener("pagehide", i);
|
|
61
63
|
};
|
|
62
|
-
|
|
63
|
-
|
|
64
|
+
V(
|
|
65
|
+
d,
|
|
64
66
|
(e) => {
|
|
65
|
-
console.debug("guido:autosave:active-changed", { active: e }), e ? (
|
|
66
|
-
console.debug("guido:autosave:interval-tick"),
|
|
67
|
-
},
|
|
67
|
+
console.debug("guido:autosave:active-changed", { active: e }), e ? (c(), o = setInterval(() => {
|
|
68
|
+
console.debug("guido:autosave:interval-tick"), r("interval");
|
|
69
|
+
}, D), document.addEventListener("visibilitychange", i), window.addEventListener("pagehide", i)) : (c(), v(), t.status = a.IDLE);
|
|
68
70
|
},
|
|
69
71
|
{ immediate: !0 }
|
|
70
|
-
),
|
|
71
|
-
|
|
72
|
+
), k(() => {
|
|
73
|
+
c(), v(), t.status = a.IDLE, t.lastSavedAt = null;
|
|
72
74
|
});
|
|
73
75
|
};
|
|
74
76
|
export {
|
|
75
|
-
|
|
77
|
+
_ as useAutoSave
|
|
76
78
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { useConfigStore as
|
|
3
|
-
const
|
|
1
|
+
import r from "../extensions/ModulesTabIcons/extension.js";
|
|
2
|
+
import { useConfigStore as l } from "../stores/config.js";
|
|
3
|
+
const a = {
|
|
4
4
|
"amp-accordion": "ampAccordionEnabled",
|
|
5
5
|
"amp-carousel": "ampCarouselEnabled",
|
|
6
6
|
"amp-form-controls": "ampFormControlsEnabled",
|
|
@@ -14,7 +14,7 @@ const s = {
|
|
|
14
14
|
"text-block": "textEnabled",
|
|
15
15
|
"timer-block": "timerEnabled",
|
|
16
16
|
"video-block": "videoEnabled"
|
|
17
|
-
},
|
|
17
|
+
}, s = {
|
|
18
18
|
"dynamic-content": () => import("../extensions/DynamicContent/extension.js"),
|
|
19
19
|
"checkbox-block": () => import("../extensions/Blocks/Checkbox/extension.js"),
|
|
20
20
|
"radio-button-block": () => import("../extensions/Blocks/RadioButton/extension.js"),
|
|
@@ -22,48 +22,40 @@ const s = {
|
|
|
22
22
|
"unsubscribe-block": () => import("../extensions/Blocks/Unsubscribe/extension.js"),
|
|
23
23
|
"coupon-block": () => import("../extensions/Blocks/CouponBlock/extension.js"),
|
|
24
24
|
"items-block": () => import("../extensions/Blocks/Items/extension.js")
|
|
25
|
-
},
|
|
26
|
-
if (!
|
|
25
|
+
}, i = (n) => {
|
|
26
|
+
if (!n || !n.length)
|
|
27
27
|
return {};
|
|
28
28
|
const t = {};
|
|
29
|
-
return
|
|
30
|
-
const e =
|
|
29
|
+
return n.forEach((o) => {
|
|
30
|
+
const e = a[o];
|
|
31
31
|
e && (t[e] = !1);
|
|
32
32
|
}), t;
|
|
33
|
-
}, m = async (
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
return n;
|
|
42
|
-
const e = await Promise.all(
|
|
43
|
-
o.map(async (r) => {
|
|
44
|
-
const a = i[r];
|
|
45
|
-
return a ? (await a()).default : null;
|
|
33
|
+
}, b = () => [r], m = async (n) => {
|
|
34
|
+
const t = b();
|
|
35
|
+
if (!n || !n.length)
|
|
36
|
+
return t;
|
|
37
|
+
const o = await Promise.all(
|
|
38
|
+
n.map(async (e) => {
|
|
39
|
+
const c = s[e];
|
|
40
|
+
return c ? (await c()).default : null;
|
|
46
41
|
})
|
|
47
42
|
);
|
|
48
43
|
return [
|
|
49
|
-
...
|
|
50
|
-
...
|
|
44
|
+
...t,
|
|
45
|
+
...o.filter((e) => e !== null)
|
|
51
46
|
];
|
|
52
|
-
},
|
|
53
|
-
const
|
|
47
|
+
}, E = () => {
|
|
48
|
+
const n = l();
|
|
54
49
|
return {
|
|
55
50
|
getStripoBlocksConfig: async () => {
|
|
56
|
-
const
|
|
51
|
+
const o = n.blocks;
|
|
57
52
|
return {
|
|
58
|
-
baseBlocks:
|
|
59
|
-
extensions: await
|
|
60
|
-
n == null ? void 0 : n.includeCustoms,
|
|
61
|
-
o.externalDisplayConditions
|
|
62
|
-
)
|
|
53
|
+
baseBlocks: i(o == null ? void 0 : o.excludeDefaults),
|
|
54
|
+
extensions: await m(o == null ? void 0 : o.includeCustoms)
|
|
63
55
|
};
|
|
64
56
|
}
|
|
65
57
|
};
|
|
66
58
|
};
|
|
67
59
|
export {
|
|
68
|
-
|
|
60
|
+
E as useBlocksConfig
|
|
69
61
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useActionsApi as
|
|
1
|
+
import { useActionsApi as R } from "./useActionsApi.js";
|
|
2
2
|
import { useConfig as q } from "./useConfig.js";
|
|
3
3
|
import { useEditorLock as O } from "./useEditorLock.js";
|
|
4
4
|
import { useSaveStart as D, useSaveComplete as F } from "./useGuidoActions.js";
|
|
@@ -19,37 +19,37 @@ import { useLiquidValidator as et } from "./validators/useLiquidValidator.js";
|
|
|
19
19
|
import { useSyncModuleBlockValidator as ot } from "./validators/useSyncModuleBlockValidator.js";
|
|
20
20
|
import { useUnsubscribeBlockValidator as st } from "./validators/useUnsubscribeBlockValidator.js";
|
|
21
21
|
const Bt = () => {
|
|
22
|
-
const
|
|
23
|
-
if (!
|
|
22
|
+
const a = D(), p = F(), { validateHtml: v } = _(), { validateLiquidSyntax: S } = et(), { validateCouponBlockTags: y } = tt(), { validateUnsubscribeBlockUniqueness: w, validateUnsubscribeBlockHasTemplate: E } = st(), { validateSyncModuleBlocks: n } = ot(), { callbacks: r, isFeatureEnabled: d } = q(), { extractSyncModuleData: b } = G(), { setSyncModuleUnsubscriptionPages: g } = J(), { editorSave: H, getTemplateData: V } = R(), { showToaster: x } = $(), { getBlockedDomains: k, resolveToast: C } = Z(), { prepareTemplateDetails: m } = X(), { collectSaveValidationErrors: B } = j(), { isEnabled: h } = z(), T = Q(), P = N(), f = K(), { runExclusive: l } = O(), c = async (t, e, o) => {
|
|
23
|
+
if (!d("allowlistEnabled"))
|
|
24
24
|
return !1;
|
|
25
|
-
const i = await
|
|
25
|
+
const i = await k(t, e);
|
|
26
26
|
if (!i.length)
|
|
27
27
|
return !1;
|
|
28
28
|
if (!o) {
|
|
29
|
-
const s = await
|
|
30
|
-
s != null && s.message &&
|
|
29
|
+
const s = await C(i);
|
|
30
|
+
s != null && s.message && x({
|
|
31
31
|
type: I.Warning,
|
|
32
32
|
message: s.message,
|
|
33
33
|
actionButton: s.actionButton
|
|
34
34
|
});
|
|
35
35
|
}
|
|
36
36
|
return !0;
|
|
37
|
-
}, L = async (t) => !y(t.compiledHtml) || !
|
|
38
|
-
if (!await
|
|
37
|
+
}, L = async (t) => !y(t.compiledHtml) || !w(t.compiledHtml) || !E(t.compiledHtml) ? !1 : d("liquidSyntax") ? S(t.compiledHtml) : v(t.compiledHtml, t.dynamicContentList, !0), u = async (t, e) => {
|
|
38
|
+
if (!await H())
|
|
39
39
|
return;
|
|
40
40
|
const { unsubscribePayload: i, stripoModules: s } = b(t.rawHtml);
|
|
41
41
|
if (await g(i), t.modules = s, !e.suppress) {
|
|
42
|
-
const
|
|
43
|
-
|
|
42
|
+
const W = e.blankCompiled ? { compiledHtml: "", ampHtml: "" } : {};
|
|
43
|
+
p({ ...t, ...W, silent: e.silent });
|
|
44
44
|
}
|
|
45
45
|
return t;
|
|
46
46
|
}, U = async (t, e) => {
|
|
47
47
|
var i;
|
|
48
|
-
|
|
49
|
-
const o = await
|
|
48
|
+
a();
|
|
49
|
+
const o = await m();
|
|
50
50
|
if (n(o.rawHtml, e)) {
|
|
51
|
-
if (
|
|
52
|
-
const s = await
|
|
51
|
+
if (h.value && !e) {
|
|
52
|
+
const s = await B(
|
|
53
53
|
o.compiledHtml,
|
|
54
54
|
o.dynamicContentList
|
|
55
55
|
);
|
|
@@ -59,31 +59,34 @@ const Bt = () => {
|
|
|
59
59
|
}
|
|
60
60
|
} else if (!await L(o))
|
|
61
61
|
return;
|
|
62
|
-
if (!((i =
|
|
62
|
+
if (!((i = r.value) != null && i.externalValidation && !await r.value.externalValidation(o)) && !await c(o.compiledHtml, o.css, e))
|
|
63
63
|
return u(o, { silent: e, suppress: t });
|
|
64
64
|
}
|
|
65
65
|
}, A = async () => {
|
|
66
66
|
var e;
|
|
67
|
-
if (!
|
|
67
|
+
if (!f.allowSaveWithErrors)
|
|
68
68
|
return;
|
|
69
|
-
|
|
70
|
-
const t = await
|
|
71
|
-
if (n(t.rawHtml, !1) && !((e =
|
|
69
|
+
a();
|
|
70
|
+
const t = await m();
|
|
71
|
+
if (n(t.rawHtml, !1) && !((e = r.value) != null && e.externalValidation && !await r.value.externalValidation(t)) && !await c(t.compiledHtml, t.css, !1))
|
|
72
72
|
return u(t, { silent: !1, blankCompiled: !0 });
|
|
73
73
|
}, M = async () => {
|
|
74
|
-
|
|
75
|
-
|
|
74
|
+
if (!f.allowSaveWithErrors)
|
|
75
|
+
return;
|
|
76
|
+
a();
|
|
77
|
+
const { html: t, css: e } = await V();
|
|
76
78
|
if (!n(t, !0) || await c(t, e, !0))
|
|
77
79
|
return;
|
|
78
80
|
const o = Y(t), i = {
|
|
79
|
-
dynamicContentList:
|
|
81
|
+
dynamicContentList: P.getSelectedDynamicContentList,
|
|
80
82
|
compiledHtml: "",
|
|
81
83
|
rawHtml: t,
|
|
82
84
|
css: e,
|
|
83
85
|
ampHtml: "",
|
|
84
86
|
ampErrors: [],
|
|
85
87
|
modules: [],
|
|
86
|
-
|
|
88
|
+
// No campaignUrls: hosts overwrite their stored map with any object, and raw HTML can't rebuild it.
|
|
89
|
+
recommendation: { configs: {} },
|
|
87
90
|
unsubscribe: {
|
|
88
91
|
status: o.length > 0,
|
|
89
92
|
config: o
|