@useinsider/guido 3.18.2-beta.963f84e → 3.18.2-beta.9be830c

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 (89) hide show
  1. package/dist/@types/config/schemas.js +15 -13
  2. package/dist/components/Guido.vue.js +7 -7
  3. package/dist/components/Guido.vue2.js +30 -30
  4. package/dist/components/organisms/AutoSaveController.vue2.js +10 -8
  5. package/dist/components/organisms/extensions/recommendation/AssignStrategyDrawer.vue.js +11 -13
  6. package/dist/components/organisms/extensions/recommendation/AssignStrategyDrawer.vue2.js +51 -70
  7. package/dist/components/organisms/extensions/recommendation/RemoveStrategyModal.vue2.js +37 -23
  8. package/dist/components/organisms/header/AutoSaveStatus.vue.js +17 -0
  9. package/dist/components/organisms/header/AutoSaveStatus.vue2.js +27 -0
  10. package/dist/components/organisms/header/EditorActions.vue.js +13 -13
  11. package/dist/components/organisms/header/EditorActions.vue2.js +36 -52
  12. package/dist/components/organisms/header/EditorActionsMenu.vue.js +20 -0
  13. package/dist/components/organisms/header/EditorActionsMenu.vue2.js +48 -0
  14. package/dist/components/organisms/header/HeaderWrapper.vue.js +6 -6
  15. package/dist/components/organisms/header/HeaderWrapper.vue2.js +9 -17
  16. package/dist/components/organisms/header/LeftSlot.vue.js +5 -5
  17. package/dist/components/organisms/header/LeftSlot.vue2.js +28 -23
  18. package/dist/components/organisms/header/MiddleSlot.vue.js +4 -4
  19. package/dist/components/organisms/header/MiddleSlot.vue2.js +8 -7
  20. package/dist/components/organisms/header/RightSlot.vue.js +9 -8
  21. package/dist/components/organisms/header/RightSlot.vue2.js +13 -18
  22. package/dist/components/organisms/header/accessibility/AccessibilityToolbar.vue.js +18 -0
  23. package/dist/components/organisms/header/accessibility/AccessibilityToolbar.vue2.js +37 -0
  24. package/dist/components/organisms/header/accessibility/ColorVisionSelect.vue.js +24 -0
  25. package/dist/components/organisms/header/accessibility/ColorVisionSelect.vue2.js +48 -0
  26. package/dist/components/organisms/onboarding/EditorTabBarOnboarding.vue.js +19 -0
  27. package/dist/components/organisms/onboarding/EditorTabBarOnboarding.vue2.js +82 -0
  28. package/dist/components/organisms/onboarding/OnboardingWrapper.vue.js +12 -12
  29. package/dist/components/organisms/onboarding/OnboardingWrapper.vue2.js +54 -38
  30. package/dist/composables/useAccessibilityApi.js +35 -0
  31. package/dist/composables/useCustomInterfaceAppearance.js +45 -52
  32. package/dist/composables/useHtmlValidator.js +82 -87
  33. package/dist/composables/useRecommendation.js +35 -40
  34. package/dist/composables/useStripo.js +30 -30
  35. package/dist/config/i18n/en/labels.json.js +36 -4
  36. package/dist/config/i18n/en/tooltips.json.js +2 -1
  37. package/dist/enums/extensions/recommendationBlock.js +31 -38
  38. package/dist/extensions/Blocks/Recommendation/block.js +39 -43
  39. package/dist/extensions/Blocks/Recommendation/constants/defaultConfig.js +20 -21
  40. package/dist/extensions/Blocks/Recommendation/controls/main/index.js +35 -40
  41. package/dist/extensions/Blocks/Recommendation/controls/main/strategy.js +52 -84
  42. package/dist/extensions/Blocks/Recommendation/controls/main/utils.js +74 -74
  43. package/dist/extensions/Blocks/Recommendation/store/recommendation.js +90 -189
  44. package/dist/extensions/Blocks/Recommendation/utils/nodeConfigWriter.js +16 -26
  45. package/dist/extensions/Blocks/Recommendation/validation/requiredFields.js +12 -21
  46. package/dist/guido.css +1 -1
  47. package/dist/node_modules/@vueuse/core/index.js +102 -0
  48. package/dist/node_modules/@vueuse/shared/index.js +40 -28
  49. package/dist/sprite.svg +6 -0
  50. package/dist/src/@types/config/schemas.d.ts +4 -0
  51. package/dist/src/components/organisms/AutoSaveController.vue.d.ts +3 -1
  52. package/dist/src/components/organisms/header/HeaderWrapper.vue.d.ts +1 -3
  53. package/dist/src/components/organisms/header/RightSlot.vue.d.ts +1 -3
  54. package/dist/src/components/organisms/header/accessibility/AccessibilityToolbar.vue.d.ts +2 -0
  55. package/dist/src/components/organisms/header/accessibility/ColorVisionSelect.vue.d.ts +2 -0
  56. package/dist/src/components/organisms/onboarding/EditorTabBarOnboarding.vue.d.ts +2 -0
  57. package/dist/src/composables/useAccessibilityApi.d.ts +15 -0
  58. package/dist/src/composables/useActionsApi.d.ts +2 -2
  59. package/dist/src/composables/useConfig.d.ts +2 -0
  60. package/dist/src/enums/extensions/recommendationBlock.d.ts +0 -2
  61. package/dist/src/extensions/Blocks/Recommendation/constants/defaultConfig.d.ts +0 -1
  62. package/dist/src/extensions/Blocks/Recommendation/constants/index.d.ts +1 -1
  63. package/dist/src/extensions/Blocks/Recommendation/controls/main/index.d.ts +0 -2
  64. package/dist/src/extensions/Blocks/Recommendation/controls/main/strategy.d.ts +0 -9
  65. package/dist/src/extensions/Blocks/Recommendation/controls/main/utils.d.ts +2 -7
  66. package/dist/src/extensions/Blocks/Recommendation/store/recommendation.d.ts +0 -75
  67. package/dist/src/extensions/Blocks/Recommendation/validation/requiredFields.d.ts +0 -4
  68. package/dist/src/stores/config.d.ts +18 -0
  69. package/dist/src/stores/editor.d.ts +107 -0
  70. package/dist/src/stores/onboarding.d.ts +195 -21
  71. package/dist/src/stores/version-history.d.ts +1 -1
  72. package/dist/src/utils/timeUtil.d.ts +10 -0
  73. package/dist/static/styles/components/accessibility.css.js +282 -0
  74. package/dist/static/styles/components/recommendation-strategy.css.js +4 -34
  75. package/dist/static/styles/variables.css.js +2 -0
  76. package/dist/stores/editor.js +13 -4
  77. package/dist/stores/onboarding.js +66 -50
  78. package/dist/utils/templatePreparation.js +55 -55
  79. package/dist/utils/timeUtil.js +7 -17
  80. package/package.json +1 -1
  81. package/dist/components/organisms/header/AutoSaveToggle.vue.js +0 -22
  82. package/dist/components/organisms/header/AutoSaveToggle.vue2.js +0 -19
  83. package/dist/components/organisms/onboarding/RecommendationStrategyOnboarding.vue.js +0 -21
  84. package/dist/components/organisms/onboarding/RecommendationStrategyOnboarding.vue2.js +0 -47
  85. package/dist/extensions/Blocks/Recommendation/utils/strategyCommit.js +0 -24
  86. package/dist/src/extensions/Blocks/Recommendation/utils/strategyCommit.d.ts +0 -14
  87. package/dist/static/styles/components/skeleton.css.js +0 -23
  88. /package/dist/src/components/organisms/header/{AutoSaveToggle.vue.d.ts → AutoSaveStatus.vue.d.ts} +0 -0
  89. /package/dist/src/components/organisms/{onboarding/RecommendationStrategyOnboarding.vue.d.ts → header/EditorActionsMenu.vue.d.ts} +0 -0
@@ -0,0 +1,102 @@
1
+ import { noop as b, isIOS as F, isClient as O, toValue as h, isObject as T, tryOnScopeDispose as C } from "../shared/index.js";
2
+ import { createFilterWrapper as x, debounceFilter as D, useDebounceFn as j } from "../shared/index.js";
3
+ import "../../vue-demi/lib/index.js";
4
+ import { watch as I } from "vue";
5
+ const P = O ? window : void 0;
6
+ function p(n) {
7
+ var i;
8
+ const o = h(n);
9
+ return (i = o == null ? void 0 : o.$el) != null ? i : o;
10
+ }
11
+ function k(...n) {
12
+ let i, o, r, d;
13
+ if (typeof n[0] == "string" || Array.isArray(n[0]) ? ([o, r, d] = n, i = P) : [i, o, r, d] = n, !i)
14
+ return b;
15
+ Array.isArray(o) || (o = [o]), Array.isArray(r) || (r = [r]);
16
+ const m = [], y = () => {
17
+ m.forEach((c) => c()), m.length = 0;
18
+ }, a = (c, l, u, f) => (c.addEventListener(l, u, f), () => c.removeEventListener(l, u, f)), E = I(
19
+ () => [p(i), h(d)],
20
+ ([c, l]) => {
21
+ if (y(), !c)
22
+ return;
23
+ const u = T(l) ? { ...l } : l;
24
+ m.push(
25
+ ...o.flatMap((f) => r.map((w) => a(c, f, w, u)))
26
+ );
27
+ },
28
+ { immediate: !0, flush: "post" }
29
+ ), A = () => {
30
+ E(), y();
31
+ };
32
+ return C(A), A;
33
+ }
34
+ let L = !1;
35
+ function $(n, i, o = {}) {
36
+ const { window: r = P, ignore: d = [], capture: m = !0, detectIframe: y = !1 } = o;
37
+ if (!r)
38
+ return b;
39
+ F && !L && (L = !0, Array.from(r.document.body.children).forEach((e) => e.addEventListener("click", b)), r.document.documentElement.addEventListener("click", b));
40
+ let a = !0;
41
+ const E = (e) => h(d).some((t) => {
42
+ if (typeof t == "string")
43
+ return Array.from(r.document.querySelectorAll(t)).some((s) => s === e.target || e.composedPath().includes(s));
44
+ {
45
+ const s = p(t);
46
+ return s && (e.target === s || e.composedPath().includes(s));
47
+ }
48
+ });
49
+ function A(e) {
50
+ const t = h(e);
51
+ return t && t.$.subTree.shapeFlag === 16;
52
+ }
53
+ function c(e, t) {
54
+ const s = h(e), v = s.$.subTree && s.$.subTree.children;
55
+ return v == null || !Array.isArray(v) ? !1 : v.some((g) => g.el === t.target || t.composedPath().includes(g.el));
56
+ }
57
+ const l = (e) => {
58
+ const t = p(n);
59
+ if (e.target != null && !(!(t instanceof Element) && A(n) && c(n, e)) && !(!t || t === e.target || e.composedPath().includes(t))) {
60
+ if (e.detail === 0 && (a = !E(e)), !a) {
61
+ a = !0;
62
+ return;
63
+ }
64
+ i(e);
65
+ }
66
+ };
67
+ let u = !1;
68
+ const f = [
69
+ k(r, "click", (e) => {
70
+ u || (u = !0, setTimeout(() => {
71
+ u = !1;
72
+ }, 0), l(e));
73
+ }, { passive: !0, capture: m }),
74
+ k(r, "pointerdown", (e) => {
75
+ const t = p(n);
76
+ a = !E(e) && !!(t && !e.composedPath().includes(t));
77
+ }, { passive: !0 }),
78
+ y && k(r, "blur", (e) => {
79
+ setTimeout(() => {
80
+ var t;
81
+ const s = p(n);
82
+ ((t = r.document.activeElement) == null ? void 0 : t.tagName) === "IFRAME" && !(s != null && s.contains(r.document.activeElement)) && i(e);
83
+ }, 0);
84
+ })
85
+ ].filter(Boolean);
86
+ return () => f.forEach((e) => e());
87
+ }
88
+ export {
89
+ x as createFilterWrapper,
90
+ D as debounceFilter,
91
+ P as defaultWindow,
92
+ O as isClient,
93
+ F as isIOS,
94
+ T as isObject,
95
+ b as noop,
96
+ $ as onClickOutside,
97
+ h as toValue,
98
+ C as tryOnScopeDispose,
99
+ p as unrefElement,
100
+ j as useDebounceFn,
101
+ k as useEventListener
102
+ };
@@ -1,45 +1,57 @@
1
1
  import "../../vue-demi/lib/index.js";
2
- import { unref as p } from "vue";
3
- function f(t) {
2
+ import { unref as p, getCurrentScope as w, onScopeDispose as m } from "vue";
3
+ function T(t) {
4
+ return w() ? (m(t), !0) : !1;
5
+ }
6
+ function a(t) {
4
7
  return typeof t == "function" ? t() : p(t);
5
8
  }
9
+ const g = typeof window < "u" && typeof document < "u";
6
10
  typeof WorkerGlobalScope < "u" && globalThis instanceof WorkerGlobalScope;
7
- const m = () => {
8
- };
9
- function h(t, n) {
10
- function r(...e) {
11
- return new Promise((i, o) => {
12
- Promise.resolve(t(() => n.apply(this, e), { fn: n, thisArg: this, args: e })).then(i).catch(o);
11
+ const b = Object.prototype.toString, j = (t) => b.call(t) === "[object Object]", f = () => {
12
+ }, x = /* @__PURE__ */ h();
13
+ function h() {
14
+ var t, n;
15
+ return g && ((t = window == null ? void 0 : window.navigator) == null ? void 0 : t.userAgent) && (/iP(?:ad|hone|od)/.test(window.navigator.userAgent) || ((n = window == null ? void 0 : window.navigator) == null ? void 0 : n.maxTouchPoints) > 2 && /iPad|Macintosh/.test(window == null ? void 0 : window.navigator.userAgent));
16
+ }
17
+ function v(t, n) {
18
+ function o(...e) {
19
+ return new Promise((r, i) => {
20
+ Promise.resolve(t(() => n.apply(this, e), { fn: n, thisArg: this, args: e })).then(r).catch(i);
13
21
  });
14
22
  }
15
- return r;
23
+ return o;
16
24
  }
17
- function T(t, n = {}) {
18
- let r, e, i = m;
19
- const o = (u) => {
20
- clearTimeout(u), i(), i = m;
25
+ function S(t, n = {}) {
26
+ let o, e, r = f;
27
+ const i = (u) => {
28
+ clearTimeout(u), r(), r = f;
21
29
  };
22
30
  return (u) => {
23
- const a = f(t), l = f(n.maxWait);
24
- return r && o(r), a <= 0 || l !== void 0 && l <= 0 ? (e && (o(e), e = null), Promise.resolve(u())) : new Promise((c, s) => {
25
- i = n.rejectOnCancel ? s : c, l && !e && (e = setTimeout(() => {
26
- r && o(r), e = null, c(u());
27
- }, l)), r = setTimeout(() => {
28
- e && o(e), e = null, c(u());
29
- }, a);
31
+ const s = a(t), c = a(n.maxWait);
32
+ return o && i(o), s <= 0 || c !== void 0 && c <= 0 ? (e && (i(e), e = null), Promise.resolve(u())) : new Promise((l, d) => {
33
+ r = n.rejectOnCancel ? d : l, c && !e && (e = setTimeout(() => {
34
+ o && i(o), e = null, l(u());
35
+ }, c)), o = setTimeout(() => {
36
+ e && i(e), e = null, l(u());
37
+ }, s);
30
38
  });
31
39
  };
32
40
  }
33
- function P(t, n = 200, r = {}) {
34
- return h(
35
- T(n, r),
41
+ function A(t, n = 200, o = {}) {
42
+ return v(
43
+ S(n, o),
36
44
  t
37
45
  );
38
46
  }
39
47
  export {
40
- h as createFilterWrapper,
41
- T as debounceFilter,
42
- m as noop,
43
- f as toValue,
44
- P as useDebounceFn
48
+ v as createFilterWrapper,
49
+ S as debounceFilter,
50
+ g as isClient,
51
+ x as isIOS,
52
+ j as isObject,
53
+ f as noop,
54
+ a as toValue,
55
+ T as tryOnScopeDispose,
56
+ A as useDebounceFn
45
57
  };
package/dist/sprite.svg CHANGED
@@ -3107,6 +3107,12 @@
3107
3107
  <symbol viewBox="0 0 24 24" data-token-name="line-replace-dynamic-content" id="line-replace-dynamic-content">
3108
3108
  <path fill-rule="evenodd" clip-rule="evenodd" d="M10.8327 5.42341C11.2222 5.81502 11.221 6.44877 10.8301 6.83894C10.8013 6.86765 10.7712 6.89425 10.74 6.91873L8.70549 8.95706C8.31533 9.34795 7.68275 9.34795 7.29259 8.95706C6.90243 8.56617 6.90243 7.93242 7.29259 7.54153L7.73664 7.09666L7.00053 7.09662C6.44823 7.0966 6.00049 7.54432 6.00049 8.09662V10.0001C6.00049 10.5524 5.55277 11.0001 5.00049 11.0001C4.4482 11.0001 4.00049 10.5524 4.00049 10.0001V8.09662C4.00049 6.43972 5.34372 5.09655 7.00062 5.09662L7.6872 5.09665L7.30179 4.70909C6.91235 4.31748 6.91353 3.68372 7.30442 3.29356C7.69531 2.9034 8.32788 2.90458 8.71732 3.29619L10.8327 5.42341ZM12 6.00024C12 4.89567 12.8954 4.00024 14 4.00024H18C19.1046 4.00024 20 4.89567 20 6.00024V10.0002C20 11.1048 19.1046 12.0002 18 12.0002H14C12.8954 12.0002 12 11.1048 12 10.0002V6.00024ZM14 6.00024H18V10.0002H14V6.00024ZM4 14.0002C4 12.8957 4.89543 12.0002 6 12.0002H10C11.1046 12.0002 12 12.8957 12 14.0002V18.0002C12 19.1048 11.1046 20.0002 10 20.0002H6C4.89543 20.0002 4 19.1048 4 18.0002V14.0002ZM6 14.0002H10V18.0002H6V14.0002ZM13.2939 17.1612C12.9031 17.5513 12.9019 18.1851 13.2913 18.5767L15.4067 20.7039C15.7961 21.0955 16.4287 21.0967 16.8196 20.7065C17.2105 20.3164 17.2117 19.6826 16.8222 19.291L16.4368 18.9034L17.1234 18.9035C18.7803 18.9035 20.1235 17.5604 20.1235 15.9035V14C20.1235 13.4477 19.6758 13 19.1235 13C18.5713 13 18.1235 13.4477 18.1235 14L18.1235 15.9035C18.1235 16.4558 17.6758 16.9035 17.1235 16.9035L16.3874 16.9034L16.8314 16.4586C17.2216 16.0677 17.2216 15.4339 16.8314 15.043C16.4413 14.6522 15.8087 14.6522 15.4185 15.043L13.384 17.0814C13.3528 17.1058 13.3227 17.1324 13.2939 17.1612Z"/>
3109
3109
  </symbol>
3110
+ <symbol viewBox="0 0 24 24" id="line-accessibility">
3111
+ <g transform="translate(2 2)">
3112
+ <rect x="1" y="1" width="18" height="18" rx="9" fill="none" stroke="currentColor" stroke-width="2"/>
3113
+ <path fill="currentColor" d="M14.8125 6.08473C15.332 5.94828 15.6875 6.47668 15.6875 6.95875C15.6873 7.44052 15.2498 7.66778 14.8125 7.8318C14.798 7.83727 14.7826 7.84147 14.7676 7.84547L12.3262 8.69898C12.013 8.81663 11.8784 8.93913 11.8486 8.99391C11.848 8.99533 11.8475 8.9975 11.8467 8.99879C11.8153 9.05489 11.7235 9.29227 11.8379 10.0076L11.9961 11.238L12.8887 16.0154C12.8969 16.0521 12.9036 16.0895 12.9092 16.1267C12.9741 16.5696 12.6498 16.9997 12.0342 16.9998C11.4983 16.9998 11.2617 16.63 11.1592 16.1267C11.1592 16.1267 10.3701 11.8181 9.9873 11.8181C9.60444 11.8205 8.94137 15.6235 8.83887 16.1267C8.7363 16.63 8.49971 16.9998 7.96387 16.9998C7.34999 16.9996 7.02548 16.5711 7.08887 16.1296L7.0957 16.0955C7.09789 16.0818 7.09981 16.0676 7.10254 16.0545L7.9834 11.2371L8.1416 10.0066C8.17359 9.80644 8.26392 9.23379 8.15137 8.9441C8.11665 8.85389 8.0452 8.7492 7.7793 8.64723L5.17962 7.83495C5.17734 7.83424 5.17578 7.83212 5.17578 7.82972C5.17578 7.82745 5.17437 7.82541 5.17224 7.8246C4.74007 7.66146 4.31254 7.43412 4.3125 6.95777C4.31258 6.47553 4.66813 5.9482 5.1875 6.08473C5.26161 6.10405 5.33481 6.12744 5.40625 6.15504C6.12486 6.3593 8.37146 6.9607 9.98828 6.9607C11.7281 6.96068 14.1981 6.26431 14.707 6.115C14.7342 6.10658 14.7619 6.09917 14.7891 6.09156L14.7998 6.08766L14.8125 6.08473ZM9.70117 3.02906C9.99821 2.96998 10.3061 3.00106 10.5859 3.11695C10.8657 3.23286 11.1052 3.42866 11.2734 3.68043C11.4416 3.93217 11.5312 4.22828 11.5312 4.53101C11.5308 4.93693 11.369 5.326 11.082 5.61305C10.795 5.9001 10.406 6.06183 10 6.06226C9.69721 6.06226 9.40119 5.97264 9.14941 5.80445C8.89762 5.63621 8.70086 5.39673 8.58496 5.11695C8.46918 4.83725 8.439 4.52909 8.49805 4.23219C8.55716 3.93526 8.70292 3.6621 8.91699 3.44801C9.13112 3.23391 9.4042 3.08814 9.70117 3.02906Z"/>
3114
+ </g>
3115
+ </symbol>
3110
3116
  <svg viewBox="0 0 24 24" data-token-name="line-advanced-settings" id="line-advanced-settings">
3111
3117
  <path fill-rule="evenodd" clip-rule="evenodd" d="M16 3C15.4477 3 15 3.44772 15 4V6V8C15 8.55228 15.4477 9 16 9C16.5523 9 17 8.55228 17 8V7H20C20.5523 7 21 6.55228 21 6C21 5.44772 20.5523 5 20 5H17V4C17 3.44772 16.5523 3 16 3ZM3 6C3 5.44772 3.44772 5 4 5H12C12.5523 5 13 5.44772 13 6C13 6.55228 12.5523 7 12 7H4C3.44772 7 3 6.55228 3 6ZM16 15C15.4477 15 15 15.4477 15 16V18V20C15 20.5523 15.4477 21 16 21C16.5523 21 17 20.5523 17 20V19H20C20.5523 19 21 18.5523 21 18C21 17.4477 20.5523 17 20 17H17V16C17 15.4477 16.5523 15 16 15ZM3 18C3 17.4477 3.44772 17 4 17H12C12.5523 17 13 17.4477 13 18C13 18.5523 12.5523 19 12 19H4C3.44772 19 3 18.5523 3 18ZM7 10C7 9.44772 7.44772 9 8 9C8.55228 9 9 9.44772 9 10V12V14C9 14.5523 8.55228 15 8 15C7.44772 15 7 14.5523 7 14V13H4C3.44772 13 3 12.5523 3 12C3 11.4477 3.44772 11 4 11H7V10ZM12 11C11.4477 11 11 11.4477 11 12C11 12.5523 11.4477 13 12 13H20C20.5523 13 21 12.5523 21 12C21 11.4477 20.5523 11 20 11H12Z"/>
3112
3118
  </svg>
@@ -391,6 +391,8 @@ export declare const FeaturesSchema: v.ObjectSchema<{
391
391
  readonly liquidSyntax: v.OptionalSchema<v.BooleanSchema<undefined>, false>;
392
392
  /** Enable autosave (3-min interval + tab-hide). User toggles on/off from the header. */
393
393
  readonly autosave: v.OptionalSchema<v.BooleanSchema<undefined>, false>;
394
+ /** Enable the Stripo Accessibility Checker control in the editor toolbar. */
395
+ readonly accessibilityTesting: v.OptionalSchema<v.BooleanSchema<undefined>, false>;
394
396
  /** Enable pre-save domain-allowlist validation (opt-in; Guido self-serves the block toaster) */
395
397
  readonly allowlistEnabled: v.OptionalSchema<v.BooleanSchema<undefined>, false>;
396
398
  /** Enable persistent link tracking-id assignment for the click heatmap (opt-in) */
@@ -791,6 +793,8 @@ export declare const GuidoConfigSchema: v.ObjectSchema<{
791
793
  readonly liquidSyntax: v.OptionalSchema<v.BooleanSchema<undefined>, false>;
792
794
  /** Enable autosave (3-min interval + tab-hide). User toggles on/off from the header. */
793
795
  readonly autosave: v.OptionalSchema<v.BooleanSchema<undefined>, false>;
796
+ /** Enable the Stripo Accessibility Checker control in the editor toolbar. */
797
+ readonly accessibilityTesting: v.OptionalSchema<v.BooleanSchema<undefined>, false>;
794
798
  /** Enable pre-save domain-allowlist validation (opt-in; Guido self-serves the block toaster) */
795
799
  readonly allowlistEnabled: v.OptionalSchema<v.BooleanSchema<undefined>, false>;
796
800
  /** Enable persistent link tracking-id assignment for the click heatmap (opt-in) */
@@ -1,2 +1,4 @@
1
- declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue/types/v3-component-options.js").ComponentOptionsMixin, import("vue/types/v3-component-options.js").ComponentOptionsMixin, {}, string, Readonly<import("vue").ExtractPropTypes<{}>>, {}>;
1
+ declare const _default: import("vue").DefineComponent<{}, {
2
+ saveSilent: () => Promise<Omit<import("../../@types/stripo").SavedTemplateDetails, "metadata" | "silent"> | undefined>;
3
+ }, {}, {}, {}, import("vue/types/v3-component-options.js").ComponentOptionsMixin, import("vue/types/v3-component-options.js").ComponentOptionsMixin, {}, string, Readonly<import("vue").ExtractPropTypes<{}>>, {}>;
2
4
  export default _default;
@@ -1,4 +1,2 @@
1
- declare const _default: import("vue").DefineComponent<{}, {
2
- handleSave: (isSilent: boolean) => Promise<Omit<import("../../../@types/stripo.js").SavedTemplateDetails, "metadata" | "silent"> | undefined> | undefined;
3
- }, {}, {}, {}, import("vue/types/v3-component-options.js").ComponentOptionsMixin, import("vue/types/v3-component-options.js").ComponentOptionsMixin, {}, string, Readonly<import("vue").ExtractPropTypes<{}>>, {}>;
1
+ declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue/types/v3-component-options.js").ComponentOptionsMixin, import("vue/types/v3-component-options.js").ComponentOptionsMixin, {}, string, Readonly<import("vue").ExtractPropTypes<{}>>, {}>;
4
2
  export default _default;
@@ -1,4 +1,2 @@
1
- declare const _default: import("vue").DefineComponent<{}, {
2
- handleSave: (isSilent: boolean) => Promise<Omit<import("../../../@types/stripo.js").SavedTemplateDetails, "metadata" | "silent"> | undefined> | undefined;
3
- }, {}, {}, {}, import("vue/types/v3-component-options.js").ComponentOptionsMixin, import("vue/types/v3-component-options.js").ComponentOptionsMixin, {}, string, Readonly<import("vue").ExtractPropTypes<{}>>, {}>;
1
+ declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue/types/v3-component-options.js").ComponentOptionsMixin, import("vue/types/v3-component-options.js").ComponentOptionsMixin, {}, string, Readonly<import("vue").ExtractPropTypes<{}>>, {}>;
4
2
  export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue/types/v3-component-options.js").ComponentOptionsMixin, import("vue/types/v3-component-options.js").ComponentOptionsMixin, {}, string, Readonly<import("vue").ExtractPropTypes<{}>>, {}>;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue/types/v3-component-options.js").ComponentOptionsMixin, import("vue/types/v3-component-options.js").ComponentOptionsMixin, {}, string, Readonly<import("vue").ExtractPropTypes<{}>>, {}>;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue/types/v3-component-options.js").ComponentOptionsMixin, import("vue/types/v3-component-options.js").ComponentOptionsMixin, {}, string, Readonly<import("vue").ExtractPropTypes<{}>>, {}>;
2
+ export default _default;
@@ -0,0 +1,15 @@
1
+ import type { ColorVisionDeficiency } from '@@/Types/api/accessibility-api';
2
+ export declare const useAccessibilityApi: () => {
3
+ openAccessibilityTestingMode: () => void;
4
+ closeAccessibilityTestingMode: () => void;
5
+ toggleAccessibilityTestingMode: () => void;
6
+ isAccessibilityTestingModeOpen: () => boolean;
7
+ showImages: () => void;
8
+ hideImages: () => void;
9
+ toggleImages: () => void;
10
+ setColorVisionDeficiency: (type: ColorVisionDeficiency) => void;
11
+ getColorVisionDeficiency: () => ColorVisionDeficiency;
12
+ switchToDesktopPreview: () => void;
13
+ switchToMobilePreview: () => void;
14
+ toggleCodeEditor: () => void;
15
+ };
@@ -1,5 +1,5 @@
1
- import type { CompileEmailOptions } from '@@/Types/actions-api';
2
- import { GetCompiledEmailOptions, CompiledEmailResult, TemplateData } from '@@/Types/actions-api';
1
+ import type { CompileEmailOptions } from '@@/Types/api/actions-api';
2
+ import { GetCompiledEmailOptions, CompiledEmailResult, TemplateData } from '@@/Types/api/actions-api';
3
3
  export declare const useActionsApi: () => {
4
4
  getCompiledEmail: (options?: GetCompiledEmailOptions) => Promise<CompiledEmailResult>;
5
5
  getTemplateData: () => Promise<TemplateData>;
@@ -97,6 +97,7 @@ export declare const useConfig: () => {
97
97
  modulesDisabled: boolean;
98
98
  liquidSyntax: boolean;
99
99
  autosave: boolean;
100
+ accessibilityTesting: boolean;
100
101
  allowlistEnabled: boolean;
101
102
  linkTrackingIds: boolean;
102
103
  reusableRecommendationStrategy: boolean;
@@ -232,6 +233,7 @@ export declare const useConfig: () => {
232
233
  modulesDisabled: boolean;
233
234
  liquidSyntax: boolean;
234
235
  autosave: boolean;
236
+ accessibilityTesting: boolean;
235
237
  allowlistEnabled: boolean;
236
238
  linkTrackingIds: boolean;
237
239
  reusableRecommendationStrategy: boolean;
@@ -5,9 +5,7 @@ export declare const URLS: {
5
5
  PRODUCT_ATTRIBUTES_PATH: string;
6
6
  RECOMMENDATION_STRATEGIES_PATH: string;
7
7
  RECOMMENDATION_STRATEGIES_PANEL_PATH: string;
8
- RECOMMENDATION_STRATEGY_CREATE_PATH: string;
9
8
  };
10
- export declare const strategyEditPath: (strategyId: string | number) => string;
11
9
  export declare const QUERY_PARAMS: {
12
10
  CLIENT_ID: string;
13
11
  };
@@ -10,7 +10,6 @@
10
10
  import type { RecommendationNodeConfig, CurrencyConfig, OmnibusTextConfig } from '../types/nodeConfig';
11
11
  export declare const PRE_RRS_CONFIG_VERSION = 1;
12
12
  export declare const CURRENT_CONFIG_VERSION = 2;
13
- export declare const RRS_CONFIG_VERSION = 2;
14
13
  /**
15
14
  * Default currency configuration
16
15
  * Uses USD as the base currency with standard formatting
@@ -10,4 +10,4 @@ export { RecommendationBlockId } from './blockIds';
10
10
  export { RecommendationControlId } from './controlIds';
11
11
  export { BLOCK_ROOT_SELECTOR, CONTAINER_SELECTOR, DESKTOP_CONTAINER_SELECTOR, MOBILE_CONTAINER_SELECTOR, MOBILE_ROW_SELECTOR, CSS_CLASS_RECO_BUTTON, CSS_CLASS_SKIP_COMPILE, RECOMMENDATION_VARIABLE_BUILTIN_ATTRIBUTES, CURRENCY_ATTR, ATTR_PRODUCT_IMAGE, ATTR_PRODUCT_NAME, ATTR_PRODUCT_PRICE, ATTR_PRODUCT_OLD_PRICE, ATTR_PRODUCT_OMNIBUS_PRICE, ATTR_PRODUCT_OMNIBUS_DISCOUNT, ATTR_PRODUCT_BUTTON, ATTR_RECOMMENDATION_TITLE, SELECTOR_TITLE_CELL, ATTR_CUSTOM_PREFIX, ATTR_DATA_CARD_COMPOSITION, ATTR_DATA_CUSTOM_ATTRIBUTES, ATTR_PRODUCT_ATTR, CSS_CLASS_ATTRIBUTE_ROW, CSS_CLASS_SPACER, SELECTOR_ATTRIBUTE_ROW, ATTR_DATA_ATTRIBUTE_TYPE, ATTR_DATA_VISIBILITY, PRODUCT_ATTRIBUTE_PREFIX, BUILT_IN_DEFAULT_ATTRIBUTES, } from './selectors';
12
12
  export { LAYOUT_VALUES, LAYOUT_OPTIONS, DEFAULT_PRODUCTS_PER_ROW, DEFAULT_CARDS_IN_ROW, DEFAULT_MOBILE_CARDS_IN_ROW, MAX_PRODUCT_COUNT, MIN_PRODUCT_COUNT, MAX_PRODUCTS_PER_ROW, MIN_PRODUCTS_PER_ROW, MAX_MOBILE_PRODUCTS_PER_ROW, MIN_MOBILE_PRODUCTS_PER_ROW, DEFAULT_COLUMN_SPACING, DEFAULT_ROW_SPACING, DEFAULT_MOBILE_COLUMN_SPACING, DEFAULT_MOBILE_ROW_SPACING, MIN_SPACING, MAX_SPACING, SPACING_STEP, } from './layout';
13
- export { DEFAULT_NODE_CONFIG, DEFAULT_CURRENCY, DEFAULT_COMPOSITION, DEFAULT_VISIBILITY, CURRENT_CONFIG_VERSION, PRE_RRS_CONFIG_VERSION, RRS_CONFIG_VERSION, EXCLUDED_ALGORITHM_IDS, } from './defaultConfig';
13
+ export { DEFAULT_NODE_CONFIG, DEFAULT_CURRENCY, DEFAULT_COMPOSITION, DEFAULT_VISIBILITY, CURRENT_CONFIG_VERSION, PRE_RRS_CONFIG_VERSION, EXCLUDED_ALGORITHM_IDS, } from './defaultConfig';
@@ -70,8 +70,6 @@ export declare class RecommendationBlockControl extends CommonControl {
70
70
  * state was rebuilt with (SD-150347).
71
71
  */
72
72
  private _syncNodeConfigIfChanged;
73
- /** Whether the deferred write would move the node's strategyId — see the caller (SD-149916). */
74
- private _isPendingStrategyIdChange;
75
73
  private _capturePendingNodeConfigWrite;
76
74
  /**
77
75
  * Accumulates the pending write into `documentModifier` without applying, so the
@@ -2,7 +2,6 @@ import { CommonControl } from '../../../common-control';
2
2
  export declare const STRATEGY_CONTROL_ID = "recommendation-strategy-control";
3
3
  export declare class StrategyControl extends CommonControl {
4
4
  private store;
5
- private onboardingStore;
6
5
  private storeUnsubscription;
7
6
  private listeners;
8
7
  private lastPaintedState;
@@ -10,14 +9,6 @@ export declare class StrategyControl extends CommonControl {
10
9
  getTemplate(): string;
11
10
  private _strategyAction;
12
11
  onRender(): void;
13
- /**
14
- * Whether the document itself says this block has no strategy.
15
- *
16
- * Read the node, not the store: when the main control cannot resolve the block id off the
17
- * node it never syncs the persisted config, so the store still holds defaults (empty
18
- * strategyId) for an assigned block.
19
- */
20
- private _isNodeUnassigned;
21
12
  onDestroy(): void;
22
13
  private _teardown;
23
14
  private _setupButtonListeners;
@@ -107,7 +107,7 @@ export interface RegenerateWithStylesOptions extends Omit<RegenerateProductRowsO
107
107
  * HTML removes the need for any post-rebuild reapply pass.
108
108
  * @param options - Configuration options for regeneration
109
109
  */
110
- export declare function regenerateProductRowsWithStyles(options: RegenerateWithStylesOptions): boolean;
110
+ export declare function regenerateProductRowsWithStyles(options: RegenerateWithStylesOptions): void;
111
111
  /**
112
112
  * Adjusts a products array to a target size.
113
113
  * Used by ProductLayoutControl to synchronously match products to the new size
@@ -151,11 +151,6 @@ export interface UpdateProductContentInPlaceOptions {
151
151
  currentNode: ImmutableHtmlNode | null | undefined;
152
152
  documentModifier: DocumentModifier;
153
153
  products: RecommendationProduct[];
154
- /**
155
- * Called when the batch was actually committed. Identical products commit nothing, which
156
- * leaves anything a caller staged into the same batch unwritten unless it applies itself.
157
- */
158
- onApplied?: () => void;
159
154
  }
160
155
  /**
161
156
  * Updates product content in-place without regenerating HTML structure.
@@ -166,7 +161,7 @@ export interface UpdateProductContentInPlaceOptions {
166
161
  * After updating desktop, also updates mobile container to keep them in sync.
167
162
  *
168
163
  * Falls back to false when product count changed (need to add/remove elements).
169
- * @param options - Configuration options; `onApplied` fires only when a batch was committed
164
+ * @param options - Configuration options
170
165
  * @returns true if in-place update was successful, false to fall back to full regeneration
171
166
  */
172
167
  export declare function updateProductContentInPlace(options: UpdateProductContentInPlaceOptions): boolean;
@@ -83,11 +83,8 @@ interface StoreState {
83
83
  strategies: RrsStrategy[];
84
84
  strategiesLoading: boolean;
85
85
  strategyUrlTemplates: Record<string, string>;
86
- strategiesFetched: boolean;
87
- strategiesSettled: boolean;
88
86
  blockStates: Record<number, PerBlockState>;
89
87
  currentRecommendationId: number | null;
90
- strategyPanelOpen: boolean;
91
88
  configVersion: number;
92
89
  }
93
90
  export declare const useRecommendationExtensionStore: import("pinia").StoreDefinition<"guidoRecommendationExtension", StoreState, {
@@ -114,11 +111,8 @@ export declare const useRecommendationExtensionStore: import("pinia").StoreDefin
114
111
  }[];
115
112
  strategiesLoading: boolean;
116
113
  strategyUrlTemplates: Record<string, string>;
117
- strategiesFetched: boolean;
118
- strategiesSettled: boolean;
119
114
  blockStates: Record<number, PerBlockState>;
120
115
  currentRecommendationId: number | null;
121
- strategyPanelOpen: boolean;
122
116
  configVersion: number;
123
117
  } & import("pinia").PiniaCustomStateProperties<StoreState>): PerBlockConfigs;
124
118
  /**
@@ -143,11 +137,8 @@ export declare const useRecommendationExtensionStore: import("pinia").StoreDefin
143
137
  }[];
144
138
  strategiesLoading: boolean;
145
139
  strategyUrlTemplates: Record<string, string>;
146
- strategiesFetched: boolean;
147
- strategiesSettled: boolean;
148
140
  blockStates: Record<number, PerBlockState>;
149
141
  currentRecommendationId: number | null;
150
- strategyPanelOpen: boolean;
151
142
  configVersion: number;
152
143
  } & import("pinia").PiniaCustomStateProperties<StoreState>): RecommendationProduct[];
153
144
  /**
@@ -172,11 +163,8 @@ export declare const useRecommendationExtensionStore: import("pinia").StoreDefin
172
163
  }[];
173
164
  strategiesLoading: boolean;
174
165
  strategyUrlTemplates: Record<string, string>;
175
- strategiesFetched: boolean;
176
- strategiesSettled: boolean;
177
166
  blockStates: Record<number, PerBlockState>;
178
167
  currentRecommendationId: number | null;
179
- strategyPanelOpen: boolean;
180
168
  configVersion: number;
181
169
  } & import("pinia").PiniaCustomStateProperties<StoreState>): boolean;
182
170
  assignStrategyDrawerStatus(state: {
@@ -198,11 +186,8 @@ export declare const useRecommendationExtensionStore: import("pinia").StoreDefin
198
186
  }[];
199
187
  strategiesLoading: boolean;
200
188
  strategyUrlTemplates: Record<string, string>;
201
- strategiesFetched: boolean;
202
- strategiesSettled: boolean;
203
189
  blockStates: Record<number, PerBlockState>;
204
190
  currentRecommendationId: number | null;
205
- strategyPanelOpen: boolean;
206
191
  configVersion: number;
207
192
  } & import("pinia").PiniaCustomStateProperties<StoreState>): boolean;
208
193
  removeStrategyModalStatus(state: {
@@ -224,11 +209,8 @@ export declare const useRecommendationExtensionStore: import("pinia").StoreDefin
224
209
  }[];
225
210
  strategiesLoading: boolean;
226
211
  strategyUrlTemplates: Record<string, string>;
227
- strategiesFetched: boolean;
228
- strategiesSettled: boolean;
229
212
  blockStates: Record<number, PerBlockState>;
230
213
  currentRecommendationId: number | null;
231
- strategyPanelOpen: boolean;
232
214
  configVersion: number;
233
215
  } & import("pinia").PiniaCustomStateProperties<StoreState>): boolean;
234
216
  assignedStrategy(state: {
@@ -250,11 +232,8 @@ export declare const useRecommendationExtensionStore: import("pinia").StoreDefin
250
232
  }[];
251
233
  strategiesLoading: boolean;
252
234
  strategyUrlTemplates: Record<string, string>;
253
- strategiesFetched: boolean;
254
- strategiesSettled: boolean;
255
235
  blockStates: Record<number, PerBlockState>;
256
236
  currentRecommendationId: number | null;
257
- strategyPanelOpen: boolean;
258
237
  configVersion: number;
259
238
  } & import("pinia").PiniaCustomStateProperties<StoreState>): RrsStrategy | null;
260
239
  /**
@@ -279,11 +258,8 @@ export declare const useRecommendationExtensionStore: import("pinia").StoreDefin
279
258
  }[];
280
259
  strategiesLoading: boolean;
281
260
  strategyUrlTemplates: Record<string, string>;
282
- strategiesFetched: boolean;
283
- strategiesSettled: boolean;
284
261
  blockStates: Record<number, PerBlockState>;
285
262
  currentRecommendationId: number | null;
286
- strategyPanelOpen: boolean;
287
263
  configVersion: number;
288
264
  } & import("pinia").PiniaCustomStateProperties<StoreState>): boolean;
289
265
  /**
@@ -308,11 +284,8 @@ export declare const useRecommendationExtensionStore: import("pinia").StoreDefin
308
284
  }[];
309
285
  strategiesLoading: boolean;
310
286
  strategyUrlTemplates: Record<string, string>;
311
- strategiesFetched: boolean;
312
- strategiesSettled: boolean;
313
287
  blockStates: Record<number, PerBlockState>;
314
288
  currentRecommendationId: number | null;
315
- strategyPanelOpen: boolean;
316
289
  configVersion: number;
317
290
  } & import("pinia").PiniaCustomStateProperties<StoreState>): number;
318
291
  hasFilters(): boolean;
@@ -338,11 +311,8 @@ export declare const useRecommendationExtensionStore: import("pinia").StoreDefin
338
311
  }[];
339
312
  strategiesLoading: boolean;
340
313
  strategyUrlTemplates: Record<string, string>;
341
- strategiesFetched: boolean;
342
- strategiesSettled: boolean;
343
314
  blockStates: Record<number, PerBlockState>;
344
315
  currentRecommendationId: number | null;
345
- strategyPanelOpen: boolean;
346
316
  configVersion: number;
347
317
  } & import("pinia").PiniaCustomStateProperties<StoreState>) => {
348
318
  text: string;
@@ -367,11 +337,8 @@ export declare const useRecommendationExtensionStore: import("pinia").StoreDefin
367
337
  }[];
368
338
  strategiesLoading: boolean;
369
339
  strategyUrlTemplates: Record<string, string>;
370
- strategiesFetched: boolean;
371
- strategiesSettled: boolean;
372
340
  blockStates: Record<number, PerBlockState>;
373
341
  currentRecommendationId: number | null;
374
- strategyPanelOpen: boolean;
375
342
  configVersion: number;
376
343
  } & import("pinia").PiniaCustomStateProperties<StoreState>) => {
377
344
  text: string;
@@ -396,11 +363,8 @@ export declare const useRecommendationExtensionStore: import("pinia").StoreDefin
396
363
  }[];
397
364
  strategiesLoading: boolean;
398
365
  strategyUrlTemplates: Record<string, string>;
399
- strategiesFetched: boolean;
400
- strategiesSettled: boolean;
401
366
  blockStates: Record<number, PerBlockState>;
402
367
  currentRecommendationId: number | null;
403
- strategyPanelOpen: boolean;
404
368
  configVersion: number;
405
369
  } & import("pinia").PiniaCustomStateProperties<StoreState>) => {
406
370
  text: string;
@@ -481,40 +445,6 @@ export declare const useRecommendationExtensionStore: import("pinia").StoreDefin
481
445
  openRemoveStrategyModal(): void;
482
446
  closeRemoveStrategyModal(): void;
483
447
  fetchStrategies(): Promise<void>;
484
- invalidateStrategies(): void;
485
- /**
486
- * Opens a Smart Recommender strategy page in a new tab and refreshes the list every time
487
- * the user comes back. `visibilitychange` only: a `focus` listener would also fire when
488
- * focus merely returns from the Stripo canvas iframe to the panel, refetching and
489
- * regenerating the canvas while the user never left the editor (SD-149916).
490
- *
491
- * Deliberately NOT one-shot: the strategy tab stays open, so a user can create a second
492
- * strategy in it and come back again — a listener that disarmed on the first return would
493
- * leave that one missing from the list. It disarms on the first return AFTER that tab is
494
- * closed instead, so an ordinary alt-tab later in the session costs nothing. Armed only
495
- * once the user actually opens a strategy page, so anyone who never does pays nothing.
496
- */
497
- _armStrategyPageReturn(url: string): void;
498
- /**
499
- * Reloads the products of the block the user is on, so an edit made in the strategy tab
500
- * lands on the canvas instead of waiting for the assign drawer to be reopened.
501
- *
502
- * Only the selected block: the canvas regeneration is driven off the active block's
503
- * product array, so refreshing an unselected block would fetch without redrawing it.
504
- */
505
- _refreshAssignedStrategyProducts(): Promise<void>;
506
- /** Lets the editor tear the return listeners down when it unmounts. */
507
- disposeStrategyPageReturn(): void;
508
- /**
509
- * Opens Smart Recommender's strategy creation page. Every return refreshes the list so the
510
- * new strategy is offered; the user picks it themselves.
511
- */
512
- openStrategyCreation(): void;
513
- /**
514
- * Opens the strategy's edit page. Every return refreshes the list so the block reflects the
515
- * edited configuration.
516
- */
517
- openStrategyEdit(strategyId: string | number): void;
518
448
  resolveStrategyUrlTemplate(strategy: RrsStrategy, currency: string): Promise<string>;
519
449
  assignStrategy(strategy: RrsStrategy): void;
520
450
  removeStrategy(): void;
@@ -532,11 +462,6 @@ export declare const useRecommendationExtensionStore: import("pinia").StoreDefin
532
462
  * every block's recommendationConfigs across user edits.
533
463
  */
534
464
  hasInvalidBlock(): boolean;
535
- /**
536
- * Which required fields are missing across the design's blocks, so the save
537
- * toaster can name the cause instead of always showing the generic message.
538
- */
539
- invalidBlockFields(): string[];
540
465
  fetchRecommendationProducts(): Promise<void>;
541
466
  _doFetchProducts(): Promise<void>;
542
467
  _doFetchStrategyProducts(blockId: number): Promise<void>;
@@ -15,11 +15,7 @@ export interface RequiredField {
15
15
  getAvailableOptions?: (store: ExtensionStoreSlice) => string[];
16
16
  condition?: (config: PerBlockConfigs) => boolean;
17
17
  }
18
- /** Field key of the strategy/algorithm descriptor, used to pick the toaster message. */
19
- export declare const STRATEGY_FIELD_KEY = "strategy";
20
18
  export declare const REQUIRED_RECOMMENDATION_FIELDS: RequiredField[];
21
19
  export declare const RecommendationRequiredFieldsKey = "newsletter.recommendation-fill-required-fields";
22
- /** Shown instead of the generic message when the only thing missing is the strategy. */
23
- export declare const RecommendationAssignStrategyKey = "newsletter.recommendation-assign-strategy";
24
20
  export declare function getInvalidFields(config: PerBlockConfigs, store: ExtensionStoreSlice, fields?: RequiredField[]): string[];
25
21
  export declare function isConfigValid(config: PerBlockConfigs, store: ExtensionStoreSlice): boolean;