@openrails/billing-ui 0.242.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 +2171 -176
- package/dist/client/generated/wire.d.ts +1273 -0
- package/dist/{hooks-Uiw-zW3H.js → hooks-Ckd8F2JF.js} +7 -7
- package/dist/hooks-Ckd8F2JF.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +11 -11
- 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/hooks-Uiw-zW3H.js.map +0 -1
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
//#region src/client/generated/currencies.ts
|
|
2
|
+
var e = {
|
|
3
|
+
AED: 6,
|
|
4
|
+
AUD: 6,
|
|
5
|
+
BRL: 6,
|
|
6
|
+
CAD: 6,
|
|
7
|
+
CHF: 6,
|
|
8
|
+
CNY: 6,
|
|
9
|
+
CZK: 6,
|
|
10
|
+
DKK: 6,
|
|
11
|
+
EUR: 6,
|
|
12
|
+
GBP: 6,
|
|
13
|
+
HKD: 6,
|
|
14
|
+
ILS: 6,
|
|
15
|
+
INR: 6,
|
|
16
|
+
JPY: 4,
|
|
17
|
+
KRW: 4,
|
|
18
|
+
MXN: 6,
|
|
19
|
+
MYR: 6,
|
|
20
|
+
NOK: 6,
|
|
21
|
+
NZD: 6,
|
|
22
|
+
PHP: 6,
|
|
23
|
+
PLN: 6,
|
|
24
|
+
PYUSD: 6,
|
|
25
|
+
SAR: 6,
|
|
26
|
+
SEK: 6,
|
|
27
|
+
SGD: 6,
|
|
28
|
+
SOL: 9,
|
|
29
|
+
THB: 6,
|
|
30
|
+
TRY: 6,
|
|
31
|
+
USD: 6,
|
|
32
|
+
USD1: 6,
|
|
33
|
+
USDC: 6,
|
|
34
|
+
USDG: 6,
|
|
35
|
+
USDT: 6,
|
|
36
|
+
ZAR: 6
|
|
37
|
+
}, t = -(1n << 63n), n = (1n << 63n) - 1n, r = (() => {
|
|
38
|
+
try {
|
|
39
|
+
return new Intl.NumberFormat("en", { useGrouping: !1 }).format("9007199254740993") === "9007199254740993";
|
|
40
|
+
} catch {
|
|
41
|
+
return !1;
|
|
42
|
+
}
|
|
43
|
+
})(), i = 10n ** 15n;
|
|
44
|
+
function a(t) {
|
|
45
|
+
let n = t.trim().toUpperCase();
|
|
46
|
+
return Object.hasOwn(e, n) ? e[n] : void 0;
|
|
47
|
+
}
|
|
48
|
+
var o = Object.keys(e);
|
|
49
|
+
function s(e) {
|
|
50
|
+
return Number.isInteger(e) && e >= 0 && e <= 18;
|
|
51
|
+
}
|
|
52
|
+
function c(e) {
|
|
53
|
+
if (typeof e == "number") return Number.isSafeInteger(e) ? BigInt(e) : null;
|
|
54
|
+
if (!/^-?\d{1,19}$/.test(e)) return null;
|
|
55
|
+
let r = BigInt(e);
|
|
56
|
+
return r < t || r > n ? null : r;
|
|
57
|
+
}
|
|
58
|
+
function l(e, t) {
|
|
59
|
+
let n = c(e);
|
|
60
|
+
return n === null || !s(t) ? null : u(n, t);
|
|
61
|
+
}
|
|
62
|
+
function u(e, t) {
|
|
63
|
+
let n = e < 0n ? -e : e, r = 10n ** BigInt(t), i = (n % r).toString().padStart(t, "0").replace(/0+$/, "");
|
|
64
|
+
return `${e < 0n ? "-" : ""}${n / r}${i ? `.${i}` : ""}`;
|
|
65
|
+
}
|
|
66
|
+
function d(e, t, n) {
|
|
67
|
+
let a = c(e);
|
|
68
|
+
if (a === null || !s(n)) return `${t} amount exceeds the exact display range`;
|
|
69
|
+
if (!r && (a >= i || a <= -i)) return `${t} amount exceeds this browser's exact display range`;
|
|
70
|
+
let o = u(a, n), l = t.trim().toUpperCase();
|
|
71
|
+
return /^[A-Z]{3}$/.test(l) ? new Intl.NumberFormat(void 0, {
|
|
72
|
+
style: "currency",
|
|
73
|
+
currency: l,
|
|
74
|
+
maximumFractionDigits: n
|
|
75
|
+
}).format(o) : `${new Intl.NumberFormat(void 0, { maximumFractionDigits: n }).format(o)} ${t}`;
|
|
76
|
+
}
|
|
77
|
+
function f(e, t) {
|
|
78
|
+
let n = a(t);
|
|
79
|
+
return n === void 0 ? `Amount in unregistered currency ${t || "(none)"}` : d(e, t, n);
|
|
80
|
+
}
|
|
81
|
+
function p(e, r) {
|
|
82
|
+
if (!s(r)) return null;
|
|
83
|
+
let i = /^([+-]?)(\d*)(?:\.(\d*))?$/.exec(e.trim());
|
|
84
|
+
if (!i || !i[2] && !i[3] || (i[3]?.length ?? 0) > r) return null;
|
|
85
|
+
let a = BigInt(i[2] || "0") * 10n ** BigInt(r) + BigInt((i[3] || "").padEnd(r, "0") || "0"), o = i[1] === "-" ? -a : a;
|
|
86
|
+
return o < t || o > n ? null : o.toString();
|
|
87
|
+
}
|
|
88
|
+
function m(e, t) {
|
|
89
|
+
let n = a(t);
|
|
90
|
+
return n === void 0 ? null : p(e, n);
|
|
91
|
+
}
|
|
92
|
+
function h(e, t) {
|
|
93
|
+
let n = a(t);
|
|
94
|
+
return e === void 0 || n === void 0 || typeof e == "number" && !Number.isSafeInteger(e) ? "" : l(e, n) ?? "";
|
|
95
|
+
}
|
|
96
|
+
function g(e) {
|
|
97
|
+
if (!e) return "—";
|
|
98
|
+
let t = new Date(e);
|
|
99
|
+
return Number.isNaN(t.getTime()) ? "—" : t.toLocaleString(void 0, {
|
|
100
|
+
dateStyle: "medium",
|
|
101
|
+
timeStyle: "short"
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
function _(e) {
|
|
105
|
+
return e?.last4 ? `${e.brand ?? "card"} ••••${e.last4}` : "—";
|
|
106
|
+
}
|
|
107
|
+
function v(e) {
|
|
108
|
+
return `${e?.exp_month ?? "??"}/${e?.exp_year ?? "????"}`;
|
|
109
|
+
}
|
|
110
|
+
function y(e, t = 8) {
|
|
111
|
+
return e.length > t ? `${e.slice(0, t)}…` : e;
|
|
112
|
+
}
|
|
113
|
+
function b(e) {
|
|
114
|
+
return e.contact?.name || e.contact?.email || y(e.id, 13);
|
|
115
|
+
}
|
|
116
|
+
function x(e) {
|
|
117
|
+
if (!e) return "";
|
|
118
|
+
let t = new Date(e).getTime();
|
|
119
|
+
if (Number.isNaN(t)) return "";
|
|
120
|
+
let n = Math.round((Date.now() - t) / 1e3);
|
|
121
|
+
if (n < 45) return "just now";
|
|
122
|
+
if (n < 90) return "1m";
|
|
123
|
+
let r = Math.round(n / 60);
|
|
124
|
+
if (r < 60) return `${r}m`;
|
|
125
|
+
let i = Math.round(r / 60);
|
|
126
|
+
if (i < 24) return `${i}h`;
|
|
127
|
+
let a = Math.round(i / 24);
|
|
128
|
+
return a < 7 ? `${a}d` : new Date(t).toLocaleDateString(void 0, {
|
|
129
|
+
month: "short",
|
|
130
|
+
day: "numeric"
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
//#endregion
|
|
134
|
+
export { v as a, m as c, o as d, x as f, _ as i, h as l, a as n, g as o, l as p, b as r, f as s, p as t, y as u };
|
|
135
|
+
|
|
136
|
+
//# sourceMappingURL=admin-format-DoohJ7Fg.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-format-DoohJ7Fg.js","names":[],"sources":["../src/client/generated/currencies.ts","../src/admin/lib/format.ts"],"sourcesContent":["// Generated by `go run ./scripts/contracts -write` from the currency registry (billing.Currencies). Do not edit.\n\n// Currency code to native-unit decimals.\nexport const OPENRAILS_CURRENCY_SCALES: Readonly<Record<string, number>> = {\n AED: 6,\n AUD: 6,\n BRL: 6,\n CAD: 6,\n CHF: 6,\n CNY: 6,\n CZK: 6,\n DKK: 6,\n EUR: 6,\n GBP: 6,\n HKD: 6,\n ILS: 6,\n INR: 6,\n JPY: 4,\n KRW: 4,\n MXN: 6,\n MYR: 6,\n NOK: 6,\n NZD: 6,\n PHP: 6,\n PLN: 6,\n PYUSD: 6,\n SAR: 6,\n SEK: 6,\n SGD: 6,\n SOL: 9,\n THB: 6,\n TRY: 6,\n USD: 6,\n USD1: 6,\n USDC: 6,\n USDG: 6,\n USDT: 6,\n ZAR: 6,\n}\n","import type { CardDetails } from \"#orck/client/generated/wire\"\nimport { OPENRAILS_CURRENCY_SCALES as currencyUnits } from \"#orck/client/generated/currencies\"\n\n// Money is an integer count of native units. A JSON number is exact only as a\n// safe integer; exact int64 amounts arrive as decimal strings.\nexport type MoneyAmount = number | string\n\nconst INT64_MIN = -(1n << 63n)\nconst INT64_MAX = (1n << 63n) - 1n\n\n// Intl.NumberFormat formats a decimal string exactly only since ECMA-402 2023\n// (Chrome/Edge 106, Firefox 116, Safari 15.4); older engines coerce it through\n// Number. Probed once with 2^53 + 1, which a Number cannot hold.\nexport const intlFormatsDecimalStringsExactly: boolean = (() => {\n try {\n return (\n new Intl.NumberFormat(\"en\", { useGrouping: false }).format(\n \"9007199254740993\" as `${number}`\n ) === \"9007199254740993\"\n )\n } catch {\n return false\n }\n})()\n\n// Below 10^15 native units a Number-coerced decimal still rounds back to the\n// exact digits at every registry scale; from 10^15 the coerced value can differ\n// in the last digit, so a legacy engine refuses instead of misformatting.\nconst LEGACY_EXACT_UNITS = 10n ** 15n\n\n// currencyScale is the engine registry's native decimals (generated from\n// billing.Currencies).\nexport function currencyScale(currency: string): number | undefined {\n const code = currency.trim().toUpperCase()\n return Object.hasOwn(currencyUnits, code)\n ? currencyUnits[code as keyof typeof currencyUnits]\n : undefined\n}\n\nexport const supportedCurrencies = Object.keys(currencyUnits)\n\nfunction validDecimals(decimals: number): boolean {\n return Number.isInteger(decimals) && decimals >= 0 && decimals <= 18\n}\n\nfunction exactUnits(amount: MoneyAmount): bigint | null {\n if (typeof amount === \"number\")\n return Number.isSafeInteger(amount) ? BigInt(amount) : null\n if (!/^-?\\d{1,19}$/.test(amount)) return null\n const value = BigInt(amount)\n return value < INT64_MIN || value > INT64_MAX ? null : value\n}\n\n// unitsToDecimal renders native units as an exact major-unit decimal, or null\n// when the amount is not an exact int64.\nexport function unitsToDecimal(\n amount: MoneyAmount,\n decimals: number\n): string | null {\n const value = exactUnits(amount)\n if (value === null || !validDecimals(decimals)) return null\n return decimalFromUnits(value, decimals)\n}\n\nfunction decimalFromUnits(value: bigint, decimals: number): string {\n const absolute = value < 0n ? -value : value\n const scale = 10n ** BigInt(decimals)\n const fraction = (absolute % scale)\n .toString()\n .padStart(decimals, \"0\")\n .replace(/0+$/, \"\")\n return `${value < 0n ? \"-\" : \"\"}${absolute / scale}${fraction ? `.${fraction}` : \"\"}`\n}\n\n// formatUnits formats native units at an explicit scale without passing\n// through a JS number; an engine without exact decimal-string Intl refuses\n// the amounts it cannot hold.\nexport function formatUnits(\n amount: MoneyAmount,\n currency: string,\n decimals: number\n): string {\n const units = exactUnits(amount)\n if (units === null || !validDecimals(decimals))\n return `${currency} amount exceeds the exact display range`\n if (\n !intlFormatsDecimalStringsExactly &&\n (units >= LEGACY_EXACT_UNITS || units <= -LEGACY_EXACT_UNITS)\n )\n return `${currency} amount exceeds this browser's exact display range`\n const decimal = decimalFromUnits(units, decimals) as `${number}`\n const code = currency.trim().toUpperCase()\n if (/^[A-Z]{3}$/.test(code))\n return new Intl.NumberFormat(undefined, {\n style: \"currency\",\n currency: code,\n maximumFractionDigits: decimals,\n }).format(decimal)\n const number = new Intl.NumberFormat(undefined, {\n maximumFractionDigits: decimals,\n }).format(decimal)\n return `${number} ${currency}`\n}\n\n// formatNativeAmount formats an amount at its currency's registered scale.\nexport function formatNativeAmount(\n amount: MoneyAmount,\n currency: string\n): string {\n const scale = currencyScale(currency)\n return scale === undefined\n ? `Amount in unregistered currency ${currency || \"(none)\"}`\n : formatUnits(amount, currency, scale)\n}\n\n// Canonical monetary wire input: an exact signed int64 decimal string.\nexport function amountFromInput(\n major: string,\n decimals: number\n): string | null {\n if (!validDecimals(decimals)) return null\n const match = /^([+-]?)(\\d*)(?:\\.(\\d*))?$/.exec(major.trim())\n if (!match || (!match[2] && !match[3]) || (match[3]?.length ?? 0) > decimals)\n return null\n const value =\n BigInt(match[2] || \"0\") * 10n ** BigInt(decimals) +\n BigInt((match[3] || \"\").padEnd(decimals, \"0\") || \"0\")\n const signed = match[1] === \"-\" ? -value : value\n if (signed < INT64_MIN || signed > INT64_MAX) return null\n return signed.toString()\n}\n\n// nativeAmountFromInput converts a major-unit input to exact native units at\n// the currency's registered scale, as the int64 decimal string money wires use.\nexport function nativeAmountFromInput(\n major: string,\n currency: string\n): string | null {\n const scale = currencyScale(currency)\n return scale === undefined ? null : amountFromInput(major, scale)\n}\n\n// nativeAmountToInput prefills an editable major-unit amount. A JSON number\n// beyond the safe-integer range has already lost digits, so it is refused\n// before any BigInt or string conversion and the field starts empty: an empty\n// input never passes nativeAmountFromInput, so a rounded value is never saved.\nexport function nativeAmountToInput(\n amount: MoneyAmount | undefined,\n currency: string\n): string {\n const scale = currencyScale(currency)\n if (amount === undefined || scale === undefined) return \"\"\n if (typeof amount === \"number\" && !Number.isSafeInteger(amount)) return \"\"\n return unitsToDecimal(amount, scale) ?? \"\"\n}\n\nexport function formatDate(iso?: string | null): string {\n if (!iso) return \"—\"\n const d = new Date(iso)\n if (Number.isNaN(d.getTime())) return \"—\"\n return d.toLocaleString(undefined, {\n dateStyle: \"medium\",\n timeStyle: \"short\",\n })\n}\n\n// formatCard names a card by brand and last four digits.\nexport function formatCard(card?: CardDetails | null): string {\n return card?.last4 ? `${card.brand ?? \"card\"} ••••${card.last4}` : \"—\"\n}\n\nexport function formatCardExpiry(card?: CardDetails | null): string {\n return `${card?.exp_month ?? \"??\"}/${card?.exp_year ?? \"????\"}`\n}\n\nexport function shortId(id: string, n = 8): string {\n return id.length > n ? `${id.slice(0, n)}…` : id\n}\n\n// customerName names a customer by its directory contact, else its id.\nexport function customerName(c: {\n id: string\n contact: { email: string | null; name: string | null } | null\n}): string {\n return c.contact?.name || c.contact?.email || shortId(c.id, 13)\n}\n\n// timeAgo renders a compact relative time (\"3m\", \"2h\", \"5d\") for feeds like the\n// notification bell; falls back to a short date past a week.\nexport function timeAgo(iso?: string | null): string {\n if (!iso) return \"\"\n const then = new Date(iso).getTime()\n if (Number.isNaN(then)) return \"\"\n const secs = Math.round((Date.now() - then) / 1000)\n if (secs < 45) return \"just now\"\n if (secs < 90) return \"1m\"\n const mins = Math.round(secs / 60)\n if (mins < 60) return `${mins}m`\n const hours = Math.round(mins / 60)\n if (hours < 24) return `${hours}h`\n const days = Math.round(hours / 24)\n if (days < 7) return `${days}d`\n return new Date(then).toLocaleDateString(undefined, {\n month: \"short\",\n day: \"numeric\",\n })\n}\n"],"mappings":"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"}
|