@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
@@ -0,0 +1,152 @@
1
+ "use strict";
2
+
3
+ import { useMemo, useState } from 'react';
4
+ import { Linking, Pressable, ScrollView, StyleSheet, Text, View } from 'react-native';
5
+ import { COUNTDOWN_SECONDS } from '../internal/constants';
6
+ import { resolveNetworkCode } from '../internal/format';
7
+ import { ClockPayClient } from '../api/client';
8
+ import { useCountdown } from '../hooks/use-countdown';
9
+ import { BottomSheet } from './bottom-sheet';
10
+ import { CloseIcon, LogoIcon } from './icons';
11
+ import { TransferView } from './views/transfer-view';
12
+ import { VerifyView } from './views/verify-view';
13
+ import { StatusView } from './views/status-view';
14
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
15
+ export function PaymentSheet({
16
+ visible,
17
+ checkout,
18
+ publicKey,
19
+ apiBaseUrl,
20
+ theme,
21
+ redirectUrl,
22
+ onRequestClose,
23
+ onClosed,
24
+ onSuccess,
25
+ onError
26
+ }) {
27
+ const [step, setStep] = useState('pay');
28
+ const [busy, setBusy] = useState(false);
29
+ const [success, setSuccess] = useState(false);
30
+ const [error, setError] = useState(null);
31
+ const {
32
+ formatted,
33
+ expired
34
+ } = useCountdown(COUNTDOWN_SECONDS);
35
+ const client = useMemo(() => new ClockPayClient(publicKey, apiBaseUrl), [publicKey, apiBaseUrl]);
36
+ const startVerification = async trxHash => {
37
+ setStep('status');
38
+ setBusy(true);
39
+ setError(null);
40
+ try {
41
+ const data = await client.verifyCrypto({
42
+ reference: checkout.reference,
43
+ trxHash,
44
+ code: resolveNetworkCode(checkout.network, checkout.networkCode)
45
+ });
46
+ setSuccess(true);
47
+ onSuccess?.(data);
48
+ } catch (err) {
49
+ const e = err instanceof Error ? err : new Error('Verification failed.');
50
+ setError(e.message);
51
+ onError?.(e);
52
+ } finally {
53
+ setBusy(false);
54
+ }
55
+ };
56
+ const handleClosed = () => {
57
+ onClosed();
58
+ if (success && redirectUrl) Linking.openURL(redirectUrl).catch(() => {});
59
+ };
60
+ return /*#__PURE__*/_jsxs(BottomSheet, {
61
+ visible: visible,
62
+ onClose: onRequestClose,
63
+ onClosed: handleClosed,
64
+ closeOnBackdropPress: false,
65
+ children: [/*#__PURE__*/_jsxs(View, {
66
+ style: styles.header,
67
+ children: [/*#__PURE__*/_jsx(LogoIcon, {
68
+ size: 18
69
+ }), /*#__PURE__*/_jsx(Text, {
70
+ style: [styles.title, {
71
+ color: theme.accent
72
+ }],
73
+ children: "Pay with Clockpay"
74
+ }), /*#__PURE__*/_jsx(Pressable, {
75
+ onPress: onRequestClose,
76
+ style: styles.cancel,
77
+ hitSlop: 8,
78
+ accessibilityRole: "button",
79
+ accessibilityLabel: "Cancel",
80
+ children: /*#__PURE__*/_jsx(CloseIcon, {
81
+ size: 22
82
+ })
83
+ })]
84
+ }), /*#__PURE__*/_jsxs(ScrollView, {
85
+ showsVerticalScrollIndicator: false,
86
+ keyboardShouldPersistTaps: "handled",
87
+ children: [step === 'pay' && /*#__PURE__*/_jsxs(View, {
88
+ style: styles.card,
89
+ children: [/*#__PURE__*/_jsx(Text, {
90
+ style: styles.muted,
91
+ children: "Total amount to be paid"
92
+ }), /*#__PURE__*/_jsxs(Text, {
93
+ style: styles.amount,
94
+ children: [checkout.amount, checkout.coin?.toUpperCase()]
95
+ }), /*#__PURE__*/_jsx(TransferView, {
96
+ checkout: checkout,
97
+ theme: theme,
98
+ formattedTime: formatted,
99
+ expired: expired,
100
+ onNext: () => setStep('verify')
101
+ })]
102
+ }), step === 'verify' && /*#__PURE__*/_jsx(VerifyView, {
103
+ theme: theme,
104
+ busy: busy,
105
+ onSubmit: startVerification
106
+ }), step === 'status' && /*#__PURE__*/_jsx(StatusView, {
107
+ theme: theme,
108
+ busy: busy,
109
+ success: success,
110
+ error: error,
111
+ onClose: onRequestClose
112
+ })]
113
+ })]
114
+ });
115
+ }
116
+ const styles = StyleSheet.create({
117
+ header: {
118
+ flexDirection: 'row',
119
+ alignItems: 'center',
120
+ justifyContent: 'center',
121
+ gap: 8,
122
+ paddingBottom: 16
123
+ },
124
+ title: {
125
+ fontSize: 16,
126
+ fontWeight: '700'
127
+ },
128
+ cancel: {
129
+ position: 'absolute',
130
+ right: 0,
131
+ top: -2,
132
+ padding: 4
133
+ },
134
+ card: {
135
+ borderWidth: 1,
136
+ borderColor: '#edf1f6',
137
+ borderRadius: 16,
138
+ padding: 20,
139
+ alignItems: 'center'
140
+ },
141
+ muted: {
142
+ fontSize: 13,
143
+ color: '#94a3b8'
144
+ },
145
+ amount: {
146
+ fontSize: 24,
147
+ fontWeight: '700',
148
+ color: '#000',
149
+ marginTop: 4
150
+ }
151
+ });
152
+ //# sourceMappingURL=payment-sheet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useMemo","useState","Linking","Pressable","ScrollView","StyleSheet","Text","View","COUNTDOWN_SECONDS","resolveNetworkCode","ClockPayClient","useCountdown","BottomSheet","CloseIcon","LogoIcon","TransferView","VerifyView","StatusView","jsx","_jsx","jsxs","_jsxs","PaymentSheet","visible","checkout","publicKey","apiBaseUrl","theme","redirectUrl","onRequestClose","onClosed","onSuccess","onError","step","setStep","busy","setBusy","success","setSuccess","error","setError","formatted","expired","client","startVerification","trxHash","data","verifyCrypto","reference","code","network","networkCode","err","e","Error","message","handleClosed","openURL","catch","onClose","closeOnBackdropPress","children","style","styles","header","size","title","color","accent","onPress","cancel","hitSlop","accessibilityRole","accessibilityLabel","showsVerticalScrollIndicator","keyboardShouldPersistTaps","card","muted","amount","coin","toUpperCase","formattedTime","onNext","onSubmit","create","flexDirection","alignItems","justifyContent","gap","paddingBottom","fontSize","fontWeight","position","right","top","padding","borderWidth","borderColor","borderRadius","marginTop"],"sourceRoot":"..\\..\\..\\src","sources":["components/payment-sheet.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+
3
+ import { ActivityIndicator, StyleSheet, Text, TouchableOpacity, View } from 'react-native';
4
+ import { CheckIcon } from '../icons';
5
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
6
+ /** Terminal step: processing spinner, success confirmation, or an error. */
7
+ export function StatusView({
8
+ theme,
9
+ busy,
10
+ success,
11
+ error,
12
+ onClose
13
+ }) {
14
+ if (busy) {
15
+ return /*#__PURE__*/_jsxs(View, {
16
+ style: styles.center,
17
+ children: [/*#__PURE__*/_jsx(ActivityIndicator, {
18
+ size: "large",
19
+ color: theme.accent
20
+ }), /*#__PURE__*/_jsx(Text, {
21
+ style: styles.muted,
22
+ children: "Please wait while we verify your transaction\u2026"
23
+ })]
24
+ });
25
+ }
26
+ if (success) {
27
+ return /*#__PURE__*/_jsxs(View, {
28
+ style: styles.center,
29
+ children: [/*#__PURE__*/_jsx(CheckIcon, {
30
+ size: 48
31
+ }), /*#__PURE__*/_jsx(Text, {
32
+ style: styles.title,
33
+ children: "Payment received!"
34
+ }), /*#__PURE__*/_jsx(Text, {
35
+ style: styles.muted,
36
+ children: "You can safely close this window."
37
+ }), /*#__PURE__*/_jsx(TouchableOpacity, {
38
+ style: [styles.primaryBtn, {
39
+ backgroundColor: theme.accent,
40
+ borderRadius: theme.radius
41
+ }],
42
+ onPress: onClose,
43
+ children: /*#__PURE__*/_jsx(Text, {
44
+ style: styles.primaryBtnText,
45
+ children: "Close"
46
+ })
47
+ })]
48
+ });
49
+ }
50
+ return /*#__PURE__*/_jsxs(View, {
51
+ style: styles.center,
52
+ children: [/*#__PURE__*/_jsx(Text, {
53
+ style: styles.title,
54
+ children: "Verification failed"
55
+ }), /*#__PURE__*/_jsx(Text, {
56
+ style: styles.error,
57
+ children: error ?? 'We could not verify your transaction.'
58
+ }), /*#__PURE__*/_jsx(TouchableOpacity, {
59
+ style: [styles.primaryBtn, {
60
+ backgroundColor: theme.accent,
61
+ borderRadius: theme.radius
62
+ }],
63
+ onPress: onClose,
64
+ children: /*#__PURE__*/_jsx(Text, {
65
+ style: styles.primaryBtnText,
66
+ children: "Close"
67
+ })
68
+ })]
69
+ });
70
+ }
71
+ const styles = StyleSheet.create({
72
+ center: {
73
+ alignItems: 'center',
74
+ paddingVertical: 24,
75
+ gap: 8
76
+ },
77
+ title: {
78
+ fontSize: 18,
79
+ fontWeight: '700',
80
+ color: '#000',
81
+ marginTop: 8
82
+ },
83
+ muted: {
84
+ fontSize: 13,
85
+ color: '#94a3b8',
86
+ textAlign: 'center'
87
+ },
88
+ error: {
89
+ fontSize: 13,
90
+ color: '#ef4444',
91
+ textAlign: 'center'
92
+ },
93
+ primaryBtn: {
94
+ width: '100%',
95
+ paddingVertical: 15,
96
+ alignItems: 'center',
97
+ marginTop: 16
98
+ },
99
+ primaryBtnText: {
100
+ fontSize: 16,
101
+ fontWeight: '600',
102
+ color: '#fff'
103
+ }
104
+ });
105
+ //# sourceMappingURL=status-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["ActivityIndicator","StyleSheet","Text","TouchableOpacity","View","CheckIcon","jsx","_jsx","jsxs","_jsxs","StatusView","theme","busy","success","error","onClose","style","styles","center","children","size","color","accent","muted","title","primaryBtn","backgroundColor","borderRadius","radius","onPress","primaryBtnText","create","alignItems","paddingVertical","gap","fontSize","fontWeight","marginTop","textAlign","width"],"sourceRoot":"..\\..\\..\\..\\src","sources":["components/views/status-view.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,157 @@
1
+ "use strict";
2
+
3
+ import { useState } from 'react';
4
+ import { StyleSheet, Text, TouchableOpacity, View } from 'react-native';
5
+ import QRCode from 'react-native-qrcode-svg';
6
+ import Clipboard from '@react-native-clipboard/clipboard';
7
+ import { CopyIcon, InfoIcon } from '../icons';
8
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
9
+ /** Manual-transfer flow: QR + deposit address + notes + countdown. */
10
+ export function TransferView({
11
+ checkout,
12
+ theme,
13
+ formattedTime,
14
+ expired,
15
+ onNext
16
+ }) {
17
+ const [copied, setCopied] = useState(false);
18
+ const coin = checkout.coin?.toUpperCase() ?? '';
19
+ const copyAddress = () => {
20
+ Clipboard.setString(checkout.address);
21
+ setCopied(true);
22
+ setTimeout(() => setCopied(false), 1500);
23
+ };
24
+ return /*#__PURE__*/_jsxs(View, {
25
+ style: styles.container,
26
+ children: [/*#__PURE__*/_jsx(View, {
27
+ style: [styles.qr, {
28
+ borderColor: theme.accent
29
+ }],
30
+ children: /*#__PURE__*/_jsx(QRCode, {
31
+ value: checkout.address,
32
+ size: 108
33
+ })
34
+ }), /*#__PURE__*/_jsx(Text, {
35
+ style: styles.addressLabel,
36
+ children: "Address:"
37
+ }), /*#__PURE__*/_jsx(Text, {
38
+ style: styles.address,
39
+ children: checkout.address
40
+ }), /*#__PURE__*/_jsxs(TouchableOpacity, {
41
+ style: styles.copyRow,
42
+ onPress: copyAddress,
43
+ children: [/*#__PURE__*/_jsx(Text, {
44
+ style: [styles.copyText, {
45
+ color: theme.accent
46
+ }],
47
+ children: copied ? 'Copied!' : 'Copy'
48
+ }), /*#__PURE__*/_jsx(CopyIcon, {
49
+ size: 18,
50
+ color: theme.accent
51
+ })]
52
+ }), /*#__PURE__*/_jsxs(View, {
53
+ style: styles.note,
54
+ children: [/*#__PURE__*/_jsxs(View, {
55
+ style: styles.noteRow,
56
+ children: [/*#__PURE__*/_jsx(InfoIcon, {
57
+ size: 16
58
+ }), /*#__PURE__*/_jsxs(Text, {
59
+ style: styles.noteText,
60
+ children: ["Only send ", coin, " (", checkout.networkCode, ") assets to this address. Other assets will be lost forever."]
61
+ })]
62
+ }), /*#__PURE__*/_jsxs(View, {
63
+ style: styles.noteRow,
64
+ children: [/*#__PURE__*/_jsx(InfoIcon, {
65
+ size: 16
66
+ }), /*#__PURE__*/_jsx(Text, {
67
+ style: styles.noteText,
68
+ children: "When you make a transfer, you'll paste the transaction hash on the next screen."
69
+ })]
70
+ })]
71
+ }), /*#__PURE__*/_jsx(Text, {
72
+ style: styles.timer,
73
+ children: formattedTime
74
+ }), /*#__PURE__*/_jsx(TouchableOpacity, {
75
+ style: [styles.primaryBtn, {
76
+ backgroundColor: expired ? '#dff0f7' : theme.accent,
77
+ borderRadius: theme.radius
78
+ }],
79
+ disabled: expired,
80
+ onPress: onNext,
81
+ children: /*#__PURE__*/_jsx(Text, {
82
+ style: [styles.primaryBtnText, {
83
+ color: expired ? '#9ca3af' : '#fff'
84
+ }],
85
+ children: "Next"
86
+ })
87
+ })]
88
+ });
89
+ }
90
+ const styles = StyleSheet.create({
91
+ container: {
92
+ alignItems: 'center'
93
+ },
94
+ qr: {
95
+ borderWidth: 1,
96
+ borderStyle: 'dashed',
97
+ borderRadius: 8,
98
+ padding: 10,
99
+ marginVertical: 12
100
+ },
101
+ addressLabel: {
102
+ fontSize: 13,
103
+ fontWeight: '700',
104
+ color: '#64748b'
105
+ },
106
+ address: {
107
+ fontSize: 13,
108
+ fontWeight: '700',
109
+ color: '#64748b',
110
+ textAlign: 'center',
111
+ marginTop: 4,
112
+ marginBottom: 8
113
+ },
114
+ copyRow: {
115
+ flexDirection: 'row',
116
+ alignItems: 'center',
117
+ gap: 6,
118
+ marginBottom: 16
119
+ },
120
+ copyText: {
121
+ fontSize: 13,
122
+ fontWeight: '700'
123
+ },
124
+ note: {
125
+ width: '100%',
126
+ backgroundColor: '#eefaff',
127
+ borderRadius: 8,
128
+ padding: 16,
129
+ gap: 8,
130
+ marginBottom: 16
131
+ },
132
+ noteRow: {
133
+ flexDirection: 'row',
134
+ gap: 8
135
+ },
136
+ noteText: {
137
+ flex: 1,
138
+ color: '#7785b0',
139
+ fontSize: 12,
140
+ lineHeight: 18
141
+ },
142
+ timer: {
143
+ color: '#3bc5ff',
144
+ fontSize: 14,
145
+ marginBottom: 12
146
+ },
147
+ primaryBtn: {
148
+ width: '100%',
149
+ paddingVertical: 15,
150
+ alignItems: 'center'
151
+ },
152
+ primaryBtnText: {
153
+ fontSize: 16,
154
+ fontWeight: '600'
155
+ }
156
+ });
157
+ //# sourceMappingURL=transfer-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useState","StyleSheet","Text","TouchableOpacity","View","QRCode","Clipboard","CopyIcon","InfoIcon","jsx","_jsx","jsxs","_jsxs","TransferView","checkout","theme","formattedTime","expired","onNext","copied","setCopied","coin","toUpperCase","copyAddress","setString","address","setTimeout","style","styles","container","children","qr","borderColor","accent","value","size","addressLabel","copyRow","onPress","copyText","color","note","noteRow","noteText","networkCode","timer","primaryBtn","backgroundColor","borderRadius","radius","disabled","primaryBtnText","create","alignItems","borderWidth","borderStyle","padding","marginVertical","fontSize","fontWeight","textAlign","marginTop","marginBottom","flexDirection","gap","width","flex","lineHeight","paddingVertical"],"sourceRoot":"..\\..\\..\\..\\src","sources":["components/views/transfer-view.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+
3
+ import { useState } from 'react';
4
+ import { StyleSheet, Text, TextInput, TouchableOpacity, View } from 'react-native';
5
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
6
+ /** Step where the buyer pastes their transaction hash to confirm the transfer. */
7
+ export function VerifyView({
8
+ theme,
9
+ busy,
10
+ onSubmit
11
+ }) {
12
+ const [hash, setHash] = useState('');
13
+ const trimmed = hash.trim();
14
+ const disabled = !trimmed || busy;
15
+ return /*#__PURE__*/_jsxs(View, {
16
+ children: [/*#__PURE__*/_jsx(Text, {
17
+ style: styles.title,
18
+ children: "Verify transaction"
19
+ }), /*#__PURE__*/_jsx(Text, {
20
+ style: styles.subtitle,
21
+ children: "Enter your transaction hash to confirm the payment."
22
+ }), /*#__PURE__*/_jsxs(Text, {
23
+ style: styles.label,
24
+ children: ["Hash ", /*#__PURE__*/_jsx(Text, {
25
+ style: styles.req,
26
+ children: "*"
27
+ })]
28
+ }), /*#__PURE__*/_jsx(TextInput, {
29
+ style: styles.input,
30
+ placeholder: "Enter your transaction hash",
31
+ placeholderTextColor: "#9ca3af",
32
+ value: hash,
33
+ onChangeText: setHash,
34
+ autoCapitalize: "none",
35
+ autoCorrect: false
36
+ }), /*#__PURE__*/_jsx(TouchableOpacity, {
37
+ style: [styles.primaryBtn, {
38
+ backgroundColor: disabled ? '#dff0f7' : theme.accent,
39
+ borderRadius: theme.radius
40
+ }],
41
+ disabled: disabled,
42
+ onPress: () => onSubmit(trimmed),
43
+ children: /*#__PURE__*/_jsx(Text, {
44
+ style: [styles.primaryBtnText, {
45
+ color: disabled ? '#9ca3af' : '#fff'
46
+ }],
47
+ children: busy ? 'Verifying…' : 'Confirm transaction'
48
+ })
49
+ })]
50
+ });
51
+ }
52
+ const styles = StyleSheet.create({
53
+ title: {
54
+ fontSize: 16,
55
+ fontWeight: '700',
56
+ color: '#1e1e1e',
57
+ textAlign: 'center'
58
+ },
59
+ subtitle: {
60
+ fontSize: 13,
61
+ color: '#94a3b8',
62
+ textAlign: 'center',
63
+ marginTop: 4,
64
+ marginBottom: 16
65
+ },
66
+ label: {
67
+ fontSize: 14,
68
+ fontWeight: '500',
69
+ color: '#1e1e1e',
70
+ marginBottom: 6
71
+ },
72
+ req: {
73
+ color: '#fb7185'
74
+ },
75
+ input: {
76
+ borderWidth: 1,
77
+ borderColor: '#d9d9d9',
78
+ borderRadius: 8,
79
+ padding: 12,
80
+ fontSize: 14,
81
+ color: '#1e1e1e',
82
+ marginBottom: 20
83
+ },
84
+ primaryBtn: {
85
+ width: '100%',
86
+ paddingVertical: 15,
87
+ alignItems: 'center'
88
+ },
89
+ primaryBtnText: {
90
+ fontSize: 16,
91
+ fontWeight: '600'
92
+ }
93
+ });
94
+ //# sourceMappingURL=verify-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useState","StyleSheet","Text","TextInput","TouchableOpacity","View","jsx","_jsx","jsxs","_jsxs","VerifyView","theme","busy","onSubmit","hash","setHash","trimmed","trim","disabled","children","style","styles","title","subtitle","label","req","input","placeholder","placeholderTextColor","value","onChangeText","autoCapitalize","autoCorrect","primaryBtn","backgroundColor","accent","borderRadius","radius","onPress","primaryBtnText","color","create","fontSize","fontWeight","textAlign","marginTop","marginBottom","borderWidth","borderColor","padding","width","paddingVertical","alignItems"],"sourceRoot":"..\\..\\..\\..\\src","sources":["components/views/verify-view.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+
3
+ import { useEffect, useState } from 'react';
4
+ import { formatTime } from '../internal/format';
5
+
6
+ /** A simple seconds countdown that stops at zero. */
7
+ export function useCountdown(seconds) {
8
+ const [timeLeft, setTimeLeft] = useState(seconds);
9
+ useEffect(() => {
10
+ if (timeLeft <= 0) return;
11
+ const id = setInterval(() => setTimeLeft(t => t - 1), 1000);
12
+ return () => clearInterval(id);
13
+ }, [timeLeft]);
14
+ return {
15
+ timeLeft,
16
+ formatted: formatTime(timeLeft),
17
+ expired: timeLeft <= 0,
18
+ reset: () => setTimeLeft(seconds)
19
+ };
20
+ }
21
+ //# sourceMappingURL=use-countdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useEffect","useState","formatTime","useCountdown","seconds","timeLeft","setTimeLeft","id","setInterval","t","clearInterval","formatted","expired","reset"],"sourceRoot":"..\\..\\..\\src","sources":["hooks/use-countdown.ts"],"mappings":";;AAAA,SAASA,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAC3C,SAASC,UAAU,QAAQ,oBAAoB;;AAE/C;AACA,OAAO,SAASC,YAAYA,CAACC,OAAe,EAAE;EAC5C,MAAM,CAACC,QAAQ,EAAEC,WAAW,CAAC,GAAGL,QAAQ,CAACG,OAAO,CAAC;EAEjDJ,SAAS,CAAC,MAAM;IACd,IAAIK,QAAQ,IAAI,CAAC,EAAE;IACnB,MAAME,EAAE,GAAGC,WAAW,CAAC,MAAMF,WAAW,CAAEG,CAAC,IAAKA,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC;IAC7D,OAAO,MAAMC,aAAa,CAACH,EAAE,CAAC;EAChC,CAAC,EAAE,CAACF,QAAQ,CAAC,CAAC;EAEd,OAAO;IACLA,QAAQ;IACRM,SAAS,EAAET,UAAU,CAACG,QAAQ,CAAC;IAC/BO,OAAO,EAAEP,QAAQ,IAAI,CAAC;IACtBQ,KAAK,EAAEA,CAAA,KAAMP,WAAW,CAACF,OAAO;EAClC,CAAC;AACH","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+
3
+ export { PaymentButton } from './components/payment-button';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["PaymentButton"],"sourceRoot":"..\\..\\src","sources":["index.ts"],"mappings":";;AAAA,SAASA,aAAa,QAAQ,6BAA6B","ignoreList":[]}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+
3
+ /** API gateway for test keys (`cpay_test_pk_…`). */
4
+ export const TEST_API_BASE_URL = 'https://api.dev.theclockchain.io/api/v1';
5
+
6
+ /** API gateway for live keys (`cpay_live_pk_…`). */
7
+ export const LIVE_API_BASE_URL = 'https://api.theclockchain.io/api/v1';
8
+
9
+ /** ClockPay brand blue. */
10
+ export const DEFAULT_ACCENT = '#27AAE1';
11
+
12
+ /** How long the buyer has to complete a transfer, in seconds. */
13
+ export const COUNTDOWN_SECONDS = 300;
14
+
15
+ /**
16
+ * Picks the API gateway from the public key's environment prefix, unless an
17
+ * explicit `override` (the `apiBaseUrl` prop) is provided. Unknown prefixes fall
18
+ * back to the test gateway.
19
+ */
20
+ export function resolveApiBaseUrl(publicKey, override) {
21
+ if (override) return override;
22
+ if (publicKey.startsWith('cpay_live_pk_')) return LIVE_API_BASE_URL;
23
+ return TEST_API_BASE_URL;
24
+ }
25
+
26
+ /**
27
+ * Maps a coin's settlement network to its on-chain id, used when verifying a
28
+ * crypto transaction. Falls back to the `networkCode` from the checkout payload.
29
+ */
30
+ export const NETWORK_CODES = {
31
+ eth: '1',
32
+ optimism: '10',
33
+ bsc: '56',
34
+ polygon: '137',
35
+ tron: '10121'
36
+ };
37
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["TEST_API_BASE_URL","LIVE_API_BASE_URL","DEFAULT_ACCENT","COUNTDOWN_SECONDS","resolveApiBaseUrl","publicKey","override","startsWith","NETWORK_CODES","eth","optimism","bsc","polygon","tron"],"sourceRoot":"..\\..\\..\\src","sources":["internal/constants.ts"],"mappings":";;AAAA;AACA,OAAO,MAAMA,iBAAiB,GAAG,yCAAyC;;AAE1E;AACA,OAAO,MAAMC,iBAAiB,GAAG,qCAAqC;;AAEtE;AACA,OAAO,MAAMC,cAAc,GAAG,SAAS;;AAEvC;AACA,OAAO,MAAMC,iBAAiB,GAAG,GAAG;;AAEpC;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,iBAAiBA,CAACC,SAAiB,EAAEC,QAAiB,EAAU;EAC9E,IAAIA,QAAQ,EAAE,OAAOA,QAAQ;EAC7B,IAAID,SAAS,CAACE,UAAU,CAAC,eAAe,CAAC,EAAE,OAAON,iBAAiB;EACnE,OAAOD,iBAAiB;AAC1B;;AAEA;AACA;AACA;AACA;AACA,OAAO,MAAMQ,aAAqC,GAAG;EACnDC,GAAG,EAAE,GAAG;EACRC,QAAQ,EAAE,IAAI;EACdC,GAAG,EAAE,IAAI;EACTC,OAAO,EAAE,KAAK;EACdC,IAAI,EAAE;AACR,CAAC","ignoreList":[]}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+
3
+ import { NETWORK_CODES } from './constants';
4
+
5
+ /** Formats a number of seconds as `MM:SS`. */
6
+ export function formatTime(totalSeconds) {
7
+ const safe = Math.max(0, totalSeconds);
8
+ const minutes = Math.floor(safe / 60);
9
+ const seconds = safe % 60;
10
+ return `${String(minutes).padStart(2, '0')}:${String(seconds).padStart(2, '0')}`;
11
+ }
12
+
13
+ /** Resolves the on-chain code used to verify a transaction for a given checkout. */
14
+ export function resolveNetworkCode(network, fallback) {
15
+ const key = network?.toLowerCase() ?? '';
16
+ return NETWORK_CODES[key] ?? fallback ?? '';
17
+ }
18
+
19
+ /** Truncates a long address for compact display: `0x1234…abcd`. */
20
+ export function truncateMiddle(value, lead = 10, tail = 8) {
21
+ if (value.length <= lead + tail + 1) return value;
22
+ return `${value.slice(0, lead)}…${value.slice(-tail)}`;
23
+ }
24
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["NETWORK_CODES","formatTime","totalSeconds","safe","Math","max","minutes","floor","seconds","String","padStart","resolveNetworkCode","network","fallback","key","toLowerCase","truncateMiddle","value","lead","tail","length","slice"],"sourceRoot":"..\\..\\..\\src","sources":["internal/format.ts"],"mappings":";;AAAA,SAASA,aAAa,QAAQ,aAAa;;AAE3C;AACA,OAAO,SAASC,UAAUA,CAACC,YAAoB,EAAU;EACvD,MAAMC,IAAI,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEH,YAAY,CAAC;EACtC,MAAMI,OAAO,GAAGF,IAAI,CAACG,KAAK,CAACJ,IAAI,GAAG,EAAE,CAAC;EACrC,MAAMK,OAAO,GAAGL,IAAI,GAAG,EAAE;EACzB,OAAO,GAAGM,MAAM,CAACH,OAAO,CAAC,CAACI,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAID,MAAM,CAACD,OAAO,CAAC,CAACE,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;AAClF;;AAEA;AACA,OAAO,SAASC,kBAAkBA,CAACC,OAAgB,EAAEC,QAAiB,EAAU;EAC9E,MAAMC,GAAG,GAAGF,OAAO,EAAEG,WAAW,CAAC,CAAC,IAAI,EAAE;EACxC,OAAOf,aAAa,CAACc,GAAG,CAAC,IAAID,QAAQ,IAAI,EAAE;AAC7C;;AAEA;AACA,OAAO,SAASG,cAAcA,CAACC,KAAa,EAAEC,IAAI,GAAG,EAAE,EAAEC,IAAI,GAAG,CAAC,EAAU;EACzE,IAAIF,KAAK,CAACG,MAAM,IAAIF,IAAI,GAAGC,IAAI,GAAG,CAAC,EAAE,OAAOF,KAAK;EACjD,OAAO,GAAGA,KAAK,CAACI,KAAK,CAAC,CAAC,EAAEH,IAAI,CAAC,IAAID,KAAK,CAACI,KAAK,CAAC,CAACF,IAAI,CAAC,EAAE;AACxD","ignoreList":[]}