@unif/react-native-camera 1.2.5 → 2.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 (407) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +92 -22
  3. package/lib/module/camera/Camera.js +162 -286
  4. package/lib/module/camera/Camera.js.map +1 -1
  5. package/lib/module/camera/Container.js +209 -49
  6. package/lib/module/camera/Container.js.map +1 -1
  7. package/lib/module/camera/Error.js +23 -18
  8. package/lib/module/camera/Error.js.map +1 -1
  9. package/lib/module/camera/FocusIndicator.js +35 -41
  10. package/lib/module/camera/FocusIndicator.js.map +1 -1
  11. package/lib/module/camera/ModalView.js +28 -21
  12. package/lib/module/camera/ModalView.js.map +1 -1
  13. package/lib/module/camera/NoCamera.js +38 -14
  14. package/lib/module/camera/NoCamera.js.map +1 -1
  15. package/lib/module/camera/NoPermission.js +44 -38
  16. package/lib/module/camera/NoPermission.js.map +1 -1
  17. package/lib/module/camera/capturePhotoHelper.js +24 -0
  18. package/lib/module/camera/capturePhotoHelper.js.map +1 -0
  19. package/lib/module/camera/footer/Footer.js +83 -140
  20. package/lib/module/camera/footer/Footer.js.map +1 -1
  21. package/lib/module/camera/footer/index.js +3 -2
  22. package/lib/module/camera/footer/index.js.map +1 -1
  23. package/lib/module/camera/index.js +11 -13
  24. package/lib/module/camera/index.js.map +1 -1
  25. package/lib/module/camera/preview/PreView.js +36 -93
  26. package/lib/module/camera/preview/PreView.js.map +1 -1
  27. package/lib/module/camera/preview/PreViewContainer.js +28 -29
  28. package/lib/module/camera/preview/PreViewContainer.js.map +1 -1
  29. package/lib/module/camera/preview/PreviewFooter.js +30 -21
  30. package/lib/module/camera/preview/PreviewFooter.js.map +1 -1
  31. package/lib/module/camera/preview/SinglePre.js +28 -60
  32. package/lib/module/camera/preview/SinglePre.js.map +1 -1
  33. package/lib/module/camera/preview/index.js +6 -12
  34. package/lib/module/camera/preview/index.js.map +1 -1
  35. package/lib/module/camera/setup/SetUp.js +67 -189
  36. package/lib/module/camera/setup/SetUp.js.map +1 -1
  37. package/lib/module/camera/setup/index.js +3 -2
  38. package/lib/module/camera/setup/index.js.map +1 -1
  39. package/lib/module/components/Carousel/Carousel.js +33 -40
  40. package/lib/module/components/Carousel/Carousel.js.map +1 -1
  41. package/lib/module/components/Carousel/SlideItem.js +22 -70
  42. package/lib/module/components/Carousel/SlideItem.js.map +1 -1
  43. package/lib/module/components/Carousel/index.js +4 -11
  44. package/lib/module/components/Carousel/index.js.map +1 -1
  45. package/lib/module/components/Loading.js +15 -61
  46. package/lib/module/components/Loading.js.map +1 -1
  47. package/lib/module/components/PreviewThumbnail.js +36 -33
  48. package/lib/module/components/PreviewThumbnail.js.map +1 -1
  49. package/lib/module/components/index.js +5 -8
  50. package/lib/module/components/index.js.map +1 -1
  51. package/lib/module/hooks/index.js +5 -11
  52. package/lib/module/hooks/index.js.map +1 -1
  53. package/lib/module/hooks/useCamera.js +44 -0
  54. package/lib/module/hooks/useCamera.js.map +1 -0
  55. package/lib/module/hooks/useConfirm.js +13 -49
  56. package/lib/module/hooks/useConfirm.js.map +1 -1
  57. package/lib/module/hooks/useCreation.js +18 -0
  58. package/lib/module/hooks/useCreation.js.map +1 -0
  59. package/lib/module/index.js +4 -24
  60. package/lib/module/index.js.map +1 -1
  61. package/lib/module/package.json +1 -0
  62. package/lib/module/utils/depsAreSame.js +7 -4
  63. package/lib/module/utils/depsAreSame.js.map +1 -1
  64. package/lib/module/utils/index.js +6 -14
  65. package/lib/module/utils/index.js.map +1 -1
  66. package/lib/module/utils/interface.js +1 -21
  67. package/lib/module/utils/interface.js.map +1 -1
  68. package/lib/module/utils/px-to-dp.js +6 -10
  69. package/lib/module/utils/px-to-dp.js.map +1 -1
  70. package/lib/module/utils/util.js +16 -40
  71. package/lib/module/utils/util.js.map +1 -1
  72. package/lib/typescript/jest.setup.d.ts +1 -0
  73. package/lib/typescript/jest.setup.d.ts.map +1 -0
  74. package/lib/typescript/package.json +1 -0
  75. package/lib/typescript/src/camera/Camera.d.ts +18 -10
  76. package/lib/typescript/src/camera/Camera.d.ts.map +1 -1
  77. package/lib/typescript/src/camera/Container.d.ts +7 -5
  78. package/lib/typescript/src/camera/Container.d.ts.map +1 -1
  79. package/lib/typescript/src/camera/Error.d.ts +3 -7
  80. package/lib/typescript/src/camera/Error.d.ts.map +1 -1
  81. package/lib/typescript/src/camera/FocusIndicator.d.ts +7 -7
  82. package/lib/typescript/src/camera/FocusIndicator.d.ts.map +1 -1
  83. package/lib/typescript/src/camera/ModalView.d.ts +7 -4
  84. package/lib/typescript/src/camera/ModalView.d.ts.map +1 -1
  85. package/lib/typescript/src/camera/NoCamera.d.ts +5 -3
  86. package/lib/typescript/src/camera/NoCamera.d.ts.map +1 -1
  87. package/lib/typescript/src/camera/NoPermission.d.ts +6 -3
  88. package/lib/typescript/src/camera/NoPermission.d.ts.map +1 -1
  89. package/lib/typescript/src/camera/capturePhotoHelper.d.ts +16 -0
  90. package/lib/typescript/src/camera/capturePhotoHelper.d.ts.map +1 -0
  91. package/lib/typescript/src/camera/footer/Footer.d.ts +13 -15
  92. package/lib/typescript/src/camera/footer/Footer.d.ts.map +1 -1
  93. package/lib/typescript/src/camera/footer/index.d.ts +1 -2
  94. package/lib/typescript/src/camera/footer/index.d.ts.map +1 -1
  95. package/lib/typescript/src/camera/index.d.ts +9 -5
  96. package/lib/typescript/src/camera/index.d.ts.map +1 -1
  97. package/lib/typescript/src/camera/preview/PreView.d.ts +6 -9
  98. package/lib/typescript/src/camera/preview/PreView.d.ts.map +1 -1
  99. package/lib/typescript/src/camera/preview/PreViewContainer.d.ts +8 -5
  100. package/lib/typescript/src/camera/preview/PreViewContainer.d.ts.map +1 -1
  101. package/lib/typescript/src/camera/preview/PreviewFooter.d.ts +6 -6
  102. package/lib/typescript/src/camera/preview/PreviewFooter.d.ts.map +1 -1
  103. package/lib/typescript/src/camera/preview/SinglePre.d.ts +5 -28
  104. package/lib/typescript/src/camera/preview/SinglePre.d.ts.map +1 -1
  105. package/lib/typescript/src/camera/preview/index.d.ts +4 -4
  106. package/lib/typescript/src/camera/preview/index.d.ts.map +1 -1
  107. package/lib/typescript/src/camera/setup/SetUp.d.ts +12 -11
  108. package/lib/typescript/src/camera/setup/SetUp.d.ts.map +1 -1
  109. package/lib/typescript/src/camera/setup/index.d.ts +1 -2
  110. package/lib/typescript/src/camera/setup/index.d.ts.map +1 -1
  111. package/lib/typescript/src/components/Carousel/Carousel.d.ts +6 -8
  112. package/lib/typescript/src/components/Carousel/Carousel.d.ts.map +1 -1
  113. package/lib/typescript/src/components/Carousel/SlideItem.d.ts +4 -12
  114. package/lib/typescript/src/components/Carousel/SlideItem.d.ts.map +1 -1
  115. package/lib/typescript/src/components/Carousel/index.d.ts +2 -3
  116. package/lib/typescript/src/components/Carousel/index.d.ts.map +1 -1
  117. package/lib/typescript/src/components/Loading.d.ts +1 -3
  118. package/lib/typescript/src/components/Loading.d.ts.map +1 -1
  119. package/lib/typescript/src/components/PreviewThumbnail.d.ts +7 -8
  120. package/lib/typescript/src/components/PreviewThumbnail.d.ts.map +1 -1
  121. package/lib/typescript/src/components/index.d.ts +2 -7
  122. package/lib/typescript/src/components/index.d.ts.map +1 -1
  123. package/lib/typescript/src/hooks/index.d.ts +3 -3
  124. package/lib/typescript/src/hooks/index.d.ts.map +1 -1
  125. package/lib/typescript/src/hooks/useCamera.d.ts +4 -0
  126. package/lib/typescript/src/hooks/useCamera.d.ts.map +1 -0
  127. package/lib/typescript/src/hooks/useConfirm.d.ts +1 -5
  128. package/lib/typescript/src/hooks/useConfirm.d.ts.map +1 -1
  129. package/lib/typescript/src/hooks/useCreation.d.ts +2 -0
  130. package/lib/typescript/src/hooks/useCreation.d.ts.map +1 -0
  131. package/lib/typescript/src/index.d.ts +3 -4
  132. package/lib/typescript/src/index.d.ts.map +1 -1
  133. package/lib/typescript/src/utils/depsAreSame.d.ts +1 -2
  134. package/lib/typescript/src/utils/depsAreSame.d.ts.map +1 -1
  135. package/lib/typescript/src/utils/index.d.ts +2 -4
  136. package/lib/typescript/src/utils/index.d.ts.map +1 -1
  137. package/lib/typescript/src/utils/interface.d.ts +30 -70
  138. package/lib/typescript/src/utils/interface.d.ts.map +1 -1
  139. package/lib/typescript/src/utils/px-to-dp.d.ts +1 -3
  140. package/lib/typescript/src/utils/px-to-dp.d.ts.map +1 -1
  141. package/lib/typescript/src/utils/util.d.ts +8 -9
  142. package/lib/typescript/src/utils/util.d.ts.map +1 -1
  143. package/package.json +120 -107
  144. package/src/camera/Camera.tsx +207 -334
  145. package/src/camera/Container.tsx +224 -50
  146. package/src/camera/Error.tsx +22 -23
  147. package/src/camera/FocusIndicator.tsx +36 -46
  148. package/src/camera/ModalView.tsx +26 -24
  149. package/src/camera/NoCamera.tsx +37 -14
  150. package/src/camera/NoPermission.tsx +45 -37
  151. package/src/camera/capturePhotoHelper.ts +37 -0
  152. package/src/camera/footer/Footer.tsx +104 -195
  153. package/src/camera/footer/index.tsx +1 -2
  154. package/src/camera/index.tsx +12 -13
  155. package/src/camera/preview/PreView.tsx +22 -103
  156. package/src/camera/preview/PreViewContainer.tsx +23 -27
  157. package/src/camera/preview/PreviewFooter.tsx +28 -22
  158. package/src/camera/preview/SinglePre.tsx +23 -68
  159. package/src/camera/preview/index.tsx +4 -13
  160. package/src/camera/setup/SetUp.tsx +80 -217
  161. package/src/camera/setup/index.tsx +1 -3
  162. package/src/components/Carousel/Carousel.tsx +22 -42
  163. package/src/components/Carousel/SlideItem.tsx +12 -87
  164. package/src/components/Carousel/index.tsx +2 -13
  165. package/src/components/Loading.tsx +7 -69
  166. package/src/components/PreviewThumbnail.tsx +38 -33
  167. package/src/components/index.tsx +2 -7
  168. package/src/hooks/index.ts +3 -12
  169. package/src/hooks/useCamera.tsx +42 -0
  170. package/src/hooks/useConfirm.tsx +10 -57
  171. package/src/hooks/useCreation.ts +26 -0
  172. package/src/index.tsx +3 -37
  173. package/src/utils/depsAreSame.ts +7 -8
  174. package/src/utils/index.ts +2 -12
  175. package/src/utils/interface.ts +26 -87
  176. package/src/utils/px-to-dp.tsx +5 -9
  177. package/src/utils/util.ts +17 -42
  178. package/UnifRNCamera.podspec +0 -41
  179. package/android/CMakeLists.txt +0 -15
  180. package/android/build.gradle +0 -124
  181. package/android/cpp-adapter.cpp +0 -8
  182. package/android/gradle.properties +0 -5
  183. package/android/src/main/AndroidManifest.xml +0 -3
  184. package/android/src/main/AndroidManifestNew.xml +0 -2
  185. package/android/src/main/java/com/unif/reactnativecamera/ReactNativeCameraModule.java +0 -34
  186. package/android/src/main/java/com/unif/reactnativecamera/ReactNativeCameraPackage.java +0 -45
  187. package/android/src/newarch/ReactNativeCameraSpec.java +0 -9
  188. package/android/src/oldarch/ReactNativeCameraSpec.java +0 -13
  189. package/cpp/unif-react-native-camera.cpp +0 -7
  190. package/cpp/unif-react-native-camera.h +0 -8
  191. package/ios/ReactNativeCamera.h +0 -15
  192. package/ios/ReactNativeCamera.mm +0 -51
  193. package/lib/commonjs/NativeReactNativeCamera.js +0 -17
  194. package/lib/commonjs/NativeReactNativeCamera.js.map +0 -1
  195. package/lib/commonjs/assets/close.png +0 -0
  196. package/lib/commonjs/assets/home/record.png +0 -0
  197. package/lib/commonjs/assets/home/take.png +0 -0
  198. package/lib/commonjs/assets/preview/back.png +0 -0
  199. package/lib/commonjs/assets/preview/del.png +0 -0
  200. package/lib/commonjs/assets/preview/rotate.png +0 -0
  201. package/lib/commonjs/assets/preview/save.png +0 -0
  202. package/lib/commonjs/assets/tools/auto.png +0 -0
  203. package/lib/commonjs/assets/tools/defaultEye.png +0 -0
  204. package/lib/commonjs/assets/tools/enlarge.png +0 -0
  205. package/lib/commonjs/assets/tools/fishEye.png +0 -0
  206. package/lib/commonjs/assets/tools/narrow.png +0 -0
  207. package/lib/commonjs/assets/tools/off.png +0 -0
  208. package/lib/commonjs/assets/tools/on.png +0 -0
  209. package/lib/commonjs/assets/tools/volumeOff.png +0 -0
  210. package/lib/commonjs/assets/tools/volumeOn.png +0 -0
  211. package/lib/commonjs/camera/Camera.js +0 -318
  212. package/lib/commonjs/camera/Camera.js.map +0 -1
  213. package/lib/commonjs/camera/Container.js +0 -64
  214. package/lib/commonjs/camera/Container.js.map +0 -1
  215. package/lib/commonjs/camera/Error.js +0 -30
  216. package/lib/commonjs/camera/Error.js.map +0 -1
  217. package/lib/commonjs/camera/FocusIndicator.js +0 -64
  218. package/lib/commonjs/camera/FocusIndicator.js.map +0 -1
  219. package/lib/commonjs/camera/ModalView.js +0 -37
  220. package/lib/commonjs/camera/ModalView.js.map +0 -1
  221. package/lib/commonjs/camera/NoCamera.js +0 -23
  222. package/lib/commonjs/camera/NoCamera.js.map +0 -1
  223. package/lib/commonjs/camera/NoPermission.js +0 -50
  224. package/lib/commonjs/camera/NoPermission.js.map +0 -1
  225. package/lib/commonjs/camera/footer/Footer.js +0 -159
  226. package/lib/commonjs/camera/footer/Footer.js.map +0 -1
  227. package/lib/commonjs/camera/footer/index.js +0 -14
  228. package/lib/commonjs/camera/footer/index.js.map +0 -1
  229. package/lib/commonjs/camera/index.js +0 -35
  230. package/lib/commonjs/camera/index.js.map +0 -1
  231. package/lib/commonjs/camera/preview/PreView.js +0 -109
  232. package/lib/commonjs/camera/preview/PreView.js.map +0 -1
  233. package/lib/commonjs/camera/preview/PreViewContainer.js +0 -42
  234. package/lib/commonjs/camera/preview/PreViewContainer.js.map +0 -1
  235. package/lib/commonjs/camera/preview/PreviewFooter.js +0 -35
  236. package/lib/commonjs/camera/preview/PreviewFooter.js.map +0 -1
  237. package/lib/commonjs/camera/preview/SinglePre.js +0 -72
  238. package/lib/commonjs/camera/preview/SinglePre.js.map +0 -1
  239. package/lib/commonjs/camera/preview/index.js +0 -28
  240. package/lib/commonjs/camera/preview/index.js.map +0 -1
  241. package/lib/commonjs/camera/setup/SetUp.js +0 -205
  242. package/lib/commonjs/camera/setup/SetUp.js.map +0 -1
  243. package/lib/commonjs/camera/setup/index.js +0 -14
  244. package/lib/commonjs/camera/setup/index.js.map +0 -1
  245. package/lib/commonjs/camera/watermark/Render.js +0 -110
  246. package/lib/commonjs/camera/watermark/Render.js.map +0 -1
  247. package/lib/commonjs/camera/watermark/ViewShotWatermark.js +0 -143
  248. package/lib/commonjs/camera/watermark/ViewShotWatermark.js.map +0 -1
  249. package/lib/commonjs/camera/watermark/index.js +0 -21
  250. package/lib/commonjs/camera/watermark/index.js.map +0 -1
  251. package/lib/commonjs/components/Back.js +0 -48
  252. package/lib/commonjs/components/Back.js.map +0 -1
  253. package/lib/commonjs/components/Carousel/Carousel.js +0 -51
  254. package/lib/commonjs/components/Carousel/Carousel.js.map +0 -1
  255. package/lib/commonjs/components/Carousel/SlideItem.js +0 -84
  256. package/lib/commonjs/components/Carousel/SlideItem.js.map +0 -1
  257. package/lib/commonjs/components/Carousel/index.js +0 -21
  258. package/lib/commonjs/components/Carousel/index.js.map +0 -1
  259. package/lib/commonjs/components/Delete.js +0 -36
  260. package/lib/commonjs/components/Delete.js.map +0 -1
  261. package/lib/commonjs/components/Loading.js +0 -75
  262. package/lib/commonjs/components/Loading.js.map +0 -1
  263. package/lib/commonjs/components/Modal/Confirm.js +0 -121
  264. package/lib/commonjs/components/Modal/Confirm.js.map +0 -1
  265. package/lib/commonjs/components/Modal/index.js +0 -14
  266. package/lib/commonjs/components/Modal/index.js.map +0 -1
  267. package/lib/commonjs/components/PreviewThumbnail.js +0 -44
  268. package/lib/commonjs/components/PreviewThumbnail.js.map +0 -1
  269. package/lib/commonjs/components/Rotate.js +0 -32
  270. package/lib/commonjs/components/Rotate.js.map +0 -1
  271. package/lib/commonjs/components/Save.js +0 -48
  272. package/lib/commonjs/components/Save.js.map +0 -1
  273. package/lib/commonjs/components/index.js +0 -73
  274. package/lib/commonjs/components/index.js.map +0 -1
  275. package/lib/commonjs/hooks/index.js +0 -21
  276. package/lib/commonjs/hooks/index.js.map +0 -1
  277. package/lib/commonjs/hooks/useCamera.tsx/index.js +0 -90
  278. package/lib/commonjs/hooks/useCamera.tsx/index.js.map +0 -1
  279. package/lib/commonjs/hooks/useConfirm.js +0 -61
  280. package/lib/commonjs/hooks/useConfirm.js.map +0 -1
  281. package/lib/commonjs/hooks/useCreation/index.js +0 -34
  282. package/lib/commonjs/hooks/useCreation/index.js.map +0 -1
  283. package/lib/commonjs/index.js +0 -39
  284. package/lib/commonjs/index.js.map +0 -1
  285. package/lib/commonjs/utils/common.js +0 -69
  286. package/lib/commonjs/utils/common.js.map +0 -1
  287. package/lib/commonjs/utils/depsAreSame.js +0 -14
  288. package/lib/commonjs/utils/depsAreSame.js.map +0 -1
  289. package/lib/commonjs/utils/index.js +0 -72
  290. package/lib/commonjs/utils/index.js.map +0 -1
  291. package/lib/commonjs/utils/interface.js +0 -24
  292. package/lib/commonjs/utils/interface.js.map +0 -1
  293. package/lib/commonjs/utils/px-to-dp.js +0 -21
  294. package/lib/commonjs/utils/px-to-dp.js.map +0 -1
  295. package/lib/commonjs/utils/render-item.js +0 -40
  296. package/lib/commonjs/utils/render-item.js.map +0 -1
  297. package/lib/commonjs/utils/util.js +0 -53
  298. package/lib/commonjs/utils/util.js.map +0 -1
  299. package/lib/commonjs/utils/watermark.js +0 -49
  300. package/lib/commonjs/utils/watermark.js.map +0 -1
  301. package/lib/module/NativeReactNativeCamera.js +0 -12
  302. package/lib/module/NativeReactNativeCamera.js.map +0 -1
  303. package/lib/module/assets/close.png +0 -0
  304. package/lib/module/assets/home/record.png +0 -0
  305. package/lib/module/assets/home/take.png +0 -0
  306. package/lib/module/assets/preview/back.png +0 -0
  307. package/lib/module/assets/preview/del.png +0 -0
  308. package/lib/module/assets/preview/rotate.png +0 -0
  309. package/lib/module/assets/preview/save.png +0 -0
  310. package/lib/module/assets/tools/auto.png +0 -0
  311. package/lib/module/assets/tools/defaultEye.png +0 -0
  312. package/lib/module/assets/tools/enlarge.png +0 -0
  313. package/lib/module/assets/tools/fishEye.png +0 -0
  314. package/lib/module/assets/tools/narrow.png +0 -0
  315. package/lib/module/assets/tools/off.png +0 -0
  316. package/lib/module/assets/tools/on.png +0 -0
  317. package/lib/module/assets/tools/volumeOff.png +0 -0
  318. package/lib/module/assets/tools/volumeOn.png +0 -0
  319. package/lib/module/camera/watermark/Render.js +0 -102
  320. package/lib/module/camera/watermark/Render.js.map +0 -1
  321. package/lib/module/camera/watermark/ViewShotWatermark.js +0 -133
  322. package/lib/module/camera/watermark/ViewShotWatermark.js.map +0 -1
  323. package/lib/module/camera/watermark/index.js +0 -13
  324. package/lib/module/camera/watermark/index.js.map +0 -1
  325. package/lib/module/components/Back.js +0 -40
  326. package/lib/module/components/Back.js.map +0 -1
  327. package/lib/module/components/Delete.js +0 -28
  328. package/lib/module/components/Delete.js.map +0 -1
  329. package/lib/module/components/Modal/Confirm.js +0 -111
  330. package/lib/module/components/Modal/Confirm.js.map +0 -1
  331. package/lib/module/components/Modal/index.js +0 -3
  332. package/lib/module/components/Modal/index.js.map +0 -1
  333. package/lib/module/components/Rotate.js +0 -24
  334. package/lib/module/components/Rotate.js.map +0 -1
  335. package/lib/module/components/Save.js +0 -40
  336. package/lib/module/components/Save.js.map +0 -1
  337. package/lib/module/hooks/useCamera.tsx/index.js +0 -81
  338. package/lib/module/hooks/useCamera.tsx/index.js.map +0 -1
  339. package/lib/module/hooks/useCreation/index.js +0 -27
  340. package/lib/module/hooks/useCreation/index.js.map +0 -1
  341. package/lib/module/utils/common.js +0 -62
  342. package/lib/module/utils/common.js.map +0 -1
  343. package/lib/module/utils/render-item.js +0 -32
  344. package/lib/module/utils/render-item.js.map +0 -1
  345. package/lib/module/utils/watermark.js +0 -39
  346. package/lib/module/utils/watermark.js.map +0 -1
  347. package/lib/typescript/src/NativeReactNativeCamera.d.ts +0 -6
  348. package/lib/typescript/src/NativeReactNativeCamera.d.ts.map +0 -1
  349. package/lib/typescript/src/camera/watermark/Render.d.ts +0 -26
  350. package/lib/typescript/src/camera/watermark/Render.d.ts.map +0 -1
  351. package/lib/typescript/src/camera/watermark/ViewShotWatermark.d.ts +0 -41
  352. package/lib/typescript/src/camera/watermark/ViewShotWatermark.d.ts.map +0 -1
  353. package/lib/typescript/src/camera/watermark/index.d.ts +0 -4
  354. package/lib/typescript/src/camera/watermark/index.d.ts.map +0 -1
  355. package/lib/typescript/src/components/Back.d.ts +0 -20
  356. package/lib/typescript/src/components/Back.d.ts.map +0 -1
  357. package/lib/typescript/src/components/Delete.d.ts +0 -7
  358. package/lib/typescript/src/components/Delete.d.ts.map +0 -1
  359. package/lib/typescript/src/components/Modal/Confirm.d.ts +0 -9
  360. package/lib/typescript/src/components/Modal/Confirm.d.ts.map +0 -1
  361. package/lib/typescript/src/components/Modal/index.d.ts +0 -3
  362. package/lib/typescript/src/components/Modal/index.d.ts.map +0 -1
  363. package/lib/typescript/src/components/Rotate.d.ts +0 -9
  364. package/lib/typescript/src/components/Rotate.d.ts.map +0 -1
  365. package/lib/typescript/src/components/Save.d.ts +0 -20
  366. package/lib/typescript/src/components/Save.d.ts.map +0 -1
  367. package/lib/typescript/src/hooks/useCamera.tsx/index.d.ts +0 -5
  368. package/lib/typescript/src/hooks/useCamera.tsx/index.d.ts.map +0 -1
  369. package/lib/typescript/src/hooks/useCreation/index.d.ts +0 -3
  370. package/lib/typescript/src/hooks/useCreation/index.d.ts.map +0 -1
  371. package/lib/typescript/src/utils/common.d.ts +0 -14
  372. package/lib/typescript/src/utils/common.d.ts.map +0 -1
  373. package/lib/typescript/src/utils/render-item.d.ts +0 -10
  374. package/lib/typescript/src/utils/render-item.d.ts.map +0 -1
  375. package/lib/typescript/src/utils/watermark.d.ts +0 -11
  376. package/lib/typescript/src/utils/watermark.d.ts.map +0 -1
  377. package/src/NativeReactNativeCamera.ts +0 -15
  378. package/src/assets/close.png +0 -0
  379. package/src/assets/home/record.png +0 -0
  380. package/src/assets/home/take.png +0 -0
  381. package/src/assets/preview/back.png +0 -0
  382. package/src/assets/preview/del.png +0 -0
  383. package/src/assets/preview/rotate.png +0 -0
  384. package/src/assets/preview/save.png +0 -0
  385. package/src/assets/tools/auto.png +0 -0
  386. package/src/assets/tools/defaultEye.png +0 -0
  387. package/src/assets/tools/enlarge.png +0 -0
  388. package/src/assets/tools/fishEye.png +0 -0
  389. package/src/assets/tools/narrow.png +0 -0
  390. package/src/assets/tools/off.png +0 -0
  391. package/src/assets/tools/on.png +0 -0
  392. package/src/assets/tools/volumeOff.png +0 -0
  393. package/src/assets/tools/volumeOn.png +0 -0
  394. package/src/camera/watermark/Render.tsx +0 -128
  395. package/src/camera/watermark/ViewShotWatermark.tsx +0 -134
  396. package/src/camera/watermark/index.tsx +0 -12
  397. package/src/components/Back.tsx +0 -37
  398. package/src/components/Delete.tsx +0 -30
  399. package/src/components/Modal/Confirm.tsx +0 -116
  400. package/src/components/Modal/index.tsx +0 -3
  401. package/src/components/Rotate.tsx +0 -32
  402. package/src/components/Save.tsx +0 -37
  403. package/src/hooks/useCamera.tsx/index.tsx +0 -95
  404. package/src/hooks/useCreation/index.ts +0 -25
  405. package/src/utils/common.ts +0 -67
  406. package/src/utils/render-item.tsx +0 -39
  407. package/src/utils/watermark.ts +0 -55
@@ -1,364 +1,237 @@
1
- /*
2
- * @Author: 刘利军
3
- * @Date: 2024-12-02 13:48:40
4
- * @LastEditors: 刘利军
5
- * @LastEditTime: 2025-01-17 08:44:43
6
- * @Description:
7
- * @PageName:
8
- */
9
-
10
- import { StyleSheet, Pressable } from 'react-native';
11
- import React, { useCallback, useRef, useState, useEffect } from 'react';
12
1
  import {
13
- CameraRuntimeError,
14
- Camera as VisionCamera,
15
- useCameraDevice,
16
- useCameraFormat,
17
- } from 'react-native-vision-camera';
18
- import { SafeAreaProvider } from 'react-native-safe-area-context';
19
- import NoCamera from './NoCamera';
20
- import FocusIndicator from './FocusIndicator';
21
-
2
+ forwardRef,
3
+ useCallback,
4
+ useImperativeHandle,
5
+ useRef,
6
+ useState,
7
+ } from 'react';
8
+ import { StyleSheet, View } from 'react-native';
22
9
  import {
23
- type CameraBack,
24
- type CameraMode,
10
+ Camera as VisionCamera,
11
+ useMicrophonePermission,
12
+ usePhotoOutput,
13
+ useVideoOutput,
14
+ type CameraRef,
15
+ type CameraDevice,
25
16
  type CameraProps,
26
- type CameraType,
27
- type CustomPhotoFile,
28
- type FlashMode,
29
- type Resolution,
17
+ type FocusOptions,
18
+ type Recorder,
19
+ } from 'react-native-vision-camera';
20
+ import { runOnJS, useSharedValue } from 'react-native-reanimated';
21
+ import type { SharedValue } from 'react-native-reanimated';
22
+ import { Gesture, GestureDetector } from 'react-native-gesture-handler';
23
+ import type {
24
+ CameraMode,
25
+ CustomPhotoFile,
26
+ PhotoQuality,
27
+ Point,
30
28
  } from '../utils';
31
- import { Footer } from './footer';
32
- import { SetUp } from './setup';
33
- import { PreView, PreViewContainer, SinglePre } from './preview';
34
- import { GestureHandlerRootView } from 'react-native-gesture-handler';
35
- import { useConfirm } from '../hooks';
36
- import { ViewShotWatermark, WaterMarkRender } from './watermark';
37
- import Error from './Error';
38
-
39
- export const PhotoAspectRatio: { [key: number]: number } = {
40
- 4: 4 / 3,
41
- 16: 16 / 9,
42
- };
43
-
44
- let enableShutterSound = false;
45
- let flash: FlashMode = 'off';
46
- const Camera: React.FC<{
47
- data: CameraProps;
48
- back: () => void;
49
- onChange: (data: CameraBack) => void;
50
- }> = ({ data, back, onChange }) => {
51
- const { cameraMode, dataRetainedMode } = data;
29
+ import { buildPhotoFile } from '../utils';
30
+ import { capturePhotoToFile } from './capturePhotoHelper';
31
+ import { FocusIndicator } from './FocusIndicator';
32
+ import type { AspectRatio, FlashMode } from './setup';
52
33
 
53
- const [position, setPosition] = useState<CameraType>(
54
- cameraMode?.[0]?.type || 'back'
55
- );
56
- const [preVis, setPreVis] = useState(false);
34
+ const NEUTRAL_ZOOM = 1;
57
35
 
58
- const [photoResolution, setPhotoResolution] = useState<
59
- Resolution | undefined
60
- >(cameraMode?.[0]?.photoResolution);
36
+ export type CameraHandle = {
37
+ capture: () => Promise<CustomPhotoFile | null>;
38
+ startVideo: () => Promise<void>;
39
+ stopVideo: () => Promise<CustomPhotoFile | null>;
40
+ };
61
41
 
62
- const [videoResolution, setVideoResolution] = useState<
63
- Resolution | undefined
64
- >(cameraMode?.[0]?.videoResolution);
42
+ type Props = {
43
+ device: CameraDevice;
44
+ currentMode: CameraMode;
45
+ isActive?: boolean;
46
+ flash?: FlashMode;
47
+ aspectRatio?: AspectRatio;
48
+ zoomShared?: SharedValue<number>;
49
+ };
65
50
 
66
- const [watermarkUriVis, setWatermarkUriVis] = useState(false);
67
- const device = useCameraDevice(position, {
68
- physicalDevices: [
69
- 'ultra-wide-angle-camera',
70
- 'wide-angle-camera',
71
- 'telephoto-camera',
72
- ],
51
+ export const Camera = forwardRef<CameraHandle, Props>(function Camera(
52
+ { device, currentMode, isActive = true, flash, aspectRatio, zoomShared },
53
+ ref
54
+ ) {
55
+ const cameraRef = useRef<CameraRef>(null);
56
+
57
+ const targetResolution =
58
+ (aspectRatio ?? '4:3') === '4:3'
59
+ ? { width: 1080, height: 1440 }
60
+ : { width: 1080, height: 1920 };
61
+
62
+ const photoOutput = usePhotoOutput({
63
+ qualityPrioritization: (currentMode.photoQuality ??
64
+ 'speed') as PhotoQuality,
65
+ quality: currentMode.jpegQuality ?? 0.9,
66
+ targetResolution,
73
67
  });
74
- const onError = useCallback((error: CameraRuntimeError) => {
75
- setCameraError(error);
76
- }, []);
77
-
78
- const [aspectRatio, setAspectRatio] = useState<number>(16);
79
- const [resizeMode, setResizeMode] = useState<
80
- 'cover' | 'contain' | undefined
81
- >();
82
-
83
- const [zoom, setZoom] = useState(device?.neutralZoom);
84
- const format = useCameraFormat(device, [
85
- { photoAspectRatio: PhotoAspectRatio[aspectRatio] },
86
- { videoAspectRatio: PhotoAspectRatio[aspectRatio] },
87
- { videoResolution: videoResolution || 'max' },
88
- { photoResolution: photoResolution || 'max' },
89
- ]);
90
- const camera = useRef<VisionCamera>(null);
91
- const [photos, setPhotos] = useState<CustomPhotoFile[]>([]);
92
- const [mode, setMode] = useState(cameraMode?.[0]?.mode as CameraMode);
93
68
 
94
- const { confirmApi, contextHolder } = useConfirm();
95
- const [cameraError, setCameraError] = useState<CameraRuntimeError>();
96
-
97
- // 聚焦点状态
98
- const [focusPoint, setFocusPoint] = useState<{ x: number; y: number } | null>(
99
- null
100
- );
101
-
102
- // 防抖定时器
103
- const focusTimerRef = useRef<NodeJS.Timeout | null>(null);
104
-
105
- // 点击聚焦处理(带防抖)
106
- const handleFocus = useCallback((x: number, y: number) => {
107
- // 清除之前的防抖定时器
108
- if (focusTimerRef.current) {
109
- clearTimeout(focusTimerRef.current);
110
- }
69
+ const videoOutput = useVideoOutput();
70
+ const { hasPermission: hasMic, requestPermission: requestMic } =
71
+ useMicrophonePermission();
72
+
73
+ const activeRecorderRef = useRef<Recorder | null>(null);
74
+ const preparedRecorderRef = useRef<Recorder | null>(null);
75
+ const finishResolverRef = useRef<
76
+ ((file: CustomPhotoFile | null) => void) | null
77
+ >(null);
78
+
79
+ const internalZoom = useSharedValue(NEUTRAL_ZOOM);
80
+ const zoom = zoomShared ?? internalZoom;
81
+ const zoomOffset = useSharedValue(0);
82
+
83
+ const pinchGesture = Gesture.Pinch()
84
+ .onBegin(() => {
85
+ 'worklet';
86
+ zoomOffset.value = zoom.value;
87
+ })
88
+ .onUpdate((e) => {
89
+ 'worklet';
90
+ const z = zoomOffset.value * e.scale;
91
+ zoom.value = Math.min(Math.max(z, device.minZoom), device.maxZoom);
92
+ });
111
93
 
112
- // 更新聚焦指示器位置
113
- setFocusPoint({ x, y });
94
+ const [focusPoint, setFocusPoint] = useState<Point | null>(null);
114
95
 
115
- // 防抖延迟执行聚焦
116
- focusTimerRef.current = setTimeout(async () => {
96
+ const handleFocus = useCallback(
97
+ async (x: number, y: number) => {
98
+ if (!device.supportsFocusMetering) return;
99
+ setFocusPoint({ x, y });
117
100
  try {
118
- await camera.current?.focus({ x, y });
119
- } catch (error) {
120
- // 忽略 focus-canceled 错误
121
- if (
122
- error &&
123
- typeof error === 'object' &&
124
- 'code' in error &&
125
- error.code !== 'capture/focus-canceled'
126
- ) {
127
- console.error('Focus error:', error);
128
- }
101
+ await cameraRef.current?.focusTo({ x, y }, {
102
+ responsiveness: 'snappy',
103
+ adaptiveness: 'continuous',
104
+ autoResetAfter: 3,
105
+ } satisfies FocusOptions);
106
+ } catch (e) {
107
+ console.warn('focusTo failed', e);
129
108
  }
130
- // 延迟清除指示器
131
- setTimeout(() => setFocusPoint(null), 400);
132
- }, 300);
133
- }, []);
109
+ },
110
+ [device.supportsFocusMetering]
111
+ );
134
112
 
135
- useEffect(() => {
136
- return () => {
137
- if (focusTimerRef.current) {
138
- clearTimeout(focusTimerRef.current);
139
- }
140
- };
141
- }, []);
113
+ const tapGesture = Gesture.Tap().onEnd(({ x, y }) => {
114
+ 'worklet';
115
+ runOnJS(handleFocus)(x, y);
116
+ });
142
117
 
143
- if (cameraError) {
144
- return (
145
- <Error data={cameraError} onPress={() => setCameraError(undefined)} />
146
- );
147
- }
148
- if (device == null) {
149
- return <NoCamera />;
150
- }
118
+ const composed = Gesture.Simultaneous(pinchGesture, tapGesture);
119
+
120
+ useImperativeHandle(
121
+ ref,
122
+ () => ({
123
+ capture: async () => {
124
+ try {
125
+ const raw = await capturePhotoToFile(photoOutput, {
126
+ flashMode: flash ?? 'off',
127
+ enableShutterSound: true,
128
+ });
129
+ return buildPhotoFile(
130
+ { path: raw.path, width: raw.width, height: raw.height },
131
+ currentMode.mode
132
+ );
133
+ } catch (e) {
134
+ console.warn('capturePhoto failed', e);
135
+ return null;
136
+ }
137
+ },
151
138
 
152
- const commonBack = () => {
153
- setPreVis(false);
154
- };
155
- const signleBack = () => {
156
- setPhotos([]);
157
- commonBack();
158
- };
139
+ startVideo: async () => {
140
+ if (!hasMic) {
141
+ await requestMic().catch(() => {});
142
+ }
143
+ try {
144
+ let recorder = preparedRecorderRef.current;
145
+ if (recorder == null) {
146
+ recorder = await videoOutput.createRecorder({});
147
+ }
148
+ preparedRecorderRef.current = null;
149
+ if (activeRecorderRef.current != null) return;
150
+ activeRecorderRef.current = recorder;
151
+
152
+ await recorder.startRecording(
153
+ (filePath, _reason) => {
154
+ const file = buildPhotoFile(
155
+ { path: filePath, width: 0, height: 0 },
156
+ 'video',
157
+ true
158
+ );
159
+ activeRecorderRef.current = null;
160
+ finishResolverRef.current?.(file);
161
+ finishResolverRef.current = null;
162
+ },
163
+ (error) => {
164
+ console.warn('recorder error', error);
165
+ activeRecorderRef.current = null;
166
+ finishResolverRef.current?.(null);
167
+ finishResolverRef.current = null;
168
+ },
169
+ () => {},
170
+ () => {}
171
+ );
172
+
173
+ preparedRecorderRef.current = await videoOutput.createRecorder({});
174
+ } catch (e) {
175
+ console.warn('startRecording failed', e);
176
+ activeRecorderRef.current = null;
177
+ }
178
+ },
179
+
180
+ stopVideo: async () => {
181
+ const active = activeRecorderRef.current;
182
+ if (active == null) return null;
183
+ try {
184
+ const durationSec = active.recordedDuration;
185
+ const finishedPromise = new Promise<CustomPhotoFile | null>(
186
+ (resolve) => {
187
+ finishResolverRef.current = (file) => {
188
+ if (file != null && durationSec != null) {
189
+ resolve({ ...file, duration: durationSec });
190
+ } else {
191
+ resolve(file);
192
+ }
193
+ };
194
+ }
195
+ );
196
+ await active.stopRecording();
197
+ return await finishedPromise;
198
+ } catch (e) {
199
+ console.warn('stopRecording failed', e);
200
+ activeRecorderRef.current = null;
201
+ return null;
202
+ }
203
+ },
204
+ }),
205
+ [photoOutput, videoOutput, currentMode.mode, hasMic, requestMic, flash]
206
+ );
159
207
 
160
- const isSingle = () => dataRetainedMode === 'clear' && mode === 'single';
161
- const showPreview = () => {
162
- setPreVis(true);
163
- };
164
- const showVideo = () => cameraMode.some((item) => item.mode === 'video');
208
+ const outputs = currentMode.mode === 'video' ? [videoOutput] : [photoOutput];
165
209
 
166
- const confirm = () => {
167
- onChange({
168
- code: 200,
169
- data: photos.map((item) => ({
170
- cameraMode: item.mode,
171
- id: new Date().getTime().toString(),
172
- cameraType: item.cameraType,
173
- path: item.path,
174
- })),
175
- message: '保存成功',
176
- });
177
- };
178
- const openViewShotWatermark = () => {
179
- setWatermarkUriVis((val) => !val);
180
- };
181
210
  return (
182
- <GestureHandlerRootView>
183
- <SafeAreaProvider>
211
+ <GestureDetector gesture={composed}>
212
+ <View style={StyleSheet.absoluteFill}>
184
213
  <VisionCamera
185
- onError={onError}
186
- zoom={zoom}
187
- preview={true}
188
- ref={camera}
189
- style={styles.camera}
214
+ ref={cameraRef}
215
+ style={StyleSheet.absoluteFill}
190
216
  device={device}
191
- isActive={true}
192
- enableZoomGesture={true}
193
- photoQualityBalance="speed"
194
- photo={true}
195
- video={showVideo()}
196
- audio={showVideo()}
197
- resizeMode={resizeMode}
198
- format={format}
199
- />
200
-
201
- <Pressable
202
- style={styles.cameraOverlay}
203
- onPress={(event) => {
204
- const { locationX, locationY } = event.nativeEvent;
205
- handleFocus(locationX, locationY);
206
- }}
207
- />
208
-
209
- <SetUp
210
- isMultiCam={false}
211
- onChange={(val) => (flash = val)}
212
- onAspectRationChange={setAspectRatio}
213
- onScreenChange={setResizeMode}
214
- onVolumeChange={(val) => (enableShutterSound = val)}
215
- onFishEyeOpen={(val) => {
216
- if (val === 'fishEye') {
217
- setZoom(device.minZoom);
218
- }
219
- if (val === 'default') {
220
- setZoom(device.neutralZoom);
221
- }
222
- }}
223
- />
224
- <Footer
225
- cameraMode={cameraMode}
226
- photos={photos}
227
- backPress={async () => {
228
- if (photos.length > 0) {
229
- const isBack = await confirmApi.open({
230
- text: '返回会清空已拍摄数据,请确认!',
231
- });
232
- if (isBack) {
233
- back();
234
- }
235
- } else {
236
- back();
237
- }
238
- }}
239
- thumbnailPress={showPreview}
240
- onChange={(item) => {
241
- if (dataRetainedMode === 'clear') {
242
- setPhotos([]);
243
- }
244
- setMode(item.mode);
245
- setPhotoResolution(item.photoResolution);
246
- setVideoResolution(item.videoResolution);
247
- }}
248
- takePress={async () => {
249
- const photo = await camera.current?.takePhoto({
250
- flash,
251
- enableShutterSound: enableShutterSound,
252
- });
253
- if (photo) {
254
- setPhotos((p) => [
255
- ...p,
256
- {
257
- ...photo,
258
- frontTime: new Date().getTime(),
259
- mode,
260
- cameraType: position,
261
- },
262
- ]);
263
- }
264
- // 拍照后进行水印
265
- if (data.watermark) {
266
- openViewShotWatermark();
267
- } else {
268
- if (isSingle()) {
269
- showPreview();
270
- }
271
- }
272
- }}
273
- savePress={() => confirm()}
274
- rotatePress={() => {
275
- setPosition((val) => {
276
- if (val === 'back') {
277
- return 'front';
278
- }
279
- return 'back';
280
- });
281
- }}
217
+ isActive={isActive}
218
+ outputs={outputs as CameraProps['outputs']}
219
+ constraints={[{ photoHDR: false }]}
220
+ zoom={zoom}
221
+ torchMode={
222
+ currentMode.mode === 'video' && flash === 'on' ? 'on' : 'off'
223
+ }
224
+ onSubjectAreaChanged={() => cameraRef.current?.resetFocus()}
225
+ nativeID="vision-camera"
282
226
  />
283
-
284
- {watermarkUriVis && (
285
- <ViewShotWatermark
286
- resizeMode={resizeMode}
287
- data={photos.at(-1)}
288
- watermark={data.watermark}
289
- onChange={(value) => {
290
- setPhotos((photosList) => {
291
- return photosList.map((item) => {
292
- if (item.frontTime === value.frontTime) {
293
- return value;
294
- }
295
- return item;
296
- });
297
- });
298
- openViewShotWatermark();
299
- if (isSingle()) {
300
- showPreview();
301
- }
302
- }}
303
- />
304
- )}
305
-
306
- <PreViewContainer visible={preVis}>
307
- {isSingle() ? (
308
- <SinglePre
309
- resizeMode={resizeMode}
310
- uri={photos[0]?.path as string}
311
- onBack={() => signleBack()}
312
- onSave={() => confirm()}
313
- />
314
- ) : (
315
- <PreView
316
- cameraMode={cameraMode}
317
- data={photos}
318
- onBack={() => commonBack()}
319
- onDel={async (snapItem) => {
320
- const isConfirm = await confirmApi.open({
321
- text: '图片删除后无法恢复,请确认!',
322
- });
323
- if (isConfirm) {
324
- setPhotos((photoList) => {
325
- return photoList.filter(
326
- (photo) => photo.path !== snapItem?.path
327
- );
328
- });
329
- return isConfirm;
330
- }
331
- return isConfirm;
332
- }}
333
- />
334
- )}
335
- </PreViewContainer>
336
- {data.watermark && <WaterMarkRender data={data.watermark} />}
337
- {contextHolder}
338
-
339
- {/* 聚焦指示器 */}
340
227
  {focusPoint && (
341
228
  <FocusIndicator
342
229
  key={`${focusPoint.x}-${focusPoint.y}`}
343
- x={focusPoint.x}
344
- y={focusPoint.y}
230
+ point={focusPoint}
231
+ onAnimationEnd={() => setFocusPoint(null)}
345
232
  />
346
233
  )}
347
- </SafeAreaProvider>
348
- </GestureHandlerRootView>
234
+ </View>
235
+ </GestureDetector>
349
236
  );
350
- };
351
-
352
- export default Camera;
353
-
354
- const styles = StyleSheet.create({
355
- camera: { flex: 1, backgroundColor: '#000' },
356
- cameraOverlay: {
357
- position: 'absolute',
358
- top: 0,
359
- left: 0,
360
- right: 0,
361
- bottom: 0,
362
- zIndex: 1,
363
- },
364
237
  });