@useinsider/guido 2.1.0-beta.4bfe3ad → 2.1.0-beta.52e56ab

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 (39) hide show
  1. package/dist/@types/config/schemas.js +1 -1
  2. package/dist/components/organisms/extensions/recommendation/FilterItem.vue.js +13 -11
  3. package/dist/components/organisms/extensions/recommendation/FilterItem.vue2.js +23 -54
  4. package/dist/components/organisms/extensions/recommendation/FilterSelectionDrawer.vue.js +3 -3
  5. package/dist/components/organisms/extensions/recommendation/FilterSelectionDrawer.vue2.js +21 -34
  6. package/dist/components/organisms/extensions/recommendation/Filters.vue.js +11 -11
  7. package/dist/components/organisms/extensions/recommendation/Filters.vue2.js +34 -44
  8. package/dist/components/organisms/unsubscribe/UnsubscribePageSelection.vue.js +1 -1
  9. package/dist/components/organisms/unsubscribe/UnsubscribePageSelection.vue2.js +19 -19
  10. package/dist/composables/useStripo.js +25 -23
  11. package/dist/composables/useVersionHistoryApi.js +1 -1
  12. package/dist/config/i18n/en/index.js +11 -0
  13. package/dist/config/i18n/en/labels.json.js +7 -0
  14. package/dist/config/i18n/en/toasters.json.js +56 -0
  15. package/dist/config/i18n/en/tooltips.json.js +82 -0
  16. package/dist/config/i18n/index.js +7 -0
  17. package/dist/config/migrator/itemsBlockMigrator.js +65 -64
  18. package/dist/extensions/Blocks/Recommendation/controls/main/index.js +39 -58
  19. package/dist/extensions/Blocks/Recommendation/store/recommendation.js +57 -93
  20. package/dist/extensions/Blocks/Recommendation/utils/filterUtil.js +8 -8
  21. package/dist/extensions/Blocks/Unsubscribe/block.js +29 -29
  22. package/dist/extensions/Blocks/Unsubscribe/control.js +12 -9
  23. package/dist/extensions/Blocks/Unsubscribe/elements/preview.js +13 -11
  24. package/dist/extensions/Blocks/Unsubscribe/styles.css.js +31 -1
  25. package/dist/guido.css +1 -1
  26. package/dist/src/components/organisms/extensions/recommendation/FilterItem.vue.d.ts +0 -1
  27. package/dist/src/components/organisms/extensions/recommendation/Filters.vue.d.ts +1 -15
  28. package/dist/src/config/i18n/en/index.d.ts +1 -0
  29. package/dist/src/config/i18n/index.d.ts +16 -0
  30. package/dist/src/extensions/Blocks/Recommendation/controls/main/index.d.ts +0 -5
  31. package/dist/src/extensions/Blocks/Recommendation/store/recommendation.d.ts +2 -18
  32. package/dist/src/extensions/Blocks/Unsubscribe/control.d.ts +1 -0
  33. package/dist/static/styles/components/notification.css.js +18 -0
  34. package/dist/static/styles/components/tools.css.js +6 -2
  35. package/dist/static/styles/variables.css.js +2 -0
  36. package/dist/stores/unsubscribe.js +37 -34
  37. package/package.json +1 -1
  38. package/dist/extensions/Blocks/Recommendation/validation/filterSchema.js +0 -29
  39. package/dist/src/extensions/Blocks/Recommendation/validation/filterSchema.d.ts +0 -15
@@ -31,8 +31,6 @@ interface PerBlockState {
31
31
  filterGroup: number;
32
32
  /** Whether initial API data (filters, algorithms, products) has been fetched for this block */
33
33
  isInitialized: boolean;
34
- /** Snapshot of filters taken when the drawer opens, used to revert on cancel */
35
- filterSnapshot: Filter[] | null;
36
34
  }
37
35
  interface StoreState {
38
36
  recommendationCampaignUrls: Record<string, string>;
@@ -127,9 +125,7 @@ export declare const useRecommendationExtensionStore: import("pinia").StoreDefin
127
125
  configVersion: number;
128
126
  } & import("pinia").PiniaCustomStateProperties<StoreState>): number;
129
127
  hasFilters(): boolean;
130
- hasValidFilters(): boolean;
131
128
  getFilterGroupCount(): number;
132
- getUniqueFilterGroups(): number[];
133
129
  getActivePredictiveAlgorithms: (state: {
134
130
  recommendationCampaignUrls: Record<string, string>;
135
131
  activePredictiveAlgorithms: number[];
@@ -207,31 +203,19 @@ export declare const useRecommendationExtensionStore: import("pinia").StoreDefin
207
203
  patchCurrentBlockConfig(updates: Partial<PerBlockConfigs>, options?: {
208
204
  triggerRefetch?: boolean;
209
205
  }): void;
210
- /**
211
- * Creates a filter with the first available attribute and operator pre-selected.
212
- */
213
- createDefaultFilter(filterGroup: number, filterNumber: number): Filter;
214
206
  /**
215
207
  * Opens the filter selection drawer for the current block.
216
- * Saves a snapshot of current filters for cancel/revert.
217
- * If no filters exist, initializes with a default filter
208
+ * If no filters exist, initializes with a default empty filter
218
209
  * so the user has a starting point for input.
219
210
  */
220
211
  openFilterDrawer(): void;
221
212
  /**
222
- * Closes the filter selection drawer for the current block.
223
- * Called after successful apply — discards the snapshot.
213
+ * Closes the filter selection drawer for the current block
224
214
  */
225
215
  closeFilterDrawer(): void;
226
- /**
227
- * Cancels the filter selection drawer and reverts filters
228
- * to the snapshot taken when the drawer was opened.
229
- */
230
- cancelFilterDrawer(): void;
231
216
  fetchRecommendationCreateData(): Promise<void>;
232
217
  fetchRecommendationFilters(): Promise<void>;
233
218
  addFilterGroup(filterGroup: number): void;
234
- deleteFilterGroup(groupId: number): void;
235
219
  updateFilter(updatedFilter: Filter): void;
236
220
  deleteFilter(filter: Filter): void;
237
221
  addFilter(filter: Filter): void;
@@ -17,6 +17,7 @@ export declare class UnsubscribeControl extends Control {
17
17
  private _onButtonClick;
18
18
  private _onPrevClick;
19
19
  private _onNextClick;
20
+ private _loadAndUpdatePreview;
20
21
  private _updatePreview;
21
22
  private _updateCounter;
22
23
  private _getPreview;
@@ -17,6 +17,24 @@ ue-notifications-container .alert-message-wrapper {
17
17
  padding: 16px 24px;
18
18
  }
19
19
 
20
+ ue-notifications-container .alert-message-wrapper.info,
21
+ ue-notifications-container .alert-message-wrapper.loader {
22
+ background-color: var(--guido-color-background-toaster-info) !important;
23
+ color: inherit;
24
+ }
25
+
26
+ .alert-message-wrapper .alert-message-main {
27
+ align-items: center;
28
+ }
29
+
30
+ ue-notifications-container ue-caption .caption {
31
+ color: var(--guido-color-white) !important;
32
+ }
33
+
34
+ ue-block-thumb-hint {
35
+ text-align: left;
36
+ }
37
+
20
38
  ue-notifications-container .alert-message-wrapper .alert-message-main .alert-message-content {
21
39
  width: calc(100% - 64px);
22
40
  }
@@ -1,4 +1,4 @@
1
- const o = `ue-emoji .emoji-tabs .active-smile-tab {
1
+ const e = `ue-emoji .emoji-tabs .active-smile-tab {
2
2
  border-color: var(--guido-color-primary-500);
3
3
  }
4
4
 
@@ -17,7 +17,11 @@ ue-insert-table .template-cell {
17
17
  border: 1px solid var(--guido-color-gray-300);
18
18
  box-shadow: var(--guido-box-shadow);
19
19
  }
20
+
21
+ .ue-popover.dark-tiny {
22
+ text-align: left !important;
23
+ }
20
24
  `;
21
25
  export {
22
- o as default
26
+ e as default
23
27
  };
@@ -10,6 +10,7 @@ const o = `:host {
10
10
  --guido-color-gray-1: #F0F0F0;
11
11
  --guido-color-gray-0: #F9F9F9;
12
12
  --guido-color-neutral-800: #222938;
13
+ --guido-color-neutral-700: #2C3546;
13
14
  --guido-color-neutral-200: #DCDFE6;
14
15
  --guido-color-neutral-100: #EFF2F4;
15
16
  --guido-color-danger-300: #e84342;
@@ -25,6 +26,7 @@ const o = `:host {
25
26
  --guido-color-border-onpage-message-error: var(--guido-color-danger-500);
26
27
  --guido-color-background-toaster-success: #128745;
27
28
  --guido-color-background-toaster-error: var(--guido-color-danger-500);
29
+ --guido-color-background-toaster-info: var(--guido-color-neutral-700);
28
30
  --guido-color-background-toaster-warn: #D37400;
29
31
  }
30
32
  `;
@@ -1,39 +1,40 @@
1
- import { TYPE_COLLECTIONS as i, PAGE_TYPES as a } from "../enums/unsubscribe.js";
2
- import { useUnsubscribeApi as r } from "../services/unsubscribeApi.js";
3
- import { defineStore as d } from "pinia";
4
- const p = () => ({
1
+ import { TYPE_COLLECTIONS as i, PAGE_TYPES as p } from "../enums/unsubscribe.js";
2
+ import { useUnsubscribeApi as d } from "../services/unsubscribeApi.js";
3
+ import { defineStore as h } from "pinia";
4
+ let o = null;
5
+ const r = () => ({
5
6
  templates: [],
6
7
  selectedTemplates: {},
7
8
  selectedUnsubscribePages: [],
8
- selectedCollectionType: a.GLOBAL_UNSUBSCRIBE,
9
- activeType: a.GLOBAL_UNSUBSCRIBE,
9
+ selectedCollectionType: p.GLOBAL_UNSUBSCRIBE,
10
+ activeType: p.GLOBAL_UNSUBSCRIBE,
10
11
  pageSelectionUpdateStatus: !1,
11
12
  pageSelectionDrawerStatus: !1,
12
13
  typeSelectionDrawerStatus: !1,
13
14
  isGlobalUnsubscribeDisabled: !1,
14
15
  isSubscriptionPreferencesCenterDisabled: !1
15
- }), g = d("guidoUnsubscribe", {
16
- state: () => p(),
16
+ }), b = h("guidoUnsubscribe", {
17
+ state: () => r(),
17
18
  getters: {
18
19
  getSelectedCollection: (e) => i[e.selectedCollectionType],
19
20
  getSelectedTemplateByActiveType: (e) => e.selectedTemplates[e.activeType],
20
21
  getTemplatesByActiveType: (e) => e.templates.filter((t) => t.type === e.activeType),
21
22
  getThumbnailByTemplateId: (e) => (t) => {
22
- var c;
23
- return ((c = e.templates.find((s) => s.id === t)) == null ? void 0 : c.thumbnail) ?? "";
23
+ var l;
24
+ return ((l = e.templates.find((s) => s.id === t)) == null ? void 0 : l.thumbnail) ?? "";
24
25
  },
25
26
  getSelectedUnsubscribePagesByCollection: (e) => (t) => {
26
- const c = i[t];
27
- if (!c)
27
+ const l = i[t];
28
+ if (!l)
28
29
  return [];
29
30
  const s = /* @__PURE__ */ new Map();
30
31
  e.templates.forEach((n) => {
31
32
  s.set(n.id, n.type);
32
33
  });
33
- const l = new Set(c);
34
+ const c = new Set(l);
34
35
  return e.selectedUnsubscribePages.filter((n) => {
35
- const o = s.get(n);
36
- return o !== void 0 && l.has(o);
36
+ const a = s.get(n);
37
+ return a !== void 0 && c.has(a);
37
38
  });
38
39
  },
39
40
  isActiveTypeFirstInCollection: (e) => {
@@ -47,7 +48,7 @@ const p = () => ({
47
48
  hasTemplatesByCollectionType: (e) => {
48
49
  const t = {};
49
50
  return i[e.selectedCollectionType].forEach((s) => {
50
- t[s] = e.templates.some((l) => l.type === s);
51
+ t[s] = e.templates.some((c) => c.type === s);
51
52
  }), t;
52
53
  },
53
54
  unsubscribePagesStatus: (e) => e.selectedUnsubscribePages.length > 0
@@ -56,29 +57,31 @@ const p = () => ({
56
57
  $reset() {
57
58
  const { templates: e, selectedUnsubscribePages: t } = this;
58
59
  Object.assign(this, {
59
- ...p(),
60
+ ...r(),
60
61
  templates: e,
61
62
  selectedUnsubscribePages: t
62
63
  });
63
64
  },
64
65
  async fetchTemplates() {
65
- if (this.templates.length)
66
- return;
67
- const { getUnsubscribePages: e } = r(), t = await e();
68
- this.templates = t;
66
+ this.templates.length || (o || (o = (async () => {
67
+ const { getUnsubscribePages: e } = d();
68
+ this.templates = await e();
69
+ })().finally(() => {
70
+ o = null;
71
+ })), await o);
69
72
  },
70
73
  setCollection(e) {
71
74
  this.selectedCollectionType = e;
72
75
  const t = i[e];
73
76
  if (t && t.length > 0) {
74
77
  [this.activeType] = t;
75
- const c = { ...this.selectedTemplates };
78
+ const l = { ...this.selectedTemplates };
76
79
  t.forEach((s) => {
77
- if (!c[s]) {
78
- const l = this.templates.find((n) => n.type === s);
79
- l && (c[s] = l.id);
80
+ if (!l[s]) {
81
+ const c = this.templates.find((n) => n.type === s);
82
+ c && (l[s] = c.id);
80
83
  }
81
- }), this.selectedTemplates = c;
84
+ }), this.selectedTemplates = l;
82
85
  }
83
86
  },
84
87
  setCollectionWithoutAutoSelection(e) {
@@ -101,17 +104,17 @@ const p = () => ({
101
104
  t >= 0 && (this.activeType = this.getSelectedCollection[t]);
102
105
  },
103
106
  loadSelectedTemplates(e) {
104
- const t = new Map(this.templates.map((s) => [s.id, s.type])), c = { ...this.selectedTemplates };
107
+ const t = new Map(this.templates.map((s) => [s.id, s.type])), l = { ...this.selectedTemplates };
105
108
  e.forEach((s) => {
106
- const l = t.get(s);
107
- l !== void 0 && (c[l] = s);
108
- }), this.selectedTemplates = c;
109
+ const c = t.get(s);
110
+ c !== void 0 && (l[c] = s);
111
+ }), this.selectedTemplates = l;
109
112
  },
110
113
  getSelectedTemplatesByCollection(e) {
111
- const t = i[e], c = [];
114
+ const t = i[e], l = [];
112
115
  return t.forEach((s) => {
113
- this.selectedTemplates[s] && c.push(this.selectedTemplates[s]);
114
- }), c;
116
+ this.selectedTemplates[s] && l.push(this.selectedTemplates[s]);
117
+ }), l;
115
118
  },
116
119
  addUnsubscribePages(e) {
117
120
  const t = /* @__PURE__ */ new Set([...this.selectedUnsubscribePages, ...e]);
@@ -125,5 +128,5 @@ const p = () => ({
125
128
  }
126
129
  });
127
130
  export {
128
- g as useUnsubscribeStore
131
+ b as useUnsubscribeStore
129
132
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@useinsider/guido",
3
- "version": "2.1.0-beta.4bfe3ad",
3
+ "version": "2.1.0-beta.52e56ab",
4
4
  "description": "Guido is a Vue + TypeScript wrapper for Email Plugin. Easily embed the email editor in your Vue applications.",
5
5
  "main": "./dist/guido.umd.cjs",
6
6
  "module": "./dist/library.js",
@@ -1,29 +0,0 @@
1
- import { safeParse as o, object as p, boolean as l, number as i, pipe as c, minLength as f, string as m } from "../../../../node_modules/valibot/dist/index.js";
2
- const e = c(m(), f(1)), s = p({
3
- type: e,
4
- attribute: e,
5
- operator: e,
6
- innerGroupOperator: e,
7
- outerGroupOperator: e,
8
- value: e,
9
- filterGroup: i(),
10
- filterNumber: i(),
11
- isValid: l()
12
- });
13
- function g(t) {
14
- return o(s, t).success;
15
- }
16
- function S(t) {
17
- const r = o(s, t);
18
- return r.success ? /* @__PURE__ */ new Set() : new Set(
19
- r.issues.flatMap((u) => {
20
- var n;
21
- return ((n = u.path) == null ? void 0 : n.map((a) => String(a.key))) ?? [];
22
- })
23
- );
24
- }
25
- export {
26
- s as FilterSchema,
27
- S as getInvalidFilterFields,
28
- g as isFilterValid
29
- };
@@ -1,15 +0,0 @@
1
- import type { Filter } from '@@/Types/recommendation';
2
- import * as v from 'valibot';
3
- export declare const FilterSchema: v.ObjectSchema<{
4
- readonly type: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
5
- readonly attribute: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
6
- readonly operator: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
7
- readonly innerGroupOperator: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
8
- readonly outerGroupOperator: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
9
- readonly value: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
10
- readonly filterGroup: v.NumberSchema<undefined>;
11
- readonly filterNumber: v.NumberSchema<undefined>;
12
- readonly isValid: v.BooleanSchema<undefined>;
13
- }, undefined>;
14
- export declare function isFilterValid(filter: Filter): boolean;
15
- export declare function getInvalidFilterFields(filter: Filter): Set<string>;