@carlonicora/nextjs-jsonapi 6.9.0 → 6.10.0
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/{BlockNoteEditor-WN73IHXR.mjs → BlockNoteEditor-GK3DRTOP.mjs} +49 -15
- package/dist/BlockNoteEditor-GK3DRTOP.mjs.map +1 -0
- package/dist/{BlockNoteEditor-XXH3VBZ7.js → BlockNoteEditor-YOKJOVV3.js} +64 -30
- package/dist/BlockNoteEditor-YOKJOVV3.js.map +1 -0
- package/dist/billing/index.js +379 -379
- package/dist/billing/index.mjs +1 -1
- package/dist/{chunk-ZCM4JLM7.js → chunk-4UFMLTL2.js} +73 -71
- package/dist/chunk-4UFMLTL2.js.map +1 -0
- package/dist/{chunk-Q4XLE3QO.mjs → chunk-THZAK7S3.mjs} +9 -7
- package/dist/{chunk-Q4XLE3QO.mjs.map → chunk-THZAK7S3.mjs.map} +1 -1
- package/dist/client/index.js +2 -2
- package/dist/client/index.mjs +1 -1
- package/dist/components/index.d.mts +12 -5
- package/dist/components/index.d.ts +12 -5
- package/dist/components/index.js +2 -2
- package/dist/components/index.mjs +1 -1
- package/dist/contexts/index.js +2 -2
- package/dist/contexts/index.mjs +1 -1
- package/dist/email-automations/index.js +58 -58
- package/dist/email-automations/index.mjs +1 -1
- package/dist/features/analytics/index.js +87 -87
- package/dist/features/analytics/index.mjs +1 -1
- package/dist/features/blog/index.js +93 -93
- package/dist/features/blog/index.mjs +1 -1
- package/dist/features/help/index.js +31 -31
- package/dist/features/help/index.mjs +1 -1
- package/dist/features/tokenusage/index.js +77 -77
- package/dist/features/tokenusage/index.mjs +1 -1
- package/package.json +1 -1
- package/src/components/editors/BlockNoteEditor.tsx +69 -14
- package/src/components/editors/__tests__/BlockNoteEditor.ai.spec.tsx +295 -0
- package/src/features/assistant/components/containers/AssistantPageContainer.tsx +20 -9
- package/src/features/assistant/components/containers/__tests__/AssistantPageContainer.spec.tsx +116 -0
- package/src/features/assistant/components/parts/AssistantThread.tsx +2 -1
- package/src/features/assistant-message/components/MessageItem.tsx +1 -1
- package/src/features/assistant-message/components/MessageList.tsx +1 -1
- package/src/features/assistant-message/components/parts/MessageSourcesContainer.tsx +1 -1
- package/src/features/assistant-message/components/parts/MessageSourcesPanel.tsx +1 -1
- package/src/features/assistant-message/components/parts/__tests__/MessageSourcesPanel.spec.tsx +17 -1
- package/src/features/assistant-message/components/parts/__tests__/SuggestedQuestionsTab.spec.tsx +22 -0
- package/src/features/assistant-message/components/parts/tabs/SuggestedQuestionsTab.tsx +5 -3
- package/dist/BlockNoteEditor-WN73IHXR.mjs.map +0 -1
- package/dist/BlockNoteEditor-XXH3VBZ7.js.map +0 -1
- package/dist/chunk-ZCM4JLM7.js.map +0 -1
package/dist/billing/index.js
CHANGED
|
@@ -81,7 +81,7 @@
|
|
|
81
81
|
|
|
82
82
|
|
|
83
83
|
|
|
84
|
-
var
|
|
84
|
+
var _chunk4UFMLTL2js = require('../chunk-4UFMLTL2.js');
|
|
85
85
|
|
|
86
86
|
|
|
87
87
|
var _chunkKRQRJA4Jjs = require('../chunk-KRQRJA4J.js');
|
|
@@ -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 = _chunk4UFMLTL2js.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, _chunk4UFMLTL2js.Card, { children: [
|
|
165
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4UFMLTL2js.CardHeader, { className: "flex flex-row items-center justify-between space-y-0 pb-2", children: [
|
|
166
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.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, _chunk4UFMLTL2js.CardContent, { children: [
|
|
170
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.Skeleton, { className: "h-6 w-32 mb-2" }),
|
|
171
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.Skeleton, { className: "h-4 w-24 mb-1" }),
|
|
172
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.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, _chunk4UFMLTL2js.Card, { children: [
|
|
178
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4UFMLTL2js.CardHeader, { className: "flex flex-row items-center justify-between space-y-0 pb-2", children: [
|
|
179
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.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, _chunk4UFMLTL2js.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, _chunk4UFMLTL2js.Card, { className: "cursor-pointer hover:bg-accent/50 transition-colors", onClick: onManageClick, children: [
|
|
190
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4UFMLTL2js.CardHeader, { className: "flex flex-row items-center justify-between space-y-0 pb-2", children: [
|
|
191
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.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, _chunk4UFMLTL2js.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
|
+
_chunk4UFMLTL2js.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, _chunk4UFMLTL2js.Badge, { variant: "softRed", children: t("billing.ui.cards.subscriptions.payment_failing") }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
217
|
+
_chunk4UFMLTL2js.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: _chunk4UFMLTL2js.formatDate.call(void 0, primarySubscription.currentPeriodEnd, fmt)
|
|
226
226
|
}) : primarySubscription.cancelAtPeriodEnd ? t("billing.ui.cards.subscriptions.cancels_on", {
|
|
227
|
-
date:
|
|
227
|
+
date: _chunk4UFMLTL2js.formatDate.call(void 0, primarySubscription.currentPeriodEnd, fmt)
|
|
228
228
|
}) : t("billing.ui.cards.subscriptions.renews_on", {
|
|
229
|
-
date:
|
|
229
|
+
date: _chunk4UFMLTL2js.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, _chunk4UFMLTL2js.Card, { children: [
|
|
264
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4UFMLTL2js.CardHeader, { className: "flex flex-row items-center justify-between space-y-0 pb-2", children: [
|
|
265
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.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, _chunk4UFMLTL2js.CardContent, { children: [
|
|
269
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.Skeleton, { className: "h-6 w-32 mb-2" }),
|
|
270
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.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, _chunk4UFMLTL2js.Card, { children: [
|
|
276
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4UFMLTL2js.CardHeader, { className: "flex flex-row items-center justify-between space-y-0 pb-2", children: [
|
|
277
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.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, _chunk4UFMLTL2js.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, _chunk4UFMLTL2js.Card, { className: "cursor-pointer hover:bg-accent/50 transition-colors", onClick: onManageClick, children: [
|
|
285
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4UFMLTL2js.CardHeader, { className: "flex flex-row items-center justify-between space-y-0 pb-2", children: [
|
|
286
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.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, _chunk4UFMLTL2js.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
|
+
_chunk4UFMLTL2js.Button,
|
|
294
294
|
{
|
|
295
295
|
variant: "outline",
|
|
296
296
|
size: "sm",
|
|
@@ -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, _chunk4UFMLTL2js.Card, { children: [
|
|
358
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4UFMLTL2js.CardHeader, { className: "flex flex-row items-center justify-between space-y-0 pb-2", children: [
|
|
359
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.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, _chunk4UFMLTL2js.CardContent, { children: [
|
|
363
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.Skeleton, { className: "h-6 w-32 mb-2" }),
|
|
364
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.Skeleton, { className: "h-4 w-48 mb-1" }),
|
|
365
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.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, _chunk4UFMLTL2js.Card, { children: [
|
|
371
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4UFMLTL2js.CardHeader, { className: "flex flex-row items-center justify-between space-y-0 pb-2", children: [
|
|
372
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.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, _chunk4UFMLTL2js.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, _chunk4UFMLTL2js.Card, { children: [
|
|
380
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4UFMLTL2js.CardHeader, { className: "flex flex-row items-center justify-between space-y-0 pb-2", children: [
|
|
381
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.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, _chunk4UFMLTL2js.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, _chunk4UFMLTL2js.Card, { children: [
|
|
391
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4UFMLTL2js.CardHeader, { className: "flex flex-row items-center justify-between space-y-0 pb-2", children: [
|
|
392
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.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, _chunk4UFMLTL2js.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, _chunk4UFMLTL2js.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
|
] })
|
|
@@ -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 = _chunk4UFMLTL2js.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, _chunk4UFMLTL2js.Card, { children: [
|
|
446
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4UFMLTL2js.CardHeader, { className: "flex flex-row items-center justify-between space-y-0 pb-2", children: [
|
|
447
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.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, _chunk4UFMLTL2js.CardContent, { children: [
|
|
451
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.Skeleton, { className: "h-6 w-24 mb-2" }),
|
|
452
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.Skeleton, { className: "h-4 w-32 mb-1" }),
|
|
453
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.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, _chunk4UFMLTL2js.Card, { children: [
|
|
459
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4UFMLTL2js.CardHeader, { className: "flex flex-row items-center justify-between space-y-0 pb-2", children: [
|
|
460
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.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, _chunk4UFMLTL2js.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, _chunk4UFMLTL2js.Card, { className: "cursor-pointer hover:bg-accent/50 transition-colors", onClick: onViewAllClick, children: [
|
|
470
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4UFMLTL2js.CardHeader, { className: "flex flex-row items-center justify-between space-y-0 pb-2", children: [
|
|
471
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.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, _chunk4UFMLTL2js.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, _chunk4UFMLTL2js.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: _chunk4UFMLTL2js.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 }) }),
|
|
@@ -514,24 +514,24 @@ function BillingUsageSummaryCard({
|
|
|
514
514
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
515
515
|
const locale = _chunkSQTXJPREjs.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, _chunk4UFMLTL2js.Card, { children: [
|
|
518
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4UFMLTL2js.CardHeader, { className: "flex flex-row items-center justify-between space-y-0 pb-2", children: [
|
|
519
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.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, _chunk4UFMLTL2js.CardContent, { children: [
|
|
523
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.Skeleton, { className: "h-6 w-24 mb-2" }),
|
|
524
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.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, _chunk4UFMLTL2js.Card, { children: [
|
|
530
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4UFMLTL2js.CardHeader, { className: "flex flex-row items-center justify-between space-y-0 pb-2", children: [
|
|
531
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.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, _chunk4UFMLTL2js.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, _chunk4UFMLTL2js.Card, { className: "cursor-pointer hover:bg-accent/50 transition-colors", onClick: onViewDetailsClick, children: [
|
|
543
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4UFMLTL2js.CardHeader, { className: "flex flex-row items-center justify-between space-y-0 pb-2", children: [
|
|
544
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.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, _chunk4UFMLTL2js.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: [
|
|
@@ -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, _chunk4UFMLTL2js.Alert, { variant: "destructive", className: "bg-red-50 border-red-200", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.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
|
+
_chunk4UFMLTL2js.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, _chunk4UFMLTL2js.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, _chunk4UFMLTL2js.Alert, { variant: "destructive", className: "bg-red-50 border-red-200", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.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, _chunk4UFMLTL2js.Button, { type: "button", variant: "outline", onClick: onCancel, disabled: isSubmitting || isLoading, children: t("ui.buttons.cancel") }),
|
|
694
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.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, _chunk4UFMLTL2js.Dialog, { open, onOpenChange, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4UFMLTL2js.DialogContent, { className: "max-w-md", children: [
|
|
712
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4UFMLTL2js.DialogHeader, { children: [
|
|
713
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.DialogTitle, { children: t("billing.ui.payment_methods.add") }),
|
|
714
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.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
|
] }) });
|
|
@@ -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, _chunk4UFMLTL2js.Card, { className: "relative", children: [
|
|
778
|
+
isDefault && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.Badge, { variant: "softGreen", className: "absolute end-2 top-2", children: t("billing.ui.payment_methods.default") }),
|
|
779
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4UFMLTL2js.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, _chunk4UFMLTL2js.DropdownMenu, { children: [
|
|
785
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.DropdownMenuTrigger, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
786
|
+
_chunk4UFMLTL2js.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, _chunk4UFMLTL2js.DropdownMenuContent, { align: "end", children: [
|
|
798
|
+
!isDefault && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.DropdownMenuItem, { onClick: handleSetDefault, disabled: loading, children: t("billing.ui.payment_methods.set_default") }),
|
|
799
799
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
800
|
-
|
|
800
|
+
_chunk4UFMLTL2js.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, _chunk4UFMLTL2js.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, _chunk4UFMLTL2js.AlertDialog, { open: showRemoveDialog, onOpenChange: setShowRemoveDialog, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4UFMLTL2js.AlertDialogContent, { children: [
|
|
820
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4UFMLTL2js.AlertDialogHeader, { children: [
|
|
821
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.AlertDialogTitle, { children: t("billing.ui.payment_methods.remove_title") }),
|
|
822
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4UFMLTL2js.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, _chunk4UFMLTL2js.AlertDialogFooter, { children: [
|
|
828
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.AlertDialogCancel, { disabled: loading, children: t("ui.buttons.cancel") }),
|
|
829
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.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
|
] });
|
|
@@ -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, _chunk4UFMLTL2js.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, _chunk4UFMLTL2js.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, _chunk4UFMLTL2js.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 = _chunk4UFMLTL2js.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, _chunk4UFMLTL2js.Dialog, { open, onOpenChange, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4UFMLTL2js.DialogContent, { className: "max-w-2xl", children: [
|
|
970
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4UFMLTL2js.DialogHeader, { children: [
|
|
971
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.DialogTitle, { children: t("billing.ui.invoice.title", { number: getInvoiceNumber() }) }),
|
|
972
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.DialogDescription, { children: _chunk4UFMLTL2js.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
|
+
_chunk4UFMLTL2js.formatDate.call(void 0, invoice.periodStart, fmt),
|
|
984
984
|
" - ",
|
|
985
|
-
|
|
985
|
+
_chunk4UFMLTL2js.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: _chunk4UFMLTL2js.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: _chunk4UFMLTL2js.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") }),
|
|
@@ -1034,15 +1034,15 @@ function InvoiceDetails({
|
|
|
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, _chunk4UFMLTL2js.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, _chunk4UFMLTL2js.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, _chunk4UFMLTL2js.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 = _chunk4UFMLTL2js.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, _chunk4UFMLTL2js.Table, { children: [
|
|
1072
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.TableHeader, { className: "bg-muted", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4UFMLTL2js.TableRow, { children: [
|
|
1073
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.TableHead, { children: t("billing.ui.columns.invoice_number") }),
|
|
1074
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.TableHead, { children: t("billing.ui.columns.date") }),
|
|
1075
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.TableHead, { children: t("billing.ui.columns.status") }),
|
|
1076
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.TableHead, { className: "text-end", children: t("billing.ui.columns.amount") }),
|
|
1077
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.TableHead, { children: t("billing.ui.columns.period") })
|
|
1078
1078
|
] }) }),
|
|
1079
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1079
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.TableBody, { children: invoices.map((invoice) => {
|
|
1080
1080
|
const invoiceNumber = getInvoiceNumber(invoice);
|
|
1081
|
-
const date =
|
|
1081
|
+
const date = _chunk4UFMLTL2js.formatDate.call(void 0, invoice.periodStart, fmt);
|
|
1082
1082
|
const amount = _chunkSQTXJPREjs.formatCurrency.call(void 0, invoice.total, invoice.currency, fmt);
|
|
1083
|
-
const period = `${
|
|
1083
|
+
const period = `${_chunk4UFMLTL2js.formatDate.call(void 0, invoice.periodStart, fmt)} - ${_chunk4UFMLTL2js.formatDate.call(void 0, invoice.periodEnd, fmt)}`;
|
|
1084
1084
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
1085
|
-
|
|
1085
|
+
_chunk4UFMLTL2js.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, _chunk4UFMLTL2js.TableCell, { className: "font-medium", children: invoiceNumber }),
|
|
1091
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.TableCell, { className: "text-muted-foreground text-xs", children: date }),
|
|
1092
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.TableCell, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, InvoiceStatusBadge, { status: invoice.status }) }),
|
|
1093
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.TableCell, { className: "text-end font-medium", children: amount }),
|
|
1094
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.TableCell, { className: "text-muted-foreground text-xs", children: period })
|
|
1095
1095
|
]
|
|
1096
1096
|
},
|
|
1097
1097
|
invoice.id
|
|
@@ -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, _chunk4UFMLTL2js.Tabs, { value: statusFilter, onValueChange: handleFilterChange, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4UFMLTL2js.TabsList, { children: [
|
|
1145
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.TabsTrigger, { value: "all", children: t("billing.ui.invoices.filter_all") }),
|
|
1146
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.TabsTrigger, { value: "paid" /* PAID */, children: t("billing.ui.invoice_status.paid") }),
|
|
1147
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.TabsTrigger, { value: "open" /* OPEN */, children: t("billing.ui.invoice_status.open") }),
|
|
1148
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.TabsTrigger, { value: "void" /* VOID */, children: t("billing.ui.invoice_status.void") }),
|
|
1149
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.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 = _chunk4UFMLTL2js.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),
|
|
@@ -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 = _chunk4UFMLTL2js.formatDate.call(void 0, subscription.currentPeriodEnd, fmt);
|
|
1215
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.Dialog, { open, onOpenChange, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4UFMLTL2js.DialogContent, { className: "max-w-md", children: [
|
|
1216
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4UFMLTL2js.DialogHeader, { children: [
|
|
1217
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.DialogTitle, { children: t("billing.ui.subscription.cancel.title") }),
|
|
1218
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.DialogDescription, { children: t("billing.ui.subscription.cancel.description") })
|
|
1219
1219
|
] }),
|
|
1220
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1220
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.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
|
+
_chunk4UFMLTL2js.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, _chunk4UFMLTL2js.Button, { type: "button", variant: "outline", onClick: () => onOpenChange(false), disabled: isSubmitting, children: t("billing.ui.subscription.cancel.keep") }),
|
|
1234
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.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, _chunk4UFMLTL2js.Badge, { variant: config.variant, children: t(config.label) });
|
|
1286
1286
|
}
|
|
1287
1287
|
_chunk7QVYU63Ejs.__name.call(void 0, SubscriptionStatusBadge, "SubscriptionStatusBadge");
|
|
1288
1288
|
|
|
@@ -1321,7 +1321,7 @@ function SubscriptionDetails({
|
|
|
1321
1321
|
renderCancelDialog
|
|
1322
1322
|
}) {
|
|
1323
1323
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
1324
|
-
const fmt =
|
|
1324
|
+
const fmt = _chunk4UFMLTL2js.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 {
|
|
@@ -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, _chunk4UFMLTL2js.Dialog, { open, onOpenChange, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4UFMLTL2js.DialogContent, { className: "max-w-2xl", children: [
|
|
1337
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4UFMLTL2js.DialogHeader, { children: [
|
|
1338
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.DialogTitle, { children: t("billing.ui.subscription.details_title") }),
|
|
1339
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.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
|
+
_chunk4UFMLTL2js.formatDate.call(void 0, subscription.currentPeriodStart, fmt),
|
|
1366
1366
|
" - ",
|
|
1367
|
-
|
|
1367
|
+
_chunk4UFMLTL2js.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: _chunk4UFMLTL2js.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: _chunk4UFMLTL2js.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, _chunk4UFMLTL2js.Button, { variant: "default", onClick: () => onChangePlan(subscription), children: t("billing.ui.subscription.change_plan") }),
|
|
1379
|
+
canCancel && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.Button, { variant: "destructive", onClick: () => setShowCancel(true), children: t("ui.buttons.cancel") }),
|
|
1380
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.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 = _chunk4UFMLTL2js.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, _chunk4UFMLTL2js.Table, { children: [
|
|
1447
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.TableHeader, { className: "bg-muted", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4UFMLTL2js.TableRow, { children: [
|
|
1448
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.TableHead, { children: t("billing.ui.columns.status") }),
|
|
1449
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.TableHead, { children: t("billing.ui.columns.plan") }),
|
|
1450
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.TableHead, { children: t("billing.ui.columns.period") }),
|
|
1451
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.TableHead, { className: "text-end", children: t("billing.ui.columns.amount") }),
|
|
1452
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.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, _chunk4UFMLTL2js.TableBody, { children: subscriptions.map((subscription) => {
|
|
1455
1455
|
const price = subscription.price;
|
|
1456
1456
|
const amount = _optionalChain([price, 'optionalAccess', _42 => _42.unitAmount]) ? _chunkSQTXJPREjs.formatCurrency.call(void 0, price.unitAmount, price.currency, fmt) : "0";
|
|
1457
|
-
const discountedAmount = price ?
|
|
1458
|
-
const period = `${
|
|
1457
|
+
const discountedAmount = price ? _chunk4UFMLTL2js.applyDiscount.call(void 0, price.unitAmount, _chunk4UFMLTL2js.subscriptionDiscount.call(void 0, subscription)) : null;
|
|
1458
|
+
const period = `${_chunk4UFMLTL2js.formatDate.call(void 0, subscription.currentPeriodStart, fmt)} - ${_chunk4UFMLTL2js.formatDate.call(void 0, subscription.currentPeriodEnd, fmt)}`;
|
|
1459
1459
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
1460
|
-
|
|
1460
|
+
_chunk4UFMLTL2js.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, _chunk4UFMLTL2js.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, _chunk4UFMLTL2js.TableCell, { className: "font-medium", children: formatPlanName3(price, t) }),
|
|
1473
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.TableCell, { className: "text-muted-foreground text-sm", children: period }),
|
|
1474
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.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
1476
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-success", children: _chunkSQTXJPREjs.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, _chunk4UFMLTL2js.TableCell, { className: "text-end", children: (subscription.status === "active" /* ACTIVE */ || subscription.status === "trialing" /* TRIALING */) && onChangePlan && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1479
|
+
_chunk4UFMLTL2js.Button,
|
|
1480
1480
|
{
|
|
1481
1481
|
size: "sm",
|
|
1482
1482
|
variant: "outline",
|
|
@@ -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, _chunk4UFMLTL2js.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, _chunk4UFMLTL2js.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, _chunk4UFMLTL2js.Tabs, { value, onValueChange: (v) => onChange(v), children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4UFMLTL2js.TabsList, { children: [
|
|
1595
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.TabsTrigger, { value: "month", children: t("billing.admin.prices.interval.month") }),
|
|
1596
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.TabsTrigger, { value: "year", children: t("billing.admin.prices.interval.year") })
|
|
1597
1597
|
] }) });
|
|
1598
1598
|
}
|
|
1599
1599
|
_chunk7QVYU63Ejs.__name.call(void 0, IntervalToggle, "IntervalToggle");
|
|
@@ -1611,7 +1611,7 @@ function PricingCard({
|
|
|
1611
1611
|
onSelect
|
|
1612
1612
|
}) {
|
|
1613
1613
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
1614
|
-
const fmt =
|
|
1614
|
+
const fmt = _chunk4UFMLTL2js.useBillingFormatOptions.call(void 0, );
|
|
1615
1615
|
const description = price.description || price.nickname || t("billing.ui.pricing.standard");
|
|
1616
1616
|
const features = price.features || [];
|
|
1617
1617
|
const formattedPrice = _chunkSQTXJPREjs.formatCurrency.call(void 0, price.unitAmount, price.currency, fmt);
|
|
@@ -1628,7 +1628,7 @@ function PricingCard({
|
|
|
1628
1628
|
}
|
|
1629
1629
|
}, "handleClick");
|
|
1630
1630
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
1631
|
-
|
|
1631
|
+
_chunk4UFMLTL2js.Card,
|
|
1632
1632
|
{
|
|
1633
1633
|
role: "radio",
|
|
1634
1634
|
"aria-checked": isSelected,
|
|
@@ -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, _chunk4UFMLTL2js.Badge, { variant: "secondary", className: "absolute top-2 end-2", children: t("billing.ui.pricing.current") }),
|
|
1650
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.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, _chunk4UFMLTL2js.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, _chunk4UFMLTL2js.CardFooter, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1662
|
+
_chunk4UFMLTL2js.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, _chunk4UFMLTL2js.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, _chunk4UFMLTL2js.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, _chunk4UFMLTL2js.Skeleton, { className: "h-6 w-24" }),
|
|
1799
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.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, _chunk4UFMLTL2js.Skeleton, { className: "h-4 w-full" }),
|
|
1802
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.Skeleton, { className: "h-4 w-3/4" })
|
|
1803
1803
|
] }),
|
|
1804
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1804
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.Skeleton, { className: "h-10 w-full" })
|
|
1805
1805
|
] }, cardIndex)) })
|
|
1806
1806
|
] }, rowIndex)) });
|
|
1807
1807
|
}
|
|
@@ -1812,7 +1812,7 @@ _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 = _chunk4UFMLTL2js.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: [
|
|
@@ -1825,7 +1825,7 @@ function ProrationPreview({ preview }) {
|
|
|
1825
1825
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-foreground", children: _chunkSQTXJPREjs.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
|
-
date:
|
|
1828
|
+
date: _chunk4UFMLTL2js.formatDate.call(void 0, preview.lineItems[0].period.end, fmt),
|
|
1829
1829
|
amount: _chunkSQTXJPREjs.formatCurrency.call(void 0, preview.amountDue, preview.currency, fmt)
|
|
1830
1830
|
}) })
|
|
1831
1831
|
] })
|
|
@@ -1839,7 +1839,7 @@ _chunk7QVYU63Ejs.__name.call(void 0, ProrationPreview, "ProrationPreview");
|
|
|
1839
1839
|
|
|
1840
1840
|
function SubscriptionConfirmation({ price, isLoading, onConfirm, onCancel }) {
|
|
1841
1841
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
1842
|
-
const fmt =
|
|
1842
|
+
const fmt = _chunk4UFMLTL2js.useBillingFormatOptions.call(void 0, );
|
|
1843
1843
|
const productName = _optionalChain([price, 'access', _51 => _51.product, 'optionalAccess', _52 => _52.name]) || price.nickname || t("billing.ui.wizard.review.selected_plan");
|
|
1844
1844
|
const productDescription = _optionalChain([price, 'access', _53 => _53.product, 'optionalAccess', _54 => _54.description]) || price.description;
|
|
1845
1845
|
const features = price.features || [];
|
|
@@ -1859,8 +1859,8 @@ function SubscriptionConfirmation({ price, isLoading, onConfirm, onCancel }) {
|
|
|
1859
1859
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { children: feature })
|
|
1860
1860
|
] }, index)) }),
|
|
1861
1861
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex justify-end gap-3 pt-2 border-t border-accent/30", children: [
|
|
1862
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1863
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1862
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.Button, { variant: "outline", onClick: onCancel, disabled: isLoading, children: t("ui.buttons.cancel") }),
|
|
1863
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.Button, { onClick: onConfirm, disabled: isLoading, children: isLoading ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
|
|
1864
1864
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Loader2, { className: "h-4 w-4 animate-spin me-2" }),
|
|
1865
1865
|
t("billing.ui.wizard.review.processing")
|
|
1866
1866
|
] }) : t("billing.ui.confirmation.subscribe") })
|
|
@@ -2398,7 +2398,7 @@ function WizardStepPlanSelection({
|
|
|
2398
2398
|
onSelectPrice: handleSelectPrice
|
|
2399
2399
|
}
|
|
2400
2400
|
),
|
|
2401
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex justify-end pt-4 border-t", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2401
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex justify-end pt-4 border-t", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.Button, { onClick: onNext, disabled: !selectedPrice || isProcessing, children: isProcessing ? t("common.loading") : t("billing.ui.wizard.next_review") }) })
|
|
2402
2402
|
] });
|
|
2403
2403
|
}
|
|
2404
2404
|
_chunk7QVYU63Ejs.__name.call(void 0, WizardStepPlanSelection, "WizardStepPlanSelection");
|
|
@@ -2468,7 +2468,7 @@ function PromoCodeInput({
|
|
|
2468
2468
|
const codeInput = /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "space-y-2", children: [
|
|
2469
2469
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex gap-2", children: [
|
|
2470
2470
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2471
|
-
|
|
2471
|
+
_chunk4UFMLTL2js.Input,
|
|
2472
2472
|
{
|
|
2473
2473
|
placeholder: t("billing.ui.promo_code.placeholder"),
|
|
2474
2474
|
value: code,
|
|
@@ -2478,7 +2478,7 @@ function PromoCodeInput({
|
|
|
2478
2478
|
className: "flex-1"
|
|
2479
2479
|
}
|
|
2480
2480
|
),
|
|
2481
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2481
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.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") })
|
|
2482
2482
|
] }),
|
|
2483
2483
|
error && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-destructive text-xs/relaxed", children: error })
|
|
2484
2484
|
] });
|
|
@@ -2507,7 +2507,7 @@ function PromoCodeInput({
|
|
|
2507
2507
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-success text-sm", children: formatDiscount(appliedCode) })
|
|
2508
2508
|
] }),
|
|
2509
2509
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2510
|
-
|
|
2510
|
+
_chunk4UFMLTL2js.Button,
|
|
2511
2511
|
{
|
|
2512
2512
|
variant: "ghost",
|
|
2513
2513
|
size: "sm",
|
|
@@ -2555,7 +2555,7 @@ function WizardStepReview({
|
|
|
2555
2555
|
isTrialUpgrade
|
|
2556
2556
|
}) {
|
|
2557
2557
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
2558
|
-
const fmt =
|
|
2558
|
+
const fmt = _chunk4UFMLTL2js.useBillingFormatOptions.call(void 0, );
|
|
2559
2559
|
const [card, setCard] = _react.useState.call(void 0, null);
|
|
2560
2560
|
_react.useEffect.call(void 0, () => {
|
|
2561
2561
|
if (!hasPaymentMethod) {
|
|
@@ -2582,11 +2582,11 @@ function WizardStepReview({
|
|
|
2582
2582
|
const interval = _optionalChain([price, 'access', _93 => _93.recurring, 'optionalAccess', _94 => _94.interval]) || "month";
|
|
2583
2583
|
return interval === "year" ? t("billing.ui.wizard.review.interval_yearly") : t("billing.ui.wizard.review.interval_monthly");
|
|
2584
2584
|
}, "formatInterval");
|
|
2585
|
-
const codeDiscount =
|
|
2586
|
-
const carriedDiscount = isChangingPlan && !codeDiscount ?
|
|
2585
|
+
const codeDiscount = _chunk4UFMLTL2js.promotionCodeDiscount.call(void 0, promotionCode);
|
|
2586
|
+
const carriedDiscount = isChangingPlan && !codeDiscount ? _chunk4UFMLTL2js.subscriptionDiscount.call(void 0, subscription) : null;
|
|
2587
2587
|
const discount = _nullishCoalesce(codeDiscount, () => ( carriedDiscount));
|
|
2588
|
-
const discountedPrice =
|
|
2589
|
-
const discountedImmediateCharge =
|
|
2588
|
+
const discountedPrice = _chunk4UFMLTL2js.applyDiscount.call(void 0, selectedPrice.unitAmount, discount);
|
|
2589
|
+
const discountedImmediateCharge = _chunk4UFMLTL2js.applyDiscount.call(void 0, _optionalChain([prorationPreview, 'optionalAccess', _95 => _95.immediateCharge]), discount);
|
|
2590
2590
|
const getDiscountDescription = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, () => {
|
|
2591
2591
|
if (!discount) return null;
|
|
2592
2592
|
if (discount.discountType === "percent_off") {
|
|
@@ -2599,7 +2599,7 @@ function WizardStepReview({
|
|
|
2599
2599
|
const discountDescription = getDiscountDescription();
|
|
2600
2600
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "space-y-6", children: [
|
|
2601
2601
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "bg-muted/50 rounded-lg p-4 space-y-3", children: [
|
|
2602
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2602
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.SectionHeader, { children: t("billing.ui.wizard.review.selected_plan") }),
|
|
2603
2603
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex justify-between items-center", children: [
|
|
2604
2604
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { children: [
|
|
2605
2605
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "font-medium", children: _optionalChain([selectedPrice, 'access', _96 => _96.product, 'optionalAccess', _97 => _97.name]) }),
|
|
@@ -2609,7 +2609,7 @@ function WizardStepReview({
|
|
|
2609
2609
|
discountedPrice !== null ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
|
|
2610
2610
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-sm text-muted-foreground line-through", children: _chunkSQTXJPREjs.formatCurrency.call(void 0, selectedPrice.unitAmount || 0, selectedPrice.currency, fmt) }),
|
|
2611
2611
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-success text-lg font-semibold", children: _chunkSQTXJPREjs.formatCurrency.call(void 0, discountedPrice, selectedPrice.currency, fmt) }),
|
|
2612
|
-
discountDescription && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2612
|
+
discountDescription && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.Badge, { variant: "softGreen", children: discountDescription }),
|
|
2613
2613
|
carriedDiscount && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-sm text-muted-foreground", children: t("billing.ui.wizard.review.discount_carries_over") })
|
|
2614
2614
|
] }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "font-semibold text-lg", children: _chunkSQTXJPREjs.formatCurrency.call(void 0, selectedPrice.unitAmount || 0, selectedPrice.currency, fmt) }),
|
|
2615
2615
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-sm text-muted-foreground", children: formatInterval2(selectedPrice) })
|
|
@@ -2652,15 +2652,15 @@ function WizardStepReview({
|
|
|
2652
2652
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h4", { className: "font-medium", children: t("billing.ui.payment_method.title") }),
|
|
2653
2653
|
/* @__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") })
|
|
2654
2654
|
] }),
|
|
2655
|
-
hasPaymentMethod ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2655
|
+
hasPaymentMethod ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.Button, { variant: "outline", onClick: onAddPaymentMethod, disabled: isProcessing, children: t("billing.ui.wizard.review.use_another_card") }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.Button, { variant: "outline", onClick: onAddPaymentMethod, children: t("billing.ui.payment_methods.add") })
|
|
2656
2656
|
] }) }),
|
|
2657
|
-
error && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
2657
|
+
error && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4UFMLTL2js.Alert, { variant: "destructive", children: [
|
|
2658
2658
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.AlertCircle, { className: "h-4 w-4" }),
|
|
2659
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2659
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.AlertDescription, { children: error })
|
|
2660
2660
|
] }),
|
|
2661
2661
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex justify-between pt-4 border-t", children: [
|
|
2662
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2663
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2662
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.Button, { variant: "outline", onClick: onBack, disabled: isProcessing, children: t("billing.ui.wizard.back") }),
|
|
2663
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.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") })
|
|
2664
2664
|
] })
|
|
2665
2665
|
] });
|
|
2666
2666
|
}
|
|
@@ -2673,7 +2673,7 @@ function WizardStepPaymentMethod({ onBack, onSuccess, isProcessing }) {
|
|
|
2673
2673
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
2674
2674
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "space-y-6", children: [
|
|
2675
2675
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "text-center", children: [
|
|
2676
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2676
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.SectionHeader, { children: t("billing.ui.payment_methods.add") }),
|
|
2677
2677
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-sm text-muted-foreground", children: t("billing.ui.wizard.payment_description") })
|
|
2678
2678
|
] }),
|
|
2679
2679
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, PaymentMethodForm, { onSuccess, onCancel: onBack, isLoading: isProcessing, alwaysSetDefault: true })
|
|
@@ -2716,10 +2716,10 @@ function SubscriptionWizard({
|
|
|
2716
2716
|
const isChangePlanMode = !!subscription;
|
|
2717
2717
|
const dialogTitle = subscription ? t("billing.ui.wizard.change_title") : isPurchasingAddons ? t("billing.ui.subscriptions.purchase_addons") : t("billing.ui.subscriptions.subscribe");
|
|
2718
2718
|
const dialogDescription = subscription ? t("billing.ui.wizard.change_description") : isPurchasingAddons ? t("billing.ui.wizard.addons_description") : t("billing.ui.wizard.subscribe_description");
|
|
2719
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2720
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
2721
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2722
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2719
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.Dialog, { open, onOpenChange, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4UFMLTL2js.DialogContent, { className: "max-w-2xl max-h-[90vh] overflow-y-auto", children: [
|
|
2720
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4UFMLTL2js.DialogHeader, { children: [
|
|
2721
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.DialogTitle, { children: dialogTitle }),
|
|
2722
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.DialogDescription, { children: dialogDescription })
|
|
2723
2723
|
] }),
|
|
2724
2724
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, WizardProgressIndicator, { currentStep: state.step }),
|
|
2725
2725
|
state.step === "plan-selection" && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
@@ -2798,7 +2798,7 @@ function formatDate2(date, { locale, t }) {
|
|
|
2798
2798
|
_chunk7QVYU63Ejs.__name.call(void 0, formatDate2, "formatDate");
|
|
2799
2799
|
function UsageSummaryCard({ meter, summary }) {
|
|
2800
2800
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
2801
|
-
const fmt =
|
|
2801
|
+
const fmt = _chunk4UFMLTL2js.useBillingFormatOptions.call(void 0, );
|
|
2802
2802
|
const currentUsage = _nullishCoalesce(_optionalChain([summary, 'optionalAccess', _100 => _100.aggregatedValue]), () => ( 0));
|
|
2803
2803
|
const limit = meter.limit;
|
|
2804
2804
|
const percentage = limit && limit > 0 ? currentUsage / limit * 100 : null;
|
|
@@ -2806,15 +2806,15 @@ function UsageSummaryCard({ meter, summary }) {
|
|
|
2806
2806
|
const progressWidth = percentage !== null ? Math.min(percentage, 100) : 0;
|
|
2807
2807
|
const displayName = meter.displayName || meter.eventName;
|
|
2808
2808
|
const hasLimit = limit !== null && limit !== void 0;
|
|
2809
|
-
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
2810
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
2809
|
+
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4UFMLTL2js.Card, { children: [
|
|
2810
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4UFMLTL2js.CardHeader, { className: "flex flex-row items-center gap-x-3 pb-3", children: [
|
|
2811
2811
|
/* @__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" }) }),
|
|
2812
2812
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col", children: [
|
|
2813
2813
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h3", { className: "text-sm font-medium", children: displayName }),
|
|
2814
2814
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-muted-foreground text-xs", children: meter.id })
|
|
2815
2815
|
] })
|
|
2816
2816
|
] }),
|
|
2817
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
2817
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4UFMLTL2js.CardContent, { className: "flex flex-col gap-y-4", children: [
|
|
2818
2818
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { children: [
|
|
2819
2819
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-3xl font-bold", children: currentUsage.toLocaleString(fmt.locale) }),
|
|
2820
2820
|
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) }) })
|
|
@@ -2933,27 +2933,27 @@ function formatDateTime(date, { locale, t }) {
|
|
|
2933
2933
|
_chunk7QVYU63Ejs.__name.call(void 0, formatDateTime, "formatDateTime");
|
|
2934
2934
|
function UsageHistoryTable({ usageRecords }) {
|
|
2935
2935
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
2936
|
-
const fmt =
|
|
2936
|
+
const fmt = _chunk4UFMLTL2js.useBillingFormatOptions.call(void 0, );
|
|
2937
2937
|
if (usageRecords.length === 0) {
|
|
2938
2938
|
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") }) });
|
|
2939
2939
|
}
|
|
2940
2940
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-full flex-col gap-y-4", children: [
|
|
2941
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2942
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "overflow-clip rounded-lg border", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
2943
|
-
/* @__PURE__ */ _jsxruntime.jsx.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,
|
|
2941
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.SectionHeader, { level: 2, children: t("billing.ui.usage.history_title") }),
|
|
2942
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "overflow-clip rounded-lg border", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4UFMLTL2js.Table, { children: [
|
|
2943
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.TableHeader, { className: "bg-muted", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4UFMLTL2js.TableRow, { children: [
|
|
2944
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.TableHead, { children: t("billing.ui.columns.date_time") }),
|
|
2945
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.TableHead, { children: t("billing.ui.columns.meter_event") }),
|
|
2946
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.TableHead, { className: "text-end", children: t("billing.ui.columns.quantity") }),
|
|
2947
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.TableHead, { children: t("billing.ui.columns.event_id") })
|
|
2948
2948
|
] }) }),
|
|
2949
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2949
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.TableBody, { children: usageRecords.map((record) => {
|
|
2950
2950
|
const dateTime = formatDateTime(record.timestamp, fmt);
|
|
2951
2951
|
const quantity = record.quantity.toLocaleString(fmt.locale);
|
|
2952
|
-
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
2953
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2954
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2955
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2956
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2952
|
+
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4UFMLTL2js.TableRow, { children: [
|
|
2953
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.TableCell, { className: "font-medium", children: dateTime }),
|
|
2954
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.TableCell, { className: "text-muted-foreground", children: record.meterEventName }),
|
|
2955
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.TableCell, { className: "text-end font-medium", children: quantity }),
|
|
2956
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.TableCell, { className: "text-muted-foreground text-sm tabular-nums", children: record.stripeEventId })
|
|
2957
2957
|
] }, record.id);
|
|
2958
2958
|
}) })
|
|
2959
2959
|
] }) })
|
|
@@ -2964,8 +2964,8 @@ _chunk7QVYU63Ejs.__name.call(void 0, UsageHistoryTable, "UsageHistoryTable");
|
|
|
2964
2964
|
// src/features/billing/components/modals/BillingDetailModal.tsx
|
|
2965
2965
|
|
|
2966
2966
|
function BillingDetailModal({ open, onOpenChange, title, children, className }) {
|
|
2967
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2968
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2967
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.Dialog, { open, onOpenChange, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4UFMLTL2js.DialogContent, { className: _nullishCoalesce(className, () => ( "max-w-4xl max-h-[90vh] overflow-y-auto")), children: [
|
|
2968
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.DialogHeader, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.DialogTitle, { children: title }) }),
|
|
2969
2969
|
children
|
|
2970
2970
|
] }) });
|
|
2971
2971
|
}
|
|
@@ -2993,7 +2993,7 @@ function BillingAlertBanner({ subscription, onUpdatePayment, onAddPayment }) {
|
|
|
2993
2993
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h3", { className: "text-destructive text-sm font-medium", children: t("billing.ui.alert.payment_failed_title") }),
|
|
2994
2994
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-destructive mt-1 text-sm", children: t("billing.ui.alert.payment_failed_description") })
|
|
2995
2995
|
] }),
|
|
2996
|
-
onUpdatePayment && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2996
|
+
onUpdatePayment && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.Button, { variant: "outline", size: "sm", onClick: onUpdatePayment, className: "text-destructive border-red-300", children: t("billing.ui.alert.update_payment_method") })
|
|
2997
2997
|
] });
|
|
2998
2998
|
}
|
|
2999
2999
|
if (subscription.status === "trialing" /* TRIALING */ && subscription.trialEnd) {
|
|
@@ -3007,7 +3007,7 @@ function BillingAlertBanner({ subscription, onUpdatePayment, onAddPayment }) {
|
|
|
3007
3007
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h3", { className: "text-warning text-sm font-medium", children: t("billing.ui.alert.trial_ending_title") }),
|
|
3008
3008
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-warning mt-1 text-sm", children: t("billing.ui.alert.trial_ending_description", { count: daysRemaining }) })
|
|
3009
3009
|
] }),
|
|
3010
|
-
onAddPayment && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
3010
|
+
onAddPayment && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.Button, { variant: "outline", size: "sm", onClick: onAddPayment, className: "text-warning border-yellow-300", children: t("billing.ui.payment_methods.add") })
|
|
3011
3011
|
] });
|
|
3012
3012
|
}
|
|
3013
3013
|
}
|
|
@@ -3248,18 +3248,18 @@ function BillingDashboardContainer({ renderCancelDialog } = {}) {
|
|
|
3248
3248
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Wallet, { className: "h-8 w-8" }),
|
|
3249
3249
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h1", { className: "text-primary text-3xl font-semibold", children: t("billing.title") })
|
|
3250
3250
|
] }),
|
|
3251
|
-
isInitialLoading && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
3252
|
-
noCustomerExists && !isInitialLoading && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
3253
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
3251
|
+
isInitialLoading && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.Card, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.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" }) }) }),
|
|
3252
|
+
noCustomerExists && !isInitialLoading && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4UFMLTL2js.Card, { children: [
|
|
3253
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4UFMLTL2js.CardHeader, { className: "text-center", children: [
|
|
3254
3254
|
/* @__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" }) }),
|
|
3255
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
3256
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
3255
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.CardTitle, { children: t("billing.ui.dashboard.setup_title") }),
|
|
3256
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.CardDescription, { children: t("billing.ui.dashboard.setup_description") })
|
|
3257
3257
|
] }),
|
|
3258
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
3258
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.CardContent, { className: "flex justify-center pb-8", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.Button, { onClick: handleCreateCustomer, disabled: creatingCustomer, size: "lg", children: creatingCustomer ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
|
|
3259
3259
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Loader2, { className: "me-2 h-4 w-4 animate-spin" }),
|
|
3260
3260
|
t("billing.ui.dashboard.setting_up")
|
|
3261
3261
|
] }) : t("billing.ui.dashboard.setup_button") }) }),
|
|
3262
|
-
errors.customer && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
3262
|
+
errors.customer && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.CardContent, { className: "pt-0", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-center text-destructive text-xs/relaxed", children: t(errors.customer) }) })
|
|
3263
3263
|
] }),
|
|
3264
3264
|
!noCustomerExists && !isInitialLoading && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
|
|
3265
3265
|
criticalSubscriptions.map((subscription) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
@@ -3429,18 +3429,18 @@ _chunk7QVYU63Ejs.__name.call(void 0, isStripeConfigured, "isStripeConfigured");
|
|
|
3429
3429
|
|
|
3430
3430
|
function PriceArchiver({ price }) {
|
|
3431
3431
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
3432
|
-
const fmt =
|
|
3432
|
+
const fmt = _chunk4UFMLTL2js.useBillingFormatOptions.call(void 0, );
|
|
3433
3433
|
const { archivePrice, restorePrice } = usePriceContext();
|
|
3434
3434
|
const [open, setOpen] = _react.useState.call(void 0, false);
|
|
3435
3435
|
const isArchived = !price.active;
|
|
3436
3436
|
const scope = isArchived ? "restore" : "archive";
|
|
3437
3437
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
|
|
3438
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
3438
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4UFMLTL2js.Button, { variant: "outline", size: "sm", onClick: () => setOpen(true), children: [
|
|
3439
3439
|
isArchived ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.RotateCcwIcon, {}) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.ArchiveIcon, {}),
|
|
3440
3440
|
t(`billing.admin.prices.${scope}.confirm`)
|
|
3441
3441
|
] }),
|
|
3442
3442
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
3443
|
-
|
|
3443
|
+
_chunk4UFMLTL2js.ConfirmDialog,
|
|
3444
3444
|
{
|
|
3445
3445
|
open,
|
|
3446
3446
|
onOpenChange: setOpen,
|
|
@@ -3454,7 +3454,7 @@ function PriceArchiver({ price }) {
|
|
|
3454
3454
|
if (isArchived) await restorePrice(price.id);
|
|
3455
3455
|
else await archivePrice(price.id);
|
|
3456
3456
|
} catch (error) {
|
|
3457
|
-
|
|
3457
|
+
_chunk4UFMLTL2js.errorToast.call(void 0, { title: t(`billing.admin.prices.${scope}.title`), error });
|
|
3458
3458
|
throw error;
|
|
3459
3459
|
}
|
|
3460
3460
|
}
|
|
@@ -3486,7 +3486,7 @@ function PriceEditorInternal({
|
|
|
3486
3486
|
onDialogOpenChange
|
|
3487
3487
|
}) {
|
|
3488
3488
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
3489
|
-
const fmt =
|
|
3489
|
+
const fmt = _chunk4UFMLTL2js.useBillingFormatOptions.call(void 0, );
|
|
3490
3490
|
const router = _chunkSQTXJPREjs.useI18nRouter.call(void 0, );
|
|
3491
3491
|
const { createPrice, updatePrice, productId: contextProductId } = usePriceContext();
|
|
3492
3492
|
const [allFeatures, setAllFeatures] = _react.useState.call(void 0, []);
|
|
@@ -3628,7 +3628,7 @@ function PriceEditorInternal({
|
|
|
3628
3628
|
{ id: "metered", text: t("billing.admin.prices.usage.metered") }
|
|
3629
3629
|
];
|
|
3630
3630
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
3631
|
-
|
|
3631
|
+
_chunk4UFMLTL2js.EditorSheet,
|
|
3632
3632
|
{
|
|
3633
3633
|
form,
|
|
3634
3634
|
entityType: t("billing.admin.prices.entity"),
|
|
@@ -3683,13 +3683,13 @@ function PriceEditorInternal({
|
|
|
3683
3683
|
dialogOpen,
|
|
3684
3684
|
onDialogOpenChange,
|
|
3685
3685
|
children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-full flex-col gap-y-4", children: [
|
|
3686
|
-
isEdit && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
3687
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
3688
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
3686
|
+
isEdit && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4UFMLTL2js.Alert, { children: [
|
|
3687
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.AlertTitle, { children: t("billing.admin.prices.immutability.title") }),
|
|
3688
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.AlertDescription, { children: t("billing.admin.prices.immutability.description") })
|
|
3689
3689
|
] }),
|
|
3690
3690
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "grid grid-cols-2 gap-x-4", children: [
|
|
3691
3691
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
3692
|
-
|
|
3692
|
+
_chunk4UFMLTL2js.FormInput,
|
|
3693
3693
|
{
|
|
3694
3694
|
form,
|
|
3695
3695
|
id: "unitAmount",
|
|
@@ -3701,7 +3701,7 @@ function PriceEditorInternal({
|
|
|
3701
3701
|
}
|
|
3702
3702
|
),
|
|
3703
3703
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
3704
|
-
|
|
3704
|
+
_chunk4UFMLTL2js.FormSelect,
|
|
3705
3705
|
{
|
|
3706
3706
|
form,
|
|
3707
3707
|
id: "currency",
|
|
@@ -3712,7 +3712,7 @@ function PriceEditorInternal({
|
|
|
3712
3712
|
)
|
|
3713
3713
|
] }),
|
|
3714
3714
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
3715
|
-
|
|
3715
|
+
_chunk4UFMLTL2js.FormSelect,
|
|
3716
3716
|
{
|
|
3717
3717
|
form,
|
|
3718
3718
|
id: "interval",
|
|
@@ -3723,7 +3723,7 @@ function PriceEditorInternal({
|
|
|
3723
3723
|
),
|
|
3724
3724
|
isRecurring && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "grid grid-cols-2 gap-x-4", children: [
|
|
3725
3725
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
3726
|
-
|
|
3726
|
+
_chunk4UFMLTL2js.FormInput,
|
|
3727
3727
|
{
|
|
3728
3728
|
form,
|
|
3729
3729
|
id: "intervalCount",
|
|
@@ -3734,7 +3734,7 @@ function PriceEditorInternal({
|
|
|
3734
3734
|
}
|
|
3735
3735
|
),
|
|
3736
3736
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
3737
|
-
|
|
3737
|
+
_chunk4UFMLTL2js.FormSelect,
|
|
3738
3738
|
{
|
|
3739
3739
|
form,
|
|
3740
3740
|
id: "usageType",
|
|
@@ -3745,7 +3745,7 @@ function PriceEditorInternal({
|
|
|
3745
3745
|
)
|
|
3746
3746
|
] }),
|
|
3747
3747
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
3748
|
-
|
|
3748
|
+
_chunk4UFMLTL2js.FormInput,
|
|
3749
3749
|
{
|
|
3750
3750
|
form,
|
|
3751
3751
|
id: "nickname",
|
|
@@ -3754,7 +3754,7 @@ function PriceEditorInternal({
|
|
|
3754
3754
|
}
|
|
3755
3755
|
),
|
|
3756
3756
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
3757
|
-
|
|
3757
|
+
_chunk4UFMLTL2js.FormTextarea,
|
|
3758
3758
|
{
|
|
3759
3759
|
form,
|
|
3760
3760
|
id: "description",
|
|
@@ -3764,7 +3764,7 @@ function PriceEditorInternal({
|
|
|
3764
3764
|
}
|
|
3765
3765
|
),
|
|
3766
3766
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
3767
|
-
|
|
3767
|
+
_chunk4UFMLTL2js.FormInput,
|
|
3768
3768
|
{
|
|
3769
3769
|
form,
|
|
3770
3770
|
id: "token",
|
|
@@ -3774,10 +3774,10 @@ function PriceEditorInternal({
|
|
|
3774
3774
|
}
|
|
3775
3775
|
),
|
|
3776
3776
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-y-2", children: [
|
|
3777
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
3777
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.FieldLabel, { children: t("billing.admin.prices.fields.features") }),
|
|
3778
3778
|
form.watch("features").map((_, index) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex gap-2", children: [
|
|
3779
3779
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
3780
|
-
|
|
3780
|
+
_chunk4UFMLTL2js.Input,
|
|
3781
3781
|
{
|
|
3782
3782
|
...form.register(`features.${index}`),
|
|
3783
3783
|
placeholder: t("billing.admin.prices.placeholders.feature", { index: index + 1 }),
|
|
@@ -3785,7 +3785,7 @@ function PriceEditorInternal({
|
|
|
3785
3785
|
}
|
|
3786
3786
|
),
|
|
3787
3787
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
3788
|
-
|
|
3788
|
+
_chunk4UFMLTL2js.Button,
|
|
3789
3789
|
{
|
|
3790
3790
|
type: "button",
|
|
3791
3791
|
variant: "outline",
|
|
@@ -3800,7 +3800,7 @@ function PriceEditorInternal({
|
|
|
3800
3800
|
)
|
|
3801
3801
|
] }, index)),
|
|
3802
3802
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
3803
|
-
|
|
3803
|
+
_chunk4UFMLTL2js.Button,
|
|
3804
3804
|
{
|
|
3805
3805
|
type: "button",
|
|
3806
3806
|
variant: "outline",
|
|
@@ -3815,12 +3815,12 @@ function PriceEditorInternal({
|
|
|
3815
3815
|
)
|
|
3816
3816
|
] }),
|
|
3817
3817
|
isRecurring && allFeatures.length > 0 && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-y-2", children: [
|
|
3818
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
3818
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.FieldLabel, { children: t("billing.admin.prices.fields.platformFeatures") }),
|
|
3819
3819
|
/* @__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) => {
|
|
3820
3820
|
const isChecked = form.watch("featureIds").includes(feature.id);
|
|
3821
3821
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-x-2", children: [
|
|
3822
3822
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
3823
|
-
|
|
3823
|
+
_chunk4UFMLTL2js.Checkbox,
|
|
3824
3824
|
{
|
|
3825
3825
|
id: `feature-${feature.id}`,
|
|
3826
3826
|
checked: isChecked,
|
|
@@ -3836,13 +3836,13 @@ function PriceEditorInternal({
|
|
|
3836
3836
|
}
|
|
3837
3837
|
}
|
|
3838
3838
|
),
|
|
3839
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
3839
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.FieldLabel, { htmlFor: `feature-${feature.id}`, children: feature.name }),
|
|
3840
3840
|
feature.isCore && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-muted-foreground text-xs", children: t("billing.admin.prices.help.core") })
|
|
3841
3841
|
] }, feature.id);
|
|
3842
3842
|
}) })
|
|
3843
3843
|
] }),
|
|
3844
3844
|
isRecurring && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
3845
|
-
|
|
3845
|
+
_chunk4UFMLTL2js.FormCheckbox,
|
|
3846
3846
|
{
|
|
3847
3847
|
form,
|
|
3848
3848
|
id: "isTrial",
|
|
@@ -3895,9 +3895,9 @@ var PriceProvider = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, ({
|
|
|
3895
3895
|
productId: productIdProp
|
|
3896
3896
|
}) => {
|
|
3897
3897
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
3898
|
-
const fmt =
|
|
3899
|
-
const generateUrl =
|
|
3900
|
-
const { hasRole } =
|
|
3898
|
+
const fmt = _chunk4UFMLTL2js.useBillingFormatOptions.call(void 0, );
|
|
3899
|
+
const generateUrl = _chunk4UFMLTL2js.usePageUrlGenerator.call(void 0, );
|
|
3900
|
+
const { hasRole } = _chunk4UFMLTL2js.useCurrentUserContext.call(void 0, );
|
|
3901
3901
|
const [price, setPrice] = _react.useState.call(void 0,
|
|
3902
3902
|
dehydratedPrice ? _chunkSQTXJPREjs.rehydrate.call(void 0, _chunkSQTXJPREjs.Modules.StripePrice, dehydratedPrice) : void 0
|
|
3903
3903
|
);
|
|
@@ -3985,7 +3985,7 @@ var PriceProvider = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, ({
|
|
|
3985
3985
|
}
|
|
3986
3986
|
return response;
|
|
3987
3987
|
}, "title");
|
|
3988
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
3988
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.SharedProvider, { value: { breadcrumbs: breadcrumb(), title: title() }, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, PriceContext.Provider, { value, children }) });
|
|
3989
3989
|
}, "PriceProvider");
|
|
3990
3990
|
var usePriceContext = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, () => _nullishCoalesce(_react.useContext.call(void 0, PriceContext), () => ( defaultContextValue)), "usePriceContext");
|
|
3991
3991
|
|
|
@@ -4005,12 +4005,12 @@ function ProductArchiver({ product }) {
|
|
|
4005
4005
|
const isArchived = !product.active;
|
|
4006
4006
|
const scope = isArchived ? "restore" : "archive";
|
|
4007
4007
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
|
|
4008
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
4008
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4UFMLTL2js.Button, { variant: "outline", size: "sm", onClick: () => setOpen(true), children: [
|
|
4009
4009
|
isArchived ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.RotateCcwIcon, {}) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.ArchiveIcon, {}),
|
|
4010
4010
|
t(`billing.admin.products.${scope}.confirm`)
|
|
4011
4011
|
] }),
|
|
4012
4012
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4013
|
-
|
|
4013
|
+
_chunk4UFMLTL2js.ConfirmDialog,
|
|
4014
4014
|
{
|
|
4015
4015
|
open,
|
|
4016
4016
|
onOpenChange: setOpen,
|
|
@@ -4024,7 +4024,7 @@ function ProductArchiver({ product }) {
|
|
|
4024
4024
|
if (isArchived) await restoreProduct(product.id);
|
|
4025
4025
|
else await archiveProduct(product.id);
|
|
4026
4026
|
} catch (error) {
|
|
4027
|
-
|
|
4027
|
+
_chunk4UFMLTL2js.errorToast.call(void 0, { title: t(`billing.admin.products.${scope}.title`), error });
|
|
4028
4028
|
throw error;
|
|
4029
4029
|
}
|
|
4030
4030
|
}
|
|
@@ -4077,7 +4077,7 @@ function ProductEditorInternal({
|
|
|
4077
4077
|
defaultValues: getDefaultValues()
|
|
4078
4078
|
});
|
|
4079
4079
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4080
|
-
|
|
4080
|
+
_chunk4UFMLTL2js.EditorSheet,
|
|
4081
4081
|
{
|
|
4082
4082
|
form,
|
|
4083
4083
|
entityType: t("billing.admin.products.entity"),
|
|
@@ -4100,7 +4100,7 @@ function ProductEditorInternal({
|
|
|
4100
4100
|
onDialogOpenChange,
|
|
4101
4101
|
children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-full flex-col gap-y-4", children: [
|
|
4102
4102
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4103
|
-
|
|
4103
|
+
_chunk4UFMLTL2js.FormInput,
|
|
4104
4104
|
{
|
|
4105
4105
|
form,
|
|
4106
4106
|
id: "name",
|
|
@@ -4110,7 +4110,7 @@ function ProductEditorInternal({
|
|
|
4110
4110
|
}
|
|
4111
4111
|
),
|
|
4112
4112
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4113
|
-
|
|
4113
|
+
_chunk4UFMLTL2js.FormTextarea,
|
|
4114
4114
|
{
|
|
4115
4115
|
form,
|
|
4116
4116
|
id: "description",
|
|
@@ -4154,8 +4154,8 @@ var defaultContextValue2 = {
|
|
|
4154
4154
|
};
|
|
4155
4155
|
var ProductProvider = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, ({ children, dehydratedProduct, publishChrome = true }) => {
|
|
4156
4156
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
4157
|
-
const generateUrl =
|
|
4158
|
-
const { hasRole } =
|
|
4157
|
+
const generateUrl = _chunk4UFMLTL2js.usePageUrlGenerator.call(void 0, );
|
|
4158
|
+
const { hasRole } = _chunk4UFMLTL2js.useCurrentUserContext.call(void 0, );
|
|
4159
4159
|
const [product, setProduct] = _react.useState.call(void 0,
|
|
4160
4160
|
dehydratedProduct ? _chunkSQTXJPREjs.rehydrate.call(void 0, _chunkSQTXJPREjs.Modules.StripeProduct, dehydratedProduct) : void 0
|
|
4161
4161
|
);
|
|
@@ -4249,7 +4249,7 @@ var ProductProvider = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, ({ ch
|
|
|
4249
4249
|
}
|
|
4250
4250
|
return response;
|
|
4251
4251
|
}, "title");
|
|
4252
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4252
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.SharedProvider, { value: { breadcrumbs: breadcrumb(), title: title() }, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ProductContext.Provider, { value, children }) });
|
|
4253
4253
|
}, "ProductProvider");
|
|
4254
4254
|
var useProductContext = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, () => _nullishCoalesce(_react.useContext.call(void 0, ProductContext), () => ( defaultContextValue2)), "useProductContext");
|
|
4255
4255
|
|
|
@@ -4258,57 +4258,57 @@ var useProductContext = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, ()
|
|
|
4258
4258
|
|
|
4259
4259
|
function PriceDetails() {
|
|
4260
4260
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
4261
|
-
const fmt =
|
|
4262
|
-
const generateUrl =
|
|
4261
|
+
const fmt = _chunk4UFMLTL2js.useBillingFormatOptions.call(void 0, );
|
|
4262
|
+
const generateUrl = _chunk4UFMLTL2js.usePageUrlGenerator.call(void 0, );
|
|
4263
4263
|
const { price } = usePriceContext();
|
|
4264
4264
|
if (!price) return null;
|
|
4265
4265
|
const isRecurring = price.priceType === "recurring";
|
|
4266
4266
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-full flex-col gap-y-8", children: [
|
|
4267
4267
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-full flex-col gap-y-4", children: [
|
|
4268
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4268
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.SectionHeader, { children: t("billing.admin.prices.title") }),
|
|
4269
4269
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "grid grid-cols-1 gap-4 md:grid-cols-2", children: [
|
|
4270
4270
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4271
|
-
|
|
4271
|
+
_chunk4UFMLTL2js.DetailField,
|
|
4272
4272
|
{
|
|
4273
4273
|
label: t("billing.admin.prices.fields.product"),
|
|
4274
|
-
value: price.product ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4274
|
+
value: price.product ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.Link, { href: generateUrl({ page: _chunkSQTXJPREjs.Modules.StripeProduct, id: price.product.id }), children: price.product.name }) : "\u2014"
|
|
4275
4275
|
}
|
|
4276
4276
|
),
|
|
4277
4277
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4278
|
-
|
|
4278
|
+
_chunk4UFMLTL2js.DetailField,
|
|
4279
4279
|
{
|
|
4280
4280
|
label: t("billing.admin.prices.fields.status"),
|
|
4281
4281
|
value: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "flex flex-wrap items-center gap-1", children: [
|
|
4282
|
-
price.active ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4283
|
-
price.isTrial && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4282
|
+
price.active ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.Badge, { variant: "softGreen", children: t("billing.admin.prices.status.active") }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.Badge, { variant: "softGray", children: t("billing.admin.prices.status.archived") }),
|
|
4283
|
+
price.isTrial && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.Badge, { variant: "softBlue", children: t("billing.admin.prices.badge.trial") })
|
|
4284
4284
|
] })
|
|
4285
4285
|
}
|
|
4286
4286
|
),
|
|
4287
4287
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4288
|
-
|
|
4288
|
+
_chunk4UFMLTL2js.DetailField,
|
|
4289
4289
|
{
|
|
4290
4290
|
label: t("billing.admin.prices.fields.amount"),
|
|
4291
4291
|
value: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "tabular-nums", children: _chunkSQTXJPREjs.formatCurrency.call(void 0, price.unitAmount, price.currency, fmt) })
|
|
4292
4292
|
}
|
|
4293
4293
|
),
|
|
4294
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4294
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.DetailField, { label: t("billing.admin.prices.fields.currency"), value: price.currency.toUpperCase() }),
|
|
4295
4295
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4296
|
-
|
|
4296
|
+
_chunk4UFMLTL2js.DetailField,
|
|
4297
4297
|
{
|
|
4298
4298
|
label: t("billing.admin.prices.fields.type"),
|
|
4299
4299
|
value: isRecurring ? t("billing.admin.prices.type.recurring") : t("billing.admin.prices.type.oneTime")
|
|
4300
4300
|
}
|
|
4301
4301
|
),
|
|
4302
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4302
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.DetailField, { label: t("billing.admin.prices.fields.billing"), value: _chunkSQTXJPREjs.formatInterval.call(void 0, price, fmt) }),
|
|
4303
4303
|
isRecurring && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4304
|
-
|
|
4304
|
+
_chunk4UFMLTL2js.DetailField,
|
|
4305
4305
|
{
|
|
4306
4306
|
label: t("billing.admin.prices.fields.intervalCount"),
|
|
4307
4307
|
value: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "tabular-nums", children: _nullishCoalesce(_optionalChain([price, 'access', _162 => _162.recurring, 'optionalAccess', _163 => _163.intervalCount]), () => ( 1)) })
|
|
4308
4308
|
}
|
|
4309
4309
|
),
|
|
4310
4310
|
isRecurring && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4311
|
-
|
|
4311
|
+
_chunk4UFMLTL2js.DetailField,
|
|
4312
4312
|
{
|
|
4313
4313
|
label: t("billing.admin.prices.fields.usageType"),
|
|
4314
4314
|
value: _optionalChain([price, 'access', _164 => _164.recurring, 'optionalAccess', _165 => _165.usageType]) === "metered" ? t("billing.admin.prices.usage.metered") : t("billing.admin.prices.usage.licensed")
|
|
@@ -4317,24 +4317,24 @@ function PriceDetails() {
|
|
|
4317
4317
|
] })
|
|
4318
4318
|
] }),
|
|
4319
4319
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-full flex-col gap-y-4", children: [
|
|
4320
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4320
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.SectionHeader, { children: t("billing.admin.prices.fields.platformFeatures") }),
|
|
4321
4321
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "grid grid-cols-1 gap-4 md:grid-cols-2", children: [
|
|
4322
4322
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4323
|
-
|
|
4323
|
+
_chunk4UFMLTL2js.DetailField,
|
|
4324
4324
|
{
|
|
4325
4325
|
label: t("billing.admin.prices.fields.token"),
|
|
4326
4326
|
value: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "tabular-nums", children: _nullishCoalesce(price.token, () => ( "\u2014")) })
|
|
4327
4327
|
}
|
|
4328
4328
|
),
|
|
4329
4329
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4330
|
-
|
|
4330
|
+
_chunk4UFMLTL2js.DetailField,
|
|
4331
4331
|
{
|
|
4332
4332
|
label: t("billing.admin.prices.fields.stripeId"),
|
|
4333
4333
|
value: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "tabular-nums", children: price.stripePriceId })
|
|
4334
4334
|
}
|
|
4335
4335
|
),
|
|
4336
4336
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4337
|
-
|
|
4337
|
+
_chunk4UFMLTL2js.DetailField,
|
|
4338
4338
|
{
|
|
4339
4339
|
label: t("billing.admin.prices.fields.description"),
|
|
4340
4340
|
value: _nullishCoalesce(price.description, () => ( "\u2014")),
|
|
@@ -4342,7 +4342,7 @@ function PriceDetails() {
|
|
|
4342
4342
|
}
|
|
4343
4343
|
),
|
|
4344
4344
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4345
|
-
|
|
4345
|
+
_chunk4UFMLTL2js.DetailField,
|
|
4346
4346
|
{
|
|
4347
4347
|
label: t("billing.admin.prices.fields.features"),
|
|
4348
4348
|
className: "md:col-span-2",
|
|
@@ -4350,11 +4350,11 @@ function PriceDetails() {
|
|
|
4350
4350
|
}
|
|
4351
4351
|
),
|
|
4352
4352
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4353
|
-
|
|
4353
|
+
_chunk4UFMLTL2js.DetailField,
|
|
4354
4354
|
{
|
|
4355
4355
|
label: t("billing.admin.prices.fields.platformFeatures"),
|
|
4356
4356
|
className: "md:col-span-2",
|
|
4357
|
-
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,
|
|
4357
|
+
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, _chunk4UFMLTL2js.Badge, { variant: "softGray", children: feature.name }, feature.id)) }) : "\u2014"
|
|
4358
4358
|
}
|
|
4359
4359
|
)
|
|
4360
4360
|
] })
|
|
@@ -4368,7 +4368,7 @@ _chunk7QVYU63Ejs.__name.call(void 0, PriceDetails, "PriceDetails");
|
|
|
4368
4368
|
function PriceContainer() {
|
|
4369
4369
|
const { price } = usePriceContext();
|
|
4370
4370
|
if (!price) return null;
|
|
4371
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4371
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.RoundPageContainer, { module: _chunkSQTXJPREjs.Modules.StripePrice, id: price.id, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, PriceDetails, {}) });
|
|
4372
4372
|
}
|
|
4373
4373
|
_chunk7QVYU63Ejs.__name.call(void 0, PriceContainer, "PriceContainer");
|
|
4374
4374
|
|
|
@@ -4493,7 +4493,7 @@ function PricesList({ productId, fullWidth }) {
|
|
|
4493
4493
|
const importInputRef = _react.useRef.call(void 0, null);
|
|
4494
4494
|
const [seed, setSeed] = _react.useState.call(void 0, void 0);
|
|
4495
4495
|
const [seedNonce, setSeedNonce] = _react.useState.call(void 0, 0);
|
|
4496
|
-
const data =
|
|
4496
|
+
const data = _chunk4UFMLTL2js.useDataListRetriever.call(void 0, {
|
|
4497
4497
|
retriever: /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, (params) => _chunkSQTXJPREjs.StripePriceService.listPrices({ ...params, productId }), "retriever"),
|
|
4498
4498
|
retrieverParams: {},
|
|
4499
4499
|
module: _chunkSQTXJPREjs.Modules.StripePrice
|
|
@@ -4531,7 +4531,7 @@ function PricesList({ productId, fullWidth }) {
|
|
|
4531
4531
|
openSeededEditor(transfer.price);
|
|
4532
4532
|
} catch (error) {
|
|
4533
4533
|
console.error("[PricesList] price import failed", error);
|
|
4534
|
-
|
|
4534
|
+
_chunk4UFMLTL2js.errorToast.call(void 0, {
|
|
4535
4535
|
title: t("billing.admin.prices.import.errors.title"),
|
|
4536
4536
|
error: t("billing.admin.prices.import.errors.invalid")
|
|
4537
4537
|
});
|
|
@@ -4550,7 +4550,7 @@ function PricesList({ productId, fullWidth }) {
|
|
|
4550
4550
|
"create-price"
|
|
4551
4551
|
),
|
|
4552
4552
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _react.Fragment, { children: [
|
|
4553
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
4553
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4UFMLTL2js.Button, { variant: "outline", size: "sm", type: "button", onClick: () => _optionalChain([importInputRef, 'access', _180 => _180.current, 'optionalAccess', _181 => _181.click, 'call', _182 => _182()]), children: [
|
|
4554
4554
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.UploadIcon, {}),
|
|
4555
4555
|
t("billing.admin.prices.actions.import")
|
|
4556
4556
|
] }),
|
|
@@ -4568,7 +4568,7 @@ function PricesList({ productId, fullWidth }) {
|
|
|
4568
4568
|
];
|
|
4569
4569
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
|
|
4570
4570
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4571
|
-
|
|
4571
|
+
_chunk4UFMLTL2js.ContentListTable,
|
|
4572
4572
|
{
|
|
4573
4573
|
data,
|
|
4574
4574
|
fields: [
|
|
@@ -4585,7 +4585,7 @@ function PricesList({ productId, fullWidth }) {
|
|
|
4585
4585
|
fullWidth,
|
|
4586
4586
|
title: t("billing.admin.prices.title"),
|
|
4587
4587
|
emptyState: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4588
|
-
|
|
4588
|
+
_chunk4UFMLTL2js.EmptyState,
|
|
4589
4589
|
{
|
|
4590
4590
|
icon: _lucidereact.DollarSignIcon,
|
|
4591
4591
|
title: t("billing.admin.prices.empty.title"),
|
|
@@ -4625,18 +4625,18 @@ function ProductDetails() {
|
|
|
4625
4625
|
const { product } = useProductContext();
|
|
4626
4626
|
if (!product) return null;
|
|
4627
4627
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-full flex-col gap-y-4", children: [
|
|
4628
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4628
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.SectionHeader, { children: t("billing.admin.products.tabs.details") }),
|
|
4629
4629
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "grid grid-cols-1 gap-4 md:grid-cols-2", children: [
|
|
4630
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4630
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.DetailField, { label: t("billing.admin.products.fields.name"), value: product.name }),
|
|
4631
4631
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4632
|
-
|
|
4632
|
+
_chunk4UFMLTL2js.DetailField,
|
|
4633
4633
|
{
|
|
4634
4634
|
label: t("billing.admin.products.fields.status"),
|
|
4635
|
-
value: product.active ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4635
|
+
value: product.active ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.Badge, { variant: "softGreen", children: t("billing.admin.products.status.active") }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.Badge, { variant: "softGray", children: t("billing.admin.products.status.archived") })
|
|
4636
4636
|
}
|
|
4637
4637
|
),
|
|
4638
4638
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4639
|
-
|
|
4639
|
+
_chunk4UFMLTL2js.DetailField,
|
|
4640
4640
|
{
|
|
4641
4641
|
label: t("billing.admin.products.fields.description"),
|
|
4642
4642
|
value: _nullishCoalesce(product.description, () => ( "\u2014")),
|
|
@@ -4644,14 +4644,14 @@ function ProductDetails() {
|
|
|
4644
4644
|
}
|
|
4645
4645
|
),
|
|
4646
4646
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4647
|
-
|
|
4647
|
+
_chunk4UFMLTL2js.DetailField,
|
|
4648
4648
|
{
|
|
4649
4649
|
label: t("billing.admin.products.fields.prices"),
|
|
4650
4650
|
value: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "tabular-nums", children: product.stripePrices.length })
|
|
4651
4651
|
}
|
|
4652
4652
|
),
|
|
4653
4653
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4654
|
-
|
|
4654
|
+
_chunk4UFMLTL2js.DetailField,
|
|
4655
4655
|
{
|
|
4656
4656
|
label: t("billing.admin.products.fields.stripeId"),
|
|
4657
4657
|
value: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "tabular-nums", children: product.stripeProductId })
|
|
@@ -4669,7 +4669,7 @@ function ProductContainer() {
|
|
|
4669
4669
|
const { product } = useProductContext();
|
|
4670
4670
|
if (!product) return null;
|
|
4671
4671
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4672
|
-
|
|
4672
|
+
_chunk4UFMLTL2js.RoundPageContainer,
|
|
4673
4673
|
{
|
|
4674
4674
|
module: _chunkSQTXJPREjs.Modules.StripeProduct,
|
|
4675
4675
|
id: product.id,
|
|
@@ -4706,8 +4706,8 @@ _chunk7QVYU63Ejs.__name.call(void 0, ProductContainer, "ProductContainer");
|
|
|
4706
4706
|
|
|
4707
4707
|
function CouponsList({ fullWidth } = {}) {
|
|
4708
4708
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
4709
|
-
const { catalogueVersion } =
|
|
4710
|
-
const data =
|
|
4709
|
+
const { catalogueVersion } = _chunk4UFMLTL2js.useCouponContext.call(void 0, );
|
|
4710
|
+
const data = _chunk4UFMLTL2js.useDataListRetriever.call(void 0, {
|
|
4711
4711
|
retriever: /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, (params) => _chunkSQTXJPREjs.StripeCouponService.listCoupons(params), "retriever"),
|
|
4712
4712
|
retrieverParams: {},
|
|
4713
4713
|
module: _chunkSQTXJPREjs.Modules.StripeCoupon
|
|
@@ -4715,9 +4715,9 @@ function CouponsList({ fullWidth } = {}) {
|
|
|
4715
4715
|
_react.useEffect.call(void 0, () => {
|
|
4716
4716
|
if (catalogueVersion > 0) void data.refresh();
|
|
4717
4717
|
}, [catalogueVersion]);
|
|
4718
|
-
const functions = [/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4718
|
+
const functions = [/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.CouponEditor, {}, "create-coupon")];
|
|
4719
4719
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4720
|
-
|
|
4720
|
+
_chunk4UFMLTL2js.ContentListTable,
|
|
4721
4721
|
{
|
|
4722
4722
|
data,
|
|
4723
4723
|
fields: [
|
|
@@ -4732,7 +4732,7 @@ function CouponsList({ fullWidth } = {}) {
|
|
|
4732
4732
|
fullWidth,
|
|
4733
4733
|
title: t("billing.admin.coupons.title"),
|
|
4734
4734
|
emptyState: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4735
|
-
|
|
4735
|
+
_chunk4UFMLTL2js.EmptyState,
|
|
4736
4736
|
{
|
|
4737
4737
|
icon: _lucidereact.TicketPercentIcon,
|
|
4738
4738
|
title: t("billing.admin.coupons.empty.title"),
|
|
@@ -4752,7 +4752,7 @@ _chunk7QVYU63Ejs.__name.call(void 0, CouponsList, "CouponsList");
|
|
|
4752
4752
|
function ProductsList({ fullWidth } = {}) {
|
|
4753
4753
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
4754
4754
|
const { catalogueVersion } = useProductContext();
|
|
4755
|
-
const data =
|
|
4755
|
+
const data = _chunk4UFMLTL2js.useDataListRetriever.call(void 0, {
|
|
4756
4756
|
retriever: /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, (params) => _chunkSQTXJPREjs.StripeProductService.listProducts(params), "retriever"),
|
|
4757
4757
|
retrieverParams: {},
|
|
4758
4758
|
module: _chunkSQTXJPREjs.Modules.StripeProduct
|
|
@@ -4762,7 +4762,7 @@ function ProductsList({ fullWidth } = {}) {
|
|
|
4762
4762
|
}, [catalogueVersion]);
|
|
4763
4763
|
const functions = [/* @__PURE__ */ _jsxruntime.jsx.call(void 0, ProductEditor, {}, "create-product")];
|
|
4764
4764
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4765
|
-
|
|
4765
|
+
_chunk4UFMLTL2js.ContentListTable,
|
|
4766
4766
|
{
|
|
4767
4767
|
data,
|
|
4768
4768
|
fields: ["name" /* name */, "status" /* status */, "prices" /* prices */],
|
|
@@ -4771,7 +4771,7 @@ function ProductsList({ fullWidth } = {}) {
|
|
|
4771
4771
|
fullWidth,
|
|
4772
4772
|
title: t("billing.admin.products.title"),
|
|
4773
4773
|
emptyState: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4774
|
-
|
|
4774
|
+
_chunk4UFMLTL2js.EmptyState,
|
|
4775
4775
|
{
|
|
4776
4776
|
icon: _lucidereact.PackageIcon,
|
|
4777
4777
|
title: t("billing.admin.products.empty.title"),
|
|
@@ -4787,8 +4787,8 @@ _chunk7QVYU63Ejs.__name.call(void 0, ProductsList, "ProductsList");
|
|
|
4787
4787
|
|
|
4788
4788
|
function ProductsListContainer() {
|
|
4789
4789
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
4790
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ProductProvider, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4791
|
-
|
|
4790
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ProductProvider, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.CouponProvider, { publishChrome: false, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4791
|
+
_chunk4UFMLTL2js.RoundPageContainer,
|
|
4792
4792
|
{
|
|
4793
4793
|
module: _chunkSQTXJPREjs.Modules.StripeProduct,
|
|
4794
4794
|
tabs: [
|
|
@@ -4808,30 +4808,30 @@ _chunk7QVYU63Ejs.__name.call(void 0, ProductsListContainer, "ProductsListContain
|
|
|
4808
4808
|
|
|
4809
4809
|
function CouponDetails() {
|
|
4810
4810
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
4811
|
-
const fmt =
|
|
4812
|
-
const { coupon } =
|
|
4811
|
+
const fmt = _chunk4UFMLTL2js.useBillingFormatOptions.call(void 0, );
|
|
4812
|
+
const { coupon } = _chunk4UFMLTL2js.useCouponContext.call(void 0, );
|
|
4813
4813
|
if (!coupon) return null;
|
|
4814
4814
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-full flex-col gap-y-4", children: [
|
|
4815
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4815
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.SectionHeader, { children: t("billing.admin.products.tabs.details") }),
|
|
4816
4816
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-muted-foreground text-xs/relaxed", children: t("billing.admin.coupons.fixed_notice") }),
|
|
4817
4817
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "grid grid-cols-1 gap-4 md:grid-cols-2", children: [
|
|
4818
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4818
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.DetailField, { label: t("billing.admin.coupons.fields.name"), value: coupon.name }),
|
|
4819
4819
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4820
|
-
|
|
4820
|
+
_chunk4UFMLTL2js.DetailField,
|
|
4821
4821
|
{
|
|
4822
4822
|
label: t("billing.admin.coupons.fields.status"),
|
|
4823
|
-
value: coupon.valid ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4823
|
+
value: coupon.valid ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.Badge, { variant: "softGreen", children: t("billing.admin.coupons.status.active") }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.Badge, { variant: "softGray", children: t("billing.admin.coupons.status.ended") })
|
|
4824
4824
|
}
|
|
4825
4825
|
),
|
|
4826
4826
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4827
|
-
|
|
4827
|
+
_chunk4UFMLTL2js.DetailField,
|
|
4828
4828
|
{
|
|
4829
4829
|
label: t("billing.admin.coupons.fields.discount"),
|
|
4830
4830
|
value: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "tabular-nums", children: _chunkSQTXJPREjs.formatCouponDiscount.call(void 0, coupon, t, fmt) })
|
|
4831
4831
|
}
|
|
4832
4832
|
),
|
|
4833
4833
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4834
|
-
|
|
4834
|
+
_chunk4UFMLTL2js.DetailField,
|
|
4835
4835
|
{
|
|
4836
4836
|
label: t("billing.admin.coupons.fields.places"),
|
|
4837
4837
|
value: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "tabular-nums", children: coupon.maxRedemptions !== void 0 ? t("billing.admin.coupons.places.limited", {
|
|
@@ -4841,21 +4841,21 @@ function CouponDetails() {
|
|
|
4841
4841
|
}
|
|
4842
4842
|
),
|
|
4843
4843
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4844
|
-
|
|
4844
|
+
_chunk4UFMLTL2js.DetailField,
|
|
4845
4845
|
{
|
|
4846
4846
|
label: t("billing.admin.coupons.fields.products"),
|
|
4847
4847
|
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")
|
|
4848
4848
|
}
|
|
4849
4849
|
),
|
|
4850
4850
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4851
|
-
|
|
4851
|
+
_chunk4UFMLTL2js.DetailField,
|
|
4852
4852
|
{
|
|
4853
4853
|
label: t("billing.admin.coupons.fields.redeemBy"),
|
|
4854
|
-
value: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "tabular-nums", children: coupon.redeemBy ?
|
|
4854
|
+
value: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "tabular-nums", children: coupon.redeemBy ? _chunk4UFMLTL2js.formatDate.call(void 0, coupon.redeemBy, fmt) : "\u2014" })
|
|
4855
4855
|
}
|
|
4856
4856
|
),
|
|
4857
4857
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4858
|
-
|
|
4858
|
+
_chunk4UFMLTL2js.DetailField,
|
|
4859
4859
|
{
|
|
4860
4860
|
label: t("billing.admin.coupons.fields.stripeId"),
|
|
4861
4861
|
value: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "tabular-nums", children: coupon.stripeCouponId })
|
|
@@ -4890,15 +4890,15 @@ function CouponCodeEditorInternal({
|
|
|
4890
4890
|
}) {
|
|
4891
4891
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
4892
4892
|
const router = _chunkSQTXJPREjs.useI18nRouter.call(void 0, );
|
|
4893
|
-
const { createCode } =
|
|
4894
|
-
const formSchema2 = _react.useMemo.call(void 0, () => _zod3.z.object({ id: _zod3.z.uuidv4() }).and(
|
|
4895
|
-
const getDefaultValues = _react.useCallback.call(void 0, () => ({ id: _uuid.v4.call(void 0, ), ...
|
|
4893
|
+
const { createCode } = _chunk4UFMLTL2js.useCouponContext.call(void 0, );
|
|
4894
|
+
const formSchema2 = _react.useMemo.call(void 0, () => _zod3.z.object({ id: _zod3.z.uuidv4() }).and(_chunk4UFMLTL2js.couponCodeSchema.call(void 0, t)), [t]);
|
|
4895
|
+
const getDefaultValues = _react.useCallback.call(void 0, () => ({ id: _uuid.v4.call(void 0, ), ..._chunk4UFMLTL2js.couponCodeDefaults.call(void 0, ) }), []);
|
|
4896
4896
|
const form = _reacthookform.useForm.call(void 0, {
|
|
4897
4897
|
resolver: _zod.zodResolver.call(void 0, formSchema2),
|
|
4898
4898
|
defaultValues: getDefaultValues()
|
|
4899
4899
|
});
|
|
4900
4900
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4901
|
-
|
|
4901
|
+
_chunk4UFMLTL2js.EditorSheet,
|
|
4902
4902
|
{
|
|
4903
4903
|
form,
|
|
4904
4904
|
entityType: t("billing.admin.coupons.codes.entity"),
|
|
@@ -4908,14 +4908,14 @@ function CouponCodeEditorInternal({
|
|
|
4908
4908
|
onSuccess: _nullishCoalesce(onSuccess, () => ( (() => {
|
|
4909
4909
|
}))),
|
|
4910
4910
|
onNavigate: (url) => router.push(url),
|
|
4911
|
-
onSubmit: async (values) => await createCode({ id: values.id, couponId, ...
|
|
4911
|
+
onSubmit: async (values) => await createCode({ id: values.id, couponId, ..._chunk4UFMLTL2js.toCouponCodeInput.call(void 0, values) }),
|
|
4912
4912
|
onReset: getDefaultValues,
|
|
4913
4913
|
trigger,
|
|
4914
4914
|
forceShow,
|
|
4915
4915
|
onClose,
|
|
4916
4916
|
dialogOpen,
|
|
4917
4917
|
onDialogOpenChange,
|
|
4918
|
-
children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4918
|
+
children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4UFMLTL2js.CouponCodeFields, { form })
|
|
4919
4919
|
}
|
|
4920
4920
|
);
|
|
4921
4921
|
}
|
|
@@ -4929,8 +4929,8 @@ _chunk7QVYU63Ejs.__name.call(void 0, CouponCodeEditor, "CouponCodeEditor");
|
|
|
4929
4929
|
|
|
4930
4930
|
function CouponCodesList({ couponId }) {
|
|
4931
4931
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
4932
|
-
const { catalogueVersion } =
|
|
4933
|
-
const data =
|
|
4932
|
+
const { catalogueVersion } = _chunk4UFMLTL2js.useCouponContext.call(void 0, );
|
|
4933
|
+
const data = _chunk4UFMLTL2js.useDataListRetriever.call(void 0, {
|
|
4934
4934
|
retriever: /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, (params) => _chunkSQTXJPREjs.StripeCouponCodeService.listByCoupon({ ...params, couponId }), "retriever"),
|
|
4935
4935
|
retrieverParams: {},
|
|
4936
4936
|
module: _chunkSQTXJPREjs.Modules.StripeCouponCode
|
|
@@ -4940,7 +4940,7 @@ function CouponCodesList({ couponId }) {
|
|
|
4940
4940
|
}, [catalogueVersion]);
|
|
4941
4941
|
const functions = [/* @__PURE__ */ _jsxruntime.jsx.call(void 0, CouponCodeEditor, { couponId }, "create-code")];
|
|
4942
4942
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4943
|
-
|
|
4943
|
+
_chunk4UFMLTL2js.ContentListTable,
|
|
4944
4944
|
{
|
|
4945
4945
|
data,
|
|
4946
4946
|
fields: [
|
|
@@ -4955,7 +4955,7 @@ function CouponCodesList({ couponId }) {
|
|
|
4955
4955
|
functions,
|
|
4956
4956
|
title: t("billing.admin.coupons.codes.title"),
|
|
4957
4957
|
emptyState: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4958
|
-
|
|
4958
|
+
_chunk4UFMLTL2js.EmptyState,
|
|
4959
4959
|
{
|
|
4960
4960
|
icon: _lucidereact.TicketIcon,
|
|
4961
4961
|
title: t("billing.admin.coupons.codes.empty.title"),
|
|
@@ -4971,12 +4971,12 @@ _chunk7QVYU63Ejs.__name.call(void 0, CouponCodesList, "CouponCodesList");
|
|
|
4971
4971
|
|
|
4972
4972
|
function CouponContainer() {
|
|
4973
4973
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
4974
|
-
const { coupon } =
|
|
4974
|
+
const { coupon } = _chunk4UFMLTL2js.useCouponContext.call(void 0, );
|
|
4975
4975
|
if (!coupon) return null;
|
|
4976
4976
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
4977
|
-
|
|
4977
|
+
_chunk4UFMLTL2js.RoundPageContainer,
|
|
4978
4978
|
{
|
|
4979
|
-
module:
|
|
4979
|
+
module: _chunk4UFMLTL2js.couponPageModule.call(void 0, ),
|
|
4980
4980
|
id: coupon.id,
|
|
4981
4981
|
tabs: [
|
|
4982
4982
|
{
|
|
@@ -5083,5 +5083,5 @@ _chunk7QVYU63Ejs.__name.call(void 0, CouponContainer, "CouponContainer");
|
|
|
5083
5083
|
|
|
5084
5084
|
|
|
5085
5085
|
|
|
5086
|
-
exports.BillingAlertBanner = BillingAlertBanner; exports.BillingDashboardContainer = BillingDashboardContainer; exports.BillingDetailModal = BillingDetailModal; exports.BillingUsageSummaryCard = BillingUsageSummaryCard; exports.CancelSubscriptionDialog = CancelSubscriptionDialog; exports.CouponCodeActions =
|
|
5086
|
+
exports.BillingAlertBanner = BillingAlertBanner; exports.BillingDashboardContainer = BillingDashboardContainer; exports.BillingDetailModal = BillingDetailModal; exports.BillingUsageSummaryCard = BillingUsageSummaryCard; exports.CancelSubscriptionDialog = CancelSubscriptionDialog; exports.CouponCodeActions = _chunk4UFMLTL2js.CouponCodeActions; exports.CouponCodeEditor = CouponCodeEditor; exports.CouponCodeFields = _chunk4UFMLTL2js.CouponCodeFields; exports.CouponCodesList = CouponCodesList; exports.CouponContainer = CouponContainer; exports.CouponDetails = CouponDetails; exports.CouponEditor = _chunk4UFMLTL2js.CouponEditor; exports.CouponProvider = _chunk4UFMLTL2js.CouponProvider; exports.CouponRefresher = _chunk4UFMLTL2js.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 = _chunk4UFMLTL2js.applyDiscount; exports.couponCodeDefaults = _chunk4UFMLTL2js.couponCodeDefaults; exports.couponCodeSchema = _chunk4UFMLTL2js.couponCodeSchema; exports.couponCurrencyOptions = _chunk4UFMLTL2js.couponCurrencyOptions; exports.formatCurrency = _chunkSQTXJPREjs.formatCurrency; exports.formatDate = _chunk4UFMLTL2js.formatDate; exports.formatFixed = _chunkSQTXJPREjs.formatFixed; exports.formatInterval = _chunkSQTXJPREjs.formatInterval; exports.isStripeConfigured = isStripeConfigured; exports.optionalDate = _chunk4UFMLTL2js.optionalDate; exports.optionalDecimal = _chunk4UFMLTL2js.optionalDecimal; exports.optionalPositiveInt = _chunk4UFMLTL2js.optionalPositiveInt; exports.parseOptionalDecimal = _chunk4UFMLTL2js.parseOptionalDecimal; exports.parseOptionalPositiveInt = _chunk4UFMLTL2js.parseOptionalPositiveInt; exports.priceLabel = priceLabel; exports.promotionCodeDiscount = _chunk4UFMLTL2js.promotionCodeDiscount; exports.subscriptionDiscount = _chunk4UFMLTL2js.subscriptionDiscount; exports.toCouponCodeInput = _chunk4UFMLTL2js.toCouponCodeInput; exports.useBillingFormatOptions = _chunk4UFMLTL2js.useBillingFormatOptions; exports.useCouponContext = _chunk4UFMLTL2js.useCouponContext; exports.usePriceContext = usePriceContext; exports.useProductContext = useProductContext;
|
|
5087
5087
|
//# sourceMappingURL=index.js.map
|