@unif/react-native-camera 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 (348) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +29 -0
  3. package/UnifRNCamera.podspec +41 -0
  4. package/android/CMakeLists.txt +15 -0
  5. package/android/build.gradle +124 -0
  6. package/android/cpp-adapter.cpp +8 -0
  7. package/android/gradle.properties +5 -0
  8. package/android/src/main/AndroidManifest.xml +3 -0
  9. package/android/src/main/AndroidManifestNew.xml +2 -0
  10. package/android/src/main/java/com/unif/reactnativecamera/ReactNativeCameraModule.java +34 -0
  11. package/android/src/main/java/com/unif/reactnativecamera/ReactNativeCameraPackage.java +45 -0
  12. package/android/src/newarch/ReactNativeCameraSpec.java +9 -0
  13. package/android/src/oldarch/ReactNativeCameraSpec.java +13 -0
  14. package/cpp/unif-react-native-camera.cpp +7 -0
  15. package/cpp/unif-react-native-camera.h +8 -0
  16. package/ios/ReactNativeCamera.h +15 -0
  17. package/ios/ReactNativeCamera.mm +51 -0
  18. package/lib/commonjs/NativeReactNativeCamera.js +17 -0
  19. package/lib/commonjs/NativeReactNativeCamera.js.map +1 -0
  20. package/lib/commonjs/assets/close.png +0 -0
  21. package/lib/commonjs/assets/home/record.png +0 -0
  22. package/lib/commonjs/assets/home/take.png +0 -0
  23. package/lib/commonjs/assets/preview/back.png +0 -0
  24. package/lib/commonjs/assets/preview/del.png +0 -0
  25. package/lib/commonjs/assets/preview/rotate.png +0 -0
  26. package/lib/commonjs/assets/preview/save.png +0 -0
  27. package/lib/commonjs/assets/tools/16_9.png +0 -0
  28. package/lib/commonjs/assets/tools/4_3.png +0 -0
  29. package/lib/commonjs/assets/tools/auto.png +0 -0
  30. package/lib/commonjs/assets/tools/defaultEye.png +0 -0
  31. package/lib/commonjs/assets/tools/enlarge.png +0 -0
  32. package/lib/commonjs/assets/tools/fishEye.png +0 -0
  33. package/lib/commonjs/assets/tools/narrow.png +0 -0
  34. package/lib/commonjs/assets/tools/off.png +0 -0
  35. package/lib/commonjs/assets/tools/on.png +0 -0
  36. package/lib/commonjs/assets/tools/screenRatio.png +0 -0
  37. package/lib/commonjs/assets/tools/volumeOff.png +0 -0
  38. package/lib/commonjs/assets/tools/volumeOn.png +0 -0
  39. package/lib/commonjs/camera/Camera.js +209 -0
  40. package/lib/commonjs/camera/Camera.js.map +1 -0
  41. package/lib/commonjs/camera/Container.js +64 -0
  42. package/lib/commonjs/camera/Container.js.map +1 -0
  43. package/lib/commonjs/camera/ModalView.js +37 -0
  44. package/lib/commonjs/camera/ModalView.js.map +1 -0
  45. package/lib/commonjs/camera/NoCamera.js +23 -0
  46. package/lib/commonjs/camera/NoCamera.js.map +1 -0
  47. package/lib/commonjs/camera/NoPermission.js +50 -0
  48. package/lib/commonjs/camera/NoPermission.js.map +1 -0
  49. package/lib/commonjs/camera/footer/Footer.js +155 -0
  50. package/lib/commonjs/camera/footer/Footer.js.map +1 -0
  51. package/lib/commonjs/camera/footer/index.js +14 -0
  52. package/lib/commonjs/camera/footer/index.js.map +1 -0
  53. package/lib/commonjs/camera/index.js +35 -0
  54. package/lib/commonjs/camera/index.js.map +1 -0
  55. package/lib/commonjs/camera/preview/PreView.js +105 -0
  56. package/lib/commonjs/camera/preview/PreView.js.map +1 -0
  57. package/lib/commonjs/camera/preview/PreViewContainer.js +41 -0
  58. package/lib/commonjs/camera/preview/PreViewContainer.js.map +1 -0
  59. package/lib/commonjs/camera/preview/PreviewFooter.js +35 -0
  60. package/lib/commonjs/camera/preview/PreviewFooter.js.map +1 -0
  61. package/lib/commonjs/camera/preview/SinglePre.js +69 -0
  62. package/lib/commonjs/camera/preview/SinglePre.js.map +1 -0
  63. package/lib/commonjs/camera/preview/index.js +28 -0
  64. package/lib/commonjs/camera/preview/index.js.map +1 -0
  65. package/lib/commonjs/camera/setup/SetUp.js +245 -0
  66. package/lib/commonjs/camera/setup/SetUp.js.map +1 -0
  67. package/lib/commonjs/camera/setup/index.js +14 -0
  68. package/lib/commonjs/camera/setup/index.js.map +1 -0
  69. package/lib/commonjs/components/Back.js +48 -0
  70. package/lib/commonjs/components/Back.js.map +1 -0
  71. package/lib/commonjs/components/Carousel/Carousel.js +51 -0
  72. package/lib/commonjs/components/Carousel/Carousel.js.map +1 -0
  73. package/lib/commonjs/components/Carousel/SlideItem.js +84 -0
  74. package/lib/commonjs/components/Carousel/SlideItem.js.map +1 -0
  75. package/lib/commonjs/components/Carousel/index.js +21 -0
  76. package/lib/commonjs/components/Carousel/index.js.map +1 -0
  77. package/lib/commonjs/components/Delete.js +36 -0
  78. package/lib/commonjs/components/Delete.js.map +1 -0
  79. package/lib/commonjs/components/Loading.js +75 -0
  80. package/lib/commonjs/components/Loading.js.map +1 -0
  81. package/lib/commonjs/components/Modal/Confirm.js +120 -0
  82. package/lib/commonjs/components/Modal/Confirm.js.map +1 -0
  83. package/lib/commonjs/components/Modal/index.js +14 -0
  84. package/lib/commonjs/components/Modal/index.js.map +1 -0
  85. package/lib/commonjs/components/PreviewThumbnail.js +44 -0
  86. package/lib/commonjs/components/PreviewThumbnail.js.map +1 -0
  87. package/lib/commonjs/components/Rotate.js +32 -0
  88. package/lib/commonjs/components/Rotate.js.map +1 -0
  89. package/lib/commonjs/components/Save.js +48 -0
  90. package/lib/commonjs/components/Save.js.map +1 -0
  91. package/lib/commonjs/components/index.js +73 -0
  92. package/lib/commonjs/components/index.js.map +1 -0
  93. package/lib/commonjs/hooks/index.js +21 -0
  94. package/lib/commonjs/hooks/index.js.map +1 -0
  95. package/lib/commonjs/hooks/useCamera.tsx/index.js +91 -0
  96. package/lib/commonjs/hooks/useCamera.tsx/index.js.map +1 -0
  97. package/lib/commonjs/hooks/useConfirm.js +61 -0
  98. package/lib/commonjs/hooks/useConfirm.js.map +1 -0
  99. package/lib/commonjs/hooks/useCreation/index.js +34 -0
  100. package/lib/commonjs/hooks/useCreation/index.js.map +1 -0
  101. package/lib/commonjs/index.js +39 -0
  102. package/lib/commonjs/index.js.map +1 -0
  103. package/lib/commonjs/utils/common.js +84 -0
  104. package/lib/commonjs/utils/common.js.map +1 -0
  105. package/lib/commonjs/utils/depsAreSame.js +14 -0
  106. package/lib/commonjs/utils/depsAreSame.js.map +1 -0
  107. package/lib/commonjs/utils/index.js +50 -0
  108. package/lib/commonjs/utils/index.js.map +1 -0
  109. package/lib/commonjs/utils/interface.js +25 -0
  110. package/lib/commonjs/utils/interface.js.map +1 -0
  111. package/lib/commonjs/utils/px-to-dp.js +21 -0
  112. package/lib/commonjs/utils/px-to-dp.js.map +1 -0
  113. package/lib/commonjs/utils/render-item.js +39 -0
  114. package/lib/commonjs/utils/render-item.js.map +1 -0
  115. package/lib/module/NativeReactNativeCamera.js +12 -0
  116. package/lib/module/NativeReactNativeCamera.js.map +1 -0
  117. package/lib/module/assets/close.png +0 -0
  118. package/lib/module/assets/home/record.png +0 -0
  119. package/lib/module/assets/home/take.png +0 -0
  120. package/lib/module/assets/preview/back.png +0 -0
  121. package/lib/module/assets/preview/del.png +0 -0
  122. package/lib/module/assets/preview/rotate.png +0 -0
  123. package/lib/module/assets/preview/save.png +0 -0
  124. package/lib/module/assets/tools/16_9.png +0 -0
  125. package/lib/module/assets/tools/4_3.png +0 -0
  126. package/lib/module/assets/tools/auto.png +0 -0
  127. package/lib/module/assets/tools/defaultEye.png +0 -0
  128. package/lib/module/assets/tools/enlarge.png +0 -0
  129. package/lib/module/assets/tools/fishEye.png +0 -0
  130. package/lib/module/assets/tools/narrow.png +0 -0
  131. package/lib/module/assets/tools/off.png +0 -0
  132. package/lib/module/assets/tools/on.png +0 -0
  133. package/lib/module/assets/tools/screenRatio.png +0 -0
  134. package/lib/module/assets/tools/volumeOff.png +0 -0
  135. package/lib/module/assets/tools/volumeOn.png +0 -0
  136. package/lib/module/camera/Camera.js +199 -0
  137. package/lib/module/camera/Camera.js.map +1 -0
  138. package/lib/module/camera/Container.js +56 -0
  139. package/lib/module/camera/Container.js.map +1 -0
  140. package/lib/module/camera/ModalView.js +29 -0
  141. package/lib/module/camera/ModalView.js.map +1 -0
  142. package/lib/module/camera/NoCamera.js +15 -0
  143. package/lib/module/camera/NoCamera.js.map +1 -0
  144. package/lib/module/camera/NoPermission.js +42 -0
  145. package/lib/module/camera/NoPermission.js.map +1 -0
  146. package/lib/module/camera/footer/Footer.js +148 -0
  147. package/lib/module/camera/footer/Footer.js.map +1 -0
  148. package/lib/module/camera/footer/index.js +3 -0
  149. package/lib/module/camera/footer/index.js.map +1 -0
  150. package/lib/module/camera/index.js +14 -0
  151. package/lib/module/camera/index.js.map +1 -0
  152. package/lib/module/camera/preview/PreView.js +96 -0
  153. package/lib/module/camera/preview/PreView.js.map +1 -0
  154. package/lib/module/camera/preview/PreViewContainer.js +33 -0
  155. package/lib/module/camera/preview/PreViewContainer.js.map +1 -0
  156. package/lib/module/camera/preview/PreviewFooter.js +27 -0
  157. package/lib/module/camera/preview/PreviewFooter.js.map +1 -0
  158. package/lib/module/camera/preview/SinglePre.js +61 -0
  159. package/lib/module/camera/preview/SinglePre.js.map +1 -0
  160. package/lib/module/camera/preview/index.js +13 -0
  161. package/lib/module/camera/preview/index.js.map +1 -0
  162. package/lib/module/camera/setup/SetUp.js +236 -0
  163. package/lib/module/camera/setup/SetUp.js.map +1 -0
  164. package/lib/module/camera/setup/index.js +3 -0
  165. package/lib/module/camera/setup/index.js.map +1 -0
  166. package/lib/module/components/Back.js +40 -0
  167. package/lib/module/components/Back.js.map +1 -0
  168. package/lib/module/components/Carousel/Carousel.js +43 -0
  169. package/lib/module/components/Carousel/Carousel.js.map +1 -0
  170. package/lib/module/components/Carousel/SlideItem.js +75 -0
  171. package/lib/module/components/Carousel/SlideItem.js.map +1 -0
  172. package/lib/module/components/Carousel/index.js +12 -0
  173. package/lib/module/components/Carousel/index.js.map +1 -0
  174. package/lib/module/components/Delete.js +28 -0
  175. package/lib/module/components/Delete.js.map +1 -0
  176. package/lib/module/components/Loading.js +67 -0
  177. package/lib/module/components/Loading.js.map +1 -0
  178. package/lib/module/components/Modal/Confirm.js +110 -0
  179. package/lib/module/components/Modal/Confirm.js.map +1 -0
  180. package/lib/module/components/Modal/index.js +3 -0
  181. package/lib/module/components/Modal/index.js.map +1 -0
  182. package/lib/module/components/PreviewThumbnail.js +36 -0
  183. package/lib/module/components/PreviewThumbnail.js.map +1 -0
  184. package/lib/module/components/Rotate.js +24 -0
  185. package/lib/module/components/Rotate.js.map +1 -0
  186. package/lib/module/components/Save.js +40 -0
  187. package/lib/module/components/Save.js.map +1 -0
  188. package/lib/module/components/index.js +9 -0
  189. package/lib/module/components/index.js.map +1 -0
  190. package/lib/module/hooks/index.js +12 -0
  191. package/lib/module/hooks/index.js.map +1 -0
  192. package/lib/module/hooks/useCamera.tsx/index.js +82 -0
  193. package/lib/module/hooks/useCamera.tsx/index.js.map +1 -0
  194. package/lib/module/hooks/useConfirm.js +52 -0
  195. package/lib/module/hooks/useConfirm.js.map +1 -0
  196. package/lib/module/hooks/useCreation/index.js +27 -0
  197. package/lib/module/hooks/useCreation/index.js.map +1 -0
  198. package/lib/module/index.js +26 -0
  199. package/lib/module/index.js.map +1 -0
  200. package/lib/module/utils/common.js +76 -0
  201. package/lib/module/utils/common.js.map +1 -0
  202. package/lib/module/utils/depsAreSame.js +8 -0
  203. package/lib/module/utils/depsAreSame.js.map +1 -0
  204. package/lib/module/utils/index.js +13 -0
  205. package/lib/module/utils/index.js.map +1 -0
  206. package/lib/module/utils/interface.js +24 -0
  207. package/lib/module/utils/interface.js.map +1 -0
  208. package/lib/module/utils/px-to-dp.js +15 -0
  209. package/lib/module/utils/px-to-dp.js.map +1 -0
  210. package/lib/module/utils/render-item.js +31 -0
  211. package/lib/module/utils/render-item.js.map +1 -0
  212. package/lib/typescript/src/NativeReactNativeCamera.d.ts +6 -0
  213. package/lib/typescript/src/NativeReactNativeCamera.d.ts.map +1 -0
  214. package/lib/typescript/src/camera/Camera.d.ts +13 -0
  215. package/lib/typescript/src/camera/Camera.d.ts.map +1 -0
  216. package/lib/typescript/src/camera/Container.d.ts +6 -0
  217. package/lib/typescript/src/camera/Container.d.ts.map +1 -0
  218. package/lib/typescript/src/camera/ModalView.d.ts +6 -0
  219. package/lib/typescript/src/camera/ModalView.d.ts.map +1 -0
  220. package/lib/typescript/src/camera/NoCamera.d.ts +4 -0
  221. package/lib/typescript/src/camera/NoCamera.d.ts.map +1 -0
  222. package/lib/typescript/src/camera/NoPermission.d.ts +4 -0
  223. package/lib/typescript/src/camera/NoPermission.d.ts.map +1 -0
  224. package/lib/typescript/src/camera/footer/Footer.d.ts +16 -0
  225. package/lib/typescript/src/camera/footer/Footer.d.ts.map +1 -0
  226. package/lib/typescript/src/camera/footer/index.d.ts +3 -0
  227. package/lib/typescript/src/camera/footer/index.d.ts.map +1 -0
  228. package/lib/typescript/src/camera/index.d.ts +6 -0
  229. package/lib/typescript/src/camera/index.d.ts.map +1 -0
  230. package/lib/typescript/src/camera/preview/PreView.d.ts +10 -0
  231. package/lib/typescript/src/camera/preview/PreView.d.ts.map +1 -0
  232. package/lib/typescript/src/camera/preview/PreViewContainer.d.ts +6 -0
  233. package/lib/typescript/src/camera/preview/PreViewContainer.d.ts.map +1 -0
  234. package/lib/typescript/src/camera/preview/PreviewFooter.d.ts +7 -0
  235. package/lib/typescript/src/camera/preview/PreviewFooter.d.ts.map +1 -0
  236. package/lib/typescript/src/camera/preview/SinglePre.d.ts +28 -0
  237. package/lib/typescript/src/camera/preview/SinglePre.d.ts.map +1 -0
  238. package/lib/typescript/src/camera/preview/index.d.ts +5 -0
  239. package/lib/typescript/src/camera/preview/index.d.ts.map +1 -0
  240. package/lib/typescript/src/camera/setup/SetUp.d.ts +12 -0
  241. package/lib/typescript/src/camera/setup/SetUp.d.ts.map +1 -0
  242. package/lib/typescript/src/camera/setup/index.d.ts +3 -0
  243. package/lib/typescript/src/camera/setup/index.d.ts.map +1 -0
  244. package/lib/typescript/src/components/Back.d.ts +20 -0
  245. package/lib/typescript/src/components/Back.d.ts.map +1 -0
  246. package/lib/typescript/src/components/Carousel/Carousel.d.ts +10 -0
  247. package/lib/typescript/src/components/Carousel/Carousel.d.ts.map +1 -0
  248. package/lib/typescript/src/components/Carousel/SlideItem.d.ts +13 -0
  249. package/lib/typescript/src/components/Carousel/SlideItem.d.ts.map +1 -0
  250. package/lib/typescript/src/components/Carousel/index.d.ts +4 -0
  251. package/lib/typescript/src/components/Carousel/index.d.ts.map +1 -0
  252. package/lib/typescript/src/components/Delete.d.ts +7 -0
  253. package/lib/typescript/src/components/Delete.d.ts.map +1 -0
  254. package/lib/typescript/src/components/Loading.d.ts +4 -0
  255. package/lib/typescript/src/components/Loading.d.ts.map +1 -0
  256. package/lib/typescript/src/components/Modal/Confirm.d.ts +9 -0
  257. package/lib/typescript/src/components/Modal/Confirm.d.ts.map +1 -0
  258. package/lib/typescript/src/components/Modal/index.d.ts +3 -0
  259. package/lib/typescript/src/components/Modal/index.d.ts.map +1 -0
  260. package/lib/typescript/src/components/PreviewThumbnail.d.ts +10 -0
  261. package/lib/typescript/src/components/PreviewThumbnail.d.ts.map +1 -0
  262. package/lib/typescript/src/components/Rotate.d.ts +9 -0
  263. package/lib/typescript/src/components/Rotate.d.ts.map +1 -0
  264. package/lib/typescript/src/components/Save.d.ts +20 -0
  265. package/lib/typescript/src/components/Save.d.ts.map +1 -0
  266. package/lib/typescript/src/components/index.d.ts +9 -0
  267. package/lib/typescript/src/components/index.d.ts.map +1 -0
  268. package/lib/typescript/src/hooks/index.d.ts +4 -0
  269. package/lib/typescript/src/hooks/index.d.ts.map +1 -0
  270. package/lib/typescript/src/hooks/useCamera.tsx/index.d.ts +5 -0
  271. package/lib/typescript/src/hooks/useCamera.tsx/index.d.ts.map +1 -0
  272. package/lib/typescript/src/hooks/useConfirm.d.ts +6 -0
  273. package/lib/typescript/src/hooks/useConfirm.d.ts.map +1 -0
  274. package/lib/typescript/src/hooks/useCreation/index.d.ts +3 -0
  275. package/lib/typescript/src/hooks/useCreation/index.d.ts.map +1 -0
  276. package/lib/typescript/src/index.d.ts +5 -0
  277. package/lib/typescript/src/index.d.ts.map +1 -0
  278. package/lib/typescript/src/utils/common.d.ts +20 -0
  279. package/lib/typescript/src/utils/common.d.ts.map +1 -0
  280. package/lib/typescript/src/utils/depsAreSame.d.ts +3 -0
  281. package/lib/typescript/src/utils/depsAreSame.d.ts.map +1 -0
  282. package/lib/typescript/src/utils/index.d.ts +5 -0
  283. package/lib/typescript/src/utils/index.d.ts.map +1 -0
  284. package/lib/typescript/src/utils/interface.d.ts +64 -0
  285. package/lib/typescript/src/utils/interface.d.ts.map +1 -0
  286. package/lib/typescript/src/utils/px-to-dp.d.ts +4 -0
  287. package/lib/typescript/src/utils/px-to-dp.d.ts.map +1 -0
  288. package/lib/typescript/src/utils/render-item.d.ts +10 -0
  289. package/lib/typescript/src/utils/render-item.d.ts.map +1 -0
  290. package/package.json +183 -0
  291. package/src/NativeReactNativeCamera.ts +15 -0
  292. package/src/assets/close.png +0 -0
  293. package/src/assets/home/record.png +0 -0
  294. package/src/assets/home/take.png +0 -0
  295. package/src/assets/preview/back.png +0 -0
  296. package/src/assets/preview/del.png +0 -0
  297. package/src/assets/preview/rotate.png +0 -0
  298. package/src/assets/preview/save.png +0 -0
  299. package/src/assets/tools/16_9.png +0 -0
  300. package/src/assets/tools/4_3.png +0 -0
  301. package/src/assets/tools/auto.png +0 -0
  302. package/src/assets/tools/defaultEye.png +0 -0
  303. package/src/assets/tools/enlarge.png +0 -0
  304. package/src/assets/tools/fishEye.png +0 -0
  305. package/src/assets/tools/narrow.png +0 -0
  306. package/src/assets/tools/off.png +0 -0
  307. package/src/assets/tools/on.png +0 -0
  308. package/src/assets/tools/screenRatio.png +0 -0
  309. package/src/assets/tools/volumeOff.png +0 -0
  310. package/src/assets/tools/volumeOn.png +0 -0
  311. package/src/camera/Camera.tsx +236 -0
  312. package/src/camera/Container.tsx +60 -0
  313. package/src/camera/ModalView.tsx +28 -0
  314. package/src/camera/NoCamera.tsx +16 -0
  315. package/src/camera/NoPermission.tsx +43 -0
  316. package/src/camera/footer/Footer.tsx +196 -0
  317. package/src/camera/footer/index.tsx +2 -0
  318. package/src/camera/index.tsx +13 -0
  319. package/src/camera/preview/PreView.tsx +111 -0
  320. package/src/camera/preview/PreViewContainer.tsx +33 -0
  321. package/src/camera/preview/PreviewFooter.tsx +32 -0
  322. package/src/camera/preview/SinglePre.tsx +66 -0
  323. package/src/camera/preview/index.tsx +13 -0
  324. package/src/camera/setup/SetUp.tsx +273 -0
  325. package/src/camera/setup/index.tsx +3 -0
  326. package/src/components/Back.tsx +37 -0
  327. package/src/components/Carousel/Carousel.tsx +49 -0
  328. package/src/components/Carousel/SlideItem.tsx +95 -0
  329. package/src/components/Carousel/index.tsx +13 -0
  330. package/src/components/Delete.tsx +30 -0
  331. package/src/components/Loading.tsx +76 -0
  332. package/src/components/Modal/Confirm.tsx +115 -0
  333. package/src/components/Modal/index.tsx +3 -0
  334. package/src/components/PreviewThumbnail.tsx +40 -0
  335. package/src/components/Rotate.tsx +32 -0
  336. package/src/components/Save.tsx +37 -0
  337. package/src/components/index.tsx +8 -0
  338. package/src/hooks/index.ts +12 -0
  339. package/src/hooks/useCamera.tsx/index.tsx +96 -0
  340. package/src/hooks/useConfirm.tsx +58 -0
  341. package/src/hooks/useCreation/index.ts +25 -0
  342. package/src/index.tsx +38 -0
  343. package/src/utils/common.ts +85 -0
  344. package/src/utils/depsAreSame.ts +12 -0
  345. package/src/utils/index.ts +12 -0
  346. package/src/utils/interface.ts +90 -0
  347. package/src/utils/px-to-dp.tsx +12 -0
  348. package/src/utils/render-item.tsx +38 -0
@@ -0,0 +1,33 @@
1
+ /*
2
+ * @Author: 刘利军
3
+ * @Date: 2024-12-02 13:37:36
4
+ * @LastEditors: 刘利军
5
+ * @LastEditTime: 2024-12-17 10:18:41
6
+ * @Description:
7
+ * @PageName:
8
+ */
9
+ import { StyleSheet, View } from 'react-native';
10
+ import React from 'react';
11
+
12
+ const PreViewContainer: React.FC<{ visible: boolean }> = ({
13
+ visible,
14
+ children,
15
+ }) => {
16
+ if (!visible) {
17
+ return null;
18
+ }
19
+ return <View style={styles.container}>{children}</View>;
20
+ };
21
+
22
+ export default PreViewContainer;
23
+
24
+ const styles = StyleSheet.create({
25
+ container: {
26
+ position: 'absolute',
27
+ top: 0,
28
+ bottom: 0,
29
+ right: 0,
30
+ left: 0,
31
+ backgroundColor: '#fff',
32
+ },
33
+ });
@@ -0,0 +1,32 @@
1
+ /*
2
+ * @Author: 刘利军
3
+ * @Date: 2024-12-16 09:21:56
4
+ * @LastEditors: 刘利军
5
+ * @LastEditTime: 2024-12-16 10:27:40
6
+ * @Description:
7
+ * @PageName:
8
+ */
9
+ import { StyleSheet, View } from 'react-native';
10
+ import React, { type ReactNode } from 'react';
11
+
12
+ export interface PreviewFooterProps {
13
+ actions: ReactNode[];
14
+ }
15
+ const PreviewFooter: React.FC<PreviewFooterProps> = ({ actions }) => {
16
+ return (
17
+ <View style={styles.footer}>
18
+ {actions.map((item) => {
19
+ return item;
20
+ })}
21
+ </View>
22
+ );
23
+ };
24
+
25
+ export default PreviewFooter;
26
+
27
+ const styles = StyleSheet.create({
28
+ footer: {
29
+ flexDirection: 'row',
30
+ justifyContent: 'space-evenly',
31
+ },
32
+ });
@@ -0,0 +1,66 @@
1
+ /*
2
+ * @Author: 刘利军
3
+ * @Date: 2024-12-16 09:54:00
4
+ * @LastEditors: 刘利军
5
+ * @LastEditTime: 2024-12-20 14:58:16
6
+ * @Description:
7
+ * @PageName:
8
+ */
9
+ import { Image, StyleSheet, View } from 'react-native';
10
+ import React from 'react';
11
+ import PreviewFooter from './PreviewFooter';
12
+ import { Back, Save } from '../../components';
13
+ import { SAFE_AREA_PADDING, type CustomPhotoFile } from '../../utils';
14
+
15
+ export interface SingleProps extends CommonProps {
16
+ uri: string;
17
+ }
18
+ export interface CommonProps {
19
+ onBack?: () => void;
20
+ onDel?: (photo?: CustomPhotoFile) => Promise<boolean> | undefined;
21
+ onSave?: () => void;
22
+ }
23
+ const SinglePre: React.FC<SingleProps> = ({ uri, onBack, onSave }) => {
24
+ return (
25
+ <View style={styles.container}>
26
+ <Image
27
+ style={styles.container}
28
+ source={{ uri: `file://${uri}` }}
29
+ onLoadEnd={() => {
30
+ // 预留水印逻辑
31
+ }}
32
+ />
33
+ <View style={styles.footer}>
34
+ <PreviewFooter
35
+ actions={[
36
+ <Back
37
+ key="back"
38
+ style={styles.image}
39
+ text="返回"
40
+ onPress={onBack}
41
+ />,
42
+ <Save
43
+ key="save"
44
+ style={styles.image}
45
+ text="保存"
46
+ onPress={onSave}
47
+ />,
48
+ ]}
49
+ />
50
+ </View>
51
+ </View>
52
+ );
53
+ };
54
+
55
+ export default SinglePre;
56
+
57
+ export const styles = StyleSheet.create({
58
+ container: { flex: 1 },
59
+ footer: {
60
+ position: 'absolute',
61
+ bottom: SAFE_AREA_PADDING.paddingBottom + 12,
62
+ left: 0,
63
+ right: 0,
64
+ },
65
+ image: { width: 60, height: 60 },
66
+ });
@@ -0,0 +1,13 @@
1
+ /*
2
+ * @Author: 刘利军
3
+ * @Date: 2024-12-02 13:37:28
4
+ * @LastEditors: 刘利军
5
+ * @LastEditTime: 2024-12-17 10:17:04
6
+ * @Description:
7
+ * @PageName:
8
+ */
9
+ import PreView from './PreView';
10
+ import SinglePre from './SinglePre';
11
+ import PreViewContainer from './PreViewContainer';
12
+
13
+ export { PreView, SinglePre, PreViewContainer };
@@ -0,0 +1,273 @@
1
+ /*
2
+ * @Author: 刘利军
3
+ * @Date: 2024-12-02 11:52:31
4
+ * @LastEditors: 刘利军
5
+ * @LastEditTime: 2024-12-20 15:04:51
6
+ * @Description:
7
+ * @PageName:
8
+ */
9
+ import { Image, StyleSheet, Text, TouchableOpacity, View } from 'react-native';
10
+ import React, { useState } from 'react';
11
+ import { CONTROL_BUTTON_SIZE, SAFE_AREA_PADDING } from '../../utils';
12
+ import type { FlashMode } from '../../utils';
13
+
14
+ const FlashOn = require('../../assets/tools/on.png');
15
+ const FlashOff = require('../../assets/tools/off.png');
16
+ const FlashAuto = require('../../assets/tools/auto.png');
17
+ const volumeOff = require('../../assets/tools/volumeOff.png');
18
+ const volumeOn = require('../../assets/tools/volumeOn.png');
19
+
20
+ const four = require('../../assets/tools/4_3.png');
21
+ const sixteen = require('../../assets/tools/16_9.png');
22
+
23
+ const enlarge = require('../../assets/tools/enlarge.png');
24
+ const narrow = require('../../assets/tools/narrow.png');
25
+ const defaultEyeImage = require('../../assets/tools/defaultEye.png');
26
+ const defaultFishEyeImage = require('../../assets/tools/fishEye.png');
27
+
28
+ let volume = false;
29
+ let screen = true;
30
+
31
+ const SetUp: React.FC<{
32
+ isMultiCam: boolean;
33
+ onChange: (val: FlashMode) => void;
34
+ onAspectRationChange: (val: number) => void;
35
+ onVolumeChange: (val: boolean) => void;
36
+ onScreenChange: (val: 'cover' | 'contain' | undefined) => void;
37
+ onFishEyeOpen: (val: 'default' | 'fishEye') => void;
38
+ }> = ({
39
+ isMultiCam,
40
+ onChange,
41
+ onAspectRationChange,
42
+ onScreenChange,
43
+ onVolumeChange,
44
+ onFishEyeOpen,
45
+ }) => {
46
+ const [flashImage, setFlashImage] = useState(FlashOff);
47
+ const [aspectRatioImage, setAspectRatioImage] = useState(sixteen);
48
+ const [volumeImage, setVolumeImage] = useState(volumeOff);
49
+ const [flashOpen, setFlashOpen] = useState(false);
50
+ const [aspectRationOpen, setAspectRationOpen] = useState(false);
51
+ const [screenImage, setScreenImage] = useState(narrow);
52
+ const [fishEyeOpen, setFishEyeOpen] = useState(false);
53
+ const [fishEyeImage, setFishEyeImage] = useState(defaultEyeImage);
54
+ const [openHeader, setOpenHeader] = useState(true);
55
+
56
+ // 闪光灯切换
57
+ const falshChange = (type: FlashMode) => {
58
+ switch (type) {
59
+ case 'on':
60
+ setFlashImage(FlashOn);
61
+ break;
62
+ case 'auto':
63
+ setFlashImage(FlashAuto);
64
+ break;
65
+ default:
66
+ setFlashImage(FlashOff);
67
+ break;
68
+ }
69
+ onChange(type);
70
+ setFlashOpen(false);
71
+ setOpenHeader(true);
72
+ };
73
+
74
+ // 宽高比切换
75
+ const aspectRatioChange = (type: number) => {
76
+ switch (type) {
77
+ case 4:
78
+ setAspectRatioImage(four);
79
+ break;
80
+ case 16:
81
+ setAspectRatioImage(sixteen);
82
+ break;
83
+ }
84
+ onAspectRationChange(type);
85
+ setAspectRationOpen(false);
86
+ setOpenHeader(true);
87
+ };
88
+
89
+ // 宽高比切换
90
+ const fishEyeChange = (type: 'default' | 'fishEye') => {
91
+ onFishEyeOpen(type);
92
+ setFishEyeImage(defaultFishEyeImage);
93
+ setFishEyeOpen(false);
94
+ setOpenHeader(true);
95
+ };
96
+
97
+ return (
98
+ <>
99
+ {openHeader && (
100
+ <View style={{ ...styles.top, ...styles.header }}>
101
+ {/* <Text style={styles.text}></Text> */}
102
+ </View>
103
+ )}
104
+ <View style={{ ...styles.top, ...styles.tools }}>
105
+ <View style={styles.tool}>
106
+ <TouchableOpacity
107
+ style={styles.toolImg}
108
+ onPress={() => {
109
+ setOpenHeader(false);
110
+ setFlashOpen((val) => !val);
111
+ }}
112
+ >
113
+ <Image source={flashImage} style={styles.toolImg} />
114
+ </TouchableOpacity>
115
+ {flashOpen && (
116
+ <View style={styles.toolSetting}>
117
+ <Text onPress={() => falshChange('auto')} style={styles.toolText}>
118
+ 自动
119
+ </Text>
120
+ <Text onPress={() => falshChange('on')} style={styles.toolText}>
121
+ 打开
122
+ </Text>
123
+ <Text onPress={() => falshChange('off')} style={styles.toolText}>
124
+ 关闭
125
+ </Text>
126
+ </View>
127
+ )}
128
+ </View>
129
+
130
+ <View style={styles.tool}>
131
+ <TouchableOpacity
132
+ style={styles.toolImg}
133
+ onPress={() => {
134
+ if (volume) {
135
+ setVolumeImage(volumeOff);
136
+ } else {
137
+ setVolumeImage(volumeOn);
138
+ }
139
+ volume = !volume;
140
+ onVolumeChange(volume);
141
+ }}
142
+ >
143
+ <Image source={volumeImage} style={styles.toolImg} />
144
+ </TouchableOpacity>
145
+ </View>
146
+
147
+ <View style={styles.tool}>
148
+ <TouchableOpacity
149
+ style={styles.toolImg}
150
+ onPress={() => {
151
+ setOpenHeader(false);
152
+ setAspectRationOpen((val) => !val);
153
+ }}
154
+ >
155
+ <Image source={aspectRatioImage} style={styles.toolImg} />
156
+ </TouchableOpacity>
157
+ {aspectRationOpen && (
158
+ <View style={styles.toolSetting}>
159
+ <Text
160
+ onPress={() => aspectRatioChange(4)}
161
+ style={styles.toolText}
162
+ >
163
+ 4:3
164
+ </Text>
165
+ <Text
166
+ onPress={() => aspectRatioChange(16)}
167
+ style={styles.toolText}
168
+ >
169
+ 16:9
170
+ </Text>
171
+ </View>
172
+ )}
173
+ </View>
174
+
175
+ <View style={styles.tool}>
176
+ <TouchableOpacity
177
+ style={styles.toolImg}
178
+ onPress={() => {
179
+ if (screen) {
180
+ setScreenImage(enlarge);
181
+ } else {
182
+ setScreenImage(narrow);
183
+ }
184
+ onScreenChange(screen ? 'contain' : 'cover');
185
+ screen = !screen;
186
+ }}
187
+ >
188
+ <Image source={screenImage} style={styles.toolImg} />
189
+ </TouchableOpacity>
190
+ </View>
191
+
192
+ {isMultiCam && (
193
+ <View style={styles.tool}>
194
+ <TouchableOpacity
195
+ style={styles.toolImg}
196
+ onPress={() => {
197
+ setOpenHeader(false);
198
+ setFishEyeOpen((val) => !val);
199
+ }}
200
+ >
201
+ <Image source={fishEyeImage} style={styles.toolImg} />
202
+ </TouchableOpacity>
203
+ {fishEyeOpen && (
204
+ <View style={styles.toolSetting}>
205
+ <Text
206
+ onPress={() => {
207
+ fishEyeChange('default');
208
+ }}
209
+ style={styles.toolText}
210
+ >
211
+ 默认
212
+ </Text>
213
+ <Text
214
+ onPress={() => {
215
+ fishEyeChange('fishEye');
216
+ }}
217
+ style={styles.toolText}
218
+ >
219
+ 广角
220
+ </Text>
221
+ </View>
222
+ )}
223
+ </View>
224
+ )}
225
+ </View>
226
+ </>
227
+ );
228
+ };
229
+
230
+ export default SetUp;
231
+
232
+ const styles = StyleSheet.create({
233
+ text: { color: '#fff' },
234
+ top: {
235
+ ...StyleSheet.absoluteFillObject,
236
+ marginHorizontal: 20,
237
+ top: SAFE_AREA_PADDING.paddingTop + 10,
238
+ bottom: undefined,
239
+ },
240
+ header: {
241
+ display: 'flex',
242
+ alignItems: 'center',
243
+ },
244
+ tools: {
245
+ display: 'flex',
246
+ width: CONTROL_BUTTON_SIZE / 2,
247
+ },
248
+ tool: {
249
+ display: 'flex',
250
+ flexDirection: 'row',
251
+ width: CONTROL_BUTTON_SIZE / 2,
252
+ height: CONTROL_BUTTON_SIZE / 2,
253
+ alignItems: 'center',
254
+ marginBottom: 8,
255
+ },
256
+ toolImg: {
257
+ width: '100%',
258
+ height: '100%',
259
+ },
260
+ toolSetting: {
261
+ display: 'flex',
262
+ flexDirection: 'row',
263
+ },
264
+ toolText: {
265
+ marginLeft: 8,
266
+ fontWeight: '900',
267
+ color: '#fff',
268
+ },
269
+ headerLeft: {
270
+ display: 'flex',
271
+ flexDirection: 'row',
272
+ },
273
+ });
@@ -0,0 +1,3 @@
1
+ import SetUp from './SetUp';
2
+
3
+ export { SetUp };
@@ -0,0 +1,37 @@
1
+ /*
2
+ * @Author: 刘利军
3
+ * @Date: 2024-01-16 17:50:24
4
+ * @LastEditors: 刘利军
5
+ * @LastEditTime: 2024-12-16 10:21:17
6
+ * @Description:
7
+ * @PageName:
8
+ */
9
+ import { Image, StyleSheet, Text, TouchableOpacity } from 'react-native';
10
+ import React from 'react';
11
+
12
+ import { type RotateProps } from './Rotate';
13
+ const Back: React.FC<RotateProps & { text?: string }> = ({
14
+ onPress,
15
+ style,
16
+ text,
17
+ }) => {
18
+ return (
19
+ <TouchableOpacity style={styles.container} onPress={onPress}>
20
+ <Image
21
+ source={require('../assets/preview/back.png')}
22
+ style={[styles.image, style]}
23
+ />
24
+ {text && <Text style={styles.text}>{text}</Text>}
25
+ </TouchableOpacity>
26
+ );
27
+ };
28
+
29
+ export default Back;
30
+
31
+ export const styles = StyleSheet.create({
32
+ container: {
33
+ alignItems: 'center',
34
+ },
35
+ image: { width: 34, height: 34, marginBottom: 4 },
36
+ text: { color: '#fff' },
37
+ });
@@ -0,0 +1,49 @@
1
+ /*
2
+ * @Author: 刘利军
3
+ * @Date: 2024-12-17 16:00:49
4
+ * @LastEditors: 刘利军
5
+ * @LastEditTime: 2024-12-20 14:24:52
6
+ * @Description:
7
+ * @PageName:
8
+ */
9
+ import React from 'react';
10
+ import Carousel, {
11
+ type ICarouselInstance,
12
+ } from 'react-native-reanimated-carousel';
13
+ import { useSharedValue } from 'react-native-reanimated';
14
+ import {
15
+ pxToDpHeight,
16
+ pxToDpWidth,
17
+ renderItem,
18
+ type CustomPhotoFile,
19
+ } from '../../utils';
20
+ const CustomCarousel: React.FC<{
21
+ data: CustomPhotoFile[];
22
+ onSnapToItem?: ((index: number) => void) | undefined;
23
+ ref?: React.Ref<ICarouselInstance>;
24
+ }> = ({ data, onSnapToItem, ref }) => {
25
+ const scrollOffsetValue = useSharedValue<number>(0);
26
+
27
+ return (
28
+ <>
29
+ <Carousel
30
+ ref={ref}
31
+ width={pxToDpWidth(679)}
32
+ height={pxToDpHeight(857)}
33
+ snapEnabled={true}
34
+ pagingEnabled={true}
35
+ data={data}
36
+ defaultScrollOffsetValue={scrollOffsetValue}
37
+ style={{ width: pxToDpWidth(679) }}
38
+ onConfigurePanGesture={(g: { enabled: (arg0: boolean) => any }) => {
39
+ 'worklet';
40
+ g.enabled(true);
41
+ }}
42
+ onSnapToItem={onSnapToItem}
43
+ renderItem={renderItem({ rounded: true, totalIndex: data.length })}
44
+ />
45
+ </>
46
+ );
47
+ };
48
+
49
+ export default CustomCarousel;
@@ -0,0 +1,95 @@
1
+ /*
2
+ * @Author: 刘利军
3
+ * @Date: 2024-12-17 15:50:46
4
+ * @LastEditors: 刘利军
5
+ * @LastEditTime: 2024-12-20 14:22:58
6
+ * @Description:
7
+ * @PageName:
8
+ */
9
+ import React, { useMemo } from 'react';
10
+ import {
11
+ type ImageSourcePropType,
12
+ type ImageStyle,
13
+ type StyleProp,
14
+ StyleSheet,
15
+ Text,
16
+ View,
17
+ type ViewProps,
18
+ } from 'react-native';
19
+ import type { AnimatedProps } from 'react-native-reanimated';
20
+ import Animated from 'react-native-reanimated';
21
+ import { pxToDpWidth } from '../../utils';
22
+
23
+ interface Props extends AnimatedProps<ViewProps> {
24
+ style?: StyleProp<ImageStyle>;
25
+ index?: number;
26
+ totalIndex?: number;
27
+ rounded?: boolean;
28
+ source?: ImageSourcePropType;
29
+ }
30
+
31
+ export const SlideItem: React.FC<Props> = (props) => {
32
+ const {
33
+ style,
34
+ index = 0,
35
+ totalIndex = 0,
36
+ rounded = false,
37
+ ...animatedViewProps
38
+ } = props;
39
+ const source = useMemo(() => props.source, [props.source]);
40
+ return (
41
+ <Animated.View style={styles.flex} {...animatedViewProps}>
42
+ <Animated.Image
43
+ style={[style, styles.container, rounded && styles.borderRadius]}
44
+ source={source}
45
+ resizeMode="contain"
46
+ />
47
+ <View style={styles.overlay}>
48
+ <View style={styles.overlayTextContainer}>
49
+ <Text style={styles.overlayText}>
50
+ 第{index + 1}/{totalIndex}笔
51
+ </Text>
52
+ </View>
53
+ </View>
54
+ </Animated.View>
55
+ );
56
+ };
57
+
58
+ const styles = StyleSheet.create({
59
+ flex: {
60
+ flex: 1,
61
+ marginBottom: pxToDpWidth(20),
62
+ backgroundColor: 'rgba(255,255,255,0.2)',
63
+ borderRadius: pxToDpWidth(10),
64
+ },
65
+ borderRadius: {
66
+ borderRadius: pxToDpWidth(10),
67
+ },
68
+ container: {
69
+ width: '100%',
70
+ height: '100%',
71
+ },
72
+ overlay: {
73
+ position: 'absolute',
74
+ bottom: -pxToDpWidth(20),
75
+ left: 0,
76
+ right: 0,
77
+ justifyContent: 'center',
78
+ alignItems: 'center',
79
+ },
80
+ overlayText: {
81
+ color: '#fff',
82
+ fontSize: 14,
83
+ fontWeight: 'bold',
84
+ letterSpacing: 2,
85
+ },
86
+ overlayTextContainer: {
87
+ backgroundColor: '#E96C00',
88
+ paddingHorizontal: 15,
89
+ paddingVertical: 5,
90
+ minWidth: 80,
91
+ justifyContent: 'center',
92
+ alignItems: 'center',
93
+ borderRadius: pxToDpWidth(25),
94
+ },
95
+ });
@@ -0,0 +1,13 @@
1
+ /*
2
+ * @Author: 刘利军
3
+ * @Date: 2024-12-17 16:01:04
4
+ * @LastEditors: 刘利军
5
+ * @LastEditTime: 2024-12-17 16:07:53
6
+ * @Description:
7
+ * @PageName:
8
+ */
9
+ import MyCarousel from './Carousel';
10
+
11
+ import { SlideItem } from './SlideItem';
12
+
13
+ export { MyCarousel, SlideItem };
@@ -0,0 +1,30 @@
1
+ /*
2
+ * @Author: 刘利军
3
+ * @Date: 2024-01-16 17:50:24
4
+ * @LastEditors: 刘利军
5
+ * @LastEditTime: 2024-12-16 10:21:11
6
+ * @Description:
7
+ * @PageName:
8
+ */
9
+ import { Image, Text, TouchableOpacity } from 'react-native';
10
+ import React from 'react';
11
+
12
+ import { type RotateProps } from './Rotate';
13
+ import { styles } from './Back';
14
+ const Delete: React.FC<RotateProps & { text?: string }> = ({
15
+ onPress,
16
+ style,
17
+ text,
18
+ }) => {
19
+ return (
20
+ <TouchableOpacity style={styles.container} onPress={onPress}>
21
+ <Image
22
+ source={require('../assets/preview/del.png')}
23
+ style={[styles.image, style]}
24
+ />
25
+ {text && <Text style={styles.text}>{text}</Text>}
26
+ </TouchableOpacity>
27
+ );
28
+ };
29
+
30
+ export default Delete;