react-native-timacare 3.3.56-alert → 3.3.57-cccd

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 (101) hide show
  1. package/lib/commonjs/assets/icons/index.js +1 -1
  2. package/lib/commonjs/assets/icons/index.js.flow +2 -0
  3. package/lib/commonjs/assets/icons/index.js.map +1 -1
  4. package/lib/commonjs/assets/icons/modal_confirm.svg +5 -5
  5. package/lib/commonjs/assets/icons/modal_notice.svg +32 -32
  6. package/lib/commonjs/assets/icons/modal_success.svg +26 -26
  7. package/lib/commonjs/assets/icons/modal_warning.svg +21 -21
  8. package/lib/commonjs/assets/icons/user_security.svg +10 -0
  9. package/lib/commonjs/assets/tts/Frame1000011947.png +0 -0
  10. package/lib/commonjs/navigation/primary-navigator.js +1 -1
  11. package/lib/commonjs/navigation/primary-navigator.js.flow +7 -0
  12. package/lib/commonjs/navigation/primary-navigator.js.map +1 -1
  13. package/lib/commonjs/screens/NFC/OcrStart.js +2 -0
  14. package/lib/commonjs/screens/NFC/OcrStart.js.flow +171 -0
  15. package/lib/commonjs/screens/NFC/OcrStart.js.map +1 -0
  16. package/lib/commonjs/screens/NFC/ScanMRZ.js +2 -0
  17. package/lib/commonjs/screens/NFC/ScanMRZ.js.flow +563 -0
  18. package/lib/commonjs/screens/NFC/ScanMRZ.js.map +1 -0
  19. package/lib/commonjs/screens/camera/CCCDCameraScreen.js +1 -1
  20. package/lib/commonjs/screens/camera/CCCDCameraScreen.js.flow +203 -133
  21. package/lib/commonjs/screens/camera/CCCDCameraScreen.js.map +1 -1
  22. package/lib/commonjs/screens/home/index.js +1 -1
  23. package/lib/commonjs/screens/home/index.js.flow +7 -112
  24. package/lib/commonjs/screens/home/index.js.map +1 -1
  25. package/lib/commonjs/screens/nationalID/index.js +1 -1
  26. package/lib/commonjs/screens/nationalID/index.js.flow +123 -218
  27. package/lib/commonjs/screens/nationalID/index.js.map +1 -1
  28. package/lib/commonjs/screens/nationalIDBack/index.js +1 -1
  29. package/lib/commonjs/screens/nationalIDBack/index.js.flow +129 -209
  30. package/lib/commonjs/screens/nationalIDBack/index.js.map +1 -1
  31. package/lib/commonjs/screens/toan-trinh-so/OCR.js +1 -1
  32. package/lib/commonjs/screens/toan-trinh-so/OCR.js.flow +269 -555
  33. package/lib/commonjs/screens/toan-trinh-so/OCR.js.map +1 -1
  34. package/lib/commonjs/screens/toan-trinh-so/VehicleCamera.js +1 -1
  35. package/lib/commonjs/screens/toan-trinh-so/VehicleCamera.js.flow +225 -287
  36. package/lib/commonjs/screens/toan-trinh-so/VehicleCamera.js.map +1 -1
  37. package/lib/commonjs/utils/cameraCrop.js +2 -0
  38. package/lib/commonjs/utils/cameraCrop.js.flow +96 -0
  39. package/lib/commonjs/utils/cameraCrop.js.map +1 -0
  40. package/lib/module/assets/icons/index.js +1 -1
  41. package/lib/module/assets/icons/index.js.map +1 -1
  42. package/lib/module/assets/icons/modal_confirm.svg +5 -5
  43. package/lib/module/assets/icons/modal_notice.svg +32 -32
  44. package/lib/module/assets/icons/modal_success.svg +26 -26
  45. package/lib/module/assets/icons/modal_warning.svg +21 -21
  46. package/lib/module/assets/icons/user_security.svg +10 -0
  47. package/lib/module/assets/tts/Frame1000011947.png +0 -0
  48. package/lib/module/navigation/primary-navigator.js +1 -1
  49. package/lib/module/navigation/primary-navigator.js.map +1 -1
  50. package/lib/module/screens/NFC/OcrStart.js +2 -0
  51. package/lib/module/screens/NFC/OcrStart.js.map +1 -0
  52. package/lib/module/screens/NFC/ScanMRZ.js +2 -0
  53. package/lib/module/screens/NFC/ScanMRZ.js.map +1 -0
  54. package/lib/module/screens/camera/CCCDCameraScreen.js +1 -1
  55. package/lib/module/screens/camera/CCCDCameraScreen.js.map +1 -1
  56. package/lib/module/screens/home/index.js +1 -1
  57. package/lib/module/screens/home/index.js.map +1 -1
  58. package/lib/module/screens/nationalID/index.js +1 -1
  59. package/lib/module/screens/nationalID/index.js.map +1 -1
  60. package/lib/module/screens/nationalIDBack/index.js +1 -1
  61. package/lib/module/screens/nationalIDBack/index.js.map +1 -1
  62. package/lib/module/screens/toan-trinh-so/OCR.js +1 -1
  63. package/lib/module/screens/toan-trinh-so/OCR.js.map +1 -1
  64. package/lib/module/screens/toan-trinh-so/VehicleCamera.js +1 -1
  65. package/lib/module/screens/toan-trinh-so/VehicleCamera.js.map +1 -1
  66. package/lib/module/utils/cameraCrop.js +2 -0
  67. package/lib/module/utils/cameraCrop.js.map +1 -0
  68. package/lib/typescript/assets/icons/index.d.ts +2 -1
  69. package/lib/typescript/assets/icons/index.d.ts.map +1 -1
  70. package/lib/typescript/navigation/primary-navigator.d.ts +3 -0
  71. package/lib/typescript/navigation/primary-navigator.d.ts.map +1 -1
  72. package/lib/typescript/screens/NFC/OcrStart.d.ts +2 -0
  73. package/lib/typescript/screens/NFC/OcrStart.d.ts.map +1 -0
  74. package/lib/typescript/screens/NFC/ScanMRZ.d.ts +15 -0
  75. package/lib/typescript/screens/NFC/ScanMRZ.d.ts.map +1 -0
  76. package/lib/typescript/screens/camera/CCCDCameraScreen.d.ts.map +1 -1
  77. package/lib/typescript/screens/home/index.d.ts.map +1 -1
  78. package/lib/typescript/screens/nationalID/index.d.ts.map +1 -1
  79. package/lib/typescript/screens/nationalIDBack/index.d.ts.map +1 -1
  80. package/lib/typescript/screens/toan-trinh-so/OCR.d.ts.map +1 -1
  81. package/lib/typescript/screens/toan-trinh-so/VehicleCamera.d.ts.map +1 -1
  82. package/lib/typescript/utils/cameraCrop.d.ts +43 -0
  83. package/lib/typescript/utils/cameraCrop.d.ts.map +1 -0
  84. package/package.json +2 -1
  85. package/src/assets/icons/index.tsx +2 -0
  86. package/src/assets/icons/modal_confirm.svg +5 -5
  87. package/src/assets/icons/modal_notice.svg +32 -32
  88. package/src/assets/icons/modal_success.svg +26 -26
  89. package/src/assets/icons/modal_warning.svg +21 -21
  90. package/src/assets/icons/user_security.svg +10 -0
  91. package/src/assets/tts/Frame1000011947.png +0 -0
  92. package/src/navigation/primary-navigator.tsx +7 -0
  93. package/src/screens/NFC/OcrStart.tsx +171 -0
  94. package/src/screens/NFC/ScanMRZ.tsx +563 -0
  95. package/src/screens/camera/CCCDCameraScreen.tsx +203 -133
  96. package/src/screens/home/index.tsx +7 -112
  97. package/src/screens/nationalID/index.tsx +123 -218
  98. package/src/screens/nationalIDBack/index.tsx +129 -209
  99. package/src/screens/toan-trinh-so/OCR.tsx +269 -555
  100. package/src/screens/toan-trinh-so/VehicleCamera.tsx +225 -287
  101. package/src/utils/cameraCrop.ts +96 -0
@@ -0,0 +1,96 @@
1
+ // @ts-nocheck
2
+ import RNImageManipulator from '@oguzhnatly/react-native-image-manipulator';
3
+
4
+ /**
5
+ * Kích thước hiển thị (upright) của ảnh chụp từ VisionCamera.
6
+ *
7
+ * photo.width/height là kích thước buffer gốc của cảm biến (luôn landscape).
8
+ * photo.orientation cho biết ảnh cần xoay bao nhiêu để hiển thị đúng chiều:
9
+ * khi là 'landscape-left'/'landscape-right' (điện thoại cầm dọc) thì ảnh hiển
10
+ * thị bị xoay 90° so với buffer -> phải hoán đổi W/H.
11
+ */
12
+ export const getDisplaySize = (photo) => {
13
+ const needsSwap =
14
+ photo?.orientation === 'landscape-left' ||
15
+ photo?.orientation === 'landscape-right';
16
+ return needsSwap
17
+ ? { width: photo.height, height: photo.width }
18
+ : { width: photo.width, height: photo.height };
19
+ };
20
+
21
+ /**
22
+ * Vùng cắt chính giữa theo đúng tỉ lệ khung (aspect = W/H), tính trong hệ toạ
23
+ * độ ảnh đã dựng đứng (upright). VisionCamera fill khung kiểu "cover" nên vùng
24
+ * nhìn thấy là hình chữ nhật cùng tỉ lệ với khung, nằm chính giữa ảnh.
25
+ */
26
+ export const computeCenterCrop = (dispW, dispH, aspect) => {
27
+ let width;
28
+ let height;
29
+ if (dispW / dispH > aspect) {
30
+ // Ảnh rộng hơn khung -> giới hạn theo chiều cao
31
+ height = dispH;
32
+ width = Math.round(dispH * aspect);
33
+ } else {
34
+ // Ảnh cao/hẹp hơn khung -> giới hạn theo chiều rộng
35
+ width = dispW;
36
+ height = Math.round(dispW / aspect);
37
+ }
38
+ return {
39
+ originX: Math.max(0, Math.round((dispW - width) / 2)),
40
+ originY: Math.max(0, Math.round((dispH - height) / 2)),
41
+ width,
42
+ height,
43
+ };
44
+ };
45
+
46
+ /**
47
+ * Cắt ảnh chụp cho vừa đúng khung preview (theo tỉ lệ `aspect`). Làm việc hoàn
48
+ * toàn trong hệ toạ độ ảnh đã dựng đứng (upright):
49
+ * - Lấy kích thước hiển thị từ photo.orientation (không dùng Image.getSize vì
50
+ * trả về khác nhau giữa iOS/Android tuỳ EXIF).
51
+ * - Chèn action `resize` để "bung" EXIF orientation về upright: bắt buộc cho
52
+ * iOS (thư viện crop trên buffer gốc chưa xoay), là no-op trên Android
53
+ * (Fresco đã tự xoay khi decode). Sau đó crop trong cùng hệ toạ độ upright.
54
+ * Trả về uri ảnh đã cắt; nếu lỗi thì trả ảnh gốc để vẫn dùng được.
55
+ */
56
+ export const cropPhotoToAspect = async (photo, aspect) => {
57
+ const uri = 'file://' + photo.path;
58
+ const { width: dispW, height: dispH } = getDisplaySize(photo);
59
+ if (!dispW || !dispH) return uri;
60
+ const crop = computeCenterCrop(dispW, dispH, aspect);
61
+ try {
62
+ const result = await RNImageManipulator.manipulate(
63
+ uri,
64
+ [{ resize: { width: dispW, height: dispH } }, { crop }],
65
+ { compress: 0.9, format: 'jpeg' }
66
+ );
67
+ return result.uri;
68
+ } catch (e) {
69
+ console.log('cropPhotoToAspect error', e);
70
+ return uri;
71
+ }
72
+ };
73
+
74
+ /**
75
+ * Chọn ống kính (ở `position`, mặc định 'back') lấy nét gần nhất để chụp cận
76
+ * (macro): minFocusDistance nhỏ nhất. Ống wide mặc định thường min ~10cm nên
77
+ * đưa giấy tờ lại gần sẽ mất nét; ống ultra-wide/macro lấy nét được ở vài cm.
78
+ * Khi bằng nhau thì ưu tiên device gộp nhiều ống (đa cam ảo) để chất lượng tốt
79
+ * hơn và tự chuyển sang macro khi lại gần.
80
+ */
81
+ export const pickClosestFocusDevice = (devices, position = 'back') => {
82
+ const list = (devices ?? []).filter((d) => d.position === position);
83
+ if (list.length === 0) return undefined;
84
+ const minFocus = (d) =>
85
+ d.minFocusDistance > 0 ? d.minFocusDistance : Number.MAX_SAFE_INTEGER;
86
+ return list.reduce((best, d) => {
87
+ if (minFocus(d) < minFocus(best)) return d;
88
+ if (
89
+ minFocus(d) === minFocus(best) &&
90
+ d.physicalDevices.length > best.physicalDevices.length
91
+ ) {
92
+ return d;
93
+ }
94
+ return best;
95
+ });
96
+ };