@useinsider/guido 3.19.0-beta.7d287ab → 3.19.0-beta.84c97db

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.
Files changed (79) hide show
  1. package/dist/@types/config/schemas.js +9 -8
  2. package/dist/components/Guido.vue.js +2 -2
  3. package/dist/components/Guido.vue2.js +80 -67
  4. package/dist/components/organisms/AutoSaveController.vue2.js +18 -8
  5. package/dist/components/organisms/header/AutoSaveStatus.vue.js +17 -0
  6. package/dist/components/organisms/header/AutoSaveStatus.vue2.js +25 -0
  7. package/dist/components/organisms/header/EditorActions.vue.js +13 -13
  8. package/dist/components/organisms/header/EditorActions.vue2.js +37 -52
  9. package/dist/components/organisms/header/EditorActionsMenu.vue.js +20 -0
  10. package/dist/components/organisms/header/EditorActionsMenu.vue2.js +98 -0
  11. package/dist/components/organisms/header/HeaderWrapper.vue.js +6 -6
  12. package/dist/components/organisms/header/HeaderWrapper.vue2.js +9 -17
  13. package/dist/components/organisms/header/LeftSlot.vue.js +5 -5
  14. package/dist/components/organisms/header/LeftSlot.vue2.js +32 -23
  15. package/dist/components/organisms/header/MiddleSlot.vue.js +4 -4
  16. package/dist/components/organisms/header/MiddleSlot.vue2.js +8 -7
  17. package/dist/components/organisms/header/RightSlot.vue.js +9 -8
  18. package/dist/components/organisms/header/RightSlot.vue2.js +13 -18
  19. package/dist/components/organisms/header/accessibility/AccessibilityToolbar.vue.js +18 -0
  20. package/dist/components/organisms/header/accessibility/AccessibilityToolbar.vue2.js +37 -0
  21. package/dist/components/organisms/header/accessibility/ColorVisionSelect.vue.js +22 -0
  22. package/dist/components/organisms/header/accessibility/ColorVisionSelect.vue2.js +48 -0
  23. package/dist/components/organisms/onboarding/EditorTabBarOnboarding.vue.js +19 -0
  24. package/dist/components/organisms/onboarding/EditorTabBarOnboarding.vue2.js +90 -0
  25. package/dist/components/organisms/onboarding/OnboardingWrapper.vue.js +12 -12
  26. package/dist/components/organisms/onboarding/OnboardingWrapper.vue2.js +56 -38
  27. package/dist/composables/useAccessibilityApi.js +45 -0
  28. package/dist/composables/useCortexBlueprintBridge.js +122 -54
  29. package/dist/composables/useCustomInterfaceAppearance.js +42 -41
  30. package/dist/composables/useEmailTemplateApplier.js +111 -50
  31. package/dist/config/i18n/en/labels.json.js +36 -4
  32. package/dist/config/i18n/en/tooltips.json.js +2 -1
  33. package/dist/config/migrator/itemsBlockMigrator.js +236 -248
  34. package/dist/extensions/Blocks/Items/constants/cardLayout.js +20 -0
  35. package/dist/extensions/Blocks/Items/controls/name/trimming.js +18 -17
  36. package/dist/extensions/Blocks/Items/controls/settingsControl.js +114 -105
  37. package/dist/extensions/Blocks/Items/enums/productEnums.js +14 -9
  38. package/dist/extensions/Blocks/Items/layouts/horizontal.html.js +11 -9
  39. package/dist/extensions/Blocks/Items/template.js +219 -204
  40. package/dist/extensions/Blocks/Recommendation/controls/main/index.js +189 -226
  41. package/dist/guido.css +1 -1
  42. package/dist/sprite.svg +10 -0
  43. package/dist/src/@types/config/schemas.d.ts +2 -0
  44. package/dist/src/components/organisms/AutoSaveController.vue.d.ts +3 -1
  45. package/dist/src/components/organisms/header/EditorActionsMenu.vue.d.ts +2 -0
  46. package/dist/src/components/organisms/header/HeaderWrapper.vue.d.ts +1 -3
  47. package/dist/src/components/organisms/header/RightSlot.vue.d.ts +1 -3
  48. package/dist/src/components/organisms/header/accessibility/AccessibilityToolbar.vue.d.ts +2 -0
  49. package/dist/src/components/organisms/header/accessibility/ColorVisionSelect.vue.d.ts +2 -0
  50. package/dist/src/components/organisms/onboarding/EditorTabBarOnboarding.vue.d.ts +2 -0
  51. package/dist/src/composables/useAccessibilityApi.d.ts +13 -0
  52. package/dist/src/composables/useActionsApi.d.ts +2 -2
  53. package/dist/src/composables/useConfig.d.ts +2 -0
  54. package/dist/src/composables/useCortexBlueprintBridge.d.ts +2 -3
  55. package/dist/src/composables/useEmailTemplateApplier.d.ts +18 -5
  56. package/dist/src/extensions/Blocks/Items/constants/cardLayout.d.ts +44 -0
  57. package/dist/src/extensions/Blocks/Items/enums/productEnums.d.ts +3 -0
  58. package/dist/src/extensions/Blocks/Items/template.d.ts +19 -0
  59. package/dist/src/extensions/Blocks/Recommendation/controls/main/index.d.ts +0 -8
  60. package/dist/src/stores/autosave.d.ts +73 -1
  61. package/dist/src/stores/config.d.ts +20 -0
  62. package/dist/src/stores/editor.d.ts +109 -0
  63. package/dist/src/stores/guido-email-editor.d.ts +20 -10
  64. package/dist/src/stores/onboarding.d.ts +952 -21
  65. package/dist/src/stores/version-history.d.ts +1 -1
  66. package/dist/src/utils/timeUtil.d.ts +5 -0
  67. package/dist/static/styles/components/accessibility.css.js +234 -0
  68. package/dist/static/styles/components/version-history.css.js +2 -6
  69. package/dist/static/styles/variables.css.js +2 -0
  70. package/dist/stores/autosave.js +12 -7
  71. package/dist/stores/editor.js +7 -4
  72. package/dist/stores/guido-email-editor.js +3 -1
  73. package/dist/stores/onboarding.js +43 -21
  74. package/dist/utils/pairProductVariables.js +71 -71
  75. package/dist/utils/timeUtil.js +6 -17
  76. package/package.json +1 -1
  77. package/dist/components/organisms/header/AutoSaveToggle.vue.js +0 -22
  78. package/dist/components/organisms/header/AutoSaveToggle.vue2.js +0 -19
  79. /package/dist/src/components/organisms/header/{AutoSaveToggle.vue.d.ts → AutoSaveStatus.vue.d.ts} +0 -0
@@ -1,50 +1,68 @@
1
- import { defineComponent as f, computed as e, onMounted as O, watch as t } from "vue";
2
- import y from "./AMPOnboarding.vue.js";
3
- import u from "./GenericOnboarding.vue.js";
4
- import v from "./ItemsOnboarding.vue.js";
5
- import S from "./NewVersionPopup.vue.js";
6
- import l from "./RecommendationLegacyStrategyOnboarding.vue.js";
7
- import h from "./RecommendationStrategyOnboarding.vue.js";
8
- import w from "./TextBlockOnboarding.vue.js";
9
- import P from "./VersionHistoryOnboarding.vue.js";
10
- import { usePartner as _ } from "../../../composables/usePartner.js";
11
- import { useEditorStore as A } from "../../../stores/editor.js";
12
- import { useOnboardingStore as H } from "../../../stores/onboarding.js";
13
- import { usePreviewStore as M } from "../../../stores/preview.js";
14
- const U = /* @__PURE__ */ f({
1
+ import { defineComponent as y, computed as r, onMounted as S, watch as e, ref as h } from "vue";
2
+ import w from "./AMPOnboarding.vue.js";
3
+ import T from "./EditorTabBarOnboarding.vue.js";
4
+ import P from "./GenericOnboarding.vue.js";
5
+ import B from "./ItemsOnboarding.vue.js";
6
+ import A from "./NewVersionPopup.vue.js";
7
+ import M from "./RecommendationLegacyStrategyOnboarding.vue.js";
8
+ import _ from "./RecommendationStrategyOnboarding.vue.js";
9
+ import H from "./TextBlockOnboarding.vue.js";
10
+ import F from "./VersionHistoryOnboarding.vue.js";
11
+ import { useConfig as V } from "../../../composables/useConfig.js";
12
+ import { usePartner as C } from "../../../composables/usePartner.js";
13
+ import { useEditorStore as x } from "../../../stores/editor.js";
14
+ import { useOnboardingStore as E } from "../../../stores/onboarding.js";
15
+ import { usePreviewStore as N } from "../../../stores/preview.js";
16
+ const Z = /* @__PURE__ */ y({
15
17
  __name: "OnboardingWrapper",
16
18
  emits: ["onboarding-finished"],
17
- setup(x, { emit: g }) {
18
- const o = H(), r = A(), a = M(), { isTestPartner: s } = _(), m = e(() => r.isStripoInitialized), p = e(() => s()), d = [
19
- { type: "newVersionPopup", component: S },
20
- { type: "genericOnboarding", component: u },
21
- { type: "textBlockOnboarding", component: w },
22
- { type: "versionHistoryOnboarding", component: P },
23
- { type: "ampOnboarding", component: y },
24
- { type: "itemsOnboarding", component: v },
25
- { type: "recommendationStrategyOnboarding", component: h },
26
- { type: "recommendationLegacyStrategyOnboarding", component: l }
27
- ], c = (n) => p.value || !m.value ? !1 : n === "newVersionPopup" ? o.shouldShowOnboarding(n) : o.isActive(n), b = e(() => d.filter((n) => c(n.type)));
28
- return O(async () => {
19
+ setup(R, { emit: p }) {
20
+ const o = E(), i = x(), c = N(), { isTestPartner: b } = C(), { isFeatureEnabled: g } = V(), a = r(() => i.isStripoInitialized), s = r(() => b()), O = [
21
+ { type: "newVersionPopup", component: A },
22
+ { type: "genericOnboarding", component: P },
23
+ { type: "textBlockOnboarding", component: H },
24
+ { type: "versionHistoryOnboarding", component: F },
25
+ { type: "ampOnboarding", component: w },
26
+ { type: "itemsOnboarding", component: B },
27
+ { type: "editorTabBarOnboarding", component: T },
28
+ { type: "recommendationStrategyOnboarding", component: _ },
29
+ { type: "recommendationLegacyStrategyOnboarding", component: M }
30
+ ], f = (n) => s.value || !a.value ? !1 : n === "newVersionPopup" ? o.shouldShowOnboarding(n) : o.isActive(n), l = r(() => O.filter((n) => f(n.type)));
31
+ S(async () => {
29
32
  await o.fetchUserModalState();
30
- }), t(
31
- () => r.isVersionHistoryOpen,
32
- (n, i) => {
33
- n && !i && o.shouldShowOnboarding("versionHistoryOnboarding") && o.start("versionHistoryOnboarding"), !n && i && o.isActive("versionHistoryOnboarding") && o.close("versionHistoryOnboarding");
33
+ }), e(
34
+ () => i.isVersionHistoryOpen,
35
+ (n, t) => {
36
+ n && !t && (o.isActive("editorTabBarOnboarding") && o.closeForSession("editorTabBarOnboarding"), o.shouldShowOnboarding("versionHistoryOnboarding") && o.start("versionHistoryOnboarding")), !n && t && o.isActive("versionHistoryOnboarding") && o.close("versionHistoryOnboarding");
34
37
  }
35
- ), t(
36
- () => a.emailFormat,
37
- (n, i) => {
38
- i !== "AMP" && n === "AMP" && o.shouldShowOnboarding("ampOnboarding") && o.start("ampOnboarding");
38
+ ), e(
39
+ () => c.emailFormat,
40
+ (n, t) => {
41
+ t !== "AMP" && n === "AMP" && o.shouldShowOnboarding("ampOnboarding") && o.start("ampOnboarding");
39
42
  }
40
- ), t(
41
- () => r.isPreviewModeOpen,
43
+ ), e(
44
+ () => i.isPreviewModeOpen,
42
45
  (n) => {
43
46
  !n && o.isActive("ampOnboarding") && o.close("ampOnboarding");
44
47
  }
45
- ), { __sfc: !0, emit: g, onboardingStore: o, editorStore: r, previewStore: a, isTestPartner: s, isStripoReady: m, isTestPartnerActive: p, onboardingConfigs: d, shouldShow: c, visibleOnboardings: b };
48
+ );
49
+ const d = h(!1), v = (n) => {
50
+ n === "newVersionPopup" && (d.value = !0), p("onboarding-finished");
51
+ }, m = r(() => i.isNormalMode && !i.isPreviewModeOpen), u = r(() => a.value && o.isFetched && g("accessibilityTesting") && !s.value && m.value && !(o.shouldShowOnboarding("newVersionPopup") && !d.value) && !o.isOnboardingActive() && !o.closedThisSession.includes("editorTabBarOnboarding") && o.shouldShowOnboarding("editorTabBarOnboarding"));
52
+ return e(
53
+ u,
54
+ (n) => {
55
+ n && o.start("editorTabBarOnboarding");
56
+ },
57
+ { immediate: !0 }
58
+ ), e(
59
+ m,
60
+ (n) => {
61
+ !n && o.isActive("editorTabBarOnboarding") && o.closeForSession("editorTabBarOnboarding");
62
+ }
63
+ ), { __sfc: !0, emit: p, onboardingStore: o, editorStore: i, previewStore: c, isTestPartner: b, isFeatureEnabled: g, isStripoReady: a, isTestPartnerActive: s, onboardingConfigs: O, shouldShow: f, visibleOnboardings: l, isNewVersionPopupClosed: d, handleFinished: v, isTourAnchored: m, canStartTabBarTour: u };
46
64
  }
47
65
  });
48
66
  export {
49
- U as default
67
+ Z as default
50
68
  };
@@ -0,0 +1,45 @@
1
+ import { ToasterTypeOptions as p } from "../enums/toaster.js";
2
+ import { useEditorStore as T } from "../stores/editor.js";
3
+ import { findEditorApi as g, EDITOR_NOT_READY_MESSAGE as m } from "../utils/stripoEditorApi.js";
4
+ import { useToaster as y } from "./useToaster.js";
5
+ const I = () => {
6
+ const e = T(), { showToaster: d } = y(), s = (i) => {
7
+ var l;
8
+ const o = (l = g()) == null ? void 0 : l.accessibilityApi;
9
+ if (!o) {
10
+ d({ type: p.Error, message: m });
11
+ return;
12
+ }
13
+ i(o);
14
+ }, t = () => s((i) => {
15
+ i.openAccessibilityTestingMode(), e.isAccessibilityTestingOpen = !0;
16
+ }), c = () => {
17
+ var i;
18
+ try {
19
+ (i = g()) == null || i.accessibilityApi.closeAccessibilityTestingMode();
20
+ } finally {
21
+ e.isAccessibilityTestingOpen = !1, e.imagesHidden = !1, e.colorVisionDeficiency = "";
22
+ }
23
+ }, a = () => e.isAccessibilityTestingOpen ? c() : t(), n = () => s((i) => {
24
+ i.showImages(), e.imagesHidden = !1;
25
+ }), r = () => s((i) => {
26
+ i.hideImages(), e.imagesHidden = !0;
27
+ });
28
+ return {
29
+ openAccessibilityTestingMode: t,
30
+ closeAccessibilityTestingMode: c,
31
+ toggleAccessibilityTestingMode: a,
32
+ showImages: n,
33
+ hideImages: r,
34
+ toggleImages: () => e.imagesHidden ? n() : r(),
35
+ setColorVisionDeficiency: (i) => s((o) => {
36
+ o.setColorVisionDeficiency(i), e.colorVisionDeficiency = i;
37
+ }),
38
+ switchToDesktopPreview: () => s((i) => i.switchToDesktopPreview()),
39
+ switchToMobilePreview: () => s((i) => i.switchToMobilePreview()),
40
+ toggleCodeEditor: () => s((i) => i.emitToggleCodeEditor())
41
+ };
42
+ };
43
+ export {
44
+ I as useAccessibilityApi
45
+ };
@@ -1,70 +1,138 @@
1
- import { useEmailTemplateApplier as w, resetEmailTemplateApplier as _ } from "./useEmailTemplateApplier.js";
2
- import { useToaster as I } from "./useToaster.js";
3
- import { useTranslations as P } from "./useTranslations.js";
4
- import { ToasterTypeOptions as S } from "../enums/toaster.js";
5
- import { getActivePinia as v } from "pinia";
6
- import { watch as B, onUnmounted as D } from "vue";
7
- const x = "email_template", L = "chat", M = "guido:debug:ai", R = () => {
1
+ import { useEmailTemplateApplier as z, resetEmailTemplateApplier as J } from "./useEmailTemplateApplier.js";
2
+ import { useToaster as Q } from "./useToaster.js";
3
+ import { useTranslations as V } from "./useTranslations.js";
4
+ import { ToasterTypeOptions as Z } from "../enums/toaster.js";
5
+ import { useGuidoEmailEditorStore as W } from "../stores/guido-email-editor.js";
6
+ import { getActivePinia as k } from "pinia";
7
+ import { onUnmounted as tt, watch as et } from "vue";
8
+ const rt = "email_template", nt = "chat", ot = "guido:debug:ai", it = 2, lt = 500, ct = (b, p) => `${b}:${p ?? 1}`;
9
+ let S = null;
10
+ const at = () => {
8
11
  if (typeof window > "u")
9
12
  return !1;
10
13
  try {
11
- return window.localStorage.getItem(M) === "1";
14
+ return window.localStorage.getItem(ot) === "1";
12
15
  } catch {
13
16
  return !1;
14
17
  }
15
- }, H = () => {
16
- const c = v();
17
- if (!c)
18
+ }, bt = () => {
19
+ const b = k();
20
+ if (!b)
18
21
  return;
19
- const l = c._s, p = l == null ? void 0 : l.get(L);
20
- if (!p)
21
- return;
22
- const { markPending: d, applyTemplate: f, applyTemplateDebounced: T } = w(), { showToaster: E } = I(), h = P(), y = (r, t) => {
23
- const e = h(r);
24
- return e === r ? t : e;
25
- }, i = /* @__PURE__ */ new Map(), a = /* @__PURE__ */ new Set(), u = R(), A = (r, t) => {
26
- u && console.debug(`[guido:cortex] msg=${r ?? "?"} type=${(t == null ? void 0 : t.type) ?? "?"}`, t);
27
- }, b = (r) => {
28
- if (r.blueprintType !== x)
22
+ const p = W(), M = Symbol("cortexBlueprintBridge");
23
+ S = M, p.$patch((t) => {
24
+ t.bridgeActive = !0;
25
+ });
26
+ const { markPending: F, applyTemplate: H, applyTemplateDebounced: O } = z(), { showToaster: C } = Q(), G = V(), E = /* @__PURE__ */ new Map(), f = /* @__PURE__ */ new Map(), _ = /* @__PURE__ */ new Map(), u = /* @__PURE__ */ new Map();
27
+ let s = null;
28
+ const d = /* @__PURE__ */ new Map(), T = /* @__PURE__ */ new Map(), g = /* @__PURE__ */ new Set(), B = at();
29
+ let w = null, m = null, A;
30
+ const K = (t, r) => {
31
+ B && console.debug(`[guido:cortex] msg=${t ?? "?"} type=${(r == null ? void 0 : r.type) ?? "?"}`, r);
32
+ }, U = () => new Set((A == null ? void 0 : A.appliedBlueprintKeys) ?? []), Y = (t) => t instanceof Error ? t.message : String(t), D = (t, r, n, e) => {
33
+ if (S !== M)
34
+ return;
35
+ const o = p.applyAcks[t], c = Math.max(Date.now(), ((o == null ? void 0 : o.ackAt) ?? 0) + 1), a = { status: r, requestedAt: n, ackAt: c };
36
+ e !== void 0 && (a.error = Y(e)), p.$patch((l) => {
37
+ l.applyAcks = { ...l.applyAcks, [t]: a };
38
+ });
39
+ }, I = (t) => (d.get(t) ?? 0) > 0, P = (t) => (s == null ? void 0 : s.key) === t, v = async (t, r, n) => {
40
+ var a, l, h;
41
+ const e = ((a = r.blueprintData) == null ? void 0 : a.html) ?? "", o = ((l = r.blueprintData) == null ? void 0 : l.css) ?? "", c = r.applyRequestedAt ?? 0;
42
+ d.set(t, (d.get(t) ?? 0) + 1);
43
+ try {
44
+ const i = n === "debounced" ? await O(t, { html: e, css: o }) : await H(t, { html: e, css: o });
45
+ if (i.status === "superseded")
46
+ return;
47
+ if (i.status === "applied") {
48
+ E.set(t, e), u.delete(t), D(t, "applied", c);
49
+ return;
50
+ }
51
+ const y = u.get(t), j = (y == null ? void 0 : y.html) === e ? y.count + 1 : 1;
52
+ u.set(t, { html: e, count: j }), D(t, "failed", c, i.error);
53
+ } catch (i) {
54
+ console.error("[guido:apply] apply threw before it could settle", i), D(t, "failed", c, i);
55
+ } finally {
56
+ d.set(t, (d.get(t) ?? 1) - 1);
57
+ const i = T.get(t);
58
+ i && !I(t) && (T.delete(t), P(t) && (((h = i.blueprintData) == null ? void 0 : h.html) ?? "") !== e && v(t, i, n));
59
+ }
60
+ }, N = (t) => {
61
+ var h;
62
+ if (t.blueprintType !== rt)
29
63
  return;
30
- const t = r.blueprintId, e = r.blueprintData;
31
- if (!t || !(e != null && e.html))
64
+ const { blueprintId: r } = t, n = (h = t.blueprintData) == null ? void 0 : h.html;
65
+ if (!r || !n)
32
66
  return;
33
- if (!r.applyRequested) {
34
- d(t);
67
+ const e = ct(r, t.version);
68
+ if (!t.applyRequested) {
69
+ F(e);
70
+ return;
71
+ }
72
+ const o = t.applyRequestedAt ?? 0, c = _.get(e);
73
+ if (c === void 0 || o > c) {
74
+ const i = c === void 0;
75
+ if (_.set(e, o), u.delete(e), (!s || o >= s.requestedAt) && (s = { key: e, requestedAt: o }), i && U().has(e)) {
76
+ E.set(e, n);
77
+ return;
78
+ }
79
+ v(e, t, "immediate");
80
+ return;
81
+ }
82
+ const a = E.get(e);
83
+ if (a === n || !P(e))
35
84
  return;
85
+ const l = u.get(e);
86
+ if (!((l == null ? void 0 : l.html) === n && l.count >= it)) {
87
+ if (a === void 0) {
88
+ if (I(e)) {
89
+ T.set(e, t);
90
+ return;
91
+ }
92
+ v(e, t, "immediate");
93
+ return;
94
+ }
95
+ f.get(e) !== n && (f.set(e, n), v(e, t, "debounced").finally(() => {
96
+ f.get(e) === n && f.delete(e);
97
+ }));
36
98
  }
37
- const o = i.get(t);
38
- o === void 0 ? (i.set(t, e.html), f(t, e)) : o !== e.html && (i.set(t, e.html), T(t, e));
39
- }, s = (r) => r === void 0 || a.has(r) ? !1 : (a.add(r), E({
40
- type: S.Error,
41
- message: y("newsletter.ai-template-failed", "AI couldn't generate the template. Please try again.")
42
- }), !0), m = B(
43
- () => p.messages,
44
- (r) => {
45
- Array.isArray(r) && r.forEach((t) => {
46
- const e = t == null ? void 0 : t.id;
47
- (t == null ? void 0 : t.isError) === !0 && s(e) && u && console.debug(`[guido:cortex] message-level error id=${e}`, t);
48
- const o = t == null ? void 0 : t.segments;
49
- Array.isArray(o) && o.forEach((n) => {
50
- if (n)
51
- switch (A(e, n), n.type) {
52
- case "blueprint":
53
- b(n);
54
- break;
55
- case "error":
56
- s(e);
57
- break;
58
- }
59
- });
99
+ }, R = (t) => t === void 0 || g.has(t) ? !1 : (g.add(t), C({
100
+ type: Z.Error,
101
+ message: G("newsletter.ai-template-failed")
102
+ }), !0), X = (t) => {
103
+ Array.isArray(t) && t.forEach((r) => {
104
+ const n = r == null ? void 0 : r.id;
105
+ (r == null ? void 0 : r.isError) === !0 && R(n) && B && console.debug(`[guido:cortex] message-level error id=${n}`, r);
106
+ const e = r == null ? void 0 : r.segments;
107
+ Array.isArray(e) && e.forEach((o) => {
108
+ if (o)
109
+ switch (K(n, o), o.type) {
110
+ case "blueprint":
111
+ N(o);
112
+ break;
113
+ case "error":
114
+ R(n);
115
+ break;
116
+ }
60
117
  });
61
- },
62
- { deep: !0, immediate: !0 }
63
- );
64
- D(() => {
65
- m(), i.clear(), a.clear(), _();
118
+ });
119
+ }, $ = () => {
120
+ w !== null && (clearInterval(w), w = null);
121
+ }, q = () => {
122
+ var t;
123
+ return (t = b._s) == null ? void 0 : t.get(nt);
124
+ }, L = (t) => {
125
+ A = t, m = et(() => t.messages, X, { deep: !0, immediate: !0 });
126
+ }, x = q();
127
+ x ? L(x) : w = setInterval(() => {
128
+ const t = q();
129
+ t && ($(), L(t));
130
+ }, lt), tt(() => {
131
+ $(), m == null || m(), A = void 0, E.clear(), f.clear(), _.clear(), u.clear(), s = null, d.clear(), T.clear(), g.clear(), S === M && (S = null, p.$patch((t) => {
132
+ t.bridgeActive = !1, t.applyAcks = {};
133
+ }), J());
66
134
  });
67
135
  };
68
136
  export {
69
- H as useCortexBlueprintBridge
137
+ bt as useCortexBlueprintBridge
70
138
  };
@@ -1,44 +1,44 @@
1
1
  import p from "../static/assets/icons/filled-arrow-rising.svg.js";
2
2
  import s from "../static/assets/icons/line-change.svg.js";
3
- import a from "../static/assets/icons/line-delete.svg.js";
4
- import f from "../static/assets/icons/line-info.svg.js";
3
+ import f from "../static/assets/icons/line-delete.svg.js";
4
+ import a from "../static/assets/icons/line-info.svg.js";
5
5
  import c from "../static/assets/icons/line-plus.svg.js";
6
6
  import l from "../static/styles/base.css.js";
7
- import C from "../static/styles/components/alert-message.css.js";
8
- import d from "../static/styles/components/amp-block.css.js";
9
- import u from "../static/styles/components/base-input.css.js";
10
- import h from "../static/styles/components/button-group.css.js";
11
- import I from "../static/styles/components/button.css.js";
12
- import g from "../static/styles/components/combobox.css.js";
13
- import w from "../static/styles/components/counter.css.js";
14
- import y from "../static/styles/components/dropdown-menu.css.js";
15
- import A from "../static/styles/components/loader.css.js";
16
- import $ from "../static/styles/components/narrow-panel.css.js";
17
- import b from "../static/styles/components/popup.css.js";
18
- import B from "../static/styles/components/recommendation-strategy.css.js";
19
- import D from "../static/styles/components/skeleton.css.js";
20
- import R from "../static/styles/components/switcher.css.js";
21
- import P from "../static/styles/components/tabs.css.js";
22
- import T from "../static/styles/components/tools.css.js";
23
- import x from "../static/styles/components/version-history.css.js";
24
- import M from "../static/styles/components/wide-panel.css.js";
25
- import O from "../static/styles/variables.css.js";
7
+ import C from "../static/styles/components/accessibility.css.js";
8
+ import d from "../static/styles/components/alert-message.css.js";
9
+ import u from "../static/styles/components/amp-block.css.js";
10
+ import h from "../static/styles/components/base-input.css.js";
11
+ import I from "../static/styles/components/button-group.css.js";
12
+ import g from "../static/styles/components/button.css.js";
13
+ import w from "../static/styles/components/combobox.css.js";
14
+ import y from "../static/styles/components/counter.css.js";
15
+ import A from "../static/styles/components/dropdown-menu.css.js";
16
+ import $ from "../static/styles/components/loader.css.js";
17
+ import b from "../static/styles/components/narrow-panel.css.js";
18
+ import B from "../static/styles/components/popup.css.js";
19
+ import D from "../static/styles/components/recommendation-strategy.css.js";
20
+ import R from "../static/styles/components/skeleton.css.js";
21
+ import P from "../static/styles/components/switcher.css.js";
22
+ import T from "../static/styles/components/tabs.css.js";
23
+ import x from "../static/styles/components/tools.css.js";
24
+ import M from "../static/styles/components/version-history.css.js";
25
+ import O from "../static/styles/components/wide-panel.css.js";
26
+ import V from "../static/styles/variables.css.js";
26
27
  function o(i, r) {
27
28
  return `--guido-icon-${i}: url("data:image/svg+xml,${encodeURIComponent(r.trim())}");`;
28
29
  }
29
- const V = `:host {
30
+ const W = `:host {
30
31
  ${o("line-change", s)}
31
- ${o("line-delete", a)}
32
+ ${o("line-delete", f)}
32
33
  ${o("filled-arrow-rising", p)}
33
- ${o("line-info", f)}
34
+ ${o("line-info", a)}
34
35
  ${o("line-plus", c)}
35
- }`, W = [
36
- O,
37
- // Must be on top
36
+ }`, _ = [
38
37
  V,
38
+ // Must be on top
39
+ W,
39
40
  l,
40
41
  // Must be on top
41
- C,
42
42
  d,
43
43
  u,
44
44
  h,
@@ -49,33 +49,34 @@ const V = `:host {
49
49
  A,
50
50
  $,
51
51
  b,
52
- D,
52
+ B,
53
53
  R,
54
54
  P,
55
55
  T,
56
56
  x,
57
57
  M,
58
- B
59
- // Last: overrides button.css / wide-panel.css defaults
58
+ O,
59
+ D,
60
+ C
60
61
  ].join(`
61
62
 
62
- `), _ = 3e4;
63
+ `), k = 3e4;
63
64
  let e = null;
64
- function k() {
65
- return e || (e = new CSSStyleSheet(), e.replaceSync(W)), e;
65
+ function q() {
66
+ return e || (e = new CSSStyleSheet(), e.replaceSync(_)), e;
66
67
  }
67
- const po = () => ({ importCss: () => {
68
- const r = k(), S = Date.now() + _, n = () => {
69
- var m;
70
- const t = (m = document.querySelector("ui-editor")) == null ? void 0 : m.shadowRoot;
68
+ const fo = () => ({ importCss: () => {
69
+ const r = q(), S = Date.now() + k, m = () => {
70
+ var n;
71
+ const t = (n = document.querySelector("ui-editor")) == null ? void 0 : n.shadowRoot;
71
72
  if (t) {
72
73
  t.adoptedStyleSheets.includes(r) || (t.adoptedStyleSheets = [...t.adoptedStyleSheets, r]);
73
74
  return;
74
75
  }
75
- Date.now() < S && requestAnimationFrame(n);
76
+ Date.now() < S && requestAnimationFrame(m);
76
77
  };
77
- n();
78
+ m();
78
79
  } });
79
80
  export {
80
- po as useCustomInterfaceAppearance
81
+ fo as useCustomInterfaceAppearance
81
82
  };
@@ -1,59 +1,120 @@
1
- import { useActionsApi as C } from "./useActionsApi.js";
2
- import { useConfig as h } from "./useConfig.js";
3
- import { useToaster as D } from "./useToaster.js";
4
- import { useTranslations as E } from "./useTranslations.js";
5
- import { ToasterTypeOptions as f } from "../enums/toaster.js";
6
- import { useDynamicContentStore as A } from "../stores/dynamic-content.js";
7
- import { flattenDynamicContentList as w } from "../utils/genericUtil.js";
8
- import { extractUsedDynamicContent as S } from "../utils/registerUsedDynamicContent.js";
9
- import { ref as O } from "vue";
10
- const U = 250, o = O({}), s = {}, u = /* @__PURE__ */ new Map(), z = () => {
11
- const { updateHtmlAndCss: r } = C(), { showToaster: m } = D(), y = E(), { template: T } = h(), d = A(), g = (e, t) => {
12
- const a = y(e);
13
- return a === e ? t : a;
14
- }, v = (e) => {
15
- o.value[e] === void 0 && (o.value = { ...o.value, [e]: "pending" });
16
- }, l = (e, t, a) => {
17
- var c;
18
- o.value = { ...o.value, [e]: "applying" };
1
+ import { useActionsApi as x } from "./useActionsApi.js";
2
+ import { useConfig as N } from "./useConfig.js";
3
+ import { useEditorLock as K } from "./useEditorLock.js";
4
+ import { useToaster as R } from "./useToaster.js";
5
+ import { useTranslations as F } from "./useTranslations.js";
6
+ import { ToasterTypeOptions as v } from "../enums/toaster.js";
7
+ import { useDynamicContentStore as G } from "../stores/dynamic-content.js";
8
+ import { useEditorStore as $ } from "../stores/editor.js";
9
+ import { flattenDynamicContentList as j } from "../utils/genericUtil.js";
10
+ import { extractUsedDynamicContent as J } from "../utils/registerUsedDynamicContent.js";
11
+ import { ref as V, watch as W } from "vue";
12
+ const X = 250, U = 12e4, Y = 1e3, p = { status: "superseded" }, M = { status: "failed", error: new Error("Blueprint has no html to apply") }, a = V({}), A = /* @__PURE__ */ new Map(), m = /* @__PURE__ */ new Map(), s = /* @__PURE__ */ new Map(), c = /* @__PURE__ */ new Map(), u = /* @__PURE__ */ new Map();
13
+ let d = null;
14
+ const T = () => {
15
+ d && (clearInterval(d), d = null);
16
+ }, me = () => {
17
+ const { updateHtmlAndCss: i } = x(), { runExclusive: O } = K(), { showToaster: P } = R(), _ = F(), { template: b } = N(), L = G(), w = $(), g = (e, t) => {
19
18
  try {
20
- r(t, a).catch((n) => {
21
- console.warn("Editor did not acknowledge the template apply.", n);
22
- }), o.value = { ...o.value, [e]: "applied" };
23
- try {
24
- const n = w((c = T.value) == null ? void 0 : c.dynamicContentList), i = S(t, n);
25
- i.length > 0 && d.registerDynamicContent(i);
26
- } catch {
27
- }
28
- u.get(e) !== t && (u.set(e, t), m({
29
- type: f.Success,
30
- message: g("newsletter.ai-template-applied", "Template applied to the editor")
31
- }));
19
+ P({ type: e, message: _(t) });
20
+ } catch (o) {
21
+ console.error("[guido:apply] could not show the apply toast", o);
22
+ }
23
+ }, y = (e, t) => {
24
+ m.get(e) !== t && (m.set(e, t), g(v.Error, "newsletter.ai-template-failed-apply"));
25
+ }, h = () => {
26
+ var e, t;
27
+ return w.isStripoInitialized && typeof ((t = (e = window.StripoEditorApi) == null ? void 0 : e.actionsApi) == null ? void 0 : t.updateHtmlAndCss) == "function";
28
+ }, Q = (e) => {
29
+ a.value[e] === void 0 && (a.value = { ...a.value, [e]: "pending" });
30
+ }, l = (e, t) => {
31
+ a.value = { ...a.value, [e]: t };
32
+ }, H = (e) => {
33
+ var t;
34
+ try {
35
+ const o = j((t = b.value) == null ? void 0 : t.dynamicContentList), r = J(e, o);
36
+ r.length > 0 && L.registerDynamicContent(r);
37
+ } catch {
38
+ }
39
+ }, I = (e, t) => {
40
+ m.delete(e), A.get(e) !== t && (A.set(e, t), g(v.Success, "newsletter.ai-template-applied"));
41
+ }, C = async (e, t, o) => {
42
+ const r = (u.get(e) ?? 0) + 1;
43
+ u.set(e, r), l(e, "applying");
44
+ try {
45
+ await O(() => i(t, o));
32
46
  } catch (n) {
33
- o.value = { ...o.value, [e]: "failed" }, m({
34
- type: f.Error,
35
- message: n instanceof Error ? n.message : "Failed to apply template"
36
- });
47
+ return u.get(e) !== r ? p : (console.error("[guido:apply] editor did not acknowledge the template apply", n), l(e, "failed"), y(e, t), { status: "failed", error: n });
37
48
  }
38
- }, p = (e) => {
39
- const t = s[e];
40
- t && (clearTimeout(t), delete s[e]);
41
- };
42
- return { applyStatus: o, markPending: v, applyTemplate: (e, t) => {
43
- t.html && (p(e), l(e, t.html, t.css ?? ""));
44
- }, applyTemplateDebounced: (e, t) => {
45
- if (!t.html)
49
+ return u.get(e) !== r ? p : (l(e, "applied"), H(t), I(e, t), { status: "applied" });
50
+ }, z = (e) => {
51
+ const t = s.get(e);
52
+ t && (clearTimeout(t.timer), s.delete(e), t.settle(p));
53
+ }, D = (e) => {
54
+ const t = c.get(e);
55
+ t && (clearTimeout(t.timer), c.delete(e), t.settle(p));
56
+ }, B = () => {
57
+ [...c.keys()].forEach(D);
58
+ }, f = async () => {
59
+ if (s.size === 0) {
60
+ T();
46
61
  return;
47
- p(e);
48
- const { html: a } = t, c = t.css ?? "";
49
- s[e] = setTimeout(() => {
50
- delete s[e], l(e, a, c);
62
+ }
63
+ if (!h())
64
+ return;
65
+ T();
66
+ const e = [...s.entries()];
67
+ s.clear(), e.forEach(([, n]) => clearTimeout(n.timer));
68
+ const t = e.pop();
69
+ if (e.forEach(([n, E]) => {
70
+ l(n, "failed"), E.settle({ status: "failed", error: new Error("Displaced by a newer apply") });
71
+ }), !t)
72
+ return;
73
+ const [o, r] = t;
74
+ r.settle(await C(o, r.html, r.css));
75
+ }, q = (e, t, o) => new Promise((r) => {
76
+ z(e);
77
+ const n = setTimeout(() => {
78
+ s.delete(e), l(e, "failed"), y(e, t), r({
79
+ status: "failed",
80
+ error: new Error(`Editor did not become ready within ${U}ms`)
81
+ });
51
82
  }, U);
83
+ s.set(e, { html: t, css: o, timer: n, settle: r }), l(e, "applying"), d ?? (d = setInterval(() => {
84
+ f();
85
+ }, Y));
86
+ }), S = (e, t, o) => {
87
+ if (h() && s.size === 0)
88
+ return C(e, t, o);
89
+ const r = q(e, t, o);
90
+ return f(), r;
91
+ };
92
+ return W(() => w.isStripoInitialized, (e) => {
93
+ e && f();
94
+ }, { immediate: !0 }), { applyStatus: a, markPending: Q, applyTemplate: (e, t) => {
95
+ const { html: o } = t;
96
+ return o ? (B(), S(e, o, t.css ?? "")) : Promise.resolve(M);
97
+ }, applyTemplateDebounced: (e, t) => {
98
+ const { html: o } = t;
99
+ if (!o)
100
+ return Promise.resolve(M);
101
+ const r = t.css ?? "";
102
+ return new Promise((n) => {
103
+ D(e);
104
+ const E = setTimeout(() => {
105
+ c.delete(e), S(e, o, r).then(n);
106
+ }, X);
107
+ c.set(e, { timer: E, settle: n });
108
+ });
52
109
  } };
53
- }, G = () => {
54
- Object.values(s).forEach(clearTimeout), Object.keys(s).forEach((r) => delete s[r]), o.value = {};
110
+ }, de = () => {
111
+ c.forEach((i) => {
112
+ clearTimeout(i.timer), i.settle(p);
113
+ }), c.clear(), s.forEach((i) => {
114
+ clearTimeout(i.timer), i.settle(p);
115
+ }), s.clear(), T(), m.clear(), a.value = {};
55
116
  };
56
117
  export {
57
- G as resetEmailTemplateApplier,
58
- z as useEmailTemplateApplier
118
+ de as resetEmailTemplateApplier,
119
+ me as useEmailTemplateApplier
59
120
  };