@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.
Files changed (109) hide show
  1. package/README.md +113 -0
  2. package/lib/commonjs/api/client.js +73 -0
  3. package/lib/commonjs/api/client.js.map +1 -0
  4. package/lib/commonjs/api/endpoints.js +11 -0
  5. package/lib/commonjs/api/endpoints.js.map +1 -0
  6. package/lib/commonjs/components/bottom-sheet.js +137 -0
  7. package/lib/commonjs/components/bottom-sheet.js.map +1 -0
  8. package/lib/commonjs/components/icons.js +129 -0
  9. package/lib/commonjs/components/icons.js.map +1 -0
  10. package/lib/commonjs/components/payment-button.js +106 -0
  11. package/lib/commonjs/components/payment-button.js.map +1 -0
  12. package/lib/commonjs/components/payment-sheet.js +156 -0
  13. package/lib/commonjs/components/payment-sheet.js.map +1 -0
  14. package/lib/commonjs/components/views/status-view.js +109 -0
  15. package/lib/commonjs/components/views/status-view.js.map +1 -0
  16. package/lib/commonjs/components/views/transfer-view.js +162 -0
  17. package/lib/commonjs/components/views/transfer-view.js.map +1 -0
  18. package/lib/commonjs/components/views/verify-view.js +98 -0
  19. package/lib/commonjs/components/views/verify-view.js.map +1 -0
  20. package/lib/commonjs/hooks/use-countdown.js +24 -0
  21. package/lib/commonjs/hooks/use-countdown.js.map +1 -0
  22. package/lib/commonjs/index.js +13 -0
  23. package/lib/commonjs/index.js.map +1 -0
  24. package/lib/commonjs/internal/constants.js +42 -0
  25. package/lib/commonjs/internal/constants.js.map +1 -0
  26. package/lib/commonjs/internal/format.js +29 -0
  27. package/lib/commonjs/internal/format.js.map +1 -0
  28. package/lib/commonjs/internal/theme.js +24 -0
  29. package/lib/commonjs/internal/theme.js.map +1 -0
  30. package/lib/commonjs/package.json +1 -0
  31. package/lib/commonjs/types.js +6 -0
  32. package/lib/commonjs/types.js.map +1 -0
  33. package/lib/module/api/client.js +67 -0
  34. package/lib/module/api/client.js.map +1 -0
  35. package/lib/module/api/endpoints.js +7 -0
  36. package/lib/module/api/endpoints.js.map +1 -0
  37. package/lib/module/components/bottom-sheet.js +133 -0
  38. package/lib/module/components/bottom-sheet.js.map +1 -0
  39. package/lib/module/components/icons.js +120 -0
  40. package/lib/module/components/icons.js.map +1 -0
  41. package/lib/module/components/payment-button.js +103 -0
  42. package/lib/module/components/payment-button.js.map +1 -0
  43. package/lib/module/components/payment-sheet.js +152 -0
  44. package/lib/module/components/payment-sheet.js.map +1 -0
  45. package/lib/module/components/views/status-view.js +105 -0
  46. package/lib/module/components/views/status-view.js.map +1 -0
  47. package/lib/module/components/views/transfer-view.js +157 -0
  48. package/lib/module/components/views/transfer-view.js.map +1 -0
  49. package/lib/module/components/views/verify-view.js +94 -0
  50. package/lib/module/components/views/verify-view.js.map +1 -0
  51. package/lib/module/hooks/use-countdown.js +21 -0
  52. package/lib/module/hooks/use-countdown.js.map +1 -0
  53. package/lib/module/index.js +4 -0
  54. package/lib/module/index.js.map +1 -0
  55. package/lib/module/internal/constants.js +37 -0
  56. package/lib/module/internal/constants.js.map +1 -0
  57. package/lib/module/internal/format.js +24 -0
  58. package/lib/module/internal/format.js.map +1 -0
  59. package/lib/module/internal/theme.js +21 -0
  60. package/lib/module/internal/theme.js.map +1 -0
  61. package/lib/module/package.json +1 -0
  62. package/lib/module/types.js +4 -0
  63. package/lib/module/types.js.map +1 -0
  64. package/lib/typescript/api/client.d.ts +17 -0
  65. package/lib/typescript/api/client.d.ts.map +1 -0
  66. package/lib/typescript/api/endpoints.d.ts +5 -0
  67. package/lib/typescript/api/endpoints.d.ts.map +1 -0
  68. package/lib/typescript/components/bottom-sheet.d.ts +18 -0
  69. package/lib/typescript/components/bottom-sheet.d.ts.map +1 -0
  70. package/lib/typescript/components/icons.d.ts +12 -0
  71. package/lib/typescript/components/icons.d.ts.map +1 -0
  72. package/lib/typescript/components/payment-button.d.ts +7 -0
  73. package/lib/typescript/components/payment-button.d.ts.map +1 -0
  74. package/lib/typescript/components/payment-sheet.d.ts +17 -0
  75. package/lib/typescript/components/payment-sheet.d.ts.map +1 -0
  76. package/lib/typescript/components/views/status-view.d.ts +12 -0
  77. package/lib/typescript/components/views/status-view.d.ts.map +1 -0
  78. package/lib/typescript/components/views/transfer-view.d.ts +13 -0
  79. package/lib/typescript/components/views/transfer-view.d.ts.map +1 -0
  80. package/lib/typescript/components/views/verify-view.d.ts +10 -0
  81. package/lib/typescript/components/views/verify-view.d.ts.map +1 -0
  82. package/lib/typescript/hooks/use-countdown.d.ts +8 -0
  83. package/lib/typescript/hooks/use-countdown.d.ts.map +1 -0
  84. package/lib/typescript/index.d.ts +3 -0
  85. package/lib/typescript/index.d.ts.map +1 -0
  86. package/lib/typescript/internal/constants.d.ts +20 -0
  87. package/lib/typescript/internal/constants.d.ts.map +1 -0
  88. package/lib/typescript/internal/format.d.ts +7 -0
  89. package/lib/typescript/internal/format.d.ts.map +1 -0
  90. package/lib/typescript/internal/theme.d.ts +13 -0
  91. package/lib/typescript/internal/theme.d.ts.map +1 -0
  92. package/lib/typescript/types.d.ts +67 -0
  93. package/lib/typescript/types.d.ts.map +1 -0
  94. package/package.json +70 -0
  95. package/src/api/client.ts +76 -0
  96. package/src/api/endpoints.ts +4 -0
  97. package/src/components/bottom-sheet.tsx +144 -0
  98. package/src/components/icons.tsx +90 -0
  99. package/src/components/payment-button.tsx +112 -0
  100. package/src/components/payment-sheet.tsx +149 -0
  101. package/src/components/views/status-view.tsx +61 -0
  102. package/src/components/views/transfer-view.tsx +112 -0
  103. package/src/components/views/verify-view.tsx +69 -0
  104. package/src/hooks/use-countdown.ts +20 -0
  105. package/src/index.ts +10 -0
  106. package/src/internal/constants.ts +34 -0
  107. package/src/internal/format.ts +21 -0
  108. package/src/internal/theme.ts +28 -0
  109. package/src/types.ts +73 -0
package/README.md ADDED
@@ -0,0 +1,113 @@
1
+ # ClockPay React Native SDK
2
+
3
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](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":";;;;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,UAAA,GAAAD,OAAA;AACA,IAAAE,UAAA,GAAAF,OAAA;AAA0D,SAAAD,wBAAAI,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAN,uBAAA,YAAAA,CAAAI,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAO1D;AACA,SAASkB,OAAOA,CAACC,KAAc,EAAEC,QAAgB,EAAS;EACxD,IAAID,KAAK,YAAYE,iBAAU,EAAE;IAC/B,MAAMC,OAAO,GACVH,KAAK,CAACI,QAAQ,EAAEC,IAAI,EAAuCF,OAAO,IACnEH,KAAK,CAACG,OAAO;IACf,OAAO,IAAIG,KAAK,CAACH,OAAO,IAAIF,QAAQ,CAAC;EACvC;EACA,IAAID,KAAK,YAAYM,KAAK,EAAE,OAAON,KAAK;EACxC,OAAO,IAAIM,KAAK,CAACL,QAAQ,CAAC;AAC5B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMM,cAAc,CAAC;EAG1BC,WAAWA,CAACC,SAAiB,EAAEC,UAAmB,EAAE;IAClD,IAAI,CAACD,SAAS,EAAE;MACd,MAAM,IAAIH,KAAK,CAAC,oCAAoC,CAAC;IACvD;IACA,IAAI,CAACK,IAAI,GAAGC,cAAK,CAACC,MAAM,CAAC;MACvBC,OAAO,EAAE,IAAAC,4BAAiB,EAACN,SAAS,EAAEC,UAAU,CAAC;MACjDM,OAAO,EAAE;QACPC,MAAM,EAAE,kBAAkB;QAC1B,cAAc,EAAE,kBAAkB;QAClC,eAAe,EAAER;MACnB;IACF,CAAC,CAAC;EACJ;;EAEA;EACA,MAAMS,eAAeA,CAACC,YAAoB,EAA6B;IACrE,IAAI,CAACA,YAAY,EAAE;MACjB,MAAM,IAAIb,KAAK,CAAC,uCAAuC,CAAC;IAC1D;IACA,IAAI;MACF,MAAM;QAAED;MAAK,CAAC,GAAG,MAAM,IAAI,CAACM,IAAI,CAACS,IAAI,CACnCC,oBAAS,CAACH,eAAe,EACzB;QAAEC;MAAa,CACjB,CAAC;MACD,OAAOd,IAAI;IACb,CAAC,CAAC,OAAOL,KAAK,EAAE;MACd,MAAMD,OAAO,CAACC,KAAK,EAAE,6BAA6B,CAAC;IACrD;EACF;;EAEA;EACA,MAAMsB,YAAYA,CAChBC,OAA4B,EACG;IAC/B,IAAI;MACF,MAAM;QAAElB;MAAK,CAAC,GAAG,MAAM,IAAI,CAACM,IAAI,CAACS,IAAI,CACnCC,oBAAS,CAACC,YAAY,EACtBC,OACF,CAAC;MACD,OAAOlB,IAAI;IACb,CAAC,CAAC,OAAOL,KAAK,EAAE;MACd,MAAMD,OAAO,CAACC,KAAK,EAAE,+BAA+B,CAAC;IACvD;EACF;AACF;AAACwB,OAAA,CAAAjB,cAAA,GAAAA,cAAA","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":[]}