@sudobility/subscription_pages 0.0.2 → 0.0.3
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/index.js +194 -173
- package/dist/pages/SubscriptionByOfferPage.d.ts +9 -1
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -1,54 +1,54 @@
|
|
|
1
|
-
import { jsx as
|
|
2
|
-
import { useState as
|
|
3
|
-
import { usePackagesByDuration as
|
|
4
|
-
import { SubscriptionLayout as
|
|
5
|
-
function
|
|
6
|
-
isLoggedIn:
|
|
7
|
-
onNavigateToLogin:
|
|
8
|
-
userId:
|
|
9
|
-
userEmail:
|
|
10
|
-
featuresByPackage:
|
|
11
|
-
freeFeatures:
|
|
12
|
-
title:
|
|
13
|
-
className:
|
|
1
|
+
import { jsx as c } from "react/jsx-runtime";
|
|
2
|
+
import { useState as I } from "react";
|
|
3
|
+
import { usePackagesByDuration as N, useUserSubscription as H, getSubscriptionInstance as J, refreshSubscription as K, useAllOfferings as ee, useOfferingPackages as te, periodToMonths as G } from "@sudobility/subscription_lib";
|
|
4
|
+
import { SubscriptionLayout as y, SubscriptionTile as Q, SegmentedControl as W } from "@sudobility/subscription-components";
|
|
5
|
+
function oe({
|
|
6
|
+
isLoggedIn: n,
|
|
7
|
+
onNavigateToLogin: s,
|
|
8
|
+
userId: f,
|
|
9
|
+
userEmail: o,
|
|
10
|
+
featuresByPackage: i,
|
|
11
|
+
freeFeatures: u,
|
|
12
|
+
title: g = "Choose Your Plan",
|
|
13
|
+
className: m
|
|
14
14
|
}) {
|
|
15
15
|
const {
|
|
16
|
-
packagesByDuration:
|
|
17
|
-
availableDurations:
|
|
18
|
-
isLoading:
|
|
19
|
-
error:
|
|
20
|
-
} =
|
|
21
|
-
subscription:
|
|
22
|
-
isLoading:
|
|
23
|
-
error:
|
|
24
|
-
} =
|
|
16
|
+
packagesByDuration: P,
|
|
17
|
+
availableDurations: l,
|
|
18
|
+
isLoading: k,
|
|
19
|
+
error: B
|
|
20
|
+
} = N(), {
|
|
21
|
+
subscription: e,
|
|
22
|
+
isLoading: t,
|
|
23
|
+
error: F
|
|
24
|
+
} = H({ userId: f, userEmail: o }), [T, h] = I(null), [O, w] = I(null), [A, E] = I(!1), S = T ?? l[0] ?? null, U = k || t, D = B || F, C = async (r, d) => {
|
|
25
25
|
try {
|
|
26
|
-
|
|
27
|
-
packageId:
|
|
28
|
-
offeringId:
|
|
29
|
-
customerEmail:
|
|
30
|
-
}), await
|
|
31
|
-
} catch (
|
|
32
|
-
|
|
33
|
-
|
|
26
|
+
E(!0), w(null), await J().purchase({
|
|
27
|
+
packageId: r,
|
|
28
|
+
offeringId: d,
|
|
29
|
+
customerEmail: o
|
|
30
|
+
}), await K();
|
|
31
|
+
} catch (v) {
|
|
32
|
+
w(
|
|
33
|
+
v instanceof Error ? v.message : "Purchase failed"
|
|
34
34
|
);
|
|
35
35
|
} finally {
|
|
36
|
-
|
|
36
|
+
E(!1);
|
|
37
37
|
}
|
|
38
|
-
},
|
|
38
|
+
}, M = () => n ? (e == null ? void 0 : e.isActive) && e.packageId ? {
|
|
39
39
|
title: "Free",
|
|
40
40
|
price: "$0",
|
|
41
|
-
features:
|
|
41
|
+
features: u ?? [],
|
|
42
42
|
ctaButton: {
|
|
43
43
|
label: "Cancel Subscription",
|
|
44
44
|
onClick: () => {
|
|
45
|
-
|
|
45
|
+
e.managementUrl && window.open(e.managementUrl, "_blank");
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
48
|
} : {
|
|
49
49
|
title: "Free",
|
|
50
50
|
price: "$0",
|
|
51
|
-
features:
|
|
51
|
+
features: u ?? [],
|
|
52
52
|
ctaButton: {
|
|
53
53
|
label: "Current Plan"
|
|
54
54
|
},
|
|
@@ -56,252 +56,273 @@ function ee({
|
|
|
56
56
|
} : {
|
|
57
57
|
title: "Free",
|
|
58
58
|
price: "$0",
|
|
59
|
-
features:
|
|
59
|
+
features: u ?? [],
|
|
60
60
|
ctaButton: {
|
|
61
61
|
label: "Try it for Free",
|
|
62
|
-
onClick:
|
|
62
|
+
onClick: s
|
|
63
63
|
}
|
|
64
|
-
},
|
|
65
|
-
if (!
|
|
64
|
+
}, R = (r) => {
|
|
65
|
+
if (!n)
|
|
66
66
|
return {
|
|
67
67
|
label: "Log in to Continue",
|
|
68
|
-
onClick:
|
|
68
|
+
onClick: s
|
|
69
69
|
};
|
|
70
|
-
const
|
|
71
|
-
if ((
|
|
72
|
-
return
|
|
70
|
+
const d = (e == null ? void 0 : e.isActive) && e.packageId;
|
|
71
|
+
if ((e == null ? void 0 : e.packageId) !== r.package.packageId)
|
|
72
|
+
return d ? {
|
|
73
73
|
label: "Change Subscription",
|
|
74
|
-
onClick: () =>
|
|
74
|
+
onClick: () => C(r.package.packageId, r.offerId)
|
|
75
75
|
} : {
|
|
76
76
|
label: "Subscribe",
|
|
77
|
-
onClick: () =>
|
|
77
|
+
onClick: () => C(r.package.packageId, r.offerId)
|
|
78
78
|
};
|
|
79
79
|
};
|
|
80
80
|
if (U)
|
|
81
|
-
return /* @__PURE__ */
|
|
82
|
-
|
|
81
|
+
return /* @__PURE__ */ c(
|
|
82
|
+
y,
|
|
83
83
|
{
|
|
84
|
-
title:
|
|
85
|
-
className:
|
|
84
|
+
title: g,
|
|
85
|
+
className: m,
|
|
86
86
|
variant: "cta",
|
|
87
|
-
children: /* @__PURE__ */
|
|
87
|
+
children: /* @__PURE__ */ c("p", { children: "Loading subscription plans..." })
|
|
88
88
|
}
|
|
89
89
|
);
|
|
90
|
-
const
|
|
90
|
+
const Y = O ?? (D ? D.message : null), L = n && (e != null && e.isActive) && e.packageId ? {
|
|
91
91
|
isActive: !0,
|
|
92
92
|
activeContent: {
|
|
93
93
|
title: "Active Subscription",
|
|
94
94
|
fields: [
|
|
95
|
-
...
|
|
96
|
-
...
|
|
95
|
+
...e.productId ? [{ label: "Plan", value: e.productId }] : [],
|
|
96
|
+
...e.expirationDate ? [
|
|
97
97
|
{
|
|
98
98
|
label: "Expires",
|
|
99
|
-
value:
|
|
99
|
+
value: e.expirationDate.toLocaleDateString()
|
|
100
100
|
}
|
|
101
101
|
] : [],
|
|
102
|
-
...
|
|
102
|
+
...e.willRenew !== void 0 ? [
|
|
103
103
|
{
|
|
104
104
|
label: "Auto-Renew",
|
|
105
|
-
value:
|
|
105
|
+
value: e.willRenew ? "Yes" : "No"
|
|
106
106
|
}
|
|
107
107
|
] : []
|
|
108
108
|
]
|
|
109
109
|
}
|
|
110
|
-
} : void 0,
|
|
111
|
-
return /* @__PURE__ */
|
|
112
|
-
|
|
110
|
+
} : void 0, $ = S ? P[S] ?? [] : [];
|
|
111
|
+
return /* @__PURE__ */ c(
|
|
112
|
+
y,
|
|
113
113
|
{
|
|
114
|
-
title:
|
|
115
|
-
className:
|
|
114
|
+
title: g,
|
|
115
|
+
className: m,
|
|
116
116
|
variant: "cta",
|
|
117
|
-
error:
|
|
118
|
-
currentStatus:
|
|
119
|
-
freeTileConfig:
|
|
120
|
-
aboveProducts:
|
|
121
|
-
|
|
117
|
+
error: Y,
|
|
118
|
+
currentStatus: L,
|
|
119
|
+
freeTileConfig: M(),
|
|
120
|
+
aboveProducts: l.length > 1 ? /* @__PURE__ */ c(
|
|
121
|
+
W,
|
|
122
122
|
{
|
|
123
|
-
options:
|
|
124
|
-
value:
|
|
125
|
-
label:
|
|
123
|
+
options: l.map((r) => ({
|
|
124
|
+
value: r,
|
|
125
|
+
label: r.charAt(0).toUpperCase() + r.slice(1)
|
|
126
126
|
})),
|
|
127
|
-
value:
|
|
128
|
-
onChange: (
|
|
127
|
+
value: S ?? l[0],
|
|
128
|
+
onChange: (r) => h(r)
|
|
129
129
|
}
|
|
130
130
|
) : void 0,
|
|
131
|
-
children:
|
|
132
|
-
var
|
|
133
|
-
const
|
|
134
|
-
return /* @__PURE__ */
|
|
135
|
-
|
|
131
|
+
children: $.map((r) => {
|
|
132
|
+
var x;
|
|
133
|
+
const d = n && (e == null ? void 0 : e.isActive) && e.packageId === r.package.packageId, v = R(r);
|
|
134
|
+
return /* @__PURE__ */ c(
|
|
135
|
+
Q,
|
|
136
136
|
{
|
|
137
|
-
id:
|
|
138
|
-
title:
|
|
139
|
-
price: ((
|
|
140
|
-
periodLabel:
|
|
141
|
-
features: (
|
|
137
|
+
id: r.package.packageId,
|
|
138
|
+
title: r.package.name,
|
|
139
|
+
price: ((x = r.package.product) == null ? void 0 : x.priceString) ?? "$0",
|
|
140
|
+
periodLabel: r.package.product ? `/${r.package.product.period}` : void 0,
|
|
141
|
+
features: (i == null ? void 0 : i[r.package.packageId]) ?? [],
|
|
142
142
|
isSelected: !1,
|
|
143
143
|
onSelect: () => {
|
|
144
144
|
},
|
|
145
|
-
isCurrentPlan:
|
|
146
|
-
ctaButton:
|
|
147
|
-
disabled:
|
|
145
|
+
isCurrentPlan: d,
|
|
146
|
+
ctaButton: v,
|
|
147
|
+
disabled: A
|
|
148
148
|
},
|
|
149
|
-
`${
|
|
149
|
+
`${r.offerId}-${r.package.packageId}`
|
|
150
150
|
);
|
|
151
151
|
})
|
|
152
152
|
}
|
|
153
153
|
);
|
|
154
154
|
}
|
|
155
|
-
function re({
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
155
|
+
function re(n, s) {
|
|
156
|
+
if (!n.product || !s.product) return null;
|
|
157
|
+
const f = G(n.product.period), o = G(s.product.period);
|
|
158
|
+
if (f <= 0 || o <= 0 || f === 1 / 0 || o === 1 / 0 || f === o) return null;
|
|
159
|
+
const i = n.product.price / f, u = s.product.price / o;
|
|
160
|
+
if (i <= 0) return null;
|
|
161
|
+
const g = Math.round(
|
|
162
|
+
(i - u) / i * 100
|
|
163
|
+
);
|
|
164
|
+
return g > 0 ? g : null;
|
|
165
|
+
}
|
|
166
|
+
function le({
|
|
167
|
+
isLoggedIn: n,
|
|
168
|
+
onNavigateToLogin: s,
|
|
169
|
+
userId: f,
|
|
170
|
+
userEmail: o,
|
|
171
|
+
featuresByPackage: i,
|
|
172
|
+
freeFeatures: u,
|
|
173
|
+
title: g = "Choose Your Plan",
|
|
174
|
+
className: m,
|
|
175
|
+
t: P
|
|
164
176
|
}) {
|
|
165
|
-
var
|
|
166
|
-
const {
|
|
167
|
-
offerings:
|
|
168
|
-
isLoading:
|
|
169
|
-
error:
|
|
170
|
-
} =
|
|
171
|
-
subscription:
|
|
172
|
-
isLoading:
|
|
177
|
+
var V;
|
|
178
|
+
const l = (a, p) => P ? P(a, p) : p, {
|
|
179
|
+
offerings: k,
|
|
180
|
+
isLoading: B,
|
|
181
|
+
error: e
|
|
182
|
+
} = ee(), {
|
|
183
|
+
subscription: t,
|
|
184
|
+
isLoading: F,
|
|
173
185
|
error: T
|
|
174
|
-
} =
|
|
175
|
-
packages:
|
|
176
|
-
isLoading:
|
|
177
|
-
error:
|
|
178
|
-
} =
|
|
186
|
+
} = H({ userId: f, userEmail: o }), [h, O] = I("free"), [w, A] = I(null), [E, S] = I(!1), U = ((V = k[0]) == null ? void 0 : V.offerId) ?? "", D = h !== "free" ? h : U, {
|
|
187
|
+
packages: C,
|
|
188
|
+
isLoading: M,
|
|
189
|
+
error: R
|
|
190
|
+
} = te(D), Y = B || F || M, L = e || T || R, $ = async (a, p) => {
|
|
179
191
|
try {
|
|
180
|
-
|
|
192
|
+
S(!0), A(null), await J().purchase({
|
|
181
193
|
packageId: a,
|
|
182
|
-
offeringId:
|
|
183
|
-
customerEmail:
|
|
184
|
-
}), await
|
|
185
|
-
} catch (
|
|
186
|
-
|
|
187
|
-
|
|
194
|
+
offeringId: p,
|
|
195
|
+
customerEmail: o
|
|
196
|
+
}), await K();
|
|
197
|
+
} catch (b) {
|
|
198
|
+
A(
|
|
199
|
+
b instanceof Error ? b.message : "Purchase failed"
|
|
188
200
|
);
|
|
189
201
|
} finally {
|
|
190
|
-
|
|
202
|
+
S(!1);
|
|
191
203
|
}
|
|
192
|
-
},
|
|
193
|
-
{ value: "free", label: "Free" },
|
|
194
|
-
...
|
|
204
|
+
}, r = [
|
|
205
|
+
{ value: "free", label: l("free", "Free") },
|
|
206
|
+
...k.map((a) => ({
|
|
195
207
|
value: a.offerId,
|
|
196
|
-
label: a.offerId
|
|
208
|
+
label: l(a.offerId, a.offerId.charAt(0).toUpperCase() + a.offerId.slice(1))
|
|
197
209
|
}))
|
|
198
|
-
],
|
|
199
|
-
title: "Free",
|
|
210
|
+
], d = C[0] ?? null, v = () => n ? (t == null ? void 0 : t.isActive) && t.packageId ? {
|
|
211
|
+
title: l("free", "Free"),
|
|
200
212
|
price: "$0",
|
|
201
|
-
features:
|
|
213
|
+
features: u ?? [],
|
|
202
214
|
ctaButton: {
|
|
203
215
|
label: "Cancel Subscription",
|
|
204
216
|
onClick: () => {
|
|
205
|
-
|
|
217
|
+
t.managementUrl && window.open(t.managementUrl, "_blank");
|
|
206
218
|
}
|
|
207
219
|
}
|
|
208
220
|
} : {
|
|
209
|
-
title: "Free",
|
|
221
|
+
title: l("free", "Free"),
|
|
210
222
|
price: "$0",
|
|
211
|
-
features:
|
|
223
|
+
features: u ?? [],
|
|
212
224
|
ctaButton: {
|
|
213
225
|
label: "Current Plan"
|
|
214
226
|
},
|
|
215
227
|
topBadge: { text: "Current Plan", color: "blue" }
|
|
216
228
|
} : {
|
|
217
|
-
title: "Free",
|
|
229
|
+
title: l("free", "Free"),
|
|
218
230
|
price: "$0",
|
|
219
|
-
features:
|
|
231
|
+
features: u ?? [],
|
|
220
232
|
ctaButton: {
|
|
221
233
|
label: "Try it for Free",
|
|
222
|
-
onClick:
|
|
234
|
+
onClick: s
|
|
223
235
|
}
|
|
224
|
-
},
|
|
225
|
-
if (!
|
|
236
|
+
}, x = (a, p) => {
|
|
237
|
+
if (!n)
|
|
226
238
|
return {
|
|
227
239
|
label: "Log in to Continue",
|
|
228
|
-
onClick:
|
|
240
|
+
onClick: s
|
|
229
241
|
};
|
|
230
|
-
const
|
|
231
|
-
if ((
|
|
232
|
-
return
|
|
242
|
+
const b = (t == null ? void 0 : t.isActive) && t.packageId;
|
|
243
|
+
if ((t == null ? void 0 : t.packageId) !== a.packageId)
|
|
244
|
+
return b ? {
|
|
233
245
|
label: "Change Subscription",
|
|
234
|
-
onClick: () => $(a.packageId,
|
|
246
|
+
onClick: () => $(a.packageId, p)
|
|
235
247
|
} : {
|
|
236
248
|
label: "Subscribe",
|
|
237
|
-
onClick: () => $(a.packageId,
|
|
249
|
+
onClick: () => $(a.packageId, p)
|
|
238
250
|
};
|
|
239
251
|
};
|
|
240
252
|
if (Y)
|
|
241
|
-
return /* @__PURE__ */
|
|
242
|
-
|
|
253
|
+
return /* @__PURE__ */ c(
|
|
254
|
+
y,
|
|
243
255
|
{
|
|
244
|
-
title:
|
|
245
|
-
className:
|
|
256
|
+
title: g,
|
|
257
|
+
className: m,
|
|
246
258
|
variant: "cta",
|
|
247
|
-
children: /* @__PURE__ */
|
|
259
|
+
children: /* @__PURE__ */ c("p", { children: "Loading subscription plans..." })
|
|
248
260
|
}
|
|
249
261
|
);
|
|
250
|
-
const
|
|
262
|
+
const X = w ?? (L ? L.message : null), Z = n && (t != null && t.isActive) && t.packageId ? {
|
|
251
263
|
isActive: !0,
|
|
252
264
|
activeContent: {
|
|
253
265
|
title: "Active Subscription",
|
|
254
266
|
fields: [
|
|
255
|
-
...
|
|
256
|
-
...
|
|
267
|
+
...t.productId ? [{ label: "Plan", value: t.productId }] : [],
|
|
268
|
+
...t.expirationDate ? [
|
|
257
269
|
{
|
|
258
270
|
label: "Expires",
|
|
259
|
-
value:
|
|
271
|
+
value: t.expirationDate.toLocaleDateString()
|
|
260
272
|
}
|
|
261
273
|
] : [],
|
|
262
|
-
...
|
|
274
|
+
...t.willRenew !== void 0 ? [
|
|
263
275
|
{
|
|
264
276
|
label: "Auto-Renew",
|
|
265
|
-
value:
|
|
277
|
+
value: t.willRenew ? "Yes" : "No"
|
|
266
278
|
}
|
|
267
279
|
] : []
|
|
268
280
|
]
|
|
269
281
|
}
|
|
270
|
-
} : void 0,
|
|
271
|
-
return /* @__PURE__ */
|
|
272
|
-
|
|
282
|
+
} : void 0, _ = h === "free";
|
|
283
|
+
return /* @__PURE__ */ c(
|
|
284
|
+
y,
|
|
273
285
|
{
|
|
274
|
-
title:
|
|
275
|
-
className:
|
|
286
|
+
title: g,
|
|
287
|
+
className: m,
|
|
276
288
|
variant: "cta",
|
|
277
|
-
error:
|
|
278
|
-
currentStatus:
|
|
279
|
-
freeTileConfig:
|
|
280
|
-
aboveProducts:
|
|
281
|
-
|
|
289
|
+
error: X,
|
|
290
|
+
currentStatus: Z,
|
|
291
|
+
freeTileConfig: _ ? v() : void 0,
|
|
292
|
+
aboveProducts: r.length > 1 ? /* @__PURE__ */ c("div", { className: "flex justify-center", children: /* @__PURE__ */ c(
|
|
293
|
+
W,
|
|
282
294
|
{
|
|
283
|
-
options:
|
|
284
|
-
value:
|
|
285
|
-
onChange:
|
|
295
|
+
options: r,
|
|
296
|
+
value: h,
|
|
297
|
+
onChange: O
|
|
286
298
|
}
|
|
287
|
-
) : void 0,
|
|
288
|
-
children: !
|
|
289
|
-
var
|
|
290
|
-
const
|
|
291
|
-
|
|
292
|
-
|
|
299
|
+
) }) : void 0,
|
|
300
|
+
children: !_ && C.map((a) => {
|
|
301
|
+
var q;
|
|
302
|
+
const p = n && (t == null ? void 0 : t.isActive) && t.packageId === a.packageId, b = x(a, h);
|
|
303
|
+
let j;
|
|
304
|
+
if (d && a.packageId !== d.packageId) {
|
|
305
|
+
const z = re(d, a);
|
|
306
|
+
z !== null && (j = {
|
|
307
|
+
text: `Save ${z}%`,
|
|
308
|
+
isBestValue: a === C[C.length - 1]
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
return /* @__PURE__ */ c(
|
|
312
|
+
Q,
|
|
293
313
|
{
|
|
294
314
|
id: a.packageId,
|
|
295
315
|
title: a.name,
|
|
296
|
-
price: ((
|
|
316
|
+
price: ((q = a.product) == null ? void 0 : q.priceString) ?? "$0",
|
|
297
317
|
periodLabel: a.product ? `/${a.product.period}` : void 0,
|
|
298
|
-
features: (
|
|
318
|
+
features: (i == null ? void 0 : i[a.packageId]) ?? [],
|
|
299
319
|
isSelected: !1,
|
|
300
320
|
onSelect: () => {
|
|
301
321
|
},
|
|
302
|
-
isCurrentPlan:
|
|
303
|
-
ctaButton:
|
|
304
|
-
disabled:
|
|
322
|
+
isCurrentPlan: p,
|
|
323
|
+
ctaButton: b,
|
|
324
|
+
disabled: E,
|
|
325
|
+
discountBadge: j
|
|
305
326
|
},
|
|
306
327
|
a.packageId
|
|
307
328
|
);
|
|
@@ -310,6 +331,6 @@ function re({
|
|
|
310
331
|
);
|
|
311
332
|
}
|
|
312
333
|
export {
|
|
313
|
-
|
|
314
|
-
|
|
334
|
+
oe as SubscriptionByDurationPage,
|
|
335
|
+
le as SubscriptionByOfferPage
|
|
315
336
|
};
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Subscription page that organizes packages by offering.
|
|
5
5
|
* Uses a SegmentedControl to switch between offerings (with a 'Free' option).
|
|
6
|
+
* Packages within each offer are sorted by duration (short to long).
|
|
7
|
+
* Savings are calculated relative to the shortest duration package.
|
|
6
8
|
*/
|
|
7
9
|
export interface SubscriptionByOfferPageProps {
|
|
8
10
|
/** Whether the user is logged in */
|
|
@@ -21,5 +23,11 @@ export interface SubscriptionByOfferPageProps {
|
|
|
21
23
|
title?: string;
|
|
22
24
|
/** Additional CSS classes */
|
|
23
25
|
className?: string;
|
|
26
|
+
/**
|
|
27
|
+
* Translation function for localizing offer names and labels.
|
|
28
|
+
* Keys passed: offer identifiers (e.g. "basic", "premium"), "free".
|
|
29
|
+
* Falls back to the fallback string if not provided.
|
|
30
|
+
*/
|
|
31
|
+
t?: (key: string, fallback: string) => string;
|
|
24
32
|
}
|
|
25
|
-
export declare function SubscriptionByOfferPage({ isLoggedIn, onNavigateToLogin, userId, userEmail, featuresByPackage, freeFeatures, title, className, }: SubscriptionByOfferPageProps): import("react/jsx-runtime").JSX.Element;
|
|
33
|
+
export declare function SubscriptionByOfferPage({ isLoggedIn, onNavigateToLogin, userId, userEmail, featuresByPackage, freeFeatures, title, className, t: translate, }: SubscriptionByOfferPageProps): import("react/jsx-runtime").JSX.Element;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sudobility/subscription_pages",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.3",
|
|
4
4
|
"description": "Subscription page components for React web applications",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -28,13 +28,13 @@
|
|
|
28
28
|
"peerDependencies": {
|
|
29
29
|
"react": "^18.0.0 || ^19.0.0",
|
|
30
30
|
"react-dom": "^18.0.0 || ^19.0.0",
|
|
31
|
-
"@sudobility/subscription_lib": "^0.0.
|
|
31
|
+
"@sudobility/subscription_lib": "^0.0.26",
|
|
32
32
|
"@sudobility/subscription-components": "^1.0.27",
|
|
33
33
|
"@sudobility/types": "^1.9.58"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
36
|
"@sudobility/subscription-components": "^1.0.27",
|
|
37
|
-
"@sudobility/subscription_lib": "^0.0.
|
|
37
|
+
"@sudobility/subscription_lib": "^0.0.26",
|
|
38
38
|
"@sudobility/types": "^1.9.58",
|
|
39
39
|
"@testing-library/jest-dom": "^6.0.0",
|
|
40
40
|
"@testing-library/react": "^16.0.0",
|