@useinsider/guido 3.7.0-beta.77d2633 → 3.7.0-beta.fc2a9d1

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 (37) hide show
  1. package/dist/composables/useSave.js +16 -17
  2. package/dist/extensions/Blocks/Recommendation/controls/main/index.js +35 -30
  3. package/dist/extensions/Blocks/Recommendation/controls/main/productLayout.js +62 -50
  4. package/dist/extensions/Blocks/Recommendation/controls/main/utils.js +208 -193
  5. package/dist/extensions/Blocks/Recommendation/store/recommendation.js +18 -17
  6. package/dist/extensions/Blocks/Recommendation/validation/requiredFields.js +9 -9
  7. package/dist/extensions/Blocks/Unsubscribe/block.js +13 -13
  8. package/dist/extensions/Blocks/Unsubscribe/utils/constants.js +3 -4
  9. package/dist/src/extensions/Blocks/Recommendation/controls/main/index.d.ts +1 -0
  10. package/dist/src/extensions/Blocks/Recommendation/store/recommendation.d.ts +1 -0
  11. package/dist/src/extensions/Blocks/Recommendation/validation/requiredFields.d.ts +2 -3
  12. package/dist/src/extensions/Blocks/Unsubscribe/utils/constants.d.ts +0 -1
  13. package/dist/stores/dynamic-content.js +1 -1
  14. package/package.json +1 -1
  15. package/dist/composables/validators/useUnsubscribeBlockValidator.js +0 -32
  16. package/dist/src/composables/useApiExample.d.ts +0 -63
  17. package/dist/src/composables/useRecommendation.test.d.ts +0 -1
  18. package/dist/src/composables/validators/useUnsubscribeBlockValidator.d.ts +0 -3
  19. package/dist/src/composables/validators/useUnsubscribeBlockValidator.test.d.ts +0 -1
  20. package/dist/src/config/migrator/recommendation/compositionMapper.test.d.ts +0 -1
  21. package/dist/src/config/migrator/recommendation/extractors.test.d.ts +0 -1
  22. package/dist/src/config/migrator/recommendation/parseLegacyConfig.test.d.ts +0 -1
  23. package/dist/src/config/migrator/recommendation/settingsMapper.test.d.ts +0 -1
  24. package/dist/src/config/migrator/recommendation/themeMapper.test.d.ts +0 -1
  25. package/dist/src/config/migrator/recommendationMigrator.test.d.ts +0 -1
  26. package/dist/src/extensions/Blocks/Recommendation/controls/main/utils.test.d.ts +0 -1
  27. package/dist/src/extensions/Blocks/Recommendation/services/configService.test.d.ts +0 -1
  28. package/dist/src/extensions/Blocks/Recommendation/store/recommendation.test.d.ts +0 -1
  29. package/dist/src/extensions/Blocks/Recommendation/templates/utils.test.d.ts +0 -1
  30. package/dist/src/extensions/Blocks/Recommendation/utils/filterUtil.test.d.ts +0 -1
  31. package/dist/src/extensions/Blocks/Recommendation/utils/legacyStrategyMap.test.d.ts +0 -1
  32. package/dist/src/extensions/Blocks/Recommendation/utils/priceFormatter.test.d.ts +0 -1
  33. package/dist/src/stores/config.test.d.ts +0 -1
  34. package/dist/src/utils/ampErrorFilter.test.d.ts +0 -1
  35. package/dist/src/utils/htmlEscape.test.d.ts +0 -1
  36. package/dist/src/utils/templatePreparation.test.d.ts +0 -1
  37. package/dist/src/vitest.setup.d.ts +0 -0
@@ -2,16 +2,16 @@ import { getRecommendationFeedSourceMaps as g, getOperatorOptions as R, PriceAtt
2
2
  import { useRecommendationApi as y } from "../../../../services/recommendationApi.js";
3
3
  import { useConfigStore as G } from "../../../../stores/config.js";
4
4
  import { defineStore as P } from "pinia";
5
- import { DEFAULT_CARDS_IN_ROW as F } from "../constants/layout.js";
6
- import { EXCLUDED_ALGORITHM_IDS as D } from "../constants/defaultConfig.js";
5
+ import { DEFAULT_MOBILE_CARDS_IN_ROW as D, DEFAULT_CARDS_IN_ROW as F } from "../constants/layout.js";
6
+ import { EXCLUDED_ALGORITHM_IDS as w } from "../constants/defaultConfig.js";
7
7
  import { getDefaultProducts as S } from "../templates/utils.js";
8
8
  import { generateCompleteFilterQuery as b } from "../utils/filterUtil.js";
9
9
  import { getPartnerRecommendationParams as v } from "../utils/partnerCustomizations.js";
10
- import { isFilterValid as w } from "../validation/filterSchema.js";
11
- import { isConfigValid as N } from "../validation/requiredFields.js";
10
+ import { isFilterValid as N } from "../validation/filterSchema.js";
11
+ import { isConfigValid as x } from "../validation/requiredFields.js";
12
12
  const h = y();
13
13
  let m = null, u = null, d = null;
14
- function I() {
14
+ function k() {
15
15
  return {
16
16
  cardsInRow: F,
17
17
  currencySettings: {
@@ -27,6 +27,7 @@ function I() {
27
27
  productIds: [],
28
28
  id: 1,
29
29
  language: "en_US",
30
+ mobileCardsInRow: D,
30
31
  mobileLayoutEnabled: !1,
31
32
  orientation: "grid",
32
33
  recommendedProducts: [],
@@ -39,9 +40,9 @@ function I() {
39
40
  customAttributes: []
40
41
  };
41
42
  }
42
- function k() {
43
+ function I() {
43
44
  return {
44
- recommendationConfigs: I(),
45
+ recommendationConfigs: k(),
45
46
  recommendationProducts: [],
46
47
  filterStatus: !1,
47
48
  filterSelectionDrawerStatus: !1,
@@ -50,7 +51,7 @@ function k() {
50
51
  filterSnapshot: null
51
52
  };
52
53
  }
53
- const x = () => ({
54
+ const L = () => ({
54
55
  recommendationCampaignUrls: {},
55
56
  activePredictiveAlgorithms: [],
56
57
  languages: {},
@@ -59,8 +60,8 @@ const x = () => ({
59
60
  blockStates: {},
60
61
  currentRecommendationId: null,
61
62
  configVersion: 0
62
- }), T = P("guidoRecommendationExtension", {
63
- state: () => x(),
63
+ }), K = P("guidoRecommendationExtension", {
64
+ state: () => L(),
64
65
  getters: {
65
66
  // ====================================================================
66
67
  // Proxy Getters — Backward Compatible Access to Current Block State
@@ -70,7 +71,7 @@ const x = () => ({
70
71
  * This allows all existing code that reads `store.recommendationConfigs` to work unchanged.
71
72
  */
72
73
  recommendationConfigs(t) {
73
- return t.currentRecommendationId !== null && t.blockStates[t.currentRecommendationId] ? t.blockStates[t.currentRecommendationId].recommendationConfigs : I();
74
+ return t.currentRecommendationId !== null && t.blockStates[t.currentRecommendationId] ? t.blockStates[t.currentRecommendationId].recommendationConfigs : k();
74
75
  },
75
76
  /**
76
77
  * Proxy getter: delegates to blockStates[currentRecommendationId].recommendationProducts
@@ -116,7 +117,7 @@ const x = () => ({
116
117
  },
117
118
  getActivePredictiveAlgorithms: (t) => {
118
119
  const e = g(), r = [];
119
- return t.activePredictiveAlgorithms.filter((n) => !D.includes(n)).forEach((n) => {
120
+ return t.activePredictiveAlgorithms.filter((n) => !w.includes(n)).forEach((n) => {
120
121
  r.push(...e.filter((c) => c.id === n));
121
122
  }), r.map((n) => ({
122
123
  text: n.name,
@@ -156,7 +157,7 @@ const x = () => ({
156
157
  setCurrentBlock(t) {
157
158
  this.blockStates[t] || (this.blockStates = {
158
159
  ...this.blockStates,
159
- [t]: k()
160
+ [t]: I()
160
161
  }), this.currentRecommendationId = t;
161
162
  },
162
163
  /**
@@ -224,7 +225,7 @@ const x = () => ({
224
225
  decimalCount: String(e.currencyDecimalCount),
225
226
  decimalSeparator: r(e.currencyDecimalSeparator, ","),
226
227
  thousandSeparator: r(e.currencyThousandSeparator, ".")
227
- }, c = !this.blockStates[t], i = c ? k() : this.blockStates[t];
228
+ }, c = !this.blockStates[t], i = c ? I() : this.blockStates[t];
228
229
  i.recommendationConfigs = {
229
230
  ...i.recommendationConfigs,
230
231
  strategy: e.strategy,
@@ -379,7 +380,7 @@ const x = () => ({
379
380
  const n = [...e.recommendationConfigs.filters];
380
381
  n[r] = {
381
382
  ...t,
382
- isValid: w(t)
383
+ isValid: N(t)
383
384
  }, e.recommendationConfigs.filters = n;
384
385
  }
385
386
  },
@@ -425,7 +426,7 @@ const x = () => ({
425
426
  * every block's recommendationConfigs across user edits.
426
427
  */
427
428
  hasInvalidBlock() {
428
- return Object.values(this.blockStates).some((t) => !N(t.recommendationConfigs, this));
429
+ return Object.values(this.blockStates).some((t) => !x(t.recommendationConfigs, this));
429
430
  },
430
431
  // ====================================================================
431
432
  // Per-Block Product Fetching
@@ -475,5 +476,5 @@ const x = () => ({
475
476
  }
476
477
  });
477
478
  export {
478
- T as useRecommendationExtensionStore
479
+ K as useRecommendationExtensionStore
479
480
  };
@@ -1,4 +1,4 @@
1
- const o = [
1
+ const u = [
2
2
  {
3
3
  key: "locale",
4
4
  getValue: (e) => e.language,
@@ -9,8 +9,8 @@ const o = [
9
9
  getValue: (e) => e.currencySettings.value,
10
10
  getAvailableOptions: (e) => e.currencyList.map((n) => n.text)
11
11
  }
12
- ], l = "newsletter.recommendation-fill-required-fields";
13
- function u(e, n) {
12
+ ], s = "newsletter.recommendation-fill-required-fields";
13
+ function l(e, n, o = u) {
14
14
  return o.filter((t) => {
15
15
  var a;
16
16
  if (t.condition && !t.condition(e))
@@ -22,12 +22,12 @@ function u(e, n) {
22
22
  return r !== void 0 && !r.includes(i);
23
23
  }).map((t) => t.key);
24
24
  }
25
- function s(e, n) {
26
- return u(e, n).length === 0;
25
+ function c(e, n) {
26
+ return l(e, n).length === 0;
27
27
  }
28
28
  export {
29
- o as REQUIRED_RECOMMENDATION_FIELDS,
30
- l as RecommendationRequiredFieldsKey,
31
- u as getInvalidFields,
32
- s as isConfigValid
29
+ u as REQUIRED_RECOMMENDATION_FIELDS,
30
+ s as RecommendationRequiredFieldsKey,
31
+ l as getInvalidFields,
32
+ c as isConfigValid
33
33
  };
@@ -5,11 +5,11 @@ import { useToaster as B } from "../../../composables/useToaster.js";
5
5
  import { ToasterTypeOptions as S } from "../../../enums/toaster.js";
6
6
  import { PAGE_TYPES as E } from "../../../enums/unsubscribe.js";
7
7
  import { useUnsubscribeStore as a } from "../../../stores/unsubscribe.js";
8
- import { Block as L, BlockCompositionType as f, ContextActionType as h, ModificationDescription as b, BlockType as A } from "../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
9
- import { getDefaultTemplate as v } from "./template.js";
10
- import { DATA_ATTRIBUTES as i, UNSUBSCRIBE_BLOCK_SELECTOR as p, UNSUBSCRIBE_EVENTS as d } from "./utils/constants.js";
11
- import { parsePageList as m } from "./utils/utils.js";
12
- const y = "unsubscribe-block", _ = 'a[data-unsubscribe-link="true"]', I = "{{ins-unsubscribe-link}}", T = "https://academy.insiderone.com/docs/adding-unsubscribe-pages-into-emails", C = "Removing the unsubscribe text leaves an empty block, but an active unsubscribe link is required. Undo your last action to restore the text, or delete the unsubscribe block entirely.", N = {
8
+ import { Block as L, BlockCompositionType as f, ContextActionType as h, ModificationDescription as b, BlockType as v } from "../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
9
+ import { getDefaultTemplate as A } from "./template.js";
10
+ import { DATA_ATTRIBUTES as i, UNSUBSCRIBE_EVENTS as d } from "./utils/constants.js";
11
+ import { parsePageList as p } from "./utils/utils.js";
12
+ const y = "unsubscribe-block", m = 'a[data-unsubscribe-link="true"]', _ = ".unsubscribe-block-v2", I = "{{ins-unsubscribe-link}}", T = "https://academy.insiderone.com/docs/adding-unsubscribe-pages-into-emails", C = "Removing the unsubscribe text leaves an empty block, but an active unsubscribe link is required. Undo your last action to restore the text, or delete the unsubscribe block entirely.", N = {
13
13
  [E.GLOBAL_UNSUBSCRIBE]: "{{ins-global-unsubscribe-link}}",
14
14
  [E.SUBSCRIPTION_PREFERENCE_CENTER]: "{{ins-preferences-unsubscribe-link}}"
15
15
  };
@@ -42,7 +42,7 @@ class F extends L {
42
42
  return this.api.translate("Unsubscribe Block Description");
43
43
  }
44
44
  getTemplate() {
45
- return v();
45
+ return A();
46
46
  }
47
47
  getContextActionsIds() {
48
48
  return [h.MOVE, h.REMOVE];
@@ -68,7 +68,7 @@ class F extends L {
68
68
  this._removeEventListeners(), this.currentNode = void 0, this.linkStateByBlockId.clear();
69
69
  }
70
70
  _hasUnsubscribeLink(e) {
71
- return "querySelector" in e ? !!e.querySelector(_) : !1;
71
+ return "querySelector" in e ? !!e.querySelector(m) : !1;
72
72
  }
73
73
  _readBlockId(e) {
74
74
  return "getAttribute" in e ? e.getAttribute(i.BLOCK_ID) : null;
@@ -102,7 +102,7 @@ class F extends L {
102
102
  let e = 0;
103
103
  try {
104
104
  const t = this.api.getDocumentRoot();
105
- t && "querySelectorAll" in t && t.querySelectorAll(p).forEach((s) => {
105
+ t && "querySelectorAll" in t && t.querySelectorAll(_).forEach((s) => {
106
106
  if ("getAttribute" in s) {
107
107
  const o = s.getAttribute(i.BLOCK_ID), u = o ? parseInt(o) : 0;
108
108
  u > e && (e = u);
@@ -150,7 +150,7 @@ class F extends L {
150
150
  try {
151
151
  if (!this.currentNode)
152
152
  return;
153
- this.api.getDocumentModifier().modifyHtml(this.currentNode).replaceWith(`<${A.EMPTY_CONTAINER}/>`).apply(new b("Removed unsubscribe block due to cancel"));
153
+ this.api.getDocumentModifier().modifyHtml(this.currentNode).replaceWith(`<${v.EMPTY_CONTAINER}/>`).apply(new b("Removed unsubscribe block due to cancel"));
154
154
  } catch (e) {
155
155
  console.warn("[UnsubscribeBlock] Failed to remove unsubscribe block:", e);
156
156
  }
@@ -161,7 +161,7 @@ class F extends L {
161
161
  _updateBlock(e, t) {
162
162
  if (!this.currentNode || !("querySelector" in this.currentNode))
163
163
  return;
164
- const r = this.currentNode.querySelector(_);
164
+ const r = this.currentNode.querySelector(m);
165
165
  if (!r)
166
166
  return;
167
167
  const s = this._getMergeTag(e);
@@ -181,7 +181,7 @@ class F extends L {
181
181
  }
182
182
  _checkExistingBlocks() {
183
183
  const e = a();
184
- e.isGlobalUnsubscribeDisabled = !1, e.isSubscriptionPreferencesCenterDisabled = !1, this.api.getDocumentRoot().querySelectorAll(p).forEach((r) => {
184
+ e.isGlobalUnsubscribeDisabled = !1, e.isSubscriptionPreferencesCenterDisabled = !1, this.api.getDocumentRoot().querySelectorAll(_).forEach((r) => {
185
185
  if ("getAttribute" in r) {
186
186
  const s = r.getAttribute(i.PAGE_TYPE);
187
187
  if (s) {
@@ -197,7 +197,7 @@ class F extends L {
197
197
  const t = e.getAttribute(i.PAGE_TYPE), r = e.getAttribute(i.PAGE_LIST);
198
198
  if (!t || !r)
199
199
  return;
200
- const s = a(), o = Number(t), u = m(r);
200
+ const s = a(), o = Number(t), u = p(r);
201
201
  await s.fetchTemplates(), s.setCollectionWithoutAutoSelection(o), s.loadSelectedTemplates(u);
202
202
  }
203
203
  _resetStoreState() {
@@ -209,7 +209,7 @@ class F extends L {
209
209
  const t = e.getAttribute(i.PAGE_LIST);
210
210
  if (!t)
211
211
  return;
212
- const r = a(), s = m(t);
212
+ const r = a(), s = p(t);
213
213
  r.removeUnsubscribePages(s);
214
214
  }
215
215
  }
@@ -1,13 +1,12 @@
1
1
  const s = {
2
2
  SELECT: "unsubscribe:select",
3
3
  CANCEL: "unsubscribe:cancel"
4
- }, b = {
4
+ }, e = {
5
5
  PAGE_TYPE: "data-unsubscribe-page-type",
6
6
  PAGE_LIST: "data-unsubscribe-page-list",
7
7
  BLOCK_ID: "data-unsubscribe-block-id"
8
- }, c = ".unsubscribe-block-v2";
8
+ };
9
9
  export {
10
- b as DATA_ATTRIBUTES,
11
- c as UNSUBSCRIBE_BLOCK_SELECTOR,
10
+ e as DATA_ATTRIBUTES,
12
11
  s as UNSUBSCRIBE_EVENTS
13
12
  };
@@ -18,6 +18,7 @@ export * from './utils';
18
18
  export declare class RecommendationBlockControl extends CommonControl {
19
19
  private store;
20
20
  private storeUnsubscription;
21
+ private syncedBlockIds;
21
22
  private algorithmControl;
22
23
  private localeControl;
23
24
  private currencyControl;
@@ -13,6 +13,7 @@ export interface PerBlockConfigs {
13
13
  filters: Filter[];
14
14
  id: number;
15
15
  language: string;
16
+ mobileCardsInRow: number;
16
17
  mobileLayoutEnabled: boolean;
17
18
  orientation: Orientation;
18
19
  productIds: string[];
@@ -8,7 +8,7 @@ export interface ExtensionStoreSlice {
8
8
  languages: Languages;
9
9
  currencyList: Currency[];
10
10
  }
11
- interface RequiredField {
11
+ export interface RequiredField {
12
12
  key: string;
13
13
  getValue: (config: PerBlockConfigs) => string;
14
14
  getAvailableOptions?: (store: ExtensionStoreSlice) => string[];
@@ -16,6 +16,5 @@ interface RequiredField {
16
16
  }
17
17
  export declare const REQUIRED_RECOMMENDATION_FIELDS: RequiredField[];
18
18
  export declare const RecommendationRequiredFieldsKey = "newsletter.recommendation-fill-required-fields";
19
- export declare function getInvalidFields(config: PerBlockConfigs, store: ExtensionStoreSlice): string[];
19
+ export declare function getInvalidFields(config: PerBlockConfigs, store: ExtensionStoreSlice, fields?: RequiredField[]): string[];
20
20
  export declare function isConfigValid(config: PerBlockConfigs, store: ExtensionStoreSlice): boolean;
21
- export {};
@@ -8,4 +8,3 @@ export declare const DATA_ATTRIBUTES: {
8
8
  readonly PAGE_LIST: "data-unsubscribe-page-list";
9
9
  readonly BLOCK_ID: "data-unsubscribe-block-id";
10
10
  };
11
- export declare const UNSUBSCRIBE_BLOCK_SELECTOR = ".unsubscribe-block-v2";
@@ -16,7 +16,7 @@ const s = a("guidoDynamicContent", {
16
16
  value: e.value,
17
17
  fallback: e.fallback,
18
18
  format: e.format
19
- })) || []
19
+ }))
20
20
  }
21
21
  });
22
22
  export {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@useinsider/guido",
3
- "version": "3.7.0-beta.77d2633",
3
+ "version": "3.7.0-beta.fc2a9d1",
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,32 +0,0 @@
1
- import { ToasterTypeOptions as i } from "../../enums/toaster.js";
2
- import { PAGE_TYPES as n } from "../../enums/unsubscribe.js";
3
- import { UNSUBSCRIBE_BLOCK_SELECTOR as u, DATA_ATTRIBUTES as l } from "../../extensions/Blocks/Unsubscribe/utils/constants.js";
4
- import { useToaster as T } from "../useToaster.js";
5
- import { useTranslations as E } from "../useTranslations.js";
6
- const m = [
7
- {
8
- pageType: n.GLOBAL_UNSUBSCRIBE,
9
- messageKey: "unsubscription-preference.duplicate-global-unsub"
10
- },
11
- {
12
- pageType: n.SUBSCRIPTION_PREFERENCE_CENTER,
13
- messageKey: "unsubscription-preference.duplicate-pref-center"
14
- }
15
- ], g = "unsubscription-preference.duplicate-both", y = () => {
16
- const { showToaster: o } = T(), a = E();
17
- return { validateUnsubscribeBlockUniqueness: (c) => {
18
- const p = new DOMParser().parseFromString(c, "text/html"), t = /* @__PURE__ */ new Map();
19
- p.querySelectorAll(u).forEach((e) => {
20
- const r = Number(e.getAttribute(l.PAGE_TYPE));
21
- t.set(r, (t.get(r) ?? 0) + 1);
22
- });
23
- const s = m.filter((e) => (t.get(e.pageType) ?? 0) > 1).map((e) => e.messageKey);
24
- return s.length ? (o({
25
- type: i.Alert,
26
- message: a(s.length > 1 ? g : s[0])
27
- }), !1) : !0;
28
- } };
29
- };
30
- export {
31
- y as useUnsubscribeBlockValidator
32
- };
@@ -1,63 +0,0 @@
1
- interface User {
2
- id: number;
3
- name: string;
4
- email: string;
5
- }
6
- export declare const useApiExample: () => {
7
- loading: import("vue").ComputedRef<boolean>;
8
- error: import("vue").ComputedRef<{
9
- message: string;
10
- status?: number | undefined;
11
- statusText?: string | undefined;
12
- response?: {
13
- readonly headers: {
14
- append: (name: string, value: string) => void;
15
- delete: (name: string) => void;
16
- get: (name: string) => string | null;
17
- getSetCookie: () => string[];
18
- has: (name: string) => boolean;
19
- set: (name: string, value: string) => void;
20
- forEach: (callbackfn: (value: string, key: string, parent: Headers) => void, thisArg?: any) => void;
21
- entries: () => IterableIterator<[string, string]>;
22
- keys: () => IterableIterator<string>;
23
- values: () => IterableIterator<string>;
24
- [Symbol.iterator]: () => IterableIterator<[string, string]>;
25
- };
26
- readonly ok: boolean;
27
- readonly redirected: boolean;
28
- readonly status: number;
29
- readonly statusText: string;
30
- readonly type: ResponseType;
31
- readonly url: string;
32
- clone: () => Response;
33
- readonly body: {
34
- readonly locked: boolean;
35
- cancel: (reason?: any) => Promise<void>;
36
- getReader: {
37
- (options: {
38
- mode: "byob";
39
- }): ReadableStreamBYOBReader;
40
- (): ReadableStreamDefaultReader<Uint8Array>;
41
- (options?: ReadableStreamGetReaderOptions): ReadableStreamReader<Uint8Array>;
42
- };
43
- pipeThrough: <T>(transform: ReadableWritablePair<T, Uint8Array>, options?: StreamPipeOptions) => ReadableStream<T>;
44
- pipeTo: (destination: WritableStream<Uint8Array>, options?: StreamPipeOptions) => Promise<void>;
45
- tee: () => [ReadableStream<Uint8Array>, ReadableStream<Uint8Array>];
46
- } | null;
47
- readonly bodyUsed: boolean;
48
- arrayBuffer: () => Promise<ArrayBuffer>;
49
- blob: () => Promise<Blob>;
50
- formData: () => Promise<FormData>;
51
- json: () => Promise<any>;
52
- text: () => Promise<string>;
53
- } | undefined;
54
- } | null>;
55
- hasError: import("vue").ComputedRef<boolean>;
56
- fetchUsers: () => Promise<User[]>;
57
- createUser: (userData: Omit<User, "id">) => Promise<User>;
58
- updateUser: (id: number, userData: Partial<User>) => Promise<User>;
59
- deleteUser: (id: number) => Promise<void>;
60
- uploadFile: (file: File) => Promise<string>;
61
- clearError: () => void;
62
- };
63
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1,3 +0,0 @@
1
- export declare const useUnsubscribeBlockValidator: () => {
2
- validateUnsubscribeBlockUniqueness: (html: string) => boolean;
3
- };
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
File without changes