@clockpay/react-native 1.0.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/README.md +113 -0
- package/lib/commonjs/api/client.js +73 -0
- package/lib/commonjs/api/client.js.map +1 -0
- package/lib/commonjs/api/endpoints.js +11 -0
- package/lib/commonjs/api/endpoints.js.map +1 -0
- package/lib/commonjs/components/bottom-sheet.js +137 -0
- package/lib/commonjs/components/bottom-sheet.js.map +1 -0
- package/lib/commonjs/components/icons.js +129 -0
- package/lib/commonjs/components/icons.js.map +1 -0
- package/lib/commonjs/components/payment-button.js +106 -0
- package/lib/commonjs/components/payment-button.js.map +1 -0
- package/lib/commonjs/components/payment-sheet.js +156 -0
- package/lib/commonjs/components/payment-sheet.js.map +1 -0
- package/lib/commonjs/components/views/status-view.js +109 -0
- package/lib/commonjs/components/views/status-view.js.map +1 -0
- package/lib/commonjs/components/views/transfer-view.js +162 -0
- package/lib/commonjs/components/views/transfer-view.js.map +1 -0
- package/lib/commonjs/components/views/verify-view.js +98 -0
- package/lib/commonjs/components/views/verify-view.js.map +1 -0
- package/lib/commonjs/hooks/use-countdown.js +24 -0
- package/lib/commonjs/hooks/use-countdown.js.map +1 -0
- package/lib/commonjs/index.js +13 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/internal/constants.js +42 -0
- package/lib/commonjs/internal/constants.js.map +1 -0
- package/lib/commonjs/internal/format.js +29 -0
- package/lib/commonjs/internal/format.js.map +1 -0
- package/lib/commonjs/internal/theme.js +24 -0
- package/lib/commonjs/internal/theme.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/types.js +6 -0
- package/lib/commonjs/types.js.map +1 -0
- package/lib/module/api/client.js +67 -0
- package/lib/module/api/client.js.map +1 -0
- package/lib/module/api/endpoints.js +7 -0
- package/lib/module/api/endpoints.js.map +1 -0
- package/lib/module/components/bottom-sheet.js +133 -0
- package/lib/module/components/bottom-sheet.js.map +1 -0
- package/lib/module/components/icons.js +120 -0
- package/lib/module/components/icons.js.map +1 -0
- package/lib/module/components/payment-button.js +103 -0
- package/lib/module/components/payment-button.js.map +1 -0
- package/lib/module/components/payment-sheet.js +152 -0
- package/lib/module/components/payment-sheet.js.map +1 -0
- package/lib/module/components/views/status-view.js +105 -0
- package/lib/module/components/views/status-view.js.map +1 -0
- package/lib/module/components/views/transfer-view.js +157 -0
- package/lib/module/components/views/transfer-view.js.map +1 -0
- package/lib/module/components/views/verify-view.js +94 -0
- package/lib/module/components/views/verify-view.js.map +1 -0
- package/lib/module/hooks/use-countdown.js +21 -0
- package/lib/module/hooks/use-countdown.js.map +1 -0
- package/lib/module/index.js +4 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/internal/constants.js +37 -0
- package/lib/module/internal/constants.js.map +1 -0
- package/lib/module/internal/format.js +24 -0
- package/lib/module/internal/format.js.map +1 -0
- package/lib/module/internal/theme.js +21 -0
- package/lib/module/internal/theme.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/types.js +4 -0
- package/lib/module/types.js.map +1 -0
- package/lib/typescript/api/client.d.ts +17 -0
- package/lib/typescript/api/client.d.ts.map +1 -0
- package/lib/typescript/api/endpoints.d.ts +5 -0
- package/lib/typescript/api/endpoints.d.ts.map +1 -0
- package/lib/typescript/components/bottom-sheet.d.ts +18 -0
- package/lib/typescript/components/bottom-sheet.d.ts.map +1 -0
- package/lib/typescript/components/icons.d.ts +12 -0
- package/lib/typescript/components/icons.d.ts.map +1 -0
- package/lib/typescript/components/payment-button.d.ts +7 -0
- package/lib/typescript/components/payment-button.d.ts.map +1 -0
- package/lib/typescript/components/payment-sheet.d.ts +17 -0
- package/lib/typescript/components/payment-sheet.d.ts.map +1 -0
- package/lib/typescript/components/views/status-view.d.ts +12 -0
- package/lib/typescript/components/views/status-view.d.ts.map +1 -0
- package/lib/typescript/components/views/transfer-view.d.ts +13 -0
- package/lib/typescript/components/views/transfer-view.d.ts.map +1 -0
- package/lib/typescript/components/views/verify-view.d.ts +10 -0
- package/lib/typescript/components/views/verify-view.d.ts.map +1 -0
- package/lib/typescript/hooks/use-countdown.d.ts +8 -0
- package/lib/typescript/hooks/use-countdown.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +3 -0
- package/lib/typescript/index.d.ts.map +1 -0
- package/lib/typescript/internal/constants.d.ts +20 -0
- package/lib/typescript/internal/constants.d.ts.map +1 -0
- package/lib/typescript/internal/format.d.ts +7 -0
- package/lib/typescript/internal/format.d.ts.map +1 -0
- package/lib/typescript/internal/theme.d.ts +13 -0
- package/lib/typescript/internal/theme.d.ts.map +1 -0
- package/lib/typescript/types.d.ts +67 -0
- package/lib/typescript/types.d.ts.map +1 -0
- package/package.json +70 -0
- package/src/api/client.ts +76 -0
- package/src/api/endpoints.ts +4 -0
- package/src/components/bottom-sheet.tsx +144 -0
- package/src/components/icons.tsx +90 -0
- package/src/components/payment-button.tsx +112 -0
- package/src/components/payment-sheet.tsx +149 -0
- package/src/components/views/status-view.tsx +61 -0
- package/src/components/views/transfer-view.tsx +112 -0
- package/src/components/views/verify-view.tsx +69 -0
- package/src/hooks/use-countdown.ts +20 -0
- package/src/index.ts +10 -0
- package/src/internal/constants.ts +34 -0
- package/src/internal/format.ts +21 -0
- package/src/internal/theme.ts +28 -0
- package/src/types.ts +73 -0
package/README.md
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
# ClockPay React Native SDK
|
|
2
|
+
|
|
3
|
+
[](https://opensource.org/licenses/MIT)
|
|
4
|
+
|
|
5
|
+
A type-safe React Native SDK for accepting crypto payments with ClockPay. Drop in a
|
|
6
|
+
single `<PaymentButton />` — it opens a **Stripe-style bottom-sheet** payment modal
|
|
7
|
+
that slides up from the bottom of the screen.
|
|
8
|
+
|
|
9
|
+
- 📱 **Native bottom sheet** — slides up with a dimmed backdrop and drag-to-dismiss.
|
|
10
|
+
- 🎨 **Themeable** — a Stripe-style `appearance` object controls colours and shape.
|
|
11
|
+
- 🔑 **Env-aware** — the API gateway is auto-selected from your key prefix.
|
|
12
|
+
- 🛡️ **Type-safe** — full TypeScript types for props, callbacks and responses.
|
|
13
|
+
|
|
14
|
+
## Installation
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
npm install @clockpay/react-native
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Install the required peer dependencies (native modules):
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
npm install react-native-svg react-native-qrcode-svg @react-native-clipboard/clipboard
|
|
24
|
+
cd ios && pod install # iOS only
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
`react` and `react-native` are also peer dependencies.
|
|
28
|
+
|
|
29
|
+
## Quick start
|
|
30
|
+
|
|
31
|
+
```tsx
|
|
32
|
+
import { PaymentButton } from '@clockpay/react-native';
|
|
33
|
+
|
|
34
|
+
export function Checkout({ clientSecret }: { clientSecret: string }) {
|
|
35
|
+
return (
|
|
36
|
+
<PaymentButton
|
|
37
|
+
publicKey="cpay_test_pk_..." // from your developer dashboard
|
|
38
|
+
clientSecret={clientSecret} // from your server-side checkout call
|
|
39
|
+
appearance={{ buttonColor: '#27AAE1', variant: 'outline' }}
|
|
40
|
+
onSuccess={(data) => console.log('Payment confirmed', data)}
|
|
41
|
+
onError={(error) => console.error(error)}
|
|
42
|
+
/>
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Pressing the button initiates a checkout and presents the bottom sheet: a QR code +
|
|
48
|
+
deposit address to transfer to, a countdown, then a screen to paste the transaction
|
|
49
|
+
hash for on-chain verification. `onSuccess` fires once the payment is confirmed.
|
|
50
|
+
|
|
51
|
+
> `clientSecret` must be created on **your server** (never expose your secret key in
|
|
52
|
+
> the app), then passed to the button.
|
|
53
|
+
|
|
54
|
+
## Theming
|
|
55
|
+
|
|
56
|
+
```tsx
|
|
57
|
+
<PaymentButton
|
|
58
|
+
publicKey="cpay_test_pk_..."
|
|
59
|
+
clientSecret={clientSecret}
|
|
60
|
+
appearance={{
|
|
61
|
+
variant: 'solid', // 'solid' | 'outline' (default: 'outline')
|
|
62
|
+
buttonColor: '#6C5CE7', // primary brand colour
|
|
63
|
+
buttonTextColor: '#ffffff',
|
|
64
|
+
borderRadius: 12,
|
|
65
|
+
modalAccentColor: '#6C5CE7',
|
|
66
|
+
}}
|
|
67
|
+
/>
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## API reference
|
|
71
|
+
|
|
72
|
+
### `<PaymentButton />`
|
|
73
|
+
|
|
74
|
+
| Prop | Type | Required | Description |
|
|
75
|
+
|------|------|----------|-------------|
|
|
76
|
+
| `publicKey` | `string` | Yes | Public key from the developer dashboard. |
|
|
77
|
+
| `clientSecret` | `string` | Yes | Returned from your server-side checkout call. |
|
|
78
|
+
| `appearance` | `ClockPayAppearance` | No | Button/sheet theming. |
|
|
79
|
+
| `label` | `ReactNode` | No | Button label. Defaults to `"Pay with Clockpay"`. |
|
|
80
|
+
| `disabled` | `boolean` | No | Disables the button. |
|
|
81
|
+
| `apiBaseUrl` | `string` | No | Override the API gateway. By default it's selected from the key prefix: `cpay_test_pk_` → dev, `cpay_live_pk_` → live. |
|
|
82
|
+
| `redirectUrl` | `string` | No | Opened via `Linking` after a successful payment. |
|
|
83
|
+
| `onSuccess` | `(data: VerifyCryptoResponse) => void` | No | Fired when payment is confirmed. |
|
|
84
|
+
| `onError` | `(error: Error) => void` | No | Fired if initiating or verifying fails. |
|
|
85
|
+
| `onClose` | `() => void` | No | Fired when the sheet closes. |
|
|
86
|
+
|
|
87
|
+
### `ClockPayAppearance`
|
|
88
|
+
|
|
89
|
+
| Field | Type | Default | Description |
|
|
90
|
+
|-------|------|---------|-------------|
|
|
91
|
+
| `variant` | `'solid' \| 'outline'` | `'outline'` | Button fill style. |
|
|
92
|
+
| `buttonColor` | `string` | `#27AAE1` | Primary brand colour. |
|
|
93
|
+
| `buttonTextColor` | `string` | brand / white | Button label colour. |
|
|
94
|
+
| `borderRadius` | `number` | `8` | Corner radius (dp). |
|
|
95
|
+
| `fontFamily` | `string` | system | Button label font. |
|
|
96
|
+
| `modalAccentColor` | `string` | `buttonColor` | Accent used inside the sheet. |
|
|
97
|
+
|
|
98
|
+
## Supported networks
|
|
99
|
+
|
|
100
|
+
ETH, Optimism, BSC, Polygon, and Tron. The network is determined by the checkout
|
|
101
|
+
created with your `clientSecret`.
|
|
102
|
+
|
|
103
|
+
## Local development
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
npm install
|
|
107
|
+
npm run typecheck
|
|
108
|
+
npm run build # react-native-builder-bob → lib/
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
## License
|
|
112
|
+
|
|
113
|
+
MIT
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.ClockPayClient = void 0;
|
|
7
|
+
var _axios = _interopRequireWildcard(require("axios"));
|
|
8
|
+
var _endpoints = require("./endpoints");
|
|
9
|
+
var _constants = require("../internal/constants");
|
|
10
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
11
|
+
/** Normalizes an unknown thrown value into a useful `Error`. */
|
|
12
|
+
function toError(error, fallback) {
|
|
13
|
+
if (error instanceof _axios.AxiosError) {
|
|
14
|
+
const message = error.response?.data?.message ?? error.message;
|
|
15
|
+
return new Error(message || fallback);
|
|
16
|
+
}
|
|
17
|
+
if (error instanceof Error) return error;
|
|
18
|
+
return new Error(fallback);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* A small, typed wrapper around the ClockPay REST API.
|
|
23
|
+
*
|
|
24
|
+
* Each client carries its own public key on a dedicated axios instance. The base
|
|
25
|
+
* URL is selected from the key's environment prefix (`cpay_test_pk_` → dev
|
|
26
|
+
* gateway, `cpay_live_pk_` → live gateway) unless `apiBaseUrl` overrides it.
|
|
27
|
+
*/
|
|
28
|
+
class ClockPayClient {
|
|
29
|
+
constructor(publicKey, apiBaseUrl) {
|
|
30
|
+
if (!publicKey) {
|
|
31
|
+
throw new Error('ClockPay: a publicKey is required.');
|
|
32
|
+
}
|
|
33
|
+
this.http = _axios.default.create({
|
|
34
|
+
baseURL: (0, _constants.resolveApiBaseUrl)(publicKey, apiBaseUrl),
|
|
35
|
+
headers: {
|
|
36
|
+
Accept: 'application/json',
|
|
37
|
+
'Content-Type': 'application/json',
|
|
38
|
+
'clock-pub-key': publicKey
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/** Initiates a checkout for the given client secret. */
|
|
44
|
+
async initiatePayment(clientSecret) {
|
|
45
|
+
if (!clientSecret) {
|
|
46
|
+
throw new Error('ClockPay: a clientSecret is required.');
|
|
47
|
+
}
|
|
48
|
+
try {
|
|
49
|
+
const {
|
|
50
|
+
data
|
|
51
|
+
} = await this.http.post(_endpoints.endpoints.initiatePayment, {
|
|
52
|
+
clientSecret
|
|
53
|
+
});
|
|
54
|
+
return data;
|
|
55
|
+
} catch (error) {
|
|
56
|
+
throw toError(error, 'Failed to initiate payment.');
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/** Verifies an on-chain transaction by hash. */
|
|
61
|
+
async verifyCrypto(payload) {
|
|
62
|
+
try {
|
|
63
|
+
const {
|
|
64
|
+
data
|
|
65
|
+
} = await this.http.post(_endpoints.endpoints.verifyCrypto, payload);
|
|
66
|
+
return data;
|
|
67
|
+
} catch (error) {
|
|
68
|
+
throw toError(error, 'Failed to verify transaction.');
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
exports.ClockPayClient = ClockPayClient;
|
|
73
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_axios","_interopRequireWildcard","require","_endpoints","_constants","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","toError","error","fallback","AxiosError","message","response","data","Error","ClockPayClient","constructor","publicKey","apiBaseUrl","http","axios","create","baseURL","resolveApiBaseUrl","headers","Accept","initiatePayment","clientSecret","post","endpoints","verifyCrypto","payload","exports"],"sourceRoot":"..\\..\\..\\src","sources":["api/client.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.endpoints = void 0;
|
|
7
|
+
const endpoints = exports.endpoints = Object.freeze({
|
|
8
|
+
initiatePayment: '/payment/client/checkout',
|
|
9
|
+
verifyCrypto: '/transactions/verify-crypto'
|
|
10
|
+
});
|
|
11
|
+
//# sourceMappingURL=endpoints.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["endpoints","exports","Object","freeze","initiatePayment","verifyCrypto"],"sourceRoot":"..\\..\\..\\src","sources":["api/endpoints.ts"],"mappings":";;;;;;AAAO,MAAMA,SAAS,GAAAC,OAAA,CAAAD,SAAA,GAAGE,MAAM,CAACC,MAAM,CAAC;EACrCC,eAAe,EAAE,0BAA0B;EAC3CC,YAAY,EAAE;AAChB,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.BottomSheet = BottomSheet;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
var _reactNative = require("react-native");
|
|
9
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
10
|
+
const SCREEN_HEIGHT = _reactNative.Dimensions.get('window').height;
|
|
11
|
+
const DISMISS_THRESHOLD = 120;
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* A Stripe-style bottom sheet: slides up from the bottom over a dimmed backdrop,
|
|
15
|
+
* with drag-to-dismiss on the handle. Built on RN primitives — no native deps.
|
|
16
|
+
*/
|
|
17
|
+
function BottomSheet({
|
|
18
|
+
visible,
|
|
19
|
+
onClose,
|
|
20
|
+
onClosed,
|
|
21
|
+
closeOnBackdropPress = true,
|
|
22
|
+
children
|
|
23
|
+
}) {
|
|
24
|
+
const translateY = (0, _react.useRef)(new _reactNative.Animated.Value(SCREEN_HEIGHT)).current;
|
|
25
|
+
const backdrop = (0, _react.useRef)(new _reactNative.Animated.Value(0)).current;
|
|
26
|
+
const [mounted, setMounted] = (0, _react.useState)(visible);
|
|
27
|
+
const animateIn = () => {
|
|
28
|
+
_reactNative.Animated.parallel([_reactNative.Animated.timing(translateY, {
|
|
29
|
+
toValue: 0,
|
|
30
|
+
duration: 280,
|
|
31
|
+
useNativeDriver: true
|
|
32
|
+
}), _reactNative.Animated.timing(backdrop, {
|
|
33
|
+
toValue: 1,
|
|
34
|
+
duration: 280,
|
|
35
|
+
useNativeDriver: true
|
|
36
|
+
})]).start();
|
|
37
|
+
};
|
|
38
|
+
const animateOut = () => {
|
|
39
|
+
_reactNative.Animated.parallel([_reactNative.Animated.timing(translateY, {
|
|
40
|
+
toValue: SCREEN_HEIGHT,
|
|
41
|
+
duration: 220,
|
|
42
|
+
useNativeDriver: true
|
|
43
|
+
}), _reactNative.Animated.timing(backdrop, {
|
|
44
|
+
toValue: 0,
|
|
45
|
+
duration: 220,
|
|
46
|
+
useNativeDriver: true
|
|
47
|
+
})]).start(() => {
|
|
48
|
+
setMounted(false);
|
|
49
|
+
onClosed?.();
|
|
50
|
+
});
|
|
51
|
+
};
|
|
52
|
+
(0, _react.useEffect)(() => {
|
|
53
|
+
if (visible) {
|
|
54
|
+
setMounted(true);
|
|
55
|
+
// Defer so the sheet starts off-screen before animating in.
|
|
56
|
+
requestAnimationFrame(animateIn);
|
|
57
|
+
} else if (mounted) {
|
|
58
|
+
animateOut();
|
|
59
|
+
}
|
|
60
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
61
|
+
}, [visible]);
|
|
62
|
+
const panResponder = (0, _react.useRef)(_reactNative.PanResponder.create({
|
|
63
|
+
onMoveShouldSetPanResponder: (_, g) => g.dy > 6 && Math.abs(g.dy) > Math.abs(g.dx),
|
|
64
|
+
onPanResponderMove: (_, g) => {
|
|
65
|
+
if (g.dy > 0) translateY.setValue(g.dy);
|
|
66
|
+
},
|
|
67
|
+
onPanResponderRelease: (_, g) => {
|
|
68
|
+
if (g.dy > DISMISS_THRESHOLD) onClose();else _reactNative.Animated.spring(translateY, {
|
|
69
|
+
toValue: 0,
|
|
70
|
+
useNativeDriver: true,
|
|
71
|
+
bounciness: 4
|
|
72
|
+
}).start();
|
|
73
|
+
}
|
|
74
|
+
})).current;
|
|
75
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Modal, {
|
|
76
|
+
visible: mounted,
|
|
77
|
+
transparent: true,
|
|
78
|
+
animationType: "none",
|
|
79
|
+
statusBarTranslucent: true,
|
|
80
|
+
onRequestClose: onClose,
|
|
81
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
82
|
+
style: styles.root,
|
|
83
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Animated.View, {
|
|
84
|
+
style: [styles.backdrop, {
|
|
85
|
+
opacity: backdrop
|
|
86
|
+
}],
|
|
87
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Pressable, {
|
|
88
|
+
style: _reactNative.StyleSheet.absoluteFill,
|
|
89
|
+
onPress: closeOnBackdropPress ? onClose : undefined
|
|
90
|
+
})
|
|
91
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Animated.View, {
|
|
92
|
+
style: [styles.sheet, {
|
|
93
|
+
transform: [{
|
|
94
|
+
translateY
|
|
95
|
+
}]
|
|
96
|
+
}],
|
|
97
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
98
|
+
style: styles.handleArea,
|
|
99
|
+
...panResponder.panHandlers,
|
|
100
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
101
|
+
style: styles.handle
|
|
102
|
+
})
|
|
103
|
+
}), children]
|
|
104
|
+
})]
|
|
105
|
+
})
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
const styles = _reactNative.StyleSheet.create({
|
|
109
|
+
root: {
|
|
110
|
+
flex: 1,
|
|
111
|
+
justifyContent: 'flex-end'
|
|
112
|
+
},
|
|
113
|
+
backdrop: {
|
|
114
|
+
..._reactNative.StyleSheet.absoluteFillObject,
|
|
115
|
+
backgroundColor: 'rgba(15,23,42,0.45)'
|
|
116
|
+
},
|
|
117
|
+
sheet: {
|
|
118
|
+
backgroundColor: '#ffffff',
|
|
119
|
+
borderTopLeftRadius: 24,
|
|
120
|
+
borderTopRightRadius: 24,
|
|
121
|
+
paddingHorizontal: 20,
|
|
122
|
+
paddingBottom: 32,
|
|
123
|
+
maxHeight: '92%'
|
|
124
|
+
},
|
|
125
|
+
handleArea: {
|
|
126
|
+
alignItems: 'center',
|
|
127
|
+
paddingTop: 10,
|
|
128
|
+
paddingBottom: 6
|
|
129
|
+
},
|
|
130
|
+
handle: {
|
|
131
|
+
width: 40,
|
|
132
|
+
height: 5,
|
|
133
|
+
borderRadius: 3,
|
|
134
|
+
backgroundColor: '#CBD5E1'
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
//# sourceMappingURL=bottom-sheet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","require","_reactNative","_jsxRuntime","SCREEN_HEIGHT","Dimensions","get","height","DISMISS_THRESHOLD","BottomSheet","visible","onClose","onClosed","closeOnBackdropPress","children","translateY","useRef","Animated","Value","current","backdrop","mounted","setMounted","useState","animateIn","parallel","timing","toValue","duration","useNativeDriver","start","animateOut","useEffect","requestAnimationFrame","panResponder","PanResponder","create","onMoveShouldSetPanResponder","_","g","dy","Math","abs","dx","onPanResponderMove","setValue","onPanResponderRelease","spring","bounciness","jsx","Modal","transparent","animationType","statusBarTranslucent","onRequestClose","jsxs","View","style","styles","root","opacity","Pressable","StyleSheet","absoluteFill","onPress","undefined","sheet","transform","handleArea","panHandlers","handle","flex","justifyContent","absoluteFillObject","backgroundColor","borderTopLeftRadius","borderTopRightRadius","paddingHorizontal","paddingBottom","maxHeight","alignItems","paddingTop","width","borderRadius"],"sourceRoot":"..\\..\\..\\src","sources":["components/bottom-sheet.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.CheckIcon = CheckIcon;
|
|
7
|
+
exports.CloseIcon = CloseIcon;
|
|
8
|
+
exports.CopyIcon = CopyIcon;
|
|
9
|
+
exports.InfoIcon = InfoIcon;
|
|
10
|
+
exports.LogoIcon = LogoIcon;
|
|
11
|
+
var _reactNativeSvg = _interopRequireWildcard(require("react-native-svg"));
|
|
12
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
13
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
14
|
+
/** ClockPay brandmark. */
|
|
15
|
+
function LogoIcon({
|
|
16
|
+
size = 16
|
|
17
|
+
}) {
|
|
18
|
+
const height = size;
|
|
19
|
+
const width = 23 / 28 * size;
|
|
20
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNativeSvg.default, {
|
|
21
|
+
width: width,
|
|
22
|
+
height: height,
|
|
23
|
+
viewBox: "0 0 23 28",
|
|
24
|
+
fill: "none",
|
|
25
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeSvg.Path, {
|
|
26
|
+
d: "M22.7193 20.6621H6.78613V27.548H22.7193V20.6621Z",
|
|
27
|
+
fill: "#26A9E1"
|
|
28
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeSvg.Path, {
|
|
29
|
+
d: "M11.3619 15.9327C12.5385 15.9327 13.4923 14.9649 13.4923 13.7711C13.4923 12.5772 12.5385 11.6094 11.3619 11.6094C10.1854 11.6094 9.23157 12.5772 9.23157 13.7711C9.23157 14.9649 10.1854 15.9327 11.3619 15.9327Z",
|
|
30
|
+
fill: "#26A9E1"
|
|
31
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeSvg.Path, {
|
|
32
|
+
d: "M22.7193 0V6.88589H6.79088V20.6577H0V0H22.7193Z",
|
|
33
|
+
fill: "#26A9E1"
|
|
34
|
+
})]
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
function CloseIcon({
|
|
38
|
+
size = 24,
|
|
39
|
+
color = '#1E1E1E'
|
|
40
|
+
}) {
|
|
41
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNativeSvg.default, {
|
|
42
|
+
width: size,
|
|
43
|
+
height: size,
|
|
44
|
+
viewBox: "0 0 32 32",
|
|
45
|
+
fill: "none",
|
|
46
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeSvg.Path, {
|
|
47
|
+
d: "M20 12L12 19.9995M20 20L12 12.0005",
|
|
48
|
+
stroke: color,
|
|
49
|
+
strokeWidth: 2,
|
|
50
|
+
strokeLinecap: "round",
|
|
51
|
+
strokeLinejoin: "round"
|
|
52
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeSvg.Path, {
|
|
53
|
+
d: "M3.33325 15.9999C3.33325 10.0288 3.33325 7.04324 5.18824 5.18824C7.04324 3.33325 10.0288 3.33325 15.9999 3.33325C21.971 3.33325 24.9566 3.33325 26.8117 5.18824C28.6666 7.04324 28.6666 10.0288 28.6666 15.9999C28.6666 21.971 28.6666 24.9566 26.8117 26.8117C24.9566 28.6666 21.971 28.6666 15.9999 28.6666C10.0288 28.6666 7.04324 28.6666 5.18824 26.8117C3.33325 24.9566 3.33325 21.971 3.33325 15.9999Z",
|
|
54
|
+
stroke: color,
|
|
55
|
+
strokeWidth: 2
|
|
56
|
+
})]
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
function CopyIcon({
|
|
60
|
+
size = 18,
|
|
61
|
+
color = '#27AAE1'
|
|
62
|
+
}) {
|
|
63
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNativeSvg.default, {
|
|
64
|
+
width: size,
|
|
65
|
+
height: size,
|
|
66
|
+
viewBox: "0 0 20 21",
|
|
67
|
+
fill: "none",
|
|
68
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeSvg.Path, {
|
|
69
|
+
d: "M7.5 13C7.5 10.643 7.5 9.4645 8.23223 8.73223C8.9645 8 10.143 8 12.5 8H13.3333C15.6903 8 16.8688 8 17.6011 8.73223C18.3333 9.4645 18.3333 10.643 18.3333 13V13.8333C18.3333 16.1903 18.3333 17.3688 17.6011 18.1011C16.8688 18.8333 15.6903 18.8333 13.3333 18.8333H12.5C10.143 18.8333 8.9645 18.8333 8.23223 18.1011C7.5 17.3688 7.5 16.1903 7.5 13.8333V13Z",
|
|
70
|
+
stroke: color,
|
|
71
|
+
strokeWidth: 1.25,
|
|
72
|
+
strokeLinecap: "round",
|
|
73
|
+
strokeLinejoin: "round"
|
|
74
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeSvg.Path, {
|
|
75
|
+
d: "M14.1664 8.00033C14.1644 5.53608 14.1272 4.25967 13.4098 3.38568C13.2713 3.2169 13.1166 3.06214 12.9478 2.92363C12.0258 2.16699 10.6561 2.16699 7.9165 2.16699C5.17694 2.16699 3.80715 2.16699 2.8852 2.92363C2.71641 3.06213 2.56165 3.2169 2.42314 3.38568C1.6665 4.30764 1.6665 5.67743 1.6665 8.41699C1.6665 11.1566 1.6665 12.5263 2.42314 13.4483C2.56165 13.6171 2.71641 13.7718 2.8852 13.9103C3.75918 14.6277 5.0356 14.6649 7.49984 14.6669",
|
|
76
|
+
stroke: color,
|
|
77
|
+
strokeWidth: 1.25,
|
|
78
|
+
strokeLinecap: "round",
|
|
79
|
+
strokeLinejoin: "round"
|
|
80
|
+
})]
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
function InfoIcon({
|
|
84
|
+
size = 16
|
|
85
|
+
}) {
|
|
86
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNativeSvg.default, {
|
|
87
|
+
width: size,
|
|
88
|
+
height: size,
|
|
89
|
+
viewBox: "0 0 12 12",
|
|
90
|
+
fill: "none",
|
|
91
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeSvg.Path, {
|
|
92
|
+
d: "M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z",
|
|
93
|
+
fill: "#9DAAD2"
|
|
94
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeSvg.Path, {
|
|
95
|
+
d: "M6 8V6",
|
|
96
|
+
stroke: "#FAFBFF",
|
|
97
|
+
strokeLinecap: "round",
|
|
98
|
+
strokeLinejoin: "round"
|
|
99
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeSvg.Path, {
|
|
100
|
+
d: "M6 4H6.005",
|
|
101
|
+
stroke: "#FAFBFF",
|
|
102
|
+
strokeLinecap: "round",
|
|
103
|
+
strokeLinejoin: "round"
|
|
104
|
+
})]
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
function CheckIcon({
|
|
108
|
+
size = 48
|
|
109
|
+
}) {
|
|
110
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNativeSvg.default, {
|
|
111
|
+
width: size,
|
|
112
|
+
height: size,
|
|
113
|
+
viewBox: "0 0 24 24",
|
|
114
|
+
fill: "none",
|
|
115
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeSvg.Circle, {
|
|
116
|
+
cx: 12,
|
|
117
|
+
cy: 12,
|
|
118
|
+
r: 10,
|
|
119
|
+
fill: "#22c55e"
|
|
120
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeSvg.Path, {
|
|
121
|
+
d: "M8 12.5L11 15.5L16 9.5",
|
|
122
|
+
stroke: "#fff",
|
|
123
|
+
strokeWidth: 2,
|
|
124
|
+
strokeLinecap: "round",
|
|
125
|
+
strokeLinejoin: "round"
|
|
126
|
+
})]
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=icons.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_reactNativeSvg","_interopRequireWildcard","require","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","LogoIcon","size","height","width","jsxs","viewBox","fill","children","jsx","Path","d","CloseIcon","color","stroke","strokeWidth","strokeLinecap","strokeLinejoin","CopyIcon","InfoIcon","CheckIcon","Circle","cx","cy"],"sourceRoot":"..\\..\\..\\src","sources":["components/icons.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.PaymentButton = PaymentButton;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
var _reactNative = require("react-native");
|
|
9
|
+
var _client = require("../api/client");
|
|
10
|
+
var _theme = require("../internal/theme");
|
|
11
|
+
var _paymentSheet = require("./payment-sheet");
|
|
12
|
+
var _icons = require("./icons");
|
|
13
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
14
|
+
/**
|
|
15
|
+
* Drop-in payment button for React Native. Renders a "Pay with Clockpay" trigger
|
|
16
|
+
* that initiates a checkout and opens a Stripe-style bottom-sheet payment modal.
|
|
17
|
+
*/
|
|
18
|
+
function PaymentButton({
|
|
19
|
+
publicKey,
|
|
20
|
+
clientSecret,
|
|
21
|
+
appearance,
|
|
22
|
+
label = 'Pay with Clockpay',
|
|
23
|
+
disabled,
|
|
24
|
+
apiBaseUrl,
|
|
25
|
+
redirectUrl,
|
|
26
|
+
onSuccess,
|
|
27
|
+
onError,
|
|
28
|
+
onClose
|
|
29
|
+
}) {
|
|
30
|
+
const [checkout, setCheckout] = (0, _react.useState)(null);
|
|
31
|
+
const [visible, setVisible] = (0, _react.useState)(false);
|
|
32
|
+
const [loading, setLoading] = (0, _react.useState)(false);
|
|
33
|
+
const theme = (0, _react.useMemo)(() => (0, _theme.resolveTheme)(appearance), [appearance]);
|
|
34
|
+
const initiate = async () => {
|
|
35
|
+
if (loading) return;
|
|
36
|
+
setLoading(true);
|
|
37
|
+
try {
|
|
38
|
+
const client = new _client.ClockPayClient(publicKey, apiBaseUrl);
|
|
39
|
+
const response = await client.initiatePayment(clientSecret);
|
|
40
|
+
setCheckout(response.data);
|
|
41
|
+
setVisible(true);
|
|
42
|
+
} catch (error) {
|
|
43
|
+
onError?.(error instanceof Error ? error : new Error('Payment initialization failed.'));
|
|
44
|
+
} finally {
|
|
45
|
+
setLoading(false);
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
const handleClosed = () => {
|
|
49
|
+
setCheckout(null);
|
|
50
|
+
onClose?.();
|
|
51
|
+
};
|
|
52
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
53
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
|
|
54
|
+
activeOpacity: 0.8,
|
|
55
|
+
disabled: disabled || loading,
|
|
56
|
+
onPress: initiate,
|
|
57
|
+
style: [styles.button, {
|
|
58
|
+
backgroundColor: theme.buttonBg,
|
|
59
|
+
borderColor: theme.buttonBorder,
|
|
60
|
+
borderRadius: theme.radius,
|
|
61
|
+
opacity: disabled || loading ? 0.6 : 1
|
|
62
|
+
}],
|
|
63
|
+
children: loading ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ActivityIndicator, {
|
|
64
|
+
size: "small",
|
|
65
|
+
color: theme.buttonFg
|
|
66
|
+
}) : /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
|
|
67
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_icons.LogoIcon, {
|
|
68
|
+
size: 16
|
|
69
|
+
}), typeof label === 'string' ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
70
|
+
style: [styles.label, {
|
|
71
|
+
color: theme.buttonFg,
|
|
72
|
+
fontFamily: theme.fontFamily
|
|
73
|
+
}],
|
|
74
|
+
children: label
|
|
75
|
+
}) : label]
|
|
76
|
+
})
|
|
77
|
+
}), checkout && /*#__PURE__*/(0, _jsxRuntime.jsx)(_paymentSheet.PaymentSheet, {
|
|
78
|
+
visible: visible,
|
|
79
|
+
checkout: checkout,
|
|
80
|
+
publicKey: publicKey,
|
|
81
|
+
apiBaseUrl: apiBaseUrl,
|
|
82
|
+
theme: theme,
|
|
83
|
+
redirectUrl: redirectUrl,
|
|
84
|
+
onRequestClose: () => setVisible(false),
|
|
85
|
+
onClosed: handleClosed,
|
|
86
|
+
onSuccess: onSuccess,
|
|
87
|
+
onError: onError
|
|
88
|
+
})]
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
const styles = _reactNative.StyleSheet.create({
|
|
92
|
+
button: {
|
|
93
|
+
flexDirection: 'row',
|
|
94
|
+
alignItems: 'center',
|
|
95
|
+
justifyContent: 'center',
|
|
96
|
+
gap: 8,
|
|
97
|
+
paddingVertical: 14,
|
|
98
|
+
paddingHorizontal: 16,
|
|
99
|
+
borderWidth: 2
|
|
100
|
+
},
|
|
101
|
+
label: {
|
|
102
|
+
fontSize: 15,
|
|
103
|
+
fontWeight: '600'
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
//# sourceMappingURL=payment-button.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","require","_reactNative","_client","_theme","_paymentSheet","_icons","_jsxRuntime","PaymentButton","publicKey","clientSecret","appearance","label","disabled","apiBaseUrl","redirectUrl","onSuccess","onError","onClose","checkout","setCheckout","useState","visible","setVisible","loading","setLoading","theme","useMemo","resolveTheme","initiate","client","ClockPayClient","response","initiatePayment","data","error","Error","handleClosed","jsxs","View","children","jsx","TouchableOpacity","activeOpacity","onPress","style","styles","button","backgroundColor","buttonBg","borderColor","buttonBorder","borderRadius","radius","opacity","ActivityIndicator","size","color","buttonFg","Fragment","LogoIcon","Text","fontFamily","PaymentSheet","onRequestClose","onClosed","StyleSheet","create","flexDirection","alignItems","justifyContent","gap","paddingVertical","paddingHorizontal","borderWidth","fontSize","fontWeight"],"sourceRoot":"..\\..\\..\\src","sources":["components/payment-button.tsx"],"mappings":"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","ignoreList":[]}
|