@fantastic.dev/better-stripe 0.8.1 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/MIGRATION.md +12 -0
- package/README.md +46 -2
- package/dist/client/billing/checkout.d.ts +1 -0
- package/dist/client/billing/checkout.d.ts.map +1 -1
- package/dist/client/billing/checkout.js +5 -1
- package/dist/client/billing/checkout.js.map +1 -1
- package/dist/client/billing/providerReads.d.ts +18 -0
- package/dist/client/billing/providerReads.d.ts.map +1 -0
- package/dist/client/billing/providerReads.js +15 -0
- package/dist/client/billing/providerReads.js.map +1 -0
- package/dist/client/billing/subscriptions.d.ts +1 -1
- package/dist/client/billing/subscriptions.d.ts.map +1 -1
- package/dist/client/billing/subscriptions.js.map +1 -1
- package/dist/client/connect/payoutSnapshot.d.ts +28 -0
- package/dist/client/connect/payoutSnapshot.d.ts.map +1 -0
- package/dist/client/connect/payoutSnapshot.js +81 -0
- package/dist/client/connect/payoutSnapshot.js.map +1 -0
- package/dist/client/connect/transfers.d.ts.map +1 -1
- package/dist/client/connect/transfers.js +13 -32
- package/dist/client/connect/transfers.js.map +1 -1
- package/dist/client/core/accounts.d.ts +12 -23
- package/dist/client/core/accounts.d.ts.map +1 -1
- package/dist/client/core/accounts.js +5 -1
- package/dist/client/core/accounts.js.map +1 -1
- package/dist/client/core/idempotency.d.ts +5 -0
- package/dist/client/core/idempotency.d.ts.map +1 -0
- package/dist/client/core/idempotency.js +10 -0
- package/dist/client/core/idempotency.js.map +1 -0
- package/dist/client/index.d.ts +31 -25
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +29 -52
- package/dist/client/index.js.map +1 -1
- package/dist/client/settlement/allocation.d.ts +30 -0
- package/dist/client/settlement/allocation.d.ts.map +1 -0
- package/dist/client/settlement/allocation.js +71 -0
- package/dist/client/settlement/allocation.js.map +1 -0
- package/dist/client/settlement/commissions.d.ts +27 -0
- package/dist/client/settlement/commissions.d.ts.map +1 -0
- package/dist/client/settlement/commissions.js +69 -0
- package/dist/client/settlement/commissions.js.map +1 -0
- package/dist/client/settlement/execution.d.ts +27 -0
- package/dist/client/settlement/execution.d.ts.map +1 -0
- package/dist/client/settlement/execution.js +70 -0
- package/dist/client/settlement/execution.js.map +1 -0
- package/dist/client/settlement/reconciliation.d.ts +10 -0
- package/dist/client/settlement/reconciliation.d.ts.map +1 -0
- package/dist/client/settlement/reconciliation.js +73 -0
- package/dist/client/settlement/reconciliation.js.map +1 -0
- package/dist/client/settlement/settleSale.d.ts +21 -0
- package/dist/client/settlement/settleSale.d.ts.map +1 -0
- package/dist/client/settlement/settleSale.js +27 -0
- package/dist/client/settlement/settleSale.js.map +1 -0
- package/dist/client/settlement/verifiedSale.d.ts +25 -0
- package/dist/client/settlement/verifiedSale.d.ts.map +1 -0
- package/dist/client/settlement/verifiedSale.js +100 -0
- package/dist/client/settlement/verifiedSale.js.map +1 -0
- package/dist/client/webhooks/asyncHooks.d.ts +5 -0
- package/dist/client/webhooks/asyncHooks.d.ts.map +1 -0
- package/dist/client/webhooks/asyncHooks.js +20 -0
- package/dist/client/webhooks/asyncHooks.js.map +1 -0
- package/dist/component/_generated/component.d.ts +115 -0
- package/dist/component/_generated/component.d.ts.map +1 -1
- package/dist/component/connect/queries.d.ts +30 -1
- package/dist/component/connect/queries.d.ts.map +1 -1
- package/dist/component/connect/queries.js +19 -2
- package/dist/component/connect/queries.js.map +1 -1
- package/dist/component/schema.d.ts +67 -0
- package/dist/component/schema.js +4 -0
- package/dist/component/schema.js.map +1 -1
- package/dist/component/settlement/mutations.d.ts +47 -0
- package/dist/component/settlement/mutations.d.ts.map +1 -0
- package/dist/component/settlement/mutations.js +104 -0
- package/dist/component/settlement/mutations.js.map +1 -0
- package/dist/component/settlement/queries.d.ts +29 -0
- package/dist/component/settlement/queries.d.ts.map +1 -0
- package/dist/component/settlement/queries.js +35 -0
- package/dist/component/settlement/queries.js.map +1 -0
- package/dist/component/settlement/schema.d.ts +99 -0
- package/dist/component/settlement/schema.d.ts.map +1 -0
- package/dist/component/settlement/schema.js +35 -0
- package/dist/component/settlement/schema.js.map +1 -0
- package/dist/react/workflows/AffiliatePayoutEditor.d.ts +41 -0
- package/dist/react/workflows/AffiliatePayoutEditor.d.ts.map +1 -0
- package/dist/react/workflows/AffiliatePayoutEditor.js +80 -0
- package/dist/react/workflows/AffiliatePayoutEditor.js.map +1 -0
- package/dist/react/workflows/AffiliateRateEditor.d.ts +26 -0
- package/dist/react/workflows/AffiliateRateEditor.d.ts.map +1 -0
- package/dist/react/workflows/AffiliateRateEditor.js +49 -0
- package/dist/react/workflows/AffiliateRateEditor.js.map +1 -0
- package/dist/react/workflows/Checkout.d.ts +3 -1
- package/dist/react/workflows/Checkout.d.ts.map +1 -1
- package/dist/react/workflows/Checkout.js +3 -2
- package/dist/react/workflows/Checkout.js.map +1 -1
- package/dist/react/workflows/CheckoutForms.d.ts +2 -0
- package/dist/react/workflows/CheckoutForms.d.ts.map +1 -1
- package/dist/react/workflows/CheckoutForms.js +22 -16
- package/dist/react/workflows/CheckoutForms.js.map +1 -1
- package/dist/react/workflows/IntegrationSwitch.js +2 -2
- package/dist/react/workflows/IntegrationSwitch.js.map +1 -1
- package/dist/react/workflows/Pagination.d.ts +32 -0
- package/dist/react/workflows/Pagination.d.ts.map +1 -0
- package/dist/react/workflows/Pagination.js +49 -0
- package/dist/react/workflows/Pagination.js.map +1 -0
- package/dist/react/workflows/Payouts.d.ts +3 -18
- package/dist/react/workflows/Payouts.d.ts.map +1 -1
- package/dist/react/workflows/Payouts.js +2 -2
- package/dist/react/workflows/Payouts.js.map +1 -1
- package/dist/react/workflows/PlanPricingEditor.d.ts +35 -0
- package/dist/react/workflows/PlanPricingEditor.d.ts.map +1 -0
- package/dist/react/workflows/PlanPricingEditor.js +64 -0
- package/dist/react/workflows/PlanPricingEditor.js.map +1 -0
- package/dist/react/workflows/index.d.ts +8 -0
- package/dist/react/workflows/index.d.ts.map +1 -1
- package/dist/react/workflows/index.js +4 -0
- package/dist/react/workflows/index.js.map +1 -1
- package/docs/react-workflows-audit.md +19 -0
- package/docs/react-workflows.md +94 -3
- package/docs/settlement.md +158 -0
- package/package.json +6 -4
- package/src/client/billing/checkout-idempotency.test.ts +82 -0
- package/src/client/billing/checkout.ts +6 -1
- package/src/client/billing/providerReads.test.ts +60 -0
- package/src/client/billing/providerReads.ts +30 -0
- package/src/client/billing/subscriptions.ts +1 -8
- package/src/client/connect/payoutSnapshot.test.ts +91 -0
- package/src/client/connect/payoutSnapshot.ts +130 -0
- package/src/client/connect/transfers.test.ts +15 -4
- package/src/client/connect/transfers.ts +13 -42
- package/src/client/core/account-idempotency.test.ts +78 -0
- package/src/client/core/accounts.ts +18 -25
- package/src/client/core/idempotency.test.ts +10 -0
- package/src/client/core/idempotency.ts +11 -0
- package/src/client/index.ts +84 -103
- package/src/client/settlement/allocation.test.ts +98 -0
- package/src/client/settlement/allocation.ts +110 -0
- package/src/client/settlement/commissions.test.ts +103 -0
- package/src/client/settlement/commissions.ts +125 -0
- package/src/client/settlement/execution.test.ts +186 -0
- package/src/client/settlement/execution.ts +134 -0
- package/src/client/settlement/reconciliation.ts +119 -0
- package/src/client/settlement/settleSale.ts +59 -0
- package/src/client/settlement/verifiedSale.test.ts +139 -0
- package/src/client/settlement/verifiedSale.ts +159 -0
- package/src/client/webhooks/asyncHooks.ts +38 -0
- package/src/client/webhooks/processors.test.ts +9 -9
- package/src/component/_generated/api.ts +4 -0
- package/src/component/_generated/component.ts +141 -0
- package/src/component/connect/queries.ts +26 -2
- package/src/component/earnings-totals.test.ts +13 -0
- package/src/component/schema.ts +8 -0
- package/src/component/settlement/mutations.ts +119 -0
- package/src/component/settlement/queries.ts +38 -0
- package/src/component/settlement/schema.ts +45 -0
- package/src/component/settlement-claims.test.ts +77 -0
- package/src/component/transfers.test.ts +48 -0
- package/src/react/components/EmbeddedDisputes.render.test.tsx +2 -2
- package/src/react/index.payment-element.test.ts +22 -37
- package/src/react/workflows/AffiliatePayoutEditor.test.tsx +90 -0
- package/src/react/workflows/AffiliatePayoutEditor.tsx +201 -0
- package/src/react/workflows/AffiliateRateEditor.test.tsx +36 -0
- package/src/react/workflows/AffiliateRateEditor.tsx +92 -0
- package/src/react/workflows/Checkout.test.tsx +30 -0
- package/src/react/workflows/Checkout.tsx +10 -3
- package/src/react/workflows/CheckoutForms.test.tsx +40 -0
- package/src/react/workflows/CheckoutForms.tsx +37 -16
- package/src/react/workflows/IntegrationSwitch.test.tsx +25 -0
- package/src/react/workflows/IntegrationSwitch.tsx +2 -2
- package/src/react/workflows/Pagination.test.tsx +53 -0
- package/src/react/workflows/Pagination.tsx +93 -0
- package/src/react/workflows/Payouts.test.tsx +33 -0
- package/src/react/workflows/Payouts.tsx +21 -15
- package/src/react/workflows/PlanPricingEditor.test.tsx +79 -0
- package/src/react/workflows/PlanPricingEditor.tsx +156 -0
- package/src/react/workflows/index.ts +22 -0
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useId, useMemo, useState } from "react";
|
|
4
|
+
import { useWorkflowAction } from "./useWorkflowAction.js";
|
|
5
|
+
function initialFields(props) {
|
|
6
|
+
return {
|
|
7
|
+
scope: `${props.scopeKey}:${props.version}`,
|
|
8
|
+
term: props.affiliateCommissionTerm ?? "inherit",
|
|
9
|
+
mode: props.affiliateFixedAmount != null
|
|
10
|
+
? "fixed"
|
|
11
|
+
: "percentage",
|
|
12
|
+
value: props.affiliateFixedAmount != null
|
|
13
|
+
? String(props.affiliateFixedAmount)
|
|
14
|
+
: props.affiliateBasisPoints == null
|
|
15
|
+
? ""
|
|
16
|
+
: String(props.affiliateBasisPoints / 100),
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
/** Unstyled inline payout editor. Clear saves inheritance; explicit zero disables payouts. */
|
|
20
|
+
export function AffiliatePayoutEditor(props) {
|
|
21
|
+
const id = useId();
|
|
22
|
+
const currency = (props.currency ?? "usd").toUpperCase();
|
|
23
|
+
const formatter = useMemo(() => new Intl.NumberFormat("en-US", {
|
|
24
|
+
style: "currency",
|
|
25
|
+
currency,
|
|
26
|
+
currencyDisplay: "narrowSymbol",
|
|
27
|
+
}), [currency]);
|
|
28
|
+
const currencySymbol = formatter.formatToParts(0).find((part) => part.type === "currency")
|
|
29
|
+
?.value ?? currency;
|
|
30
|
+
const scope = `${props.scopeKey}:${props.version}`;
|
|
31
|
+
const initial = initialFields(props);
|
|
32
|
+
const [fields, setFields] = useState(initial);
|
|
33
|
+
if (fields.scope !== scope)
|
|
34
|
+
setFields(initial);
|
|
35
|
+
const action = useWorkflowAction(async (clear = false) => {
|
|
36
|
+
const value = clear ? "" : fields.value.trim();
|
|
37
|
+
const amount = value === "" ? null : Number(value);
|
|
38
|
+
if (amount !== null &&
|
|
39
|
+
(!/^\d+(\.\d{1,2})?$/.test(value) ||
|
|
40
|
+
!Number.isSafeInteger(Math.round(amount * 100)) ||
|
|
41
|
+
amount < 0 ||
|
|
42
|
+
(fields.mode === "percentage" && amount > 100)))
|
|
43
|
+
throw new Error("Enter a non-negative amount with at most two decimals, or a percentage from 0 to 100.");
|
|
44
|
+
await props.onSave({
|
|
45
|
+
affiliateCommissionTerm: clear || fields.term === "inherit" ? null : fields.term,
|
|
46
|
+
affiliateBasisPoints: fields.mode === "percentage" && amount !== null
|
|
47
|
+
? Math.round(amount * 100)
|
|
48
|
+
: null,
|
|
49
|
+
affiliateFixedAmount: fields.mode === "fixed" ? amount : null,
|
|
50
|
+
expectedVersion: props.version,
|
|
51
|
+
});
|
|
52
|
+
if (clear)
|
|
53
|
+
setFields((previous) => previous.scope === scope
|
|
54
|
+
? { ...previous, value: "", term: "inherit" }
|
|
55
|
+
: previous);
|
|
56
|
+
return clear
|
|
57
|
+
? "Affiliate payout cleared. Using the inherited default."
|
|
58
|
+
: "Affiliate payout saved.";
|
|
59
|
+
}, props.scopeKey);
|
|
60
|
+
const state = {
|
|
61
|
+
...fields,
|
|
62
|
+
currencySymbol,
|
|
63
|
+
setTerm: (term) => setFields((previous) => ({ ...previous, term })),
|
|
64
|
+
setValue: (value) => setFields((previous) => ({ ...previous, value })),
|
|
65
|
+
setMode: (mode) => setFields((previous) => ({ ...previous, mode })),
|
|
66
|
+
effectiveLabel: `Commission term: ${(props.effectiveCommissionTerm ?? "forever") === "forever" ? "Forever" : "One-time"}. Effective payout: ${props.effectiveFixedAmount != null ? formatter.format(props.effectiveFixedAmount) : `${props.effectiveBasisPoints / 100}%`}${props.source && props.source !== "none" ? ` from ${props.source === "plan" ? "store plan" : props.source}` : ""}.`,
|
|
67
|
+
save: () => action.run(false),
|
|
68
|
+
clear: () => action.run(true),
|
|
69
|
+
isPending: action.isPending,
|
|
70
|
+
error: action.error,
|
|
71
|
+
message: action.result,
|
|
72
|
+
};
|
|
73
|
+
if (props.children)
|
|
74
|
+
return _jsx(_Fragment, { children: props.children(state) });
|
|
75
|
+
return (_jsxs("form", { onSubmit: (event) => {
|
|
76
|
+
event.preventDefault();
|
|
77
|
+
void state.save();
|
|
78
|
+
}, children: [_jsx("label", { htmlFor: id, children: "Affiliate payout" }), _jsx("input", { id: id, inputMode: "decimal", value: state.value, disabled: state.isPending, onChange: (event) => state.setValue(event.target.value) }), _jsx("button", { type: "button", "aria-label": "Percentage", "aria-pressed": state.mode === "percentage", disabled: state.isPending, onClick: () => state.setMode("percentage"), children: "%" }), _jsx("button", { type: "button", "aria-label": `Fixed amount in ${currency}`, "aria-pressed": state.mode === "fixed", disabled: state.isPending, onClick: () => state.setMode("fixed"), children: currencySymbol }), _jsx("label", { htmlFor: `${id}-term`, children: "Commission term" }), _jsxs("select", { id: `${id}-term`, value: state.term, disabled: state.isPending, onChange: (event) => state.setTerm(event.target.value), children: [_jsx("option", { value: "inherit", children: "Inherited term" }), _jsx("option", { value: "forever", children: "Forever" }), _jsx("option", { value: "one_time", children: "One-time" })] }), _jsx("button", { type: "submit", disabled: state.isPending, children: "Save" }), _jsx("button", { type: "button", "aria-label": "Clear affiliate payout", disabled: state.isPending, onClick: () => void state.clear(), children: _jsx("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", "aria-hidden": "true", children: _jsx("path", { d: "M18 6 6 18M6 6l12 12" }) }) }), _jsxs("p", { children: [state.effectiveLabel, " Blank inherits the default. Fixed payouts are capped at proceeds after fees."] }), state.error && _jsx("p", { role: "alert", children: state.error }), state.message && _jsx("p", { role: "status", children: state.message })] }));
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=AffiliatePayoutEditor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AffiliatePayoutEditor.js","sourceRoot":"","sources":["../../../src/react/workflows/AffiliatePayoutEditor.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
export type AffiliateRateUpdate = {
|
|
3
|
+
affiliateBasisPoints: number | null;
|
|
4
|
+
expectedVersion: number;
|
|
5
|
+
};
|
|
6
|
+
export type AffiliateRateEditorState = {
|
|
7
|
+
percentage: string;
|
|
8
|
+
setPercentage: (value: string) => void;
|
|
9
|
+
effectiveLabel: string;
|
|
10
|
+
isPending: boolean;
|
|
11
|
+
error: string | null;
|
|
12
|
+
message: string | undefined;
|
|
13
|
+
save: () => Promise<unknown>;
|
|
14
|
+
};
|
|
15
|
+
export type AffiliateRateEditorProps = {
|
|
16
|
+
scopeKey: string;
|
|
17
|
+
affiliateBasisPoints: number | null;
|
|
18
|
+
effectiveBasisPoints: number;
|
|
19
|
+
source: "plan" | "product" | "price" | "store" | "global" | "none";
|
|
20
|
+
version: number;
|
|
21
|
+
onSave: (update: AffiliateRateUpdate) => Promise<unknown>;
|
|
22
|
+
children?: (state: AffiliateRateEditorState) => ReactNode;
|
|
23
|
+
};
|
|
24
|
+
/** Unstyled nullable commission editor. Blank inherits the next applicable rate. */
|
|
25
|
+
export declare function AffiliateRateEditor(props: AffiliateRateEditorProps): import("react").JSX.Element;
|
|
26
|
+
//# sourceMappingURL=AffiliateRateEditor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AffiliateRateEditor.d.ts","sourceRoot":"","sources":["../../../src/react/workflows/AffiliateRateEditor.tsx"],"names":[],"mappings":"AACA,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAExD,MAAM,MAAM,mBAAmB,GAAG;IAChC,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC;AACF,MAAM,MAAM,wBAAwB,GAAG;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,IAAI,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;CAC9B,CAAC;AACF,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;IACnE,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1D,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,wBAAwB,KAAK,SAAS,CAAC;CAC3D,CAAC;AACF,oFAAoF;AACpF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,+BAiElE"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useId, useState } from "react";
|
|
4
|
+
import { useWorkflowAction } from "./useWorkflowAction.js";
|
|
5
|
+
/** Unstyled nullable commission editor. Blank inherits the next applicable rate. */
|
|
6
|
+
export function AffiliateRateEditor(props) {
|
|
7
|
+
const id = useId();
|
|
8
|
+
const scope = `${props.scopeKey}:${props.version}`;
|
|
9
|
+
const initial = {
|
|
10
|
+
scope,
|
|
11
|
+
percentage: props.affiliateBasisPoints === null
|
|
12
|
+
? ""
|
|
13
|
+
: String(props.affiliateBasisPoints / 100),
|
|
14
|
+
};
|
|
15
|
+
const [fields, setFields] = useState(initial);
|
|
16
|
+
if (fields.scope !== scope)
|
|
17
|
+
setFields(initial);
|
|
18
|
+
const action = useWorkflowAction(async () => {
|
|
19
|
+
const value = fields.percentage.trim();
|
|
20
|
+
const rate = value === "" ? null : Math.round(Number(value) * 100);
|
|
21
|
+
if (rate !== null &&
|
|
22
|
+
(!/^\d+(\.\d{1,2})?$/.test(value) ||
|
|
23
|
+
!Number.isSafeInteger(rate) ||
|
|
24
|
+
rate < 0 ||
|
|
25
|
+
rate > 10000))
|
|
26
|
+
throw new Error("Enter a percentage from 0 to 100 with at most two decimal places, or leave it blank to inherit.");
|
|
27
|
+
await props.onSave({
|
|
28
|
+
affiliateBasisPoints: rate,
|
|
29
|
+
expectedVersion: props.version,
|
|
30
|
+
});
|
|
31
|
+
return "Affiliate payout saved.";
|
|
32
|
+
}, props.scopeKey);
|
|
33
|
+
const state = {
|
|
34
|
+
percentage: fields.percentage,
|
|
35
|
+
setPercentage: (percentage) => setFields((previous) => ({ ...previous, percentage })),
|
|
36
|
+
effectiveLabel: `Effective payout: ${props.effectiveBasisPoints / 100}% from ${props.source === "plan" ? "store plan" : props.source}.`,
|
|
37
|
+
isPending: action.isPending,
|
|
38
|
+
error: action.error,
|
|
39
|
+
message: action.result,
|
|
40
|
+
save: action.run,
|
|
41
|
+
};
|
|
42
|
+
if (props.children)
|
|
43
|
+
return _jsx(_Fragment, { children: props.children(state) });
|
|
44
|
+
return (_jsxs("form", { onSubmit: (event) => {
|
|
45
|
+
event.preventDefault();
|
|
46
|
+
void state.save();
|
|
47
|
+
}, children: [_jsx("label", { htmlFor: id, children: "Affiliate payout (%)" }), _jsx("input", { id: id, inputMode: "decimal", value: state.percentage, disabled: state.isPending, onChange: (event) => state.setPercentage(event.target.value) }), _jsxs("p", { children: [state.effectiveLabel, " Leave blank to inherit."] }), state.error && _jsx("p", { role: "alert", children: state.error }), state.message && _jsx("p", { role: "status", children: state.message }), _jsx("button", { type: "submit", disabled: state.isPending, children: state.isPending ? "Saving…" : "Save payout" })] }));
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=AffiliateRateEditor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AffiliateRateEditor.js","sourceRoot":"","sources":["../../../src/react/workflows/AffiliateRateEditor.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
2
|
import { type CheckoutFormOptions } from "./CheckoutForms.js";
|
|
3
3
|
export type CheckoutMode = "redirect" | "embedded" | "custom" | "form" | "payment-intent";
|
|
4
4
|
export type CheckoutSessionResult = {
|
|
@@ -27,6 +27,8 @@ type Common = CheckoutFormOptions & {
|
|
|
27
27
|
publishableKey: string;
|
|
28
28
|
/** Changes when the price, signed-in customer, or referral attribution changes. */
|
|
29
29
|
orderKey: string;
|
|
30
|
+
/** Optional durable logical-order identity, persisted by the host app. */
|
|
31
|
+
requestId?: string;
|
|
30
32
|
returnUrl: string;
|
|
31
33
|
onNavigate?: (url: string) => void;
|
|
32
34
|
children?: (state: CheckoutRenderProps) => ReactNode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Checkout.d.ts","sourceRoot":"","sources":["../../../src/react/workflows/Checkout.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"Checkout.d.ts","sourceRoot":"","sources":["../../../src/react/workflows/Checkout.tsx"],"names":[],"mappings":"AACA,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGjD,OAAO,EAIL,KAAK,mBAAmB,EACzB,MAAM,oBAAoB,CAAC;AAC5B,MAAM,MAAM,YAAY,GACtB,UAAU,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM,GAAG,gBAAgB,CAAC;AACjE,MAAM,MAAM,qBAAqB,GAAG;IAClC,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AACF,MAAM,MAAM,oBAAoB,GAAG;IACjC,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AACF,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,OAAO,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC;IAC9C,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AACF,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,SAAS,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,IAAI,EAAE,YAAY,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;CACjC,CAAC;AACF,KAAK,MAAM,GAAG,mBAAmB,GAAG;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB,mFAAmF;IACnF,QAAQ,EAAE,MAAM,CAAC;IACjB,0EAA0E;IAC1E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,SAAS,CAAC;CACtD,CAAC;AACF,MAAM,MAAM,aAAa,GAAG,MAAM,GAChC,CACI;IACE,IAAI,EAAE,OAAO,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC;IAC9C,aAAa,EAAE,CACb,OAAO,EAAE,eAAe,KACrB,OAAO,CAAC,qBAAqB,CAAC,CAAC;CACrC,GACD;IACE,IAAI,EAAE,gBAAgB,CAAC;IACvB,mBAAmB,EAAE,CAAC,OAAO,EAAE;QAC7B,SAAS,EAAE,MAAM,CAAC;KACnB,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAC;CACrC,CACJ,CAAC;AACJ,6HAA6H;AAC7H,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,+BAO5C"}
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useState } from "react";
|
|
3
4
|
import { EmbeddedCheckout } from "../components/EmbeddedCheckout.js";
|
|
4
5
|
import { useWorkflowResource } from "./useWorkflowResource.js";
|
|
5
6
|
import { CheckoutElementsForm, PaymentIntentForm, CheckoutForm, } from "./CheckoutForms.js";
|
|
6
7
|
/** All checkout integrations share one unstyled lifecycle. Callbacks must authenticate and validate prices on the server. */
|
|
7
8
|
export function Checkout(props) {
|
|
8
|
-
return _jsx(CheckoutBody, { ...props }, `${props.orderKey}:${props.mode}`);
|
|
9
|
+
return (_jsx(CheckoutBody, { ...props }, `${props.orderKey}:${props.mode}:${props.requestId ?? ""}`));
|
|
9
10
|
}
|
|
10
11
|
function CheckoutBody(props) {
|
|
12
|
+
const [requestId] = useState(() => props.requestId ?? crypto.randomUUID());
|
|
11
13
|
const state = useWorkflowResource(async () => {
|
|
12
|
-
const requestId = crypto.randomUUID();
|
|
13
14
|
const result = props.mode === "payment-intent"
|
|
14
15
|
? await props.createPaymentIntent({ requestId })
|
|
15
16
|
: await props.createSession({ mode: props.mode, requestId });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Checkout.js","sourceRoot":"","sources":["../../../src/react/workflows/Checkout.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;
|
|
1
|
+
{"version":3,"file":"Checkout.js","sourceRoot":"","sources":["../../../src/react/workflows/Checkout.tsx"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,8 @@ import { type FormEvent, type ReactNode } from "react";
|
|
|
2
2
|
import { type Appearance } from "@stripe/stripe-js";
|
|
3
3
|
export type CheckoutFormState = {
|
|
4
4
|
email: string;
|
|
5
|
+
/** Stripe supplied this email when the session loaded; do not edit it. */
|
|
6
|
+
emailReadOnly?: boolean;
|
|
5
7
|
setEmail: (email: string) => void;
|
|
6
8
|
emailInputId: string;
|
|
7
9
|
isPending: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CheckoutForms.d.ts","sourceRoot":"","sources":["../../../src/react/workflows/CheckoutForms.tsx"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,EAAc,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAgBhE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,cAAc,EAAE,SAAS,CAAC;IAC1B,MAAM,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,eAAe,CAAC,KAAK,IAAI,CAAC;CACrD,CAAC;AACF,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,SAAS,CAAC;CACtD,CAAC;AACF,MAAM,MAAM,iBAAiB,GAAG,mBAAmB,GAAG;IACpD,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC,CAAC;
|
|
1
|
+
{"version":3,"file":"CheckoutForms.d.ts","sourceRoot":"","sources":["../../../src/react/workflows/CheckoutForms.tsx"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,EAAc,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAgBhE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,0EAA0E;IAC1E,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,cAAc,EAAE,SAAS,CAAC;IAC1B,MAAM,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,eAAe,CAAC,KAAK,IAAI,CAAC;CACrD,CAAC;AACF,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,SAAS,CAAC;CACtD,CAAC;AACF,MAAM,MAAM,iBAAiB,GAAG,mBAAmB,GAAG;IACpD,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC,CAAC;AAoCF,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,iBAAiB,+BAU5D;AAuDD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,iBAAiB,+BAYzD;AAiDD,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,+BAkBpD"}
|
|
@@ -7,33 +7,39 @@ import { PaymentElement, useCheckout, CheckoutFormProvider, CheckoutForm as Stri
|
|
|
7
7
|
import { CheckoutSessionProvider } from "../components/CheckoutSessionProvider.js";
|
|
8
8
|
import { StripeProvider } from "../components/StripeProvider.js";
|
|
9
9
|
import { useWorkflowAction } from "./useWorkflowAction.js";
|
|
10
|
-
function NativeForm({ email, setEmail, emailInputId, paymentElement, submit, isPending, error, }) {
|
|
11
|
-
return (_jsxs("form", { onSubmit: submit, "data-better-stripe": "checkout-form", "aria-busy": isPending, children: [_jsx("label", { htmlFor: emailInputId, children: "Email for your receipt" }), _jsx("input", { id: emailInputId, type: "email", name: "email", required: true, autoComplete: "email", value: email, onChange: (event) => setEmail(event.target.value) }), paymentElement, error && _jsx("p", { role: "alert", children: error }), _jsx("button", { type: "submit", disabled: isPending, children: isPending ? "Processing…" : "Pay" })] }));
|
|
10
|
+
function NativeForm({ email, emailReadOnly, setEmail, emailInputId, paymentElement, submit, isPending, error, }) {
|
|
11
|
+
return (_jsxs("form", { onSubmit: submit, "data-better-stripe": "checkout-form", "aria-busy": isPending, children: [_jsx("label", { htmlFor: emailInputId, children: "Email for your receipt" }), _jsx("input", { id: emailInputId, type: "email", name: "email", required: true, autoComplete: "email", value: email, readOnly: emailReadOnly, onChange: (event) => setEmail(event.target.value) }), paymentElement, error && _jsx("p", { role: "alert", children: error }), _jsx("button", { type: "submit", disabled: isPending, children: isPending ? "Processing…" : "Pay" })] }));
|
|
12
12
|
}
|
|
13
13
|
export function CheckoutElementsForm(props) {
|
|
14
14
|
return (_jsx(CheckoutSessionProvider, { publishableKey: props.publishableKey, clientSecret: props.clientSecret, appearance: props.appearance, children: _jsx(SessionForm, { ...props }) }));
|
|
15
15
|
}
|
|
16
|
-
function SessionForm(
|
|
16
|
+
function SessionForm(props) {
|
|
17
17
|
const checkout = useCheckout();
|
|
18
|
-
|
|
18
|
+
if (checkout.type === "loading")
|
|
19
|
+
return _jsx("p", { role: "status", children: "Loading checkout\u2026" });
|
|
20
|
+
if (checkout.type === "error")
|
|
21
|
+
return _jsx("p", { role: "alert", children: checkout.error.message });
|
|
22
|
+
return (_jsx(ReadySessionForm, { ...props, checkout: checkout.checkout }, checkout.checkout.id));
|
|
23
|
+
}
|
|
24
|
+
function ReadySessionForm({ checkout, email: initialEmail = "", returnUrl, onNavigate, renderForm, }) {
|
|
25
|
+
// Snapshot once per session: a guest update must not lock their input on retry.
|
|
26
|
+
const [sessionEmail] = useState(() => checkout.email);
|
|
27
|
+
const [email, setEmail] = useState(sessionEmail ?? initialEmail);
|
|
19
28
|
const emailInputId = useId();
|
|
20
29
|
const action = useWorkflowAction(async () => {
|
|
21
|
-
if (
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
const confirmed = await checkout.
|
|
30
|
+
if (!sessionEmail) {
|
|
31
|
+
const updated = await checkout.updateEmail(email);
|
|
32
|
+
if (updated.type === "error")
|
|
33
|
+
throw new Error(updated.error.message);
|
|
34
|
+
}
|
|
35
|
+
const confirmed = await checkout.confirm();
|
|
27
36
|
if (confirmed.type === "error")
|
|
28
37
|
throw new Error(confirmed.error.message);
|
|
29
|
-
onNavigate(returnUrl.replace("{CHECKOUT_SESSION_ID}", checkout.
|
|
38
|
+
onNavigate(returnUrl.replace("{CHECKOUT_SESSION_ID}", checkout.id));
|
|
30
39
|
});
|
|
31
|
-
if (checkout.type === "loading")
|
|
32
|
-
return _jsx("p", { role: "status", children: "Loading checkout\u2026" });
|
|
33
|
-
if (checkout.type === "error")
|
|
34
|
-
return _jsx("p", { role: "alert", children: checkout.error.message });
|
|
35
40
|
const state = {
|
|
36
|
-
email,
|
|
41
|
+
email: sessionEmail ?? email,
|
|
42
|
+
emailReadOnly: !!sessionEmail,
|
|
37
43
|
setEmail,
|
|
38
44
|
emailInputId,
|
|
39
45
|
paymentElement: _jsx(PaymentElement, {}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CheckoutForms.js","sourceRoot":"","sources":["../../../src/react/workflows/CheckoutForms.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AACb,OAAO,EACL,KAAK,EACL,OAAO,EACP,QAAQ,GAGT,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,UAAU,EAAmB,MAAM,mBAAmB,CAAC;AAChE,OAAO,EACL,cAAc,IAAI,aAAa,EAC/B,WAAW,EACX,SAAS,GACV,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,cAAc,EACd,WAAW,EACX,oBAAoB,EACpB,YAAY,IAAI,kBAAkB,EAClC,eAAe,GAChB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"CheckoutForms.js","sourceRoot":"","sources":["../../../src/react/workflows/CheckoutForms.tsx"],"names":[],"mappings":"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"}
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { useState } from "react";
|
|
4
4
|
const labels = {
|
|
5
|
-
headless: "
|
|
6
|
-
components: "
|
|
5
|
+
headless: "via API",
|
|
6
|
+
components: "BetterStripe components",
|
|
7
7
|
embedded: "Stripe embedded",
|
|
8
8
|
hosted: "Stripe hosted",
|
|
9
9
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IntegrationSwitch.js","sourceRoot":"","sources":["../../../src/react/workflows/IntegrationSwitch.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AACb,OAAO,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AAEjD,MAAM,MAAM,GAAoC;IAC9C,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"IntegrationSwitch.js","sourceRoot":"","sources":["../../../src/react/workflows/IntegrationSwitch.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AACb,OAAO,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AAEjD,MAAM,MAAM,GAAoC;IAC9C,QAAQ,EAAE,SAAS;IACnB,UAAU,EAAE,yBAAyB;IACrC,QAAQ,EAAE,iBAAiB;IAC3B,MAAM,EAAE,eAAe;CACxB,CAAC;AAcF,iFAAiF;AACjF,MAAM,UAAU,iBAAiB,CAAC,EAChC,KAAK,EACL,KAAK,EACL,YAAY,GAAG,UAAU,EACzB,aAAa,EACb,QAAQ,GACe;IACvB,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;IACvD,MAAM,OAAO,GAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAuB;SACvD,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;SACnE,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,KAAK,IAAI,QAAQ,CAAC;IACpC,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC;QACnE,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,UAAU,CAAC;IACf,MAAM,MAAM,GAAG,CAAC,IAAqB,EAAE,EAAE;QACvC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC;YAAE,OAAO;QAC7D,WAAW,CAAC,IAAI,CAAC,CAAC;QAClB,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC7E,IAAI,QAAQ;QAAE,OAAO,4BAAG,QAAQ,CAAC,KAAK,CAAC,GAAI,CAAC;IAC5C,OAAO,CACL,qCAAwB,oBAAoB,aAC1C,cAAK,IAAI,EAAC,OAAO,gBAAY,sBAAsB,YAChD,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CACvB,iBAEE,IAAI,EAAC,QAAQ,kBACC,QAAQ,KAAK,MAAM,CAAC,KAAK,EACvC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,YAElC,MAAM,CAAC,KAAK,IALR,MAAM,CAAC,KAAK,CAMV,CACV,CAAC,GACE,EACL,KAAK,CAAC,OAAO,IACV,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
/** Cursor history for bounded server pages. Changing scope resets navigation. */
|
|
3
|
+
export declare function useCursorPagination(scopeKey: string): {
|
|
4
|
+
cursor: string | null;
|
|
5
|
+
page: number;
|
|
6
|
+
canPrevious: boolean;
|
|
7
|
+
previous: () => void;
|
|
8
|
+
next: (cursor: string) => void;
|
|
9
|
+
};
|
|
10
|
+
export type PaginationProps = {
|
|
11
|
+
page: number;
|
|
12
|
+
canPrevious: boolean;
|
|
13
|
+
canNext: boolean;
|
|
14
|
+
isLoading?: boolean;
|
|
15
|
+
onPrevious: () => void;
|
|
16
|
+
onNext: () => void;
|
|
17
|
+
previousLabel?: string;
|
|
18
|
+
nextLabel?: string;
|
|
19
|
+
pageLabel?: string;
|
|
20
|
+
children?: (state: {
|
|
21
|
+
pageLabel: string;
|
|
22
|
+
previousLabel: string;
|
|
23
|
+
nextLabel: string;
|
|
24
|
+
previousDisabled: boolean;
|
|
25
|
+
nextDisabled: boolean;
|
|
26
|
+
previous: () => void;
|
|
27
|
+
next: () => void;
|
|
28
|
+
}) => ReactNode;
|
|
29
|
+
};
|
|
30
|
+
/** Unstyled navigation with render props for application design systems. */
|
|
31
|
+
export declare function Pagination({ page, canPrevious, canNext, isLoading, onPrevious, onNext, previousLabel, nextLabel, pageLabel, children, }: PaginationProps): import("react").JSX.Element;
|
|
32
|
+
//# sourceMappingURL=Pagination.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Pagination.d.ts","sourceRoot":"","sources":["../../../src/react/workflows/Pagination.tsx"],"names":[],"mappings":"AACA,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEjD,iFAAiF;AACjF,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM;IAMhD,MAAM;IACN,IAAI;IACJ,WAAW;IACX,QAAQ;IAKR,IAAI,WAAW,MAAM;EAOxB;AACD,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,aAAa,EAAE,MAAM,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;QAClB,gBAAgB,EAAE,OAAO,CAAC;QAC1B,YAAY,EAAE,OAAO,CAAC;QACtB,QAAQ,EAAE,MAAM,IAAI,CAAC;QACrB,IAAI,EAAE,MAAM,IAAI,CAAC;KAClB,KAAK,SAAS,CAAC;CACjB,CAAC;AACF,4EAA4E;AAC5E,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,WAAW,EACX,OAAO,EACP,SAAiB,EACjB,UAAU,EACV,MAAM,EACN,aAA0B,EAC1B,SAAkB,EAClB,SAA0B,EAC1B,QAAQ,GACT,EAAE,eAAe,+BAkCjB"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useState } from "react";
|
|
4
|
+
/** Cursor history for bounded server pages. Changing scope resets navigation. */
|
|
5
|
+
export function useCursorPagination(scopeKey) {
|
|
6
|
+
const initial = { scopeKey, cursors: [null], index: 0 };
|
|
7
|
+
const [state, setState] = useState(initial);
|
|
8
|
+
const current = state.scopeKey === scopeKey ? state : initial;
|
|
9
|
+
if (state.scopeKey !== scopeKey)
|
|
10
|
+
setState(initial);
|
|
11
|
+
return {
|
|
12
|
+
cursor: current.cursors[current.index],
|
|
13
|
+
page: current.index + 1,
|
|
14
|
+
canPrevious: current.index > 0,
|
|
15
|
+
previous: () => setState((previous) => ({
|
|
16
|
+
...previous,
|
|
17
|
+
index: Math.max(0, previous.index - 1),
|
|
18
|
+
})),
|
|
19
|
+
next: (cursor) => setState((previous) => ({
|
|
20
|
+
...previous,
|
|
21
|
+
cursors: [...previous.cursors.slice(0, previous.index + 1), cursor],
|
|
22
|
+
index: previous.index + 1,
|
|
23
|
+
})),
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/** Unstyled navigation with render props for application design systems. */
|
|
27
|
+
export function Pagination({ page, canPrevious, canNext, isLoading = false, onPrevious, onNext, previousLabel = "Previous", nextLabel = "Next", pageLabel = `Page ${page}`, children, }) {
|
|
28
|
+
const previousDisabled = isLoading || !canPrevious;
|
|
29
|
+
const nextDisabled = isLoading || !canNext;
|
|
30
|
+
const state = {
|
|
31
|
+
pageLabel,
|
|
32
|
+
previousLabel,
|
|
33
|
+
nextLabel,
|
|
34
|
+
previousDisabled,
|
|
35
|
+
nextDisabled,
|
|
36
|
+
previous: () => {
|
|
37
|
+
if (!previousDisabled)
|
|
38
|
+
onPrevious();
|
|
39
|
+
},
|
|
40
|
+
next: () => {
|
|
41
|
+
if (!nextDisabled)
|
|
42
|
+
onNext();
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
if (children)
|
|
46
|
+
return _jsx(_Fragment, { children: children(state) });
|
|
47
|
+
return (_jsxs("nav", { "aria-label": "Pagination", children: [_jsx("button", { type: "button", disabled: previousDisabled, onClick: state.previous, children: previousLabel }), _jsx("span", { role: "status", "aria-live": "polite", children: pageLabel }), _jsx("button", { type: "button", disabled: nextDisabled, onClick: state.next, children: nextLabel })] }));
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=Pagination.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Pagination.js","sourceRoot":"","sources":["../../../src/react/workflows/Pagination.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AACb,OAAO,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AAEjD,iFAAiF;AACjF,MAAM,UAAU,mBAAmB,CAAC,QAAgB;IAClD,MAAM,OAAO,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,IAAI,CAAsB,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IAC7E,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;IAC9D,IAAI,KAAK,CAAC,QAAQ,KAAK,QAAQ;QAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IACnD,OAAO;QACL,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;QACtC,IAAI,EAAE,OAAO,CAAC,KAAK,GAAG,CAAC;QACvB,WAAW,EAAE,OAAO,CAAC,KAAK,GAAG,CAAC;QAC9B,QAAQ,EAAE,GAAG,EAAE,CACb,QAAQ,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YACtB,GAAG,QAAQ;YACX,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC;SACvC,CAAC,CAAC;QACL,IAAI,EAAE,CAAC,MAAc,EAAE,EAAE,CACvB,QAAQ,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YACtB,GAAG,QAAQ;YACX,OAAO,EAAE,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC;YACnE,KAAK,EAAE,QAAQ,CAAC,KAAK,GAAG,CAAC;SAC1B,CAAC,CAAC;KACN,CAAC;AACJ,CAAC;AAqBD,4EAA4E;AAC5E,MAAM,UAAU,UAAU,CAAC,EACzB,IAAI,EACJ,WAAW,EACX,OAAO,EACP,SAAS,GAAG,KAAK,EACjB,UAAU,EACV,MAAM,EACN,aAAa,GAAG,UAAU,EAC1B,SAAS,GAAG,MAAM,EAClB,SAAS,GAAG,QAAQ,IAAI,EAAE,EAC1B,QAAQ,GACQ;IAChB,MAAM,gBAAgB,GAAG,SAAS,IAAI,CAAC,WAAW,CAAC;IACnD,MAAM,YAAY,GAAG,SAAS,IAAI,CAAC,OAAO,CAAC;IAC3C,MAAM,KAAK,GAAG;QACZ,SAAS;QACT,aAAa;QACb,SAAS;QACT,gBAAgB;QAChB,YAAY;QACZ,QAAQ,EAAE,GAAG,EAAE;YACb,IAAI,CAAC,gBAAgB;gBAAE,UAAU,EAAE,CAAC;QACtC,CAAC;QACD,IAAI,EAAE,GAAG,EAAE;YACT,IAAI,CAAC,YAAY;gBAAE,MAAM,EAAE,CAAC;QAC9B,CAAC;KACF,CAAC;IACF,IAAI,QAAQ;QAAE,OAAO,4BAAG,QAAQ,CAAC,KAAK,CAAC,GAAI,CAAC;IAC5C,OAAO,CACL,6BAAgB,YAAY,aAC1B,iBACE,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,EAAE,KAAK,CAAC,QAAQ,YAEtB,aAAa,GACP,EACT,eAAM,IAAI,EAAC,QAAQ,eAAW,QAAQ,YACnC,SAAS,GACL,EACP,iBAAQ,IAAI,EAAC,QAAQ,EAAC,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,YAC9D,SAAS,GACH,IACL,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -1,24 +1,9 @@
|
|
|
1
|
+
import type { RecipientPayoutSnapshot, RecipientPayoutRow } from "../../client/connect/payoutSnapshot.js";
|
|
1
2
|
import { type ReactNode } from "react";
|
|
2
3
|
import { type ConnectProps } from "./Connect.js";
|
|
3
4
|
import { type CollectionProps, type WorkflowColumn } from "./Collection.js";
|
|
4
|
-
export type PayoutRow =
|
|
5
|
-
|
|
6
|
-
amount: number;
|
|
7
|
-
currency: string;
|
|
8
|
-
status: string;
|
|
9
|
-
/** Unix milliseconds. */ arrivalDate: number | null;
|
|
10
|
-
created: number;
|
|
11
|
-
};
|
|
12
|
-
export type PayoutSnapshot = {
|
|
13
|
-
balances: {
|
|
14
|
-
currency: string;
|
|
15
|
-
available: number;
|
|
16
|
-
pending: number;
|
|
17
|
-
}[];
|
|
18
|
-
payouts: PayoutRow[];
|
|
19
|
-
upcoming: PayoutRow[];
|
|
20
|
-
nextCursor: string | null;
|
|
21
|
-
};
|
|
5
|
+
export type PayoutRow = RecipientPayoutRow;
|
|
6
|
+
export type PayoutSnapshot = Pick<RecipientPayoutSnapshot, "balances" | "payouts" | "upcoming" | "nextCursor"> & Partial<Pick<RecipientPayoutSnapshot, "status" | "reason" | "upcomingComplete">>;
|
|
22
7
|
export type PayoutsRenderProps = {
|
|
23
8
|
data: PayoutSnapshot | undefined;
|
|
24
9
|
error: string | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Payouts.d.ts","sourceRoot":"","sources":["../../../src/react/workflows/Payouts.tsx"],"names":[],"mappings":"AACA,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACjD,OAAO,EAAW,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAG1D,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,cAAc,EACpB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,MAAM,SAAS,GAAG
|
|
1
|
+
{"version":3,"file":"Payouts.d.ts","sourceRoot":"","sources":["../../../src/react/workflows/Payouts.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,uBAAuB,EACvB,kBAAkB,EACnB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACjD,OAAO,EAAW,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAG1D,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,cAAc,EACpB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,MAAM,SAAS,GAAG,kBAAkB,CAAC;AAC3C,MAAM,MAAM,cAAc,GAAG,IAAI,CAC/B,uBAAuB,EACvB,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,YAAY,CACnD,GACC,OAAO,CACL,IAAI,CAAC,uBAAuB,EAAE,QAAQ,GAAG,QAAQ,GAAG,kBAAkB,CAAC,CACxE,CAAC;AACJ,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,cAAc,GAAG,SAAS,CAAC;IACjC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,SAAS,GAAG,SAAS,CAAC;IAClC,eAAe,EAAE,SAAS,EAAE,CAAC;IAC7B,eAAe,EAAE,SAAS,EAAE,CAAC;IAC7B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/B,CAAC;AACF,MAAM,MAAM,oBAAoB,GAAG;IACjC,YAAY,CAAC,EAAE,UAAU,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IACnD,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,SAAS,CAAC;CACrD,CAAC;AACF,MAAM,MAAM,YAAY,GACpB,oBAAoB,GACpB,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,GAAG;IAAE,YAAY,EAAE,UAAU,CAAA;CAAE,CAAC,CAAC;AAGrE,wBAAgB,OAAO,CAAC,KAAK,EAAE,YAAY,+BAM1C;AA+DD,MAAM,MAAM,gBAAgB,GAAG,IAAI,CACjC,SAAS,EACT,IAAI,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,aAAa,CACxD,CAAC;AACF,MAAM,MAAM,kBAAkB,CAC5B,GAAG,SAAS,gBAAgB,GAAG,gBAAgB,IAC7C,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC,GAAG;IACrD,OAAO,CAAC,EAAE,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;CACjC,CAAC;AACF,wBAAgB,aAAa,CAAC,GAAG,SAAS,gBAAgB,EACxD,KAAK,EAAE,kBAAkB,CAAC,GAAG,CAAC,+BAyB/B"}
|
|
@@ -79,9 +79,9 @@ export function PayoutHistory(props) {
|
|
|
79
79
|
return (_jsx(Collection, { emptyLabel: "No payouts yet.", ...props, getKey: (row) => row.id, columns: props.columns ?? columns }));
|
|
80
80
|
}
|
|
81
81
|
function NativePayouts({ data, isLoading, isPending, error, nextPayout, previousPayouts, upcomingPayouts, refresh, loadMore, }) {
|
|
82
|
-
return (_jsxs("section", { "data-better-stripe": "payouts", "aria-busy": isPending, children: [_jsx("h2", { children: "Payouts" }), _jsx("button", { type: "button", disabled: isPending, onClick: refresh, children: isPending ? "Refreshing…" : "Refresh" }), error && _jsx("p", { role: "alert", children: error }), isLoading && !data && _jsx("p", { role: "status", children: "Loading payouts\u2026" }), data && (_jsxs(_Fragment, { children: [_jsxs("dl", { children: [data.balances.map((balance) => (_jsxs("div", { children: [_jsx("dt", { children: "Available" }), _jsx("dd", { children: formatPrice(balance.available, balance.currency) }), _jsx("dt", { children: "Pending" }), _jsx("dd", { children: formatPrice(balance.pending, balance.currency) })] }, balance.currency))), _jsx("dt", { children: "Next payout" }), _jsx("dd", { children: nextPayout
|
|
82
|
+
return (_jsxs("section", { "data-better-stripe": "payouts", "aria-busy": isPending, children: [_jsx("h2", { children: "Payouts" }), _jsx("button", { type: "button", disabled: isPending, onClick: refresh, children: isPending ? "Refreshing…" : "Refresh" }), error && _jsx("p", { role: "alert", children: error }), isLoading && !data && _jsx("p", { role: "status", children: "Loading payouts\u2026" }), data?.status === "not_ready" && (_jsx("p", { role: "alert", children: "Stripe account data is not available yet." })), data && data.status !== "not_ready" && (_jsxs(_Fragment, { children: [_jsxs("dl", { children: [data.balances.map((balance) => (_jsxs("div", { children: [_jsx("dt", { children: "Available" }), _jsx("dd", { children: formatPrice(balance.available, balance.currency) }), _jsx("dt", { children: "Pending" }), _jsx("dd", { children: formatPrice(balance.pending, balance.currency) })] }, balance.currency))), _jsx("dt", { children: "Next payout" }), _jsx("dd", { children: nextPayout
|
|
83
83
|
? `${formatPrice(nextPayout.amount, nextPayout.currency)} · ${date(nextPayout.arrivalDate)}`
|
|
84
|
-
: "Not scheduled" })] }), _jsx("h3", { children: "Upcoming payouts" }), _jsx(PayoutHistory, { rows: upcomingPayouts, emptyLabel: "No upcoming payouts scheduled." }), _jsx("h3", { children: "Previous payouts" }), _jsx(PayoutHistory, { rows: previousPayouts, emptyLabel: "No previous payouts yet." }), data.nextCursor && (_jsx("button", { type: "button", disabled: isPending, onClick: () => {
|
|
84
|
+
: "Not scheduled" })] }), _jsx("h3", { children: "Upcoming payouts" }), data.upcomingComplete === false && (_jsx("p", { children: "Upcoming payouts are a bounded preview. More may be scheduled." })), _jsx(PayoutHistory, { rows: upcomingPayouts, emptyLabel: "No upcoming payouts scheduled." }), _jsx("h3", { children: "Previous payouts" }), _jsx(PayoutHistory, { rows: previousPayouts, emptyLabel: "No previous payouts yet." }), data.nextCursor && (_jsx("button", { type: "button", disabled: isPending, onClick: () => {
|
|
85
85
|
void loadMore();
|
|
86
86
|
}, children: isPending ? "Loading…" : "Load more payouts" }))] }))] }));
|
|
87
87
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Payouts.js","sourceRoot":"","sources":["../../../src/react/workflows/Payouts.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;
|
|
1
|
+
{"version":3,"file":"Payouts.js","sourceRoot":"","sources":["../../../src/react/workflows/Payouts.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
export type PlanPricing = {
|
|
3
|
+
id: string;
|
|
4
|
+
name: string;
|
|
5
|
+
monthlyAmount: number;
|
|
6
|
+
feeBasisPoints: number | null;
|
|
7
|
+
affiliateBasisPoints?: number | null;
|
|
8
|
+
version: number;
|
|
9
|
+
};
|
|
10
|
+
export type PlanPricingUpdate = {
|
|
11
|
+
monthlyAmount: number;
|
|
12
|
+
feeBasisPoints: number | null;
|
|
13
|
+
affiliateBasisPoints?: number | null;
|
|
14
|
+
expectedVersion: number;
|
|
15
|
+
};
|
|
16
|
+
export type PlanPricingEditorState = {
|
|
17
|
+
monthlyPrice: string;
|
|
18
|
+
saleFee: string;
|
|
19
|
+
affiliateShare: string;
|
|
20
|
+
setMonthlyPrice: (value: string) => void;
|
|
21
|
+
setSaleFee: (value: string) => void;
|
|
22
|
+
setAffiliateShare: (value: string) => void;
|
|
23
|
+
save: () => Promise<unknown>;
|
|
24
|
+
isPending: boolean;
|
|
25
|
+
error: string | null;
|
|
26
|
+
message: string | undefined;
|
|
27
|
+
};
|
|
28
|
+
export type PlanPricingEditorProps = {
|
|
29
|
+
plan: PlanPricing;
|
|
30
|
+
onSave: (update: PlanPricingUpdate) => Promise<unknown>;
|
|
31
|
+
children?: (state: PlanPricingEditorState) => ReactNode;
|
|
32
|
+
};
|
|
33
|
+
/** Unstyled store-plan pricing editor. Authorization and Stripe price creation belong on the server. */
|
|
34
|
+
export declare function PlanPricingEditor({ plan, onSave, children, }: PlanPricingEditorProps): import("react").JSX.Element;
|
|
35
|
+
//# sourceMappingURL=PlanPricingEditor.d.ts.map
|