@useinsider/guido 3.7.0-beta.7069d11 → 3.7.0-beta.b2980d8
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.
- package/dist/components/organisms/unsubscribe/UnsubscribeTypeSelection.vue.js +3 -3
- package/dist/components/organisms/unsubscribe/UnsubscribeTypeSelection.vue2.js +45 -47
- package/dist/extensions/Blocks/Recommendation/validation/requiredFields.js +9 -9
- package/dist/extensions/Blocks/Unsubscribe/block.js +122 -72
- package/dist/extensions/Blocks/Unsubscribe/template.js +4 -4
- package/dist/guido.css +1 -1
- package/dist/src/extensions/Blocks/Recommendation/validation/requiredFields.d.ts +2 -3
- package/dist/src/extensions/Blocks/Unsubscribe/block.d.ts +9 -0
- package/dist/stores/dynamic-content.js +1 -1
- package/package.json +1 -1
- package/dist/src/composables/useApiExample.d.ts +0 -63
- package/dist/src/composables/useRecommendation.test.d.ts +0 -1
- package/dist/src/config/migrator/recommendation/compositionMapper.test.d.ts +0 -1
- package/dist/src/config/migrator/recommendation/extractors.test.d.ts +0 -1
- package/dist/src/config/migrator/recommendation/parseLegacyConfig.test.d.ts +0 -1
- package/dist/src/config/migrator/recommendation/settingsMapper.test.d.ts +0 -1
- package/dist/src/config/migrator/recommendation/themeMapper.test.d.ts +0 -1
- package/dist/src/config/migrator/recommendationMigrator.test.d.ts +0 -1
- package/dist/src/extensions/Blocks/Recommendation/controls/main/utils.test.d.ts +0 -1
- package/dist/src/extensions/Blocks/Recommendation/services/configService.test.d.ts +0 -1
- package/dist/src/extensions/Blocks/Recommendation/store/recommendation.test.d.ts +0 -1
- package/dist/src/extensions/Blocks/Recommendation/templates/utils.test.d.ts +0 -1
- package/dist/src/extensions/Blocks/Recommendation/utils/filterUtil.test.d.ts +0 -1
- package/dist/src/extensions/Blocks/Recommendation/utils/legacyStrategyMap.test.d.ts +0 -1
- package/dist/src/extensions/Blocks/Recommendation/utils/priceFormatter.test.d.ts +0 -1
- package/dist/src/stores/config.test.d.ts +0 -1
- package/dist/src/utils/ampErrorFilter.test.d.ts +0 -1
- package/dist/src/utils/htmlEscape.test.d.ts +0 -1
- package/dist/src/utils/templatePreparation.test.d.ts +0 -1
- package/dist/src/vitest.setup.d.ts +0 -0
|
@@ -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
|
|
6
|
-
return s(
|
|
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
|
-
"
|
|
13
|
+
"43c617a7"
|
|
14
14
|
);
|
|
15
15
|
const _ = c.exports;
|
|
16
16
|
export {
|
|
@@ -1,110 +1,108 @@
|
|
|
1
|
-
import { defineComponent as
|
|
2
|
-
import
|
|
3
|
-
import { useToaster as
|
|
4
|
-
import { useTranslations as
|
|
5
|
-
import { ACADEMY_LINKS as
|
|
6
|
-
import { ToasterTypeOptions as
|
|
7
|
-
import { PAGE_TYPES as l, getTypeTranslations as
|
|
8
|
-
import { useUnsubscribeStore as
|
|
9
|
-
import { InSegments as
|
|
10
|
-
const
|
|
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(
|
|
13
|
-
const
|
|
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="${
|
|
16
|
-
),
|
|
15
|
+
{ action: `<a href="${w.GLOBAL_UNSUBSCRIBE}" target="_blank">${e("ds-rules.visit-academy")}</a>` }
|
|
16
|
+
), T = g(() => [
|
|
17
17
|
{
|
|
18
|
-
description:
|
|
18
|
+
description: e("unsubscription-preference.type-global-unsubscribe-description"),
|
|
19
19
|
icon: "line-contact-global-unsub-page",
|
|
20
|
-
text:
|
|
20
|
+
text: e("unsubscription-preference.type-global-unsubscribe"),
|
|
21
21
|
value: l.GLOBAL_UNSUBSCRIBE,
|
|
22
|
-
disable:
|
|
22
|
+
disable: t.isGlobalUnsubscribeDisabled,
|
|
23
23
|
position: "bottom",
|
|
24
|
-
tooltipText:
|
|
24
|
+
tooltipText: t.isGlobalUnsubscribeDisabled ? e("unsubscription-preference.global-unsub-added") : ""
|
|
25
25
|
},
|
|
26
26
|
{
|
|
27
|
-
description:
|
|
27
|
+
description: e("unsubscription-preference.type-subscription-preferences-center-description"),
|
|
28
28
|
icon: "line-contact-sub-pref-center-page",
|
|
29
|
-
text:
|
|
29
|
+
text: e("unsubscription-preference.type-subscription-preferences-center"),
|
|
30
30
|
value: l.SUBSCRIPTION_PREFERENCE_CENTER,
|
|
31
|
-
disable:
|
|
32
|
-
tooltipText:
|
|
31
|
+
disable: t.isSubscriptionPreferencesCenterDisabled,
|
|
32
|
+
tooltipText: t.isSubscriptionPreferencesCenterDisabled ? e("unsubscription-preference.pref-center-added") : ""
|
|
33
33
|
}
|
|
34
|
-
]),
|
|
35
|
-
() => e.isGlobalUnsubscribeDisabled && e.isSubscriptionPreferencesCenterDisabled
|
|
36
|
-
), C = f(() => ({
|
|
34
|
+
]), y = g(() => ({
|
|
37
35
|
primaryButton: {
|
|
38
36
|
styling: "solid",
|
|
39
37
|
type: "primary",
|
|
40
|
-
labelText:
|
|
38
|
+
labelText: e(
|
|
41
39
|
n.value ? "unsubscription-preference.selecting-type" : "products.select-and-continue"
|
|
42
40
|
),
|
|
43
41
|
loadingStatus: n.value,
|
|
44
|
-
disabledStatus:
|
|
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:
|
|
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
|
-
})),
|
|
57
|
-
|
|
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
|
-
},
|
|
63
|
-
const s =
|
|
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 =
|
|
66
|
+
const B = D(), a = r.map((c) => B[c]);
|
|
69
67
|
let u = "";
|
|
70
68
|
if (r.length === 1)
|
|
71
|
-
u =
|
|
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 =
|
|
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 =
|
|
79
|
+
u = e("unsubscription-preference.create-multiple-pages-to-continue", {
|
|
82
80
|
pages: p,
|
|
83
81
|
lastPage: c
|
|
84
82
|
});
|
|
85
83
|
}
|
|
86
|
-
return
|
|
87
|
-
type:
|
|
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 =
|
|
90
|
+
window.location.href = I;
|
|
93
91
|
}
|
|
94
92
|
}
|
|
95
93
|
}), !1;
|
|
96
|
-
},
|
|
97
|
-
if (n.value = !0, await
|
|
98
|
-
n.value = !1,
|
|
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,
|
|
99
|
+
n.value = !1, t.typeSelectionDrawerStatus = !1, t.pageSelectionDrawerStatus = !0;
|
|
102
100
|
};
|
|
103
|
-
return _(() =>
|
|
104
|
-
s && (i.value = !0, o.value = l.GLOBAL_UNSUBSCRIBE,
|
|
105
|
-
}), { __sfc: !0, trans:
|
|
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
|
-
|
|
107
|
+
V as default
|
|
110
108
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const
|
|
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
|
-
],
|
|
13
|
-
function
|
|
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
|
|
26
|
-
return
|
|
25
|
+
function c(e, n) {
|
|
26
|
+
return l(e, n).length === 0;
|
|
27
27
|
}
|
|
28
28
|
export {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
29
|
+
u as REQUIRED_RECOMMENDATION_FIELDS,
|
|
30
|
+
s as RecommendationRequiredFieldsKey,
|
|
31
|
+
l as getInvalidFields,
|
|
32
|
+
c as isConfigValid
|
|
33
33
|
};
|
|
@@ -1,39 +1,41 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
var
|
|
4
|
-
import { useToaster as
|
|
5
|
-
import { ToasterTypeOptions as
|
|
6
|
-
import { PAGE_TYPES as
|
|
7
|
-
import { useUnsubscribeStore as
|
|
8
|
-
import { Block as
|
|
9
|
-
import { getDefaultTemplate as
|
|
10
|
-
import { DATA_ATTRIBUTES as
|
|
11
|
-
import { parsePageList as
|
|
12
|
-
const
|
|
13
|
-
[
|
|
14
|
-
[
|
|
15
|
-
};
|
|
16
|
-
class
|
|
1
|
+
var S = Object.defineProperty;
|
|
2
|
+
var L = (c, o, e) => o in c ? S(c, o, { enumerable: !0, configurable: !0, writable: !0, value: e }) : c[o] = e;
|
|
3
|
+
var a = (c, o, e) => L(c, typeof o != "symbol" ? o + "" : o, e);
|
|
4
|
+
import { useToaster as f } from "../../../composables/useToaster.js";
|
|
5
|
+
import { ToasterTypeOptions as A } from "../../../enums/toaster.js";
|
|
6
|
+
import { PAGE_TYPES as h } from "../../../enums/unsubscribe.js";
|
|
7
|
+
import { useUnsubscribeStore as u } from "../../../stores/unsubscribe.js";
|
|
8
|
+
import { Block as y, BlockCompositionType as T, ContextActionType as k, ModificationDescription as d, BlockType as I } from "../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
|
|
9
|
+
import { getDefaultTemplate as v } from "./template.js";
|
|
10
|
+
import { DATA_ATTRIBUTES as n, UNSUBSCRIBE_EVENTS as p } from "./utils/constants.js";
|
|
11
|
+
import { parsePageList as B } from "./utils/utils.js";
|
|
12
|
+
const C = "unsubscribe-block", m = 'a[data-unsubscribe-link="true"]', E = ".unsubscribe-block-v2", N = "{{ins-unsubscribe-link}}", U = "https://academy.insiderone.com/docs/adding-unsubscribe-pages-into-emails", R = "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.", D = {
|
|
13
|
+
[h.GLOBAL_UNSUBSCRIBE]: "{{ins-global-unsubscribe-link}}",
|
|
14
|
+
[h.SUBSCRIPTION_PREFERENCE_CENTER]: "{{ins-preferences-unsubscribe-link}}"
|
|
15
|
+
}, w = 3;
|
|
16
|
+
class H extends y {
|
|
17
17
|
constructor() {
|
|
18
18
|
super();
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
a(this, "selectEventListener", null);
|
|
20
|
+
a(this, "cancelEventListener", null);
|
|
21
|
+
a(this, "currentNode");
|
|
22
22
|
// Per-block "did this instance have a link last time we saw it?" tracking.
|
|
23
23
|
// Keyed by the stable `data-unsubscribe-block-id` we assign, because
|
|
24
24
|
// ImmutableHtmlNode instances are recreated on every document mutation and
|
|
25
25
|
// can't be used as Map keys directly. A singleton boolean here would be
|
|
26
26
|
// polluted across blocks since Stripo fires onDocumentChanged per-instance.
|
|
27
|
-
|
|
27
|
+
a(this, "linkStateByBlockId", /* @__PURE__ */ new Map());
|
|
28
|
+
// Per-block prepend retry counter for the leading text guard (SD-143097).
|
|
29
|
+
a(this, "guardAttemptsByBlockId", /* @__PURE__ */ new Map());
|
|
28
30
|
}
|
|
29
31
|
getId() {
|
|
30
|
-
return
|
|
32
|
+
return C;
|
|
31
33
|
}
|
|
32
34
|
getIcon() {
|
|
33
35
|
return "unsubscribe-icon";
|
|
34
36
|
}
|
|
35
37
|
getBlockCompositionType() {
|
|
36
|
-
return
|
|
38
|
+
return T.BLOCK;
|
|
37
39
|
}
|
|
38
40
|
getName() {
|
|
39
41
|
return this.api.translate("Unsubscribe Block");
|
|
@@ -42,36 +44,84 @@ class F extends L {
|
|
|
42
44
|
return this.api.translate("Unsubscribe Block Description");
|
|
43
45
|
}
|
|
44
46
|
getTemplate() {
|
|
45
|
-
return
|
|
47
|
+
return v();
|
|
46
48
|
}
|
|
47
49
|
getContextActionsIds() {
|
|
48
|
-
return [
|
|
50
|
+
return [k.MOVE, k.REMOVE];
|
|
49
51
|
}
|
|
50
52
|
onSelect(e) {
|
|
51
53
|
this.currentNode = e;
|
|
52
54
|
const t = this._getOrAssignBlockId(e);
|
|
53
55
|
t && this.linkStateByBlockId.set(t, this._hasUnsubscribeLink(e)), !("getAttribute" in e && e.getAttribute("data-migration")) && (this._resetStoreState(), this._loadBlockState(e), this._setupSelectEventListener(), this._setupCancelEventListener(), this._checkExistingBlocks(), this._openDrawer());
|
|
54
56
|
}
|
|
57
|
+
onCreated(e) {
|
|
58
|
+
this._ensureLeadingTextGuard(e);
|
|
59
|
+
}
|
|
60
|
+
onDocumentInit() {
|
|
61
|
+
try {
|
|
62
|
+
const e = this.api.getDocumentRoot();
|
|
63
|
+
e && "querySelectorAll" in e && e.querySelectorAll(E).forEach((t) => {
|
|
64
|
+
this._ensureLeadingTextGuard(t);
|
|
65
|
+
});
|
|
66
|
+
} catch {
|
|
67
|
+
}
|
|
68
|
+
}
|
|
55
69
|
onDocumentChanged(e) {
|
|
70
|
+
this._ensureLeadingTextGuard(e);
|
|
56
71
|
const t = this._getOrAssignBlockId(e);
|
|
57
72
|
if (!t)
|
|
58
73
|
return;
|
|
59
|
-
const
|
|
60
|
-
this.linkStateByBlockId.get(t) === !0 && !
|
|
74
|
+
const s = this._hasUnsubscribeLink(e);
|
|
75
|
+
this.linkStateByBlockId.get(t) === !0 && !s && this._warnLinkRemoved(), this.linkStateByBlockId.set(t, s);
|
|
61
76
|
}
|
|
62
77
|
onDelete(e) {
|
|
63
78
|
this._removeEventListeners(), this._removeBlockTemplatesFromStore(e), this._resetStoreState();
|
|
64
79
|
const t = this._readBlockId(e);
|
|
65
|
-
t && this.linkStateByBlockId.delete(t);
|
|
80
|
+
t && (this.linkStateByBlockId.delete(t), this.guardAttemptsByBlockId.delete(t));
|
|
66
81
|
}
|
|
67
82
|
onDestroy() {
|
|
68
|
-
this._removeEventListeners(), this.currentNode = void 0, this.linkStateByBlockId.clear();
|
|
83
|
+
this._removeEventListeners(), this.currentNode = void 0, this.linkStateByBlockId.clear(), this.guardAttemptsByBlockId.clear();
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Guarantees a plain-text node before the link's wrapper inside the <p>.
|
|
87
|
+
* Without it the only caret position left of the link is inside the anchor,
|
|
88
|
+
* so anything typed there becomes part of the link (SD-143097).
|
|
89
|
+
*/
|
|
90
|
+
_ensureLeadingTextGuard(e) {
|
|
91
|
+
if (!("querySelector" in e))
|
|
92
|
+
return;
|
|
93
|
+
const t = e.querySelector(m);
|
|
94
|
+
if (!t)
|
|
95
|
+
return;
|
|
96
|
+
let s = t, r = s.parent();
|
|
97
|
+
for (; r && "getTagName" in r && r.getTagName().toLowerCase() !== "p"; )
|
|
98
|
+
s = r, r = r.parent();
|
|
99
|
+
if (!r || !("getTagName" in r) || r.getTagName().toLowerCase() !== "p")
|
|
100
|
+
return;
|
|
101
|
+
const i = s.previousSibling();
|
|
102
|
+
if (!!(i && i.getType() === "text" && i.getTextContent())) {
|
|
103
|
+
const b = this._readBlockId(e);
|
|
104
|
+
b && this.guardAttemptsByBlockId.delete(b);
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
const g = this._getOrAssignBlockId(e);
|
|
108
|
+
if (!g)
|
|
109
|
+
return;
|
|
110
|
+
const _ = this.guardAttemptsByBlockId.get(g) ?? 0;
|
|
111
|
+
if (!(_ >= w)) {
|
|
112
|
+
this.guardAttemptsByBlockId.set(g, _ + 1);
|
|
113
|
+
try {
|
|
114
|
+
this.api.getDocumentModifier().modifyHtml(r).prepend(" ").apply(new d("Ensure unsubscribe link text guard"));
|
|
115
|
+
} catch (b) {
|
|
116
|
+
console.warn("[UnsubscribeBlock] Failed to ensure link text guard:", b);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
69
119
|
}
|
|
70
120
|
_hasUnsubscribeLink(e) {
|
|
71
121
|
return "querySelector" in e ? !!e.querySelector(m) : !1;
|
|
72
122
|
}
|
|
73
123
|
_readBlockId(e) {
|
|
74
|
-
return "getAttribute" in e ? e.getAttribute(
|
|
124
|
+
return "getAttribute" in e ? e.getAttribute(n.BLOCK_ID) : null;
|
|
75
125
|
}
|
|
76
126
|
/**
|
|
77
127
|
* Returns the block's stable id, assigning one via the document modifier if
|
|
@@ -85,13 +135,13 @@ class F extends L {
|
|
|
85
135
|
return t;
|
|
86
136
|
if (!("getAttribute" in e))
|
|
87
137
|
return null;
|
|
88
|
-
const
|
|
138
|
+
const s = this._generateNextBlockId();
|
|
89
139
|
try {
|
|
90
|
-
this.api.getDocumentModifier().modifyHtml(e).setAttribute(
|
|
91
|
-
} catch (
|
|
92
|
-
return console.warn("[UnsubscribeBlock] Failed to assign block id:",
|
|
140
|
+
this.api.getDocumentModifier().modifyHtml(e).setAttribute(n.BLOCK_ID, s).apply(new d(`Assign unsubscribe block id ${s}`));
|
|
141
|
+
} catch (r) {
|
|
142
|
+
return console.warn("[UnsubscribeBlock] Failed to assign block id:", r), null;
|
|
93
143
|
}
|
|
94
|
-
return
|
|
144
|
+
return s;
|
|
95
145
|
}
|
|
96
146
|
/**
|
|
97
147
|
* Generates a unique id by scanning the document for the highest existing
|
|
@@ -102,10 +152,10 @@ class F extends L {
|
|
|
102
152
|
let e = 0;
|
|
103
153
|
try {
|
|
104
154
|
const t = this.api.getDocumentRoot();
|
|
105
|
-
t && "querySelectorAll" in t && t.querySelectorAll(
|
|
106
|
-
if ("getAttribute" in
|
|
107
|
-
const
|
|
108
|
-
|
|
155
|
+
t && "querySelectorAll" in t && t.querySelectorAll(E).forEach((r) => {
|
|
156
|
+
if ("getAttribute" in r) {
|
|
157
|
+
const i = r.getAttribute(n.BLOCK_ID), l = i ? parseInt(i) : 0;
|
|
158
|
+
l > e && (e = l);
|
|
109
159
|
}
|
|
110
160
|
});
|
|
111
161
|
} catch {
|
|
@@ -114,14 +164,14 @@ class F extends L {
|
|
|
114
164
|
}
|
|
115
165
|
_warnLinkRemoved() {
|
|
116
166
|
try {
|
|
117
|
-
const { showToaster: e } =
|
|
167
|
+
const { showToaster: e } = f();
|
|
118
168
|
e({
|
|
119
|
-
type:
|
|
120
|
-
message: this.api.translate(
|
|
169
|
+
type: A.Warning,
|
|
170
|
+
message: this.api.translate(R),
|
|
121
171
|
actionButton: {
|
|
122
172
|
text: this.api.translate("Visit Academy"),
|
|
123
173
|
onClick: () => {
|
|
124
|
-
window.open(
|
|
174
|
+
window.open(U, "_blank", "noopener,noreferrer");
|
|
125
175
|
}
|
|
126
176
|
}
|
|
127
177
|
});
|
|
@@ -131,26 +181,26 @@ class F extends L {
|
|
|
131
181
|
}
|
|
132
182
|
_setupSelectEventListener() {
|
|
133
183
|
this._removeSelectEventListener(), this.selectEventListener = (e) => {
|
|
134
|
-
const t = e, { collectionType:
|
|
135
|
-
this._updateBlock(
|
|
136
|
-
}, document.addEventListener(
|
|
184
|
+
const t = e, { collectionType: s, selectedPages: r } = t.detail;
|
|
185
|
+
this._updateBlock(s, r.join(","));
|
|
186
|
+
}, document.addEventListener(p.SELECT, this.selectEventListener);
|
|
137
187
|
}
|
|
138
188
|
_removeSelectEventListener() {
|
|
139
|
-
this.selectEventListener && (document.removeEventListener(
|
|
189
|
+
this.selectEventListener && (document.removeEventListener(p.SELECT, this.selectEventListener), this.selectEventListener = null);
|
|
140
190
|
}
|
|
141
191
|
_setupCancelEventListener() {
|
|
142
192
|
this._removeCancelEventListener(), this.cancelEventListener = () => {
|
|
143
193
|
this._handleCancel();
|
|
144
|
-
}, document.addEventListener(
|
|
194
|
+
}, document.addEventListener(p.CANCEL, this.cancelEventListener);
|
|
145
195
|
}
|
|
146
196
|
_removeCancelEventListener() {
|
|
147
|
-
this.cancelEventListener && (document.removeEventListener(
|
|
197
|
+
this.cancelEventListener && (document.removeEventListener(p.CANCEL, this.cancelEventListener), this.cancelEventListener = null);
|
|
148
198
|
}
|
|
149
199
|
_handleCancel() {
|
|
150
200
|
try {
|
|
151
201
|
if (!this.currentNode)
|
|
152
202
|
return;
|
|
153
|
-
this.api.getDocumentModifier().modifyHtml(this.currentNode).replaceWith(`<${
|
|
203
|
+
this.api.getDocumentModifier().modifyHtml(this.currentNode).replaceWith(`<${I.EMPTY_CONTAINER}/>`).apply(new d("Removed unsubscribe block due to cancel"));
|
|
154
204
|
} catch (e) {
|
|
155
205
|
console.warn("[UnsubscribeBlock] Failed to remove unsubscribe block:", e);
|
|
156
206
|
}
|
|
@@ -161,32 +211,32 @@ class F extends L {
|
|
|
161
211
|
_updateBlock(e, t) {
|
|
162
212
|
if (!this.currentNode || !("querySelector" in this.currentNode))
|
|
163
213
|
return;
|
|
164
|
-
const
|
|
165
|
-
if (!
|
|
214
|
+
const s = this.currentNode.querySelector(m);
|
|
215
|
+
if (!s)
|
|
166
216
|
return;
|
|
167
|
-
const
|
|
168
|
-
this.api.getDocumentModifier().modifyHtml(
|
|
217
|
+
const r = this._getMergeTag(e);
|
|
218
|
+
this.api.getDocumentModifier().modifyHtml(s).setAttribute("href", r).apply(new d(`Updated unsubscribe link to ${r}`)), this.api.getDocumentModifier().modifyHtml(this.currentNode).setAttribute(n.PAGE_TYPE, e.toString()).setAttribute(n.PAGE_LIST, t).apply(new d("Updated unsubscribe block metadata"));
|
|
169
219
|
}
|
|
170
220
|
_getMergeTag(e) {
|
|
171
|
-
return
|
|
221
|
+
return D[e] ?? N;
|
|
172
222
|
}
|
|
173
223
|
_openDrawer() {
|
|
174
224
|
if (!(this.currentNode && this.currentNode.getAttribute("data-unsubscribe-page-type")))
|
|
175
225
|
try {
|
|
176
|
-
const e =
|
|
226
|
+
const e = u();
|
|
177
227
|
e.typeSelectionDrawerStatus = !0;
|
|
178
228
|
} catch (e) {
|
|
179
229
|
console.error("[UnsubscribeBlock] Failed to open drawer:", e);
|
|
180
230
|
}
|
|
181
231
|
}
|
|
182
232
|
_checkExistingBlocks() {
|
|
183
|
-
const e =
|
|
184
|
-
e.isGlobalUnsubscribeDisabled = !1, e.isSubscriptionPreferencesCenterDisabled = !1, this.api.getDocumentRoot().querySelectorAll(
|
|
185
|
-
if ("getAttribute" in
|
|
186
|
-
const
|
|
187
|
-
if (
|
|
188
|
-
const
|
|
189
|
-
|
|
233
|
+
const e = u();
|
|
234
|
+
e.isGlobalUnsubscribeDisabled = !1, e.isSubscriptionPreferencesCenterDisabled = !1, this.api.getDocumentRoot().querySelectorAll(E).forEach((s) => {
|
|
235
|
+
if ("getAttribute" in s) {
|
|
236
|
+
const r = s.getAttribute(n.PAGE_TYPE);
|
|
237
|
+
if (r) {
|
|
238
|
+
const i = Number(r);
|
|
239
|
+
i === h.GLOBAL_UNSUBSCRIBE ? e.isGlobalUnsubscribeDisabled = !0 : i === h.SUBSCRIPTION_PREFERENCE_CENTER && (e.isSubscriptionPreferencesCenterDisabled = !0);
|
|
190
240
|
}
|
|
191
241
|
}
|
|
192
242
|
});
|
|
@@ -194,26 +244,26 @@ class F extends L {
|
|
|
194
244
|
async _loadBlockState(e) {
|
|
195
245
|
if (!("getAttribute" in e))
|
|
196
246
|
return;
|
|
197
|
-
const t = e.getAttribute(
|
|
198
|
-
if (!t || !
|
|
247
|
+
const t = e.getAttribute(n.PAGE_TYPE), s = e.getAttribute(n.PAGE_LIST);
|
|
248
|
+
if (!t || !s)
|
|
199
249
|
return;
|
|
200
|
-
const
|
|
201
|
-
await
|
|
250
|
+
const r = u(), i = Number(t), l = B(s);
|
|
251
|
+
await r.fetchTemplates(), r.setCollectionWithoutAutoSelection(i), r.loadSelectedTemplates(l);
|
|
202
252
|
}
|
|
203
253
|
_resetStoreState() {
|
|
204
|
-
|
|
254
|
+
u().$reset();
|
|
205
255
|
}
|
|
206
256
|
_removeBlockTemplatesFromStore(e) {
|
|
207
257
|
if (!("getAttribute" in e))
|
|
208
258
|
return;
|
|
209
|
-
const t = e.getAttribute(
|
|
259
|
+
const t = e.getAttribute(n.PAGE_LIST);
|
|
210
260
|
if (!t)
|
|
211
261
|
return;
|
|
212
|
-
const
|
|
213
|
-
|
|
262
|
+
const s = u(), r = B(t);
|
|
263
|
+
s.removeUnsubscribePages(r);
|
|
214
264
|
}
|
|
215
265
|
}
|
|
216
266
|
export {
|
|
217
|
-
|
|
218
|
-
|
|
267
|
+
C as UNSUBSCRIBE_BLOCK_ID,
|
|
268
|
+
H as UnsubscribeBlock
|
|
219
269
|
};
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
import { BlockType as s } from "../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
|
|
2
|
-
const e = "unsubscribe", n = "{{ins-unsubscribe-link}}",
|
|
2
|
+
const e = "unsubscribe", n = "{{ins-unsubscribe-link}}", b = `
|
|
3
3
|
<${s.BLOCK_TEXT}
|
|
4
4
|
class="unsubscribe-block-v2 esd-block-unsubscribe es-p0"
|
|
5
5
|
align="center"
|
|
6
6
|
data-unsubscribe-page-type=""
|
|
7
7
|
data-unsubscribe-page-list=""
|
|
8
8
|
>
|
|
9
|
-
<p> <
|
|
9
|
+
<p> <a
|
|
10
10
|
href="${n}"
|
|
11
11
|
class="unsubscribe-link"
|
|
12
12
|
target="_blank"
|
|
13
13
|
data-unsubscribe-link="true"
|
|
14
|
-
>${e}</a></
|
|
14
|
+
>${e}</a></p>
|
|
15
15
|
</${s.BLOCK_TEXT}>
|
|
16
16
|
`;
|
|
17
17
|
function u() {
|
|
18
|
-
return
|
|
18
|
+
return b;
|
|
19
19
|
}
|
|
20
20
|
export {
|
|
21
21
|
u as getDefaultTemplate
|
package/dist/guido.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.gap-16[data-v-5553d071],.gap-16[data-v-0e1b0c54]{gap:16px}[data-v-73199fa4] .in-button-v2__wrapper{line-height:0}[data-v-22226124] .in-segments-wrapper__button_selected,[data-v-22226124] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb;color:#0010ac;border-color:#0010ac}[data-v-2cb418af] .in-progress-wrapper__progress p span:last-child{display:none!important}[data-v-2cb418af] .in-progress-description-status{display:none!important}.view-options-wrapper[data-v-195ab6d4]{position:relative;display:inline-block}.new-tag[data-v-195ab6d4]{position:absolute;top:-8px;right:-16px;z-index:10}[data-v-195ab6d4] .guido__view-option-selection-desktop svg,[data-v-195ab6d4] .guido__view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-195ab6d4] .in-segments-wrapper__button_selected,[data-v-195ab6d4] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}[data-v-195ab6d4] .in-tooltip-wrapper__icon{cursor:pointer}.editor-toolbar[data-v-173c3a40]{gap:4px}.version-history-item[data-v-ee4b9c3f]{flex-basis:200px}.version-history[data-v-64c52560]{gap:8px}.version-history__toolbar[data-v-64c52560]{gap:4px}.view-options-wrapper[data-v-d405ca59]{position:relative;display:inline-block}.new-tag[data-v-d405ca59]{position:absolute;top:-8px;right:-16px;z-index:10}[data-v-d405ca59] .guido__verion-history-view-option-selection-desktop svg,[data-v-d405ca59] .guido__verion-history-view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-d405ca59] .in-segments-wrapper__button_selected,[data-v-d405ca59] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}[data-v-d405ca59] .in-tooltip-wrapper__icon{cursor:pointer}.auto-save-toggle[data-v-2c964af4]{position:relative}.auto-save-toggle__info-box[data-v-2c964af4]{position:absolute;top:100%;left:0;z-index:10;width:280px}.editor-actions[data-v-82128f7d]{gap:4px}.header-wrapper[data-v-5c02dcc7]{min-width:1000px}.guido-loading__wrapper[data-v-07c4b2d8]{height:100%;top:75px!important;bottom:0!important}.guido-editor__wrapper[data-v-50dac6de]{--ribbon-offset: 0px;position:relative;width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__container[data-v-50dac6de]{width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__no-header[data-v-50dac6de]{height:calc(100vh - 75px - var(--ribbon-offset))}[data-v-293f1c47] .in-breadcrumb-wrapper__links{cursor:pointer}.templates-wrapper[data-v-df672485]{gap:16px;grid-template-columns:repeat(3,1fr)}.templates-wrapper .template-wrapper[data-v-df672485]{cursor:pointer}.templates-wrapper .template-wrapper .template-container[data-v-df672485]{height:274px;padding:2px;transition:none}.templates-wrapper .template-wrapper .template-container.selected[data-v-df672485]{padding:1px}.templates-wrapper .template-wrapper .template-container .thumbnail[data-v-df672485]{object-fit:cover;transform:scale(1)}[data-v-
|
|
1
|
+
.gap-16[data-v-5553d071],.gap-16[data-v-0e1b0c54]{gap:16px}[data-v-73199fa4] .in-button-v2__wrapper{line-height:0}[data-v-22226124] .in-segments-wrapper__button_selected,[data-v-22226124] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb;color:#0010ac;border-color:#0010ac}[data-v-2cb418af] .in-progress-wrapper__progress p span:last-child{display:none!important}[data-v-2cb418af] .in-progress-description-status{display:none!important}.view-options-wrapper[data-v-195ab6d4]{position:relative;display:inline-block}.new-tag[data-v-195ab6d4]{position:absolute;top:-8px;right:-16px;z-index:10}[data-v-195ab6d4] .guido__view-option-selection-desktop svg,[data-v-195ab6d4] .guido__view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-195ab6d4] .in-segments-wrapper__button_selected,[data-v-195ab6d4] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}[data-v-195ab6d4] .in-tooltip-wrapper__icon{cursor:pointer}.editor-toolbar[data-v-173c3a40]{gap:4px}.version-history-item[data-v-ee4b9c3f]{flex-basis:200px}.version-history[data-v-64c52560]{gap:8px}.version-history__toolbar[data-v-64c52560]{gap:4px}.view-options-wrapper[data-v-d405ca59]{position:relative;display:inline-block}.new-tag[data-v-d405ca59]{position:absolute;top:-8px;right:-16px;z-index:10}[data-v-d405ca59] .guido__verion-history-view-option-selection-desktop svg,[data-v-d405ca59] .guido__verion-history-view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-d405ca59] .in-segments-wrapper__button_selected,[data-v-d405ca59] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}[data-v-d405ca59] .in-tooltip-wrapper__icon{cursor:pointer}.auto-save-toggle[data-v-2c964af4]{position:relative}.auto-save-toggle__info-box[data-v-2c964af4]{position:absolute;top:100%;left:0;z-index:10;width:280px}.editor-actions[data-v-82128f7d]{gap:4px}.header-wrapper[data-v-5c02dcc7]{min-width:1000px}.guido-loading__wrapper[data-v-07c4b2d8]{height:100%;top:75px!important;bottom:0!important}.guido-editor__wrapper[data-v-50dac6de]{--ribbon-offset: 0px;position:relative;width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__container[data-v-50dac6de]{width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__no-header[data-v-50dac6de]{height:calc(100vh - 75px - var(--ribbon-offset))}[data-v-293f1c47] .in-breadcrumb-wrapper__links{cursor:pointer}.templates-wrapper[data-v-df672485]{gap:16px;grid-template-columns:repeat(3,1fr)}.templates-wrapper .template-wrapper[data-v-df672485]{cursor:pointer}.templates-wrapper .template-wrapper .template-container[data-v-df672485]{height:274px;padding:2px;transition:none}.templates-wrapper .template-wrapper .template-container.selected[data-v-df672485]{padding:1px}.templates-wrapper .template-wrapper .template-container .thumbnail[data-v-df672485]{object-fit:cover;transform:scale(1)}[data-v-43c617a7] .guido__verion-history-view-option-selection-desktop svg,[data-v-43c617a7] .guido__verion-history-view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-43c617a7] .in-segments-wrapper__button_selected,[data-v-43c617a7] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}.error-list[data-v-c3fd5d4b]{gap:16px}.desktop-browser-header[data-v-d86c5af5]{height:79px;min-height:79px}.desktop-browser-header__left[data-v-d86c5af5]{-webkit-user-drag:none;height:79px;width:378px}.desktop-browser-header__center[data-v-d86c5af5]{height:79px;background-repeat:repeat-x;background-size:auto 100%;background-position:left top}.desktop-browser-header__right[data-v-d86c5af5]{-webkit-user-drag:none;height:79px;width:112px}.desktop-preview[data-v-988f8da6]{min-width:602px;height:70vh;min-height:583px;border-radius:10px}.desktop-preview iframe[data-v-988f8da6]{min-height:504px}.iframe-wrapper[data-v-e0424e99]{width:258px}.iframe-scaled[data-v-e0424e99]{width:320px;height:124.0310077519%;transform:scale(.80625);transform-origin:top left}.cropped-text[data-v-eb3d05d7]{width:220px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mobile-preview-wrapper__phone[data-v-3f472f96]{width:282px}.mobile-preview-wrapper__phone img[data-v-3f472f96]{object-fit:cover;border-radius:44px}.mobile-preview-wrapper__content[data-v-3f472f96]{width:258px;height:450px;left:12px}[data-v-7419ae06] .vueperslides__bullets,[data-v-796d193b] .vueperslides__bullets{pointer-events:none!important}[data-v-796d193b] .vueperslides__parallax-wrapper{height:110px!important}[data-v-cadfc82d] .vueperslides__bullets{pointer-events:none!important}[data-v-cadfc82d] .vueperslides__parallax-wrapper{height:110px!important}
|
|
@@ -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 {};
|
|
@@ -6,6 +6,7 @@ export declare class UnsubscribeBlock extends Block {
|
|
|
6
6
|
private cancelEventListener;
|
|
7
7
|
private currentNode?;
|
|
8
8
|
private linkStateByBlockId;
|
|
9
|
+
private guardAttemptsByBlockId;
|
|
9
10
|
constructor();
|
|
10
11
|
getId(): string;
|
|
11
12
|
getIcon(): string;
|
|
@@ -15,9 +16,17 @@ export declare class UnsubscribeBlock extends Block {
|
|
|
15
16
|
getTemplate(): string;
|
|
16
17
|
getContextActionsIds(): string[];
|
|
17
18
|
onSelect(node: ImmutableHtmlElementNode): void;
|
|
19
|
+
onCreated(node: ImmutableHtmlNode): void;
|
|
20
|
+
onDocumentInit(): void;
|
|
18
21
|
onDocumentChanged(node: ImmutableHtmlNode): void;
|
|
19
22
|
onDelete(node: ImmutableHtmlElementNode): void;
|
|
20
23
|
onDestroy(): void;
|
|
24
|
+
/**
|
|
25
|
+
* Guarantees a plain-text node before the link's wrapper inside the <p>.
|
|
26
|
+
* Without it the only caret position left of the link is inside the anchor,
|
|
27
|
+
* so anything typed there becomes part of the link (SD-143097).
|
|
28
|
+
*/
|
|
29
|
+
private _ensureLeadingTextGuard;
|
|
21
30
|
private _hasUnsubscribeLink;
|
|
22
31
|
private _readBlockId;
|
|
23
32
|
/**
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@useinsider/guido",
|
|
3
|
-
"version": "3.7.0-beta.
|
|
3
|
+
"version": "3.7.0-beta.b2980d8",
|
|
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,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 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
File without changes
|