@carlonicora/nextjs-jsonapi 6.12.0 → 6.12.1
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/{AbstractService-Ckm2X5fW.d.mts → AbstractService-N0wFgaHD.d.mts} +1 -1
- package/dist/{AbstractService-V3VGQMhL.d.ts → AbstractService-kNAykPDk.d.ts} +1 -1
- package/dist/{BlockNoteEditor-R2SLOYS6.js → BlockNoteEditor-CBYKEXAQ.js} +19 -19
- package/dist/{BlockNoteEditor-R2SLOYS6.js.map → BlockNoteEditor-CBYKEXAQ.js.map} +1 -1
- package/dist/{BlockNoteEditor-ZJPGGUQQ.mjs → BlockNoteEditor-N2NBYCPC.mjs} +4 -4
- package/dist/{BlockNoteViewer-UCA3LV3N.mjs → BlockNoteViewer-MTGS6YJV.mjs} +2 -2
- package/dist/{BlockNoteViewer-FLUHEXE6.js → BlockNoteViewer-WGCDB7IJ.js} +3 -3
- package/dist/{BlockNoteViewer-FLUHEXE6.js.map → BlockNoteViewer-WGCDB7IJ.js.map} +1 -1
- package/dist/billing/index.js +491 -491
- package/dist/billing/index.mjs +3 -3
- package/dist/{chunk-6RLATJ2L.mjs → chunk-4FNGWALA.mjs} +2 -2
- package/dist/{chunk-BXR36J25.js → chunk-6NZKWIOR.js} +908 -908
- package/dist/{chunk-BXR36J25.js.map → chunk-6NZKWIOR.js.map} +1 -1
- package/dist/{chunk-SQUMPLNN.mjs → chunk-6XJOQFCP.mjs} +5 -5
- package/dist/{chunk-BGLOFZ3K.mjs → chunk-AA52ORW2.mjs} +11 -15
- package/dist/chunk-AA52ORW2.mjs.map +1 -0
- package/dist/{chunk-YP6W4AB5.mjs → chunk-EWCY6QJA.mjs} +2 -2
- package/dist/{chunk-YGEOX2XX.js → chunk-FF4EIQ6H.js} +11 -15
- package/dist/chunk-FF4EIQ6H.js.map +1 -0
- package/dist/{chunk-FNPXCYHO.js → chunk-L6PYFQTO.js} +8 -8
- package/dist/{chunk-FNPXCYHO.js.map → chunk-L6PYFQTO.js.map} +1 -1
- package/dist/{chunk-OHJSI6L2.js → chunk-O3PDL2CV.js} +4 -4
- package/dist/{chunk-OHJSI6L2.js.map → chunk-O3PDL2CV.js.map} +1 -1
- package/dist/client/index.js +4 -4
- package/dist/client/index.mjs +3 -3
- package/dist/components/index.d.mts +3 -3
- package/dist/components/index.d.ts +3 -3
- package/dist/components/index.js +4 -4
- package/dist/components/index.mjs +3 -3
- package/dist/contexts/index.js +4 -4
- package/dist/contexts/index.mjs +3 -3
- package/dist/core/index.d.mts +7 -7
- package/dist/core/index.d.ts +7 -7
- package/dist/core/index.js +2 -2
- package/dist/core/index.mjs +1 -1
- package/dist/email-automations/index.js +93 -93
- package/dist/email-automations/index.mjs +3 -3
- package/dist/features/analytics/index.d.mts +1 -1
- package/dist/features/analytics/index.d.ts +1 -1
- package/dist/features/analytics/index.js +120 -120
- package/dist/features/analytics/index.mjs +3 -3
- package/dist/features/analytics/server.js +4 -4
- package/dist/features/analytics/server.mjs +2 -2
- package/dist/features/blog/index.js +150 -150
- package/dist/features/blog/index.mjs +3 -3
- package/dist/features/blog/server.js +16 -16
- package/dist/features/blog/server.mjs +1 -1
- package/dist/features/help/index.js +37 -37
- package/dist/features/help/index.mjs +3 -3
- package/dist/features/tokenusage/index.d.mts +1 -1
- package/dist/features/tokenusage/index.d.ts +1 -1
- package/dist/features/tokenusage/index.js +126 -126
- package/dist/features/tokenusage/index.mjs +3 -3
- package/dist/index.d.mts +4 -4
- package/dist/index.d.ts +4 -4
- package/dist/index.js +3 -3
- package/dist/index.mjs +2 -2
- package/dist/{referral-admin.interface-CMwl5NiV.d.ts → referral-admin.interface-CnytdDaQ.d.ts} +1 -1
- package/dist/{referral-admin.interface-C87ApGMR.d.mts → referral-admin.interface-RVO-ZTJz.d.mts} +1 -1
- package/dist/{s3.service-BG136Btz.d.mts → s3.service-CeUsKm-d.d.mts} +1 -1
- package/dist/{s3.service-CsrsRPRn.d.ts → s3.service-SkZnngeR.d.ts} +1 -1
- package/dist/server/index.d.mts +2 -2
- package/dist/server/index.d.ts +2 -2
- package/dist/server/index.js +3 -3
- package/dist/server/index.mjs +2 -2
- package/package.json +1 -1
- package/src/core/abstracts/AbstractService.ts +5 -11
- package/src/core/abstracts/ClientAbstractService.ts +5 -11
- package/src/core/abstracts/__tests__/AbstractService.locale.spec.ts +43 -0
- package/src/core/abstracts/__tests__/ClientAbstractService.locale.spec.ts +69 -0
- package/src/i18n/__tests__/config.spec.ts +22 -1
- package/src/i18n/config.ts +5 -0
- package/src/i18n/index.ts +1 -0
- package/dist/chunk-BGLOFZ3K.mjs.map +0 -1
- package/dist/chunk-YGEOX2XX.js.map +0 -1
- /package/dist/{BlockNoteEditor-ZJPGGUQQ.mjs.map → BlockNoteEditor-N2NBYCPC.mjs.map} +0 -0
- /package/dist/{BlockNoteViewer-UCA3LV3N.mjs.map → BlockNoteViewer-MTGS6YJV.mjs.map} +0 -0
- /package/dist/{chunk-6RLATJ2L.mjs.map → chunk-4FNGWALA.mjs.map} +0 -0
- /package/dist/{chunk-SQUMPLNN.mjs.map → chunk-6XJOQFCP.mjs.map} +0 -0
- /package/dist/{chunk-YP6W4AB5.mjs.map → chunk-EWCY6QJA.mjs.map} +0 -0
package/dist/billing/index.js
CHANGED
|
@@ -81,10 +81,10 @@
|
|
|
81
81
|
|
|
82
82
|
|
|
83
83
|
|
|
84
|
-
var
|
|
84
|
+
var _chunk6NZKWIORjs = require('../chunk-6NZKWIOR.js');
|
|
85
85
|
|
|
86
86
|
|
|
87
|
-
var
|
|
87
|
+
var _chunkL6PYFQTOjs = require('../chunk-L6PYFQTO.js');
|
|
88
88
|
|
|
89
89
|
|
|
90
90
|
var _chunkG4JR3SFVjs = require('../chunk-G4JR3SFV.js');
|
|
@@ -114,7 +114,7 @@ var _chunkG4JR3SFVjs = require('../chunk-G4JR3SFV.js');
|
|
|
114
114
|
|
|
115
115
|
|
|
116
116
|
|
|
117
|
-
var
|
|
117
|
+
var _chunkFF4EIQ6Hjs = require('../chunk-FF4EIQ6H.js');
|
|
118
118
|
require('../chunk-GHE4VT2R.js');
|
|
119
119
|
require('../chunk-LXKSUWAV.js');
|
|
120
120
|
require('../chunk-JTPRJNT2.js');
|
|
@@ -127,7 +127,7 @@ var _chunk7QVYU63Ejs = require('../chunk-7QVYU63E.js');
|
|
|
127
127
|
var _nextintl = require('next-intl');
|
|
128
128
|
var _lucidereact = require('lucide-react');
|
|
129
129
|
var _jsxruntime = require('react/jsx-runtime');
|
|
130
|
-
var SUBSCRIPTION_STATUSES = Object.values(
|
|
130
|
+
var SUBSCRIPTION_STATUSES = Object.values(_chunkFF4EIQ6Hjs.SubscriptionStatus);
|
|
131
131
|
function getStatusBadgeVariant(status) {
|
|
132
132
|
switch (status) {
|
|
133
133
|
case "active" /* ACTIVE */:
|
|
@@ -159,43 +159,43 @@ function SubscriptionSummaryCard({
|
|
|
159
159
|
onManageClick
|
|
160
160
|
}) {
|
|
161
161
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
162
|
-
const fmt =
|
|
162
|
+
const fmt = _chunk6NZKWIORjs.useBillingFormatOptions.call(void 0, );
|
|
163
163
|
if (loading) {
|
|
164
|
-
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
165
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
166
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
164
|
+
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.Card, { children: [
|
|
165
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.CardHeader, { className: "flex flex-row items-center justify-between space-y-0 pb-2", children: [
|
|
166
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.CardTitle, { children: t("billing.ui.subscriptions.title") }),
|
|
167
167
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.CreditCard, { className: "h-4 w-4 text-muted-foreground" })
|
|
168
168
|
] }),
|
|
169
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
170
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
171
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
172
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
169
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.CardContent, { children: [
|
|
170
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Skeleton, { className: "h-6 w-32 mb-2" }),
|
|
171
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Skeleton, { className: "h-4 w-24 mb-1" }),
|
|
172
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Skeleton, { className: "h-4 w-40" })
|
|
173
173
|
] })
|
|
174
174
|
] });
|
|
175
175
|
}
|
|
176
176
|
if (error) {
|
|
177
|
-
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
178
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
179
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
177
|
+
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.Card, { children: [
|
|
178
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.CardHeader, { className: "flex flex-row items-center justify-between space-y-0 pb-2", children: [
|
|
179
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.CardTitle, { children: t("billing.ui.subscriptions.title") }),
|
|
180
180
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.CreditCard, { className: "h-4 w-4 text-muted-foreground" })
|
|
181
181
|
] }),
|
|
182
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
182
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.CardContent, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-destructive text-xs/relaxed", children: error }) })
|
|
183
183
|
] });
|
|
184
184
|
}
|
|
185
185
|
const activeSubscriptions = subscriptions.filter(
|
|
186
186
|
(sub) => sub.status === "active" /* ACTIVE */ || sub.status === "trialing" /* TRIALING */ || sub.status === "past_due" /* PAST_DUE */
|
|
187
187
|
);
|
|
188
188
|
const primarySubscription = activeSubscriptions[0];
|
|
189
|
-
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
190
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
191
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
189
|
+
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.Card, { className: "cursor-pointer hover:bg-accent/50 transition-colors", onClick: onManageClick, children: [
|
|
190
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.CardHeader, { className: "flex flex-row items-center justify-between space-y-0 pb-2", children: [
|
|
191
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.CardTitle, { children: t("billing.ui.subscriptions.title") }),
|
|
192
192
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.CreditCard, { className: "h-4 w-4 text-muted-foreground" })
|
|
193
193
|
] }),
|
|
194
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
194
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.CardContent, { children: !primarySubscription ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "space-y-2", children: [
|
|
195
195
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-xl font-bold text-muted-foreground", children: t("billing.ui.cards.subscriptions.empty_title") }),
|
|
196
196
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-xs text-muted-foreground", children: t("billing.ui.cards.subscriptions.empty_description") }),
|
|
197
197
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
198
|
-
|
|
198
|
+
_chunk6NZKWIORjs.Button,
|
|
199
199
|
{
|
|
200
200
|
variant: "outline",
|
|
201
201
|
size: "sm",
|
|
@@ -213,8 +213,8 @@ function SubscriptionSummaryCard({
|
|
|
213
213
|
] }) : /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "space-y-2", children: [
|
|
214
214
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-2", children: [
|
|
215
215
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-xl font-bold", children: formatPlanName(primarySubscription, t("billing.ui.cards.subscriptions.fallback_name")) }),
|
|
216
|
-
primarySubscription.status === "past_due" /* PAST_DUE */ ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
217
|
-
|
|
216
|
+
primarySubscription.status === "past_due" /* PAST_DUE */ ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Badge, { variant: "softRed", children: t("billing.ui.cards.subscriptions.payment_failing") }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
217
|
+
_chunk6NZKWIORjs.Badge,
|
|
218
218
|
{
|
|
219
219
|
variant: primarySubscription.cancelAtPeriodEnd ? "secondary" : getStatusBadgeVariant(primarySubscription.status),
|
|
220
220
|
children: primarySubscription.cancelAtPeriodEnd ? t("billing.ui.cards.subscriptions.canceling") : SUBSCRIPTION_STATUSES.includes(primarySubscription.status) ? t(`billing.ui.subscription_status.${primarySubscription.status}`) : primarySubscription.status
|
|
@@ -222,11 +222,11 @@ function SubscriptionSummaryCard({
|
|
|
222
222
|
)
|
|
223
223
|
] }),
|
|
224
224
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-xs text-muted-foreground", children: !_optionalChain([primarySubscription, 'access', _8 => _8.price, 'optionalAccess', _9 => _9.isTrial]) ? t("billing.ui.cards.subscriptions.ends_on", {
|
|
225
|
-
date:
|
|
225
|
+
date: _chunk6NZKWIORjs.formatDate.call(void 0, primarySubscription.currentPeriodEnd, fmt)
|
|
226
226
|
}) : primarySubscription.cancelAtPeriodEnd ? t("billing.ui.cards.subscriptions.cancels_on", {
|
|
227
|
-
date:
|
|
227
|
+
date: _chunk6NZKWIORjs.formatDate.call(void 0, primarySubscription.currentPeriodEnd, fmt)
|
|
228
228
|
}) : t("billing.ui.cards.subscriptions.renews_on", {
|
|
229
|
-
date:
|
|
229
|
+
date: _chunk6NZKWIORjs.formatDate.call(void 0, primarySubscription.currentPeriodEnd, fmt)
|
|
230
230
|
}) }),
|
|
231
231
|
activeSubscriptions.length > 1 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-xs text-muted-foreground", children: t("billing.ui.cards.subscriptions.more", { count: activeSubscriptions.length - 1 }) })
|
|
232
232
|
] }) })
|
|
@@ -260,37 +260,37 @@ function PaymentMethodSummaryCard({
|
|
|
260
260
|
}) {
|
|
261
261
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
262
262
|
if (loading) {
|
|
263
|
-
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
264
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
265
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
263
|
+
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.Card, { children: [
|
|
264
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.CardHeader, { className: "flex flex-row items-center justify-between space-y-0 pb-2", children: [
|
|
265
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.CardTitle, { children: t("billing.ui.payment_method.title") }),
|
|
266
266
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Wallet, { className: "h-4 w-4 text-muted-foreground" })
|
|
267
267
|
] }),
|
|
268
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
269
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
270
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
268
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.CardContent, { children: [
|
|
269
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Skeleton, { className: "h-6 w-32 mb-2" }),
|
|
270
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Skeleton, { className: "h-4 w-24" })
|
|
271
271
|
] })
|
|
272
272
|
] });
|
|
273
273
|
}
|
|
274
274
|
if (error) {
|
|
275
|
-
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
276
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
277
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
275
|
+
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.Card, { children: [
|
|
276
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.CardHeader, { className: "flex flex-row items-center justify-between space-y-0 pb-2", children: [
|
|
277
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.CardTitle, { children: t("billing.ui.payment_method.title") }),
|
|
278
278
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Wallet, { className: "h-4 w-4 text-muted-foreground" })
|
|
279
279
|
] }),
|
|
280
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
280
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.CardContent, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-destructive text-xs/relaxed", children: error }) })
|
|
281
281
|
] });
|
|
282
282
|
}
|
|
283
283
|
const defaultMethod = paymentMethods.find((pm) => pm.id === defaultPaymentMethodId) || paymentMethods[0];
|
|
284
|
-
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
285
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
286
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
284
|
+
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.Card, { className: "cursor-pointer hover:bg-accent/50 transition-colors", onClick: onManageClick, children: [
|
|
285
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.CardHeader, { className: "flex flex-row items-center justify-between space-y-0 pb-2", children: [
|
|
286
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.CardTitle, { children: t("billing.ui.payment_method.title") }),
|
|
287
287
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Wallet, { className: "h-4 w-4 text-muted-foreground" })
|
|
288
288
|
] }),
|
|
289
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
289
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.CardContent, { children: paymentMethods.length === 0 ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "space-y-2", children: [
|
|
290
290
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-xl font-bold text-muted-foreground", children: t("billing.ui.cards.payment_method.empty_title") }),
|
|
291
291
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-xs text-muted-foreground", children: t("billing.ui.cards.payment_method.empty_description") }),
|
|
292
292
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
293
|
-
|
|
293
|
+
_chunk6NZKWIORjs.Button,
|
|
294
294
|
{
|
|
295
295
|
variant: "outline",
|
|
296
296
|
size: "sm",
|
|
@@ -339,13 +339,13 @@ function formatBalance(balance, currency, locale) {
|
|
|
339
339
|
_chunk7QVYU63Ejs.__name.call(void 0, formatBalance, "formatBalance");
|
|
340
340
|
function CustomerInfoCard({ customer, loading, error }) {
|
|
341
341
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
342
|
-
const locale =
|
|
342
|
+
const locale = _chunkFF4EIQ6Hjs.useI18nLocale.call(void 0, );
|
|
343
343
|
const [portalLoading, setPortalLoading] = _react.useState.call(void 0, false);
|
|
344
344
|
const handlePortalClick = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, async (e) => {
|
|
345
345
|
e.stopPropagation();
|
|
346
346
|
setPortalLoading(true);
|
|
347
347
|
try {
|
|
348
|
-
const { url } = await
|
|
348
|
+
const { url } = await _chunkFF4EIQ6Hjs.StripeCustomerService.createPortalSession();
|
|
349
349
|
window.open(url, "_blank");
|
|
350
350
|
} catch (err) {
|
|
351
351
|
console.error("[CustomerInfoCard] Failed to create portal session:", err);
|
|
@@ -354,45 +354,45 @@ function CustomerInfoCard({ customer, loading, error }) {
|
|
|
354
354
|
}
|
|
355
355
|
}, "handlePortalClick");
|
|
356
356
|
if (loading) {
|
|
357
|
-
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
358
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
359
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
357
|
+
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.Card, { children: [
|
|
358
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.CardHeader, { className: "flex flex-row items-center justify-between space-y-0 pb-2", children: [
|
|
359
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.CardTitle, { children: t("billing.ui.cards.customer.title") }),
|
|
360
360
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.User, { className: "h-4 w-4 text-muted-foreground" })
|
|
361
361
|
] }),
|
|
362
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
363
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
364
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
365
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
362
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.CardContent, { children: [
|
|
363
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Skeleton, { className: "h-6 w-32 mb-2" }),
|
|
364
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Skeleton, { className: "h-4 w-48 mb-1" }),
|
|
365
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Skeleton, { className: "h-4 w-24" })
|
|
366
366
|
] })
|
|
367
367
|
] });
|
|
368
368
|
}
|
|
369
369
|
if (error) {
|
|
370
|
-
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
371
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
372
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
370
|
+
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.Card, { children: [
|
|
371
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.CardHeader, { className: "flex flex-row items-center justify-between space-y-0 pb-2", children: [
|
|
372
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.CardTitle, { children: t("billing.ui.cards.customer.title") }),
|
|
373
373
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.User, { className: "h-4 w-4 text-muted-foreground" })
|
|
374
374
|
] }),
|
|
375
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
375
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.CardContent, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-destructive text-xs/relaxed", children: error }) })
|
|
376
376
|
] });
|
|
377
377
|
}
|
|
378
378
|
if (!customer) {
|
|
379
|
-
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
380
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
381
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
379
|
+
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.Card, { children: [
|
|
380
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.CardHeader, { className: "flex flex-row items-center justify-between space-y-0 pb-2", children: [
|
|
381
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.CardTitle, { children: t("billing.ui.cards.customer.title") }),
|
|
382
382
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.User, { className: "h-4 w-4 text-muted-foreground" })
|
|
383
383
|
] }),
|
|
384
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
384
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.CardContent, { children: [
|
|
385
385
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-xl font-bold text-muted-foreground", children: t("billing.ui.cards.customer.not_set_up") }),
|
|
386
386
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-xs text-muted-foreground", children: t("billing.ui.cards.customer.not_set_up_description") })
|
|
387
387
|
] })
|
|
388
388
|
] });
|
|
389
389
|
}
|
|
390
|
-
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
391
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
392
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
390
|
+
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.Card, { children: [
|
|
391
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.CardHeader, { className: "flex flex-row items-center justify-between space-y-0 pb-2", children: [
|
|
392
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.CardTitle, { children: t("billing.ui.cards.customer.title") }),
|
|
393
393
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.User, { className: "h-4 w-4 text-muted-foreground" })
|
|
394
394
|
] }),
|
|
395
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
395
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.CardContent, { children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "space-y-2", children: [
|
|
396
396
|
customer.name && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-xl font-bold", children: customer.name }),
|
|
397
397
|
customer.email && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-sm text-muted-foreground", children: customer.email }),
|
|
398
398
|
customer.balance !== void 0 && customer.balance !== 0 && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "p", { className: "text-sm", children: [
|
|
@@ -402,7 +402,7 @@ function CustomerInfoCard({ customer, loading, error }) {
|
|
|
402
402
|
] }),
|
|
403
403
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: customer.balance < 0 ? "text-success" : "text-destructive", children: formatBalance(customer.balance, customer.currency, locale) })
|
|
404
404
|
] }),
|
|
405
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
405
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.Button, { variant: "outline", size: "sm", className: "mt-2", onClick: handlePortalClick, disabled: portalLoading, children: [
|
|
406
406
|
portalLoading ? t("common.loading") : t("billing.ui.cards.customer.manage_portal"),
|
|
407
407
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.ExternalLink, { className: "h-4 w-4 ms-1" })
|
|
408
408
|
] })
|
|
@@ -415,7 +415,7 @@ _chunk7QVYU63Ejs.__name.call(void 0, CustomerInfoCard, "CustomerInfoCard");
|
|
|
415
415
|
|
|
416
416
|
|
|
417
417
|
|
|
418
|
-
var INVOICE_STATUSES = Object.values(
|
|
418
|
+
var INVOICE_STATUSES = Object.values(_chunkFF4EIQ6Hjs.InvoiceStatus);
|
|
419
419
|
function getStatusBadgeVariant2(status) {
|
|
420
420
|
switch (status) {
|
|
421
421
|
case "paid" /* PAID */:
|
|
@@ -440,46 +440,46 @@ function formatAmount(amount, currency, locale) {
|
|
|
440
440
|
_chunk7QVYU63Ejs.__name.call(void 0, formatAmount, "formatAmount");
|
|
441
441
|
function InvoicesSummaryCard({ invoices, loading, error, onViewAllClick }) {
|
|
442
442
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
443
|
-
const fmt =
|
|
443
|
+
const fmt = _chunk6NZKWIORjs.useBillingFormatOptions.call(void 0, );
|
|
444
444
|
if (loading) {
|
|
445
|
-
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
446
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
447
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
445
|
+
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.Card, { children: [
|
|
446
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.CardHeader, { className: "flex flex-row items-center justify-between space-y-0 pb-2", children: [
|
|
447
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.CardTitle, { children: t("billing.ui.cards.invoices.title") }),
|
|
448
448
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.ReceiptIcon, { className: "h-4 w-4 text-muted-foreground" })
|
|
449
449
|
] }),
|
|
450
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
451
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
452
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
453
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
450
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.CardContent, { children: [
|
|
451
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Skeleton, { className: "h-6 w-24 mb-2" }),
|
|
452
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Skeleton, { className: "h-4 w-32 mb-1" }),
|
|
453
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Skeleton, { className: "h-4 w-20" })
|
|
454
454
|
] })
|
|
455
455
|
] });
|
|
456
456
|
}
|
|
457
457
|
if (error) {
|
|
458
|
-
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
459
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
460
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
458
|
+
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.Card, { children: [
|
|
459
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.CardHeader, { className: "flex flex-row items-center justify-between space-y-0 pb-2", children: [
|
|
460
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.CardTitle, { children: t("billing.ui.cards.invoices.title") }),
|
|
461
461
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.ReceiptIcon, { className: "h-4 w-4 text-muted-foreground" })
|
|
462
462
|
] }),
|
|
463
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
463
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.CardContent, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-destructive text-xs/relaxed", children: error }) })
|
|
464
464
|
] });
|
|
465
465
|
}
|
|
466
466
|
const latestInvoice = _nullishCoalesce(invoices.find((inv) => inv.status !== "void" /* VOID */), () => ( invoices[0]));
|
|
467
467
|
const paidInvoices = invoices.filter((inv) => inv.status === "paid" /* PAID */);
|
|
468
468
|
const openInvoices = invoices.filter((inv) => inv.status === "open" /* OPEN */);
|
|
469
|
-
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
470
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
471
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
469
|
+
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.Card, { className: "cursor-pointer hover:bg-accent/50 transition-colors", onClick: onViewAllClick, children: [
|
|
470
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.CardHeader, { className: "flex flex-row items-center justify-between space-y-0 pb-2", children: [
|
|
471
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.CardTitle, { children: t("billing.ui.cards.invoices.title") }),
|
|
472
472
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.ReceiptIcon, { className: "h-4 w-4 text-muted-foreground" })
|
|
473
473
|
] }),
|
|
474
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
474
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.CardContent, { children: invoices.length === 0 ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "space-y-2", children: [
|
|
475
475
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-xl font-bold text-muted-foreground", children: t("billing.ui.invoices.empty_title") }),
|
|
476
476
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-xs text-muted-foreground", children: t("billing.ui.cards.invoices.empty_description") })
|
|
477
477
|
] }) : latestInvoice ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "space-y-2", children: [
|
|
478
478
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-2", children: [
|
|
479
479
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-xl font-bold", children: formatAmount(latestInvoice.total, latestInvoice.currency, fmt.locale) }),
|
|
480
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
480
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Badge, { variant: getStatusBadgeVariant2(latestInvoice.status), children: INVOICE_STATUSES.includes(latestInvoice.status) ? t(`billing.ui.invoice_status.${latestInvoice.status}`) : latestInvoice.status })
|
|
481
481
|
] }),
|
|
482
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-sm text-muted-foreground", children: latestInvoice.stripeInvoiceNumber || t("billing.ui.cards.invoices.invoice_from", { date:
|
|
482
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-sm text-muted-foreground", children: latestInvoice.stripeInvoiceNumber || t("billing.ui.cards.invoices.invoice_from", { date: _chunk6NZKWIORjs.formatDate.call(void 0, latestInvoice.periodStart, fmt) }) }),
|
|
483
483
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-4 text-xs text-muted-foreground", children: [
|
|
484
484
|
paidInvoices.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { children: t("billing.ui.cards.invoices.paid_count", { count: paidInvoices.length }) }),
|
|
485
485
|
openInvoices.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-warning", children: t("billing.ui.cards.invoices.open_count", { count: openInvoices.length }) }),
|
|
@@ -512,26 +512,26 @@ function BillingUsageSummaryCard({
|
|
|
512
512
|
onViewDetailsClick
|
|
513
513
|
}) {
|
|
514
514
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
515
|
-
const locale =
|
|
515
|
+
const locale = _chunkFF4EIQ6Hjs.useI18nLocale.call(void 0, );
|
|
516
516
|
if (loading) {
|
|
517
|
-
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
518
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
519
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
517
|
+
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.Card, { children: [
|
|
518
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.CardHeader, { className: "flex flex-row items-center justify-between space-y-0 pb-2", children: [
|
|
519
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.CardTitle, { children: t("billing.ui.cards.usage.title") }),
|
|
520
520
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Activity, { className: "h-4 w-4 text-muted-foreground" })
|
|
521
521
|
] }),
|
|
522
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
523
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
524
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
522
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.CardContent, { children: [
|
|
523
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Skeleton, { className: "h-6 w-24 mb-2" }),
|
|
524
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Skeleton, { className: "h-4 w-32" })
|
|
525
525
|
] })
|
|
526
526
|
] });
|
|
527
527
|
}
|
|
528
528
|
if (error) {
|
|
529
|
-
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
530
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
531
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
529
|
+
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.Card, { children: [
|
|
530
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.CardHeader, { className: "flex flex-row items-center justify-between space-y-0 pb-2", children: [
|
|
531
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.CardTitle, { children: t("billing.ui.cards.usage.title") }),
|
|
532
532
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Activity, { className: "h-4 w-4 text-muted-foreground" })
|
|
533
533
|
] }),
|
|
534
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
534
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.CardContent, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-destructive text-xs/relaxed", children: error }) })
|
|
535
535
|
] });
|
|
536
536
|
}
|
|
537
537
|
const totalUsage = Object.values(summaries).reduce((acc, summary) => {
|
|
@@ -539,12 +539,12 @@ function BillingUsageSummaryCard({
|
|
|
539
539
|
}, 0);
|
|
540
540
|
const primaryMeter = meters.find((m) => _optionalChain([summaries, 'access', _17 => _17[m.id], 'optionalAccess', _18 => _18.aggregatedValue]));
|
|
541
541
|
const primarySummary = primaryMeter ? summaries[primaryMeter.id] : null;
|
|
542
|
-
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
543
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
544
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
542
|
+
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.Card, { className: "cursor-pointer hover:bg-accent/50 transition-colors", onClick: onViewDetailsClick, children: [
|
|
543
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.CardHeader, { className: "flex flex-row items-center justify-between space-y-0 pb-2", children: [
|
|
544
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.CardTitle, { children: t("billing.ui.cards.usage.title") }),
|
|
545
545
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Activity, { className: "h-4 w-4 text-muted-foreground" })
|
|
546
546
|
] }),
|
|
547
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
547
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.CardContent, { children: meters.length === 0 ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "space-y-2", children: [
|
|
548
548
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-xl font-bold text-muted-foreground", children: t("billing.ui.cards.usage.no_meters") }),
|
|
549
549
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-xs text-muted-foreground", children: t("billing.ui.cards.usage.no_meters_description") })
|
|
550
550
|
] }) : /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "space-y-2", children: [
|
|
@@ -601,7 +601,7 @@ function PaymentMethodForm({
|
|
|
601
601
|
const fetchSetupIntent = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, async () => {
|
|
602
602
|
setLoading(true);
|
|
603
603
|
try {
|
|
604
|
-
const intent = await
|
|
604
|
+
const intent = await _chunkFF4EIQ6Hjs.StripeCustomerService.createSetupIntent();
|
|
605
605
|
setSetupIntent(intent);
|
|
606
606
|
} catch (err) {
|
|
607
607
|
console.error("[PaymentMethodForm] Failed to create setup intent:", err);
|
|
@@ -639,7 +639,7 @@ function PaymentMethodForm({
|
|
|
639
639
|
return;
|
|
640
640
|
}
|
|
641
641
|
if ((alwaysSetDefault || setAsDefault) && _optionalChain([confirmedSetupIntent, 'optionalAccess', _19 => _19.payment_method])) {
|
|
642
|
-
await
|
|
642
|
+
await _chunkFF4EIQ6Hjs.StripeCustomerService.setDefaultPaymentMethod({
|
|
643
643
|
paymentMethodId: typeof confirmedSetupIntent.payment_method === "string" ? confirmedSetupIntent.payment_method : confirmedSetupIntent.payment_method.id
|
|
644
644
|
});
|
|
645
645
|
}
|
|
@@ -655,7 +655,7 @@ function PaymentMethodForm({
|
|
|
655
655
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex items-center justify-center py-8", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-muted-foreground", children: t("billing.ui.payment_form.loading") }) });
|
|
656
656
|
}
|
|
657
657
|
if (!setupIntent && error) {
|
|
658
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
658
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Alert, { variant: "destructive", className: "bg-red-50 border-red-200", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.AlertDescription, { children: error }) });
|
|
659
659
|
}
|
|
660
660
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "form", { onSubmit: handleSubmit, className: "flex flex-col gap-y-4", children: [
|
|
661
661
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "rounded-md border border-gray-300 p-3", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
@@ -679,19 +679,19 @@ function PaymentMethodForm({
|
|
|
679
679
|
) }),
|
|
680
680
|
!alwaysSetDefault && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-x-2", children: [
|
|
681
681
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
682
|
-
|
|
682
|
+
_chunk6NZKWIORjs.Checkbox,
|
|
683
683
|
{
|
|
684
684
|
id: "setAsDefault",
|
|
685
685
|
checked: setAsDefault,
|
|
686
686
|
onCheckedChange: (checked) => setSetAsDefault(!!checked)
|
|
687
687
|
}
|
|
688
688
|
),
|
|
689
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
689
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Label, { htmlFor: "setAsDefault", className: "cursor-pointer font-normal", children: t("billing.ui.payment_form.set_default") })
|
|
690
690
|
] }),
|
|
691
|
-
error && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
691
|
+
error && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Alert, { variant: "destructive", className: "bg-red-50 border-red-200", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.AlertDescription, { children: error }) }),
|
|
692
692
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex justify-end gap-x-2", children: [
|
|
693
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
694
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
693
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Button, { type: "button", variant: "outline", onClick: onCancel, disabled: isSubmitting || isLoading, children: t("ui.buttons.cancel") }),
|
|
694
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Button, { type: "submit", disabled: !stripe || isSubmitting || isLoading, children: isSubmitting ? t("billing.ui.wizard.review.processing") : t("billing.ui.cards.payment_method.add_card") })
|
|
695
695
|
] })
|
|
696
696
|
] });
|
|
697
697
|
}
|
|
@@ -708,10 +708,10 @@ function PaymentMethodEditor({ open, onOpenChange, onSuccess }) {
|
|
|
708
708
|
const handleCancel = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, () => {
|
|
709
709
|
onOpenChange(false);
|
|
710
710
|
}, "handleCancel");
|
|
711
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
712
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
713
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
714
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
711
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Dialog, { open, onOpenChange, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.DialogContent, { className: "max-w-md", children: [
|
|
712
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.DialogHeader, { children: [
|
|
713
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.DialogTitle, { children: t("billing.ui.payment_methods.add") }),
|
|
714
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.DialogDescription, { children: t("billing.ui.payment_methods.add_description") })
|
|
715
715
|
] }),
|
|
716
716
|
open && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, PaymentMethodForm, { onSuccess: handleSuccess, onCancel: handleCancel })
|
|
717
717
|
] }) });
|
|
@@ -737,7 +737,7 @@ function PaymentMethodCard({ paymentMethod, onUpdate }) {
|
|
|
737
737
|
_react.useEffect.call(void 0, () => {
|
|
738
738
|
const loadCustomer = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, async () => {
|
|
739
739
|
try {
|
|
740
|
-
const fetchedCustomer = await
|
|
740
|
+
const fetchedCustomer = await _chunkFF4EIQ6Hjs.StripeCustomerService.getCustomer();
|
|
741
741
|
setCustomer(fetchedCustomer);
|
|
742
742
|
} catch (error) {
|
|
743
743
|
console.error("[PaymentMethodCard] Failed to load customer:", error);
|
|
@@ -754,7 +754,7 @@ function PaymentMethodCard({ paymentMethod, onUpdate }) {
|
|
|
754
754
|
const handleSetDefault = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, async () => {
|
|
755
755
|
setLoading(true);
|
|
756
756
|
try {
|
|
757
|
-
await
|
|
757
|
+
await _chunkFF4EIQ6Hjs.StripeCustomerService.setDefaultPaymentMethod({ paymentMethodId: paymentMethod.id });
|
|
758
758
|
onUpdate();
|
|
759
759
|
} catch (error) {
|
|
760
760
|
console.error("[PaymentMethodCard] Failed to set as default:", error);
|
|
@@ -765,7 +765,7 @@ function PaymentMethodCard({ paymentMethod, onUpdate }) {
|
|
|
765
765
|
const handleRemove = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, async () => {
|
|
766
766
|
setLoading(true);
|
|
767
767
|
try {
|
|
768
|
-
await
|
|
768
|
+
await _chunkFF4EIQ6Hjs.StripeCustomerService.removePaymentMethod({ paymentMethodId: paymentMethod.id });
|
|
769
769
|
setShowRemoveDialog(false);
|
|
770
770
|
onUpdate();
|
|
771
771
|
} catch (error) {
|
|
@@ -774,16 +774,16 @@ function PaymentMethodCard({ paymentMethod, onUpdate }) {
|
|
|
774
774
|
}
|
|
775
775
|
}, "handleRemove");
|
|
776
776
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
|
|
777
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
778
|
-
isDefault && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
779
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
777
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.Card, { className: "relative", children: [
|
|
778
|
+
isDefault && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Badge, { variant: "softGreen", className: "absolute end-2 top-2", children: t("billing.ui.payment_methods.default") }),
|
|
779
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.CardHeader, { className: "flex flex-row items-center justify-between pb-2", children: [
|
|
780
780
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-x-2", children: [
|
|
781
781
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-2xl", children: brandIcon }),
|
|
782
782
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-sm font-medium capitalize", children: brand })
|
|
783
783
|
] }),
|
|
784
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
785
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
786
|
-
|
|
784
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.DropdownMenu, { children: [
|
|
785
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.DropdownMenuTrigger, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
786
|
+
_chunk6NZKWIORjs.Button,
|
|
787
787
|
{
|
|
788
788
|
render: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", {}),
|
|
789
789
|
nativeButton: false,
|
|
@@ -794,10 +794,10 @@ function PaymentMethodCard({ paymentMethod, onUpdate }) {
|
|
|
794
794
|
children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.MoreVertical, { className: "h-4 w-4" })
|
|
795
795
|
}
|
|
796
796
|
) }),
|
|
797
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
798
|
-
!isDefault && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
797
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.DropdownMenuContent, { align: "end", children: [
|
|
798
|
+
!isDefault && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.DropdownMenuItem, { onClick: handleSetDefault, disabled: loading, children: t("billing.ui.payment_methods.set_default") }),
|
|
799
799
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
800
|
-
|
|
800
|
+
_chunk6NZKWIORjs.DropdownMenuItem,
|
|
801
801
|
{
|
|
802
802
|
onClick: () => setShowRemoveDialog(true),
|
|
803
803
|
disabled: loading,
|
|
@@ -808,7 +808,7 @@ function PaymentMethodCard({ paymentMethod, onUpdate }) {
|
|
|
808
808
|
] })
|
|
809
809
|
] })
|
|
810
810
|
] }),
|
|
811
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
811
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.CardContent, { children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-y-1", children: [
|
|
812
812
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "p", { className: "text-lg font-semibold", children: [
|
|
813
813
|
"\u2022\u2022\u2022\u2022 ",
|
|
814
814
|
last4
|
|
@@ -816,17 +816,17 @@ function PaymentMethodCard({ paymentMethod, onUpdate }) {
|
|
|
816
816
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-sm text-muted-foreground", children: t("billing.ui.payment_method.expires", { date: `${String(expMonth).padStart(2, "0")}/${expYear}` }) })
|
|
817
817
|
] }) })
|
|
818
818
|
] }),
|
|
819
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
820
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
821
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
822
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
819
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.AlertDialog, { open: showRemoveDialog, onOpenChange: setShowRemoveDialog, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.AlertDialogContent, { children: [
|
|
820
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.AlertDialogHeader, { children: [
|
|
821
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.AlertDialogTitle, { children: t("billing.ui.payment_methods.remove_title") }),
|
|
822
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.AlertDialogDescription, { children: [
|
|
823
823
|
t("billing.ui.payment_methods.remove_description"),
|
|
824
824
|
isDefault && ` ${t("billing.ui.payment_methods.remove_default_warning")}`
|
|
825
825
|
] })
|
|
826
826
|
] }),
|
|
827
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
828
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
829
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
827
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.AlertDialogFooter, { children: [
|
|
828
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.AlertDialogCancel, { disabled: loading, children: t("ui.buttons.cancel") }),
|
|
829
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.AlertDialogAction, { onClick: handleRemove, disabled: loading, className: "bg-red-600 hover:bg-red-700", children: loading ? t("billing.ui.payment_methods.removing") : t("ui.buttons.remove") })
|
|
830
830
|
] })
|
|
831
831
|
] }) })
|
|
832
832
|
] });
|
|
@@ -850,7 +850,7 @@ function PaymentMethodsContainer() {
|
|
|
850
850
|
const loadPaymentMethods = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, async () => {
|
|
851
851
|
setLoading(true);
|
|
852
852
|
try {
|
|
853
|
-
const fetchedPaymentMethods = await
|
|
853
|
+
const fetchedPaymentMethods = await _chunkFF4EIQ6Hjs.StripeCustomerService.listPaymentMethods();
|
|
854
854
|
setPaymentMethods(fetchedPaymentMethods);
|
|
855
855
|
} catch (error) {
|
|
856
856
|
console.error("[PaymentMethodsContainer] Failed to load payment methods:", error);
|
|
@@ -870,14 +870,14 @@ function PaymentMethodsContainer() {
|
|
|
870
870
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.CreditCard, { className: "h-8 w-8" }),
|
|
871
871
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h1", { className: "text-primary text-3xl font-semibold", children: t("billing.ui.payment_methods.title") })
|
|
872
872
|
] }),
|
|
873
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
873
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Button, { onClick: () => setShowAddPaymentMethod(true), children: t("billing.ui.payment_methods.add") })
|
|
874
874
|
] }),
|
|
875
875
|
paymentMethods.length === 0 && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col items-center justify-center gap-y-4 rounded-lg border-2 border-dashed border-gray-300 bg-muted/50 p-12", children: [
|
|
876
876
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.CreditCard, { className: "h-16 w-16 text-muted-foreground" }),
|
|
877
877
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "text-center", children: [
|
|
878
878
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h3", { className: "mb-2 text-sm font-medium", children: t("billing.ui.payment_methods.empty_title") }),
|
|
879
879
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "mb-4 text-muted-foreground", children: t("billing.ui.payment_methods.empty_description") }),
|
|
880
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
880
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Button, { onClick: () => setShowAddPaymentMethod(true), children: t("billing.ui.payment_methods.add_first") })
|
|
881
881
|
] })
|
|
882
882
|
] }),
|
|
883
883
|
paymentMethods.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, PaymentMethodsList, { paymentMethods, onUpdate: loadPaymentMethods }),
|
|
@@ -933,7 +933,7 @@ var statusConfig = {
|
|
|
933
933
|
function InvoiceStatusBadge({ status }) {
|
|
934
934
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
935
935
|
const config = statusConfig[status] || statusConfig["draft" /* DRAFT */];
|
|
936
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
936
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Badge, { variant: config.variant, children: t(config.label) });
|
|
937
937
|
}
|
|
938
938
|
_chunk7QVYU63Ejs.__name.call(void 0, InvoiceStatusBadge, "InvoiceStatusBadge");
|
|
939
939
|
|
|
@@ -946,7 +946,7 @@ function InvoiceDetails({
|
|
|
946
946
|
onInvoiceChange: _onInvoiceChange
|
|
947
947
|
}) {
|
|
948
948
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
949
|
-
const fmt =
|
|
949
|
+
const fmt = _chunk6NZKWIORjs.useBillingFormatOptions.call(void 0, );
|
|
950
950
|
const handleDownloadPDF = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, () => {
|
|
951
951
|
if (invoice.stripePdfUrl) {
|
|
952
952
|
window.open(invoice.stripePdfUrl, "_blank");
|
|
@@ -966,10 +966,10 @@ function InvoiceDetails({
|
|
|
966
966
|
return invoice.stripeInvoiceId.slice(-8);
|
|
967
967
|
}, "getInvoiceNumber");
|
|
968
968
|
const productName = _optionalChain([invoice, 'access', _29 => _29.subscription, 'optionalAccess', _30 => _30.price, 'optionalAccess', _31 => _31.product, 'optionalAccess', _32 => _32.name]) || t("billing.ui.cards.subscriptions.fallback_name");
|
|
969
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
970
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
971
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
972
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
969
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Dialog, { open, onOpenChange, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.DialogContent, { className: "max-w-2xl", children: [
|
|
970
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.DialogHeader, { children: [
|
|
971
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.DialogTitle, { children: t("billing.ui.invoice.title", { number: getInvoiceNumber() }) }),
|
|
972
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.DialogDescription, { children: _chunk6NZKWIORjs.formatDate.call(void 0, invoice.periodStart, fmt) })
|
|
973
973
|
] }),
|
|
974
974
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "space-y-6", children: [
|
|
975
975
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-x-3", children: [
|
|
@@ -980,18 +980,18 @@ function InvoiceDetails({
|
|
|
980
980
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { children: [
|
|
981
981
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-muted-foreground text-xs", children: t("billing.ui.invoice.billing_period") }),
|
|
982
982
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "p", { className: "text-sm", children: [
|
|
983
|
-
|
|
983
|
+
_chunk6NZKWIORjs.formatDate.call(void 0, invoice.periodStart, fmt),
|
|
984
984
|
" - ",
|
|
985
|
-
|
|
985
|
+
_chunk6NZKWIORjs.formatDate.call(void 0, invoice.periodEnd, fmt)
|
|
986
986
|
] })
|
|
987
987
|
] }),
|
|
988
988
|
invoice.dueDate && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { children: [
|
|
989
989
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-muted-foreground text-xs", children: t("billing.ui.invoice.due_date") }),
|
|
990
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-sm", children:
|
|
990
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-sm", children: _chunk6NZKWIORjs.formatDate.call(void 0, invoice.dueDate, fmt) })
|
|
991
991
|
] }),
|
|
992
992
|
invoice.paidAt && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { children: [
|
|
993
993
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-muted-foreground text-xs", children: t("billing.ui.invoice.paid_date") }),
|
|
994
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-sm", children:
|
|
994
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-sm", children: _chunk6NZKWIORjs.formatDate.call(void 0, invoice.paidAt, fmt) })
|
|
995
995
|
] }),
|
|
996
996
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { children: [
|
|
997
997
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-muted-foreground text-xs", children: t("billing.ui.invoice.attempt_count") }),
|
|
@@ -1007,42 +1007,42 @@ function InvoiceDetails({
|
|
|
1007
1007
|
] }) }),
|
|
1008
1008
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "tbody", { children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "tr", { className: "border-t", children: [
|
|
1009
1009
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "td", { className: "p-3", children: productName }),
|
|
1010
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "td", { className: "p-3 text-end", children:
|
|
1010
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "td", { className: "p-3 text-end", children: _chunkFF4EIQ6Hjs.formatCurrency.call(void 0, invoice.subtotal, invoice.currency, fmt) })
|
|
1011
1011
|
] }) })
|
|
1012
1012
|
] }) })
|
|
1013
1013
|
] }),
|
|
1014
1014
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "space-y-2 border-t pt-4", children: [
|
|
1015
1015
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex justify-between", children: [
|
|
1016
1016
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-muted-foreground text-xs", children: t("billing.ui.invoice.subtotal") }),
|
|
1017
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-sm", children:
|
|
1017
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-sm", children: _chunkFF4EIQ6Hjs.formatCurrency.call(void 0, invoice.subtotal, invoice.currency, fmt) })
|
|
1018
1018
|
] }),
|
|
1019
1019
|
invoice.tax !== void 0 && invoice.tax > 0 && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex justify-between", children: [
|
|
1020
1020
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-muted-foreground text-xs", children: t("billing.ui.invoice.tax") }),
|
|
1021
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-sm", children:
|
|
1021
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-sm", children: _chunkFF4EIQ6Hjs.formatCurrency.call(void 0, invoice.tax, invoice.currency, fmt) })
|
|
1022
1022
|
] }),
|
|
1023
1023
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex justify-between text-lg font-semibold border-t pt-2", children: [
|
|
1024
1024
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { children: t("billing.ui.invoice.total") }),
|
|
1025
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { children:
|
|
1025
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { children: _chunkFF4EIQ6Hjs.formatCurrency.call(void 0, invoice.total, invoice.currency, fmt) })
|
|
1026
1026
|
] }),
|
|
1027
1027
|
invoice.amountPaid > 0 && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex justify-between", children: [
|
|
1028
1028
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-muted-foreground text-xs", children: t("billing.ui.invoice.amount_paid") }),
|
|
1029
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-sm text-success", children:
|
|
1029
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-sm text-success", children: _chunkFF4EIQ6Hjs.formatCurrency.call(void 0, invoice.amountPaid, invoice.currency, fmt) })
|
|
1030
1030
|
] }),
|
|
1031
1031
|
invoice.amountRemaining > 0 && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex justify-between", children: [
|
|
1032
1032
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-muted-foreground text-xs", children: t("billing.ui.invoice.amount_due") }),
|
|
1033
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-sm text-destructive", children:
|
|
1033
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-sm text-destructive", children: _chunkFF4EIQ6Hjs.formatCurrency.call(void 0, invoice.amountRemaining, invoice.currency, fmt) })
|
|
1034
1034
|
] })
|
|
1035
1035
|
] }),
|
|
1036
1036
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-wrap gap-2 pt-4 border-t", children: [
|
|
1037
|
-
invoice.stripePdfUrl && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
1037
|
+
invoice.stripePdfUrl && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.Button, { variant: "outline", onClick: handleDownloadPDF, children: [
|
|
1038
1038
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Download, { className: "me-2 h-4 w-4" }),
|
|
1039
1039
|
t("billing.ui.invoice.download_pdf")
|
|
1040
1040
|
] }),
|
|
1041
|
-
invoice.status === "open" /* OPEN */ && invoice.attempted && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
1041
|
+
invoice.status === "open" /* OPEN */ && invoice.attempted && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.Button, { variant: "default", onClick: handleRetryPayment, children: [
|
|
1042
1042
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.RefreshCw, { className: "me-2 h-4 w-4" }),
|
|
1043
1043
|
t("billing.ui.invoice.retry_payment")
|
|
1044
1044
|
] }),
|
|
1045
|
-
invoice.stripeHostedInvoiceUrl && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
1045
|
+
invoice.stripeHostedInvoiceUrl && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.Button, { variant: "outline", onClick: handleViewInStripe, children: [
|
|
1046
1046
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.ExternalLink, { className: "me-2 h-4 w-4" }),
|
|
1047
1047
|
t("billing.ui.invoice.view_in_stripe")
|
|
1048
1048
|
] })
|
|
@@ -1056,7 +1056,7 @@ _chunk7QVYU63Ejs.__name.call(void 0, InvoiceDetails, "InvoiceDetails");
|
|
|
1056
1056
|
|
|
1057
1057
|
function InvoicesList({ invoices, onInvoicesChange }) {
|
|
1058
1058
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
1059
|
-
const fmt =
|
|
1059
|
+
const fmt = _chunk6NZKWIORjs.useBillingFormatOptions.call(void 0, );
|
|
1060
1060
|
const [selectedInvoice, setSelectedInvoice] = _react.useState.call(void 0, null);
|
|
1061
1061
|
const handleRowClick = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, (invoice) => {
|
|
1062
1062
|
setSelectedInvoice(invoice);
|
|
@@ -1068,30 +1068,30 @@ function InvoicesList({ invoices, onInvoicesChange }) {
|
|
|
1068
1068
|
return invoice.stripeInvoiceId.slice(-8);
|
|
1069
1069
|
}, "getInvoiceNumber");
|
|
1070
1070
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
|
|
1071
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "border rounded-lg overflow-clip", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
1072
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1073
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1074
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1075
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1076
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1077
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1071
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "border rounded-lg overflow-clip", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.Table, { children: [
|
|
1072
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.TableHeader, { className: "bg-muted", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.TableRow, { children: [
|
|
1073
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.TableHead, { children: t("billing.ui.columns.invoice_number") }),
|
|
1074
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.TableHead, { children: t("billing.ui.columns.date") }),
|
|
1075
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.TableHead, { children: t("billing.ui.columns.status") }),
|
|
1076
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.TableHead, { className: "text-end", children: t("billing.ui.columns.amount") }),
|
|
1077
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.TableHead, { children: t("billing.ui.columns.period") })
|
|
1078
1078
|
] }) }),
|
|
1079
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1079
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.TableBody, { children: invoices.map((invoice) => {
|
|
1080
1080
|
const invoiceNumber = getInvoiceNumber(invoice);
|
|
1081
|
-
const date =
|
|
1082
|
-
const amount =
|
|
1083
|
-
const period = `${
|
|
1081
|
+
const date = _chunk6NZKWIORjs.formatDate.call(void 0, invoice.periodStart, fmt);
|
|
1082
|
+
const amount = _chunkFF4EIQ6Hjs.formatCurrency.call(void 0, invoice.total, invoice.currency, fmt);
|
|
1083
|
+
const period = `${_chunk6NZKWIORjs.formatDate.call(void 0, invoice.periodStart, fmt)} - ${_chunk6NZKWIORjs.formatDate.call(void 0, invoice.periodEnd, fmt)}`;
|
|
1084
1084
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
1085
|
-
|
|
1085
|
+
_chunk6NZKWIORjs.TableRow,
|
|
1086
1086
|
{
|
|
1087
1087
|
onClick: () => handleRowClick(invoice),
|
|
1088
1088
|
className: "cursor-pointer hover:bg-muted/50",
|
|
1089
1089
|
children: [
|
|
1090
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1091
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1092
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1093
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1094
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1090
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.TableCell, { className: "font-medium", children: invoiceNumber }),
|
|
1091
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.TableCell, { className: "text-muted-foreground text-xs", children: date }),
|
|
1092
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.TableCell, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, InvoiceStatusBadge, { status: invoice.status }) }),
|
|
1093
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.TableCell, { className: "text-end font-medium", children: amount }),
|
|
1094
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.TableCell, { className: "text-muted-foreground text-xs", children: period })
|
|
1095
1095
|
]
|
|
1096
1096
|
},
|
|
1097
1097
|
invoice.id
|
|
@@ -1125,7 +1125,7 @@ function InvoicesContainer() {
|
|
|
1125
1125
|
setLoading(true);
|
|
1126
1126
|
try {
|
|
1127
1127
|
const params = statusFilter !== "all" ? { status: statusFilter } : void 0;
|
|
1128
|
-
const data = await
|
|
1128
|
+
const data = await _chunkFF4EIQ6Hjs.StripeInvoiceService.listInvoices(params);
|
|
1129
1129
|
setInvoices(data);
|
|
1130
1130
|
} catch (error) {
|
|
1131
1131
|
console.error("[InvoicesContainer] Failed to load invoices:", error);
|
|
@@ -1141,12 +1141,12 @@ function InvoicesContainer() {
|
|
|
1141
1141
|
setStatusFilter(value);
|
|
1142
1142
|
}, "handleFilterChange");
|
|
1143
1143
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "space-y-4", children: [
|
|
1144
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1145
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1146
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1147
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1148
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1149
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1144
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Tabs, { value: statusFilter, onValueChange: handleFilterChange, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.TabsList, { children: [
|
|
1145
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.TabsTrigger, { value: "all", children: t("billing.ui.invoices.filter_all") }),
|
|
1146
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.TabsTrigger, { value: "paid" /* PAID */, children: t("billing.ui.invoice_status.paid") }),
|
|
1147
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.TabsTrigger, { value: "open" /* OPEN */, children: t("billing.ui.invoice_status.open") }),
|
|
1148
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.TabsTrigger, { value: "void" /* VOID */, children: t("billing.ui.invoice_status.void") }),
|
|
1149
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.TabsTrigger, { value: "uncollectible" /* UNCOLLECTIBLE */, children: t("billing.ui.invoice_status.uncollectible") })
|
|
1150
1150
|
] }) }),
|
|
1151
1151
|
loading && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "text-center py-8 text-muted-foreground", children: t("billing.ui.invoices.loading") }),
|
|
1152
1152
|
!loading && invoices.length === 0 && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "border border-dashed border-gray-300 rounded-lg p-8 text-center", children: [
|
|
@@ -1188,7 +1188,7 @@ function CancelSubscriptionDialog({
|
|
|
1188
1188
|
onSuccess
|
|
1189
1189
|
}) {
|
|
1190
1190
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
1191
|
-
const fmt =
|
|
1191
|
+
const fmt = _chunk6NZKWIORjs.useBillingFormatOptions.call(void 0, );
|
|
1192
1192
|
const [isSubmitting, setIsSubmitting] = _react.useState.call(void 0, false);
|
|
1193
1193
|
const form = _reacthookform.useForm.call(void 0, {
|
|
1194
1194
|
resolver: _zod.zodResolver.call(void 0, formSchema),
|
|
@@ -1199,7 +1199,7 @@ function CancelSubscriptionDialog({
|
|
|
1199
1199
|
const onSubmit = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, async (_values) => {
|
|
1200
1200
|
setIsSubmitting(true);
|
|
1201
1201
|
try {
|
|
1202
|
-
await
|
|
1202
|
+
await _chunkFF4EIQ6Hjs.StripeSubscriptionService.cancelSubscription({
|
|
1203
1203
|
id: subscription.id,
|
|
1204
1204
|
cancelImmediately: false
|
|
1205
1205
|
});
|
|
@@ -1211,16 +1211,16 @@ function CancelSubscriptionDialog({
|
|
|
1211
1211
|
setIsSubmitting(false);
|
|
1212
1212
|
}
|
|
1213
1213
|
}, "onSubmit");
|
|
1214
|
-
const periodEndDate =
|
|
1215
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1216
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
1217
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1218
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1214
|
+
const periodEndDate = _chunk6NZKWIORjs.formatDate.call(void 0, subscription.currentPeriodEnd, fmt);
|
|
1215
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Dialog, { open, onOpenChange, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.DialogContent, { className: "max-w-md", children: [
|
|
1216
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.DialogHeader, { children: [
|
|
1217
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.DialogTitle, { children: t("billing.ui.subscription.cancel.title") }),
|
|
1218
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.DialogDescription, { children: t("billing.ui.subscription.cancel.description") })
|
|
1219
1219
|
] }),
|
|
1220
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1220
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Form, { ...form, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "form", { onSubmit: form.handleSubmit(onSubmit), className: "flex flex-col gap-y-4", children: [
|
|
1221
1221
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "bg-primary/10 border-primary/30 text-foreground rounded-lg border p-3 text-sm", children: t("billing.ui.subscription.cancel.remains_active", { date: periodEndDate }) }),
|
|
1222
1222
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1223
|
-
|
|
1223
|
+
_chunk6NZKWIORjs.FormTextarea,
|
|
1224
1224
|
{
|
|
1225
1225
|
form,
|
|
1226
1226
|
id: "reason",
|
|
@@ -1230,8 +1230,8 @@ function CancelSubscriptionDialog({
|
|
|
1230
1230
|
}
|
|
1231
1231
|
),
|
|
1232
1232
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex gap-x-2 justify-end pt-2", children: [
|
|
1233
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1234
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1233
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Button, { type: "button", variant: "outline", onClick: () => onOpenChange(false), disabled: isSubmitting, children: t("billing.ui.subscription.cancel.keep") }),
|
|
1234
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Button, { type: "submit", variant: "destructive", disabled: isSubmitting, children: isSubmitting ? t("billing.ui.subscription.cancel.canceling") : t("billing.ui.subscription.cancel.confirm") })
|
|
1235
1235
|
] })
|
|
1236
1236
|
] }) })
|
|
1237
1237
|
] }) });
|
|
@@ -1282,7 +1282,7 @@ var cancelingConfig = {
|
|
|
1282
1282
|
function SubscriptionStatusBadge({ status, cancelAtPeriodEnd }) {
|
|
1283
1283
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
1284
1284
|
const config = cancelAtPeriodEnd ? cancelingConfig : statusConfig2[status] || statusConfig2["canceled" /* CANCELED */];
|
|
1285
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1285
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Badge, { variant: config.variant, children: t(config.label) });
|
|
1286
1286
|
}
|
|
1287
1287
|
_chunk7QVYU63Ejs.__name.call(void 0, SubscriptionStatusBadge, "SubscriptionStatusBadge");
|
|
1288
1288
|
|
|
@@ -1309,7 +1309,7 @@ function formatPlanName2(price, t) {
|
|
|
1309
1309
|
_chunk7QVYU63Ejs.__name.call(void 0, formatPlanName2, "formatPlanName");
|
|
1310
1310
|
function formatBillingAmount(price, notAvailable, fmt) {
|
|
1311
1311
|
if (!_optionalChain([price, 'optionalAccess', _37 => _37.unitAmount])) return notAvailable;
|
|
1312
|
-
return
|
|
1312
|
+
return _chunkFF4EIQ6Hjs.formatCurrency.call(void 0, price.unitAmount, price.currency, fmt);
|
|
1313
1313
|
}
|
|
1314
1314
|
_chunk7QVYU63Ejs.__name.call(void 0, formatBillingAmount, "formatBillingAmount");
|
|
1315
1315
|
function SubscriptionDetails({
|
|
@@ -1321,11 +1321,11 @@ function SubscriptionDetails({
|
|
|
1321
1321
|
renderCancelDialog
|
|
1322
1322
|
}) {
|
|
1323
1323
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
1324
|
-
const fmt =
|
|
1324
|
+
const fmt = _chunk6NZKWIORjs.useBillingFormatOptions.call(void 0, );
|
|
1325
1325
|
const [showCancel, setShowCancel] = _react.useState.call(void 0, false);
|
|
1326
1326
|
const handleManageViaPortal = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, async () => {
|
|
1327
1327
|
try {
|
|
1328
|
-
const { url } = await
|
|
1328
|
+
const { url } = await _chunkFF4EIQ6Hjs.StripeCustomerService.createPortalSession();
|
|
1329
1329
|
window.open(url, "_blank");
|
|
1330
1330
|
} catch (error) {
|
|
1331
1331
|
console.error("[SubscriptionDetails] Failed to create portal session:", error);
|
|
@@ -1333,10 +1333,10 @@ function SubscriptionDetails({
|
|
|
1333
1333
|
}, "handleManageViaPortal");
|
|
1334
1334
|
const canCancel = subscription.status === "active" /* ACTIVE */ || subscription.status === "trialing" /* TRIALING */ || subscription.status === "paused" /* PAUSED */;
|
|
1335
1335
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
|
|
1336
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1337
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
1338
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1339
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1336
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Dialog, { open, onOpenChange, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.DialogContent, { className: "max-w-2xl", children: [
|
|
1337
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.DialogHeader, { children: [
|
|
1338
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.DialogTitle, { children: t("billing.ui.subscription.details_title") }),
|
|
1339
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.DialogDescription, { children: t("billing.ui.subscription.details_description") })
|
|
1340
1340
|
] }),
|
|
1341
1341
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "space-y-6", children: [
|
|
1342
1342
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-x-3", children: [
|
|
@@ -1362,22 +1362,22 @@ function SubscriptionDetails({
|
|
|
1362
1362
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "space-y-2", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex justify-between", children: [
|
|
1363
1363
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-muted-foreground text-xs", children: t("billing.ui.subscription.current_period") }),
|
|
1364
1364
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "text-sm", children: [
|
|
1365
|
-
|
|
1365
|
+
_chunk6NZKWIORjs.formatDate.call(void 0, subscription.currentPeriodStart, fmt),
|
|
1366
1366
|
" - ",
|
|
1367
|
-
|
|
1367
|
+
_chunk6NZKWIORjs.formatDate.call(void 0, subscription.currentPeriodEnd, fmt)
|
|
1368
1368
|
] })
|
|
1369
1369
|
] }) }),
|
|
1370
1370
|
subscription.trialEnd && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex justify-between", children: [
|
|
1371
1371
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-muted-foreground text-xs", children: t("billing.ui.subscription.trial_ends") }),
|
|
1372
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-sm", children:
|
|
1372
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-sm", children: _chunk6NZKWIORjs.formatDate.call(void 0, subscription.trialEnd, fmt) })
|
|
1373
1373
|
] }),
|
|
1374
1374
|
subscription.cancelAtPeriodEnd && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "bg-warning/15 border-warning/30 rounded-lg border p-3", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-warning text-xs/relaxed", children: t("billing.ui.subscription.cancel_at_period_end", {
|
|
1375
|
-
date:
|
|
1375
|
+
date: _chunk6NZKWIORjs.formatDate.call(void 0, subscription.currentPeriodEnd, fmt)
|
|
1376
1376
|
}) }) }),
|
|
1377
1377
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-wrap gap-2 pt-4 border-t", children: [
|
|
1378
|
-
onChangePlan && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1379
|
-
canCancel && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1380
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1378
|
+
onChangePlan && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Button, { variant: "default", onClick: () => onChangePlan(subscription), children: t("billing.ui.subscription.change_plan") }),
|
|
1379
|
+
canCancel && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Button, { variant: "destructive", onClick: () => setShowCancel(true), children: t("ui.buttons.cancel") }),
|
|
1380
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Button, { variant: "outline", onClick: handleManageViaPortal, children: t("billing.ui.subscription.manage_portal") })
|
|
1381
1381
|
] })
|
|
1382
1382
|
] })
|
|
1383
1383
|
] }) }),
|
|
@@ -1437,46 +1437,46 @@ function SubscriptionsList({
|
|
|
1437
1437
|
renderCancelDialog
|
|
1438
1438
|
}) {
|
|
1439
1439
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
1440
|
-
const fmt =
|
|
1440
|
+
const fmt = _chunk6NZKWIORjs.useBillingFormatOptions.call(void 0, );
|
|
1441
1441
|
const [selectedSub, setSelectedSub] = _react.useState.call(void 0, null);
|
|
1442
1442
|
const handleRowClick = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, (subscription) => {
|
|
1443
1443
|
setSelectedSub(subscription);
|
|
1444
1444
|
}, "handleRowClick");
|
|
1445
1445
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
|
|
1446
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "border rounded-lg overflow-clip", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
1447
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1448
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1449
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1450
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1451
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1452
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1446
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "border rounded-lg overflow-clip", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.Table, { children: [
|
|
1447
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.TableHeader, { className: "bg-muted", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.TableRow, { children: [
|
|
1448
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.TableHead, { children: t("billing.ui.columns.status") }),
|
|
1449
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.TableHead, { children: t("billing.ui.columns.plan") }),
|
|
1450
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.TableHead, { children: t("billing.ui.columns.period") }),
|
|
1451
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.TableHead, { className: "text-end", children: t("billing.ui.columns.amount") }),
|
|
1452
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.TableHead, { className: "text-end", children: t("billing.ui.columns.actions") })
|
|
1453
1453
|
] }) }),
|
|
1454
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1454
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.TableBody, { children: subscriptions.map((subscription) => {
|
|
1455
1455
|
const price = subscription.price;
|
|
1456
|
-
const amount = _optionalChain([price, 'optionalAccess', _42 => _42.unitAmount]) ?
|
|
1457
|
-
const discountedAmount = price ?
|
|
1458
|
-
const period = `${
|
|
1456
|
+
const amount = _optionalChain([price, 'optionalAccess', _42 => _42.unitAmount]) ? _chunkFF4EIQ6Hjs.formatCurrency.call(void 0, price.unitAmount, price.currency, fmt) : "0";
|
|
1457
|
+
const discountedAmount = price ? _chunk6NZKWIORjs.applyDiscount.call(void 0, price.unitAmount, _chunk6NZKWIORjs.subscriptionDiscount.call(void 0, subscription)) : null;
|
|
1458
|
+
const period = `${_chunk6NZKWIORjs.formatDate.call(void 0, subscription.currentPeriodStart, fmt)} - ${_chunk6NZKWIORjs.formatDate.call(void 0, subscription.currentPeriodEnd, fmt)}`;
|
|
1459
1459
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
1460
|
-
|
|
1460
|
+
_chunk6NZKWIORjs.TableRow,
|
|
1461
1461
|
{
|
|
1462
1462
|
onClick: () => handleRowClick(subscription),
|
|
1463
1463
|
className: "cursor-pointer hover:bg-muted/50",
|
|
1464
1464
|
children: [
|
|
1465
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1465
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.TableCell, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1466
1466
|
SubscriptionStatusBadge,
|
|
1467
1467
|
{
|
|
1468
1468
|
status: subscription.status,
|
|
1469
1469
|
cancelAtPeriodEnd: subscription.cancelAtPeriodEnd
|
|
1470
1470
|
}
|
|
1471
1471
|
) }),
|
|
1472
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1473
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1474
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1472
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.TableCell, { className: "font-medium", children: formatPlanName3(price, t) }),
|
|
1473
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.TableCell, { className: "text-muted-foreground text-sm", children: period }),
|
|
1474
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.TableCell, { className: "text-end font-medium", children: discountedAmount !== null && price ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
|
|
1475
1475
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "line-through text-muted-foreground me-2", children: amount }),
|
|
1476
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-success", children:
|
|
1476
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-success", children: _chunkFF4EIQ6Hjs.formatCurrency.call(void 0, discountedAmount, price.currency, fmt) })
|
|
1477
1477
|
] }) : amount }),
|
|
1478
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1479
|
-
|
|
1478
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.TableCell, { className: "text-end", children: (subscription.status === "active" /* ACTIVE */ || subscription.status === "trialing" /* TRIALING */) && onChangePlan && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1479
|
+
_chunk6NZKWIORjs.Button,
|
|
1480
1480
|
{
|
|
1481
1481
|
size: "sm",
|
|
1482
1482
|
variant: "outline",
|
|
@@ -1536,7 +1536,7 @@ function SubscriptionsContainer({
|
|
|
1536
1536
|
}
|
|
1537
1537
|
setLoading(true);
|
|
1538
1538
|
try {
|
|
1539
|
-
const fetchedSubscriptions = await
|
|
1539
|
+
const fetchedSubscriptions = await _chunkFF4EIQ6Hjs.StripeSubscriptionService.listSubscriptions();
|
|
1540
1540
|
setSubscriptions(fetchedSubscriptions);
|
|
1541
1541
|
} catch (error) {
|
|
1542
1542
|
console.error("[SubscriptionsContainer] Failed to load subscriptions:", error);
|
|
@@ -1559,7 +1559,7 @@ function SubscriptionsContainer({
|
|
|
1559
1559
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.CreditCard, { className: "h-8 w-8" }),
|
|
1560
1560
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h1", { className: "text-primary text-3xl font-semibold", children: t("billing.ui.subscriptions.title") })
|
|
1561
1561
|
] }),
|
|
1562
|
-
subscriptions.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1562
|
+
subscriptions.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Button, { onClick: () => _optionalChain([onOpenWizard, 'optionalCall', _44 => _44()]), children: hasActiveRecurringSubscription ? t("billing.ui.subscriptions.purchase_addons") : t("billing.ui.subscriptions.subscribe") })
|
|
1563
1563
|
] }),
|
|
1564
1564
|
criticalSubscriptions.map((subscription) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, BillingAlertBanner, { subscription }, subscription.id)),
|
|
1565
1565
|
subscriptions.length === 0 && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col items-center justify-center py-12 space-y-4", children: [
|
|
@@ -1567,7 +1567,7 @@ function SubscriptionsContainer({
|
|
|
1567
1567
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "text-center", children: [
|
|
1568
1568
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h3", { className: "text-sm font-medium mb-2", children: t("billing.ui.subscriptions.empty_title") }),
|
|
1569
1569
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-muted-foreground mb-6", children: t("billing.ui.subscriptions.empty_description") }),
|
|
1570
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1570
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Button, { onClick: () => _optionalChain([onOpenWizard, 'optionalCall', _45 => _45()]), children: t("billing.ui.subscriptions.subscribe") })
|
|
1571
1571
|
] })
|
|
1572
1572
|
] }),
|
|
1573
1573
|
subscriptions.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
@@ -1591,9 +1591,9 @@ function IntervalToggle({ value, onChange, hasMonthly, hasYearly }) {
|
|
|
1591
1591
|
if (!hasMonthly || !hasYearly) {
|
|
1592
1592
|
return null;
|
|
1593
1593
|
}
|
|
1594
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1595
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1596
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1594
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Tabs, { value, onValueChange: (v) => onChange(v), children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.TabsList, { children: [
|
|
1595
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.TabsTrigger, { value: "month", children: t("billing.admin.prices.interval.month") }),
|
|
1596
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.TabsTrigger, { value: "year", children: t("billing.admin.prices.interval.year") })
|
|
1597
1597
|
] }) });
|
|
1598
1598
|
}
|
|
1599
1599
|
_chunk7QVYU63Ejs.__name.call(void 0, IntervalToggle, "IntervalToggle");
|
|
@@ -1611,11 +1611,11 @@ function PricingCard({
|
|
|
1611
1611
|
onSelect
|
|
1612
1612
|
}) {
|
|
1613
1613
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
1614
|
-
const fmt =
|
|
1614
|
+
const fmt = _chunk6NZKWIORjs.useBillingFormatOptions.call(void 0, );
|
|
1615
1615
|
const description = price.description || price.nickname || t("billing.ui.pricing.standard");
|
|
1616
1616
|
const features = price.features || [];
|
|
1617
|
-
const formattedPrice =
|
|
1618
|
-
const interval =
|
|
1617
|
+
const formattedPrice = _chunkFF4EIQ6Hjs.formatCurrency.call(void 0, price.unitAmount, price.currency, fmt);
|
|
1618
|
+
const interval = _chunkFF4EIQ6Hjs.formatInterval.call(void 0, price, fmt);
|
|
1619
1619
|
const handleKeyDown = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, (e) => {
|
|
1620
1620
|
if ((e.key === "Enter" || e.key === " ") && !isDisabled && !isCurrentPlan) {
|
|
1621
1621
|
e.preventDefault();
|
|
@@ -1628,7 +1628,7 @@ function PricingCard({
|
|
|
1628
1628
|
}
|
|
1629
1629
|
}, "handleClick");
|
|
1630
1630
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
1631
|
-
|
|
1631
|
+
_chunk6NZKWIORjs.Card,
|
|
1632
1632
|
{
|
|
1633
1633
|
role: "radio",
|
|
1634
1634
|
"aria-checked": isSelected,
|
|
@@ -1636,7 +1636,7 @@ function PricingCard({
|
|
|
1636
1636
|
tabIndex: isDisabled ? -1 : 0,
|
|
1637
1637
|
onKeyDown: handleKeyDown,
|
|
1638
1638
|
onClick: handleClick,
|
|
1639
|
-
className:
|
|
1639
|
+
className: _chunkFF4EIQ6Hjs.cn.call(void 0,
|
|
1640
1640
|
"relative cursor-pointer transition-all duration-200 flex flex-col h-full",
|
|
1641
1641
|
"focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
|
|
1642
1642
|
isCurrentPlan && "bg-muted/30",
|
|
@@ -1646,9 +1646,9 @@ function PricingCard({
|
|
|
1646
1646
|
isLoading && "pointer-events-none"
|
|
1647
1647
|
),
|
|
1648
1648
|
children: [
|
|
1649
|
-
isCurrentPlan && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1650
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1651
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
1649
|
+
isCurrentPlan && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Badge, { variant: "secondary", className: "absolute top-2 end-2", children: t("billing.ui.pricing.current") }),
|
|
1650
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.CardHeader, { className: "pb-2", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h3", { className: "text-sm font-medium", children: description }) }),
|
|
1651
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.CardContent, { className: "pb-4 grow", children: [
|
|
1652
1652
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "mb-4", children: [
|
|
1653
1653
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-3xl font-bold", children: formattedPrice }),
|
|
1654
1654
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-muted-foreground ms-1", children: interval })
|
|
@@ -1658,8 +1658,8 @@ function PricingCard({
|
|
|
1658
1658
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-sm text-muted-foreground", children: feature })
|
|
1659
1659
|
] }, index)) })
|
|
1660
1660
|
] }),
|
|
1661
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1662
|
-
|
|
1661
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.CardFooter, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1662
|
+
_chunk6NZKWIORjs.Button,
|
|
1663
1663
|
{
|
|
1664
1664
|
variant: isCurrentPlan ? "secondary" : isSelected ? "default" : "outline",
|
|
1665
1665
|
className: "w-full",
|
|
@@ -1692,7 +1692,7 @@ function ProductPricingRow({
|
|
|
1692
1692
|
return null;
|
|
1693
1693
|
}
|
|
1694
1694
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "space-y-3", children: [
|
|
1695
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1695
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.SectionHeader, { children: product.name }),
|
|
1696
1696
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1697
1697
|
"div",
|
|
1698
1698
|
{
|
|
@@ -1793,15 +1793,15 @@ function ProductPricingList({
|
|
|
1793
1793
|
_chunk7QVYU63Ejs.__name.call(void 0, ProductPricingList, "ProductPricingList");
|
|
1794
1794
|
function ProductPricingListSkeleton() {
|
|
1795
1795
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "space-y-6", children: [1, 2].map((rowIndex) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "space-y-3", children: [
|
|
1796
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1796
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Skeleton, { className: "h-6 w-32" }),
|
|
1797
1797
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4", children: [1, 2, 3].map((cardIndex) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "p-4 rounded-lg border animate-pulse space-y-3", children: [
|
|
1798
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1799
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1798
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Skeleton, { className: "h-6 w-24" }),
|
|
1799
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Skeleton, { className: "h-8 w-32" }),
|
|
1800
1800
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "space-y-2", children: [
|
|
1801
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1802
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1801
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Skeleton, { className: "h-4 w-full" }),
|
|
1802
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Skeleton, { className: "h-4 w-3/4" })
|
|
1803
1803
|
] }),
|
|
1804
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1804
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Skeleton, { className: "h-10 w-full" })
|
|
1805
1805
|
] }, cardIndex)) })
|
|
1806
1806
|
] }, rowIndex)) });
|
|
1807
1807
|
}
|
|
@@ -1812,20 +1812,20 @@ _chunk7QVYU63Ejs.__name.call(void 0, ProductPricingListSkeleton, "ProductPricing
|
|
|
1812
1812
|
|
|
1813
1813
|
function ProrationPreview({ preview }) {
|
|
1814
1814
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
1815
|
-
const fmt =
|
|
1815
|
+
const fmt = _chunk6NZKWIORjs.useBillingFormatOptions.call(void 0, );
|
|
1816
1816
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "bg-primary/10 border-primary/30 rounded-lg border p-4", children: [
|
|
1817
1817
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h4", { className: "text-primary mb-3 font-semibold", children: t("billing.ui.proration.title") }),
|
|
1818
1818
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "space-y-2", children: [
|
|
1819
1819
|
preview.lineItems.map((item, index) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex justify-between text-sm", children: [
|
|
1820
1820
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-muted-foreground", children: item.description }),
|
|
1821
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: `font-medium ${item.amount < 0 ? "text-success" : "text-foreground"}`, children:
|
|
1821
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: `font-medium ${item.amount < 0 ? "text-success" : "text-foreground"}`, children: _chunkFF4EIQ6Hjs.formatCurrency.call(void 0, item.amount, preview.currency, fmt) })
|
|
1822
1822
|
] }, index)),
|
|
1823
1823
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "border-primary/30 mt-2 border-t pt-2", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex justify-between font-semibold", children: [
|
|
1824
1824
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-foreground", children: t("billing.ui.proration.net_due_today") }),
|
|
1825
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-foreground", children:
|
|
1825
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-foreground", children: _chunkFF4EIQ6Hjs.formatCurrency.call(void 0, preview.immediateCharge, preview.currency, fmt) })
|
|
1826
1826
|
] }) }),
|
|
1827
1827
|
preview.lineItems.length > 0 && preview.lineItems[0].period && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "text-muted-foreground mt-2 text-xs", children: t("billing.ui.proration.next_invoice", {
|
|
1828
|
-
amount:
|
|
1828
|
+
amount: _chunkFF4EIQ6Hjs.formatCurrency.call(void 0, preview.amountDue, preview.currency, fmt)
|
|
1829
1829
|
}) })
|
|
1830
1830
|
] })
|
|
1831
1831
|
] });
|
|
@@ -1838,7 +1838,7 @@ _chunk7QVYU63Ejs.__name.call(void 0, ProrationPreview, "ProrationPreview");
|
|
|
1838
1838
|
|
|
1839
1839
|
function SubscriptionConfirmation({ price, isLoading, onConfirm, onCancel }) {
|
|
1840
1840
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
1841
|
-
const fmt =
|
|
1841
|
+
const fmt = _chunk6NZKWIORjs.useBillingFormatOptions.call(void 0, );
|
|
1842
1842
|
const productName = _optionalChain([price, 'access', _51 => _51.product, 'optionalAccess', _52 => _52.name]) || price.nickname || t("billing.ui.wizard.review.selected_plan");
|
|
1843
1843
|
const productDescription = _optionalChain([price, 'access', _53 => _53.product, 'optionalAccess', _54 => _54.description]) || price.description;
|
|
1844
1844
|
const features = price.features || [];
|
|
@@ -1850,16 +1850,16 @@ function SubscriptionConfirmation({ price, isLoading, onConfirm, onCancel }) {
|
|
|
1850
1850
|
productDescription && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "text-sm text-muted-foreground", children: productDescription })
|
|
1851
1851
|
] }),
|
|
1852
1852
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "text-lg font-semibold", children: [
|
|
1853
|
-
|
|
1854
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-sm font-normal text-muted-foreground", children:
|
|
1853
|
+
_chunkFF4EIQ6Hjs.formatCurrency.call(void 0, price.unitAmount, price.currency, fmt),
|
|
1854
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-sm font-normal text-muted-foreground", children: _chunkFF4EIQ6Hjs.formatInterval.call(void 0, price, fmt) })
|
|
1855
1855
|
] }),
|
|
1856
1856
|
features.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "space-y-1", children: features.map((feature, index) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-2 text-sm ", children: [
|
|
1857
1857
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Check, { className: "h-4 w-4 text-primary" }),
|
|
1858
1858
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { children: feature })
|
|
1859
1859
|
] }, index)) }),
|
|
1860
1860
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex justify-end gap-3 pt-2 border-t border-accent/30", children: [
|
|
1861
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1862
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1861
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Button, { variant: "outline", onClick: onCancel, disabled: isLoading, children: t("ui.buttons.cancel") }),
|
|
1862
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Button, { onClick: onConfirm, disabled: isLoading, children: isLoading ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
|
|
1863
1863
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Loader2, { className: "h-4 w-4 animate-spin me-2" }),
|
|
1864
1864
|
t("billing.ui.wizard.review.processing")
|
|
1865
1865
|
] }) : t("billing.ui.confirmation.subscribe") })
|
|
@@ -2038,7 +2038,7 @@ function wizardReducer(state, action) {
|
|
|
2038
2038
|
_chunk7QVYU63Ejs.__name.call(void 0, wizardReducer, "wizardReducer");
|
|
2039
2039
|
function useSubscriptionWizard({ subscription, onSuccess, onClose }) {
|
|
2040
2040
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
2041
|
-
const locale =
|
|
2041
|
+
const locale = _chunkFF4EIQ6Hjs.useI18nLocale.call(void 0, );
|
|
2042
2042
|
const { confirmPayment } = useConfirmSubscriptionPayment();
|
|
2043
2043
|
const [state, dispatch] = _react.useReducer.call(void 0, wizardReducer, {
|
|
2044
2044
|
...initialState,
|
|
@@ -2050,7 +2050,7 @@ function useSubscriptionWizard({ subscription, onSuccess, onClose }) {
|
|
|
2050
2050
|
onCloseRef.current = onClose;
|
|
2051
2051
|
const checkPaymentMethod = _react.useCallback.call(void 0, async () => {
|
|
2052
2052
|
try {
|
|
2053
|
-
const methods = await
|
|
2053
|
+
const methods = await _chunkFF4EIQ6Hjs.StripeCustomerService.listPaymentMethods();
|
|
2054
2054
|
dispatch({ type: "SET_HAS_PAYMENT_METHOD", hasMethod: methods.length > 0 });
|
|
2055
2055
|
} catch (error) {
|
|
2056
2056
|
console.error("[useSubscriptionWizard] Failed to check payment methods:", error);
|
|
@@ -2068,10 +2068,10 @@ function useSubscriptionWizard({ subscription, onSuccess, onClose }) {
|
|
|
2068
2068
|
}, []);
|
|
2069
2069
|
const lookUpAutomaticCode = _react.useCallback.call(void 0, async (priceId) => {
|
|
2070
2070
|
try {
|
|
2071
|
-
const automaticCode = await
|
|
2071
|
+
const automaticCode = await _chunkFF4EIQ6Hjs.StripeCouponCodeService.findAutomatic({ priceId });
|
|
2072
2072
|
dispatch({
|
|
2073
2073
|
type: "SET_PROMOTION_CODE",
|
|
2074
|
-
code: automaticCode ?
|
|
2074
|
+
code: automaticCode ? _chunkFF4EIQ6Hjs.toPromotionCodeResult.call(void 0, automaticCode) : null
|
|
2075
2075
|
});
|
|
2076
2076
|
return true;
|
|
2077
2077
|
} catch (error) {
|
|
@@ -2098,7 +2098,7 @@ function useSubscriptionWizard({ subscription, onSuccess, onClose }) {
|
|
|
2098
2098
|
const isTrialUpgrade = _optionalChain([subscription, 'optionalAccess', _61 => _61.status]) === "trialing" /* TRIALING */;
|
|
2099
2099
|
dispatch({ type: "SET_IS_TRIAL_SUBSCRIPTION", isTrial: isTrialUpgrade });
|
|
2100
2100
|
if (isTrialUpgrade && !state.hasPaymentMethod) {
|
|
2101
|
-
const methods = await
|
|
2101
|
+
const methods = await _chunkFF4EIQ6Hjs.StripeCustomerService.listPaymentMethods();
|
|
2102
2102
|
if (methods.length === 0) {
|
|
2103
2103
|
dispatch({ type: "SET_STEP", step: "payment-method" });
|
|
2104
2104
|
dispatch({
|
|
@@ -2116,7 +2116,7 @@ function useSubscriptionWizard({ subscription, onSuccess, onClose }) {
|
|
|
2116
2116
|
}
|
|
2117
2117
|
}
|
|
2118
2118
|
if (subscription && state.selectedPrice.id !== _optionalChain([subscription, 'access', _62 => _62.price, 'optionalAccess', _63 => _63.id])) {
|
|
2119
|
-
const preview = await
|
|
2119
|
+
const preview = await _chunkFF4EIQ6Hjs.StripeSubscriptionService.getProrationPreview({
|
|
2120
2120
|
subscriptionId: subscription.id,
|
|
2121
2121
|
newPriceId: state.selectedPrice.id
|
|
2122
2122
|
});
|
|
@@ -2150,14 +2150,14 @@ function useSubscriptionWizard({ subscription, onSuccess, onClose }) {
|
|
|
2150
2150
|
newPriceId: state.selectedPrice.id,
|
|
2151
2151
|
promotionCode: promotionCodeToSend(state.promotionCode)
|
|
2152
2152
|
};
|
|
2153
|
-
result = await
|
|
2153
|
+
result = await _chunkFF4EIQ6Hjs.StripeSubscriptionService.changePlanWithMeta(changePlanParams);
|
|
2154
2154
|
} else {
|
|
2155
2155
|
const createParams = {
|
|
2156
2156
|
id: _uuid.v4.call(void 0, ),
|
|
2157
2157
|
priceId: state.selectedPrice.id,
|
|
2158
2158
|
promotionCode: promotionCodeToSend(state.promotionCode)
|
|
2159
2159
|
};
|
|
2160
|
-
result = await
|
|
2160
|
+
result = await _chunkFF4EIQ6Hjs.StripeSubscriptionService.createSubscription(createParams);
|
|
2161
2161
|
}
|
|
2162
2162
|
const clientSecret = clientSecretToConfirm(result.meta);
|
|
2163
2163
|
if (clientSecret) {
|
|
@@ -2173,7 +2173,7 @@ function useSubscriptionWizard({ subscription, onSuccess, onClose }) {
|
|
|
2173
2173
|
const subscriptionId = subscriptionIdToSync(result.subscription, subscription);
|
|
2174
2174
|
if (subscriptionId) {
|
|
2175
2175
|
try {
|
|
2176
|
-
await
|
|
2176
|
+
await _chunkFF4EIQ6Hjs.StripeSubscriptionService.syncSubscription({ subscriptionId });
|
|
2177
2177
|
} catch (syncError) {
|
|
2178
2178
|
console.error("[useSubscriptionWizard] Subscription sync after payment failed:", syncError);
|
|
2179
2179
|
}
|
|
@@ -2221,7 +2221,7 @@ function useSubscriptionWizard({ subscription, onSuccess, onClose }) {
|
|
|
2221
2221
|
dispatch({ type: "SET_VALIDATING_PROMO_CODE", isValidating: true });
|
|
2222
2222
|
dispatch({ type: "SET_PROMO_CODE_ERROR", error: null });
|
|
2223
2223
|
try {
|
|
2224
|
-
const result = await
|
|
2224
|
+
const result = await _chunkFF4EIQ6Hjs.StripePromotionCodeService.validatePromotionCode({
|
|
2225
2225
|
code,
|
|
2226
2226
|
stripePriceId: _optionalChain([state, 'access', _72 => _72.selectedPrice, 'optionalAccess', _73 => _73.id]),
|
|
2227
2227
|
language: locale
|
|
@@ -2346,7 +2346,7 @@ function WizardStepPlanSelection({
|
|
|
2346
2346
|
_react.useEffect.call(void 0, () => {
|
|
2347
2347
|
const loadProducts = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, async () => {
|
|
2348
2348
|
try {
|
|
2349
|
-
const fetchedProducts = await
|
|
2349
|
+
const fetchedProducts = await _chunkFF4EIQ6Hjs.StripeProductService.listProducts({ active: true });
|
|
2350
2350
|
setProducts(fetchedProducts);
|
|
2351
2351
|
} catch (error) {
|
|
2352
2352
|
console.error("[WizardStepPlanSelection] Failed to load products:", error);
|
|
@@ -2397,7 +2397,7 @@ function WizardStepPlanSelection({
|
|
|
2397
2397
|
onSelectPrice: handleSelectPrice
|
|
2398
2398
|
}
|
|
2399
2399
|
),
|
|
2400
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex justify-end pt-4 border-t", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2400
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex justify-end pt-4 border-t", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Button, { onClick: onNext, disabled: !selectedPrice || isProcessing, children: isProcessing ? t("common.loading") : t("billing.ui.wizard.next_review") }) })
|
|
2401
2401
|
] });
|
|
2402
2402
|
}
|
|
2403
2403
|
_chunk7QVYU63Ejs.__name.call(void 0, WizardStepPlanSelection, "WizardStepPlanSelection");
|
|
@@ -2421,7 +2421,7 @@ function PromoCodeInput({
|
|
|
2421
2421
|
disabled = false
|
|
2422
2422
|
}) {
|
|
2423
2423
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
2424
|
-
const locale =
|
|
2424
|
+
const locale = _chunkFF4EIQ6Hjs.useI18nLocale.call(void 0, );
|
|
2425
2425
|
const [code, setCode] = _react.useState.call(void 0, "");
|
|
2426
2426
|
const appliedKey = _optionalChain([appliedCode, 'optionalAccess', _82 => _82.valid]) ? `${appliedCode.automatic ? "auto" : "typed"}:${_nullishCoalesce(appliedCode.code, () => ( ""))}` : null;
|
|
2427
2427
|
const [previousAppliedKey, setPreviousAppliedKey] = _react.useState.call(void 0, appliedKey);
|
|
@@ -2450,7 +2450,7 @@ function PromoCodeInput({
|
|
|
2450
2450
|
}
|
|
2451
2451
|
const amount = (result.discountValue || 0) / 100;
|
|
2452
2452
|
const currency = _optionalChain([result, 'access', _83 => _83.currency, 'optionalAccess', _84 => _84.toUpperCase, 'call', _85 => _85()]) || "USD";
|
|
2453
|
-
return t("billing.ui.wizard.review.amount_off", { amount: `${currency} ${
|
|
2453
|
+
return t("billing.ui.wizard.review.amount_off", { amount: `${currency} ${_chunkFF4EIQ6Hjs.formatFixed.call(void 0, amount, locale, 2)}` });
|
|
2454
2454
|
}, "formatDiscount");
|
|
2455
2455
|
const formatDuration = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, (result) => {
|
|
2456
2456
|
switch (result.duration) {
|
|
@@ -2467,7 +2467,7 @@ function PromoCodeInput({
|
|
|
2467
2467
|
const codeInput = /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "space-y-2", children: [
|
|
2468
2468
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex gap-2", children: [
|
|
2469
2469
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2470
|
-
|
|
2470
|
+
_chunk6NZKWIORjs.Input,
|
|
2471
2471
|
{
|
|
2472
2472
|
placeholder: t("billing.ui.promo_code.placeholder"),
|
|
2473
2473
|
value: code,
|
|
@@ -2477,7 +2477,7 @@ function PromoCodeInput({
|
|
|
2477
2477
|
className: "flex-1"
|
|
2478
2478
|
}
|
|
2479
2479
|
),
|
|
2480
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2480
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Button, { variant: "outline", onClick: handleApply, disabled: disabled || isValidating || !code.trim(), children: isValidating ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Loader2, { className: "h-4 w-4 animate-spin" }) : t("billing.ui.promo_code.apply") })
|
|
2481
2481
|
] }),
|
|
2482
2482
|
error && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-destructive text-xs/relaxed", children: error })
|
|
2483
2483
|
] });
|
|
@@ -2506,7 +2506,7 @@ function PromoCodeInput({
|
|
|
2506
2506
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-success text-sm", children: formatDiscount(appliedCode) })
|
|
2507
2507
|
] }),
|
|
2508
2508
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2509
|
-
|
|
2509
|
+
_chunk6NZKWIORjs.Button,
|
|
2510
2510
|
{
|
|
2511
2511
|
variant: "ghost",
|
|
2512
2512
|
size: "sm",
|
|
@@ -2554,7 +2554,7 @@ function WizardStepReview({
|
|
|
2554
2554
|
isTrialUpgrade
|
|
2555
2555
|
}) {
|
|
2556
2556
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
2557
|
-
const fmt =
|
|
2557
|
+
const fmt = _chunk6NZKWIORjs.useBillingFormatOptions.call(void 0, );
|
|
2558
2558
|
const [card, setCard] = _react.useState.call(void 0, null);
|
|
2559
2559
|
_react.useEffect.call(void 0, () => {
|
|
2560
2560
|
if (!hasPaymentMethod) {
|
|
@@ -2562,7 +2562,7 @@ function WizardStepReview({
|
|
|
2562
2562
|
return;
|
|
2563
2563
|
}
|
|
2564
2564
|
let cancelled = false;
|
|
2565
|
-
Promise.all([
|
|
2565
|
+
Promise.all([_chunkFF4EIQ6Hjs.StripeCustomerService.listPaymentMethods(), _chunkFF4EIQ6Hjs.StripeCustomerService.getCustomer()]).then(([methods, customer]) => {
|
|
2566
2566
|
if (!cancelled) setCard(reviewCard(methods, _optionalChain([customer, 'optionalAccess', _90 => _90.defaultPaymentMethodId])));
|
|
2567
2567
|
}).catch((err) => {
|
|
2568
2568
|
console.error("[WizardStepReview] Failed to load the card on file:", err);
|
|
@@ -2581,11 +2581,11 @@ function WizardStepReview({
|
|
|
2581
2581
|
const interval = _optionalChain([price, 'access', _93 => _93.recurring, 'optionalAccess', _94 => _94.interval]) || "month";
|
|
2582
2582
|
return interval === "year" ? t("billing.ui.wizard.review.interval_yearly") : t("billing.ui.wizard.review.interval_monthly");
|
|
2583
2583
|
}, "formatInterval");
|
|
2584
|
-
const codeDiscount =
|
|
2585
|
-
const carriedDiscount = isChangingPlan && !codeDiscount ?
|
|
2584
|
+
const codeDiscount = _chunk6NZKWIORjs.promotionCodeDiscount.call(void 0, promotionCode);
|
|
2585
|
+
const carriedDiscount = isChangingPlan && !codeDiscount ? _chunk6NZKWIORjs.subscriptionDiscount.call(void 0, subscription) : null;
|
|
2586
2586
|
const discount = _nullishCoalesce(codeDiscount, () => ( carriedDiscount));
|
|
2587
|
-
const discountedPrice =
|
|
2588
|
-
const discountedImmediateCharge =
|
|
2587
|
+
const discountedPrice = _chunk6NZKWIORjs.applyDiscount.call(void 0, selectedPrice.unitAmount, discount);
|
|
2588
|
+
const discountedImmediateCharge = _chunk6NZKWIORjs.applyDiscount.call(void 0, _optionalChain([prorationPreview, 'optionalAccess', _95 => _95.immediateCharge]), discount);
|
|
2589
2589
|
const isProrationCredit = !isTrialUpgrade && (_nullishCoalesce(_nullishCoalesce(discountedImmediateCharge, () => ( _optionalChain([prorationPreview, 'optionalAccess', _96 => _96.immediateCharge]))), () => ( 0))) < 0;
|
|
2590
2590
|
const prorationAmount = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, (amount) => isProrationCredit ? Math.abs(amount) : amount, "prorationAmount");
|
|
2591
2591
|
const getDiscountDescription = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, () => {
|
|
@@ -2594,13 +2594,13 @@ function WizardStepReview({
|
|
|
2594
2594
|
return t("billing.ui.wizard.review.percent_off", { value: discount.discountValue });
|
|
2595
2595
|
}
|
|
2596
2596
|
return t("billing.ui.wizard.review.amount_off", {
|
|
2597
|
-
amount:
|
|
2597
|
+
amount: _chunkFF4EIQ6Hjs.formatCurrency.call(void 0, discount.discountValue, discount.currency || selectedPrice.currency, fmt)
|
|
2598
2598
|
});
|
|
2599
2599
|
}, "getDiscountDescription");
|
|
2600
2600
|
const discountDescription = getDiscountDescription();
|
|
2601
2601
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "space-y-6", children: [
|
|
2602
2602
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "bg-muted/50 rounded-lg p-4 space-y-3", children: [
|
|
2603
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2603
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.SectionHeader, { children: t("billing.ui.wizard.review.selected_plan") }),
|
|
2604
2604
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex justify-between items-center", children: [
|
|
2605
2605
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { children: [
|
|
2606
2606
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "font-medium", children: _optionalChain([selectedPrice, 'access', _97 => _97.product, 'optionalAccess', _98 => _98.name]) }),
|
|
@@ -2608,11 +2608,11 @@ function WizardStepReview({
|
|
|
2608
2608
|
] }),
|
|
2609
2609
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "text-end", children: [
|
|
2610
2610
|
discountedPrice !== null ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
|
|
2611
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-sm text-muted-foreground line-through", children:
|
|
2612
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-success text-lg font-semibold", children:
|
|
2613
|
-
discountDescription && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2611
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-sm text-muted-foreground line-through", children: _chunkFF4EIQ6Hjs.formatCurrency.call(void 0, selectedPrice.unitAmount || 0, selectedPrice.currency, fmt) }),
|
|
2612
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-success text-lg font-semibold", children: _chunkFF4EIQ6Hjs.formatCurrency.call(void 0, discountedPrice, selectedPrice.currency, fmt) }),
|
|
2613
|
+
discountDescription && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Badge, { variant: "softGreen", children: discountDescription }),
|
|
2614
2614
|
carriedDiscount && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-sm text-muted-foreground", children: t("billing.ui.wizard.review.discount_carries_over") })
|
|
2615
|
-
] }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "font-semibold text-lg", children:
|
|
2615
|
+
] }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "font-semibold text-lg", children: _chunkFF4EIQ6Hjs.formatCurrency.call(void 0, selectedPrice.unitAmount || 0, selectedPrice.currency, fmt) }),
|
|
2616
2616
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-sm text-muted-foreground", children: formatInterval2(selectedPrice) })
|
|
2617
2617
|
] })
|
|
2618
2618
|
] })
|
|
@@ -2627,9 +2627,9 @@ function WizardStepReview({
|
|
|
2627
2627
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex justify-between text-sm", children: [
|
|
2628
2628
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: `${isTrialUpgrade ? "text-warning" : "text-muted-foreground"}`, children: isTrialUpgrade ? t("billing.ui.wizard.review.charge_now") : isProrationCredit ? t("billing.ui.wizard.review.credit_now") : t("billing.ui.wizard.review.due_now") }),
|
|
2629
2629
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: `font-medium ${isTrialUpgrade ? "text-warning" : "text-foreground"}`, children: discountedImmediateCharge !== null ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
|
|
2630
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "line-through text-muted-foreground me-2", children:
|
|
2631
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-success", children:
|
|
2632
|
-
] }) :
|
|
2630
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "line-through text-muted-foreground me-2", children: _chunkFF4EIQ6Hjs.formatCurrency.call(void 0, prorationAmount(prorationPreview.immediateCharge), prorationPreview.currency, fmt) }),
|
|
2631
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-success", children: _chunkFF4EIQ6Hjs.formatCurrency.call(void 0, prorationAmount(discountedImmediateCharge), prorationPreview.currency, fmt) })
|
|
2632
|
+
] }) : _chunkFF4EIQ6Hjs.formatCurrency.call(void 0, prorationAmount(prorationPreview.immediateCharge), prorationPreview.currency, fmt) })
|
|
2633
2633
|
] })
|
|
2634
2634
|
]
|
|
2635
2635
|
}
|
|
@@ -2653,15 +2653,15 @@ function WizardStepReview({
|
|
|
2653
2653
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h4", { className: "font-medium", children: t("billing.ui.payment_method.title") }),
|
|
2654
2654
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-sm text-muted-foreground", children: hasPaymentMethod ? card ? t("billing.ui.wizard.review.card_on_file", { brand: card.brand, last4: card.last4 }) : t("billing.ui.wizard.review.payment_on_file") : t("billing.ui.wizard.review.no_payment_on_file") })
|
|
2655
2655
|
] }),
|
|
2656
|
-
hasPaymentMethod ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2656
|
+
hasPaymentMethod ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Button, { variant: "outline", onClick: onAddPaymentMethod, disabled: isProcessing, children: t("billing.ui.wizard.review.use_another_card") }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Button, { variant: "outline", onClick: onAddPaymentMethod, children: t("billing.ui.payment_methods.add") })
|
|
2657
2657
|
] }) }),
|
|
2658
|
-
error && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
2658
|
+
error && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.Alert, { variant: "destructive", children: [
|
|
2659
2659
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.AlertCircle, { className: "h-4 w-4" }),
|
|
2660
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2660
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.AlertDescription, { children: error })
|
|
2661
2661
|
] }),
|
|
2662
2662
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex justify-between pt-4 border-t", children: [
|
|
2663
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2664
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2663
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Button, { variant: "outline", onClick: onBack, disabled: isProcessing, children: t("billing.ui.wizard.back") }),
|
|
2664
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Button, { onClick: hasPaymentMethod ? onConfirm : onAddPaymentMethod, disabled: isProcessing, children: isProcessing ? t("billing.ui.wizard.review.processing") : hasPaymentMethod ? isChangingPlan ? t("billing.ui.wizard.review.confirm_change") : t("billing.ui.wizard.review.subscribe_now") : t("billing.ui.payment_methods.add") })
|
|
2665
2665
|
] })
|
|
2666
2666
|
] });
|
|
2667
2667
|
}
|
|
@@ -2674,7 +2674,7 @@ function WizardStepPaymentMethod({ onBack, onSuccess, isProcessing }) {
|
|
|
2674
2674
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
2675
2675
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "space-y-6", children: [
|
|
2676
2676
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "text-center", children: [
|
|
2677
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2677
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.SectionHeader, { children: t("billing.ui.payment_methods.add") }),
|
|
2678
2678
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-sm text-muted-foreground", children: t("billing.ui.wizard.payment_description") })
|
|
2679
2679
|
] }),
|
|
2680
2680
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, PaymentMethodForm, { onSuccess, onCancel: onBack, isLoading: isProcessing, alwaysSetDefault: true })
|
|
@@ -2717,10 +2717,10 @@ function SubscriptionWizard({
|
|
|
2717
2717
|
const isChangePlanMode = !!subscription;
|
|
2718
2718
|
const dialogTitle = subscription ? t("billing.ui.wizard.change_title") : isPurchasingAddons ? t("billing.ui.subscriptions.purchase_addons") : t("billing.ui.subscriptions.subscribe");
|
|
2719
2719
|
const dialogDescription = subscription ? t("billing.ui.wizard.change_description") : isPurchasingAddons ? t("billing.ui.wizard.addons_description") : t("billing.ui.wizard.subscribe_description");
|
|
2720
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2721
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
2722
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2723
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2720
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Dialog, { open, onOpenChange, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.DialogContent, { className: "max-w-2xl max-h-[90vh] overflow-y-auto", children: [
|
|
2721
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.DialogHeader, { children: [
|
|
2722
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.DialogTitle, { children: dialogTitle }),
|
|
2723
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.DialogDescription, { children: dialogDescription })
|
|
2724
2724
|
] }),
|
|
2725
2725
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, WizardProgressIndicator, { currentStep: state.step }),
|
|
2726
2726
|
state.step === "plan-selection" && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
@@ -2788,7 +2788,7 @@ _chunk7QVYU63Ejs.__name.call(void 0, getProgressColor, "getProgressColor");
|
|
|
2788
2788
|
function formatDate2(date, { locale, t }) {
|
|
2789
2789
|
if (!date) return t("billing.ui.not_available");
|
|
2790
2790
|
try {
|
|
2791
|
-
return new Intl.DateTimeFormat(
|
|
2791
|
+
return new Intl.DateTimeFormat(_chunkFF4EIQ6Hjs.dateFormatLocale.call(void 0, locale), {
|
|
2792
2792
|
month: "short",
|
|
2793
2793
|
day: "numeric"
|
|
2794
2794
|
}).format(new Date(date));
|
|
@@ -2799,7 +2799,7 @@ function formatDate2(date, { locale, t }) {
|
|
|
2799
2799
|
_chunk7QVYU63Ejs.__name.call(void 0, formatDate2, "formatDate");
|
|
2800
2800
|
function UsageSummaryCard({ meter, summary }) {
|
|
2801
2801
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
2802
|
-
const fmt =
|
|
2802
|
+
const fmt = _chunk6NZKWIORjs.useBillingFormatOptions.call(void 0, );
|
|
2803
2803
|
const currentUsage = _nullishCoalesce(_optionalChain([summary, 'optionalAccess', _101 => _101.aggregatedValue]), () => ( 0));
|
|
2804
2804
|
const limit = meter.limit;
|
|
2805
2805
|
const percentage = limit && limit > 0 ? currentUsage / limit * 100 : null;
|
|
@@ -2807,15 +2807,15 @@ function UsageSummaryCard({ meter, summary }) {
|
|
|
2807
2807
|
const progressWidth = percentage !== null ? Math.min(percentage, 100) : 0;
|
|
2808
2808
|
const displayName = meter.displayName || meter.eventName;
|
|
2809
2809
|
const hasLimit = limit !== null && limit !== void 0;
|
|
2810
|
-
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
2811
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
2810
|
+
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.Card, { children: [
|
|
2811
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.CardHeader, { className: "flex flex-row items-center gap-x-3 pb-3", children: [
|
|
2812
2812
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex h-10 w-10 items-center justify-center rounded-lg bg-blue-100 text-blue-600", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Activity, { className: "h-5 w-5" }) }),
|
|
2813
2813
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col", children: [
|
|
2814
2814
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h3", { className: "text-sm font-medium", children: displayName }),
|
|
2815
2815
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-muted-foreground text-xs", children: meter.id })
|
|
2816
2816
|
] })
|
|
2817
2817
|
] }),
|
|
2818
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
2818
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.CardContent, { className: "flex flex-col gap-y-4", children: [
|
|
2819
2819
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { children: [
|
|
2820
2820
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-3xl font-bold", children: currentUsage.toLocaleString(fmt.locale) }),
|
|
2821
2821
|
hasLimit && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-muted-foreground text-sm", children: t("billing.ui.usage.of_limit_used", { limit: limit.toLocaleString(fmt.locale) }) })
|
|
@@ -2823,7 +2823,7 @@ function UsageSummaryCard({ meter, summary }) {
|
|
|
2823
2823
|
hasLimit ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-y-2", children: [
|
|
2824
2824
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "h-2 w-full overflow-hidden rounded-full bg-gray-200", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: `h-full transition-all ${progressColor}`, style: { width: `${progressWidth}%` } }) }),
|
|
2825
2825
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-muted-foreground text-sm", children: t("billing.ui.usage.percent_used", {
|
|
2826
|
-
value: percentage !== null ?
|
|
2826
|
+
value: percentage !== null ? _chunkFF4EIQ6Hjs.formatFixed.call(void 0, percentage, fmt.locale, 1) : ""
|
|
2827
2827
|
}) })
|
|
2828
2828
|
] }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-muted-foreground text-sm", children: t("billing.ui.usage.no_limit") }),
|
|
2829
2829
|
summary && summary.start && summary.end && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "border-t pt-3", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-muted-foreground text-xs", children: t("billing.ui.usage.period", {
|
|
@@ -2856,14 +2856,14 @@ function UsageContainer() {
|
|
|
2856
2856
|
const loadUsageData = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, async () => {
|
|
2857
2857
|
setLoading(true);
|
|
2858
2858
|
try {
|
|
2859
|
-
const fetchedSubscriptions = await
|
|
2859
|
+
const fetchedSubscriptions = await _chunkFF4EIQ6Hjs.StripeSubscriptionService.listSubscriptions();
|
|
2860
2860
|
setSubscriptions(fetchedSubscriptions);
|
|
2861
2861
|
const hasMeteredSubscriptions2 = fetchedSubscriptions.some((sub) => _optionalChain([sub, 'access', _102 => _102.price, 'optionalAccess', _103 => _103.recurring, 'optionalAccess', _104 => _104.usageType]) === "metered");
|
|
2862
2862
|
if (!hasMeteredSubscriptions2) {
|
|
2863
2863
|
setLoading(false);
|
|
2864
2864
|
return;
|
|
2865
2865
|
}
|
|
2866
|
-
const fetchedMeters = await
|
|
2866
|
+
const fetchedMeters = await _chunkFF4EIQ6Hjs.StripeUsageService.listMeters();
|
|
2867
2867
|
setMeters(fetchedMeters);
|
|
2868
2868
|
const summariesMap = {};
|
|
2869
2869
|
const now = /* @__PURE__ */ new Date();
|
|
@@ -2871,7 +2871,7 @@ function UsageContainer() {
|
|
|
2871
2871
|
const endOfMonth = new Date(now.getFullYear(), now.getMonth() + 1, 0, 23, 59, 59, 999);
|
|
2872
2872
|
for (const meter of fetchedMeters) {
|
|
2873
2873
|
try {
|
|
2874
|
-
const meterSummaries = await
|
|
2874
|
+
const meterSummaries = await _chunkFF4EIQ6Hjs.StripeUsageService.getMeterSummaries({
|
|
2875
2875
|
meterId: meter.id,
|
|
2876
2876
|
startTime: startOfMonth,
|
|
2877
2877
|
endTime: endOfMonth
|
|
@@ -2920,7 +2920,7 @@ function formatDateTime(date, { locale, t }) {
|
|
|
2920
2920
|
if (!date) return t("billing.ui.not_available");
|
|
2921
2921
|
const dateObj = typeof date === "string" ? new Date(date) : date;
|
|
2922
2922
|
try {
|
|
2923
|
-
return new Intl.DateTimeFormat(
|
|
2923
|
+
return new Intl.DateTimeFormat(_chunkFF4EIQ6Hjs.dateFormatLocale.call(void 0, locale), {
|
|
2924
2924
|
month: "short",
|
|
2925
2925
|
day: "numeric",
|
|
2926
2926
|
year: "numeric",
|
|
@@ -2934,27 +2934,27 @@ function formatDateTime(date, { locale, t }) {
|
|
|
2934
2934
|
_chunk7QVYU63Ejs.__name.call(void 0, formatDateTime, "formatDateTime");
|
|
2935
2935
|
function UsageHistoryTable({ usageRecords }) {
|
|
2936
2936
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
2937
|
-
const fmt =
|
|
2937
|
+
const fmt = _chunk6NZKWIORjs.useBillingFormatOptions.call(void 0, );
|
|
2938
2938
|
if (usageRecords.length === 0) {
|
|
2939
2939
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "rounded-lg border p-8 text-center", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-muted-foreground", children: t("billing.ui.usage.history_empty") }) });
|
|
2940
2940
|
}
|
|
2941
2941
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-full flex-col gap-y-4", children: [
|
|
2942
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2943
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "overflow-clip rounded-lg border", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
2944
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2945
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2946
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2947
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2948
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2942
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.SectionHeader, { level: 2, children: t("billing.ui.usage.history_title") }),
|
|
2943
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "overflow-clip rounded-lg border", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.Table, { children: [
|
|
2944
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.TableHeader, { className: "bg-muted", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.TableRow, { children: [
|
|
2945
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.TableHead, { children: t("billing.ui.columns.date_time") }),
|
|
2946
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.TableHead, { children: t("billing.ui.columns.meter_event") }),
|
|
2947
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.TableHead, { className: "text-end", children: t("billing.ui.columns.quantity") }),
|
|
2948
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.TableHead, { children: t("billing.ui.columns.event_id") })
|
|
2949
2949
|
] }) }),
|
|
2950
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2950
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.TableBody, { children: usageRecords.map((record) => {
|
|
2951
2951
|
const dateTime = formatDateTime(record.timestamp, fmt);
|
|
2952
2952
|
const quantity = record.quantity.toLocaleString(fmt.locale);
|
|
2953
|
-
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
2954
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2955
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2956
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2957
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2953
|
+
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.TableRow, { children: [
|
|
2954
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.TableCell, { className: "font-medium", children: dateTime }),
|
|
2955
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.TableCell, { className: "text-muted-foreground", children: record.meterEventName }),
|
|
2956
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.TableCell, { className: "text-end font-medium", children: quantity }),
|
|
2957
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.TableCell, { className: "text-muted-foreground text-sm tabular-nums", children: record.stripeEventId })
|
|
2958
2958
|
] }, record.id);
|
|
2959
2959
|
}) })
|
|
2960
2960
|
] }) })
|
|
@@ -2965,8 +2965,8 @@ _chunk7QVYU63Ejs.__name.call(void 0, UsageHistoryTable, "UsageHistoryTable");
|
|
|
2965
2965
|
// src/features/billing/components/modals/BillingDetailModal.tsx
|
|
2966
2966
|
|
|
2967
2967
|
function BillingDetailModal({ open, onOpenChange, title, children, className }) {
|
|
2968
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2969
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2968
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Dialog, { open, onOpenChange, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.DialogContent, { className: _nullishCoalesce(className, () => ( "max-w-4xl max-h-[90vh] overflow-y-auto")), children: [
|
|
2969
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.DialogHeader, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.DialogTitle, { children: title }) }),
|
|
2970
2970
|
children
|
|
2971
2971
|
] }) });
|
|
2972
2972
|
}
|
|
@@ -2994,7 +2994,7 @@ function BillingAlertBanner({ subscription, onUpdatePayment, onAddPayment }) {
|
|
|
2994
2994
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h3", { className: "text-destructive text-sm font-medium", children: t("billing.ui.alert.payment_failed_title") }),
|
|
2995
2995
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-destructive mt-1 text-sm", children: t("billing.ui.alert.payment_failed_description") })
|
|
2996
2996
|
] }),
|
|
2997
|
-
onUpdatePayment && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2997
|
+
onUpdatePayment && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Button, { variant: "outline", size: "sm", onClick: onUpdatePayment, className: "text-destructive border-red-300", children: t("billing.ui.alert.update_payment_method") })
|
|
2998
2998
|
] });
|
|
2999
2999
|
}
|
|
3000
3000
|
if (subscription.status === "trialing" /* TRIALING */ && subscription.trialEnd) {
|
|
@@ -3008,7 +3008,7 @@ function BillingAlertBanner({ subscription, onUpdatePayment, onAddPayment }) {
|
|
|
3008
3008
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h3", { className: "text-warning text-sm font-medium", children: t("billing.ui.alert.trial_ending_title") }),
|
|
3009
3009
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-warning mt-1 text-sm", children: t("billing.ui.alert.trial_ending_description", { count: daysRemaining }) })
|
|
3010
3010
|
] }),
|
|
3011
|
-
onAddPayment && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
3011
|
+
onAddPayment && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Button, { variant: "outline", size: "sm", onClick: onAddPayment, className: "text-warning border-yellow-300", children: t("billing.ui.payment_methods.add") })
|
|
3012
3012
|
] });
|
|
3013
3013
|
}
|
|
3014
3014
|
}
|
|
@@ -3061,7 +3061,7 @@ function BillingDashboardContainer({ renderCancelDialog } = {}) {
|
|
|
3061
3061
|
setNoCustomerExists(false);
|
|
3062
3062
|
let customer = null;
|
|
3063
3063
|
try {
|
|
3064
|
-
customer = await
|
|
3064
|
+
customer = await _chunkFF4EIQ6Hjs.StripeCustomerService.getCustomer();
|
|
3065
3065
|
setData((prev) => ({ ...prev, customer }));
|
|
3066
3066
|
setErrors((prev) => ({ ...prev, customer: null }));
|
|
3067
3067
|
setNoCustomerExists(false);
|
|
@@ -3087,7 +3087,7 @@ function BillingDashboardContainer({ renderCancelDialog } = {}) {
|
|
|
3087
3087
|
}
|
|
3088
3088
|
const fetchSubscriptions = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, async () => {
|
|
3089
3089
|
try {
|
|
3090
|
-
const subscriptions2 = await
|
|
3090
|
+
const subscriptions2 = await _chunkFF4EIQ6Hjs.StripeSubscriptionService.listSubscriptions();
|
|
3091
3091
|
setData((prev) => ({ ...prev, subscriptions: subscriptions2 }));
|
|
3092
3092
|
setErrors((prev) => ({ ...prev, subscriptions: null }));
|
|
3093
3093
|
return subscriptions2;
|
|
@@ -3101,7 +3101,7 @@ function BillingDashboardContainer({ renderCancelDialog } = {}) {
|
|
|
3101
3101
|
}, "fetchSubscriptions");
|
|
3102
3102
|
const fetchPaymentMethods = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, async () => {
|
|
3103
3103
|
try {
|
|
3104
|
-
const paymentMethods = await
|
|
3104
|
+
const paymentMethods = await _chunkFF4EIQ6Hjs.StripeCustomerService.listPaymentMethods();
|
|
3105
3105
|
setData((prev) => ({ ...prev, paymentMethods }));
|
|
3106
3106
|
setErrors((prev) => ({ ...prev, paymentMethods: null }));
|
|
3107
3107
|
} catch (error) {
|
|
@@ -3113,7 +3113,7 @@ function BillingDashboardContainer({ renderCancelDialog } = {}) {
|
|
|
3113
3113
|
}, "fetchPaymentMethods");
|
|
3114
3114
|
const fetchInvoices = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, async () => {
|
|
3115
3115
|
try {
|
|
3116
|
-
const invoices = await
|
|
3116
|
+
const invoices = await _chunkFF4EIQ6Hjs.StripeInvoiceService.listInvoices();
|
|
3117
3117
|
setData((prev) => ({ ...prev, invoices }));
|
|
3118
3118
|
setErrors((prev) => ({ ...prev, invoices: null }));
|
|
3119
3119
|
} catch (error) {
|
|
@@ -3136,7 +3136,7 @@ function BillingDashboardContainer({ renderCancelDialog } = {}) {
|
|
|
3136
3136
|
const handleCreateCustomer = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, async () => {
|
|
3137
3137
|
setCreatingCustomer(true);
|
|
3138
3138
|
try {
|
|
3139
|
-
await
|
|
3139
|
+
await _chunkFF4EIQ6Hjs.StripeCustomerService.createCustomer();
|
|
3140
3140
|
setNoCustomerExists(false);
|
|
3141
3141
|
await fetchAllData();
|
|
3142
3142
|
} catch (error) {
|
|
@@ -3148,7 +3148,7 @@ function BillingDashboardContainer({ renderCancelDialog } = {}) {
|
|
|
3148
3148
|
}, "handleCreateCustomer");
|
|
3149
3149
|
const fetchUsageData = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, async () => {
|
|
3150
3150
|
try {
|
|
3151
|
-
const meters = await
|
|
3151
|
+
const meters = await _chunkFF4EIQ6Hjs.StripeUsageService.listMeters();
|
|
3152
3152
|
setData((prev) => ({ ...prev, meters }));
|
|
3153
3153
|
const summariesMap = {};
|
|
3154
3154
|
const now = /* @__PURE__ */ new Date();
|
|
@@ -3156,7 +3156,7 @@ function BillingDashboardContainer({ renderCancelDialog } = {}) {
|
|
|
3156
3156
|
const endOfMonth = new Date(now.getFullYear(), now.getMonth() + 1, 0, 23, 59, 59, 999);
|
|
3157
3157
|
for (const meter of meters) {
|
|
3158
3158
|
try {
|
|
3159
|
-
const meterSummaries = await
|
|
3159
|
+
const meterSummaries = await _chunkFF4EIQ6Hjs.StripeUsageService.getMeterSummaries({
|
|
3160
3160
|
meterId: meter.id,
|
|
3161
3161
|
startTime: startOfMonth,
|
|
3162
3162
|
endTime: endOfMonth
|
|
@@ -3218,7 +3218,7 @@ function BillingDashboardContainer({ renderCancelDialog } = {}) {
|
|
|
3218
3218
|
_react.useEffect.call(void 0, () => {
|
|
3219
3219
|
if (!pendingChangePlan || loading.subscriptions) return;
|
|
3220
3220
|
setPendingChangePlan(false);
|
|
3221
|
-
handleOpenWizard(
|
|
3221
|
+
handleOpenWizard(_chunkFF4EIQ6Hjs.resolveChangePlanTarget.call(void 0, data.subscriptions));
|
|
3222
3222
|
}, [pendingChangePlan, loading.subscriptions, data.subscriptions, handleOpenWizard]);
|
|
3223
3223
|
const criticalSubscriptions = data.subscriptions.filter(
|
|
3224
3224
|
(sub) => sub.status === "past_due" /* PAST_DUE */ || sub.status === "trialing" /* TRIALING */ && sub.trialEnd && new Date(sub.trialEnd).getTime() - (/* @__PURE__ */ new Date()).getTime() <= 7 * 24 * 60 * 60 * 1e3
|
|
@@ -3249,18 +3249,18 @@ function BillingDashboardContainer({ renderCancelDialog } = {}) {
|
|
|
3249
3249
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Wallet, { className: "h-8 w-8" }),
|
|
3250
3250
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h1", { className: "text-primary text-3xl font-semibold", children: t("billing.title") })
|
|
3251
3251
|
] }),
|
|
3252
|
-
isInitialLoading && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
3253
|
-
noCustomerExists && !isInitialLoading && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
3254
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
3252
|
+
isInitialLoading && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Card, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.CardContent, { className: "flex items-center justify-center py-12", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Loader2, { className: "h-8 w-8 animate-spin text-muted-foreground" }) }) }),
|
|
3253
|
+
noCustomerExists && !isInitialLoading && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.Card, { children: [
|
|
3254
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.CardHeader, { className: "text-center", children: [
|
|
3255
3255
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-primary/10", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.CreditCard, { className: "h-8 w-8 text-primary" }) }),
|
|
3256
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
3257
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
3256
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.CardTitle, { children: t("billing.ui.dashboard.setup_title") }),
|
|
3257
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.CardDescription, { children: t("billing.ui.dashboard.setup_description") })
|
|
3258
3258
|
] }),
|
|
3259
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
3259
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.CardContent, { className: "flex justify-center pb-8", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Button, { onClick: handleCreateCustomer, disabled: creatingCustomer, size: "lg", children: creatingCustomer ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
|
|
3260
3260
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Loader2, { className: "me-2 h-4 w-4 animate-spin" }),
|
|
3261
3261
|
t("billing.ui.dashboard.setting_up")
|
|
3262
3262
|
] }) : t("billing.ui.dashboard.setup_button") }) }),
|
|
3263
|
-
errors.customer && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
3263
|
+
errors.customer && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.CardContent, { className: "pt-0", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-center text-destructive text-xs/relaxed", children: t(errors.customer) }) })
|
|
3264
3264
|
] }),
|
|
3265
3265
|
!noCustomerExists && !isInitialLoading && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
|
|
3266
3266
|
criticalSubscriptions.map((subscription) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
@@ -3405,7 +3405,7 @@ function getStripePromise(publishableKey) {
|
|
|
3405
3405
|
}
|
|
3406
3406
|
_chunk7QVYU63Ejs.__name.call(void 0, getStripePromise, "getStripePromise");
|
|
3407
3407
|
function StripeProvider({ children }) {
|
|
3408
|
-
const publishableKey =
|
|
3408
|
+
const publishableKey = _chunkL6PYFQTOjs.getStripePublishableKey.call(void 0, );
|
|
3409
3409
|
const stripePromise = _react.useMemo.call(void 0, () => getStripePromise(publishableKey), [publishableKey]);
|
|
3410
3410
|
const options = _react.useMemo.call(void 0, () => ({}), []);
|
|
3411
3411
|
if (!publishableKey) {
|
|
@@ -3415,7 +3415,7 @@ function StripeProvider({ children }) {
|
|
|
3415
3415
|
}
|
|
3416
3416
|
_chunk7QVYU63Ejs.__name.call(void 0, StripeProvider, "StripeProvider");
|
|
3417
3417
|
function isStripeConfigured() {
|
|
3418
|
-
return !!
|
|
3418
|
+
return !!_chunkL6PYFQTOjs.getStripePublishableKey.call(void 0, );
|
|
3419
3419
|
}
|
|
3420
3420
|
_chunk7QVYU63Ejs.__name.call(void 0, isStripeConfigured, "isStripeConfigured");
|
|
3421
3421
|
|
|
@@ -3430,18 +3430,18 @@ _chunk7QVYU63Ejs.__name.call(void 0, isStripeConfigured, "isStripeConfigured");
|
|
|
3430
3430
|
|
|
3431
3431
|
function PriceArchiver({ price }) {
|
|
3432
3432
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
3433
|
-
const fmt =
|
|
3433
|
+
const fmt = _chunk6NZKWIORjs.useBillingFormatOptions.call(void 0, );
|
|
3434
3434
|
const { archivePrice, restorePrice } = usePriceContext();
|
|
3435
3435
|
const [open, setOpen] = _react.useState.call(void 0, false);
|
|
3436
3436
|
const isArchived = !price.active;
|
|
3437
3437
|
const scope = isArchived ? "restore" : "archive";
|
|
3438
3438
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
|
|
3439
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
3439
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.Button, { variant: "outline", size: "sm", onClick: () => setOpen(true), children: [
|
|
3440
3440
|
isArchived ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.RotateCcwIcon, {}) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.ArchiveIcon, {}),
|
|
3441
3441
|
t(`billing.admin.prices.${scope}.confirm`)
|
|
3442
3442
|
] }),
|
|
3443
3443
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
3444
|
-
|
|
3444
|
+
_chunk6NZKWIORjs.ConfirmDialog,
|
|
3445
3445
|
{
|
|
3446
3446
|
open,
|
|
3447
3447
|
onOpenChange: setOpen,
|
|
@@ -3455,7 +3455,7 @@ function PriceArchiver({ price }) {
|
|
|
3455
3455
|
if (isArchived) await restorePrice(price.id);
|
|
3456
3456
|
else await archivePrice(price.id);
|
|
3457
3457
|
} catch (error) {
|
|
3458
|
-
|
|
3458
|
+
_chunk6NZKWIORjs.errorToast.call(void 0, { title: t(`billing.admin.prices.${scope}.title`), error });
|
|
3459
3459
|
throw error;
|
|
3460
3460
|
}
|
|
3461
3461
|
}
|
|
@@ -3487,15 +3487,15 @@ function PriceEditorInternal({
|
|
|
3487
3487
|
onDialogOpenChange
|
|
3488
3488
|
}) {
|
|
3489
3489
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
3490
|
-
const fmt =
|
|
3491
|
-
const router =
|
|
3490
|
+
const fmt = _chunk6NZKWIORjs.useBillingFormatOptions.call(void 0, );
|
|
3491
|
+
const router = _chunkFF4EIQ6Hjs.useI18nRouter.call(void 0, );
|
|
3492
3492
|
const { createPrice, updatePrice, productId: contextProductId } = usePriceContext();
|
|
3493
3493
|
const [allFeatures, setAllFeatures] = _react.useState.call(void 0, []);
|
|
3494
3494
|
const isEdit = !!price;
|
|
3495
3495
|
const targetProductId = _nullishCoalesce(_nullishCoalesce(productId, () => ( _optionalChain([price, 'optionalAccess', _120 => _120.product, 'optionalAccess', _121 => _121.id]))), () => ( contextProductId));
|
|
3496
3496
|
_react.useEffect.call(void 0, () => {
|
|
3497
3497
|
const fetchFeatures = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, async () => {
|
|
3498
|
-
setAllFeatures(await
|
|
3498
|
+
setAllFeatures(await _chunkFF4EIQ6Hjs.FeatureService.findMany({}));
|
|
3499
3499
|
}, "fetchFeatures");
|
|
3500
3500
|
void fetchFeatures();
|
|
3501
3501
|
}, []);
|
|
@@ -3608,7 +3608,7 @@ function PriceEditorInternal({
|
|
|
3608
3608
|
warnedUnknownFor.current = fingerprint;
|
|
3609
3609
|
const { unknown } = resolvePlatformFeatures(seed.platformFeatures);
|
|
3610
3610
|
if (unknown.length > 0)
|
|
3611
|
-
|
|
3611
|
+
_chunkFF4EIQ6Hjs.showToast.call(void 0, t("billing.admin.prices.import.warnings.unknownFeatures", { features: unknown.join(", ") }));
|
|
3612
3612
|
}, [seed, isEdit, allFeatures, resolvePlatformFeatures, t]);
|
|
3613
3613
|
const watchInterval = form.watch("interval");
|
|
3614
3614
|
const isRecurring = watchInterval !== "one_time";
|
|
@@ -3629,13 +3629,13 @@ function PriceEditorInternal({
|
|
|
3629
3629
|
{ id: "metered", text: t("billing.admin.prices.usage.metered") }
|
|
3630
3630
|
];
|
|
3631
3631
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
3632
|
-
|
|
3632
|
+
_chunk6NZKWIORjs.EditorSheet,
|
|
3633
3633
|
{
|
|
3634
3634
|
form,
|
|
3635
3635
|
entityType: t("billing.admin.prices.entity"),
|
|
3636
3636
|
entityName: price ? priceLabel(price, fmt) : void 0,
|
|
3637
3637
|
isEdit,
|
|
3638
|
-
module:
|
|
3638
|
+
module: _chunkFF4EIQ6Hjs.Modules.StripePrice,
|
|
3639
3639
|
size: "lg",
|
|
3640
3640
|
propagateChanges,
|
|
3641
3641
|
onSuccess,
|
|
@@ -3684,13 +3684,13 @@ function PriceEditorInternal({
|
|
|
3684
3684
|
dialogOpen,
|
|
3685
3685
|
onDialogOpenChange,
|
|
3686
3686
|
children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-full flex-col gap-y-4", children: [
|
|
3687
|
-
isEdit && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
3688
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
3689
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
3687
|
+
isEdit && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.Alert, { children: [
|
|
3688
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.AlertTitle, { children: t("billing.admin.prices.immutability.title") }),
|
|
3689
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.AlertDescription, { children: t("billing.admin.prices.immutability.description") })
|
|
3690
3690
|
] }),
|
|
3691
3691
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "grid grid-cols-2 gap-x-4", children: [
|
|
3692
3692
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
3693
|
-
|
|
3693
|
+
_chunk6NZKWIORjs.FormInput,
|
|
3694
3694
|
{
|
|
3695
3695
|
form,
|
|
3696
3696
|
id: "unitAmount",
|
|
@@ -3702,7 +3702,7 @@ function PriceEditorInternal({
|
|
|
3702
3702
|
}
|
|
3703
3703
|
),
|
|
3704
3704
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
3705
|
-
|
|
3705
|
+
_chunk6NZKWIORjs.FormSelect,
|
|
3706
3706
|
{
|
|
3707
3707
|
form,
|
|
3708
3708
|
id: "currency",
|
|
@@ -3713,7 +3713,7 @@ function PriceEditorInternal({
|
|
|
3713
3713
|
)
|
|
3714
3714
|
] }),
|
|
3715
3715
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
3716
|
-
|
|
3716
|
+
_chunk6NZKWIORjs.FormSelect,
|
|
3717
3717
|
{
|
|
3718
3718
|
form,
|
|
3719
3719
|
id: "interval",
|
|
@@ -3724,7 +3724,7 @@ function PriceEditorInternal({
|
|
|
3724
3724
|
),
|
|
3725
3725
|
isRecurring && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "grid grid-cols-2 gap-x-4", children: [
|
|
3726
3726
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
3727
|
-
|
|
3727
|
+
_chunk6NZKWIORjs.FormInput,
|
|
3728
3728
|
{
|
|
3729
3729
|
form,
|
|
3730
3730
|
id: "intervalCount",
|
|
@@ -3735,7 +3735,7 @@ function PriceEditorInternal({
|
|
|
3735
3735
|
}
|
|
3736
3736
|
),
|
|
3737
3737
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
3738
|
-
|
|
3738
|
+
_chunk6NZKWIORjs.FormSelect,
|
|
3739
3739
|
{
|
|
3740
3740
|
form,
|
|
3741
3741
|
id: "usageType",
|
|
@@ -3746,7 +3746,7 @@ function PriceEditorInternal({
|
|
|
3746
3746
|
)
|
|
3747
3747
|
] }),
|
|
3748
3748
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
3749
|
-
|
|
3749
|
+
_chunk6NZKWIORjs.FormInput,
|
|
3750
3750
|
{
|
|
3751
3751
|
form,
|
|
3752
3752
|
id: "nickname",
|
|
@@ -3755,7 +3755,7 @@ function PriceEditorInternal({
|
|
|
3755
3755
|
}
|
|
3756
3756
|
),
|
|
3757
3757
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
3758
|
-
|
|
3758
|
+
_chunk6NZKWIORjs.FormTextarea,
|
|
3759
3759
|
{
|
|
3760
3760
|
form,
|
|
3761
3761
|
id: "description",
|
|
@@ -3765,7 +3765,7 @@ function PriceEditorInternal({
|
|
|
3765
3765
|
}
|
|
3766
3766
|
),
|
|
3767
3767
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
3768
|
-
|
|
3768
|
+
_chunk6NZKWIORjs.FormInput,
|
|
3769
3769
|
{
|
|
3770
3770
|
form,
|
|
3771
3771
|
id: "token",
|
|
@@ -3775,10 +3775,10 @@ function PriceEditorInternal({
|
|
|
3775
3775
|
}
|
|
3776
3776
|
),
|
|
3777
3777
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-y-2", children: [
|
|
3778
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
3778
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.FieldLabel, { children: t("billing.admin.prices.fields.features") }),
|
|
3779
3779
|
form.watch("features").map((_, index) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex gap-2", children: [
|
|
3780
3780
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
3781
|
-
|
|
3781
|
+
_chunk6NZKWIORjs.Input,
|
|
3782
3782
|
{
|
|
3783
3783
|
...form.register(`features.${index}`),
|
|
3784
3784
|
placeholder: t("billing.admin.prices.placeholders.feature", { index: index + 1 }),
|
|
@@ -3786,7 +3786,7 @@ function PriceEditorInternal({
|
|
|
3786
3786
|
}
|
|
3787
3787
|
),
|
|
3788
3788
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
3789
|
-
|
|
3789
|
+
_chunk6NZKWIORjs.Button,
|
|
3790
3790
|
{
|
|
3791
3791
|
type: "button",
|
|
3792
3792
|
variant: "outline",
|
|
@@ -3801,7 +3801,7 @@ function PriceEditorInternal({
|
|
|
3801
3801
|
)
|
|
3802
3802
|
] }, index)),
|
|
3803
3803
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
3804
|
-
|
|
3804
|
+
_chunk6NZKWIORjs.Button,
|
|
3805
3805
|
{
|
|
3806
3806
|
type: "button",
|
|
3807
3807
|
variant: "outline",
|
|
@@ -3816,12 +3816,12 @@ function PriceEditorInternal({
|
|
|
3816
3816
|
)
|
|
3817
3817
|
] }),
|
|
3818
3818
|
isRecurring && allFeatures.length > 0 && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-y-2", children: [
|
|
3819
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
3819
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.FieldLabel, { children: t("billing.admin.prices.fields.platformFeatures") }),
|
|
3820
3820
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex max-h-48 flex-col gap-y-2 overflow-y-auto rounded-md border p-4", children: allFeatures.map((feature) => {
|
|
3821
3821
|
const isChecked = form.watch("featureIds").includes(feature.id);
|
|
3822
3822
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-x-2", children: [
|
|
3823
3823
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
3824
|
-
|
|
3824
|
+
_chunk6NZKWIORjs.Checkbox,
|
|
3825
3825
|
{
|
|
3826
3826
|
id: `feature-${feature.id}`,
|
|
3827
3827
|
checked: isChecked,
|
|
@@ -3837,13 +3837,13 @@ function PriceEditorInternal({
|
|
|
3837
3837
|
}
|
|
3838
3838
|
}
|
|
3839
3839
|
),
|
|
3840
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
3840
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.FieldLabel, { htmlFor: `feature-${feature.id}`, children: feature.name }),
|
|
3841
3841
|
feature.isCore && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-muted-foreground text-xs", children: t("billing.admin.prices.help.core") })
|
|
3842
3842
|
] }, feature.id);
|
|
3843
3843
|
}) })
|
|
3844
3844
|
] }),
|
|
3845
3845
|
isRecurring && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
3846
|
-
|
|
3846
|
+
_chunk6NZKWIORjs.FormCheckbox,
|
|
3847
3847
|
{
|
|
3848
3848
|
form,
|
|
3849
3849
|
id: "isTrial",
|
|
@@ -3886,7 +3886,7 @@ var defaultContextValue = {
|
|
|
3886
3886
|
productId: void 0
|
|
3887
3887
|
};
|
|
3888
3888
|
function priceLabel(price, fmt = {}) {
|
|
3889
|
-
return _nullishCoalesce(price.nickname, () => ( `${
|
|
3889
|
+
return _nullishCoalesce(price.nickname, () => ( `${_chunkFF4EIQ6Hjs.formatCurrency.call(void 0, price.unitAmount, price.currency, fmt)} ${_chunkFF4EIQ6Hjs.formatInterval.call(void 0, price, fmt)}`.trim()));
|
|
3890
3890
|
}
|
|
3891
3891
|
_chunk7QVYU63Ejs.__name.call(void 0, priceLabel, "priceLabel");
|
|
3892
3892
|
var PriceProvider = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, ({
|
|
@@ -3896,22 +3896,22 @@ var PriceProvider = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, ({
|
|
|
3896
3896
|
productId: productIdProp
|
|
3897
3897
|
}) => {
|
|
3898
3898
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
3899
|
-
const fmt =
|
|
3900
|
-
const generateUrl =
|
|
3901
|
-
const { hasRole } =
|
|
3899
|
+
const fmt = _chunk6NZKWIORjs.useBillingFormatOptions.call(void 0, );
|
|
3900
|
+
const generateUrl = _chunk6NZKWIORjs.usePageUrlGenerator.call(void 0, );
|
|
3901
|
+
const { hasRole } = _chunk6NZKWIORjs.useCurrentUserContext.call(void 0, );
|
|
3902
3902
|
const [price, setPrice] = _react.useState.call(void 0,
|
|
3903
|
-
dehydratedPrice ?
|
|
3903
|
+
dehydratedPrice ? _chunkFF4EIQ6Hjs.rehydrate.call(void 0, _chunkFF4EIQ6Hjs.Modules.StripePrice, dehydratedPrice) : void 0
|
|
3904
3904
|
);
|
|
3905
3905
|
const [priceVersion, setPriceVersion] = _react.useState.call(void 0, 0);
|
|
3906
3906
|
const refreshPrices = _react.useCallback.call(void 0, () => setPriceVersion((value2) => value2 + 1), []);
|
|
3907
3907
|
const productId = _nullishCoalesce(productIdProp, () => ( _optionalChain([price, 'optionalAccess', _144 => _144.product, 'optionalAccess', _145 => _145.id])));
|
|
3908
3908
|
const reloadPrice = _react.useCallback.call(void 0, async () => {
|
|
3909
3909
|
if (!_optionalChain([price, 'optionalAccess', _146 => _146.id])) return;
|
|
3910
|
-
setPrice(await
|
|
3910
|
+
setPrice(await _chunkFF4EIQ6Hjs.StripePriceService.getPrice({ id: price.id }));
|
|
3911
3911
|
}, [_optionalChain([price, 'optionalAccess', _147 => _147.id])]);
|
|
3912
3912
|
const createPrice = _react.useCallback.call(void 0,
|
|
3913
3913
|
async (input) => {
|
|
3914
|
-
const saved = await
|
|
3914
|
+
const saved = await _chunkFF4EIQ6Hjs.StripePriceService.createPrice(input);
|
|
3915
3915
|
refreshPrices();
|
|
3916
3916
|
return saved;
|
|
3917
3917
|
},
|
|
@@ -3919,7 +3919,7 @@ var PriceProvider = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, ({
|
|
|
3919
3919
|
);
|
|
3920
3920
|
const updatePrice = _react.useCallback.call(void 0,
|
|
3921
3921
|
async (input) => {
|
|
3922
|
-
const saved = await
|
|
3922
|
+
const saved = await _chunkFF4EIQ6Hjs.StripePriceService.updatePrice(input);
|
|
3923
3923
|
setPrice(saved);
|
|
3924
3924
|
refreshPrices();
|
|
3925
3925
|
return saved;
|
|
@@ -3930,7 +3930,7 @@ var PriceProvider = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, ({
|
|
|
3930
3930
|
async (id) => {
|
|
3931
3931
|
const target = _nullishCoalesce(id, () => ( _optionalChain([price, 'optionalAccess', _148 => _148.id])));
|
|
3932
3932
|
if (!target) return;
|
|
3933
|
-
await
|
|
3933
|
+
await _chunkFF4EIQ6Hjs.StripePriceService.archivePrice({ id: target });
|
|
3934
3934
|
await reloadPrice();
|
|
3935
3935
|
refreshPrices();
|
|
3936
3936
|
},
|
|
@@ -3940,7 +3940,7 @@ var PriceProvider = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, ({
|
|
|
3940
3940
|
async (id) => {
|
|
3941
3941
|
const target = _nullishCoalesce(id, () => ( _optionalChain([price, 'optionalAccess', _150 => _150.id])));
|
|
3942
3942
|
if (!target) return;
|
|
3943
|
-
await
|
|
3943
|
+
await _chunkFF4EIQ6Hjs.StripePriceService.reactivatePrice({ id: target });
|
|
3944
3944
|
await reloadPrice();
|
|
3945
3945
|
refreshPrices();
|
|
3946
3946
|
},
|
|
@@ -3964,12 +3964,12 @@ var PriceProvider = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, ({
|
|
|
3964
3964
|
if (!publishChrome) return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, PriceContext.Provider, { value, children });
|
|
3965
3965
|
const breadcrumb = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, () => {
|
|
3966
3966
|
const items = [
|
|
3967
|
-
{ name: t("billing.admin.products.title"), href: generateUrl({ page:
|
|
3967
|
+
{ name: t("billing.admin.products.title"), href: generateUrl({ page: _chunkFF4EIQ6Hjs.Modules.StripeProduct }) }
|
|
3968
3968
|
];
|
|
3969
3969
|
if (_optionalChain([price, 'optionalAccess', _152 => _152.product]))
|
|
3970
3970
|
items.push({
|
|
3971
3971
|
name: price.product.name,
|
|
3972
|
-
href: generateUrl({ page:
|
|
3972
|
+
href: generateUrl({ page: _chunkFF4EIQ6Hjs.Modules.StripeProduct, id: price.product.id })
|
|
3973
3973
|
});
|
|
3974
3974
|
if (price) items.push({ name: priceLabel(price, fmt) });
|
|
3975
3975
|
return items;
|
|
@@ -3986,7 +3986,7 @@ var PriceProvider = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, ({
|
|
|
3986
3986
|
}
|
|
3987
3987
|
return response;
|
|
3988
3988
|
}, "title");
|
|
3989
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
3989
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.SharedProvider, { value: { breadcrumbs: breadcrumb(), title: title() }, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, PriceContext.Provider, { value, children }) });
|
|
3990
3990
|
}, "PriceProvider");
|
|
3991
3991
|
var usePriceContext = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, () => _nullishCoalesce(_react.useContext.call(void 0, PriceContext), () => ( defaultContextValue)), "usePriceContext");
|
|
3992
3992
|
|
|
@@ -4006,12 +4006,12 @@ function ProductArchiver({ product }) {
|
|
|
4006
4006
|
const isArchived = !product.active;
|
|
4007
4007
|
const scope = isArchived ? "restore" : "archive";
|
|
4008
4008
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
|
|
4009
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
4009
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.Button, { variant: "outline", size: "sm", onClick: () => setOpen(true), children: [
|
|
4010
4010
|
isArchived ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.RotateCcwIcon, {}) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.ArchiveIcon, {}),
|
|
4011
4011
|
t(`billing.admin.products.${scope}.confirm`)
|
|
4012
4012
|
] }),
|
|
4013
4013
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4014
|
-
|
|
4014
|
+
_chunk6NZKWIORjs.ConfirmDialog,
|
|
4015
4015
|
{
|
|
4016
4016
|
open,
|
|
4017
4017
|
onOpenChange: setOpen,
|
|
@@ -4025,7 +4025,7 @@ function ProductArchiver({ product }) {
|
|
|
4025
4025
|
if (isArchived) await restoreProduct(product.id);
|
|
4026
4026
|
else await archiveProduct(product.id);
|
|
4027
4027
|
} catch (error) {
|
|
4028
|
-
|
|
4028
|
+
_chunk6NZKWIORjs.errorToast.call(void 0, { title: t(`billing.admin.products.${scope}.title`), error });
|
|
4029
4029
|
throw error;
|
|
4030
4030
|
}
|
|
4031
4031
|
}
|
|
@@ -4054,7 +4054,7 @@ function ProductEditorInternal({
|
|
|
4054
4054
|
onDialogOpenChange
|
|
4055
4055
|
}) {
|
|
4056
4056
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
4057
|
-
const router =
|
|
4057
|
+
const router = _chunkFF4EIQ6Hjs.useI18nRouter.call(void 0, );
|
|
4058
4058
|
const { createProduct, updateProduct } = useProductContext();
|
|
4059
4059
|
const isEdit = !!product;
|
|
4060
4060
|
const formSchema2 = _react.useMemo.call(void 0,
|
|
@@ -4078,13 +4078,13 @@ function ProductEditorInternal({
|
|
|
4078
4078
|
defaultValues: getDefaultValues()
|
|
4079
4079
|
});
|
|
4080
4080
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4081
|
-
|
|
4081
|
+
_chunk6NZKWIORjs.EditorSheet,
|
|
4082
4082
|
{
|
|
4083
4083
|
form,
|
|
4084
4084
|
entityType: t("billing.admin.products.entity"),
|
|
4085
4085
|
entityName: _optionalChain([product, 'optionalAccess', _156 => _156.name]),
|
|
4086
4086
|
isEdit,
|
|
4087
|
-
module:
|
|
4087
|
+
module: _chunkFF4EIQ6Hjs.Modules.StripeProduct,
|
|
4088
4088
|
size: "md",
|
|
4089
4089
|
propagateChanges,
|
|
4090
4090
|
onSuccess,
|
|
@@ -4101,7 +4101,7 @@ function ProductEditorInternal({
|
|
|
4101
4101
|
onDialogOpenChange,
|
|
4102
4102
|
children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-full flex-col gap-y-4", children: [
|
|
4103
4103
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4104
|
-
|
|
4104
|
+
_chunk6NZKWIORjs.FormInput,
|
|
4105
4105
|
{
|
|
4106
4106
|
form,
|
|
4107
4107
|
id: "name",
|
|
@@ -4111,7 +4111,7 @@ function ProductEditorInternal({
|
|
|
4111
4111
|
}
|
|
4112
4112
|
),
|
|
4113
4113
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4114
|
-
|
|
4114
|
+
_chunk6NZKWIORjs.FormTextarea,
|
|
4115
4115
|
{
|
|
4116
4116
|
form,
|
|
4117
4117
|
id: "description",
|
|
@@ -4155,20 +4155,20 @@ var defaultContextValue2 = {
|
|
|
4155
4155
|
};
|
|
4156
4156
|
var ProductProvider = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, ({ children, dehydratedProduct, publishChrome = true }) => {
|
|
4157
4157
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
4158
|
-
const generateUrl =
|
|
4159
|
-
const { hasRole } =
|
|
4158
|
+
const generateUrl = _chunk6NZKWIORjs.usePageUrlGenerator.call(void 0, );
|
|
4159
|
+
const { hasRole } = _chunk6NZKWIORjs.useCurrentUserContext.call(void 0, );
|
|
4160
4160
|
const [product, setProduct] = _react.useState.call(void 0,
|
|
4161
|
-
dehydratedProduct ?
|
|
4161
|
+
dehydratedProduct ? _chunkFF4EIQ6Hjs.rehydrate.call(void 0, _chunkFF4EIQ6Hjs.Modules.StripeProduct, dehydratedProduct) : void 0
|
|
4162
4162
|
);
|
|
4163
4163
|
const [catalogueVersion, setCatalogueVersion] = _react.useState.call(void 0, 0);
|
|
4164
4164
|
const refreshCatalogue = _react.useCallback.call(void 0, () => setCatalogueVersion((value2) => value2 + 1), []);
|
|
4165
4165
|
const reloadProduct = _react.useCallback.call(void 0, async () => {
|
|
4166
4166
|
if (!_optionalChain([product, 'optionalAccess', _157 => _157.id])) return;
|
|
4167
|
-
setProduct(await
|
|
4167
|
+
setProduct(await _chunkFF4EIQ6Hjs.StripeProductService.getProduct({ id: product.id }));
|
|
4168
4168
|
}, [_optionalChain([product, 'optionalAccess', _158 => _158.id])]);
|
|
4169
4169
|
const createProduct = _react.useCallback.call(void 0,
|
|
4170
4170
|
async (input) => {
|
|
4171
|
-
const saved = await
|
|
4171
|
+
const saved = await _chunkFF4EIQ6Hjs.StripeProductService.createProduct(input);
|
|
4172
4172
|
refreshCatalogue();
|
|
4173
4173
|
return saved;
|
|
4174
4174
|
},
|
|
@@ -4176,7 +4176,7 @@ var ProductProvider = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, ({ ch
|
|
|
4176
4176
|
);
|
|
4177
4177
|
const updateProduct = _react.useCallback.call(void 0,
|
|
4178
4178
|
async (input) => {
|
|
4179
|
-
const saved = await
|
|
4179
|
+
const saved = await _chunkFF4EIQ6Hjs.StripeProductService.updateProduct(input);
|
|
4180
4180
|
setProduct(saved);
|
|
4181
4181
|
refreshCatalogue();
|
|
4182
4182
|
return saved;
|
|
@@ -4187,7 +4187,7 @@ var ProductProvider = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, ({ ch
|
|
|
4187
4187
|
async (id) => {
|
|
4188
4188
|
const target = _nullishCoalesce(id, () => ( _optionalChain([product, 'optionalAccess', _159 => _159.id])));
|
|
4189
4189
|
if (!target) return;
|
|
4190
|
-
await
|
|
4190
|
+
await _chunkFF4EIQ6Hjs.StripeProductService.archiveProduct({ id: target });
|
|
4191
4191
|
await reloadProduct();
|
|
4192
4192
|
refreshCatalogue();
|
|
4193
4193
|
},
|
|
@@ -4197,7 +4197,7 @@ var ProductProvider = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, ({ ch
|
|
|
4197
4197
|
async (id) => {
|
|
4198
4198
|
const target = _nullishCoalesce(id, () => ( _optionalChain([product, 'optionalAccess', _161 => _161.id])));
|
|
4199
4199
|
if (!target) return;
|
|
4200
|
-
await
|
|
4200
|
+
await _chunkFF4EIQ6Hjs.StripeProductService.reactivateProduct({ id: target });
|
|
4201
4201
|
await reloadProduct();
|
|
4202
4202
|
refreshCatalogue();
|
|
4203
4203
|
},
|
|
@@ -4232,7 +4232,7 @@ var ProductProvider = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, ({ ch
|
|
|
4232
4232
|
{
|
|
4233
4233
|
name: t("billing.admin.products.title"),
|
|
4234
4234
|
// Linked only when it is NOT the current page.
|
|
4235
|
-
...product ? { href: generateUrl({ page:
|
|
4235
|
+
...product ? { href: generateUrl({ page: _chunkFF4EIQ6Hjs.Modules.StripeProduct }) } : {}
|
|
4236
4236
|
}
|
|
4237
4237
|
];
|
|
4238
4238
|
if (product) items.push({ name: product.name });
|
|
@@ -4250,7 +4250,7 @@ var ProductProvider = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, ({ ch
|
|
|
4250
4250
|
}
|
|
4251
4251
|
return response;
|
|
4252
4252
|
}, "title");
|
|
4253
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4253
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.SharedProvider, { value: { breadcrumbs: breadcrumb(), title: title() }, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ProductContext.Provider, { value, children }) });
|
|
4254
4254
|
}, "ProductProvider");
|
|
4255
4255
|
var useProductContext = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, () => _nullishCoalesce(_react.useContext.call(void 0, ProductContext), () => ( defaultContextValue2)), "useProductContext");
|
|
4256
4256
|
|
|
@@ -4259,57 +4259,57 @@ var useProductContext = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, ()
|
|
|
4259
4259
|
|
|
4260
4260
|
function PriceDetails() {
|
|
4261
4261
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
4262
|
-
const fmt =
|
|
4263
|
-
const generateUrl =
|
|
4262
|
+
const fmt = _chunk6NZKWIORjs.useBillingFormatOptions.call(void 0, );
|
|
4263
|
+
const generateUrl = _chunk6NZKWIORjs.usePageUrlGenerator.call(void 0, );
|
|
4264
4264
|
const { price } = usePriceContext();
|
|
4265
4265
|
if (!price) return null;
|
|
4266
4266
|
const isRecurring = price.priceType === "recurring";
|
|
4267
4267
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-full flex-col gap-y-8", children: [
|
|
4268
4268
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-full flex-col gap-y-4", children: [
|
|
4269
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4269
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.SectionHeader, { children: t("billing.admin.prices.title") }),
|
|
4270
4270
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "grid grid-cols-1 gap-4 md:grid-cols-2", children: [
|
|
4271
4271
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4272
|
-
|
|
4272
|
+
_chunk6NZKWIORjs.DetailField,
|
|
4273
4273
|
{
|
|
4274
4274
|
label: t("billing.admin.prices.fields.product"),
|
|
4275
|
-
value: price.product ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4275
|
+
value: price.product ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Link, { href: generateUrl({ page: _chunkFF4EIQ6Hjs.Modules.StripeProduct, id: price.product.id }), children: price.product.name }) : "\u2014"
|
|
4276
4276
|
}
|
|
4277
4277
|
),
|
|
4278
4278
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4279
|
-
|
|
4279
|
+
_chunk6NZKWIORjs.DetailField,
|
|
4280
4280
|
{
|
|
4281
4281
|
label: t("billing.admin.prices.fields.status"),
|
|
4282
4282
|
value: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "flex flex-wrap items-center gap-1", children: [
|
|
4283
|
-
price.active ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4284
|
-
price.isTrial && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4283
|
+
price.active ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Badge, { variant: "softGreen", children: t("billing.admin.prices.status.active") }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Badge, { variant: "softGray", children: t("billing.admin.prices.status.archived") }),
|
|
4284
|
+
price.isTrial && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Badge, { variant: "softBlue", children: t("billing.admin.prices.badge.trial") })
|
|
4285
4285
|
] })
|
|
4286
4286
|
}
|
|
4287
4287
|
),
|
|
4288
4288
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4289
|
-
|
|
4289
|
+
_chunk6NZKWIORjs.DetailField,
|
|
4290
4290
|
{
|
|
4291
4291
|
label: t("billing.admin.prices.fields.amount"),
|
|
4292
|
-
value: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "tabular-nums", children:
|
|
4292
|
+
value: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "tabular-nums", children: _chunkFF4EIQ6Hjs.formatCurrency.call(void 0, price.unitAmount, price.currency, fmt) })
|
|
4293
4293
|
}
|
|
4294
4294
|
),
|
|
4295
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4295
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.DetailField, { label: t("billing.admin.prices.fields.currency"), value: price.currency.toUpperCase() }),
|
|
4296
4296
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4297
|
-
|
|
4297
|
+
_chunk6NZKWIORjs.DetailField,
|
|
4298
4298
|
{
|
|
4299
4299
|
label: t("billing.admin.prices.fields.type"),
|
|
4300
4300
|
value: isRecurring ? t("billing.admin.prices.type.recurring") : t("billing.admin.prices.type.oneTime")
|
|
4301
4301
|
}
|
|
4302
4302
|
),
|
|
4303
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4303
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.DetailField, { label: t("billing.admin.prices.fields.billing"), value: _chunkFF4EIQ6Hjs.formatInterval.call(void 0, price, fmt) }),
|
|
4304
4304
|
isRecurring && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4305
|
-
|
|
4305
|
+
_chunk6NZKWIORjs.DetailField,
|
|
4306
4306
|
{
|
|
4307
4307
|
label: t("billing.admin.prices.fields.intervalCount"),
|
|
4308
4308
|
value: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "tabular-nums", children: _nullishCoalesce(_optionalChain([price, 'access', _163 => _163.recurring, 'optionalAccess', _164 => _164.intervalCount]), () => ( 1)) })
|
|
4309
4309
|
}
|
|
4310
4310
|
),
|
|
4311
4311
|
isRecurring && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4312
|
-
|
|
4312
|
+
_chunk6NZKWIORjs.DetailField,
|
|
4313
4313
|
{
|
|
4314
4314
|
label: t("billing.admin.prices.fields.usageType"),
|
|
4315
4315
|
value: _optionalChain([price, 'access', _165 => _165.recurring, 'optionalAccess', _166 => _166.usageType]) === "metered" ? t("billing.admin.prices.usage.metered") : t("billing.admin.prices.usage.licensed")
|
|
@@ -4318,24 +4318,24 @@ function PriceDetails() {
|
|
|
4318
4318
|
] })
|
|
4319
4319
|
] }),
|
|
4320
4320
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-full flex-col gap-y-4", children: [
|
|
4321
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4321
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.SectionHeader, { children: t("billing.admin.prices.fields.platformFeatures") }),
|
|
4322
4322
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "grid grid-cols-1 gap-4 md:grid-cols-2", children: [
|
|
4323
4323
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4324
|
-
|
|
4324
|
+
_chunk6NZKWIORjs.DetailField,
|
|
4325
4325
|
{
|
|
4326
4326
|
label: t("billing.admin.prices.fields.token"),
|
|
4327
4327
|
value: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "tabular-nums", children: _nullishCoalesce(price.token, () => ( "\u2014")) })
|
|
4328
4328
|
}
|
|
4329
4329
|
),
|
|
4330
4330
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4331
|
-
|
|
4331
|
+
_chunk6NZKWIORjs.DetailField,
|
|
4332
4332
|
{
|
|
4333
4333
|
label: t("billing.admin.prices.fields.stripeId"),
|
|
4334
4334
|
value: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "tabular-nums", children: price.stripePriceId })
|
|
4335
4335
|
}
|
|
4336
4336
|
),
|
|
4337
4337
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4338
|
-
|
|
4338
|
+
_chunk6NZKWIORjs.DetailField,
|
|
4339
4339
|
{
|
|
4340
4340
|
label: t("billing.admin.prices.fields.description"),
|
|
4341
4341
|
value: _nullishCoalesce(price.description, () => ( "\u2014")),
|
|
@@ -4343,7 +4343,7 @@ function PriceDetails() {
|
|
|
4343
4343
|
}
|
|
4344
4344
|
),
|
|
4345
4345
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4346
|
-
|
|
4346
|
+
_chunk6NZKWIORjs.DetailField,
|
|
4347
4347
|
{
|
|
4348
4348
|
label: t("billing.admin.prices.fields.features"),
|
|
4349
4349
|
className: "md:col-span-2",
|
|
@@ -4351,11 +4351,11 @@ function PriceDetails() {
|
|
|
4351
4351
|
}
|
|
4352
4352
|
),
|
|
4353
4353
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4354
|
-
|
|
4354
|
+
_chunk6NZKWIORjs.DetailField,
|
|
4355
4355
|
{
|
|
4356
4356
|
label: t("billing.admin.prices.fields.platformFeatures"),
|
|
4357
4357
|
className: "md:col-span-2",
|
|
4358
|
-
value: price.priceFeatures.length > 0 ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "flex flex-wrap items-center gap-1", children: price.priceFeatures.map((feature) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4358
|
+
value: price.priceFeatures.length > 0 ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "flex flex-wrap items-center gap-1", children: price.priceFeatures.map((feature) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Badge, { variant: "softGray", children: feature.name }, feature.id)) }) : "\u2014"
|
|
4359
4359
|
}
|
|
4360
4360
|
)
|
|
4361
4361
|
] })
|
|
@@ -4369,7 +4369,7 @@ _chunk7QVYU63Ejs.__name.call(void 0, PriceDetails, "PriceDetails");
|
|
|
4369
4369
|
function PriceContainer() {
|
|
4370
4370
|
const { price } = usePriceContext();
|
|
4371
4371
|
if (!price) return null;
|
|
4372
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4372
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.RoundPageContainer, { module: _chunkFF4EIQ6Hjs.Modules.StripePrice, id: price.id, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, PriceDetails, {}) });
|
|
4373
4373
|
}
|
|
4374
4374
|
_chunk7QVYU63Ejs.__name.call(void 0, PriceContainer, "PriceContainer");
|
|
4375
4375
|
|
|
@@ -4494,10 +4494,10 @@ function PricesList({ productId, fullWidth }) {
|
|
|
4494
4494
|
const importInputRef = _react.useRef.call(void 0, null);
|
|
4495
4495
|
const [seed, setSeed] = _react.useState.call(void 0, void 0);
|
|
4496
4496
|
const [seedNonce, setSeedNonce] = _react.useState.call(void 0, 0);
|
|
4497
|
-
const data =
|
|
4498
|
-
retriever: /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, (params) =>
|
|
4497
|
+
const data = _chunk6NZKWIORjs.useDataListRetriever.call(void 0, {
|
|
4498
|
+
retriever: /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, (params) => _chunkFF4EIQ6Hjs.StripePriceService.listPrices({ ...params, productId }), "retriever"),
|
|
4499
4499
|
retrieverParams: {},
|
|
4500
|
-
module:
|
|
4500
|
+
module: _chunkFF4EIQ6Hjs.Modules.StripePrice
|
|
4501
4501
|
});
|
|
4502
4502
|
_react.useEffect.call(void 0, () => {
|
|
4503
4503
|
if (priceVersion > 0) void data.refresh();
|
|
@@ -4532,7 +4532,7 @@ function PricesList({ productId, fullWidth }) {
|
|
|
4532
4532
|
openSeededEditor(transfer.price);
|
|
4533
4533
|
} catch (error) {
|
|
4534
4534
|
console.error("[PricesList] price import failed", error);
|
|
4535
|
-
|
|
4535
|
+
_chunk6NZKWIORjs.errorToast.call(void 0, {
|
|
4536
4536
|
title: t("billing.admin.prices.import.errors.title"),
|
|
4537
4537
|
error: t("billing.admin.prices.import.errors.invalid")
|
|
4538
4538
|
});
|
|
@@ -4551,7 +4551,7 @@ function PricesList({ productId, fullWidth }) {
|
|
|
4551
4551
|
"create-price"
|
|
4552
4552
|
),
|
|
4553
4553
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _react.Fragment, { children: [
|
|
4554
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
4554
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk6NZKWIORjs.Button, { variant: "outline", size: "sm", type: "button", onClick: () => _optionalChain([importInputRef, 'access', _181 => _181.current, 'optionalAccess', _182 => _182.click, 'call', _183 => _183()]), children: [
|
|
4555
4555
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.UploadIcon, {}),
|
|
4556
4556
|
t("billing.admin.prices.actions.import")
|
|
4557
4557
|
] }),
|
|
@@ -4569,7 +4569,7 @@ function PricesList({ productId, fullWidth }) {
|
|
|
4569
4569
|
];
|
|
4570
4570
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
|
|
4571
4571
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4572
|
-
|
|
4572
|
+
_chunk6NZKWIORjs.ContentListTable,
|
|
4573
4573
|
{
|
|
4574
4574
|
data,
|
|
4575
4575
|
fields: [
|
|
@@ -4580,13 +4580,13 @@ function PricesList({ productId, fullWidth }) {
|
|
|
4580
4580
|
"status" /* status */,
|
|
4581
4581
|
"actions" /* actions */
|
|
4582
4582
|
],
|
|
4583
|
-
tableGeneratorType:
|
|
4583
|
+
tableGeneratorType: _chunkFF4EIQ6Hjs.Modules.StripePrice,
|
|
4584
4584
|
functions,
|
|
4585
4585
|
context: tableContext,
|
|
4586
4586
|
fullWidth,
|
|
4587
4587
|
title: t("billing.admin.prices.title"),
|
|
4588
4588
|
emptyState: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4589
|
-
|
|
4589
|
+
_chunk6NZKWIORjs.EmptyState,
|
|
4590
4590
|
{
|
|
4591
4591
|
icon: _lucidereact.DollarSignIcon,
|
|
4592
4592
|
title: t("billing.admin.prices.empty.title"),
|
|
@@ -4626,18 +4626,18 @@ function ProductDetails() {
|
|
|
4626
4626
|
const { product } = useProductContext();
|
|
4627
4627
|
if (!product) return null;
|
|
4628
4628
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-full flex-col gap-y-4", children: [
|
|
4629
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4629
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.SectionHeader, { children: t("billing.admin.products.tabs.details") }),
|
|
4630
4630
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "grid grid-cols-1 gap-4 md:grid-cols-2", children: [
|
|
4631
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4631
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.DetailField, { label: t("billing.admin.products.fields.name"), value: product.name }),
|
|
4632
4632
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4633
|
-
|
|
4633
|
+
_chunk6NZKWIORjs.DetailField,
|
|
4634
4634
|
{
|
|
4635
4635
|
label: t("billing.admin.products.fields.status"),
|
|
4636
|
-
value: product.active ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4636
|
+
value: product.active ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Badge, { variant: "softGreen", children: t("billing.admin.products.status.active") }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Badge, { variant: "softGray", children: t("billing.admin.products.status.archived") })
|
|
4637
4637
|
}
|
|
4638
4638
|
),
|
|
4639
4639
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4640
|
-
|
|
4640
|
+
_chunk6NZKWIORjs.DetailField,
|
|
4641
4641
|
{
|
|
4642
4642
|
label: t("billing.admin.products.fields.description"),
|
|
4643
4643
|
value: _nullishCoalesce(product.description, () => ( "\u2014")),
|
|
@@ -4645,14 +4645,14 @@ function ProductDetails() {
|
|
|
4645
4645
|
}
|
|
4646
4646
|
),
|
|
4647
4647
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4648
|
-
|
|
4648
|
+
_chunk6NZKWIORjs.DetailField,
|
|
4649
4649
|
{
|
|
4650
4650
|
label: t("billing.admin.products.fields.prices"),
|
|
4651
4651
|
value: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "tabular-nums", children: product.stripePrices.length })
|
|
4652
4652
|
}
|
|
4653
4653
|
),
|
|
4654
4654
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4655
|
-
|
|
4655
|
+
_chunk6NZKWIORjs.DetailField,
|
|
4656
4656
|
{
|
|
4657
4657
|
label: t("billing.admin.products.fields.stripeId"),
|
|
4658
4658
|
value: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "tabular-nums", children: product.stripeProductId })
|
|
@@ -4670,9 +4670,9 @@ function ProductContainer() {
|
|
|
4670
4670
|
const { product } = useProductContext();
|
|
4671
4671
|
if (!product) return null;
|
|
4672
4672
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4673
|
-
|
|
4673
|
+
_chunk6NZKWIORjs.RoundPageContainer,
|
|
4674
4674
|
{
|
|
4675
|
-
module:
|
|
4675
|
+
module: _chunkFF4EIQ6Hjs.Modules.StripeProduct,
|
|
4676
4676
|
id: product.id,
|
|
4677
4677
|
tabs: [
|
|
4678
4678
|
{
|
|
@@ -4681,7 +4681,7 @@ function ProductContainer() {
|
|
|
4681
4681
|
content: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ProductDetails, {})
|
|
4682
4682
|
},
|
|
4683
4683
|
{
|
|
4684
|
-
key:
|
|
4684
|
+
key: _chunkFF4EIQ6Hjs.Modules.StripePrice,
|
|
4685
4685
|
label: t("billing.admin.prices.title"),
|
|
4686
4686
|
// publishChrome={false}: SharedProvider REPLACES its value for the
|
|
4687
4687
|
// subtree (SharedContext.tsx:35-37), so a nested provider publishing
|
|
@@ -4707,18 +4707,18 @@ _chunk7QVYU63Ejs.__name.call(void 0, ProductContainer, "ProductContainer");
|
|
|
4707
4707
|
|
|
4708
4708
|
function CouponsList({ fullWidth } = {}) {
|
|
4709
4709
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
4710
|
-
const { catalogueVersion } =
|
|
4711
|
-
const data =
|
|
4712
|
-
retriever: /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, (params) =>
|
|
4710
|
+
const { catalogueVersion } = _chunk6NZKWIORjs.useCouponContext.call(void 0, );
|
|
4711
|
+
const data = _chunk6NZKWIORjs.useDataListRetriever.call(void 0, {
|
|
4712
|
+
retriever: /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, (params) => _chunkFF4EIQ6Hjs.StripeCouponService.listCoupons(params), "retriever"),
|
|
4713
4713
|
retrieverParams: {},
|
|
4714
|
-
module:
|
|
4714
|
+
module: _chunkFF4EIQ6Hjs.Modules.StripeCoupon
|
|
4715
4715
|
});
|
|
4716
4716
|
_react.useEffect.call(void 0, () => {
|
|
4717
4717
|
if (catalogueVersion > 0) void data.refresh();
|
|
4718
4718
|
}, [catalogueVersion]);
|
|
4719
|
-
const functions = [/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4719
|
+
const functions = [/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.CouponEditor, {}, "create-coupon")];
|
|
4720
4720
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4721
|
-
|
|
4721
|
+
_chunk6NZKWIORjs.ContentListTable,
|
|
4722
4722
|
{
|
|
4723
4723
|
data,
|
|
4724
4724
|
fields: [
|
|
@@ -4728,12 +4728,12 @@ function CouponsList({ fullWidth } = {}) {
|
|
|
4728
4728
|
"codes" /* codes */,
|
|
4729
4729
|
"status" /* status */
|
|
4730
4730
|
],
|
|
4731
|
-
tableGeneratorType:
|
|
4731
|
+
tableGeneratorType: _chunkFF4EIQ6Hjs.Modules.StripeCoupon,
|
|
4732
4732
|
functions,
|
|
4733
4733
|
fullWidth,
|
|
4734
4734
|
title: t("billing.admin.coupons.title"),
|
|
4735
4735
|
emptyState: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4736
|
-
|
|
4736
|
+
_chunk6NZKWIORjs.EmptyState,
|
|
4737
4737
|
{
|
|
4738
4738
|
icon: _lucidereact.TicketPercentIcon,
|
|
4739
4739
|
title: t("billing.admin.coupons.empty.title"),
|
|
@@ -4753,26 +4753,26 @@ _chunk7QVYU63Ejs.__name.call(void 0, CouponsList, "CouponsList");
|
|
|
4753
4753
|
function ProductsList({ fullWidth } = {}) {
|
|
4754
4754
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
4755
4755
|
const { catalogueVersion } = useProductContext();
|
|
4756
|
-
const data =
|
|
4757
|
-
retriever: /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, (params) =>
|
|
4756
|
+
const data = _chunk6NZKWIORjs.useDataListRetriever.call(void 0, {
|
|
4757
|
+
retriever: /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, (params) => _chunkFF4EIQ6Hjs.StripeProductService.listProducts(params), "retriever"),
|
|
4758
4758
|
retrieverParams: {},
|
|
4759
|
-
module:
|
|
4759
|
+
module: _chunkFF4EIQ6Hjs.Modules.StripeProduct
|
|
4760
4760
|
});
|
|
4761
4761
|
_react.useEffect.call(void 0, () => {
|
|
4762
4762
|
if (catalogueVersion > 0) void data.refresh();
|
|
4763
4763
|
}, [catalogueVersion]);
|
|
4764
4764
|
const functions = [/* @__PURE__ */ _jsxruntime.jsx.call(void 0, ProductEditor, {}, "create-product")];
|
|
4765
4765
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4766
|
-
|
|
4766
|
+
_chunk6NZKWIORjs.ContentListTable,
|
|
4767
4767
|
{
|
|
4768
4768
|
data,
|
|
4769
4769
|
fields: ["name" /* name */, "status" /* status */, "prices" /* prices */],
|
|
4770
|
-
tableGeneratorType:
|
|
4770
|
+
tableGeneratorType: _chunkFF4EIQ6Hjs.Modules.StripeProduct,
|
|
4771
4771
|
functions,
|
|
4772
4772
|
fullWidth,
|
|
4773
4773
|
title: t("billing.admin.products.title"),
|
|
4774
4774
|
emptyState: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4775
|
-
|
|
4775
|
+
_chunk6NZKWIORjs.EmptyState,
|
|
4776
4776
|
{
|
|
4777
4777
|
icon: _lucidereact.PackageIcon,
|
|
4778
4778
|
title: t("billing.admin.products.empty.title"),
|
|
@@ -4788,10 +4788,10 @@ _chunk7QVYU63Ejs.__name.call(void 0, ProductsList, "ProductsList");
|
|
|
4788
4788
|
|
|
4789
4789
|
function ProductsListContainer() {
|
|
4790
4790
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
4791
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ProductProvider, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4792
|
-
|
|
4791
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ProductProvider, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.CouponProvider, { publishChrome: false, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4792
|
+
_chunk6NZKWIORjs.RoundPageContainer,
|
|
4793
4793
|
{
|
|
4794
|
-
module:
|
|
4794
|
+
module: _chunkFF4EIQ6Hjs.Modules.StripeProduct,
|
|
4795
4795
|
tabs: [
|
|
4796
4796
|
{ sectionKey: "products", label: t("billing.admin.products.tabs.products"), content: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ProductsList, {}) },
|
|
4797
4797
|
{ sectionKey: "codes", label: t("billing.admin.products.tabs.codes"), content: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, CouponsList, {}) }
|
|
@@ -4809,30 +4809,30 @@ _chunk7QVYU63Ejs.__name.call(void 0, ProductsListContainer, "ProductsListContain
|
|
|
4809
4809
|
|
|
4810
4810
|
function CouponDetails() {
|
|
4811
4811
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
4812
|
-
const fmt =
|
|
4813
|
-
const { coupon } =
|
|
4812
|
+
const fmt = _chunk6NZKWIORjs.useBillingFormatOptions.call(void 0, );
|
|
4813
|
+
const { coupon } = _chunk6NZKWIORjs.useCouponContext.call(void 0, );
|
|
4814
4814
|
if (!coupon) return null;
|
|
4815
4815
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-full flex-col gap-y-4", children: [
|
|
4816
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4816
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.SectionHeader, { children: t("billing.admin.products.tabs.details") }),
|
|
4817
4817
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-muted-foreground text-xs/relaxed", children: t("billing.admin.coupons.fixed_notice") }),
|
|
4818
4818
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "grid grid-cols-1 gap-4 md:grid-cols-2", children: [
|
|
4819
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4819
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.DetailField, { label: t("billing.admin.coupons.fields.name"), value: coupon.name }),
|
|
4820
4820
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4821
|
-
|
|
4821
|
+
_chunk6NZKWIORjs.DetailField,
|
|
4822
4822
|
{
|
|
4823
4823
|
label: t("billing.admin.coupons.fields.status"),
|
|
4824
|
-
value: coupon.valid ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4824
|
+
value: coupon.valid ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Badge, { variant: "softGreen", children: t("billing.admin.coupons.status.active") }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.Badge, { variant: "softGray", children: t("billing.admin.coupons.status.ended") })
|
|
4825
4825
|
}
|
|
4826
4826
|
),
|
|
4827
4827
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4828
|
-
|
|
4828
|
+
_chunk6NZKWIORjs.DetailField,
|
|
4829
4829
|
{
|
|
4830
4830
|
label: t("billing.admin.coupons.fields.discount"),
|
|
4831
|
-
value: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "tabular-nums", children:
|
|
4831
|
+
value: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "tabular-nums", children: _chunkFF4EIQ6Hjs.formatCouponDiscount.call(void 0, coupon, t, fmt) })
|
|
4832
4832
|
}
|
|
4833
4833
|
),
|
|
4834
4834
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4835
|
-
|
|
4835
|
+
_chunk6NZKWIORjs.DetailField,
|
|
4836
4836
|
{
|
|
4837
4837
|
label: t("billing.admin.coupons.fields.places"),
|
|
4838
4838
|
value: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "tabular-nums", children: coupon.maxRedemptions !== void 0 ? t("billing.admin.coupons.places.limited", {
|
|
@@ -4842,21 +4842,21 @@ function CouponDetails() {
|
|
|
4842
4842
|
}
|
|
4843
4843
|
),
|
|
4844
4844
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4845
|
-
|
|
4845
|
+
_chunk6NZKWIORjs.DetailField,
|
|
4846
4846
|
{
|
|
4847
4847
|
label: t("billing.admin.coupons.fields.products"),
|
|
4848
4848
|
value: coupon.stripeProductIds.length > 0 ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "tabular-nums", children: coupon.stripeProductIds.join(", ") }) : t("billing.admin.coupons.all_products")
|
|
4849
4849
|
}
|
|
4850
4850
|
),
|
|
4851
4851
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4852
|
-
|
|
4852
|
+
_chunk6NZKWIORjs.DetailField,
|
|
4853
4853
|
{
|
|
4854
4854
|
label: t("billing.admin.coupons.fields.redeemBy"),
|
|
4855
|
-
value: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "tabular-nums", children: coupon.redeemBy ?
|
|
4855
|
+
value: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "tabular-nums", children: coupon.redeemBy ? _chunk6NZKWIORjs.formatDate.call(void 0, coupon.redeemBy, fmt) : "\u2014" })
|
|
4856
4856
|
}
|
|
4857
4857
|
),
|
|
4858
4858
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4859
|
-
|
|
4859
|
+
_chunk6NZKWIORjs.DetailField,
|
|
4860
4860
|
{
|
|
4861
4861
|
label: t("billing.admin.coupons.fields.stripeId"),
|
|
4862
4862
|
value: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "tabular-nums", children: coupon.stripeCouponId })
|
|
@@ -4890,33 +4890,33 @@ function CouponCodeEditorInternal({
|
|
|
4890
4890
|
onDialogOpenChange
|
|
4891
4891
|
}) {
|
|
4892
4892
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
4893
|
-
const router =
|
|
4894
|
-
const { createCode } =
|
|
4895
|
-
const formSchema2 = _react.useMemo.call(void 0, () => _zod3.z.object({ id: _zod3.z.uuidv4() }).and(
|
|
4896
|
-
const getDefaultValues = _react.useCallback.call(void 0, () => ({ id: _uuid.v4.call(void 0, ), ...
|
|
4893
|
+
const router = _chunkFF4EIQ6Hjs.useI18nRouter.call(void 0, );
|
|
4894
|
+
const { createCode } = _chunk6NZKWIORjs.useCouponContext.call(void 0, );
|
|
4895
|
+
const formSchema2 = _react.useMemo.call(void 0, () => _zod3.z.object({ id: _zod3.z.uuidv4() }).and(_chunk6NZKWIORjs.couponCodeSchema.call(void 0, t)), [t]);
|
|
4896
|
+
const getDefaultValues = _react.useCallback.call(void 0, () => ({ id: _uuid.v4.call(void 0, ), ..._chunk6NZKWIORjs.couponCodeDefaults.call(void 0, ) }), []);
|
|
4897
4897
|
const form = _reacthookform.useForm.call(void 0, {
|
|
4898
4898
|
resolver: _zod.zodResolver.call(void 0, formSchema2),
|
|
4899
4899
|
defaultValues: getDefaultValues()
|
|
4900
4900
|
});
|
|
4901
4901
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4902
|
-
|
|
4902
|
+
_chunk6NZKWIORjs.EditorSheet,
|
|
4903
4903
|
{
|
|
4904
4904
|
form,
|
|
4905
4905
|
entityType: t("billing.admin.coupons.codes.entity"),
|
|
4906
4906
|
isEdit: false,
|
|
4907
|
-
module:
|
|
4907
|
+
module: _chunkFF4EIQ6Hjs.Modules.StripeCouponCode,
|
|
4908
4908
|
size: "md",
|
|
4909
4909
|
onSuccess: _nullishCoalesce(onSuccess, () => ( (() => {
|
|
4910
4910
|
}))),
|
|
4911
4911
|
onNavigate: (url) => router.push(url),
|
|
4912
|
-
onSubmit: async (values) => await createCode({ id: values.id, couponId, ...
|
|
4912
|
+
onSubmit: async (values) => await createCode({ id: values.id, couponId, ..._chunk6NZKWIORjs.toCouponCodeInput.call(void 0, values) }),
|
|
4913
4913
|
onReset: getDefaultValues,
|
|
4914
4914
|
trigger,
|
|
4915
4915
|
forceShow,
|
|
4916
4916
|
onClose,
|
|
4917
4917
|
dialogOpen,
|
|
4918
4918
|
onDialogOpenChange,
|
|
4919
|
-
children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4919
|
+
children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6NZKWIORjs.CouponCodeFields, { form })
|
|
4920
4920
|
}
|
|
4921
4921
|
);
|
|
4922
4922
|
}
|
|
@@ -4930,18 +4930,18 @@ _chunk7QVYU63Ejs.__name.call(void 0, CouponCodeEditor, "CouponCodeEditor");
|
|
|
4930
4930
|
|
|
4931
4931
|
function CouponCodesList({ couponId }) {
|
|
4932
4932
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
4933
|
-
const { catalogueVersion } =
|
|
4934
|
-
const data =
|
|
4935
|
-
retriever: /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, (params) =>
|
|
4933
|
+
const { catalogueVersion } = _chunk6NZKWIORjs.useCouponContext.call(void 0, );
|
|
4934
|
+
const data = _chunk6NZKWIORjs.useDataListRetriever.call(void 0, {
|
|
4935
|
+
retriever: /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, (params) => _chunkFF4EIQ6Hjs.StripeCouponCodeService.listByCoupon({ ...params, couponId }), "retriever"),
|
|
4936
4936
|
retrieverParams: {},
|
|
4937
|
-
module:
|
|
4937
|
+
module: _chunkFF4EIQ6Hjs.Modules.StripeCouponCode
|
|
4938
4938
|
});
|
|
4939
4939
|
_react.useEffect.call(void 0, () => {
|
|
4940
4940
|
if (catalogueVersion > 0) void data.refresh();
|
|
4941
4941
|
}, [catalogueVersion]);
|
|
4942
4942
|
const functions = [/* @__PURE__ */ _jsxruntime.jsx.call(void 0, CouponCodeEditor, { couponId }, "create-code")];
|
|
4943
4943
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4944
|
-
|
|
4944
|
+
_chunk6NZKWIORjs.ContentListTable,
|
|
4945
4945
|
{
|
|
4946
4946
|
data,
|
|
4947
4947
|
fields: [
|
|
@@ -4952,11 +4952,11 @@ function CouponCodesList({ couponId }) {
|
|
|
4952
4952
|
"status" /* status */,
|
|
4953
4953
|
"actions" /* actions */
|
|
4954
4954
|
],
|
|
4955
|
-
tableGeneratorType:
|
|
4955
|
+
tableGeneratorType: _chunkFF4EIQ6Hjs.Modules.StripeCouponCode,
|
|
4956
4956
|
functions,
|
|
4957
4957
|
title: t("billing.admin.coupons.codes.title"),
|
|
4958
4958
|
emptyState: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4959
|
-
|
|
4959
|
+
_chunk6NZKWIORjs.EmptyState,
|
|
4960
4960
|
{
|
|
4961
4961
|
icon: _lucidereact.TicketIcon,
|
|
4962
4962
|
title: t("billing.admin.coupons.codes.empty.title"),
|
|
@@ -4972,12 +4972,12 @@ _chunk7QVYU63Ejs.__name.call(void 0, CouponCodesList, "CouponCodesList");
|
|
|
4972
4972
|
|
|
4973
4973
|
function CouponContainer() {
|
|
4974
4974
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
4975
|
-
const { coupon } =
|
|
4975
|
+
const { coupon } = _chunk6NZKWIORjs.useCouponContext.call(void 0, );
|
|
4976
4976
|
if (!coupon) return null;
|
|
4977
4977
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4978
|
-
|
|
4978
|
+
_chunk6NZKWIORjs.RoundPageContainer,
|
|
4979
4979
|
{
|
|
4980
|
-
module:
|
|
4980
|
+
module: _chunk6NZKWIORjs.couponPageModule.call(void 0, ),
|
|
4981
4981
|
id: coupon.id,
|
|
4982
4982
|
tabs: [
|
|
4983
4983
|
{
|
|
@@ -5084,5 +5084,5 @@ _chunk7QVYU63Ejs.__name.call(void 0, CouponContainer, "CouponContainer");
|
|
|
5084
5084
|
|
|
5085
5085
|
|
|
5086
5086
|
|
|
5087
|
-
exports.BillingAlertBanner = BillingAlertBanner; exports.BillingDashboardContainer = BillingDashboardContainer; exports.BillingDetailModal = BillingDetailModal; exports.BillingUsageSummaryCard = BillingUsageSummaryCard; exports.CancelSubscriptionDialog = CancelSubscriptionDialog; exports.CouponCodeActions =
|
|
5087
|
+
exports.BillingAlertBanner = BillingAlertBanner; exports.BillingDashboardContainer = BillingDashboardContainer; exports.BillingDetailModal = BillingDetailModal; exports.BillingUsageSummaryCard = BillingUsageSummaryCard; exports.CancelSubscriptionDialog = CancelSubscriptionDialog; exports.CouponCodeActions = _chunk6NZKWIORjs.CouponCodeActions; exports.CouponCodeEditor = CouponCodeEditor; exports.CouponCodeFields = _chunk6NZKWIORjs.CouponCodeFields; exports.CouponCodesList = CouponCodesList; exports.CouponContainer = CouponContainer; exports.CouponDetails = CouponDetails; exports.CouponEditor = _chunk6NZKWIORjs.CouponEditor; exports.CouponProvider = _chunk6NZKWIORjs.CouponProvider; exports.CouponRefresher = _chunk6NZKWIORjs.CouponRefresher; exports.CouponsList = CouponsList; exports.CustomerInfoCard = CustomerInfoCard; exports.IntervalToggle = IntervalToggle; exports.InvoiceDetails = InvoiceDetails; exports.InvoiceStatusBadge = InvoiceStatusBadge; exports.InvoicesContainer = InvoicesContainer; exports.InvoicesList = InvoicesList; exports.InvoicesSummaryCard = InvoicesSummaryCard; exports.PaymentMethodCard = PaymentMethodCard; exports.PaymentMethodEditor = PaymentMethodEditor; exports.PaymentMethodForm = PaymentMethodForm; exports.PaymentMethodSummaryCard = PaymentMethodSummaryCard; exports.PaymentMethodsContainer = PaymentMethodsContainer; exports.PaymentMethodsList = PaymentMethodsList; exports.PriceArchiver = PriceArchiver; exports.PriceContainer = PriceContainer; exports.PriceDetails = PriceDetails; exports.PriceEditor = PriceEditor; exports.PriceProvider = PriceProvider; exports.PricesList = PricesList; exports.PricingCard = PricingCard; exports.ProductArchiver = ProductArchiver; exports.ProductContainer = ProductContainer; exports.ProductDetails = ProductDetails; exports.ProductEditor = ProductEditor; exports.ProductPricingList = ProductPricingList; exports.ProductPricingRow = ProductPricingRow; exports.ProductProvider = ProductProvider; exports.ProductsList = ProductsList; exports.ProductsListContainer = ProductsListContainer; exports.PromoCodeInput = PromoCodeInput; exports.ProrationPreview = ProrationPreview; exports.StripeProvider = StripeProvider; exports.SubscriptionConfirmation = SubscriptionConfirmation; exports.SubscriptionDetails = SubscriptionDetails; exports.SubscriptionStatusBadge = SubscriptionStatusBadge; exports.SubscriptionSummaryCard = SubscriptionSummaryCard; exports.SubscriptionWizard = SubscriptionWizard; exports.SubscriptionsContainer = SubscriptionsContainer; exports.SubscriptionsList = SubscriptionsList; exports.UsageContainer = UsageContainer; exports.UsageHistoryTable = UsageHistoryTable; exports.UsageSummaryCard = UsageSummaryCard; exports.UsageSummaryCards = UsageSummaryCards; exports.WizardProgressIndicator = WizardProgressIndicator; exports.WizardStepPaymentMethod = WizardStepPaymentMethod; exports.WizardStepPlanSelection = WizardStepPlanSelection; exports.WizardStepReview = WizardStepReview; exports.applyDiscount = _chunk6NZKWIORjs.applyDiscount; exports.couponCodeDefaults = _chunk6NZKWIORjs.couponCodeDefaults; exports.couponCodeSchema = _chunk6NZKWIORjs.couponCodeSchema; exports.couponCurrencyOptions = _chunk6NZKWIORjs.couponCurrencyOptions; exports.formatCurrency = _chunkFF4EIQ6Hjs.formatCurrency; exports.formatDate = _chunk6NZKWIORjs.formatDate; exports.formatFixed = _chunkFF4EIQ6Hjs.formatFixed; exports.formatInterval = _chunkFF4EIQ6Hjs.formatInterval; exports.isStripeConfigured = isStripeConfigured; exports.optionalDate = _chunk6NZKWIORjs.optionalDate; exports.optionalDecimal = _chunk6NZKWIORjs.optionalDecimal; exports.optionalPositiveInt = _chunk6NZKWIORjs.optionalPositiveInt; exports.parseOptionalDecimal = _chunk6NZKWIORjs.parseOptionalDecimal; exports.parseOptionalPositiveInt = _chunk6NZKWIORjs.parseOptionalPositiveInt; exports.priceLabel = priceLabel; exports.promotionCodeDiscount = _chunk6NZKWIORjs.promotionCodeDiscount; exports.subscriptionDiscount = _chunk6NZKWIORjs.subscriptionDiscount; exports.toCouponCodeInput = _chunk6NZKWIORjs.toCouponCodeInput; exports.useBillingFormatOptions = _chunk6NZKWIORjs.useBillingFormatOptions; exports.useCouponContext = _chunk6NZKWIORjs.useCouponContext; exports.usePriceContext = usePriceContext; exports.useProductContext = useProductContext;
|
|
5088
5088
|
//# sourceMappingURL=index.js.map
|