@openrails/billing-ui 0.241.0 → 0.243.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/CHANGELOG.md +27 -11
- package/README.md +41 -8
- package/dist/admin/billing-admin.d.ts +3 -0
- package/dist/admin/components/app-sidebar.d.ts +1 -0
- package/dist/admin/components/confirm.d.ts +4 -0
- package/dist/admin/components/cursor-pager.d.ts +8 -0
- package/dist/admin/components/data-table.d.ts +14 -0
- package/dist/admin/components/fact-card.d.ts +5 -0
- package/dist/admin/components/form-field-errors.d.ts +3 -0
- package/dist/admin/components/linked-table-row.d.ts +5 -0
- package/dist/admin/components/logo.d.ts +3 -0
- package/dist/admin/components/no-access.d.ts +3 -0
- package/dist/admin/components/no-merchants.d.ts +1 -0
- package/dist/admin/components/notification-bell.d.ts +2 -0
- package/dist/admin/components/route-error.d.ts +3 -0
- package/dist/admin/components/site-header.d.ts +9 -0
- package/dist/admin/components/status-badge.d.ts +3 -0
- package/dist/admin/components/typed-confirm-dialog.d.ts +11 -0
- package/dist/admin/components/ui/alert-dialog.d.ts +18 -0
- package/dist/admin/components/ui/avatar.d.ts +11 -0
- package/dist/admin/components/ui/badge.d.ts +7 -0
- package/dist/admin/components/ui/breadcrumb.d.ts +10 -0
- package/dist/admin/components/ui/button.d.ts +8 -0
- package/dist/admin/components/ui/card.d.ts +11 -0
- package/dist/admin/components/ui/chart.d.ts +44 -0
- package/dist/admin/components/ui/dialog.d.ts +17 -0
- package/dist/admin/components/ui/dropdown-menu.d.ts +29 -0
- package/dist/admin/components/ui/input.d.ts +3 -0
- package/dist/admin/components/ui/label.d.ts +3 -0
- package/dist/admin/components/ui/select.d.ts +15 -0
- package/dist/admin/components/ui/separator.d.ts +3 -0
- package/dist/admin/components/ui/sheet.d.ts +14 -0
- package/dist/admin/components/ui/sidebar.d.ts +63 -0
- package/dist/admin/components/ui/skeleton.d.ts +2 -0
- package/dist/admin/components/ui/sonner.d.ts +3 -0
- package/dist/admin/components/ui/switch.d.ts +5 -0
- package/dist/admin/components/ui/table.d.ts +10 -0
- package/dist/admin/components/ui/tabs.d.ts +10 -0
- package/dist/admin/components/ui/textarea.d.ts +3 -0
- package/dist/admin/components/ui/tooltip.d.ts +6 -0
- package/dist/admin/context.d.ts +1193 -0
- package/dist/admin/hooks/use-mobile.d.ts +1 -0
- package/dist/admin/index.d.ts +5 -0
- package/dist/admin/layouts/app-layout.d.ts +4 -0
- package/dist/admin/lib/api/client.d.ts +64 -0
- package/dist/admin/lib/api/copilot.d.ts +6 -0
- package/dist/admin/lib/api/credit-endpoints.d.ts +8 -0
- package/dist/admin/lib/api/credit-types.d.ts +9 -0
- package/dist/admin/lib/api/endpoints.d.ts +133 -0
- package/dist/admin/lib/api/index.d.ts +89 -0
- package/dist/admin/lib/api/invoice-profile-endpoints.d.ts +6 -0
- package/dist/admin/lib/api/metrics.d.ts +68 -0
- package/dist/admin/lib/api/order-endpoints.d.ts +21 -0
- package/dist/admin/lib/api/types.d.ts +122 -0
- package/dist/admin/lib/auth.d.ts +6 -0
- package/dist/admin/lib/capabilities.d.ts +13 -0
- package/dist/admin/lib/chunk-error.d.ts +1 -0
- package/dist/admin/lib/confirm.d.ts +11 -0
- package/dist/admin/lib/credit-queries.d.ts +23 -0
- package/dist/admin/lib/csv.d.ts +3 -0
- package/dist/admin/lib/cursor-pages.d.ts +13 -0
- package/dist/admin/lib/dialog-width.d.ts +6 -0
- package/dist/admin/lib/dom.d.ts +1 -0
- package/dist/admin/lib/duration.d.ts +3 -0
- package/dist/admin/lib/format.d.ts +23 -0
- package/dist/admin/lib/mount.d.ts +6 -0
- package/dist/admin/lib/mutations.d.ts +125 -0
- package/dist/admin/lib/order-queries.d.ts +29 -0
- package/dist/admin/lib/queries.d.ts +369 -0
- package/dist/admin/lib/query-client.d.ts +3 -0
- package/dist/admin/lib/toast.d.ts +10 -0
- package/dist/admin/lib/utils.d.ts +2 -0
- package/dist/admin/messages.d.ts +670 -0
- package/dist/admin/navigation.d.ts +14 -0
- package/dist/admin/pages/catalog/application-dialog.d.ts +2 -0
- package/dist/admin/pages/catalog/copilot-panel.d.ts +4 -0
- package/dist/admin/pages/catalog/index.d.ts +4 -0
- package/dist/admin/pages/catalog/meter-form.d.ts +6 -0
- package/dist/admin/pages/catalog/metering-model.d.ts +67 -0
- package/dist/admin/pages/catalog/metering.d.ts +3 -0
- package/dist/admin/pages/catalog/price-detail.d.ts +2 -0
- package/dist/admin/pages/catalog/price-format.d.ts +3 -0
- package/dist/admin/pages/catalog/price-wizard-logic.d.ts +20 -0
- package/dist/admin/pages/catalog/price-wizard.d.ts +10 -0
- package/dist/admin/pages/catalog/psp-links.d.ts +10 -0
- package/dist/admin/pages/catalog/rate-card-editor.d.ts +10 -0
- package/dist/admin/pages/customers/credit-form.d.ts +14 -0
- package/dist/admin/pages/customers/credits.d.ts +5 -0
- package/dist/admin/pages/customers/default-card-badges.d.ts +3 -0
- package/dist/admin/pages/customers/detail.d.ts +5 -0
- package/dist/admin/pages/customers/grant-duration.d.ts +32 -0
- package/dist/admin/pages/customers/index.d.ts +2 -0
- package/dist/admin/pages/customers/invoice-profile-model.d.ts +18 -0
- package/dist/admin/pages/customers/invoice-profile.d.ts +9 -0
- package/dist/admin/pages/dashboard/index.d.ts +2 -0
- package/dist/admin/pages/dashboard/lib.d.ts +48 -0
- package/dist/admin/pages/dashboard/range-picker.d.ts +1 -0
- package/dist/admin/pages/dashboard/range.d.ts +34 -0
- package/dist/admin/pages/dashboard/reports-model.d.ts +29 -0
- package/dist/admin/pages/dashboard/reports.d.ts +2 -0
- package/dist/admin/pages/dashboard/use-range.d.ts +5 -0
- package/dist/admin/pages/dashboard/widget-editor.d.ts +8 -0
- package/dist/admin/pages/dashboard/widget-tile.d.ts +9 -0
- package/dist/admin/pages/dashboard/widget-viz.d.ts +12 -0
- package/dist/admin/pages/ops/index.d.ts +2 -0
- package/dist/admin/pages/orders/detail.d.ts +5 -0
- package/dist/admin/pages/orders/index.d.ts +1 -0
- package/dist/admin/pages/orders/model.d.ts +7 -0
- package/dist/admin/pages/payments/attempts.d.ts +7 -0
- package/dist/admin/pages/payments/detail.d.ts +2 -0
- package/dist/admin/pages/payments/health-model.d.ts +149 -0
- package/dist/admin/pages/payments/health.d.ts +2 -0
- package/dist/admin/pages/payments/index.d.ts +2 -0
- package/dist/admin/pages/settings/configuration-edit.d.ts +9 -0
- package/dist/admin/pages/settings/index.d.ts +9 -0
- package/dist/admin/pages/settings/notifications.d.ts +2 -0
- package/dist/admin/pages/settings/setting-fields.d.ts +20 -0
- package/dist/admin/pages/subscriptions/change-subscription-dialog.d.ts +16 -0
- package/dist/admin/pages/subscriptions/detail.d.ts +2 -0
- package/dist/admin/pages/subscriptions/dunning.d.ts +2 -0
- package/dist/admin/pages/subscriptions/index.d.ts +2 -0
- package/dist/admin/pages/subscriptions/subscription-change-options.d.ts +23 -0
- package/dist/admin/pages/subscriptions/views.d.ts +15 -0
- package/dist/admin/router.d.ts +32 -0
- package/dist/admin/routes.d.ts +5 -0
- package/dist/admin/summary.d.ts +27 -0
- package/dist/admin/theme.d.ts +2 -0
- package/dist/admin/types.d.ts +56 -0
- package/dist/admin/ui-context.d.ts +14 -0
- package/dist/admin-attempts-lAoW-Urd.js +419 -0
- package/dist/admin-attempts-lAoW-Urd.js.map +1 -0
- package/dist/admin-auth-DQGHtt0j.js +14 -0
- package/dist/admin-auth-DQGHtt0j.js.map +1 -0
- package/dist/admin-badge-DR5-1qd8.js +31 -0
- package/dist/admin-badge-DR5-1qd8.js.map +1 -0
- package/dist/admin-button-CTL3DgOt.js +46 -0
- package/dist/admin-button-CTL3DgOt.js.map +1 -0
- package/dist/admin-capabilities-BuigAgtm.js +59 -0
- package/dist/admin-capabilities-BuigAgtm.js.map +1 -0
- package/dist/admin-card-bzAks3-3.js +51 -0
- package/dist/admin-card-bzAks3-3.js.map +1 -0
- package/dist/admin-catalog-CC7I4n0_.js +1189 -0
- package/dist/admin-catalog-CC7I4n0_.js.map +1 -0
- package/dist/admin-confirm-katGq0Qo.js +12 -0
- package/dist/admin-confirm-katGq0Qo.js.map +1 -0
- package/dist/admin-csv-CPoNZj2D.js +16 -0
- package/dist/admin-csv-CPoNZj2D.js.map +1 -0
- package/dist/admin-customers-D8u5gq3M.js +160 -0
- package/dist/admin-customers-D8u5gq3M.js.map +1 -0
- package/dist/admin-dashboard-DqqFjOzq.js +420 -0
- package/dist/admin-dashboard-DqqFjOzq.js.map +1 -0
- package/dist/admin-data-table-qfXLOFmN.js +96 -0
- package/dist/admin-data-table-qfXLOFmN.js.map +1 -0
- package/dist/admin-detail-5aNNvrc0.js +324 -0
- package/dist/admin-detail-5aNNvrc0.js.map +1 -0
- package/dist/admin-detail-7p684Uyc.js +342 -0
- package/dist/admin-detail-7p684Uyc.js.map +1 -0
- package/dist/admin-detail-CGOyqs7s.js +1312 -0
- package/dist/admin-detail-CGOyqs7s.js.map +1 -0
- package/dist/admin-detail-DUAJQg8G.js +710 -0
- package/dist/admin-detail-DUAJQg8G.js.map +1 -0
- package/dist/admin-dialog-BjuKI5Hp.js +88 -0
- package/dist/admin-dialog-BjuKI5Hp.js.map +1 -0
- package/dist/admin-dialog-width-BPrgdYlj.js +6 -0
- package/dist/admin-dialog-width-BPrgdYlj.js.map +1 -0
- package/dist/admin-dom-uMmZzRvU.js +149 -0
- package/dist/admin-dom-uMmZzRvU.js.map +1 -0
- package/dist/admin-dropdown-menu-BW1D_h6s.js +69 -0
- package/dist/admin-dropdown-menu-BW1D_h6s.js.map +1 -0
- package/dist/admin-dunning-B2zgtrOo.js +10 -0
- package/dist/admin-dunning-B2zgtrOo.js.map +1 -0
- package/dist/admin-fact-card-DO_fHosg.js +20 -0
- package/dist/admin-fact-card-DO_fHosg.js.map +1 -0
- package/dist/admin-form-field-errors-hbUMIriS.js +14 -0
- package/dist/admin-form-field-errors-hbUMIriS.js.map +1 -0
- package/dist/admin-format-DoohJ7Fg.js +136 -0
- package/dist/admin-format-DoohJ7Fg.js.map +1 -0
- package/dist/admin-health-B4jN2LwR.js +983 -0
- package/dist/admin-health-B4jN2LwR.js.map +1 -0
- package/dist/admin-input-CcfQfJFN.js +17 -0
- package/dist/admin-input-CcfQfJFN.js.map +1 -0
- package/dist/admin-invoice-profile-model-Cgjy3zV8.js +53 -0
- package/dist/admin-invoice-profile-model-Cgjy3zV8.js.map +1 -0
- package/dist/admin-label-BiEN5cjb.js +15 -0
- package/dist/admin-label-BiEN5cjb.js.map +1 -0
- package/dist/admin-linked-table-row-BsaUruCN.js +26 -0
- package/dist/admin-linked-table-row-BsaUruCN.js.map +1 -0
- package/dist/admin-metering-BGAXbT23.js +1702 -0
- package/dist/admin-metering-BGAXbT23.js.map +1 -0
- package/dist/admin-ops-B3mcr76u.js +217 -0
- package/dist/admin-ops-B3mcr76u.js.map +1 -0
- package/dist/admin-orders-dxC99Idl.js +192 -0
- package/dist/admin-orders-dxC99Idl.js.map +1 -0
- package/dist/admin-payments-Bs7HSfP0.js +246 -0
- package/dist/admin-payments-Bs7HSfP0.js.map +1 -0
- package/dist/admin-price-detail-DRquxpA9.js +482 -0
- package/dist/admin-price-detail-DRquxpA9.js.map +1 -0
- package/dist/admin-price-format-DM1qORWI.js +44 -0
- package/dist/admin-price-format-DM1qORWI.js.map +1 -0
- package/dist/admin-price-wizard-CI7K-2Nz.js +357 -0
- package/dist/admin-price-wizard-CI7K-2Nz.js.map +1 -0
- package/dist/admin-range-picker-Dr2M1EZr.js +192 -0
- package/dist/admin-range-picker-Dr2M1EZr.js.map +1 -0
- package/dist/admin-reports-CywKLiSA.js +320 -0
- package/dist/admin-reports-CywKLiSA.js.map +1 -0
- package/dist/admin-select-DBgprVW6.js +81 -0
- package/dist/admin-select-DBgprVW6.js.map +1 -0
- package/dist/admin-settings-Bmoy95uO.js +1434 -0
- package/dist/admin-settings-Bmoy95uO.js.map +1 -0
- package/dist/admin-skeleton-DsM7crYi.js +14 -0
- package/dist/admin-skeleton-DsM7crYi.js.map +1 -0
- package/dist/admin-status-badge-BFPgo71d.js +38 -0
- package/dist/admin-status-badge-BFPgo71d.js.map +1 -0
- package/dist/admin-subscriptions-CLYc_HEV.js +301 -0
- package/dist/admin-subscriptions-CLYc_HEV.js.map +1 -0
- package/dist/admin-switch-BJUxLCsa.js +20 -0
- package/dist/admin-switch-BJUxLCsa.js.map +1 -0
- package/dist/admin-table-CH9TrXJf.js +61 -0
- package/dist/admin-table-CH9TrXJf.js.map +1 -0
- package/dist/admin-tabs-528FJMjt.js +46 -0
- package/dist/admin-tabs-528FJMjt.js.map +1 -0
- package/dist/admin-textarea-DEz38RaI.js +15 -0
- package/dist/admin-textarea-DEz38RaI.js.map +1 -0
- package/dist/admin-typed-confirm-dialog-DU7m9-O7.js +66 -0
- package/dist/admin-typed-confirm-dialog-DU7m9-O7.js.map +1 -0
- package/dist/admin-utils-BK4Vh1o_.js +1809 -0
- package/dist/admin-utils-BK4Vh1o_.js.map +1 -0
- package/dist/admin-widget-viz-Da48c-Zf.js +581 -0
- package/dist/admin-widget-viz-Da48c-Zf.js.map +1 -0
- package/dist/admin.css +3 -0
- package/dist/admin.js +2164 -0
- package/dist/admin.js.map +1 -0
- package/dist/appearance.d.ts +1 -1
- package/dist/client/generated/error-codes.d.ts +1 -1
- package/dist/client/generated/routes.d.ts +2156 -189
- package/dist/client/generated/wire.d.ts +1265 -50
- package/dist/client/types.d.ts +0 -1
- package/dist/{client-Cxz_miQj.js → client-PjivPHmE.js} +2 -3
- package/dist/client-PjivPHmE.js.map +1 -0
- package/dist/client.js +1 -1
- package/dist/{hooks-aKefXeMO.js → hooks-Ckd8F2JF.js} +8 -8
- package/dist/hooks-Ckd8F2JF.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +12 -12
- package/dist/index.js.map +1 -1
- package/dist/lib/{offer-label.d.ts → price-label.d.ts} +1 -1
- package/dist/locales/de.js +1 -1
- package/dist/locales/de.js.map +1 -1
- package/dist/locales/en.d.ts +1 -1
- package/dist/locales/en.js +1 -1
- package/dist/locales/en.js.map +1 -1
- package/dist/locales/es.js +1 -1
- package/dist/locales/es.js.map +1 -1
- package/dist/locales/ja.js +1 -1
- package/dist/locales/ja.js.map +1 -1
- package/dist/locales/ko.js +1 -1
- package/dist/locales/ko.js.map +1 -1
- package/dist/locales/zh.js +1 -1
- package/dist/locales/zh.js.map +1 -1
- package/dist/{offers.d.ts → product-list.d.ts} +5 -5
- package/dist/react.js +1 -1
- package/dist/styles.css +1 -1
- package/package.json +28 -6
- package/dist/client-Cxz_miQj.js.map +0 -1
- package/dist/hooks-aKefXeMO.js.map +0 -1
package/dist/admin.js
ADDED
|
@@ -0,0 +1,2164 @@
|
|
|
1
|
+
import { C as e, E as t, S as n, T as r, a as i, d as a, f as o, g as s, h as c, m as l, n as u, o as d, p as f, r as p, s as m, t as h, u as g, w as _ } from "./admin-utils-BK4Vh1o_.js";
|
|
2
|
+
import { a as v, i as y, n as b, o as ee, r as te, s as x, t as S } from "./admin-dropdown-menu-BW1D_h6s.js";
|
|
3
|
+
import { t as C } from "./admin-button-CTL3DgOt.js";
|
|
4
|
+
import { f as w, i as T, l as E, o as ne, t as re } from "./admin-capabilities-BuigAgtm.js";
|
|
5
|
+
import { t as D } from "./admin-auth-DQGHtt0j.js";
|
|
6
|
+
import { f as ie, s as O } from "./admin-format-DoohJ7Fg.js";
|
|
7
|
+
import { t as ae } from "./admin-confirm-katGq0Qo.js";
|
|
8
|
+
import * as k from "react";
|
|
9
|
+
import { Component as oe, Suspense as se, lazy as A, useCallback as j, useEffect as ce, useId as le, useLayoutEffect as ue, useMemo as M, useRef as de, useState as N, useSyncExternalStore as P } from "react";
|
|
10
|
+
import { QueryCache as fe, QueryClient as pe, QueryClientProvider as me, useQuery as F } from "@tanstack/react-query";
|
|
11
|
+
import { Toaster as he } from "sonner";
|
|
12
|
+
import { Fragment as I, jsx as L, jsxs as R } from "react/jsx-runtime";
|
|
13
|
+
import { HugeiconsIcon as z } from "@hugeicons/react";
|
|
14
|
+
import { Add01Icon as ge, Alert01Icon as _e, AlertCircleIcon as ve, CreditCardIcon as B, DashboardCircleIcon as ye, Notification01Icon as V, PackageIcon as be, Refresh01Icon as xe, RepeatIcon as Se, Settings01Icon as Ce, Tick02Icon as we, UnfoldMoreIcon as Te, UserGroupIcon as Ee, Wrench01Icon as De } from "@hugeicons/core-free-icons";
|
|
15
|
+
import { ChevronRightIcon as Oe, CircleCheckIcon as ke, InfoIcon as Ae, Loader2Icon as je, OctagonXIcon as Me, PanelLeftIcon as Ne, TriangleAlertIcon as Pe, XIcon as Fe } from "lucide-react";
|
|
16
|
+
import { mergeProps as H } from "@base-ui/react/merge-props";
|
|
17
|
+
import { useRender as U } from "@base-ui/react/use-render";
|
|
18
|
+
import { cva as Ie } from "class-variance-authority";
|
|
19
|
+
import { Separator as Le } from "@base-ui/react/separator";
|
|
20
|
+
import { Dialog as W } from "@base-ui/react/dialog";
|
|
21
|
+
import { Tooltip as G } from "@base-ui/react/tooltip";
|
|
22
|
+
import { AlertDialog as K } from "@base-ui/react/alert-dialog";
|
|
23
|
+
//#region src/appearance.ts
|
|
24
|
+
var Re = {
|
|
25
|
+
background: "--background",
|
|
26
|
+
foreground: "--foreground",
|
|
27
|
+
card: "--card",
|
|
28
|
+
mutedForeground: "--muted-foreground",
|
|
29
|
+
faintForeground: "--orck-faint",
|
|
30
|
+
border: "--border",
|
|
31
|
+
input: "--input",
|
|
32
|
+
primary: "--primary",
|
|
33
|
+
primaryForeground: "--primary-foreground",
|
|
34
|
+
destructive: "--destructive",
|
|
35
|
+
ring: "--ring",
|
|
36
|
+
radius: "--radius",
|
|
37
|
+
fontFamily: "--orck-font"
|
|
38
|
+
};
|
|
39
|
+
function q(e, t = "orck") {
|
|
40
|
+
let n = e?.variables;
|
|
41
|
+
if (!n) return;
|
|
42
|
+
let r = {};
|
|
43
|
+
for (let [e, i] of Object.entries(n)) i && (r[Re[e].replace("--orck-", `--${t}-`)] = i);
|
|
44
|
+
return r;
|
|
45
|
+
}
|
|
46
|
+
//#endregion
|
|
47
|
+
//#region src/admin/routes.tsx
|
|
48
|
+
var ze = [
|
|
49
|
+
{
|
|
50
|
+
path: "/payments/attempts",
|
|
51
|
+
Component: A(() => import("./admin-attempts-lAoW-Urd.js").then((e) => ({ default: e.AttemptsPage })))
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
path: "/catalog/metering",
|
|
55
|
+
Component: A(() => import("./admin-metering-BGAXbT23.js").then((e) => ({ default: e.CatalogMeteringPage })))
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
path: "/payments/health",
|
|
59
|
+
Component: A(() => import("./admin-health-B4jN2LwR.js").then((e) => ({ default: e.PaymentHealthPage })))
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
path: "/payments/cycles",
|
|
63
|
+
Component: A(() => import("./admin-attempts-lAoW-Urd.js").then((e) => ({ default: e.CyclesPage })))
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
path: "/catalog/prices",
|
|
67
|
+
Component: A(() => import("./admin-catalog-CC7I4n0_.js").then((e) => ({ default: e.CatalogPricesPage })))
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
path: "/subscriptions",
|
|
71
|
+
Component: A(() => import("./admin-subscriptions-CLYc_HEV.js").then((e) => ({ default: e.SubscriptionsPage })))
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
path: "/catalog/drift",
|
|
75
|
+
Component: A(() => import("./admin-catalog-CC7I4n0_.js").then((e) => ({ default: e.CatalogDriftPage })))
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
path: "/customers",
|
|
79
|
+
Component: A(() => import("./admin-customers-D8u5gq3M.js").then((e) => ({ default: e.CustomersPage })))
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
path: "/payments",
|
|
83
|
+
Component: A(() => import("./admin-payments-Bs7HSfP0.js").then((e) => ({ default: e.PaymentsPage })))
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
path: "/settings",
|
|
87
|
+
Component: A(() => import("./admin-settings-Bmoy95uO.js").then((e) => ({ default: e.SettingsPage })))
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
path: "/reports",
|
|
91
|
+
Component: A(() => import("./admin-reports-CywKLiSA.js").then((e) => ({ default: e.ReportsPage })))
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
path: "/catalog",
|
|
95
|
+
Component: A(() => import("./admin-catalog-CC7I4n0_.js").then((e) => ({ default: e.CatalogProductsPage })))
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
path: "/orders",
|
|
99
|
+
Component: A(() => import("./admin-orders-dxC99Idl.js").then((e) => ({ default: e.OrdersPage })))
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
path: "/ops",
|
|
103
|
+
Component: A(() => import("./admin-ops-B3mcr76u.js").then((e) => ({ default: e.OpsPage })))
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
path: "/",
|
|
107
|
+
Component: A(() => import("./admin-dashboard-DqqFjOzq.js").then((e) => ({ default: e.DashboardPage })))
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
path: "/customers/:customerId",
|
|
111
|
+
Component: A(() => import("./admin-detail-CGOyqs7s.js").then((e) => ({ default: e.CustomerDetailPage })))
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
path: "/payments/attempts/:id",
|
|
115
|
+
Component: A(() => import("./admin-attempts-lAoW-Urd.js").then((e) => ({ default: e.AttemptDetailPage })))
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
path: "/catalog/metering/:key",
|
|
119
|
+
Component: A(() => import("./admin-metering-BGAXbT23.js").then((e) => ({ default: e.MeterDetailPage })))
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
path: "/payments/cycles/:id",
|
|
123
|
+
Component: A(() => import("./admin-attempts-lAoW-Urd.js").then((e) => ({ default: e.CycleDetailPage })))
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
path: "/catalog/prices/:id",
|
|
127
|
+
Component: A(() => import("./admin-price-detail-DRquxpA9.js").then((e) => ({ default: e.PriceDetailPage })))
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
path: "/subscriptions/:id",
|
|
131
|
+
Component: A(() => import("./admin-detail-DUAJQg8G.js").then((e) => ({ default: e.SubscriptionDetailPage })))
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
path: "/payments/:id",
|
|
135
|
+
Component: A(() => import("./admin-detail-5aNNvrc0.js").then((e) => ({ default: e.PaymentDetailPage })))
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
path: "/orders/:id",
|
|
139
|
+
Component: A(() => import("./admin-detail-7p684Uyc.js").then((e) => ({ default: e.OrderDetailPage })))
|
|
140
|
+
}
|
|
141
|
+
];
|
|
142
|
+
function Be(e) {
|
|
143
|
+
for (let { path: t, Component: n } of ze) {
|
|
144
|
+
let r = e.replace(/\/$/, "").split("/"), i = t === "/" ? [""] : t.split("/"), a = {};
|
|
145
|
+
if (r.length === i.length && i.every((e, t) => {
|
|
146
|
+
if (e.startsWith(":")) try {
|
|
147
|
+
return a[e.slice(1)] = decodeURIComponent(r[t]), !0;
|
|
148
|
+
} catch {
|
|
149
|
+
return !1;
|
|
150
|
+
}
|
|
151
|
+
return e === r[t];
|
|
152
|
+
})) return {
|
|
153
|
+
Component: n,
|
|
154
|
+
params: a
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
function Ve() {
|
|
159
|
+
let e = Be(d().pathname);
|
|
160
|
+
return e ? /* @__PURE__ */ L(i, {
|
|
161
|
+
params: e.params,
|
|
162
|
+
children: /* @__PURE__ */ L(se, {
|
|
163
|
+
fallback: /* @__PURE__ */ L("p", {
|
|
164
|
+
role: "status",
|
|
165
|
+
children: /* @__PURE__ */ L(_, { id: "Loading…" })
|
|
166
|
+
}),
|
|
167
|
+
children: /* @__PURE__ */ L(e.Component, {})
|
|
168
|
+
})
|
|
169
|
+
}) : /* @__PURE__ */ L("p", {
|
|
170
|
+
role: "status",
|
|
171
|
+
children: /* @__PURE__ */ L(_, { id: "This billing page does not exist." })
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
//#endregion
|
|
175
|
+
//#region src/admin/hooks/use-mobile.ts
|
|
176
|
+
var J = "(max-width: 767px)", He = (e) => {
|
|
177
|
+
let t = window.matchMedia(J);
|
|
178
|
+
return t.addEventListener("change", e), () => t.removeEventListener("change", e);
|
|
179
|
+
};
|
|
180
|
+
function Ue() {
|
|
181
|
+
return P(He, () => window.matchMedia(J).matches, () => !1);
|
|
182
|
+
}
|
|
183
|
+
//#endregion
|
|
184
|
+
//#region src/admin/components/ui/separator.tsx
|
|
185
|
+
function We({ className: e, orientation: t = "horizontal", ...n }) {
|
|
186
|
+
return /* @__PURE__ */ L(Le, {
|
|
187
|
+
"data-slot": "separator",
|
|
188
|
+
orientation: t,
|
|
189
|
+
className: h("shrink-0 bg-border data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch", e),
|
|
190
|
+
...n
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
//#endregion
|
|
194
|
+
//#region src/admin/components/ui/sheet.tsx
|
|
195
|
+
function Ge({ ...e }) {
|
|
196
|
+
return /* @__PURE__ */ L(W.Root, {
|
|
197
|
+
"data-slot": "sheet",
|
|
198
|
+
...e
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
function Ke({ ...e }) {
|
|
202
|
+
return /* @__PURE__ */ L(W.Portal, {
|
|
203
|
+
container: o().portal,
|
|
204
|
+
"data-slot": "sheet-portal",
|
|
205
|
+
...e
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
function qe({ className: e, ...t }) {
|
|
209
|
+
return /* @__PURE__ */ L(W.Backdrop, {
|
|
210
|
+
"data-slot": "sheet-overlay",
|
|
211
|
+
className: h("fixed inset-0 z-50 bg-black/10 transition-opacity duration-150 data-ending-style:opacity-0 data-starting-style:opacity-0 supports-backdrop-filter:backdrop-blur-xs", e),
|
|
212
|
+
...t
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
function Je({ className: e, children: t, side: n = "right", showCloseButton: r = !0, ...i }) {
|
|
216
|
+
return /* @__PURE__ */ R(Ke, { children: [/* @__PURE__ */ L(qe, {}), /* @__PURE__ */ R(W.Popup, {
|
|
217
|
+
"data-slot": "sheet-content",
|
|
218
|
+
"data-side": n,
|
|
219
|
+
className: h("fixed z-50 flex flex-col gap-4 bg-popover bg-clip-padding text-sm text-popover-foreground shadow-lg transition duration-200 ease-in-out data-ending-style:opacity-0 data-starting-style:opacity-0 data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=bottom]:data-ending-style:translate-y-[2.5rem] data-[side=bottom]:data-starting-style:translate-y-[2.5rem] data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-r data-[side=left]:data-ending-style:translate-x-[-2.5rem] data-[side=left]:data-starting-style:translate-x-[-2.5rem] data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-l data-[side=right]:data-ending-style:translate-x-[2.5rem] data-[side=right]:data-starting-style:translate-x-[2.5rem] data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=top]:data-ending-style:translate-y-[-2.5rem] data-[side=top]:data-starting-style:translate-y-[-2.5rem] data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm", e),
|
|
220
|
+
...i,
|
|
221
|
+
children: [t, r && /* @__PURE__ */ R(W.Close, {
|
|
222
|
+
"data-slot": "sheet-close",
|
|
223
|
+
render: /* @__PURE__ */ L(C, {
|
|
224
|
+
variant: "ghost",
|
|
225
|
+
className: "absolute top-3 right-3",
|
|
226
|
+
size: "icon-sm"
|
|
227
|
+
}),
|
|
228
|
+
children: [/* @__PURE__ */ L(Fe, {}), /* @__PURE__ */ L("span", {
|
|
229
|
+
className: "sr-only",
|
|
230
|
+
children: /* @__PURE__ */ L(_, { id: "Close" })
|
|
231
|
+
})]
|
|
232
|
+
})]
|
|
233
|
+
})] });
|
|
234
|
+
}
|
|
235
|
+
function Ye({ className: e, ...t }) {
|
|
236
|
+
return /* @__PURE__ */ L("div", {
|
|
237
|
+
"data-slot": "sheet-header",
|
|
238
|
+
className: h("flex flex-col gap-0.5 p-4", e),
|
|
239
|
+
...t
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
function Xe({ className: e, ...t }) {
|
|
243
|
+
return /* @__PURE__ */ L(W.Title, {
|
|
244
|
+
"data-slot": "sheet-title",
|
|
245
|
+
className: h("font-heading text-base font-medium text-foreground", e),
|
|
246
|
+
...t
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
function Ze({ className: e, ...t }) {
|
|
250
|
+
return /* @__PURE__ */ L(W.Description, {
|
|
251
|
+
"data-slot": "sheet-description",
|
|
252
|
+
className: h("text-sm text-muted-foreground", e),
|
|
253
|
+
...t
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
//#endregion
|
|
257
|
+
//#region src/admin/components/ui/tooltip.tsx
|
|
258
|
+
function Qe({ delay: e = 0, ...t }) {
|
|
259
|
+
return /* @__PURE__ */ L(G.Provider, {
|
|
260
|
+
"data-slot": "tooltip-provider",
|
|
261
|
+
delay: e,
|
|
262
|
+
...t
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
function $e({ ...e }) {
|
|
266
|
+
return /* @__PURE__ */ L(G.Root, {
|
|
267
|
+
"data-slot": "tooltip",
|
|
268
|
+
...e
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
function et({ ...e }) {
|
|
272
|
+
return /* @__PURE__ */ L(G.Trigger, {
|
|
273
|
+
"data-slot": "tooltip-trigger",
|
|
274
|
+
...e
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
function tt({ className: e, side: t = "top", sideOffset: n = 4, align: r = "center", alignOffset: i = 0, children: a, ...s }) {
|
|
278
|
+
return /* @__PURE__ */ L(G.Portal, {
|
|
279
|
+
container: o().portal,
|
|
280
|
+
children: /* @__PURE__ */ L(G.Positioner, {
|
|
281
|
+
align: r,
|
|
282
|
+
alignOffset: i,
|
|
283
|
+
side: t,
|
|
284
|
+
sideOffset: n,
|
|
285
|
+
className: "isolate z-50",
|
|
286
|
+
children: /* @__PURE__ */ R(G.Popup, {
|
|
287
|
+
"data-slot": "tooltip-content",
|
|
288
|
+
className: h("z-50 inline-flex w-fit max-w-xs origin-(--transform-origin) items-center gap-1.5 rounded-md bg-foreground px-3 py-1.5 text-xs text-background has-data-[slot=kbd]:pr-1.5 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95", e),
|
|
289
|
+
...s,
|
|
290
|
+
children: [a, /* @__PURE__ */ L(G.Arrow, { className: "z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground data-[side=bottom]:top-1 data-[side=inline-end]:top-1/2! data-[side=inline-end]:-left-1 data-[side=inline-end]:-translate-y-1/2 data-[side=inline-start]:top-1/2! data-[side=inline-start]:-right-1 data-[side=inline-start]:-translate-y-1/2 data-[side=left]:top-1/2! data-[side=left]:-right-1 data-[side=left]:-translate-y-1/2 data-[side=right]:top-1/2! data-[side=right]:-left-1 data-[side=right]:-translate-y-1/2 data-[side=top]:-bottom-2.5" })]
|
|
291
|
+
})
|
|
292
|
+
})
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
//#endregion
|
|
296
|
+
//#region src/admin/components/ui/sidebar.tsx
|
|
297
|
+
var nt = "16rem", rt = "18rem", it = "3rem", at = "b", Y = k.createContext(null);
|
|
298
|
+
function X() {
|
|
299
|
+
let e = k.useContext(Y);
|
|
300
|
+
if (!e) throw Error("useSidebar must be used within a SidebarProvider.");
|
|
301
|
+
return e;
|
|
302
|
+
}
|
|
303
|
+
function ot({ defaultOpen: e = !0, open: t, onOpenChange: n, className: r, style: i, children: a, ...o }) {
|
|
304
|
+
let s = Ue(), [c, l] = k.useState(!1), [u, d] = k.useState(e), f = t ?? u, p = k.useCallback((e) => {
|
|
305
|
+
let t = typeof e == "function" ? e(f) : e;
|
|
306
|
+
n ? n(t) : d(t);
|
|
307
|
+
}, [n, f]), m = k.useCallback(() => s ? l((e) => !e) : p((e) => !e), [
|
|
308
|
+
s,
|
|
309
|
+
p,
|
|
310
|
+
l
|
|
311
|
+
]), g = f ? "expanded" : "collapsed", _ = k.useMemo(() => ({
|
|
312
|
+
state: g,
|
|
313
|
+
open: f,
|
|
314
|
+
setOpen: p,
|
|
315
|
+
isMobile: s,
|
|
316
|
+
openMobile: c,
|
|
317
|
+
setOpenMobile: l,
|
|
318
|
+
toggleSidebar: m
|
|
319
|
+
}), [
|
|
320
|
+
g,
|
|
321
|
+
f,
|
|
322
|
+
p,
|
|
323
|
+
s,
|
|
324
|
+
c,
|
|
325
|
+
l,
|
|
326
|
+
m
|
|
327
|
+
]);
|
|
328
|
+
return /* @__PURE__ */ L(Y.Provider, {
|
|
329
|
+
value: _,
|
|
330
|
+
children: /* @__PURE__ */ L("div", {
|
|
331
|
+
"data-slot": "sidebar-wrapper",
|
|
332
|
+
onKeyDown: (e) => {
|
|
333
|
+
e.key === at && (e.metaKey || e.ctrlKey) && (e.preventDefault(), m());
|
|
334
|
+
},
|
|
335
|
+
style: {
|
|
336
|
+
"--sidebar-width": nt,
|
|
337
|
+
"--sidebar-width-icon": it,
|
|
338
|
+
...i
|
|
339
|
+
},
|
|
340
|
+
className: h("group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar relative flex min-h-[30rem] w-full", r),
|
|
341
|
+
...o,
|
|
342
|
+
children: a
|
|
343
|
+
})
|
|
344
|
+
});
|
|
345
|
+
}
|
|
346
|
+
function st({ side: e = "left", variant: t = "sidebar", collapsible: n = "offcanvas", className: r, children: i, dir: a, ...o }) {
|
|
347
|
+
let { isMobile: s, state: c, openMobile: l, setOpenMobile: u } = X();
|
|
348
|
+
return n === "none" ? /* @__PURE__ */ L("div", {
|
|
349
|
+
"data-slot": "sidebar",
|
|
350
|
+
className: h("bg-sidebar text-sidebar-foreground flex h-full w-(--sidebar-width) flex-col", r),
|
|
351
|
+
...o,
|
|
352
|
+
children: i
|
|
353
|
+
}) : s ? /* @__PURE__ */ L(Ge, {
|
|
354
|
+
open: l,
|
|
355
|
+
onOpenChange: u,
|
|
356
|
+
...o,
|
|
357
|
+
children: /* @__PURE__ */ R(Je, {
|
|
358
|
+
dir: a,
|
|
359
|
+
"data-sidebar": "sidebar",
|
|
360
|
+
"data-slot": "sidebar",
|
|
361
|
+
"data-mobile": "true",
|
|
362
|
+
className: "bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0 [&>button]:hidden",
|
|
363
|
+
style: { "--sidebar-width": rt },
|
|
364
|
+
side: e,
|
|
365
|
+
children: [/* @__PURE__ */ R(Ye, {
|
|
366
|
+
className: "sr-only",
|
|
367
|
+
children: [/* @__PURE__ */ L(Xe, { children: /* @__PURE__ */ L(_, { id: "Sidebar" }) }), /* @__PURE__ */ L(Ze, { children: /* @__PURE__ */ L(_, { id: "Displays the mobile sidebar." }) })]
|
|
368
|
+
}), /* @__PURE__ */ L("div", {
|
|
369
|
+
className: "flex h-full w-full flex-col",
|
|
370
|
+
children: i
|
|
371
|
+
})]
|
|
372
|
+
})
|
|
373
|
+
}) : /* @__PURE__ */ R("div", {
|
|
374
|
+
className: "group peer text-sidebar-foreground relative hidden md:block",
|
|
375
|
+
"data-state": c,
|
|
376
|
+
"data-collapsible": c === "collapsed" ? n : "",
|
|
377
|
+
"data-variant": t,
|
|
378
|
+
"data-side": e,
|
|
379
|
+
"data-slot": "sidebar",
|
|
380
|
+
children: [/* @__PURE__ */ L("div", {
|
|
381
|
+
"data-slot": "sidebar-gap",
|
|
382
|
+
className: h("relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear", "group-data-[collapsible=offcanvas]:w-0", "group-data-[side=right]:rotate-180", t === "floating" || t === "inset" ? "group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]" : "group-data-[collapsible=icon]:w-(--sidebar-width-icon)")
|
|
383
|
+
}), /* @__PURE__ */ L("div", {
|
|
384
|
+
"data-slot": "sidebar-container",
|
|
385
|
+
"data-side": e,
|
|
386
|
+
className: h("absolute inset-y-0 z-10 hidden h-full w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear data-[side=left]:left-0 data-[side=left]:group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)] data-[side=right]:right-0 data-[side=right]:group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)] md:flex", t === "floating" || t === "inset" ? "p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]" : "group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l", r),
|
|
387
|
+
...o,
|
|
388
|
+
children: /* @__PURE__ */ L("div", {
|
|
389
|
+
"data-sidebar": "sidebar",
|
|
390
|
+
"data-slot": "sidebar-inner",
|
|
391
|
+
className: "bg-sidebar group-data-[variant=floating]:ring-sidebar-border flex size-full flex-col group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:shadow-sm group-data-[variant=floating]:ring-1",
|
|
392
|
+
children: i
|
|
393
|
+
})
|
|
394
|
+
})]
|
|
395
|
+
});
|
|
396
|
+
}
|
|
397
|
+
function ct({ className: e, onClick: t, ...n }) {
|
|
398
|
+
let { toggleSidebar: r } = X();
|
|
399
|
+
return /* @__PURE__ */ R(C, {
|
|
400
|
+
"data-sidebar": "trigger",
|
|
401
|
+
"data-slot": "sidebar-trigger",
|
|
402
|
+
variant: "ghost",
|
|
403
|
+
size: "icon-sm",
|
|
404
|
+
className: h(e),
|
|
405
|
+
onClick: (e) => {
|
|
406
|
+
t?.(e), r();
|
|
407
|
+
},
|
|
408
|
+
...n,
|
|
409
|
+
children: [/* @__PURE__ */ L(Ne, {}), /* @__PURE__ */ L("span", {
|
|
410
|
+
className: "sr-only",
|
|
411
|
+
children: /* @__PURE__ */ L(_, { id: "Toggle Sidebar" })
|
|
412
|
+
})]
|
|
413
|
+
});
|
|
414
|
+
}
|
|
415
|
+
function lt({ className: e, ...n }) {
|
|
416
|
+
let { text: r } = t(), { toggleSidebar: i } = X();
|
|
417
|
+
return /* @__PURE__ */ L("button", {
|
|
418
|
+
"data-sidebar": "rail",
|
|
419
|
+
"data-slot": "sidebar-rail",
|
|
420
|
+
"aria-label": r("Toggle Sidebar"),
|
|
421
|
+
tabIndex: -1,
|
|
422
|
+
onClick: i,
|
|
423
|
+
title: r("Toggle Sidebar"),
|
|
424
|
+
className: h("hover:after:bg-sidebar-border absolute inset-y-0 z-20 hidden w-4 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:start-1/2 after:w-[2px] sm:flex ltr:-translate-x-1/2 rtl:-translate-x-1/2", "in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize", "[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize", "hover:group-data-[collapsible=offcanvas]:bg-sidebar group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full", "[[data-side=left][data-collapsible=offcanvas]_&]:-right-2", "[[data-side=right][data-collapsible=offcanvas]_&]:-left-2", e),
|
|
425
|
+
...n
|
|
426
|
+
});
|
|
427
|
+
}
|
|
428
|
+
function ut({ className: e, ...t }) {
|
|
429
|
+
return /* @__PURE__ */ L("main", {
|
|
430
|
+
"data-slot": "sidebar-inset",
|
|
431
|
+
className: h("relative flex w-full flex-1 flex-col bg-background md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2", e),
|
|
432
|
+
...t
|
|
433
|
+
});
|
|
434
|
+
}
|
|
435
|
+
function dt({ className: e, ...t }) {
|
|
436
|
+
return /* @__PURE__ */ L("div", {
|
|
437
|
+
"data-slot": "sidebar-header",
|
|
438
|
+
"data-sidebar": "header",
|
|
439
|
+
className: h("flex flex-col gap-2 p-2", e),
|
|
440
|
+
...t
|
|
441
|
+
});
|
|
442
|
+
}
|
|
443
|
+
function ft({ className: e, ...t }) {
|
|
444
|
+
return /* @__PURE__ */ L("div", {
|
|
445
|
+
"data-slot": "sidebar-content",
|
|
446
|
+
"data-sidebar": "content",
|
|
447
|
+
className: h("no-scrollbar flex min-h-0 flex-1 flex-col gap-0 overflow-auto group-data-[collapsible=icon]:overflow-hidden", e),
|
|
448
|
+
...t
|
|
449
|
+
});
|
|
450
|
+
}
|
|
451
|
+
function pt({ className: e, ...t }) {
|
|
452
|
+
return /* @__PURE__ */ L("div", {
|
|
453
|
+
"data-slot": "sidebar-group",
|
|
454
|
+
"data-sidebar": "group",
|
|
455
|
+
className: h("relative flex w-full min-w-0 flex-col p-2", e),
|
|
456
|
+
...t
|
|
457
|
+
});
|
|
458
|
+
}
|
|
459
|
+
function mt({ className: e, render: t, ...n }) {
|
|
460
|
+
return U({
|
|
461
|
+
defaultTagName: "div",
|
|
462
|
+
props: H({ className: h("text-sidebar-foreground/70 ring-sidebar-ring flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium outline-hidden transition-[margin,opacity] duration-200 ease-linear group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0 focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0", e) }, n),
|
|
463
|
+
render: t,
|
|
464
|
+
state: {
|
|
465
|
+
slot: "sidebar-group-label",
|
|
466
|
+
sidebar: "group-label"
|
|
467
|
+
}
|
|
468
|
+
});
|
|
469
|
+
}
|
|
470
|
+
function ht({ className: e, ...t }) {
|
|
471
|
+
return /* @__PURE__ */ L("div", {
|
|
472
|
+
"data-slot": "sidebar-group-content",
|
|
473
|
+
"data-sidebar": "group-content",
|
|
474
|
+
className: h("w-full text-sm", e),
|
|
475
|
+
...t
|
|
476
|
+
});
|
|
477
|
+
}
|
|
478
|
+
function Z({ className: e, ...t }) {
|
|
479
|
+
return /* @__PURE__ */ L("ul", {
|
|
480
|
+
"data-slot": "sidebar-menu",
|
|
481
|
+
"data-sidebar": "menu",
|
|
482
|
+
className: h("flex w-full min-w-0 flex-col gap-0", e),
|
|
483
|
+
...t
|
|
484
|
+
});
|
|
485
|
+
}
|
|
486
|
+
function Q({ className: e, ...t }) {
|
|
487
|
+
return /* @__PURE__ */ L("li", {
|
|
488
|
+
"data-slot": "sidebar-menu-item",
|
|
489
|
+
"data-sidebar": "menu-item",
|
|
490
|
+
className: h("group/menu-item relative", e),
|
|
491
|
+
...t
|
|
492
|
+
});
|
|
493
|
+
}
|
|
494
|
+
var gt = Ie("peer/menu-button group/menu-button ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground data-open:hover:bg-sidebar-accent data-open:hover:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-hidden transition-[width,height,padding] group-has-data-[sidebar=menu-action]/menu-item:pr-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-active:font-medium [&_svg]:size-4 [&_svg]:shrink-0 [&>span:last-child]:truncate", {
|
|
495
|
+
variants: {
|
|
496
|
+
variant: {
|
|
497
|
+
default: "hover:bg-sidebar-accent hover:text-sidebar-accent-foreground",
|
|
498
|
+
outline: "hover:bg-sidebar-accent hover:text-sidebar-accent-foreground bg-background shadow-[0_0_0_1px_var(--sidebar-border)] hover:shadow-[0_0_0_1px_var(--sidebar-accent)]"
|
|
499
|
+
},
|
|
500
|
+
size: {
|
|
501
|
+
default: "h-8 text-sm",
|
|
502
|
+
sm: "h-7 text-xs",
|
|
503
|
+
lg: "h-12 text-sm group-data-[collapsible=icon]:p-0!"
|
|
504
|
+
}
|
|
505
|
+
},
|
|
506
|
+
defaultVariants: {
|
|
507
|
+
variant: "default",
|
|
508
|
+
size: "default"
|
|
509
|
+
}
|
|
510
|
+
});
|
|
511
|
+
function _t({ render: e, isActive: t = !1, variant: n = "default", size: r = "default", tooltip: i, className: a, ...o }) {
|
|
512
|
+
let { isMobile: s, state: c } = X(), l = U({
|
|
513
|
+
defaultTagName: "button",
|
|
514
|
+
props: H({ className: h(gt({
|
|
515
|
+
variant: n,
|
|
516
|
+
size: r
|
|
517
|
+
}), a) }, o),
|
|
518
|
+
render: i ? /* @__PURE__ */ L(et, { render: e }) : e,
|
|
519
|
+
state: {
|
|
520
|
+
slot: "sidebar-menu-button",
|
|
521
|
+
sidebar: "menu-button",
|
|
522
|
+
size: r,
|
|
523
|
+
active: t
|
|
524
|
+
}
|
|
525
|
+
});
|
|
526
|
+
return i ? (typeof i == "string" && (i = { children: i }), /* @__PURE__ */ R($e, { children: [l, /* @__PURE__ */ L(tt, {
|
|
527
|
+
side: "right",
|
|
528
|
+
align: "center",
|
|
529
|
+
hidden: c !== "collapsed" || s,
|
|
530
|
+
...i
|
|
531
|
+
})] })) : l;
|
|
532
|
+
}
|
|
533
|
+
function vt({ className: e, ...t }) {
|
|
534
|
+
return /* @__PURE__ */ L("ul", {
|
|
535
|
+
"data-slot": "sidebar-menu-sub",
|
|
536
|
+
"data-sidebar": "menu-sub",
|
|
537
|
+
className: h("border-sidebar-border mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l px-2.5 py-0.5 group-data-[collapsible=icon]:hidden", e),
|
|
538
|
+
...t
|
|
539
|
+
});
|
|
540
|
+
}
|
|
541
|
+
function yt({ className: e, ...t }) {
|
|
542
|
+
return /* @__PURE__ */ L("li", {
|
|
543
|
+
"data-slot": "sidebar-menu-sub-item",
|
|
544
|
+
"data-sidebar": "menu-sub-item",
|
|
545
|
+
className: h("group/menu-sub-item relative", e),
|
|
546
|
+
...t
|
|
547
|
+
});
|
|
548
|
+
}
|
|
549
|
+
function bt({ render: e, size: t = "md", isActive: n = !1, className: r, ...i }) {
|
|
550
|
+
return U({
|
|
551
|
+
defaultTagName: "a",
|
|
552
|
+
props: H({ className: h("text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground [&>svg]:text-sidebar-accent-foreground flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 outline-hidden group-data-[collapsible=icon]:hidden focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[size=md]:text-sm data-[size=sm]:text-xs [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0", r) }, i),
|
|
553
|
+
render: e,
|
|
554
|
+
state: {
|
|
555
|
+
slot: "sidebar-menu-sub-button",
|
|
556
|
+
sidebar: "menu-sub-button",
|
|
557
|
+
size: t,
|
|
558
|
+
active: n
|
|
559
|
+
}
|
|
560
|
+
});
|
|
561
|
+
}
|
|
562
|
+
//#endregion
|
|
563
|
+
//#region src/admin/navigation.tsx
|
|
564
|
+
var xt = [
|
|
565
|
+
{
|
|
566
|
+
title: "Dashboard",
|
|
567
|
+
path: "/",
|
|
568
|
+
icon: ye,
|
|
569
|
+
order: 0,
|
|
570
|
+
useVisible: w,
|
|
571
|
+
items: [{
|
|
572
|
+
title: "Overview",
|
|
573
|
+
path: "/"
|
|
574
|
+
}, {
|
|
575
|
+
title: "Reports",
|
|
576
|
+
path: "/reports"
|
|
577
|
+
}]
|
|
578
|
+
},
|
|
579
|
+
{
|
|
580
|
+
title: "Customers",
|
|
581
|
+
path: "/customers",
|
|
582
|
+
icon: Ee,
|
|
583
|
+
order: 10,
|
|
584
|
+
useVisible: T
|
|
585
|
+
},
|
|
586
|
+
{
|
|
587
|
+
title: "Subscriptions",
|
|
588
|
+
path: "/subscriptions",
|
|
589
|
+
icon: Se,
|
|
590
|
+
order: 20,
|
|
591
|
+
useVisible: T
|
|
592
|
+
},
|
|
593
|
+
{
|
|
594
|
+
title: "Payments",
|
|
595
|
+
path: "/payments",
|
|
596
|
+
icon: B,
|
|
597
|
+
order: 30,
|
|
598
|
+
useVisible: T,
|
|
599
|
+
items: [
|
|
600
|
+
{
|
|
601
|
+
title: "Payments",
|
|
602
|
+
path: "/payments"
|
|
603
|
+
},
|
|
604
|
+
{
|
|
605
|
+
title: "Health",
|
|
606
|
+
path: "/payments/health",
|
|
607
|
+
useVisible: w
|
|
608
|
+
},
|
|
609
|
+
{
|
|
610
|
+
title: "Attempts",
|
|
611
|
+
path: "/payments/attempts"
|
|
612
|
+
},
|
|
613
|
+
{
|
|
614
|
+
title: "Renewals",
|
|
615
|
+
path: "/payments/cycles"
|
|
616
|
+
}
|
|
617
|
+
]
|
|
618
|
+
},
|
|
619
|
+
{
|
|
620
|
+
title: "Orders",
|
|
621
|
+
path: "/orders",
|
|
622
|
+
icon: B,
|
|
623
|
+
order: 40,
|
|
624
|
+
useVisible: T
|
|
625
|
+
},
|
|
626
|
+
{
|
|
627
|
+
title: "Catalog",
|
|
628
|
+
path: "/catalog",
|
|
629
|
+
icon: be,
|
|
630
|
+
order: 50,
|
|
631
|
+
useVisible: ne,
|
|
632
|
+
items: [
|
|
633
|
+
{
|
|
634
|
+
title: "Products",
|
|
635
|
+
path: "/catalog"
|
|
636
|
+
},
|
|
637
|
+
{
|
|
638
|
+
title: "Prices",
|
|
639
|
+
path: "/catalog/prices"
|
|
640
|
+
},
|
|
641
|
+
{
|
|
642
|
+
title: "Metering",
|
|
643
|
+
path: "/catalog/metering"
|
|
644
|
+
},
|
|
645
|
+
{
|
|
646
|
+
title: "Drift",
|
|
647
|
+
path: "/catalog/drift",
|
|
648
|
+
useVisible: E
|
|
649
|
+
}
|
|
650
|
+
]
|
|
651
|
+
},
|
|
652
|
+
{
|
|
653
|
+
title: "Ops",
|
|
654
|
+
path: "/ops",
|
|
655
|
+
icon: De,
|
|
656
|
+
order: 60,
|
|
657
|
+
useVisible: E
|
|
658
|
+
},
|
|
659
|
+
{
|
|
660
|
+
title: "Settings",
|
|
661
|
+
path: "/settings",
|
|
662
|
+
icon: Ce,
|
|
663
|
+
order: 70
|
|
664
|
+
}
|
|
665
|
+
].map((e) => ({ ...e }));
|
|
666
|
+
//#endregion
|
|
667
|
+
//#region src/admin/components/app-sidebar.tsx
|
|
668
|
+
function St(e, t, n) {
|
|
669
|
+
return t === n ? e === t : e.startsWith(t);
|
|
670
|
+
}
|
|
671
|
+
function Ct() {
|
|
672
|
+
let { pathname: e } = d(), t = [{
|
|
673
|
+
label: "Billing",
|
|
674
|
+
items: xt
|
|
675
|
+
}], n = [...xt].sort((e, t) => t.path.length - e.path.length).find((t) => e === t.path || t.path !== "/" && e.startsWith(t.path + "/"))?.path;
|
|
676
|
+
return /* @__PURE__ */ R(st, {
|
|
677
|
+
variant: "inset",
|
|
678
|
+
collapsible: "icon",
|
|
679
|
+
children: [
|
|
680
|
+
/* @__PURE__ */ L(dt, { children: /* @__PURE__ */ L(Dt, {}) }),
|
|
681
|
+
/* @__PURE__ */ L(ft, { children: t.map((t) => /* @__PURE__ */ R(pt, { children: [/* @__PURE__ */ L(mt, { children: /* @__PURE__ */ L(_, { id: t.label }) }), /* @__PURE__ */ L(ht, { children: /* @__PURE__ */ L(Z, { children: t.items.map((t) => /* @__PURE__ */ L(Tt, {
|
|
682
|
+
item: t,
|
|
683
|
+
active: t.path === n,
|
|
684
|
+
pathname: e
|
|
685
|
+
}, t.path)) }) })] }, t.label)) }),
|
|
686
|
+
/* @__PURE__ */ L(lt, {})
|
|
687
|
+
]
|
|
688
|
+
});
|
|
689
|
+
}
|
|
690
|
+
var wt = () => !0;
|
|
691
|
+
function Tt({ item: e, active: n, pathname: r }) {
|
|
692
|
+
let { text: i } = t();
|
|
693
|
+
return (e.useVisible ?? wt)() ? /* @__PURE__ */ R(Q, { children: [/* @__PURE__ */ L(_t, {
|
|
694
|
+
isActive: n,
|
|
695
|
+
tooltip: i(e.title),
|
|
696
|
+
render: /* @__PURE__ */ R(p, {
|
|
697
|
+
to: e.path,
|
|
698
|
+
children: [e.icon && /* @__PURE__ */ L(z, { icon: e.icon }), /* @__PURE__ */ L("span", { children: /* @__PURE__ */ L(_, { id: e.title }) })]
|
|
699
|
+
})
|
|
700
|
+
}), e.items && n && /* @__PURE__ */ L(vt, { children: e.items.map((t) => /* @__PURE__ */ L(Et, {
|
|
701
|
+
sub: t,
|
|
702
|
+
active: St(r, t.path, e.path)
|
|
703
|
+
}, t.path)) })] }) : null;
|
|
704
|
+
}
|
|
705
|
+
function Et({ sub: e, active: t }) {
|
|
706
|
+
return (e.useVisible ?? wt)() ? /* @__PURE__ */ L(yt, { children: /* @__PURE__ */ L(bt, {
|
|
707
|
+
isActive: t,
|
|
708
|
+
render: /* @__PURE__ */ L(p, {
|
|
709
|
+
to: e.path,
|
|
710
|
+
children: /* @__PURE__ */ L("span", { children: /* @__PURE__ */ L(_, { id: e.title }) })
|
|
711
|
+
})
|
|
712
|
+
}) }) : null;
|
|
713
|
+
}
|
|
714
|
+
function Dt() {
|
|
715
|
+
let { activeMerchant: e, merchants: t, selectMerchant: n } = D(), r = m(), i = o().props.newMerchantHref, a = e?.display_name || e?.slug || "Select merchant", s = e?.role || "Merchant console", c = e?.slug.slice(0, 2) ?? "µ";
|
|
716
|
+
return /* @__PURE__ */ L(Z, { children: /* @__PURE__ */ L(Q, { children: /* @__PURE__ */ R(S, { children: [/* @__PURE__ */ L(x, { render: /* @__PURE__ */ R(_t, {
|
|
717
|
+
size: "lg",
|
|
718
|
+
tooltip: a,
|
|
719
|
+
className: "data-open:bg-sidebar-accent",
|
|
720
|
+
children: [
|
|
721
|
+
/* @__PURE__ */ L("span", {
|
|
722
|
+
className: "flex aspect-square size-8 shrink-0 items-center justify-center rounded-lg bg-primary text-xs font-semibold text-primary-foreground uppercase",
|
|
723
|
+
children: c
|
|
724
|
+
}),
|
|
725
|
+
/* @__PURE__ */ R("span", {
|
|
726
|
+
className: "grid min-w-0 flex-1 text-left leading-tight",
|
|
727
|
+
children: [/* @__PURE__ */ L("span", {
|
|
728
|
+
className: "truncate text-sm font-medium",
|
|
729
|
+
children: a
|
|
730
|
+
}), /* @__PURE__ */ L("span", {
|
|
731
|
+
className: "truncate text-xs text-muted-foreground capitalize",
|
|
732
|
+
children: s
|
|
733
|
+
})]
|
|
734
|
+
}),
|
|
735
|
+
/* @__PURE__ */ L(z, {
|
|
736
|
+
icon: Te,
|
|
737
|
+
className: "ml-auto size-4 shrink-0"
|
|
738
|
+
})
|
|
739
|
+
]
|
|
740
|
+
}) }), /* @__PURE__ */ R(b, {
|
|
741
|
+
side: "bottom",
|
|
742
|
+
align: "start",
|
|
743
|
+
className: "min-w-60",
|
|
744
|
+
children: [/* @__PURE__ */ R(te, { children: [/* @__PURE__ */ L(v, {
|
|
745
|
+
className: "text-xs text-muted-foreground",
|
|
746
|
+
children: /* @__PURE__ */ L(_, { id: "Merchants" })
|
|
747
|
+
}), t.map((t) => {
|
|
748
|
+
let r = t.slug === e?.slug;
|
|
749
|
+
return /* @__PURE__ */ R(y, {
|
|
750
|
+
onClick: () => n(t.slug),
|
|
751
|
+
className: "gap-2 py-2",
|
|
752
|
+
children: [
|
|
753
|
+
/* @__PURE__ */ L("span", {
|
|
754
|
+
className: "flex size-7 shrink-0 items-center justify-center rounded-md bg-muted text-[10px] font-semibold uppercase",
|
|
755
|
+
children: t.slug.slice(0, 2)
|
|
756
|
+
}),
|
|
757
|
+
/* @__PURE__ */ R("span", {
|
|
758
|
+
className: "grid min-w-0 flex-1 leading-tight",
|
|
759
|
+
children: [/* @__PURE__ */ L("span", {
|
|
760
|
+
className: "truncate text-sm",
|
|
761
|
+
children: t.display_name || t.slug
|
|
762
|
+
}), t.role && /* @__PURE__ */ L("span", {
|
|
763
|
+
className: "truncate text-xs text-muted-foreground capitalize",
|
|
764
|
+
children: t.role
|
|
765
|
+
})]
|
|
766
|
+
}),
|
|
767
|
+
r && /* @__PURE__ */ L(z, {
|
|
768
|
+
icon: we,
|
|
769
|
+
className: "ml-auto size-4 shrink-0 text-primary"
|
|
770
|
+
})
|
|
771
|
+
]
|
|
772
|
+
}, t.slug);
|
|
773
|
+
})] }), i && /* @__PURE__ */ R(I, { children: [/* @__PURE__ */ L(ee, {}), /* @__PURE__ */ R(y, {
|
|
774
|
+
onClick: () => void r(i),
|
|
775
|
+
className: "gap-2 py-2",
|
|
776
|
+
children: [/* @__PURE__ */ L("span", {
|
|
777
|
+
className: "flex size-7 shrink-0 items-center justify-center rounded-md border border-dashed border-border",
|
|
778
|
+
children: /* @__PURE__ */ L(z, {
|
|
779
|
+
icon: ge,
|
|
780
|
+
className: "size-4"
|
|
781
|
+
})
|
|
782
|
+
}), /* @__PURE__ */ L(_, { id: "New merchant" })]
|
|
783
|
+
})] })]
|
|
784
|
+
})] }) }) });
|
|
785
|
+
}
|
|
786
|
+
//#endregion
|
|
787
|
+
//#region src/admin/components/no-access.tsx
|
|
788
|
+
function Ot({ area: e }) {
|
|
789
|
+
return /* @__PURE__ */ L("div", {
|
|
790
|
+
className: "flex items-center justify-center py-16",
|
|
791
|
+
children: /* @__PURE__ */ R("div", {
|
|
792
|
+
className: "w-full max-w-sm",
|
|
793
|
+
children: [/* @__PURE__ */ L("h1", {
|
|
794
|
+
className: "text-2xl font-semibold tracking-tight text-balance",
|
|
795
|
+
children: e ? `You don't have access to ${e}` : "You don't have access to this merchant's billing"
|
|
796
|
+
}), /* @__PURE__ */ L("p", {
|
|
797
|
+
className: "mt-2 text-sm text-pretty text-muted-foreground",
|
|
798
|
+
children: /* @__PURE__ */ L(_, { id: "Ask an administrator for a role that includes it." })
|
|
799
|
+
})]
|
|
800
|
+
})
|
|
801
|
+
});
|
|
802
|
+
}
|
|
803
|
+
//#endregion
|
|
804
|
+
//#region src/admin/components/no-merchants.tsx
|
|
805
|
+
function kt() {
|
|
806
|
+
let { props: e } = o();
|
|
807
|
+
return /* @__PURE__ */ L("div", {
|
|
808
|
+
role: "status",
|
|
809
|
+
className: "p-8",
|
|
810
|
+
children: e.emptyState ?? /* @__PURE__ */ R(I, { children: [/* @__PURE__ */ L("p", { children: /* @__PURE__ */ L(_, { id: "Select a merchant to view its billing." }) }), e.newMerchantHref && /* @__PURE__ */ L("a", {
|
|
811
|
+
href: e.newMerchantHref,
|
|
812
|
+
children: /* @__PURE__ */ L(_, { id: "New merchant" })
|
|
813
|
+
})] })
|
|
814
|
+
});
|
|
815
|
+
}
|
|
816
|
+
//#endregion
|
|
817
|
+
//#region src/admin/components/notification-bell.tsx
|
|
818
|
+
function At() {
|
|
819
|
+
let { text: e } = t(), { adminQueries: n } = f(), r = m(), [i, a] = k.useState(!1), o = w(), s = E(), { data: c = 0 } = F({
|
|
820
|
+
...n.unreadNotifications(),
|
|
821
|
+
enabled: s && o
|
|
822
|
+
}), { data: l, isFetching: u } = F(n.notifications(s && i)), d = l?.data ?? [];
|
|
823
|
+
if (!s) return null;
|
|
824
|
+
let p = (e) => {
|
|
825
|
+
a(!1), r(`/ops?finding=${encodeURIComponent(e.id)}`);
|
|
826
|
+
};
|
|
827
|
+
return /* @__PURE__ */ R(S, {
|
|
828
|
+
open: i,
|
|
829
|
+
onOpenChange: a,
|
|
830
|
+
children: [/* @__PURE__ */ L(x, { render: /* @__PURE__ */ R(C, {
|
|
831
|
+
variant: "ghost",
|
|
832
|
+
size: "icon",
|
|
833
|
+
"aria-label": e("Notifications"),
|
|
834
|
+
className: "relative",
|
|
835
|
+
children: [/* @__PURE__ */ L(z, {
|
|
836
|
+
icon: V,
|
|
837
|
+
className: "size-4"
|
|
838
|
+
}), c > 0 && /* @__PURE__ */ L("span", {
|
|
839
|
+
className: "absolute -top-0.5 -right-0.5 flex h-4 min-w-4 items-center justify-center rounded-full bg-destructive px-1 text-[10px] font-medium text-white",
|
|
840
|
+
children: c > 9 ? "9+" : c
|
|
841
|
+
})]
|
|
842
|
+
}) }), /* @__PURE__ */ R(b, {
|
|
843
|
+
align: "end",
|
|
844
|
+
className: "w-80 p-0 sm:w-96",
|
|
845
|
+
children: [/* @__PURE__ */ R("div", {
|
|
846
|
+
className: "flex items-center justify-between border-b px-3 py-2",
|
|
847
|
+
children: [/* @__PURE__ */ L("span", {
|
|
848
|
+
className: "text-sm font-medium",
|
|
849
|
+
children: /* @__PURE__ */ L(_, { id: "Needs attention" })
|
|
850
|
+
}), c > d.length && /* @__PURE__ */ R(C, {
|
|
851
|
+
variant: "ghost",
|
|
852
|
+
size: "sm",
|
|
853
|
+
className: "h-6 px-2 text-xs",
|
|
854
|
+
onClick: () => {
|
|
855
|
+
a(!1), r("/ops");
|
|
856
|
+
},
|
|
857
|
+
children: [/* @__PURE__ */ L(_, { id: "View all " }), c]
|
|
858
|
+
})]
|
|
859
|
+
}), /* @__PURE__ */ L("div", {
|
|
860
|
+
className: "max-h-96 overflow-y-auto",
|
|
861
|
+
children: u ? /* @__PURE__ */ L("p", {
|
|
862
|
+
className: "px-3 py-6 text-center text-sm text-muted-foreground",
|
|
863
|
+
children: /* @__PURE__ */ L(_, { id: "Loading…" })
|
|
864
|
+
}) : d.length === 0 ? /* @__PURE__ */ R("div", {
|
|
865
|
+
className: "flex flex-col items-center gap-1 px-3 py-8 text-center",
|
|
866
|
+
children: [/* @__PURE__ */ L(z, {
|
|
867
|
+
icon: V,
|
|
868
|
+
className: "size-5 text-muted-foreground"
|
|
869
|
+
}), /* @__PURE__ */ L("p", {
|
|
870
|
+
className: "text-sm text-muted-foreground",
|
|
871
|
+
children: /* @__PURE__ */ L(_, { id: "You're all caught up." })
|
|
872
|
+
})]
|
|
873
|
+
}) : d.map((e) => /* @__PURE__ */ R("button", {
|
|
874
|
+
type: "button",
|
|
875
|
+
onClick: () => p(e),
|
|
876
|
+
className: "flex w-full items-start gap-2 border-b px-3 py-2 text-left last:border-b-0 hover:bg-muted/50",
|
|
877
|
+
children: [/* @__PURE__ */ L("span", {
|
|
878
|
+
className: "mt-0.5 shrink-0",
|
|
879
|
+
children: e.severity === "critical" || e.severity === "high" ? /* @__PURE__ */ L(z, {
|
|
880
|
+
icon: ve,
|
|
881
|
+
className: "text-failed size-4"
|
|
882
|
+
}) : /* @__PURE__ */ L(z, {
|
|
883
|
+
icon: _e,
|
|
884
|
+
className: "text-held size-4"
|
|
885
|
+
})
|
|
886
|
+
}), /* @__PURE__ */ R("span", {
|
|
887
|
+
className: "min-w-0 flex-1",
|
|
888
|
+
children: [/* @__PURE__ */ R("span", {
|
|
889
|
+
className: "flex items-center justify-between gap-2",
|
|
890
|
+
children: [/* @__PURE__ */ L("span", {
|
|
891
|
+
className: "truncate text-sm font-medium",
|
|
892
|
+
children: e.finding_type
|
|
893
|
+
}), /* @__PURE__ */ L("span", {
|
|
894
|
+
className: "shrink-0 text-[11px] text-muted-foreground",
|
|
895
|
+
children: ie(e.created_at)
|
|
896
|
+
})]
|
|
897
|
+
}), e.recommended_action && /* @__PURE__ */ L("span", {
|
|
898
|
+
className: "mt-0.5 line-clamp-2 block text-xs text-muted-foreground",
|
|
899
|
+
children: e.recommended_action
|
|
900
|
+
})]
|
|
901
|
+
})]
|
|
902
|
+
}, e.id))
|
|
903
|
+
})]
|
|
904
|
+
})]
|
|
905
|
+
});
|
|
906
|
+
}
|
|
907
|
+
//#endregion
|
|
908
|
+
//#region src/admin/components/ui/breadcrumb.tsx
|
|
909
|
+
function jt({ className: e, ...n }) {
|
|
910
|
+
let { text: r } = t();
|
|
911
|
+
return /* @__PURE__ */ L("nav", {
|
|
912
|
+
"aria-label": r("breadcrumb"),
|
|
913
|
+
"data-slot": "breadcrumb",
|
|
914
|
+
className: h(e),
|
|
915
|
+
...n
|
|
916
|
+
});
|
|
917
|
+
}
|
|
918
|
+
function Mt({ className: e, ...t }) {
|
|
919
|
+
return /* @__PURE__ */ L("ol", {
|
|
920
|
+
"data-slot": "breadcrumb-list",
|
|
921
|
+
className: h("flex flex-wrap items-center gap-1.5 text-sm wrap-break-word text-muted-foreground", e),
|
|
922
|
+
...t
|
|
923
|
+
});
|
|
924
|
+
}
|
|
925
|
+
function $({ className: e, ...t }) {
|
|
926
|
+
return /* @__PURE__ */ L("li", {
|
|
927
|
+
"data-slot": "breadcrumb-item",
|
|
928
|
+
className: h("inline-flex items-center gap-1", e),
|
|
929
|
+
...t
|
|
930
|
+
});
|
|
931
|
+
}
|
|
932
|
+
function Nt({ className: e, render: t, ...n }) {
|
|
933
|
+
return U({
|
|
934
|
+
defaultTagName: "a",
|
|
935
|
+
props: H({ className: h("transition-colors hover:text-foreground", e) }, n),
|
|
936
|
+
render: t,
|
|
937
|
+
state: { slot: "breadcrumb-link" }
|
|
938
|
+
});
|
|
939
|
+
}
|
|
940
|
+
function Pt({ className: e, ...t }) {
|
|
941
|
+
return /* @__PURE__ */ L("span", {
|
|
942
|
+
"data-slot": "breadcrumb-page",
|
|
943
|
+
role: "link",
|
|
944
|
+
"aria-disabled": "true",
|
|
945
|
+
"aria-current": "page",
|
|
946
|
+
className: h("font-normal text-foreground", e),
|
|
947
|
+
...t
|
|
948
|
+
});
|
|
949
|
+
}
|
|
950
|
+
function Ft({ children: e, className: t, ...n }) {
|
|
951
|
+
return /* @__PURE__ */ L("li", {
|
|
952
|
+
"data-slot": "breadcrumb-separator",
|
|
953
|
+
role: "presentation",
|
|
954
|
+
"aria-hidden": "true",
|
|
955
|
+
className: h("[&>svg]:size-3.5", t),
|
|
956
|
+
...n,
|
|
957
|
+
children: e ?? /* @__PURE__ */ L(Oe, {})
|
|
958
|
+
});
|
|
959
|
+
}
|
|
960
|
+
//#endregion
|
|
961
|
+
//#region src/admin/components/site-header.tsx
|
|
962
|
+
function It({ trail: e }) {
|
|
963
|
+
let { activeMerchant: t } = D(), n = E();
|
|
964
|
+
return /* @__PURE__ */ R("header", {
|
|
965
|
+
className: "flex h-14 shrink-0 items-center gap-2 border-b px-4",
|
|
966
|
+
children: [
|
|
967
|
+
/* @__PURE__ */ L(ct, { className: "-ml-1" }),
|
|
968
|
+
/* @__PURE__ */ L(We, {
|
|
969
|
+
orientation: "vertical",
|
|
970
|
+
className: "mr-2 h-4"
|
|
971
|
+
}),
|
|
972
|
+
/* @__PURE__ */ L(jt, { children: /* @__PURE__ */ L(Mt, { children: e.length === 0 ? /* @__PURE__ */ L($, { children: /* @__PURE__ */ L(Pt, { children: /* @__PURE__ */ L(_, { id: "Dashboard" }) }) }) : /* @__PURE__ */ R(I, { children: [/* @__PURE__ */ L($, { children: /* @__PURE__ */ L(Nt, { render: /* @__PURE__ */ L(p, {
|
|
973
|
+
to: "/",
|
|
974
|
+
children: /* @__PURE__ */ L(_, { id: "Dashboard" })
|
|
975
|
+
}) }) }), e.map((t, n) => /* @__PURE__ */ R(k.Fragment, { children: [/* @__PURE__ */ L(Ft, {}), /* @__PURE__ */ L($, { children: t.to && n < e.length - 1 ? /* @__PURE__ */ L(Nt, { render: /* @__PURE__ */ L(p, {
|
|
976
|
+
to: t.to,
|
|
977
|
+
children: /* @__PURE__ */ L(_, { id: t.label })
|
|
978
|
+
}) }) : /* @__PURE__ */ L(Pt, { children: /* @__PURE__ */ L(_, { id: t.label }) }) })] }, t.label))] }) }) }),
|
|
979
|
+
/* @__PURE__ */ L("div", {
|
|
980
|
+
className: "ml-auto flex items-center gap-2",
|
|
981
|
+
children: t && n && /* @__PURE__ */ L(At, {})
|
|
982
|
+
})
|
|
983
|
+
]
|
|
984
|
+
});
|
|
985
|
+
}
|
|
986
|
+
//#endregion
|
|
987
|
+
//#region src/admin/layouts/app-layout.tsx
|
|
988
|
+
var Lt = [
|
|
989
|
+
["/customers", [{ label: "Customers" }]],
|
|
990
|
+
["/subscriptions", [{ label: "Subscriptions" }]],
|
|
991
|
+
["/payments", [{ label: "Payments" }]],
|
|
992
|
+
["/catalog/metering", [{
|
|
993
|
+
label: "Catalog",
|
|
994
|
+
to: "/catalog"
|
|
995
|
+
}, { label: "Metering" }]],
|
|
996
|
+
["/catalog/prices", [{
|
|
997
|
+
label: "Catalog",
|
|
998
|
+
to: "/catalog"
|
|
999
|
+
}, { label: "Prices" }]],
|
|
1000
|
+
["/catalog/drift", [{
|
|
1001
|
+
label: "Catalog",
|
|
1002
|
+
to: "/catalog"
|
|
1003
|
+
}, { label: "Drift" }]],
|
|
1004
|
+
["/catalog", [{
|
|
1005
|
+
label: "Catalog",
|
|
1006
|
+
to: "/catalog"
|
|
1007
|
+
}, { label: "Products" }]],
|
|
1008
|
+
["/ops", [{ label: "Ops" }]],
|
|
1009
|
+
["/settings", [{ label: "Settings" }]]
|
|
1010
|
+
];
|
|
1011
|
+
function Rt(e, t) {
|
|
1012
|
+
let n = (t) => e === t || e.startsWith(t + "/");
|
|
1013
|
+
return n("/payments/health") ? {
|
|
1014
|
+
name: "payment health",
|
|
1015
|
+
allowed: t.metrics === !0
|
|
1016
|
+
} : [
|
|
1017
|
+
"/customers",
|
|
1018
|
+
"/subscriptions",
|
|
1019
|
+
"/payments",
|
|
1020
|
+
"/orders"
|
|
1021
|
+
].some(n) ? {
|
|
1022
|
+
name: "customer support",
|
|
1023
|
+
allowed: t.admin === "read" || t.admin === "update"
|
|
1024
|
+
} : n("/ops") || n("/catalog/drift") ? {
|
|
1025
|
+
name: "merchant configuration",
|
|
1026
|
+
allowed: t.merchant_config === "read" || t.merchant_config === "update"
|
|
1027
|
+
} : n("/catalog") ? {
|
|
1028
|
+
name: "the catalog",
|
|
1029
|
+
allowed: t.catalog === "read" || t.catalog === "update"
|
|
1030
|
+
} : null;
|
|
1031
|
+
}
|
|
1032
|
+
function zt({ children: e }) {
|
|
1033
|
+
let { activeMerchant: t } = D(), { pathname: n } = d(), { props: r, services: i } = o(), a = F(i.adminQueries.access()), s = a.data, c = (r.settingsTabs?.length ?? 0) > 0 && (n === "/settings" || n === "/"), l = Lt.find(([e]) => n.startsWith(e))?.[1] ?? [];
|
|
1034
|
+
return t ? a.isPending ? /* @__PURE__ */ L("p", {
|
|
1035
|
+
role: "status",
|
|
1036
|
+
className: "p-6",
|
|
1037
|
+
children: /* @__PURE__ */ L(_, { id: "Loading billing permissions…" })
|
|
1038
|
+
}) : a.error ? /* @__PURE__ */ R("div", {
|
|
1039
|
+
role: "alert",
|
|
1040
|
+
className: "p-6",
|
|
1041
|
+
children: [/* @__PURE__ */ L("p", { children: a.error.message }), /* @__PURE__ */ L("button", {
|
|
1042
|
+
type: "button",
|
|
1043
|
+
onClick: () => void a.refetch(),
|
|
1044
|
+
children: /* @__PURE__ */ L(_, { id: "Try again" })
|
|
1045
|
+
})]
|
|
1046
|
+
}) : t.id && s?.scope_id && t.id !== s.scope_id ? /* @__PURE__ */ L("p", {
|
|
1047
|
+
role: "alert",
|
|
1048
|
+
className: "p-6",
|
|
1049
|
+
children: /* @__PURE__ */ L(_, { id: "The authenticated connection is bound to another merchant. Update the host connection before opening this merchant." })
|
|
1050
|
+
}) : /* @__PURE__ */ L(Qe, { children: /* @__PURE__ */ R(ot, { children: [/* @__PURE__ */ L(Ct, {}), /* @__PURE__ */ R(ut, { children: [/* @__PURE__ */ L(It, { trail: l }), /* @__PURE__ */ L("main", {
|
|
1051
|
+
className: "flex min-w-0 flex-1 flex-col p-4 md:p-8",
|
|
1052
|
+
children: /* @__PURE__ */ L("div", {
|
|
1053
|
+
className: "mx-auto w-full max-w-7xl min-w-0",
|
|
1054
|
+
children: s && (!re(s) && !c || Rt(n, s)?.allowed === !1) ? /* @__PURE__ */ L(Ot, { area: Rt(n, s)?.name }) : e
|
|
1055
|
+
})
|
|
1056
|
+
}, t?.id || t?.slug || "")] })] }) }) : /* @__PURE__ */ L(kt, {});
|
|
1057
|
+
}
|
|
1058
|
+
//#endregion
|
|
1059
|
+
//#region src/admin/components/ui/alert-dialog.tsx
|
|
1060
|
+
function Bt({ ...e }) {
|
|
1061
|
+
return /* @__PURE__ */ L(K.Root, {
|
|
1062
|
+
"data-slot": "alert-dialog",
|
|
1063
|
+
...e
|
|
1064
|
+
});
|
|
1065
|
+
}
|
|
1066
|
+
function Vt({ ...e }) {
|
|
1067
|
+
return /* @__PURE__ */ L(K.Portal, {
|
|
1068
|
+
container: o().portal,
|
|
1069
|
+
"data-slot": "alert-dialog-portal",
|
|
1070
|
+
...e
|
|
1071
|
+
});
|
|
1072
|
+
}
|
|
1073
|
+
function Ht({ className: e, ...t }) {
|
|
1074
|
+
return /* @__PURE__ */ L(K.Backdrop, {
|
|
1075
|
+
"data-slot": "alert-dialog-overlay",
|
|
1076
|
+
className: h("fixed inset-0 isolate z-50 bg-black/10 duration-100 data-closed:animate-out data-closed:fade-out-0 data-open:animate-in data-open:fade-in-0 supports-backdrop-filter:backdrop-blur-xs", e),
|
|
1077
|
+
...t
|
|
1078
|
+
});
|
|
1079
|
+
}
|
|
1080
|
+
function Ut({ className: e, size: t = "default", ...n }) {
|
|
1081
|
+
return /* @__PURE__ */ R(Vt, { children: [/* @__PURE__ */ L(Ht, {}), /* @__PURE__ */ L(K.Popup, {
|
|
1082
|
+
"data-slot": "alert-dialog-content",
|
|
1083
|
+
"data-size": t,
|
|
1084
|
+
className: h("group/alert-dialog-content fixed top-1/2 left-1/2 z-50 grid w-full -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl bg-popover p-4 text-popover-foreground ring-1 ring-foreground/10 duration-100 outline-none data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-[size=default]:max-w-xs data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-sm", e),
|
|
1085
|
+
...n
|
|
1086
|
+
})] });
|
|
1087
|
+
}
|
|
1088
|
+
function Wt({ className: e, ...t }) {
|
|
1089
|
+
return /* @__PURE__ */ L("div", {
|
|
1090
|
+
"data-slot": "alert-dialog-header",
|
|
1091
|
+
className: h("grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-4 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]", e),
|
|
1092
|
+
...t
|
|
1093
|
+
});
|
|
1094
|
+
}
|
|
1095
|
+
function Gt({ className: e, ...t }) {
|
|
1096
|
+
return /* @__PURE__ */ L("div", {
|
|
1097
|
+
"data-slot": "alert-dialog-footer",
|
|
1098
|
+
className: h("-mx-4 -mb-4 flex flex-col-reverse gap-2 rounded-b-xl border-t bg-muted/50 p-4 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end", e),
|
|
1099
|
+
...t
|
|
1100
|
+
});
|
|
1101
|
+
}
|
|
1102
|
+
function Kt({ className: e, ...t }) {
|
|
1103
|
+
return /* @__PURE__ */ L(K.Title, {
|
|
1104
|
+
"data-slot": "alert-dialog-title",
|
|
1105
|
+
className: h("font-heading text-base font-medium sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2", e),
|
|
1106
|
+
...t
|
|
1107
|
+
});
|
|
1108
|
+
}
|
|
1109
|
+
function qt({ className: e, ...t }) {
|
|
1110
|
+
return /* @__PURE__ */ L(K.Description, {
|
|
1111
|
+
"data-slot": "alert-dialog-description",
|
|
1112
|
+
className: h("text-sm text-balance text-muted-foreground md:text-pretty *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground", e),
|
|
1113
|
+
...t
|
|
1114
|
+
});
|
|
1115
|
+
}
|
|
1116
|
+
function Jt({ className: e, ...t }) {
|
|
1117
|
+
return /* @__PURE__ */ L(C, {
|
|
1118
|
+
"data-slot": "alert-dialog-action",
|
|
1119
|
+
className: h(e),
|
|
1120
|
+
...t
|
|
1121
|
+
});
|
|
1122
|
+
}
|
|
1123
|
+
function Yt({ className: e, variant: t = "outline", size: n = "default", ...r }) {
|
|
1124
|
+
return /* @__PURE__ */ L(K.Close, {
|
|
1125
|
+
"data-slot": "alert-dialog-cancel",
|
|
1126
|
+
className: h(e),
|
|
1127
|
+
render: /* @__PURE__ */ L(C, {
|
|
1128
|
+
variant: t,
|
|
1129
|
+
size: n
|
|
1130
|
+
}),
|
|
1131
|
+
...r
|
|
1132
|
+
});
|
|
1133
|
+
}
|
|
1134
|
+
//#endregion
|
|
1135
|
+
//#region src/admin/components/confirm.tsx
|
|
1136
|
+
function Xt({ children: e }) {
|
|
1137
|
+
let [t, n] = k.useState(null), [r, i] = k.useState(!1), a = k.useRef(null), o = k.useCallback((e) => {
|
|
1138
|
+
a.current?.(e), a.current = null, i(!1);
|
|
1139
|
+
}, []), s = k.useCallback((e) => new Promise((t) => {
|
|
1140
|
+
a.current?.(!1), a.current = t, n(e), i(!0);
|
|
1141
|
+
}), []);
|
|
1142
|
+
return k.useEffect(() => () => a.current?.(!1), []), /* @__PURE__ */ R(ae.Provider, {
|
|
1143
|
+
value: s,
|
|
1144
|
+
children: [e, /* @__PURE__ */ L(Bt, {
|
|
1145
|
+
open: r,
|
|
1146
|
+
onOpenChange: (e) => {
|
|
1147
|
+
e || o(!1);
|
|
1148
|
+
},
|
|
1149
|
+
children: /* @__PURE__ */ R(Ut, { children: [/* @__PURE__ */ R(Wt, { children: [/* @__PURE__ */ L(Kt, { children: t?.title }), t?.description ? /* @__PURE__ */ L(qt, { children: t.description }) : null] }), /* @__PURE__ */ R(Gt, { children: [/* @__PURE__ */ L(Yt, { children: t?.cancelLabel ?? "Cancel" }), /* @__PURE__ */ L(Jt, {
|
|
1150
|
+
variant: t?.tone === "destructive" ? "destructive" : "default",
|
|
1151
|
+
onClick: () => o(!0),
|
|
1152
|
+
children: t?.confirmLabel ?? "Confirm"
|
|
1153
|
+
})] })] })
|
|
1154
|
+
})]
|
|
1155
|
+
});
|
|
1156
|
+
}
|
|
1157
|
+
//#endregion
|
|
1158
|
+
//#region src/admin/components/ui/sonner.tsx
|
|
1159
|
+
var Zt = ({ ...e }) => {
|
|
1160
|
+
let t = o().props.appearance?.theme ?? "system";
|
|
1161
|
+
return /* @__PURE__ */ L(he, {
|
|
1162
|
+
id: o().services.namespace,
|
|
1163
|
+
theme: t === "inherit" ? "system" : t,
|
|
1164
|
+
className: "toaster group",
|
|
1165
|
+
icons: {
|
|
1166
|
+
success: /* @__PURE__ */ L(ke, { className: "size-4" }),
|
|
1167
|
+
info: /* @__PURE__ */ L(Ae, { className: "size-4" }),
|
|
1168
|
+
warning: /* @__PURE__ */ L(Pe, { className: "size-4" }),
|
|
1169
|
+
error: /* @__PURE__ */ L(Me, { className: "size-4" }),
|
|
1170
|
+
loading: /* @__PURE__ */ L(je, { className: "size-4 animate-spin" })
|
|
1171
|
+
},
|
|
1172
|
+
style: {
|
|
1173
|
+
"--normal-bg": "var(--popover)",
|
|
1174
|
+
"--normal-text": "var(--popover-foreground)",
|
|
1175
|
+
"--normal-border": "var(--border)",
|
|
1176
|
+
"--border-radius": "var(--radius)"
|
|
1177
|
+
},
|
|
1178
|
+
toastOptions: { classNames: { toast: "cn-toast" } },
|
|
1179
|
+
...e
|
|
1180
|
+
});
|
|
1181
|
+
}, Qt = [
|
|
1182
|
+
/dynamically imported module/i,
|
|
1183
|
+
/failed to load module script/i,
|
|
1184
|
+
/importing a module script failed/i,
|
|
1185
|
+
/loading (css )?chunk \S+ failed/i,
|
|
1186
|
+
/unable to preload css/i
|
|
1187
|
+
];
|
|
1188
|
+
function $t(e) {
|
|
1189
|
+
let t = e;
|
|
1190
|
+
return t?.name === "ChunkLoadError" || Qt.some((e) => e.test(t?.message ?? ""));
|
|
1191
|
+
}
|
|
1192
|
+
//#endregion
|
|
1193
|
+
//#region src/admin/components/route-error.tsx
|
|
1194
|
+
function en({ error: e }) {
|
|
1195
|
+
let t = $t(e), n = e instanceof Error ? e.message : "";
|
|
1196
|
+
return /* @__PURE__ */ R("div", {
|
|
1197
|
+
role: "alert",
|
|
1198
|
+
className: "flex min-h-[50vh] flex-col items-center justify-center gap-4 p-6 text-center",
|
|
1199
|
+
children: [/* @__PURE__ */ R("div", {
|
|
1200
|
+
className: "max-w-md",
|
|
1201
|
+
children: [/* @__PURE__ */ L("p", {
|
|
1202
|
+
className: "font-medium",
|
|
1203
|
+
children: t ? "The console has been updated. Reload to use the new version." : "This page failed to load."
|
|
1204
|
+
}), !t && n ? /* @__PURE__ */ L("p", {
|
|
1205
|
+
className: "mt-1 text-sm break-words text-muted-foreground",
|
|
1206
|
+
children: n
|
|
1207
|
+
}) : null]
|
|
1208
|
+
}), /* @__PURE__ */ R("div", {
|
|
1209
|
+
className: "flex flex-wrap items-center justify-center gap-3",
|
|
1210
|
+
children: [/* @__PURE__ */ R(C, {
|
|
1211
|
+
onClick: () => window.location.reload(),
|
|
1212
|
+
children: [/* @__PURE__ */ L(z, {
|
|
1213
|
+
icon: xe,
|
|
1214
|
+
className: "size-4"
|
|
1215
|
+
}), t ? "Reload" : "Try again"]
|
|
1216
|
+
}), /* @__PURE__ */ L(p, {
|
|
1217
|
+
to: "/",
|
|
1218
|
+
className: "text-sm text-muted-foreground underline underline-offset-4",
|
|
1219
|
+
children: /* @__PURE__ */ L(_, { id: "Console home" })
|
|
1220
|
+
})]
|
|
1221
|
+
})]
|
|
1222
|
+
});
|
|
1223
|
+
}
|
|
1224
|
+
//#endregion
|
|
1225
|
+
//#region src/admin/lib/query-client.ts
|
|
1226
|
+
function tn(e, t) {
|
|
1227
|
+
return t instanceof n && t.status < 500 ? !1 : e < 2;
|
|
1228
|
+
}
|
|
1229
|
+
var nn = (e) => {
|
|
1230
|
+
let { toastApiError: t } = c(l(e));
|
|
1231
|
+
return new pe({
|
|
1232
|
+
queryCache: new fe({ onError: (e, n) => {
|
|
1233
|
+
let r = n.meta?.errorAction;
|
|
1234
|
+
typeof r == "string" && t(e, r);
|
|
1235
|
+
} }),
|
|
1236
|
+
defaultOptions: {
|
|
1237
|
+
queries: {
|
|
1238
|
+
staleTime: 2e4,
|
|
1239
|
+
gcTime: 3e5,
|
|
1240
|
+
retry: tn
|
|
1241
|
+
},
|
|
1242
|
+
mutations: { retry: !1 }
|
|
1243
|
+
}
|
|
1244
|
+
});
|
|
1245
|
+
}, rn = () => window.matchMedia?.("(prefers-color-scheme: dark)"), an = (e) => {
|
|
1246
|
+
let t = rn();
|
|
1247
|
+
return t?.addEventListener("change", e), () => t?.removeEventListener("change", e);
|
|
1248
|
+
}, on = () => rn()?.matches ? "dark" : "light", sn = () => "light", cn = () => () => {};
|
|
1249
|
+
function ln(e = "inherit") {
|
|
1250
|
+
let t = P(e === "auto" ? an : cn, on, sn);
|
|
1251
|
+
return e === "auto" ? t : e;
|
|
1252
|
+
}
|
|
1253
|
+
//#endregion
|
|
1254
|
+
//#region src/admin/billing-admin.tsx
|
|
1255
|
+
var un = (e) => typeof e == "string" ? {
|
|
1256
|
+
id: e,
|
|
1257
|
+
slug: e
|
|
1258
|
+
} : e;
|
|
1259
|
+
function dn(e) {
|
|
1260
|
+
let [t, n] = N(), [r, i] = N({
|
|
1261
|
+
auth: e.auth,
|
|
1262
|
+
baseUrl: e.baseUrl,
|
|
1263
|
+
generation: 0
|
|
1264
|
+
});
|
|
1265
|
+
return (r.auth !== e.auth || r.baseUrl !== e.baseUrl) && i({
|
|
1266
|
+
auth: e.auth,
|
|
1267
|
+
baseUrl: e.baseUrl,
|
|
1268
|
+
generation: r.generation + 1
|
|
1269
|
+
}), /* @__PURE__ */ L(fn, {
|
|
1270
|
+
...e,
|
|
1271
|
+
selected: t,
|
|
1272
|
+
onSelected: n
|
|
1273
|
+
}, r.generation);
|
|
1274
|
+
}
|
|
1275
|
+
function fn({ selected: e, onSelected: t, ...n }) {
|
|
1276
|
+
let i = ln(n.appearance?.theme), o = le(), [s, c] = N(null), l = M(() => n.merchants ?? (n.merchant ? [un(n.merchant)] : [{
|
|
1277
|
+
id: "",
|
|
1278
|
+
slug: "",
|
|
1279
|
+
display_name: "Billing"
|
|
1280
|
+
}]), [n.merchants, n.merchant]), d = n.merchant ? un(n.merchant).id : e, f = l.find((e) => e.id === d || e.slug === d) ?? l[0], p = `${n.baseUrl}:${f?.id ?? ""}:${f?.slug ?? ""}`, m = de(p);
|
|
1281
|
+
ue(() => (m.current = p, () => {
|
|
1282
|
+
m.current = void 0;
|
|
1283
|
+
}), [p]);
|
|
1284
|
+
let h = j(() => m.current === p, [p]), _ = M(() => n.queryClient ?? nn(o), [o, n.queryClient]), v = {
|
|
1285
|
+
props: n,
|
|
1286
|
+
services: M(() => a({
|
|
1287
|
+
namespace: o,
|
|
1288
|
+
isCurrent: h,
|
|
1289
|
+
baseUrl: n.baseUrl,
|
|
1290
|
+
auth: n.auth,
|
|
1291
|
+
merchant: f,
|
|
1292
|
+
exchange: n.exchange
|
|
1293
|
+
}), [
|
|
1294
|
+
h,
|
|
1295
|
+
o,
|
|
1296
|
+
n.baseUrl,
|
|
1297
|
+
n.auth,
|
|
1298
|
+
n.exchange,
|
|
1299
|
+
f
|
|
1300
|
+
]),
|
|
1301
|
+
merchants: l,
|
|
1302
|
+
activeMerchant: f,
|
|
1303
|
+
portal: s,
|
|
1304
|
+
selectMerchant(e) {
|
|
1305
|
+
let r = l.find((t) => t.slug === e || t.id === e);
|
|
1306
|
+
r && (t(r.id), n.onMerchantChange?.(r));
|
|
1307
|
+
}
|
|
1308
|
+
};
|
|
1309
|
+
return /* @__PURE__ */ L("div", {
|
|
1310
|
+
lang: n.language ?? "en",
|
|
1311
|
+
className: ["orba", n.className].filter(Boolean).join(" "),
|
|
1312
|
+
"data-orba-theme": i,
|
|
1313
|
+
style: {
|
|
1314
|
+
...q(n.appearance, "orba"),
|
|
1315
|
+
...n.style
|
|
1316
|
+
},
|
|
1317
|
+
children: /* @__PURE__ */ L(r.Provider, {
|
|
1318
|
+
value: {
|
|
1319
|
+
namespace: o,
|
|
1320
|
+
messages: n.messages
|
|
1321
|
+
},
|
|
1322
|
+
children: /* @__PURE__ */ R(g.Provider, {
|
|
1323
|
+
value: v,
|
|
1324
|
+
children: [/* @__PURE__ */ L(me, {
|
|
1325
|
+
client: _,
|
|
1326
|
+
children: /* @__PURE__ */ R(u, {
|
|
1327
|
+
basePath: n.basePath,
|
|
1328
|
+
navigation: n.navigation,
|
|
1329
|
+
children: [/* @__PURE__ */ L(Xt, { children: /* @__PURE__ */ L(zt, { children: /* @__PURE__ */ L(mn, { children: /* @__PURE__ */ L(Ve, {}) }) }) }), /* @__PURE__ */ L(Zt, {})]
|
|
1330
|
+
})
|
|
1331
|
+
}), /* @__PURE__ */ L("div", { ref: c })]
|
|
1332
|
+
})
|
|
1333
|
+
})
|
|
1334
|
+
});
|
|
1335
|
+
}
|
|
1336
|
+
var pn = class extends oe {
|
|
1337
|
+
state = {};
|
|
1338
|
+
static getDerivedStateFromError(e) {
|
|
1339
|
+
return { error: e };
|
|
1340
|
+
}
|
|
1341
|
+
render() {
|
|
1342
|
+
return this.state.error ? /* @__PURE__ */ L(en, { error: this.state.error }) : this.props.children;
|
|
1343
|
+
}
|
|
1344
|
+
};
|
|
1345
|
+
function mn({ children: e }) {
|
|
1346
|
+
let t = d();
|
|
1347
|
+
return /* @__PURE__ */ L(pn, { children: e }, t.pathname);
|
|
1348
|
+
}
|
|
1349
|
+
//#endregion
|
|
1350
|
+
//#region src/admin/summary.tsx
|
|
1351
|
+
function hn(t) {
|
|
1352
|
+
let n = typeof t.merchant == "string" ? t.merchant : t.merchant?.id, r = typeof t.merchant == "string" ? t.merchant : t.merchant?.slug;
|
|
1353
|
+
return M(() => s(e({
|
|
1354
|
+
baseUrl: t.baseUrl,
|
|
1355
|
+
auth: t.auth,
|
|
1356
|
+
exchange: t.exchange,
|
|
1357
|
+
merchant: n ? {
|
|
1358
|
+
id: n,
|
|
1359
|
+
slug: r ?? n
|
|
1360
|
+
} : void 0
|
|
1361
|
+
})), [
|
|
1362
|
+
t.baseUrl,
|
|
1363
|
+
t.auth,
|
|
1364
|
+
t.exchange,
|
|
1365
|
+
n,
|
|
1366
|
+
r
|
|
1367
|
+
]);
|
|
1368
|
+
}
|
|
1369
|
+
function gn(e) {
|
|
1370
|
+
let [t, n] = N(0), [r, i] = N();
|
|
1371
|
+
ce(() => {
|
|
1372
|
+
let n = new AbortController();
|
|
1373
|
+
return e(n.signal).then((r) => {
|
|
1374
|
+
n.signal.aborted || i({
|
|
1375
|
+
load: e,
|
|
1376
|
+
attempt: t,
|
|
1377
|
+
data: r
|
|
1378
|
+
});
|
|
1379
|
+
}, (r) => {
|
|
1380
|
+
n.signal.aborted || i({
|
|
1381
|
+
load: e,
|
|
1382
|
+
attempt: t,
|
|
1383
|
+
error: r instanceof Error ? r : Error(String(r))
|
|
1384
|
+
});
|
|
1385
|
+
}), () => n.abort();
|
|
1386
|
+
}, [e, t]);
|
|
1387
|
+
let a = r?.load === e && r.attempt === t ? r : void 0;
|
|
1388
|
+
return {
|
|
1389
|
+
data: a?.data,
|
|
1390
|
+
error: a?.error,
|
|
1391
|
+
isPending: !a,
|
|
1392
|
+
refetch: () => n((e) => e + 1)
|
|
1393
|
+
};
|
|
1394
|
+
}
|
|
1395
|
+
function _n(e) {
|
|
1396
|
+
let t = hn(e);
|
|
1397
|
+
return gn(j((e) => t.getAdminAccess(e), [t]));
|
|
1398
|
+
}
|
|
1399
|
+
function vn(e) {
|
|
1400
|
+
let t = ln(e.appearance?.theme), n = hn(e), { data: r, error: i, isPending: a, refetch: o } = gn(j(async (t) => {
|
|
1401
|
+
let [r, i, a, o, s] = await Promise.all([
|
|
1402
|
+
n.getCustomer(e.customer, t),
|
|
1403
|
+
n.listSubscriptions({
|
|
1404
|
+
customer_id: e.customer,
|
|
1405
|
+
status: "active"
|
|
1406
|
+
}, 5, void 0, t),
|
|
1407
|
+
n.listCustomerEntitlements(e.customer, { limit: 5 }, t),
|
|
1408
|
+
n.listCustomerProductAccess(e.customer, { limit: 5 }, t),
|
|
1409
|
+
n.listPayments({ customer_id: e.customer }, { limit: 5 }, t)
|
|
1410
|
+
]);
|
|
1411
|
+
return {
|
|
1412
|
+
customer: r,
|
|
1413
|
+
subscriptions: i,
|
|
1414
|
+
entitlements: a,
|
|
1415
|
+
access: o,
|
|
1416
|
+
payments: s
|
|
1417
|
+
};
|
|
1418
|
+
}, [n, e.customer]));
|
|
1419
|
+
return /* @__PURE__ */ L("section", {
|
|
1420
|
+
className: ["orba", e.className].filter(Boolean).join(" "),
|
|
1421
|
+
"data-orba-theme": t,
|
|
1422
|
+
style: q(e.appearance, "orba"),
|
|
1423
|
+
children: /* @__PURE__ */ R("div", {
|
|
1424
|
+
className: "rounded-lg border p-4",
|
|
1425
|
+
children: [
|
|
1426
|
+
/* @__PURE__ */ L("h3", {
|
|
1427
|
+
className: "font-semibold",
|
|
1428
|
+
children: /* @__PURE__ */ L(_, { id: "Billing" })
|
|
1429
|
+
}),
|
|
1430
|
+
a && /* @__PURE__ */ L("p", {
|
|
1431
|
+
role: "status",
|
|
1432
|
+
children: /* @__PURE__ */ L(_, { id: "Loading billing…" })
|
|
1433
|
+
}),
|
|
1434
|
+
i && /* @__PURE__ */ R("p", {
|
|
1435
|
+
role: "alert",
|
|
1436
|
+
children: [
|
|
1437
|
+
i.message,
|
|
1438
|
+
" ",
|
|
1439
|
+
/* @__PURE__ */ L("button", {
|
|
1440
|
+
type: "button",
|
|
1441
|
+
onClick: o,
|
|
1442
|
+
children: /* @__PURE__ */ L(_, { id: "Try again" })
|
|
1443
|
+
})
|
|
1444
|
+
]
|
|
1445
|
+
}),
|
|
1446
|
+
r && /* @__PURE__ */ R(I, { children: [
|
|
1447
|
+
/* @__PURE__ */ L("dl", { children: r.customer.balances.map((e) => /* @__PURE__ */ R("div", { children: [/* @__PURE__ */ L("dt", { children: /* @__PURE__ */ L(_, { id: "Available balance" }) }), /* @__PURE__ */ L("dd", { children: O(e.available_amount, e.currency) })] }, e.currency)) }),
|
|
1448
|
+
/* @__PURE__ */ L("h4", { children: /* @__PURE__ */ L(_, { id: "Active subscriptions" }) }),
|
|
1449
|
+
r.subscriptions.data.length ? /* @__PURE__ */ L("ul", { children: r.subscriptions.data.map((e) => /* @__PURE__ */ L("li", { children: e.id }, e.id)) }) : /* @__PURE__ */ L("p", { children: /* @__PURE__ */ L(_, { id: "No active subscriptions." }) }),
|
|
1450
|
+
/* @__PURE__ */ L("h4", { children: /* @__PURE__ */ L(_, { id: "Entitlements" }) }),
|
|
1451
|
+
/* @__PURE__ */ L("ul", { children: r.entitlements.data.map((e) => /* @__PURE__ */ L("li", { children: e.entitlement }, e.entitlement)) }),
|
|
1452
|
+
/* @__PURE__ */ L("h4", { children: /* @__PURE__ */ L(_, { id: "Product access" }) }),
|
|
1453
|
+
/* @__PURE__ */ L("ul", { children: r.access.data.map((e) => /* @__PURE__ */ R("li", { children: [
|
|
1454
|
+
e.product_name,
|
|
1455
|
+
" · ",
|
|
1456
|
+
e.status
|
|
1457
|
+
] }, e.id)) }),
|
|
1458
|
+
/* @__PURE__ */ L("h4", { children: /* @__PURE__ */ L(_, { id: "Recent payments" }) }),
|
|
1459
|
+
/* @__PURE__ */ L("ul", { children: r.payments.data.map((e) => /* @__PURE__ */ R("li", { children: [
|
|
1460
|
+
O(e.amount, e.currency),
|
|
1461
|
+
" ·",
|
|
1462
|
+
" ",
|
|
1463
|
+
e.status
|
|
1464
|
+
] }, e.id)) })
|
|
1465
|
+
] }),
|
|
1466
|
+
e.href && /* @__PURE__ */ L("a", {
|
|
1467
|
+
className: "underline",
|
|
1468
|
+
href: e.href,
|
|
1469
|
+
children: /* @__PURE__ */ L(_, { id: "View billing details" })
|
|
1470
|
+
})
|
|
1471
|
+
]
|
|
1472
|
+
})
|
|
1473
|
+
});
|
|
1474
|
+
}
|
|
1475
|
+
function yn(e) {
|
|
1476
|
+
return e.subscriptions.some((e) => e.status !== "canceled") ? ["This customer has ongoing subscriptions. Banning or deleting the account does not cancel them; cancel them separately in billing."] : [];
|
|
1477
|
+
}
|
|
1478
|
+
var bn = {
|
|
1479
|
+
"customer:read": "Read customers, subscriptions, payments, and orders.",
|
|
1480
|
+
"customer:manage": "Change customer billing, including refunds, cancellations, and credits.",
|
|
1481
|
+
"catalog:manage": "Change products, prices, meters, and catalog migrations.",
|
|
1482
|
+
"catalog:read": "Read products, prices, meters, and catalog migrations.",
|
|
1483
|
+
"config:read": "Read merchant configuration, PSPs, findings, and notifications.",
|
|
1484
|
+
"config:manage": "Change merchant configuration, PSPs, findings, and notifications.",
|
|
1485
|
+
"metrics:read": "Read revenue metrics, reports, and dashboards.",
|
|
1486
|
+
"entitlements:read": "Read customer entitlements through the application API.",
|
|
1487
|
+
"usage:read": "Read usage, admissions, and running charges through the application API.",
|
|
1488
|
+
"usage:manage": "Admit and charge usage through the application API.",
|
|
1489
|
+
"events:read": "Read and acknowledge billing events through the application API.",
|
|
1490
|
+
"orders:manage": "Preview, create, and withdraw merchant orders through the application API.",
|
|
1491
|
+
"customers:read": "Find customers by their network account through the application API."
|
|
1492
|
+
}, xn = Object.fromEntries(["merchant", "root"].flatMap((e) => Object.entries(bn).map(([t, n]) => [`${e}:${t}`, `${n} ${e === "root" ? "Applies across merchants." : "Applies within this merchant."}`]))), Sn = {
|
|
1493
|
+
" Edit widget": " Edit widget",
|
|
1494
|
+
" Price": " Price",
|
|
1495
|
+
" Product": " Product",
|
|
1496
|
+
" Product access": " Product access",
|
|
1497
|
+
" Refund": " Refund",
|
|
1498
|
+
" affected · requires human confirm": " affected · requires human confirm",
|
|
1499
|
+
" balance": " balance",
|
|
1500
|
+
" credentials · ": " credentials · ",
|
|
1501
|
+
" days away. Card networks require that much notice before a price goes up. You can change the number in Settings.": " days away. Card networks require that much notice before a price goes up. You can change the number in Settings.",
|
|
1502
|
+
" days. Pick a shorter range.": " days. Pick a shorter range.",
|
|
1503
|
+
" is not a supported currency.": " is not a supported currency.",
|
|
1504
|
+
" left alone because another change was already scheduled for them.": " left alone because another change was already scheduled for them.",
|
|
1505
|
+
" more": " more",
|
|
1506
|
+
" of": " of",
|
|
1507
|
+
" of 3:": " of 3:",
|
|
1508
|
+
" on ": " on ",
|
|
1509
|
+
" rail. Remaining refundable: ": " rail. Remaining refundable: ",
|
|
1510
|
+
" seats.": " seats.",
|
|
1511
|
+
" subscription": " subscription",
|
|
1512
|
+
" to": " to",
|
|
1513
|
+
" to ": " to ",
|
|
1514
|
+
" to confirm": " to confirm",
|
|
1515
|
+
" to this customer.": " to this customer.",
|
|
1516
|
+
" with this shape.": " with this shape.",
|
|
1517
|
+
" · due ": " · due ",
|
|
1518
|
+
" · exp ": " · exp ",
|
|
1519
|
+
" · last seen": " · last seen",
|
|
1520
|
+
" · owed": " · owed",
|
|
1521
|
+
" · since ": " · since ",
|
|
1522
|
+
" · theirs": " · theirs",
|
|
1523
|
+
" · txn": " · txn",
|
|
1524
|
+
"\"Not sent to provider\" is fixed by publishing the catalog. Everything else is fixed under Settings, Payment providers.": "\"Not sent to provider\" is fixed by publishing the catalog. Everything else is fixed under Settings, Payment providers.",
|
|
1525
|
+
", an edit set": ", an edit set",
|
|
1526
|
+
", before another action.": ", before another action.",
|
|
1527
|
+
". Active holds may prevent revocation. Payment refunds are managed separately.": ". Active holds may prevent revocation. Payment refunds are managed separately.",
|
|
1528
|
+
". Currency and interval stay locked to the current price.": ". Currency and interval stay locked to the current price.",
|
|
1529
|
+
"/app/usage-events": "/app/usage-events",
|
|
1530
|
+
"1 day": "1 day",
|
|
1531
|
+
"30 days": "30 days",
|
|
1532
|
+
"365 days": "365 days",
|
|
1533
|
+
"7 days": "7 days",
|
|
1534
|
+
": the batch says": ": the batch says",
|
|
1535
|
+
": yours ": ": yours ",
|
|
1536
|
+
"A collection of this order is in progress. It must finish, or be resolved with ": "A collection of this order is in progress. It must finish, or be resolved with ",
|
|
1537
|
+
"A price going down needs no notice, so today is fine.": "A price going down needs no notice, so today is fine.",
|
|
1538
|
+
"A product is the thing a customer gets. You set what it costs afterwards, by adding a price to it.": "A product is the thing a customer gets. You set what it costs afterwards, by adding a price to it.",
|
|
1539
|
+
"A reprice_scheduled notice is queued for every affected subscriber as soon as you confirm.": "A reprice_scheduled notice is queued for every affected subscriber as soon as you confirm.",
|
|
1540
|
+
"Access duration": "Access duration",
|
|
1541
|
+
"Access, not paying": "Access, not paying",
|
|
1542
|
+
"Account ID": "Account ID",
|
|
1543
|
+
"Accrual cap": "Accrual cap",
|
|
1544
|
+
"Accrue from another meter": "Accrue from another meter",
|
|
1545
|
+
Action: "Action",
|
|
1546
|
+
Active: "Active",
|
|
1547
|
+
"Active subscriptions": "Active subscriptions",
|
|
1548
|
+
Activity: "Activity",
|
|
1549
|
+
"Add PSP": "Add PSP",
|
|
1550
|
+
"Add a PSP": "Add a PSP",
|
|
1551
|
+
"Add cell": "Add cell",
|
|
1552
|
+
"Add contact": "Add contact",
|
|
1553
|
+
"Add credit in ": "Add credit in ",
|
|
1554
|
+
"Add dimension": "Add dimension",
|
|
1555
|
+
"Add filter": "Add filter",
|
|
1556
|
+
"Add tax detail": "Add tax detail",
|
|
1557
|
+
"Add tier": "Add tier",
|
|
1558
|
+
Aggregation: "Aggregation",
|
|
1559
|
+
"Alert email": "Alert email",
|
|
1560
|
+
All: "All",
|
|
1561
|
+
"All PSPs": "All PSPs",
|
|
1562
|
+
"All origins": "All origins",
|
|
1563
|
+
"All owners": "All owners",
|
|
1564
|
+
"All rails": "All rails",
|
|
1565
|
+
"All statuses": "All statuses",
|
|
1566
|
+
Allowance: "Allowance",
|
|
1567
|
+
"Also revoke access immediately": "Also revoke access immediately",
|
|
1568
|
+
"Also revoke granted access": "Also revoke granted access",
|
|
1569
|
+
Amount: "Amount",
|
|
1570
|
+
"Amount (": "Amount (",
|
|
1571
|
+
"Apply catalog": "Apply catalog",
|
|
1572
|
+
"Apply catalog changes": "Apply catalog changes",
|
|
1573
|
+
"Apply filters": "Apply filters",
|
|
1574
|
+
"Apply reviewed batch": "Apply reviewed batch",
|
|
1575
|
+
Archive: "Archive",
|
|
1576
|
+
Ask: "Ask",
|
|
1577
|
+
"Ask an administrator for a role that includes it.": "Ask an administrator for a role that includes it.",
|
|
1578
|
+
"Attempt not found.": "Attempt not found.",
|
|
1579
|
+
Attempted: "Attempted",
|
|
1580
|
+
Attempts: "Attempts",
|
|
1581
|
+
"Available balance": "Available balance",
|
|
1582
|
+
Back: "Back",
|
|
1583
|
+
"Back to metering": "Back to metering",
|
|
1584
|
+
Balance: "Balance",
|
|
1585
|
+
"Batch receipt": "Batch receipt",
|
|
1586
|
+
Billing: "Billing",
|
|
1587
|
+
"Billing contacts": "Billing contacts",
|
|
1588
|
+
"Billing interval": "Billing interval",
|
|
1589
|
+
"Billing support": "Billing support",
|
|
1590
|
+
"Can this be bought?": "Can this be bought?",
|
|
1591
|
+
Cancel: "Cancel",
|
|
1592
|
+
"Cancel subscription": "Cancel subscription",
|
|
1593
|
+
"Cancel this migration?": "Cancel this migration?",
|
|
1594
|
+
Canceled: "Canceled",
|
|
1595
|
+
Card: "Card",
|
|
1596
|
+
"Card verifications": "Card verifications",
|
|
1597
|
+
Catalog: "Catalog",
|
|
1598
|
+
"Catalog document": "Catalog document",
|
|
1599
|
+
"Catalog updates are disabled. Meter definitions and rates are visible here; changes require the host operator.": "Catalog updates are disabled. Meter definitions and rates are visible here; changes require the host operator.",
|
|
1600
|
+
"Catalog updates are disabled. The console is read-only.": "Catalog updates are disabled. The console is read-only.",
|
|
1601
|
+
"Catalog updates are unavailable. You can still browse products and prices.": "Catalog updates are unavailable. You can still browse products and prices.",
|
|
1602
|
+
"Category / reason": "Category / reason",
|
|
1603
|
+
"Schedule the customer's plan or seats for the next renewal. No card is charged now. Choosing the current plan and seats clears a pending change. The customer is told.": "Schedule the customer's plan or seats for the next renewal. No card is charged now. Choosing the current plan and seats clears a pending change. The customer is told.",
|
|
1604
|
+
"Change payment method": "Change payment method",
|
|
1605
|
+
"Change price": "Change price",
|
|
1606
|
+
"Change price for ": "Change price for ",
|
|
1607
|
+
"Change subscription": "Change subscription",
|
|
1608
|
+
"Change the title, chart type or date range behavior. The query stays the same.": "Change the title, chart type or date range behavior. The query stays the same.",
|
|
1609
|
+
Channel: "Channel",
|
|
1610
|
+
"Charged twice": "Charged twice",
|
|
1611
|
+
"Chart type": "Chart type",
|
|
1612
|
+
"Checking your catalog…": "Checking your catalog…",
|
|
1613
|
+
"Choose a method": "Choose a method",
|
|
1614
|
+
Churn: "Churn",
|
|
1615
|
+
"Clear all": "Clear all",
|
|
1616
|
+
"Clear customer filter": "Clear customer filter",
|
|
1617
|
+
"Clear filters": "Clear filters",
|
|
1618
|
+
Close: "Close",
|
|
1619
|
+
Code: "Code",
|
|
1620
|
+
Collected: "Collected",
|
|
1621
|
+
"Collection method": "Collection method",
|
|
1622
|
+
"Collection:": "Collection:",
|
|
1623
|
+
"Connect the account that will take money for you. Credentials go straight into the secret store and are never shown again.": "Connect the account that will take money for you. Credentials go straight into the secret store and are never shown again.",
|
|
1624
|
+
"Console home": "Console home",
|
|
1625
|
+
Contact: "Contact",
|
|
1626
|
+
"Continue with payment provider": "Continue with payment provider",
|
|
1627
|
+
"Could not load the available plans.": "Could not load the available plans.",
|
|
1628
|
+
"Count events": "Count events",
|
|
1629
|
+
"Count uses one unit for every matching event.": "Count uses one unit for every matching event.",
|
|
1630
|
+
Coverage: "Coverage",
|
|
1631
|
+
"Create a meter to describe the events your application will report and bill.": "Create a meter to describe the events your application will report and bill.",
|
|
1632
|
+
"Create or activate a product first": "Create or activate a product first",
|
|
1633
|
+
Created: "Created",
|
|
1634
|
+
"Creating this meter does not send events. The host application must report idempotent usage to": "Creating this meter does not send events. The host application must report idempotent usage to",
|
|
1635
|
+
Credentials: "Credentials",
|
|
1636
|
+
"Credit and trust": "Credit and trust",
|
|
1637
|
+
"Credit grants": "Credit grants",
|
|
1638
|
+
"Credit limit": "Credit limit",
|
|
1639
|
+
"Credit transaction ledger": "Credit transaction ledger",
|
|
1640
|
+
Credits: "Credits",
|
|
1641
|
+
Currency: "Currency",
|
|
1642
|
+
"Currency · interval": "Currency · interval",
|
|
1643
|
+
"Current amount": "Current amount",
|
|
1644
|
+
"Current credentials are never shown. A new one is validated against the live provider before it is stored; if that check fails, nothing is written. Leave a field blank to keep the credential it holds now.": "Current credentials are never shown. A new one is validated against the live provider before it is stored; if that check fails, nothing is written. Leave a field blank to keep the credential it holds now.",
|
|
1645
|
+
"Current period": "Current period",
|
|
1646
|
+
"Custom range": "Custom range",
|
|
1647
|
+
Customer: "Customer",
|
|
1648
|
+
"Customer ID": "Customer ID",
|
|
1649
|
+
"Customer UUID": "Customer UUID",
|
|
1650
|
+
"Customer controls": "Customer controls",
|
|
1651
|
+
"Customer lookup": "Customer lookup",
|
|
1652
|
+
"Customer not found.": "Customer not found.",
|
|
1653
|
+
"Customer-facing merchant details used on invoices and emails.": "Customer-facing merchant details used on invoices and emails.",
|
|
1654
|
+
Customers: "Customers",
|
|
1655
|
+
Cycles: "Cycles",
|
|
1656
|
+
"Daily subscriptions": "Daily subscriptions",
|
|
1657
|
+
Dashboard: "Dashboard",
|
|
1658
|
+
Date: "Date",
|
|
1659
|
+
"Date range": "Date range",
|
|
1660
|
+
"Days are added after any access they already have.": "Days are added after any access they already have.",
|
|
1661
|
+
"Decline reasons": "Decline reasons",
|
|
1662
|
+
Declined: "Declined",
|
|
1663
|
+
Declines: "Declines",
|
|
1664
|
+
"Default price": "Default price",
|
|
1665
|
+
"Default rate": "Default rate",
|
|
1666
|
+
"Default · ": "Default · ",
|
|
1667
|
+
"Define the event fields OpenRails will aggregate. Your host still reports each event through the usage API.": "Define the event fields OpenRails will aggregate. Your host still reports each event through the usage API.",
|
|
1668
|
+
"Define usage streams and the default rates charged when usage is recorded. Applications report the events separately.": "Define usage streams and the default rates charged when usage is recorded. Applications report the events separately.",
|
|
1669
|
+
"Delete webhook": "Delete webhook",
|
|
1670
|
+
Description: "Description",
|
|
1671
|
+
"Description (optional)": "Description (optional)",
|
|
1672
|
+
Detected: "Detected",
|
|
1673
|
+
Dimension: "Dimension",
|
|
1674
|
+
Dimensions: "Dimensions",
|
|
1675
|
+
Directory: "Directory",
|
|
1676
|
+
Discord: "Discord",
|
|
1677
|
+
"Dismiss answer": "Dismiss answer",
|
|
1678
|
+
"Display name": "Display name",
|
|
1679
|
+
"Displays the mobile sidebar.": "Displays the mobile sidebar.",
|
|
1680
|
+
Divisor: "Divisor",
|
|
1681
|
+
Down: "Down",
|
|
1682
|
+
"Download CSV": "Download CSV",
|
|
1683
|
+
"Draft: new price": "Draft: new price",
|
|
1684
|
+
"Draft: price change": "Draft: price change",
|
|
1685
|
+
Drift: "Drift",
|
|
1686
|
+
Due: "Due",
|
|
1687
|
+
"Due now": "Due now",
|
|
1688
|
+
"Due: ": "Due: ",
|
|
1689
|
+
Dunning: "Dunning",
|
|
1690
|
+
"Dunning recovery by days since the first failure": "Dunning recovery by days since the first failure",
|
|
1691
|
+
"Dunning recovery by retry (share of failed cycles)": "Dunning recovery by retry (share of failed cycles)",
|
|
1692
|
+
"Dunning recovery rate": "Dunning recovery rate",
|
|
1693
|
+
Edit: "Edit",
|
|
1694
|
+
"Edit batch": "Edit batch",
|
|
1695
|
+
"Edit definition": "Edit definition",
|
|
1696
|
+
"Edit widget": "Edit widget",
|
|
1697
|
+
Effective: "Effective",
|
|
1698
|
+
"Effective date": "Effective date",
|
|
1699
|
+
Email: "Email",
|
|
1700
|
+
"Email delivery": "Email delivery",
|
|
1701
|
+
Enabled: "Enabled",
|
|
1702
|
+
End: "End",
|
|
1703
|
+
"Enter 0 to turn credit off.": "Enter 0 to turn credit off.",
|
|
1704
|
+
Entitlements: "Entitlements",
|
|
1705
|
+
Environment: "Environment",
|
|
1706
|
+
Event: "Event",
|
|
1707
|
+
"Event contract": "Event contract",
|
|
1708
|
+
"Event filters": "Event filters",
|
|
1709
|
+
"Event type": "Event type",
|
|
1710
|
+
"Executes the refund at the ": "Executes the refund at the ",
|
|
1711
|
+
"Existing subscribers keep the current price.": "Existing subscribers keep the current price.",
|
|
1712
|
+
Expired: "Expired",
|
|
1713
|
+
Expires: "Expires",
|
|
1714
|
+
"Expires (optional)": "Expires (optional)",
|
|
1715
|
+
Failure: "Failure",
|
|
1716
|
+
Field: "Field",
|
|
1717
|
+
Filter: "Filter",
|
|
1718
|
+
"Filter meters on this page": "Filter meters on this page",
|
|
1719
|
+
"Filter this page…": "Filter this page…",
|
|
1720
|
+
"Find a customer by ID and currency.": "Find a customer by ID and currency.",
|
|
1721
|
+
"First outcome": "First outcome",
|
|
1722
|
+
"First page": "First page",
|
|
1723
|
+
"Fixed included units": "Fixed included units",
|
|
1724
|
+
"Flat amount": "Flat amount",
|
|
1725
|
+
Format: "Format",
|
|
1726
|
+
"Free units": "Free units",
|
|
1727
|
+
"From email": "From email",
|
|
1728
|
+
"Generic (your own receiver)": "Generic (your own receiver)",
|
|
1729
|
+
"Give this customer one of your products without a payment. They hold its keys while the grant lasts, including keys you add to the product later.": "Give this customer one of your products without a payment. They hold its keys while the grant lasts, including keys you add to the product later.",
|
|
1730
|
+
Graduated: "Graduated",
|
|
1731
|
+
"Grandfather.": "Grandfather.",
|
|
1732
|
+
Grant: "Grant",
|
|
1733
|
+
"Grant credit": "Grant credit",
|
|
1734
|
+
"Grant product access": "Grant product access",
|
|
1735
|
+
"Grants · ": "Grants · ",
|
|
1736
|
+
Health: "Health",
|
|
1737
|
+
"How long it lasts": "How long it lasts",
|
|
1738
|
+
"Human-readable quantity shown in billing.": "Human-readable quantity shown in billing.",
|
|
1739
|
+
Ignore: "Ignore",
|
|
1740
|
+
Included: "Included",
|
|
1741
|
+
"Included units": "Included units",
|
|
1742
|
+
"Included units per period": "Included units per period",
|
|
1743
|
+
"Included usage": "Included usage",
|
|
1744
|
+
"Invoice memo": "Invoice memo",
|
|
1745
|
+
"Invoice profile": "Invoice profile",
|
|
1746
|
+
"Invoice profile saved. Billed orders were not changed.": "Invoice profile saved. Billed orders were not changed.",
|
|
1747
|
+
"Keep it": "Keep it",
|
|
1748
|
+
"Keep its own range": "Keep its own range",
|
|
1749
|
+
"Kept with the scheduled change.": "Kept with the scheduled change.",
|
|
1750
|
+
Key: "Key",
|
|
1751
|
+
Kind: "Kind",
|
|
1752
|
+
"Kind / reason": "Kind / reason",
|
|
1753
|
+
"Last 3 months": "Last 3 months",
|
|
1754
|
+
"Last 30 days": "Last 30 days",
|
|
1755
|
+
"Last 6 months": "Last 6 months",
|
|
1756
|
+
"Last 7 days": "Last 7 days",
|
|
1757
|
+
"Last 90 days": "Last 90 days",
|
|
1758
|
+
"Last active": "Last active",
|
|
1759
|
+
"Last day (UTC)": "Last day (UTC)",
|
|
1760
|
+
"Last decline": "Last decline",
|
|
1761
|
+
"Last event": "Last event",
|
|
1762
|
+
"Last failure: ": "Last failure: ",
|
|
1763
|
+
"Last seen": "Last seen",
|
|
1764
|
+
"Last validated ": "Last validated ",
|
|
1765
|
+
"Last year": "Last year",
|
|
1766
|
+
"Leave blank to use the meter key.": "Leave blank to use the meter key.",
|
|
1767
|
+
"Leave the final limit blank for the unbounded tier.": "Leave the final limit blank for the unbounded tier.",
|
|
1768
|
+
Lines: "Lines",
|
|
1769
|
+
"Loading billing permissions…": "Loading billing permissions…",
|
|
1770
|
+
"Loading billing…": "Loading billing…",
|
|
1771
|
+
"Loading grants…": "Loading grants…",
|
|
1772
|
+
"Loading invoice profile…": "Loading invoice profile…",
|
|
1773
|
+
"Loading order…": "Loading order…",
|
|
1774
|
+
"Loading products…": "Loading products…",
|
|
1775
|
+
"Loading transactions…": "Loading transactions…",
|
|
1776
|
+
"Loading…": "Loading…",
|
|
1777
|
+
"Logo URL": "Logo URL",
|
|
1778
|
+
"Manual remittance": "Manual remittance",
|
|
1779
|
+
"Matrix cells": "Matrix cells",
|
|
1780
|
+
Maximum: "Maximum",
|
|
1781
|
+
"Memo: ": "Memo: ",
|
|
1782
|
+
Merchant: "Merchant",
|
|
1783
|
+
"Merchant profile": "Merchant profile",
|
|
1784
|
+
Merchants: "Merchants",
|
|
1785
|
+
Meter: "Meter",
|
|
1786
|
+
"Meter key": "Meter key",
|
|
1787
|
+
Metering: "Metering",
|
|
1788
|
+
"Metering access is restricted": "Metering access is restricted",
|
|
1789
|
+
"Metering could not be loaded": "Metering could not be loaded",
|
|
1790
|
+
Method: "Method",
|
|
1791
|
+
"Migrate.": "Migrate.",
|
|
1792
|
+
"Missed rebills": "Missed rebills",
|
|
1793
|
+
Model: "Model",
|
|
1794
|
+
"Money for this price would go to": "Money for this price would go to",
|
|
1795
|
+
Month: "Month",
|
|
1796
|
+
"Monthly renewals": "Monthly renewals",
|
|
1797
|
+
More: "More",
|
|
1798
|
+
"Move everyone to the new price at their first renewal on or after a date you choose.": "Move everyone to the new price at their first renewal on or after a date you choose.",
|
|
1799
|
+
"Must be at least ": "Must be at least ",
|
|
1800
|
+
"NMI history (before OpenRails recorded attempts)": "NMI history (before OpenRails recorded attempts)",
|
|
1801
|
+
"NMI's own transaction history, read daily and kept 25 months. It counts every sender, OpenRails too once it started. One-off sales mix initial sales, upgrades and retries of declined rebills: the history cannot tell them apart. Scheduled rebills are NMI's own charges, each the first try of its period. Rates count authorizations, not buyers.": "NMI's own transaction history, read daily and kept 25 months. It counts every sender, OpenRails too once it started. One-off sales mix initial sales, upgrades and retries of declined rebills: the history cannot tell them apart. Scheduled rebills are NMI's own charges, each the first try of its period. Rates count authorizations, not buyers.",
|
|
1802
|
+
"NMI-owned": "NMI-owned",
|
|
1803
|
+
"NMI-scheduled rebills": "NMI-scheduled rebills",
|
|
1804
|
+
Name: "Name",
|
|
1805
|
+
"Name, such as tax_id": "Name, such as tax_id",
|
|
1806
|
+
Nearest: "Nearest",
|
|
1807
|
+
"Needs attention": "Needs attention",
|
|
1808
|
+
"Needs card": "Needs card",
|
|
1809
|
+
"Net change": "Net change",
|
|
1810
|
+
"Never expires": "Never expires",
|
|
1811
|
+
New: "New",
|
|
1812
|
+
"New amount (major units)": "New amount (major units)",
|
|
1813
|
+
"New batch": "New batch",
|
|
1814
|
+
"New cards by AVS result": "New cards by AVS result",
|
|
1815
|
+
"New cards by CVV result": "New cards by CVV result",
|
|
1816
|
+
"New checkout on this rail is refused until another PSP is armed. Existing subscriptions, refunds and webhooks keep using this one.": "New checkout on this rail is refused until another PSP is armed. Existing subscriptions, refunds and webhooks keep using this one.",
|
|
1817
|
+
"New merchant": "New merchant",
|
|
1818
|
+
"New plan": "New plan",
|
|
1819
|
+
"New price": "New price",
|
|
1820
|
+
"New-card checkout failure rate": "New-card checkout failure rate",
|
|
1821
|
+
"New-card decline rate": "New-card decline rate",
|
|
1822
|
+
"New-card decline rate by week": "New-card decline rate by week",
|
|
1823
|
+
Next: "Next",
|
|
1824
|
+
"Next attempt: ": "Next attempt: ",
|
|
1825
|
+
"Next billing date": "Next billing date",
|
|
1826
|
+
"Next charge": "Next charge",
|
|
1827
|
+
"Next page": "Next page",
|
|
1828
|
+
"No NMI history yet: it is read daily.": "No NMI history yet: it is read daily.",
|
|
1829
|
+
"No PSPs configured.": "No PSPs configured.",
|
|
1830
|
+
"No actions are available for your permissions and this order's state.": "No actions are available for your permissions and this order's state.",
|
|
1831
|
+
"No active products are available.": "No active products are available.",
|
|
1832
|
+
"No active subscriptions.": "No active subscriptions.",
|
|
1833
|
+
"No allowance": "No allowance",
|
|
1834
|
+
"No credit grants in this currency.": "No credit grants in this currency.",
|
|
1835
|
+
"No declines in this range.": "No declines in this range.",
|
|
1836
|
+
"No default rate. Usage is recorded but is not billed by this meter.": "No default rate. Usage is recorded but is not billed by this meter.",
|
|
1837
|
+
"No eligible recurring plans share this tier group and currency.": "No eligible recurring plans share this tier group and currency.",
|
|
1838
|
+
"No entitlements.": "No entitlements.",
|
|
1839
|
+
"No history yet.": "No history yet.",
|
|
1840
|
+
"No lines.": "No lines.",
|
|
1841
|
+
"No maximum": "No maximum",
|
|
1842
|
+
"No meters on this page match “": "No meters on this page match “",
|
|
1843
|
+
"No missed rebills in this range.": "No missed rebills in this range.",
|
|
1844
|
+
"No open drift events. Catalog is in sync.": "No open drift events. Catalog is in sync.",
|
|
1845
|
+
"No payment methods on file.": "No payment methods on file.",
|
|
1846
|
+
"No payments recorded.": "No payments recorded.",
|
|
1847
|
+
"No payments.": "No payments.",
|
|
1848
|
+
"No prices yet.": "No prices yet.",
|
|
1849
|
+
"No product access.": "No product access.",
|
|
1850
|
+
"No products yet.": "No products yet.",
|
|
1851
|
+
"No provider can take this payment, so nobody can buy this price yet.": "No provider can take this payment, so nobody can buy this price yet.",
|
|
1852
|
+
"No provider-scheduled charges in this range.": "No provider-scheduled charges in this range.",
|
|
1853
|
+
"No recovered cycles.": "No recovered cycles.",
|
|
1854
|
+
"No refunds.": "No refunds.",
|
|
1855
|
+
"No refusals in NMI's history.": "No refusals in NMI's history.",
|
|
1856
|
+
"No saved payment methods. Add one on the customer page before retrying collection.": "No saved payment methods. Add one on the customer page before retrying collection.",
|
|
1857
|
+
"No subscriptions.": "No subscriptions.",
|
|
1858
|
+
"No transactions in this currency.": "No transactions in this currency.",
|
|
1859
|
+
"No usage meters yet": "No usage meters yet",
|
|
1860
|
+
"No webhooks configured.": "No webhooks configured.",
|
|
1861
|
+
"No widgets yet": "No widgets yet",
|
|
1862
|
+
"None required": "None required",
|
|
1863
|
+
Note: "Note",
|
|
1864
|
+
"Notes ": "Notes ",
|
|
1865
|
+
"Nothing here can be fixed automatically. You can only note why you are leaving it.": "Nothing here can be fixed automatically. You can only note why you are leaving it.",
|
|
1866
|
+
"Nothing in this range. Pick a wider range.": "Nothing in this range. Pick a wider range.",
|
|
1867
|
+
"Nothing is claimed about the providers' copies until you press Verify.": "Nothing is claimed about the providers' copies until you press Verify.",
|
|
1868
|
+
"Nothing needs attention right now.": "Nothing needs attention right now.",
|
|
1869
|
+
"Notice period": "Notice period",
|
|
1870
|
+
"Notice period (days)": "Notice period (days)",
|
|
1871
|
+
Notifications: "Notifications",
|
|
1872
|
+
"Once this succeeds, the new credential is used for the next charge and every one after it. Previous webhook signing secrets remain accepted while their required overlap is active.": "Once this succeeds, the new credential is used for the next charge and every one after it. Previous webhook signing secrets remain accepted while their required overlap is active.",
|
|
1873
|
+
"One-off sales": "One-off sales",
|
|
1874
|
+
"One-time payment.": "One-time payment.",
|
|
1875
|
+
Open: "Open",
|
|
1876
|
+
"Open issues": "Open issues",
|
|
1877
|
+
"Open matching list": "Open matching list",
|
|
1878
|
+
OpenRails: "OpenRails",
|
|
1879
|
+
"OpenRails starts": "OpenRails starts",
|
|
1880
|
+
"OpenRails-owned": "OpenRails-owned",
|
|
1881
|
+
"Operational notifications will stop delivering to this webhook. This cannot be undone.": "Operational notifications will stop delivering to this webhook. This cannot be undone.",
|
|
1882
|
+
Ops: "Ops",
|
|
1883
|
+
"Optional. Only events with one of the listed dimension values are rated.": "Optional. Only events with one of the listed dimension values are rated.",
|
|
1884
|
+
Order: "Order",
|
|
1885
|
+
"Order not found.": "Order not found.",
|
|
1886
|
+
Orders: "Orders",
|
|
1887
|
+
Origin: "Origin",
|
|
1888
|
+
Original: "Original",
|
|
1889
|
+
Outcome: "Outcome",
|
|
1890
|
+
"Overdue only: still owed past the due date": "Overdue only: still owed past the due date",
|
|
1891
|
+
"Overdue usage orders": "Overdue usage orders",
|
|
1892
|
+
Overview: "Overview",
|
|
1893
|
+
"Overwrite edits": "Overwrite edits",
|
|
1894
|
+
Owner: "Owner",
|
|
1895
|
+
PSP: "PSP",
|
|
1896
|
+
"PSP answer": "PSP answer",
|
|
1897
|
+
PSPs: "PSPs",
|
|
1898
|
+
Package: "Package",
|
|
1899
|
+
"Package price": "Package price",
|
|
1900
|
+
Paid: "Paid",
|
|
1901
|
+
"Paste a JSON or YAML catalog batch; products, prices and meters are maps keyed by their key. Each product, price and meter applies whole, unless a field it names was set differently by an edit: it is skipped and listed, and the rest applies. A batch that applied whole is remembered; retries preserve later catalog edits. Omitted records stay unchanged unless prune is true, which archives the omitted ones only batches set.": "Paste a JSON or YAML catalog batch; products, prices and meters are maps keyed by their key. Each product, price and meter applies whole, unless a field it names was set differently by an edit: it is skipped and listed, and the rest applies. A batch that applied whole is remembered; retries preserve later catalog edits. Omitted records stay unchanged unless prune is true, which archives the omitted ones only batches set.",
|
|
1902
|
+
Paying: "Paying",
|
|
1903
|
+
"Paying, no access": "Paying, no access",
|
|
1904
|
+
Payment: "Payment",
|
|
1905
|
+
"Payment attempts": "Payment attempts",
|
|
1906
|
+
"Payment health": "Payment health",
|
|
1907
|
+
"Payment history": "Payment history",
|
|
1908
|
+
"Payment method": "Payment method",
|
|
1909
|
+
"Payment methods": "Payment methods",
|
|
1910
|
+
"Payment not found.": "Payment not found.",
|
|
1911
|
+
"Payment providers": "Payment providers",
|
|
1912
|
+
"Payment rail": "Payment rail",
|
|
1913
|
+
"Payment reference": "Payment reference",
|
|
1914
|
+
"Payment terms (days)": "Payment terms (days)",
|
|
1915
|
+
Payments: "Payments",
|
|
1916
|
+
Pending: "Pending",
|
|
1917
|
+
"Per unit": "Per unit",
|
|
1918
|
+
"Period ends": "Period ends",
|
|
1919
|
+
"Period maximum": "Period maximum",
|
|
1920
|
+
"Period: ": "Period: ",
|
|
1921
|
+
"Pick a later date.": "Pick a later date.",
|
|
1922
|
+
"Pick a product": "Pick a product",
|
|
1923
|
+
"Pick a product…": "Pick a product…",
|
|
1924
|
+
"Pick a rail…": "Pick a rail…",
|
|
1925
|
+
"Pick a stored payment method": "Pick a stored payment method",
|
|
1926
|
+
"Pinned to an archived (prior) version": "Pinned to an archived (prior) version",
|
|
1927
|
+
"Points future renewals of this subscription at another of the customer's stored cards (same rail), or back at their default card for its currency.": "Points future renewals of this subscription at another of the customer's stored cards (same rail), or back at their default card for its currency.",
|
|
1928
|
+
Preview: "Preview",
|
|
1929
|
+
"Previous page": "Previous page",
|
|
1930
|
+
"Previous period": "Previous period",
|
|
1931
|
+
Price: "Price",
|
|
1932
|
+
"Price each value of one registered dimension separately.": "Price each value of one registered dimension separately.",
|
|
1933
|
+
"Price history": "Price history",
|
|
1934
|
+
"Price per divisor": "Price per divisor",
|
|
1935
|
+
Prices: "Prices",
|
|
1936
|
+
"Pricing model": "Pricing model",
|
|
1937
|
+
"Pricing policies": "Pricing policies",
|
|
1938
|
+
Product: "Product",
|
|
1939
|
+
"Product access": "Product access",
|
|
1940
|
+
"Product and model": "Product and model",
|
|
1941
|
+
Products: "Products",
|
|
1942
|
+
Provider: "Provider",
|
|
1943
|
+
"Provider charges seen by webhook": "Provider charges seen by webhook",
|
|
1944
|
+
"Provider-owned": "Provider-owned",
|
|
1945
|
+
Providers: "Providers",
|
|
1946
|
+
Pull: "Pull",
|
|
1947
|
+
"Purchase order": "Purchase order",
|
|
1948
|
+
"Purchase order: ": "Purchase order: ",
|
|
1949
|
+
Purchased: "Purchased",
|
|
1950
|
+
"Purchases, subscription renewals and usage billed in arrears: what each owes and how it was paid.": "Purchases, subscription renewals and usage billed in arrears: what each owes and how it was paid.",
|
|
1951
|
+
Quantity: "Quantity",
|
|
1952
|
+
Rail: "Rail",
|
|
1953
|
+
Range: "Range",
|
|
1954
|
+
Rate: "Rate",
|
|
1955
|
+
"Rate preview": "Rate preview",
|
|
1956
|
+
"Read-only: this merchant's configuration comes from a file. Change it there.": "Read-only: this merchant's configuration comes from a file. Change it there.",
|
|
1957
|
+
Reason: "Reason",
|
|
1958
|
+
"Reason (optional)": "Reason (optional)",
|
|
1959
|
+
"Rebill collection rate": "Rebill collection rate",
|
|
1960
|
+
"Rebill first-attempt failure rate": "Rebill first-attempt failure rate",
|
|
1961
|
+
"Rebill first-attempt failure rate by week": "Rebill first-attempt failure rate by week",
|
|
1962
|
+
"Recent payments": "Recent payments",
|
|
1963
|
+
"Recently canceled": "Recently canceled",
|
|
1964
|
+
Recommendation: "Recommendation",
|
|
1965
|
+
"Recommended: ": "Recommended: ",
|
|
1966
|
+
"Recovered by": "Recovered by",
|
|
1967
|
+
"Recurring billing": "Recurring billing",
|
|
1968
|
+
Reference: "Reference",
|
|
1969
|
+
Refresh: "Refresh",
|
|
1970
|
+
"Refresh payment methods": "Refresh payment methods",
|
|
1971
|
+
"Refresh scan": "Refresh scan",
|
|
1972
|
+
"Refresh widget": "Refresh widget",
|
|
1973
|
+
Refund: "Refund",
|
|
1974
|
+
"Refund payment": "Refund payment",
|
|
1975
|
+
Refunded: "Refunded",
|
|
1976
|
+
Refunds: "Refunds",
|
|
1977
|
+
"Refusal rate by month": "Refusal rate by month",
|
|
1978
|
+
Refused: "Refused",
|
|
1979
|
+
"Register event properties used by filters or matrix rates.": "Register event properties used by filters or matrix rates.",
|
|
1980
|
+
Remaining: "Remaining",
|
|
1981
|
+
Remote: "Remote",
|
|
1982
|
+
Remove: "Remove",
|
|
1983
|
+
"Remove the default rate?": "Remove the default rate?",
|
|
1984
|
+
Renewal: "Renewal",
|
|
1985
|
+
"Renewal not found.": "Renewal not found.",
|
|
1986
|
+
"Renewal payments, cancellations and churn each calendar month (UTC); churn is the month's cancellations over the subscriptions it began with.": "Renewal payments, cancellations and churn each calendar month (UTC); churn is the month's cancellations over the subscriptions it began with.",
|
|
1987
|
+
Renewals: "Renewals",
|
|
1988
|
+
"Renewing soon": "Renewing soon",
|
|
1989
|
+
Renews: "Renews",
|
|
1990
|
+
"Replace the default rate?": "Replace the default rate?",
|
|
1991
|
+
Reports: "Reports",
|
|
1992
|
+
Reset: "Reset",
|
|
1993
|
+
Resolve: "Resolve",
|
|
1994
|
+
"Resolve finding": "Resolve finding",
|
|
1995
|
+
Resource: "Resource",
|
|
1996
|
+
Result: "Result",
|
|
1997
|
+
Retry: "Retry",
|
|
1998
|
+
Reverses: "Reverses",
|
|
1999
|
+
Review: "Review",
|
|
2000
|
+
"Review batch": "Review batch",
|
|
2001
|
+
"Review complete. Applying sends this exact document; this is not a database diff.": "Review complete. Applying sends this exact document; this is not a database diff.",
|
|
2002
|
+
Revoke: "Revoke",
|
|
2003
|
+
"Revoke product access": "Revoke product access",
|
|
2004
|
+
"Revoke remaining credit": "Revoke remaining credit",
|
|
2005
|
+
"Revoke the unspent remainder of": "Revoke the unspent remainder of",
|
|
2006
|
+
Revoked: "Revoked",
|
|
2007
|
+
Rotate: "Rotate",
|
|
2008
|
+
"Rotate ": "Rotate ",
|
|
2009
|
+
Rounding: "Rounding",
|
|
2010
|
+
"Rows per page": "Rows per page",
|
|
2011
|
+
"Save changes": "Save changes",
|
|
2012
|
+
"Saved payment method": "Saved payment method",
|
|
2013
|
+
"Search customer email, ref, or id…": "Search customer email, ref, or id…",
|
|
2014
|
+
"Search email, username, name or id…": "Search email, username, name or id…",
|
|
2015
|
+
Seats: "Seats",
|
|
2016
|
+
"Select a merchant to view its billing.": "Select a merchant to view its billing.",
|
|
2017
|
+
"Select dimension": "Select dimension",
|
|
2018
|
+
"Select product": "Select product",
|
|
2019
|
+
"Send alerts to Discord, Slack, or your own endpoint.": "Send alerts to Discord, Slack, or your own endpoint.",
|
|
2020
|
+
"Send email alerts to this address.": "Send email alerts to this address.",
|
|
2021
|
+
Sent: "Sent",
|
|
2022
|
+
"Set how much notice customers receive before a price increase.": "Set how much notice customers receive before a price increase.",
|
|
2023
|
+
"Set the price that charges every customer's usage as it is recorded. Money is entered in major currency units.": "Set the price that charges every customer's usage as it is recorded. Money is entered in major currency units.",
|
|
2024
|
+
Settings: "Settings",
|
|
2025
|
+
Severity: "Severity",
|
|
2026
|
+
Share: "Share",
|
|
2027
|
+
Sidebar: "Sidebar",
|
|
2028
|
+
Since: "Since",
|
|
2029
|
+
"Skipped objects": "Skipped objects",
|
|
2030
|
+
Slack: "Slack",
|
|
2031
|
+
Source: "Source",
|
|
2032
|
+
"Source meter": "Source meter",
|
|
2033
|
+
Spent: "Spent",
|
|
2034
|
+
"Stable identifier. It cannot be renamed after creation.": "Stable identifier. It cannot be renamed after creation.",
|
|
2035
|
+
Start: "Start",
|
|
2036
|
+
Started: "Started",
|
|
2037
|
+
State: "State",
|
|
2038
|
+
Status: "Status",
|
|
2039
|
+
"Status: ": "Status: ",
|
|
2040
|
+
"Step ": "Step ",
|
|
2041
|
+
"Still matches": "Still matches",
|
|
2042
|
+
Subject: "Subject",
|
|
2043
|
+
Subscription: "Subscription",
|
|
2044
|
+
"Subscription not found.": "Subscription not found.",
|
|
2045
|
+
"Subscription:": "Subscription:",
|
|
2046
|
+
Subscriptions: "Subscriptions",
|
|
2047
|
+
"Subscriptions started and canceled each day (UTC), newest first.": "Subscriptions started and canceled each day (UTC), newest first.",
|
|
2048
|
+
"Sum a numeric field": "Sum a numeric field",
|
|
2049
|
+
"Support URL": "Support URL",
|
|
2050
|
+
Synced: "Synced",
|
|
2051
|
+
"Take the product back": "Take the product back",
|
|
2052
|
+
"Tax details": "Tax details",
|
|
2053
|
+
"Terminal cancellation at the payment rail. This is a last resort. Dunning parks subscriptions as past_due without losing entitlements.": "Terminal cancellation at the payment rail. This is a last resort. Dunning parks subscriptions as past_due without losing entitlements.",
|
|
2054
|
+
"Terms and billing facts for future usage orders. Billed orders keep their original snapshots. Tax details are recorded; no tax is calculated.": "Terms and billing facts for future usage orders. Billed orders keep their original snapshots. Tax details are recorded; no tax is calculated.",
|
|
2055
|
+
"The accounts this merchant takes payments through, one or more per rail.": "The accounts this merchant takes payments through, one or more per rail.",
|
|
2056
|
+
"The customer loses its entitlements now. The grant stays on record with your reason.": "The customer loses its entitlements now. The grant stays on record with your reason.",
|
|
2057
|
+
"The customer's default card": "The customer's default card",
|
|
2058
|
+
"The daily report covers at most ": "The daily report covers at most ",
|
|
2059
|
+
"The keys of the products this customer holds now.": "The keys of the products this customer holds now.",
|
|
2060
|
+
"The payment provider calculates the final prorated amount.": "The payment provider calculates the final prorated amount.",
|
|
2061
|
+
"Their reference": "Their reference",
|
|
2062
|
+
"There were no providers to consider.": "There were no providers to consider.",
|
|
2063
|
+
"These are the customer's invoice profile when the order was billed. Editing the profile affects later orders.": "These are the customer's invoice profile when the order was billed. Editing the profile affects later orders.",
|
|
2064
|
+
"These terms cannot be changed later. To charge a different amount, create another price and deactivate this one.": "These terms cannot be changed later. To charge a different amount, create another price and deactivate this one.",
|
|
2065
|
+
"This billing page does not exist.": "This billing page does not exist.",
|
|
2066
|
+
"This is a price": "This is a price",
|
|
2067
|
+
"This meter uses an aggregation that the billing engine cannot rate.": "This meter uses an aggregation that the billing engine cannot rate.",
|
|
2068
|
+
"This price has not been sent to any provider, so nobody can be charged for it yet.": "This price has not been sent to any provider, so nobody can be charged for it yet.",
|
|
2069
|
+
Tier: "Tier",
|
|
2070
|
+
"Tier group": "Tier group",
|
|
2071
|
+
"Tier mode": "Tier mode",
|
|
2072
|
+
"Tier rank": "Tier rank",
|
|
2073
|
+
Tiered: "Tiered",
|
|
2074
|
+
Tiers: "Tiers",
|
|
2075
|
+
Title: "Title",
|
|
2076
|
+
"Toggle Sidebar": "Toggle Sidebar",
|
|
2077
|
+
"Top refusal reasons": "Top refusal reasons",
|
|
2078
|
+
Total: "Total",
|
|
2079
|
+
"Transaction ledger · ": "Transaction ledger · ",
|
|
2080
|
+
"Trust level": "Trust level",
|
|
2081
|
+
"Try again": "Try again",
|
|
2082
|
+
"Try again. If the problem continues, check the OpenRails API logs.": "Try again. If the problem continues, check the OpenRails API logs.",
|
|
2083
|
+
Type: "Type",
|
|
2084
|
+
"Type ": "Type ",
|
|
2085
|
+
USD: "USD",
|
|
2086
|
+
Unit: "Unit",
|
|
2087
|
+
"Unit price": "Unit price",
|
|
2088
|
+
"Units per package": "Units per package",
|
|
2089
|
+
Unpaid: "Unpaid",
|
|
2090
|
+
"Until a date": "Until a date",
|
|
2091
|
+
Unverified: "Unverified",
|
|
2092
|
+
Up: "Up",
|
|
2093
|
+
Updated: "Updated",
|
|
2094
|
+
"Upper limit": "Upper limit",
|
|
2095
|
+
"Usage billed": "Usage billed",
|
|
2096
|
+
"Use matrix rates": "Use matrix rates",
|
|
2097
|
+
"Used for every customer.": "Used for every customer.",
|
|
2098
|
+
Username: "Username",
|
|
2099
|
+
Value: "Value",
|
|
2100
|
+
"Value property": "Value property",
|
|
2101
|
+
Values: "Values",
|
|
2102
|
+
View: "View",
|
|
2103
|
+
"View all ": "View all ",
|
|
2104
|
+
"View billing details": "View billing details",
|
|
2105
|
+
"View customer usage orders": "View customer usage orders",
|
|
2106
|
+
"View user account": "View user account",
|
|
2107
|
+
Volume: "Volume",
|
|
2108
|
+
Webhook: "Webhook",
|
|
2109
|
+
"Webhook URL": "Webhook URL",
|
|
2110
|
+
Webhooks: "Webhooks",
|
|
2111
|
+
"What the customer asked for": "What the customer asked for",
|
|
2112
|
+
"Which provider would take the money if someone bought this right now, and why the others were passed over. This asks the same question a real checkout asks, without starting one.": "Which provider would take the money if someone bought this right now, and why the others were passed over. This asks the same question a real checkout asks, without starting one.",
|
|
2113
|
+
"Which providers this price has been sent to, and whether their copy still matches yours. Publishing the catalog is what sends it; this page only reports. Verify asks each provider what it currently holds, and changes nothing.": "Which providers this price has been sent to, and whether their copy still matches yours. Publishing the catalog is what sends it; this page only reports. Verify asks each provider what it currently holds, and changes nothing.",
|
|
2114
|
+
Why: "Why",
|
|
2115
|
+
"Why it was granted": "Why it was granted",
|
|
2116
|
+
"Widget menu": "Widget menu",
|
|
2117
|
+
"Widget title": "Widget title",
|
|
2118
|
+
"You're all caught up.": "You're all caught up.",
|
|
2119
|
+
"Your directory holds no contact for this customer.": "Your directory holds no contact for this customer.",
|
|
2120
|
+
"Your role does not have permission to read the merchant catalog.": "Your role does not have permission to read the merchant catalog.",
|
|
2121
|
+
active: "active",
|
|
2122
|
+
"active-seats": "active-seats",
|
|
2123
|
+
"alerts@example.com": "alerts@example.com",
|
|
2124
|
+
"api-tokens": "api-tokens",
|
|
2125
|
+
archived: "archived",
|
|
2126
|
+
"at the first renewal from ": "at the first renewal from ",
|
|
2127
|
+
breadcrumb: "breadcrumb",
|
|
2128
|
+
default: "default",
|
|
2129
|
+
disabled: "disabled",
|
|
2130
|
+
"drafted by copilot": "drafted by copilot",
|
|
2131
|
+
"draining (": "draining (",
|
|
2132
|
+
"e.g. #billing-alerts": "e.g. #billing-alerts",
|
|
2133
|
+
"eu, us": "eu, us",
|
|
2134
|
+
"gpt-5": "gpt-5",
|
|
2135
|
+
"held ": "held ",
|
|
2136
|
+
"https://example.com/logo.png": "https://example.com/logo.png",
|
|
2137
|
+
"https://example.com/support": "https://example.com/support",
|
|
2138
|
+
"key: ": "key: ",
|
|
2139
|
+
"metadata.model": "metadata.model",
|
|
2140
|
+
model: "model",
|
|
2141
|
+
moved: "moved",
|
|
2142
|
+
"no data in range": "no data in range",
|
|
2143
|
+
"no measure": "no measure",
|
|
2144
|
+
"of ": "of ",
|
|
2145
|
+
offered: "offered",
|
|
2146
|
+
"openrails intents resolve": "openrails intents resolve",
|
|
2147
|
+
"premium, downloads": "premium, downloads",
|
|
2148
|
+
"premium-monthly": "premium-monthly",
|
|
2149
|
+
"prior version": "prior version",
|
|
2150
|
+
"read-only": "read-only",
|
|
2151
|
+
"refused: ": "refused: ",
|
|
2152
|
+
retired: "retired",
|
|
2153
|
+
selected: "selected",
|
|
2154
|
+
skipped: "skipped",
|
|
2155
|
+
"token.used": "token.used",
|
|
2156
|
+
tokens: "tokens",
|
|
2157
|
+
"why is this being canceled?": "why is this being canceled?",
|
|
2158
|
+
"· owed ": "· owed ",
|
|
2159
|
+
"← Orders": "← Orders"
|
|
2160
|
+
};
|
|
2161
|
+
//#endregion
|
|
2162
|
+
export { dn as BillingAdmin, vn as BillingCustomerSummary, Sn as billingAdminMessages, yn as billingConfirmWarnings, xn as billingPermissionHelp, _n as useBillingAdminAccess };
|
|
2163
|
+
|
|
2164
|
+
//# sourceMappingURL=admin.js.map
|