react-native-fpay 0.3.5 → 0.3.7

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 (155) hide show
  1. package/lib/module/FountainPayProvider.js +108 -18
  2. package/lib/module/FountainPayProvider.js.map +1 -1
  3. package/lib/module/core/api/client.js +13 -1
  4. package/lib/module/core/api/client.js.map +1 -1
  5. package/lib/module/core/api/index.js +66 -24
  6. package/lib/module/core/api/index.js.map +1 -1
  7. package/lib/module/engine/BLEReceiverService.js.map +1 -1
  8. package/lib/module/engine/BLESenderService.js.map +1 -1
  9. package/lib/module/engine/FPEngine.js +164 -43
  10. package/lib/module/engine/FPEngine.js.map +1 -1
  11. package/lib/module/engine/NearbyUsersService.js +1 -1
  12. package/lib/module/engine/NearbyUsersService.js.map +1 -1
  13. package/lib/module/index.js +1 -0
  14. package/lib/module/index.js.map +1 -1
  15. package/lib/module/store/FPStore.js +155 -0
  16. package/lib/module/store/FPStore.js.map +1 -0
  17. package/lib/module/ui/components/AnimatedDots.js +3 -3
  18. package/lib/module/ui/components/AnimatedDots.js.map +1 -1
  19. package/lib/module/ui/components/ConfirmScreen.js +137 -123
  20. package/lib/module/ui/components/ConfirmScreen.js.map +1 -1
  21. package/lib/module/ui/components/FPButton.js.map +1 -1
  22. package/lib/module/ui/components/LoadingAnimation/InLoading.js +3 -3
  23. package/lib/module/ui/components/LoadingAnimation/InLoading.js.map +1 -1
  24. package/lib/module/ui/components/LoadingAnimation/index.js +3 -3
  25. package/lib/module/ui/components/LoadingAnimation/index.js.map +1 -1
  26. package/lib/module/ui/components/OtpInput/OTPInputView.js +11 -11
  27. package/lib/module/ui/components/OtpInput/OTPInputView.js.map +1 -1
  28. package/lib/module/ui/components/OtpInput/Styles.js +1 -1
  29. package/lib/module/ui/components/OtpInput/helpers/codeToArray.js +1 -1
  30. package/lib/module/ui/components/OtpInput/helpers/device.js.map +1 -1
  31. package/lib/module/ui/components/OtpInput/helpers/styles.js.map +1 -1
  32. package/lib/module/ui/components/OtpInput/index.js +3 -1
  33. package/lib/module/ui/components/OtpInput/index.js.map +1 -1
  34. package/lib/module/ui/components/PulseAnimation.js +2 -2
  35. package/lib/module/ui/components/PulseAnimation.js.map +1 -1
  36. package/lib/module/ui/modals/FPPaymentRequestModal.js +8 -7
  37. package/lib/module/ui/modals/FPPaymentRequestModal.js.map +1 -1
  38. package/lib/module/ui/modals/FPShell.js +2 -0
  39. package/lib/module/ui/modals/FPShell.js.map +1 -1
  40. package/lib/module/ui/screens/ReceiveScreen.js +8 -9
  41. package/lib/module/ui/screens/ReceiveScreen.js.map +1 -1
  42. package/lib/module/ui/screens/SendScreen.js +43 -94
  43. package/lib/module/ui/screens/SendScreen.js.map +1 -1
  44. package/lib/module/ui/screens/styles.js +15 -3
  45. package/lib/module/ui/screens/styles.js.map +1 -1
  46. package/lib/module/ui/screens/sub/receivePayment/Nfc/index.js +4 -4
  47. package/lib/module/ui/screens/sub/receivePayment/Nfc/index.js.map +1 -1
  48. package/lib/module/ui/screens/sub/receivePayment/Qr/index.js +5 -5
  49. package/lib/module/ui/screens/sub/receivePayment/Qr/index.js.map +1 -1
  50. package/lib/module/ui/screens/sub/receivePayment/Transfer/index.js +10 -11
  51. package/lib/module/ui/screens/sub/receivePayment/Transfer/index.js.map +1 -1
  52. package/lib/module/ui/screens/sub/sendPayment/BluetoothSubScreen.js +31 -8
  53. package/lib/module/ui/screens/sub/sendPayment/BluetoothSubScreen.js.map +1 -1
  54. package/lib/module/ui/screens/sub/sendPayment/NFCSubScreen.js +12 -8
  55. package/lib/module/ui/screens/sub/sendPayment/NFCSubScreen.js.map +1 -1
  56. package/lib/module/ui/screens/sub/sendPayment/NQRSubScreen.js +17 -5
  57. package/lib/module/ui/screens/sub/sendPayment/NQRSubScreen.js.map +1 -1
  58. package/lib/module/ui/screens/sub/sendPayment/ProximitySubScreen.js +67 -35
  59. package/lib/module/ui/screens/sub/sendPayment/ProximitySubScreen.js.map +1 -1
  60. package/lib/module/ui/screens/sub/sendPayment/TransferSubScreen.js +110 -34
  61. package/lib/module/ui/screens/sub/sendPayment/TransferSubScreen.js.map +1 -1
  62. package/lib/module/ui/theme/index.js.map +1 -1
  63. package/lib/typescript/src/FountainPayProvider.d.ts +1 -1
  64. package/lib/typescript/src/FountainPayProvider.d.ts.map +1 -1
  65. package/lib/typescript/src/core/api/client.d.ts.map +1 -1
  66. package/lib/typescript/src/core/api/index.d.ts +42 -26
  67. package/lib/typescript/src/core/api/index.d.ts.map +1 -1
  68. package/lib/typescript/src/core/types/index.d.ts +53 -28
  69. package/lib/typescript/src/core/types/index.d.ts.map +1 -1
  70. package/lib/typescript/src/engine/BLEReceiverService.d.ts +2 -0
  71. package/lib/typescript/src/engine/BLEReceiverService.d.ts.map +1 -1
  72. package/lib/typescript/src/engine/BLESenderService.d.ts.map +1 -1
  73. package/lib/typescript/src/engine/FPEngine.d.ts +5 -3
  74. package/lib/typescript/src/engine/FPEngine.d.ts.map +1 -1
  75. package/lib/typescript/src/engine/useIsForeground.d.ts.map +1 -1
  76. package/lib/typescript/src/index.d.ts +2 -1
  77. package/lib/typescript/src/index.d.ts.map +1 -1
  78. package/lib/typescript/src/store/FPStore.d.ts +60 -0
  79. package/lib/typescript/src/store/FPStore.d.ts.map +1 -0
  80. package/lib/typescript/src/ui/components/AnimatedDots.d.ts.map +1 -1
  81. package/lib/typescript/src/ui/components/ConfirmScreen.d.ts +5 -5
  82. package/lib/typescript/src/ui/components/ConfirmScreen.d.ts.map +1 -1
  83. package/lib/typescript/src/ui/components/FPButton.d.ts +1 -1
  84. package/lib/typescript/src/ui/components/FPButton.d.ts.map +1 -1
  85. package/lib/typescript/src/ui/components/LoadingAnimation/InLoading.d.ts.map +1 -1
  86. package/lib/typescript/src/ui/components/LoadingAnimation/index.d.ts.map +1 -1
  87. package/lib/typescript/src/ui/components/OtpInput/OTPInputView.d.ts.map +1 -1
  88. package/lib/typescript/src/ui/components/OtpInput/helpers/codeToArray.d.ts.map +1 -1
  89. package/lib/typescript/src/ui/components/OtpInput/helpers/device.d.ts.map +1 -1
  90. package/lib/typescript/src/ui/components/OtpInput/helpers/styles.d.ts.map +1 -1
  91. package/lib/typescript/src/ui/components/OtpInput/helpers/types.d.ts +1 -2
  92. package/lib/typescript/src/ui/components/OtpInput/helpers/types.d.ts.map +1 -1
  93. package/lib/typescript/src/ui/components/OtpInput/index.d.ts +3 -1
  94. package/lib/typescript/src/ui/components/OtpInput/index.d.ts.map +1 -1
  95. package/lib/typescript/src/ui/components/PulseAnimation.d.ts.map +1 -1
  96. package/lib/typescript/src/ui/modals/FPPaymentRequestModal.d.ts.map +1 -1
  97. package/lib/typescript/src/ui/modals/FPShell.d.ts.map +1 -1
  98. package/lib/typescript/src/ui/screens/ReceiveScreen.d.ts +1 -1
  99. package/lib/typescript/src/ui/screens/ReceiveScreen.d.ts.map +1 -1
  100. package/lib/typescript/src/ui/screens/SendScreen.d.ts +1 -1
  101. package/lib/typescript/src/ui/screens/SendScreen.d.ts.map +1 -1
  102. package/lib/typescript/src/ui/screens/styles.d.ts +197 -0
  103. package/lib/typescript/src/ui/screens/styles.d.ts.map +1 -1
  104. package/lib/typescript/src/ui/screens/sub/receivePayment/Nfc/index.d.ts.map +1 -1
  105. package/lib/typescript/src/ui/screens/sub/receivePayment/Qr/index.d.ts.map +1 -1
  106. package/lib/typescript/src/ui/screens/sub/receivePayment/Transfer/index.d.ts.map +1 -1
  107. package/lib/typescript/src/ui/screens/sub/sendPayment/BluetoothSubScreen.d.ts.map +1 -1
  108. package/lib/typescript/src/ui/screens/sub/sendPayment/NFCSubScreen.d.ts +1 -1
  109. package/lib/typescript/src/ui/screens/sub/sendPayment/NFCSubScreen.d.ts.map +1 -1
  110. package/lib/typescript/src/ui/screens/sub/sendPayment/NQRSubScreen.d.ts +1 -1
  111. package/lib/typescript/src/ui/screens/sub/sendPayment/NQRSubScreen.d.ts.map +1 -1
  112. package/lib/typescript/src/ui/screens/sub/sendPayment/ProximitySubScreen.d.ts +1 -1
  113. package/lib/typescript/src/ui/screens/sub/sendPayment/ProximitySubScreen.d.ts.map +1 -1
  114. package/lib/typescript/src/ui/screens/sub/sendPayment/TransferSubScreen.d.ts +1 -1
  115. package/lib/typescript/src/ui/screens/sub/sendPayment/TransferSubScreen.d.ts.map +1 -1
  116. package/lib/typescript/src/ui/theme/index.d.ts.map +1 -1
  117. package/package.json +4 -4
  118. package/src/FountainPayProvider.tsx +163 -24
  119. package/src/core/api/client.ts +26 -4
  120. package/src/core/api/index.ts +170 -49
  121. package/src/core/types/index.ts +81 -48
  122. package/src/engine/BLEReceiverService.ts +86 -28
  123. package/src/engine/BLESenderService.ts +133 -69
  124. package/src/engine/FPEngine.ts +316 -97
  125. package/src/engine/NearbyUsersService.ts +6 -6
  126. package/src/engine/useIsForeground.ts +12 -12
  127. package/src/index.ts +10 -4
  128. package/src/store/FPStore.ts +216 -0
  129. package/src/ui/components/AnimatedDots.tsx +4 -5
  130. package/src/ui/components/ConfirmScreen.tsx +182 -169
  131. package/src/ui/components/FPButton.tsx +50 -9
  132. package/src/ui/components/LoadingAnimation/InLoading.tsx +23 -27
  133. package/src/ui/components/LoadingAnimation/index.tsx +3 -7
  134. package/src/ui/components/OtpInput/OTPInputView.tsx +254 -205
  135. package/src/ui/components/OtpInput/Styles.ts +1 -1
  136. package/src/ui/components/OtpInput/helpers/codeToArray.ts +2 -2
  137. package/src/ui/components/OtpInput/helpers/device.ts +4 -3
  138. package/src/ui/components/OtpInput/helpers/styles.ts +13 -14
  139. package/src/ui/components/OtpInput/helpers/types.ts +83 -79
  140. package/src/ui/components/OtpInput/index.tsx +18 -15
  141. package/src/ui/components/PulseAnimation.tsx +3 -5
  142. package/src/ui/modals/FPPaymentRequestModal.tsx +111 -28
  143. package/src/ui/modals/FPShell.tsx +60 -34
  144. package/src/ui/screens/ReceiveScreen.tsx +245 -84
  145. package/src/ui/screens/SendScreen.tsx +419 -167
  146. package/src/ui/screens/styles.ts +17 -5
  147. package/src/ui/screens/sub/receivePayment/Nfc/index.tsx +17 -25
  148. package/src/ui/screens/sub/receivePayment/Qr/index.tsx +21 -20
  149. package/src/ui/screens/sub/receivePayment/Transfer/index.tsx +34 -28
  150. package/src/ui/screens/sub/sendPayment/BluetoothSubScreen.tsx +135 -67
  151. package/src/ui/screens/sub/sendPayment/NFCSubScreen.tsx +188 -112
  152. package/src/ui/screens/sub/sendPayment/NQRSubScreen.tsx +102 -69
  153. package/src/ui/screens/sub/sendPayment/ProximitySubScreen.tsx +225 -99
  154. package/src/ui/screens/sub/sendPayment/TransferSubScreen.tsx +209 -89
  155. package/src/ui/theme/index.ts +14 -2
@@ -1,10 +1,28 @@
1
1
  import React, { useEffect, useState } from 'react';
2
- import { View, Text, StyleSheet, ActivityIndicator, Image, TouchableOpacity, Dimensions, Animated, Easing, Alert, Vibration, Linking } from 'react-native';
2
+ import {
3
+ View,
4
+ Text,
5
+ StyleSheet,
6
+ ActivityIndicator,
7
+ Image,
8
+ TouchableOpacity,
9
+ Dimensions,
10
+ Animated,
11
+ Easing,
12
+ Alert,
13
+ Vibration,
14
+ Linking,
15
+ } from 'react-native';
3
16
  import { nqrAPI } from '../../../../core/api';
4
17
  import { FPButton } from '../../../components/FPButton';
5
18
  import { C, R, S, F, shadow } from '../../../theme';
6
19
  import type { FPCurrency, FPError, Props } from '../../../../core/types';
7
- import { Camera, useCameraDevice, useCameraDevices, useCodeScanner } from 'react-native-vision-camera';
20
+ import {
21
+ Camera,
22
+ useCameraDevice,
23
+ useCameraDevices,
24
+ useCodeScanner,
25
+ } from 'react-native-vision-camera';
8
26
  import styled from 'styled-components/native';
9
27
  import { launchImageLibrary } from 'react-native-image-picker';
10
28
  import QRKit from 'react-native-qr-kit';
@@ -122,8 +140,8 @@ const CornerBorder = styled(View)<{ position: string }>`
122
140
  position: absolute;
123
141
  width: 40px;
124
142
  height: 40px;
125
- ${props => {
126
- switch(props.position) {
143
+ ${(props) => {
144
+ switch (props.position) {
127
145
  case 'topLeft':
128
146
  return 'top: 0; left: 0; border-top-width: 4px; border-left-width: 4px;';
129
147
  case 'topRight':
@@ -184,36 +202,32 @@ const ScannedDataText = styled(Text)`
184
202
  font-weight: 600;
185
203
  `;
186
204
 
187
-
188
- export function NQRSubScreen({
189
- amount,
205
+ export function NQRSubScreen({
206
+ amount,
190
207
  currency,
191
- onClose,
192
- onProcessTransaction,
193
- onError
194
- }: Props) {
208
+ onClose,
209
+ onProcessTransaction,
210
+ onError,
211
+ }: Props) {
195
212
  const [hasPermission, setHasPermission] = useState<boolean | null>(null);
196
213
  const [scannedData, setScannedData] = useState<string | null>(null);
197
214
  const [isScanning, setIsScanning] = useState(true);
198
215
  const [torch, setTorch] = useState(false);
199
216
  const [layoutReady, setLayoutReady] = useState(false);
200
-
201
217
 
202
218
  const [isActive, setIsActive] = useState(false);
203
219
  const isForeground = useIsForeground();
204
220
 
205
-
206
221
  const lineAnim = React.useRef(new Animated.Value(0)).current;
207
222
  const lineWidth = 2;
208
223
 
209
-
210
224
  const device = useCameraDevice('back', {
211
225
  physicalDevices: ['wide-angle-camera'],
212
226
  });
213
227
 
214
228
  useEffect(() => {
215
229
  checkCameraPermission();
216
-
230
+
217
231
  return () => {
218
232
  setIsActive(false);
219
233
  };
@@ -221,50 +235,65 @@ export function NQRSubScreen({
221
235
 
222
236
  useEffect(() => {
223
237
  // if (scanned) {
224
- Animated.loop(
225
- Animated.sequence([
226
- Animated.timing(lineAnim, {
227
- toValue: qrSize - lineWidth, // Move to right edge
228
- duration: 1500,
229
- easing: Easing.inOut(Easing.linear),
230
- useNativeDriver: true,
231
- }),
232
- Animated.timing(lineAnim, {
233
- toValue: 0, // Move back to left
234
- duration: 1500,
235
- easing: Easing.inOut(Easing.linear),
236
- useNativeDriver: true,
237
- }),
238
- ])
239
- ).start();
238
+ Animated.loop(
239
+ Animated.sequence([
240
+ Animated.timing(lineAnim, {
241
+ toValue: qrSize - lineWidth, // Move to right edge
242
+ duration: 1500,
243
+ easing: Easing.inOut(Easing.linear),
244
+ useNativeDriver: true,
245
+ }),
246
+ Animated.timing(lineAnim, {
247
+ toValue: 0, // Move back to left
248
+ duration: 1500,
249
+ easing: Easing.inOut(Easing.linear),
250
+ useNativeDriver: true,
251
+ }),
252
+ ])
253
+ ).start();
240
254
  // }
241
255
  }, []);
242
256
 
243
257
  useEffect(() => {
244
- if (hasPermission && device && isForeground) {
245
- const timer = setTimeout(() => {
246
- setIsActive(true);
247
- }, 500);
258
+ if (hasPermission && device && isForeground) {
259
+ const timer = setTimeout(() => {
260
+ setIsActive(true);
261
+ }, 500);
248
262
 
249
- return () => clearTimeout(timer);
250
- }
263
+ return () => clearTimeout(timer);
264
+ }
251
265
 
252
- return undefined;
253
- }, [hasPermission, device, isForeground]);
266
+ return undefined;
267
+ }, [hasPermission, device, isForeground]);
254
268
 
255
269
  const checkCameraPermission = async () => {
256
270
  try {
257
271
  const permission = await Camera.getCameraPermissionStatus();
258
272
  console.log('Current permission status:', permission);
259
-
273
+
260
274
  if (permission === 'granted') {
261
275
  setHasPermission(true);
262
- } else if (permission === 'not-determined') {
263
- const newPermission = await Camera.requestCameraPermission();
264
- console.log('New permission status:', newPermission);
265
- setHasPermission(newPermission === 'granted');
266
- } else {
276
+ return;
277
+ }
278
+
279
+ if (permission === 'not-determined') {
280
+ // Request must be awaited — iOS shows dialog here
281
+ const result = await Camera.requestCameraPermission();
282
+ console.log('Permission result:', result);
283
+ setHasPermission(result === 'granted');
284
+ return;
285
+ }
286
+
287
+ if (permission === 'denied' || permission === 'restricted') {
267
288
  setHasPermission(false);
289
+ Alert.alert(
290
+ 'Camera Permission Required',
291
+ 'Please enable camera access in your device settings to scan QR codes.',
292
+ [
293
+ { text: 'Cancel', style: 'cancel' },
294
+ { text: 'Open Settings', onPress: () => Linking.openSettings() },
295
+ ]
296
+ );
268
297
  }
269
298
  } catch (error) {
270
299
  console.error('Permission check error:', error);
@@ -276,14 +305,14 @@ export function NQRSubScreen({
276
305
  try {
277
306
  const permission = await Camera.requestCameraPermission();
278
307
  console.log('Requested permission:', permission);
279
-
308
+
280
309
  if (permission === 'denied') {
281
310
  Alert.alert(
282
311
  'Permission Required',
283
312
  'Camera permission is required to scan QR codes. Please enable it in settings.',
284
313
  [
285
314
  { text: 'Cancel', style: 'cancel' },
286
- { text: 'Open Settings', onPress: () => Linking.openSettings() }
315
+ { text: 'Open Settings', onPress: () => Linking.openSettings() },
287
316
  ]
288
317
  );
289
318
  setHasPermission(false);
@@ -296,19 +325,19 @@ export function NQRSubScreen({
296
325
  }
297
326
  };
298
327
 
299
- const handleQrData=(data: any)=>{
328
+ const handleQrData = (data: any) => {
300
329
  console.log('QR Code Data:', data);
301
- const payload={
330
+ const payload = {
302
331
  accountNo: data?.accountNo,
303
332
  bank: data?.bankName,
304
333
  accountDetail: data?.accountName,
305
334
  channel: 'qr',
306
335
  amount: data?.amount,
307
- remark: data?.description
308
- }
336
+ remark: data?.description,
337
+ };
309
338
  console.log('Qr details:', payload);
310
339
  onProcessTransaction?.(payload as any);
311
- }
340
+ };
312
341
 
313
342
  const scanQrFromGallery = async () => {
314
343
  try {
@@ -326,17 +355,16 @@ export function NQRSubScreen({
326
355
  const barcodes: any = await QRKit.decodeQR(imageUri);
327
356
  if (barcodes?.success) {
328
357
  Vibration.vibrate(100);
329
-
358
+
330
359
  await handleQrData(JSON.parse(barcodes?.data));
331
360
  } else {
332
- Alert.alert('Error:', barcodes?.message)
361
+ Alert.alert('Error:', barcodes?.message);
333
362
  }
334
363
  } catch (error) {
335
364
  console.error('QR Scan Error:', error);
336
365
  }
337
366
  };
338
367
 
339
-
340
368
  const codeScanner = useCodeScanner({
341
369
  codeTypes: ['qr', 'ean-13'],
342
370
  onCodeScanned: (codes: any) => {
@@ -344,7 +372,7 @@ export function NQRSubScreen({
344
372
  const qrData: any = codes[0].value;
345
373
  setScannedData(qrData);
346
374
  setIsScanning(false);
347
-
375
+
348
376
  // Vibrate on scan (optional)
349
377
  Vibration.vibrate(100);
350
378
  console.log('Scanned QR Code:', JSON.parse(qrData));
@@ -361,8 +389,15 @@ export function NQRSubScreen({
361
389
  // }, []);
362
390
 
363
391
  const renderCamera = () => {
364
- console.log('Render camera - hasPermission:', hasPermission, 'device:', !!device, 'isActive:', isActive);
365
-
392
+ console.log(
393
+ 'Render camera - hasPermission:',
394
+ hasPermission,
395
+ 'device:',
396
+ !!device,
397
+ 'isActive:',
398
+ isActive
399
+ );
400
+
366
401
  if (hasPermission === null) {
367
402
  return (
368
403
  <CameraPlaceholder>
@@ -413,18 +448,19 @@ export function NQRSubScreen({
413
448
 
414
449
  return (
415
450
  <Container>
416
-
417
451
  {/* Header */}
418
452
  <Header>
419
453
  <HeaderButton onPress={onClose}>
420
454
  <Ionicons name="close" size={24} />
421
455
  </HeaderButton>
422
-
456
+
423
457
  <HeaderCenter>
424
- <Text style={{ fontWeight: 'bold', fontSize: 16, color:'#FFF' }}>QRIS</Text>
458
+ <Text style={{ fontWeight: 'bold', fontSize: 16, color: '#FFF' }}>
459
+ QRIS
460
+ </Text>
425
461
  <Text style={{ fontSize: 10, color: '#FFF' }}>QB Code Standar</Text>
426
462
  </HeaderCenter>
427
-
463
+
428
464
  <HeaderRight>
429
465
  <HeaderButton onPress={scanQrFromGallery}>
430
466
  <Ionicons name="image-outline" size={22} />
@@ -434,10 +470,10 @@ export function NQRSubScreen({
434
470
  </HeaderButton>
435
471
  </HeaderRight>
436
472
  </Header>
437
-
473
+
438
474
  <CameraContainer onLayout={() => setLayoutReady(true)}>
439
475
  {renderCamera()}
440
-
476
+
441
477
  {/* Scan Overlay*/}
442
478
  {hasPermission && device && isActive && (
443
479
  <ScanOverlay pointerEvents="none">
@@ -462,22 +498,19 @@ export function NQRSubScreen({
462
498
  )}
463
499
 
464
500
  {/* Scanned Data Display */}
465
- {scannedData && (
501
+ {scannedData && (
466
502
  <ScannedDataContainer>
467
503
  <ScannedDataText>Scanned: {scannedData}</ScannedDataText>
468
504
  </ScannedDataContainer>
469
- )}
505
+ )}
470
506
  </CameraContainer>
471
507
  {/* <StatusBarBlurBackground /> */}
472
-
473
-
474
508
  </Container>
475
509
  );
476
510
  }
477
511
 
478
512
  const qrSize = width * 0.75;
479
513
  const styles = StyleSheet.create({
480
-
481
514
  scanningLine: {
482
515
  height: qrSize,
483
516
  width: 2,