@useinsider/guido 3.7.2-beta.6f556cb → 3.7.2-beta.a114aa7

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 (35) hide show
  1. package/dist/components/organisms/unsubscribe/UnsubscribeTypeSelection.vue.js +3 -3
  2. package/dist/components/organisms/unsubscribe/UnsubscribeTypeSelection.vue2.js +45 -47
  3. package/dist/composables/useHtmlValidator.js +180 -133
  4. package/dist/config/compiler/utils/recommendationCompilerUtils.js +28 -27
  5. package/dist/config/compiler/utils/recommendationIgnoreUtils.js +15 -0
  6. package/dist/config/migrator/recommendation/extractors.js +44 -22
  7. package/dist/config/migrator/recommendation/htmlBuilder.js +175 -169
  8. package/dist/config/migrator/recommendationMigrator.js +30 -31
  9. package/dist/extensions/Blocks/Recommendation/constants/selectors.js +21 -15
  10. package/dist/extensions/Blocks/Recommendation/controls/cardComposition/index.js +55 -41
  11. package/dist/extensions/Blocks/Recommendation/controls/main/index.js +43 -42
  12. package/dist/extensions/Blocks/Recommendation/controls/main/layoutOrientation.js +44 -33
  13. package/dist/extensions/Blocks/Recommendation/controls/main/productCount.js +3 -2
  14. package/dist/extensions/Blocks/Recommendation/controls/main/productLayout.js +59 -49
  15. package/dist/extensions/Blocks/Recommendation/controls/main/utils.js +89 -82
  16. package/dist/extensions/Blocks/Recommendation/controls/syncInfoMessage.js +7 -6
  17. package/dist/extensions/Blocks/Recommendation/extension.js +6 -5
  18. package/dist/extensions/Blocks/Recommendation/settingsPanel.js +3 -2
  19. package/dist/extensions/Blocks/Recommendation/store/recommendation.js +3 -2
  20. package/dist/extensions/Blocks/Recommendation/templates/grid/template.js +13 -12
  21. package/dist/extensions/Blocks/Recommendation/templates/index.js +5 -4
  22. package/dist/guido.css +1 -1
  23. package/dist/src/composables/useHtmlValidator.d.ts +27 -0
  24. package/dist/src/composables/useHtmlValidator.test.d.ts +1 -0
  25. package/dist/src/config/compiler/utils/recommendationIgnoreUtils.d.ts +17 -0
  26. package/dist/src/config/compiler/utils/recommendationIgnoreUtils.test.d.ts +1 -0
  27. package/dist/src/config/migrator/recommendation/extractors.d.ts +15 -0
  28. package/dist/src/config/migrator/recommendation/htmlBuilder.d.ts +8 -0
  29. package/dist/src/extensions/Blocks/Recommendation/constants/index.d.ts +1 -1
  30. package/dist/src/extensions/Blocks/Recommendation/constants/selectors.d.ts +21 -0
  31. package/dist/src/extensions/Blocks/Recommendation/controls/cardComposition/index.d.ts +7 -0
  32. package/dist/src/extensions/Blocks/Recommendation/controls/main/layoutOrientation.d.ts +5 -0
  33. package/dist/src/extensions/Blocks/Recommendation/controls/main/productLayout.d.ts +6 -0
  34. package/dist/src/extensions/Blocks/Recommendation/controls/main/utils.d.ts +9 -0
  35. package/package.json +1 -1
@@ -2,15 +2,15 @@ import n from "./UnsubscribeTypeSelection.vue2.js";
2
2
  /* empty css */
3
3
  import o from "../../../_virtual/_plugin-vue2_normalizer.js";
4
4
  var i = function() {
5
- var t = this, s = t._self._c, e = t._self._setupProxy;
6
- return s(e.WpDrawer, { attrs: { id: "unsubscribe-modal", "description-status": "", "description-text": e.descriptionText, "footer-button-group-options": e.footerButtonGroupOptions, status: e.unsubscribeStore.typeSelectionDrawerStatus, "title-text": e.trans("unsubscription-preference.select-unsubscribe-page-title") }, on: { cancelOrBackButtonEvent: e.closeModal, onCloseEvent: e.closeModal, primaryButtonEvent: e.selectCollection } }, [s(e.InSegments, { staticClass: "w-1", attrs: { "with-icon": "", align: "vertical", disable: e.isSelecting, "segment-list": e.segmentList, selected: e.selectedCollection, "skeleton-sizing": { width: 495, height: 180 }, "skeleton-status": e.skeletonStatus }, on: { click: e.changeCollection } })], 1);
5
+ var e = this, s = e._self._c, t = e._self._setupProxy;
6
+ return s(t.WpDrawer, { attrs: { id: "unsubscribe-modal", "description-status": "", "description-text": t.descriptionText, "footer-button-group-options": t.footerButtonGroupOptions, status: t.unsubscribeStore.typeSelectionDrawerStatus, "title-text": t.trans("unsubscription-preference.select-unsubscribe-page-title") }, on: { cancelOrBackButtonEvent: t.closeModal, onCloseEvent: t.closeModal, primaryButtonEvent: t.selectCollection } }, [s(t.InSegments, { staticClass: "w-1", attrs: { "with-icon": "", align: "vertical", disable: t.isSelecting, "segment-list": t.segmentList, selected: t.selectedCollection, "skeleton-sizing": { width: 495, height: 180 }, "skeleton-status": t.skeletonStatus }, on: { click: t.changeCollection } })], 1);
7
7
  }, r = [], c = /* @__PURE__ */ o(
8
8
  n,
9
9
  i,
10
10
  r,
11
11
  !1,
12
12
  null,
13
- "18e1220a"
13
+ "43c617a7"
14
14
  );
15
15
  const _ = c.exports;
16
16
  export {
@@ -1,110 +1,108 @@
1
- import { defineComponent as v, ref as b, computed as f, watch as _ } from "vue";
2
- import U from "../../wrappers/WpDrawer.vue.js";
3
- import { useToaster as N } from "../../../composables/useToaster.js";
4
- import { useTranslations as w } from "../../../composables/useTranslations.js";
5
- import { ACADEMY_LINKS as D } from "../../../enums/academy.js";
6
- import { ToasterTypeOptions as P } from "../../../enums/toaster.js";
7
- import { PAGE_TYPES as l, getTypeTranslations as R, UNSUBSCRIBE_PAGES_LINK as G } from "../../../enums/unsubscribe.js";
8
- import { useUnsubscribeStore as I } from "../../../stores/unsubscribe.js";
9
- import { InSegments as L } from "@useinsider/design-system-vue";
10
- const W = /* @__PURE__ */ v({
1
+ import { defineComponent as h, ref as b, computed as g, watch as _ } from "vue";
2
+ import v from "../../wrappers/WpDrawer.vue.js";
3
+ import { useToaster as U } from "../../../composables/useToaster.js";
4
+ import { useTranslations as N } from "../../../composables/useTranslations.js";
5
+ import { ACADEMY_LINKS as w } from "../../../enums/academy.js";
6
+ import { ToasterTypeOptions as R } from "../../../enums/toaster.js";
7
+ import { PAGE_TYPES as l, getTypeTranslations as D, UNSUBSCRIBE_PAGES_LINK as I } from "../../../enums/unsubscribe.js";
8
+ import { useUnsubscribeStore as P } from "../../../stores/unsubscribe.js";
9
+ import { InSegments as G } from "@useinsider/design-system-vue";
10
+ const V = /* @__PURE__ */ h({
11
11
  __name: "UnsubscribeTypeSelection",
12
- setup(O) {
13
- const t = w(), { showToaster: d } = N(), e = I(), n = b(!1), i = b(!0), o = b(l.GLOBAL_UNSUBSCRIBE), T = t(
12
+ setup(L) {
13
+ const e = N(), { showToaster: f } = U(), t = P(), n = b(!1), i = b(!0), o = b(l.GLOBAL_UNSUBSCRIBE), S = e(
14
14
  "unsubscription-preference.select-unsubscribe-page-description",
15
- { action: `<a href="${D.GLOBAL_UNSUBSCRIBE}" target="_blank">${t("ds-rules.visit-academy")}</a>` }
16
- ), y = f(() => [
15
+ { action: `<a href="${w.GLOBAL_UNSUBSCRIBE}" target="_blank">${e("ds-rules.visit-academy")}</a>` }
16
+ ), T = g(() => [
17
17
  {
18
- description: t("unsubscription-preference.type-global-unsubscribe-description"),
18
+ description: e("unsubscription-preference.type-global-unsubscribe-description"),
19
19
  icon: "line-contact-global-unsub-page",
20
- text: t("unsubscription-preference.type-global-unsubscribe"),
20
+ text: e("unsubscription-preference.type-global-unsubscribe"),
21
21
  value: l.GLOBAL_UNSUBSCRIBE,
22
- disable: e.isGlobalUnsubscribeDisabled,
22
+ disable: t.isGlobalUnsubscribeDisabled,
23
23
  position: "bottom",
24
- tooltipText: e.isGlobalUnsubscribeDisabled ? t("unsubscription-preference.global-unsub-added") : ""
24
+ tooltipText: t.isGlobalUnsubscribeDisabled ? e("unsubscription-preference.global-unsub-added") : ""
25
25
  },
26
26
  {
27
- description: t("unsubscription-preference.type-subscription-preferences-center-description"),
27
+ description: e("unsubscription-preference.type-subscription-preferences-center-description"),
28
28
  icon: "line-contact-sub-pref-center-page",
29
- text: t("unsubscription-preference.type-subscription-preferences-center"),
29
+ text: e("unsubscription-preference.type-subscription-preferences-center"),
30
30
  value: l.SUBSCRIPTION_PREFERENCE_CENTER,
31
- disable: e.isSubscriptionPreferencesCenterDisabled,
32
- tooltipText: e.isSubscriptionPreferencesCenterDisabled ? t("unsubscription-preference.pref-center-added") : ""
31
+ disable: t.isSubscriptionPreferencesCenterDisabled,
32
+ tooltipText: t.isSubscriptionPreferencesCenterDisabled ? e("unsubscription-preference.pref-center-added") : ""
33
33
  }
34
- ]), S = f(
35
- () => e.isGlobalUnsubscribeDisabled && e.isSubscriptionPreferencesCenterDisabled
36
- ), C = f(() => ({
34
+ ]), y = g(() => ({
37
35
  primaryButton: {
38
36
  styling: "solid",
39
37
  type: "primary",
40
- labelText: t(
38
+ labelText: e(
41
39
  n.value ? "unsubscription-preference.selecting-type" : "products.select-and-continue"
42
40
  ),
43
41
  loadingStatus: n.value,
44
- disabledStatus: S.value,
42
+ disabledStatus: !1,
45
43
  skeletonStatus: i.value,
46
44
  skeletonSizing: { width: 168, height: 40 }
47
45
  },
48
46
  cancelOrBackButton: {
49
47
  styling: "ghost",
50
48
  type: "secondary",
51
- labelText: t("products.cancel"),
49
+ labelText: e("products.cancel"),
52
50
  disabledStatus: n.value,
53
51
  skeletonStatus: i.value,
54
52
  skeletonSizing: { width: 78, height: 40 }
55
53
  }
56
- })), m = (s) => {
57
- e.typeSelectionDrawerStatus = !1, document.dispatchEvent(new CustomEvent("unsubscribe:cancel")), s && setTimeout(() => {
54
+ })), d = (s) => {
55
+ t.typeSelectionDrawerStatus = !1, document.dispatchEvent(new CustomEvent("unsubscribe:cancel")), s && setTimeout(() => {
58
56
  s();
59
57
  }, 500);
60
58
  }, E = (s) => {
61
59
  o.value = s;
62
- }, g = () => {
63
- const s = e.hasTemplatesByCollectionType, r = [];
60
+ }, m = () => {
61
+ const s = t.hasTemplatesByCollectionType, r = [];
64
62
  if (Object.entries(s).forEach(([c, p]) => {
65
63
  p || r.push(Number(c));
66
64
  }), r.length === 0)
67
65
  return !0;
68
- const B = R(), a = r.map((c) => B[c]);
66
+ const B = D(), a = r.map((c) => B[c]);
69
67
  let u = "";
70
68
  if (r.length === 1)
71
- u = t("unsubscription-preference.create-page-to-continue", {
69
+ u = e("unsubscription-preference.create-page-to-continue", {
72
70
  page: a[0]
73
71
  });
74
72
  else if (r.length === 2)
75
- u = t("unsubscription-preference.create-pages-to-continue", {
73
+ u = e("unsubscription-preference.create-pages-to-continue", {
76
74
  page1: a[0],
77
75
  page2: a[1]
78
76
  });
79
77
  else {
80
78
  const c = a.pop() ?? "", p = a.join(", ");
81
- u = t("unsubscription-preference.create-multiple-pages-to-continue", {
79
+ u = e("unsubscription-preference.create-multiple-pages-to-continue", {
82
80
  pages: p,
83
81
  lastPage: c
84
82
  });
85
83
  }
86
- return d({
87
- type: P.Warning,
84
+ return f({
85
+ type: R.Warning,
88
86
  message: u,
89
87
  actionButton: {
90
88
  text: "Go to Unsubscribe Pages",
91
89
  onClick: () => {
92
- window.location.href = G;
90
+ window.location.href = I;
93
91
  }
94
92
  }
95
93
  }), !1;
96
- }, h = async () => {
97
- if (n.value = !0, await e.fetchTemplates(), e.setCollection(o.value), !g()) {
98
- n.value = !1, m();
94
+ }, C = async () => {
95
+ if (n.value = !0, await t.fetchTemplates(), t.setCollection(o.value), !m()) {
96
+ n.value = !1, d();
99
97
  return;
100
98
  }
101
- n.value = !1, e.typeSelectionDrawerStatus = !1, e.pageSelectionDrawerStatus = !0;
99
+ n.value = !1, t.typeSelectionDrawerStatus = !1, t.pageSelectionDrawerStatus = !0;
102
100
  };
103
- return _(() => e.typeSelectionDrawerStatus, (s) => {
104
- s && (i.value = !0, o.value = l.GLOBAL_UNSUBSCRIBE, e.isGlobalUnsubscribeDisabled && (o.value = e.isSubscriptionPreferencesCenterDisabled ? 0 : l.SUBSCRIPTION_PREFERENCE_CENTER), i.value = !1);
105
- }), { __sfc: !0, trans: t, showToaster: d, unsubscribeStore: e, isSelecting: n, skeletonStatus: i, selectedCollection: o, descriptionText: T, segmentList: y, hasNoSelectableType: S, footerButtonGroupOptions: C, closeModal: m, changeCollection: E, validateTemplates: g, selectCollection: h, WpDrawer: U, InSegments: L };
101
+ return _(() => t.typeSelectionDrawerStatus, (s) => {
102
+ s && (i.value = !0, o.value = l.GLOBAL_UNSUBSCRIBE, t.isGlobalUnsubscribeDisabled && (o.value = t.isSubscriptionPreferencesCenterDisabled ? 0 : l.SUBSCRIPTION_PREFERENCE_CENTER), i.value = !1);
103
+ }), { __sfc: !0, trans: e, showToaster: f, unsubscribeStore: t, isSelecting: n, skeletonStatus: i, selectedCollection: o, descriptionText: S, segmentList: T, footerButtonGroupOptions: y, closeModal: d, changeCollection: E, validateTemplates: m, selectCollection: C, WpDrawer: v, InSegments: G };
106
104
  }
107
105
  });
108
106
  export {
109
- W as default
107
+ V as default
110
108
  };
@@ -1,172 +1,219 @@
1
- import { useConfig as V } from "./useConfig.js";
2
- import { TemplateTypes as G } from "../enums/defaults.js";
3
- import { DISPLAY_CONDITIONS_REGEX as H, DISPLAY_CONDITIONS_EXCEPTIONS_REGEX as M, CampaignCouldNotBeSavedKey as X, CanNotMakeAnyChangesForRunningKey as P, DATA_ATTRIBUTE_REGEX as Y, DYNAMIC_CONTENT_TAG_REGEX as $, ALLOWED_DYNAMIC_SYSTEM_TOKENS as q, VALID_DYNAMIC_VARIABLE_REGEX as K } from "../enums/html-validator.js";
1
+ import { useConfig as W } from "./useConfig.js";
2
+ import { getIgnoredRecommendationBlockIds as G } from "../config/compiler/utils/recommendationIgnoreUtils.js";
3
+ import { TemplateTypes as H } from "../enums/defaults.js";
4
+ import { DISPLAY_CONDITIONS_REGEX as P, DISPLAY_CONDITIONS_EXCEPTIONS_REGEX as X, CampaignCouldNotBeSavedKey as $, CanNotMakeAnyChangesForRunningKey as Y, DATA_ATTRIBUTE_REGEX as U, DYNAMIC_CONTENT_TAG_REGEX as j, ALLOWED_DYNAMIC_SYSTEM_TOKENS as q, VALID_DYNAMIC_VARIABLE_REGEX as K } from "../enums/html-validator.js";
4
5
  import { ToasterTypeOptions as c } from "../enums/toaster.js";
5
- import { itemsBlockDynamicVariables as j } from "../extensions/Blocks/Items/enums/productEnums.js";
6
- import { useRecommendationExtensionStore as U } from "../extensions/Blocks/Recommendation/store/recommendation.js";
7
- import { RecommendationRequiredFieldsKey as z } from "../extensions/Blocks/Recommendation/validation/requiredFields.js";
8
- import { useRecommendationStore as Z } from "../stores/recommendation.js";
9
- import { base64EncodeWithSpecialChars as J } from "../utils/base64.js";
10
- import { useHttp as Q } from "./useHttp.js";
11
- import { useToaster as ee } from "./useToaster.js";
12
- import { useTranslations as te } from "./useTranslations.js";
13
- const se = /recommendation-id="(\d+)"/g;
14
- function ne(i) {
15
- return [...i.matchAll(se)].map((d) => d[1]);
6
+ import { itemsBlockDynamicVariables as z } from "../extensions/Blocks/Items/enums/productEnums.js";
7
+ import { RECOMMENDATION_VARIABLE_BUILTIN_ATTRIBUTES as Z } from "../extensions/Blocks/Recommendation/constants/selectors.js";
8
+ import { useRecommendationExtensionStore as J } from "../extensions/Blocks/Recommendation/store/recommendation.js";
9
+ import { resolveProductAttrValue as Q } from "../extensions/Blocks/Recommendation/templates/utils.js";
10
+ import { RecommendationRequiredFieldsKey as ee } from "../extensions/Blocks/Recommendation/validation/requiredFields.js";
11
+ import { useRecommendationStore as te } from "../stores/recommendation.js";
12
+ import { base64EncodeWithSpecialChars as ne } from "../utils/base64.js";
13
+ import { useHttp as se } from "./useHttp.js";
14
+ import { useToaster as oe } from "./useToaster.js";
15
+ import { useTranslations as ie } from "./useTranslations.js";
16
+ const re = /recommendation-id="(\d+)"/g;
17
+ function ae(t) {
18
+ return [...t.matchAll(re)].map((m) => m[1]);
16
19
  }
17
- function ie(i, d) {
18
- return d.some((g) => i.startsWith(`${g}_`));
20
+ function ce(t, m) {
21
+ return m.some((f) => t.startsWith(`${f}_`));
19
22
  }
20
- function oe(i) {
21
- return (i.replace(Y, "$1").match($) ?? []).filter((r) => {
22
- const u = r.slice(2, -2), f = u.indexOf("|"), p = (f === -1 ? u : u.slice(0, f)).trim();
23
- return q.includes(p) ? !1 : K.test(p) ? f !== -1 && u.slice(f + 1).trim() === "" : !0;
23
+ const le = /^(\d+)_\d+_(.+)$/;
24
+ function me(t) {
25
+ const m = t.match(le);
26
+ return m ? { recoId: m[1], attribute: m[2] } : null;
27
+ }
28
+ function ue(t) {
29
+ const m = new Set(Z);
30
+ return Object.values(t).forEach((f) => {
31
+ m.add(Q(f.attributeName, t).toLowerCase());
32
+ }), m;
33
+ }
34
+ function de(t, m, f, i, d) {
35
+ const u = t.match(/{{([a-zA-Z0-9_.\s]*)}}/gm);
36
+ if (!u)
37
+ return [];
38
+ const p = new Set(m.map((y) => y.toLowerCase())), h = [];
39
+ return u.forEach((y) => {
40
+ const g = y.slice(2, -2).trim().toLowerCase();
41
+ if (g !== "" && p.has(g))
42
+ return;
43
+ const E = me(g);
44
+ if (E && i.has(E.recoId)) {
45
+ if (!d || d.has(E.attribute))
46
+ return;
47
+ h.push(g);
48
+ return;
49
+ }
50
+ ce(g, f) || g.includes(".") || h.push(g);
51
+ }), h;
52
+ }
53
+ function fe(t) {
54
+ return (t.replace(U, "$1").match(j) ?? []).filter((i) => {
55
+ const d = i.slice(2, -2), u = d.indexOf("|"), p = (u === -1 ? d : d.slice(0, u)).trim();
56
+ return q.includes(p) ? !1 : K.test(p) ? u !== -1 && d.slice(u + 1).trim() === "" : !0;
24
57
  });
25
58
  }
26
- const Ce = () => {
27
- var h, v;
28
- const { showToaster: i } = ee(), { post: d } = Q(), { config: g } = V(), r = te(), u = Z(), f = U(), p = ((v = (h = g.value) == null ? void 0 : h.partner) == null ? void 0 : v.messageType) === G.transactional, A = async (e) => {
29
- const t = await d(
59
+ const xe = () => {
60
+ var I, b;
61
+ const { showToaster: t } = oe(), { post: m } = se(), { config: f } = W(), i = ie(), d = te(), u = J(), p = ((b = (I = f.value) == null ? void 0 : I.partner) == null ? void 0 : b.messageType) === H.transactional, h = async (e) => {
62
+ if (e.size === 0)
63
+ return /* @__PURE__ */ new Set();
64
+ try {
65
+ await u.fetchRecommendationFilters();
66
+ } catch {
67
+ return null;
68
+ }
69
+ return ue(u.filterList);
70
+ }, y = async (e) => {
71
+ const n = await m(
30
72
  "/newsletter/template-library/check-template-html-body",
31
- { html: J(e) }
32
- ), { status: n, message: l } = t.data;
33
- return n || i({
73
+ { html: ne(e) }
74
+ ), { status: o, message: a } = n.data;
75
+ return o || t({
34
76
  type: c.Alert,
35
- message: n === void 0 ? l : r("newsletter.invalid-url-link-for-toaster")
36
- }), r(X), l === r(P) && i({
77
+ message: o === void 0 ? a : i("newsletter.invalid-url-link-for-toaster")
78
+ }), i($), a === i(Y) && t({
37
79
  type: c.Alert,
38
- message: r("newsletter.already-in-progress")
39
- }), n;
40
- }, S = (e) => !["if", "endif", "else", "elif", "now"].includes(e.toLowerCase()), b = (e) => ["if", "endif"].includes(e.toLowerCase()), I = (e, s) => {
41
- const t = e.match(/({%(.*?)%})/g);
42
- let n = !0;
43
- return t !== null && !p && t.forEach((l) => {
44
- const o = l.slice(2, -2).trim().match(/(".*?"|[^"\s]+)(?=\s*|\s*$)/g);
45
- if (o && o.length > 0) {
46
- const [a] = o;
47
- S(a) && !s.includes(a) && (i({
80
+ message: i("newsletter.already-in-progress")
81
+ }), o;
82
+ }, g = (e) => !["if", "endif", "else", "elif", "now"].includes(e.toLowerCase()), E = (e) => ["if", "endif"].includes(e.toLowerCase()), T = (e, s) => {
83
+ const n = e.match(/({%(.*?)%})/g);
84
+ let o = !0;
85
+ return n !== null && !p && n.forEach((a) => {
86
+ const r = a.slice(2, -2).trim().match(/(".*?"|[^"\s]+)(?=\s*|\s*$)/g);
87
+ if (r && r.length > 0) {
88
+ const [l] = r;
89
+ g(l) && !s.includes(l) && (t({
48
90
  type: c.Warning,
49
- message: r("custom-fields.invalid-custom-fields")
50
- }), n = !1);
91
+ message: i("custom-fields.invalid-custom-fields")
92
+ }), o = !1);
51
93
  }
52
- }), n;
53
- }, T = async (e, s, t) => {
54
- const n = t ? await A(e) : !0;
55
- return I(e, s) && n;
56
- }, w = (e) => e.length > 0 ? !0 : (i({
94
+ }), o;
95
+ }, w = async (e, s, n) => {
96
+ const o = n ? await y(e) : !0;
97
+ return T(e, s) && o;
98
+ }, R = (e) => e.length > 0 ? !0 : (t({
57
99
  type: c.Warning,
58
- message: r("newsletter.html-content-is-empty")
59
- }), !1), x = (e) => {
60
- const s = (e.match(/{/gm) || []).length, t = (e.match(/}/gm) || []).length;
61
- return s > t && i({
100
+ message: i("newsletter.html-content-is-empty")
101
+ }), !1), _ = (e) => {
102
+ const s = (e.match(/{/gm) || []).length, n = (e.match(/}/gm) || []).length;
103
+ return s > n && t({
62
104
  type: c.Warning,
63
- message: r("custom-fields.missing-closing-braces")
64
- }), s < t && i({
105
+ message: i("custom-fields.missing-closing-braces")
106
+ }), s < n && t({
65
107
  type: c.Warning,
66
- message: r("custom-fields.missing-opening-braces")
67
- }), s === t;
68
- }, _ = (e) => {
69
- const s = oe(e).length === 0;
70
- return s || i({
108
+ message: i("custom-fields.missing-opening-braces")
109
+ }), s === n;
110
+ }, N = (e) => {
111
+ const s = fe(e).length === 0;
112
+ return s || t({
71
113
  type: c.Warning,
72
- message: r("custom-fields.invalid-custom-fields")
114
+ message: i("custom-fields.invalid-custom-fields")
73
115
  }), s;
74
- }, k = (e, s) => {
75
- const t = e.match(/{{([a-zA-Z0-9_\s]*)}}/gm);
76
- if (t && !p) {
77
- const n = new Set(s.map((a) => a.toLowerCase())), l = ne(e), o = [];
78
- if (t.forEach((a) => {
79
- const m = a.slice(2, -2).trim().toLowerCase();
80
- (!n.has(m) || m === "") && !ie(m, l) && o.push(m);
81
- }), o.length > 0) {
82
- const a = `
83
- <ul>
84
- ${o.map((m) => `<li>${m}</li>`).join("")}
85
- </ul>
86
- `;
87
- return i({
88
- type: c.Alert,
89
- message: r("custom-fields.invalid-custom-fields") + a
90
- }), !1;
91
- }
116
+ }, x = (e, s, n, o) => {
117
+ if (p)
118
+ return !0;
119
+ const a = de(
120
+ e,
121
+ s,
122
+ ae(e),
123
+ n,
124
+ o
125
+ );
126
+ if (a.length > 0) {
127
+ const r = `
128
+ <ul>
129
+ ${a.map((l) => `<li>${l}</li>`).join("")}
130
+ </ul>
131
+ `;
132
+ return t({
133
+ type: c.Alert,
134
+ message: i("custom-fields.invalid-custom-fields") + r
135
+ }), !1;
92
136
  }
93
137
  return !0;
94
- }, R = (e) => {
95
- const s = e.match(/{%(.*?)%}/g), t = [];
96
- let n = !0;
97
- if (s && s.forEach((l) => {
98
- const o = l.match(H), a = l.match(M), m = (o == null ? void 0 : o.join("")) || "";
99
- (!o || l !== m) && !a && (i({
138
+ }, O = (e) => {
139
+ const s = e.match(/{%(.*?)%}/g), n = [];
140
+ let o = !0;
141
+ if (s && s.forEach((a) => {
142
+ const r = a.match(P), l = a.match(X), v = (r == null ? void 0 : r.join("")) || "";
143
+ (!r || a !== v) && !l && (t({
100
144
  type: c.Alert,
101
- message: r("newsletter.display-conditions-invalid-syntax")
102
- }), n = !1), o && o.forEach((y) => {
103
- y.trim() === "=" && (i({
145
+ message: i("newsletter.display-conditions-invalid-syntax")
146
+ }), o = !1), r && r.forEach((C) => {
147
+ C.trim() === "=" && (t({
104
148
  type: c.Alert,
105
- message: r("custom-conditions.wrong-equality-operators")
106
- }), n = !1);
107
- const C = y.match(/^[a-zA-Z]*$/g);
108
- C && C.forEach((E) => {
109
- b(E) && t.push(E);
149
+ message: i("custom-conditions.wrong-equality-operators")
150
+ }), o = !1);
151
+ const A = C.match(/^[a-zA-Z]*$/g);
152
+ A && A.forEach((S) => {
153
+ E(S) && n.push(S);
110
154
  });
111
155
  });
112
- }), t.length) {
113
- const l = t.filter((a) => a === "if"), o = t.filter((a) => a === "endif");
114
- l.length !== o.length && (i({
156
+ }), n.length) {
157
+ const a = n.filter((l) => l === "if"), r = n.filter((l) => l === "endif");
158
+ a.length !== r.length && (t({
115
159
  type: c.Alert,
116
- message: r("custom-conditions.missing-if-endif-tag")
117
- }), n = !1);
160
+ message: i("custom-conditions.missing-if-endif-tag")
161
+ }), o = !1);
118
162
  }
119
- return n;
120
- }, N = (e) => {
121
- const s = (e.match(/{% /gm) || []).length, t = (e.match(/ %}/gm) || []).length, n = s === t;
122
- return n || i({
163
+ return o;
164
+ }, k = (e) => {
165
+ const s = (e.match(/{% /gm) || []).length, n = (e.match(/ %}/gm) || []).length, o = s === n;
166
+ return o || t({
123
167
  type: c.Warning,
124
- message: r("custom-conditions.no-space-after-braces")
125
- }), n;
126
- }, D = (e) => (e.match(/({%(.*?)%})/g) || []).filter((t) => t.includes("if")).map((t) => (t.match(/{{.*}}/gm) || []).length).reduce((t, n) => t + n, 0) > 0 ? (i({
168
+ message: i("custom-conditions.no-space-after-braces")
169
+ }), o;
170
+ }, B = (e) => (e.match(/({%(.*?)%})/g) || []).filter((n) => n.includes("if")).map((n) => (n.match(/{{.*}}/gm) || []).length).reduce((n, o) => n + o, 0) > 0 ? (t({
127
171
  type: c.Warning,
128
- message: r("custom-conditions.no-braces-inside-if-tag")
129
- }), !1) : !0, F = () => f.hasInvalidBlock() ? (i({
172
+ message: i("custom-conditions.no-braces-inside-if-tag")
173
+ }), !1) : !0, D = () => u.hasInvalidBlock() ? (t({
130
174
  type: c.Alert,
131
- message: r(z)
132
- }), !1) : !0, O = () => u.recommendationConfigs && Object.values(u.recommendationConfigs).find((s) => s.filters.find((t) => t.value === "")) !== void 0 ? (i({
175
+ message: i(ee)
176
+ }), !1) : !0, F = () => d.recommendationConfigs && Object.values(d.recommendationConfigs).find((s) => s.filters.find((n) => n.value === "")) !== void 0 ? (t({
133
177
  type: c.Alert,
134
- message: r("newsletter.fill-all-necessary-fields")
135
- }), !1) : !0, B = (e) => {
178
+ message: i("newsletter.fill-all-necessary-fields")
179
+ }), !1) : !0, L = (e) => {
136
180
  const s = /src="[^"]*\.(svg|pst)"/gm;
137
- return e.match(s) === null ? !0 : (i({
181
+ return e.match(s) === null ? !0 : (t({
138
182
  type: c.Alert,
139
- message: r("newsletter.invalid-image-type")
183
+ message: i("newsletter.invalid-image-type")
140
184
  }), !1);
141
- }, L = (e) => {
142
- const n = new DOMParser().parseFromString(e, "text/html").querySelectorAll(".checkbox-block-v2");
143
- return Array.from(n).find((o) => {
144
- var a;
145
- return !((a = o.id) != null && a.trim());
146
- }) ? (i({
185
+ }, V = (e) => {
186
+ const o = new DOMParser().parseFromString(e, "text/html").querySelectorAll(".checkbox-block-v2");
187
+ return Array.from(o).find((r) => {
188
+ var l;
189
+ return !((l = r.id) != null && l.trim());
190
+ }) ? (t({
147
191
  type: c.Alert,
148
- message: r("unsubscribe-templates.select-checkbox-groups")
192
+ message: i("unsubscribe-templates.select-checkbox-groups")
149
193
  }), !1) : !0;
150
- }, W = (e) => {
151
- const n = new DOMParser().parseFromString(e, "text/html").querySelectorAll(".radio-button-v2");
152
- return Array.from(n).find((o) => {
153
- var a;
154
- return !((a = o.id) != null && a.trim());
155
- }) ? (i({
194
+ }, M = (e) => {
195
+ const o = new DOMParser().parseFromString(e, "text/html").querySelectorAll(".radio-button-v2");
196
+ return Array.from(o).find((r) => {
197
+ var l;
198
+ return !((l = r.id) != null && l.trim());
199
+ }) ? (t({
156
200
  type: c.Alert,
157
- message: r("unsubscribe-templates.select-radio-button-groups")
201
+ message: i("unsubscribe-templates.select-radio-button-groups")
158
202
  }), !1) : !0;
159
203
  };
160
- return { validateHtml: async (e, s, t = !1) => {
161
- var o, a;
162
- const n = [
163
- ...s.map((m) => m.value),
164
- ...j,
165
- ...((a = (o = g.value) == null ? void 0 : o.template) == null ? void 0 : a.customFieldAttributes) ?? []
166
- ];
167
- return await T(e, n, t) && w(e) && x(e) && _(e) && k(e, n) && R(e) && N(e) && D(e) && F() && O() && B(e) && L(e) && W(e);
204
+ return { validateHtml: async (e, s, n = !1) => {
205
+ var v, C;
206
+ const o = [
207
+ ...s.map((A) => A.value),
208
+ ...z,
209
+ ...((C = (v = f.value) == null ? void 0 : v.template) == null ? void 0 : C.customFieldAttributes) ?? []
210
+ ], a = G(e), r = await h(a);
211
+ return await w(e, o, n) && R(e) && _(e) && N(e) && x(e, o, a, r) && O(e) && k(e) && B(e) && D() && F() && L(e) && V(e) && M(e);
168
212
  } };
169
213
  };
170
214
  export {
171
- Ce as useHtmlValidator
215
+ ue as buildPartnerAttributeNameSet,
216
+ de as findInvalidCustomFields,
217
+ me as parseRecommendationVariable,
218
+ xe as useHtmlValidator
172
219
  };