@unif/react-native-camera 2.6.1 → 2.7.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 (259) hide show
  1. package/README.md +7 -0
  2. package/lib/module/camera/Camera.js +96 -27
  3. package/lib/module/camera/Camera.js.map +1 -1
  4. package/lib/module/camera/CaptureFlash.js +38 -0
  5. package/lib/module/camera/CaptureFlash.js.map +1 -0
  6. package/lib/module/camera/CaptureFlash.test.js +19 -0
  7. package/lib/module/camera/CaptureFlash.test.js.map +1 -0
  8. package/lib/module/camera/Container.js +166 -64
  9. package/lib/module/camera/Container.js.map +1 -1
  10. package/lib/module/camera/FocusIndicator.js +99 -23
  11. package/lib/module/camera/FocusIndicator.js.map +1 -1
  12. package/lib/module/camera/FocusIndicator.test.js +27 -0
  13. package/lib/module/camera/FocusIndicator.test.js.map +1 -0
  14. package/lib/module/camera/colors/dark.js +22 -0
  15. package/lib/module/camera/colors/dark.js.map +1 -0
  16. package/lib/module/camera/colors/dark.test.js +10 -0
  17. package/lib/module/camera/colors/dark.test.js.map +1 -0
  18. package/lib/module/camera/footer/ActionRow.js +65 -0
  19. package/lib/module/camera/footer/ActionRow.js.map +1 -0
  20. package/lib/module/camera/footer/ActionRow.test.js +53 -0
  21. package/lib/module/camera/footer/ActionRow.test.js.map +1 -0
  22. package/lib/module/camera/footer/FlipButton.js +31 -0
  23. package/lib/module/camera/footer/FlipButton.js.map +1 -0
  24. package/lib/module/camera/footer/FlipButton.test.js +16 -0
  25. package/lib/module/camera/footer/FlipButton.test.js.map +1 -0
  26. package/lib/module/camera/footer/ModeSwitcherPill.js +89 -0
  27. package/lib/module/camera/footer/ModeSwitcherPill.js.map +1 -0
  28. package/lib/module/camera/footer/ModeSwitcherPill.test.js +43 -0
  29. package/lib/module/camera/footer/ModeSwitcherPill.test.js.map +1 -0
  30. package/lib/module/camera/footer/RecordingTimer.js +66 -0
  31. package/lib/module/camera/footer/RecordingTimer.js.map +1 -0
  32. package/lib/module/camera/footer/RecordingTimer.test.js +20 -0
  33. package/lib/module/camera/footer/RecordingTimer.test.js.map +1 -0
  34. package/lib/module/camera/footer/Shutter.js +70 -0
  35. package/lib/module/camera/footer/Shutter.js.map +1 -0
  36. package/lib/module/camera/footer/Shutter.test.js +42 -0
  37. package/lib/module/camera/footer/Shutter.test.js.map +1 -0
  38. package/lib/module/camera/footer/ThumbnailStack.js +71 -0
  39. package/lib/module/camera/footer/ThumbnailStack.js.map +1 -0
  40. package/lib/module/camera/footer/ThumbnailStack.test.js +30 -0
  41. package/lib/module/camera/footer/ThumbnailStack.test.js.map +1 -0
  42. package/lib/module/camera/footer/ZoomChips.js +57 -0
  43. package/lib/module/camera/footer/ZoomChips.js.map +1 -0
  44. package/lib/module/camera/footer/ZoomChips.test.js +17 -0
  45. package/lib/module/camera/footer/ZoomChips.test.js.map +1 -0
  46. package/lib/module/camera/footer/index.js +7 -1
  47. package/lib/module/camera/footer/index.js.map +1 -1
  48. package/lib/module/camera/icons/VolumeIcon.js +44 -0
  49. package/lib/module/camera/icons/VolumeIcon.js.map +1 -0
  50. package/lib/module/camera/icons/VolumeIcon.test.js +18 -0
  51. package/lib/module/camera/icons/VolumeIcon.test.js.map +1 -0
  52. package/lib/module/camera/index.js +3 -1
  53. package/lib/module/camera/index.js.map +1 -1
  54. package/lib/module/camera/preview/PreviewBottomBar.js +69 -0
  55. package/lib/module/camera/preview/PreviewBottomBar.js.map +1 -0
  56. package/lib/module/camera/preview/PreviewBottomBar.test.js +46 -0
  57. package/lib/module/camera/preview/PreviewBottomBar.test.js.map +1 -0
  58. package/lib/module/camera/preview/PreviewOverlay.js +89 -0
  59. package/lib/module/camera/preview/PreviewOverlay.js.map +1 -0
  60. package/lib/module/camera/preview/PreviewOverlay.test.js +45 -0
  61. package/lib/module/camera/preview/PreviewOverlay.test.js.map +1 -0
  62. package/lib/module/camera/preview/PreviewTopBar.js +96 -0
  63. package/lib/module/camera/preview/PreviewTopBar.js.map +1 -0
  64. package/lib/module/camera/preview/PreviewTopBar.test.js +44 -0
  65. package/lib/module/camera/preview/PreviewTopBar.test.js.map +1 -0
  66. package/lib/module/camera/preview/groupTypes.js +11 -0
  67. package/lib/module/camera/preview/groupTypes.js.map +1 -0
  68. package/lib/module/camera/preview/groupTypes.test.js +25 -0
  69. package/lib/module/camera/preview/groupTypes.test.js.map +1 -0
  70. package/lib/module/camera/preview/index.js +3 -4
  71. package/lib/module/camera/preview/index.js.map +1 -1
  72. package/lib/module/camera/setup/SideRail.js +138 -0
  73. package/lib/module/camera/setup/SideRail.js.map +1 -0
  74. package/lib/module/camera/setup/SideRail.test.js +49 -0
  75. package/lib/module/camera/setup/SideRail.test.js.map +1 -0
  76. package/lib/module/camera/setup/index.js +1 -1
  77. package/lib/module/camera/setup/index.js.map +1 -1
  78. package/lib/module/components/Carousel/SlideItem.js +5 -3
  79. package/lib/module/components/Carousel/SlideItem.js.map +1 -1
  80. package/lib/module/components/Carousel/SlideItem.test.js +39 -0
  81. package/lib/module/components/Carousel/SlideItem.test.js.map +1 -0
  82. package/lib/module/components/VideoPlayer.js +34 -0
  83. package/lib/module/components/VideoPlayer.js.map +1 -0
  84. package/lib/module/components/VideoPlayer.test.js +15 -0
  85. package/lib/module/components/VideoPlayer.test.js.map +1 -0
  86. package/lib/module/components/index.js +0 -1
  87. package/lib/module/components/index.js.map +1 -1
  88. package/lib/module/hooks/index.js +0 -1
  89. package/lib/module/hooks/index.js.map +1 -1
  90. package/lib/typescript/src/camera/Camera.d.ts +3 -0
  91. package/lib/typescript/src/camera/Camera.d.ts.map +1 -1
  92. package/lib/typescript/src/camera/CaptureFlash.d.ts +6 -0
  93. package/lib/typescript/src/camera/CaptureFlash.d.ts.map +1 -0
  94. package/lib/typescript/src/camera/CaptureFlash.test.d.ts +2 -0
  95. package/lib/typescript/src/camera/CaptureFlash.test.d.ts.map +1 -0
  96. package/lib/typescript/src/camera/Container.d.ts.map +1 -1
  97. package/lib/typescript/src/camera/FocusIndicator.d.ts.map +1 -1
  98. package/lib/typescript/src/camera/FocusIndicator.test.d.ts +2 -0
  99. package/lib/typescript/src/camera/FocusIndicator.test.d.ts.map +1 -0
  100. package/lib/typescript/src/camera/colors/dark.d.ts +18 -0
  101. package/lib/typescript/src/camera/colors/dark.d.ts.map +1 -0
  102. package/lib/typescript/src/camera/colors/dark.test.d.ts +2 -0
  103. package/lib/typescript/src/camera/colors/dark.test.d.ts.map +1 -0
  104. package/lib/typescript/src/camera/footer/ActionRow.d.ts +14 -0
  105. package/lib/typescript/src/camera/footer/ActionRow.d.ts.map +1 -0
  106. package/lib/typescript/src/camera/footer/ActionRow.test.d.ts +2 -0
  107. package/lib/typescript/src/camera/footer/ActionRow.test.d.ts.map +1 -0
  108. package/lib/typescript/src/camera/footer/FlipButton.d.ts +4 -0
  109. package/lib/typescript/src/camera/footer/FlipButton.d.ts.map +1 -0
  110. package/lib/typescript/src/camera/footer/FlipButton.test.d.ts +2 -0
  111. package/lib/typescript/src/camera/footer/FlipButton.test.d.ts.map +1 -0
  112. package/lib/typescript/src/camera/footer/ModeSwitcherPill.d.ts +10 -0
  113. package/lib/typescript/src/camera/footer/ModeSwitcherPill.d.ts.map +1 -0
  114. package/lib/typescript/src/camera/footer/ModeSwitcherPill.test.d.ts +2 -0
  115. package/lib/typescript/src/camera/footer/ModeSwitcherPill.test.d.ts.map +1 -0
  116. package/lib/typescript/src/camera/footer/RecordingTimer.d.ts +5 -0
  117. package/lib/typescript/src/camera/footer/RecordingTimer.d.ts.map +1 -0
  118. package/lib/typescript/src/camera/footer/RecordingTimer.test.d.ts +2 -0
  119. package/lib/typescript/src/camera/footer/RecordingTimer.test.d.ts.map +1 -0
  120. package/lib/typescript/src/camera/footer/Shutter.d.ts +9 -0
  121. package/lib/typescript/src/camera/footer/Shutter.d.ts.map +1 -0
  122. package/lib/typescript/src/camera/footer/Shutter.test.d.ts +2 -0
  123. package/lib/typescript/src/camera/footer/Shutter.test.d.ts.map +1 -0
  124. package/lib/typescript/src/camera/footer/ThumbnailStack.d.ts +8 -0
  125. package/lib/typescript/src/camera/footer/ThumbnailStack.d.ts.map +1 -0
  126. package/lib/typescript/src/camera/footer/ThumbnailStack.test.d.ts +2 -0
  127. package/lib/typescript/src/camera/footer/ThumbnailStack.test.d.ts.map +1 -0
  128. package/lib/typescript/src/camera/footer/ZoomChips.d.ts +5 -0
  129. package/lib/typescript/src/camera/footer/ZoomChips.d.ts.map +1 -0
  130. package/lib/typescript/src/camera/footer/ZoomChips.test.d.ts +2 -0
  131. package/lib/typescript/src/camera/footer/ZoomChips.test.d.ts.map +1 -0
  132. package/lib/typescript/src/camera/footer/index.d.ts +7 -1
  133. package/lib/typescript/src/camera/footer/index.d.ts.map +1 -1
  134. package/lib/typescript/src/camera/icons/VolumeIcon.d.ts +8 -0
  135. package/lib/typescript/src/camera/icons/VolumeIcon.d.ts.map +1 -0
  136. package/lib/typescript/src/camera/icons/VolumeIcon.test.d.ts +2 -0
  137. package/lib/typescript/src/camera/icons/VolumeIcon.test.d.ts.map +1 -0
  138. package/lib/typescript/src/camera/index.d.ts +3 -1
  139. package/lib/typescript/src/camera/index.d.ts.map +1 -1
  140. package/lib/typescript/src/camera/preview/PreviewBottomBar.d.ts +12 -0
  141. package/lib/typescript/src/camera/preview/PreviewBottomBar.d.ts.map +1 -0
  142. package/lib/typescript/src/camera/preview/PreviewBottomBar.test.d.ts +2 -0
  143. package/lib/typescript/src/camera/preview/PreviewBottomBar.test.d.ts.map +1 -0
  144. package/lib/typescript/src/camera/preview/PreviewOverlay.d.ts +12 -0
  145. package/lib/typescript/src/camera/preview/PreviewOverlay.d.ts.map +1 -0
  146. package/lib/typescript/src/camera/preview/PreviewOverlay.test.d.ts +2 -0
  147. package/lib/typescript/src/camera/preview/PreviewOverlay.test.d.ts.map +1 -0
  148. package/lib/typescript/src/camera/preview/PreviewTopBar.d.ts +10 -0
  149. package/lib/typescript/src/camera/preview/PreviewTopBar.d.ts.map +1 -0
  150. package/lib/typescript/src/camera/preview/PreviewTopBar.test.d.ts +2 -0
  151. package/lib/typescript/src/camera/preview/PreviewTopBar.test.d.ts.map +1 -0
  152. package/lib/typescript/src/camera/preview/groupTypes.d.ts +4 -0
  153. package/lib/typescript/src/camera/preview/groupTypes.d.ts.map +1 -0
  154. package/lib/typescript/src/camera/preview/groupTypes.test.d.ts +2 -0
  155. package/lib/typescript/src/camera/preview/groupTypes.test.d.ts.map +1 -0
  156. package/lib/typescript/src/camera/preview/index.d.ts +3 -4
  157. package/lib/typescript/src/camera/preview/index.d.ts.map +1 -1
  158. package/lib/typescript/src/camera/setup/SideRail.d.ts +15 -0
  159. package/lib/typescript/src/camera/setup/SideRail.d.ts.map +1 -0
  160. package/lib/typescript/src/camera/setup/SideRail.test.d.ts +2 -0
  161. package/lib/typescript/src/camera/setup/SideRail.test.d.ts.map +1 -0
  162. package/lib/typescript/src/camera/setup/index.d.ts +2 -1
  163. package/lib/typescript/src/camera/setup/index.d.ts.map +1 -1
  164. package/lib/typescript/src/components/Carousel/SlideItem.d.ts.map +1 -1
  165. package/lib/typescript/src/components/Carousel/SlideItem.test.d.ts +2 -0
  166. package/lib/typescript/src/components/Carousel/SlideItem.test.d.ts.map +1 -0
  167. package/lib/typescript/src/components/VideoPlayer.d.ts +4 -0
  168. package/lib/typescript/src/components/VideoPlayer.d.ts.map +1 -0
  169. package/lib/typescript/src/components/VideoPlayer.test.d.ts +2 -0
  170. package/lib/typescript/src/components/VideoPlayer.test.d.ts.map +1 -0
  171. package/lib/typescript/src/components/index.d.ts +0 -1
  172. package/lib/typescript/src/components/index.d.ts.map +1 -1
  173. package/lib/typescript/src/hooks/index.d.ts +0 -1
  174. package/lib/typescript/src/hooks/index.d.ts.map +1 -1
  175. package/package.json +4 -2
  176. package/src/camera/Camera.tsx +117 -26
  177. package/src/camera/CaptureFlash.test.tsx +11 -0
  178. package/src/camera/CaptureFlash.tsx +42 -0
  179. package/src/camera/Container.tsx +158 -64
  180. package/src/camera/FocusIndicator.test.tsx +17 -0
  181. package/src/camera/FocusIndicator.tsx +111 -27
  182. package/src/camera/colors/dark.test.ts +8 -0
  183. package/src/camera/colors/dark.ts +19 -0
  184. package/src/camera/footer/ActionRow.test.tsx +44 -0
  185. package/src/camera/footer/ActionRow.tsx +80 -0
  186. package/src/camera/footer/FlipButton.test.tsx +9 -0
  187. package/src/camera/footer/FlipButton.tsx +22 -0
  188. package/src/camera/footer/ModeSwitcherPill.test.tsx +29 -0
  189. package/src/camera/footer/ModeSwitcherPill.tsx +97 -0
  190. package/src/camera/footer/RecordingTimer.test.tsx +14 -0
  191. package/src/camera/footer/RecordingTimer.tsx +58 -0
  192. package/src/camera/footer/Shutter.test.tsx +26 -0
  193. package/src/camera/footer/Shutter.tsx +71 -0
  194. package/src/camera/footer/ThumbnailStack.test.tsx +19 -0
  195. package/src/camera/footer/ThumbnailStack.tsx +58 -0
  196. package/src/camera/footer/ZoomChips.test.tsx +9 -0
  197. package/src/camera/footer/ZoomChips.tsx +53 -0
  198. package/src/camera/footer/index.tsx +7 -1
  199. package/src/camera/icons/VolumeIcon.test.tsx +9 -0
  200. package/src/camera/icons/VolumeIcon.tsx +39 -0
  201. package/src/camera/index.tsx +11 -1
  202. package/src/camera/preview/PreviewBottomBar.test.tsx +43 -0
  203. package/src/camera/preview/PreviewBottomBar.tsx +79 -0
  204. package/src/camera/preview/PreviewOverlay.test.tsx +45 -0
  205. package/src/camera/preview/PreviewOverlay.tsx +99 -0
  206. package/src/camera/preview/PreviewTopBar.test.tsx +46 -0
  207. package/src/camera/preview/PreviewTopBar.tsx +91 -0
  208. package/src/camera/preview/groupTypes.test.ts +34 -0
  209. package/src/camera/preview/groupTypes.ts +15 -0
  210. package/src/camera/preview/index.tsx +3 -4
  211. package/src/camera/setup/SideRail.test.tsx +37 -0
  212. package/src/camera/setup/SideRail.tsx +161 -0
  213. package/src/camera/setup/index.tsx +2 -1
  214. package/src/components/Carousel/SlideItem.test.tsx +27 -0
  215. package/src/components/Carousel/SlideItem.tsx +11 -7
  216. package/src/components/VideoPlayer.test.tsx +8 -0
  217. package/src/components/VideoPlayer.tsx +30 -0
  218. package/src/components/index.tsx +0 -1
  219. package/src/hooks/index.ts +0 -1
  220. package/lib/module/camera/footer/Footer.js +0 -94
  221. package/lib/module/camera/footer/Footer.js.map +0 -1
  222. package/lib/module/camera/preview/PreView.js +0 -43
  223. package/lib/module/camera/preview/PreView.js.map +0 -1
  224. package/lib/module/camera/preview/PreViewContainer.js +0 -33
  225. package/lib/module/camera/preview/PreViewContainer.js.map +0 -1
  226. package/lib/module/camera/preview/PreviewFooter.js +0 -36
  227. package/lib/module/camera/preview/PreviewFooter.js.map +0 -1
  228. package/lib/module/camera/preview/SinglePre.js +0 -32
  229. package/lib/module/camera/preview/SinglePre.js.map +0 -1
  230. package/lib/module/camera/setup/SetUp.js +0 -74
  231. package/lib/module/camera/setup/SetUp.js.map +0 -1
  232. package/lib/module/components/PreviewThumbnail.js +0 -39
  233. package/lib/module/components/PreviewThumbnail.js.map +0 -1
  234. package/lib/module/hooks/useConfirm.js +0 -16
  235. package/lib/module/hooks/useConfirm.js.map +0 -1
  236. package/lib/typescript/src/camera/footer/Footer.d.ts +0 -14
  237. package/lib/typescript/src/camera/footer/Footer.d.ts.map +0 -1
  238. package/lib/typescript/src/camera/preview/PreView.d.ts +0 -7
  239. package/lib/typescript/src/camera/preview/PreView.d.ts.map +0 -1
  240. package/lib/typescript/src/camera/preview/PreViewContainer.d.ts +0 -9
  241. package/lib/typescript/src/camera/preview/PreViewContainer.d.ts.map +0 -1
  242. package/lib/typescript/src/camera/preview/PreviewFooter.d.ts +0 -7
  243. package/lib/typescript/src/camera/preview/PreviewFooter.d.ts.map +0 -1
  244. package/lib/typescript/src/camera/preview/SinglePre.d.ts +0 -7
  245. package/lib/typescript/src/camera/preview/SinglePre.d.ts.map +0 -1
  246. package/lib/typescript/src/camera/setup/SetUp.d.ts +0 -13
  247. package/lib/typescript/src/camera/setup/SetUp.d.ts.map +0 -1
  248. package/lib/typescript/src/components/PreviewThumbnail.d.ts +0 -9
  249. package/lib/typescript/src/components/PreviewThumbnail.d.ts.map +0 -1
  250. package/lib/typescript/src/hooks/useConfirm.d.ts +0 -2
  251. package/lib/typescript/src/hooks/useConfirm.d.ts.map +0 -1
  252. package/src/camera/footer/Footer.tsx +0 -113
  253. package/src/camera/preview/PreView.tsx +0 -32
  254. package/src/camera/preview/PreViewContainer.tsx +0 -30
  255. package/src/camera/preview/PreviewFooter.tsx +0 -38
  256. package/src/camera/preview/SinglePre.tsx +0 -30
  257. package/src/camera/setup/SetUp.tsx +0 -93
  258. package/src/components/PreviewThumbnail.tsx +0 -45
  259. package/src/hooks/useConfirm.tsx +0 -11
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+
3
+ import { render, fireEvent } from '@testing-library/react-native';
4
+ import { PreviewBottomBar } from "./PreviewBottomBar.js";
5
+ import { jsx as _jsx } from "react/jsx-runtime";
6
+ it('confirm 变体: 重拍/保存', () => {
7
+ const onRetake = jest.fn();
8
+ const onSave = jest.fn();
9
+ const {
10
+ getByTestId
11
+ } = render(/*#__PURE__*/_jsx(PreviewBottomBar, {
12
+ variant: "confirm",
13
+ index: 0,
14
+ total: 1,
15
+ onRetake: onRetake,
16
+ onSave: onSave,
17
+ onBack: () => {},
18
+ onDelete: () => {}
19
+ }));
20
+ fireEvent.press(getByTestId('retake-btn'));
21
+ expect(onRetake).toHaveBeenCalled();
22
+ fireEvent.press(getByTestId('save-btn'));
23
+ expect(onSave).toHaveBeenCalled();
24
+ });
25
+ it('gallery 变体: 第X/Y张 + 返回/删除', () => {
26
+ const onBack = jest.fn();
27
+ const onDelete = jest.fn();
28
+ const {
29
+ getByTestId,
30
+ getByText
31
+ } = render(/*#__PURE__*/_jsx(PreviewBottomBar, {
32
+ variant: "gallery",
33
+ index: 1,
34
+ total: 3,
35
+ onRetake: () => {},
36
+ onSave: () => {},
37
+ onBack: onBack,
38
+ onDelete: onDelete
39
+ }));
40
+ expect(getByText('第 2/3 张')).toBeTruthy();
41
+ fireEvent.press(getByTestId('back-btn'));
42
+ expect(onBack).toHaveBeenCalled();
43
+ fireEvent.press(getByTestId('delete-btn'));
44
+ expect(onDelete).toHaveBeenCalled();
45
+ });
46
+ //# sourceMappingURL=PreviewBottomBar.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["render","fireEvent","PreviewBottomBar","jsx","_jsx","it","onRetake","jest","fn","onSave","getByTestId","variant","index","total","onBack","onDelete","press","expect","toHaveBeenCalled","getByText","toBeTruthy"],"sourceRoot":"../../../../src","sources":["camera/preview/PreviewBottomBar.test.tsx"],"mappings":";;AAAA,SAASA,MAAM,EAAEC,SAAS,QAAQ,+BAA+B;AACjE,SAASC,gBAAgB,QAAQ,uBAAoB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAEtDC,EAAE,CAAC,mBAAmB,EAAE,MAAM;EAC5B,MAAMC,QAAQ,GAAGC,IAAI,CAACC,EAAE,CAAC,CAAC;EAC1B,MAAMC,MAAM,GAAGF,IAAI,CAACC,EAAE,CAAC,CAAC;EACxB,MAAM;IAAEE;EAAY,CAAC,GAAGV,MAAM,cAC5BI,IAAA,CAACF,gBAAgB;IACfS,OAAO,EAAC,SAAS;IACjBC,KAAK,EAAE,CAAE;IACTC,KAAK,EAAE,CAAE;IACTP,QAAQ,EAAEA,QAAS;IACnBG,MAAM,EAAEA,MAAO;IACfK,MAAM,EAAEA,CAAA,KAAM,CAAC,CAAE;IACjBC,QAAQ,EAAEA,CAAA,KAAM,CAAC;EAAE,CACpB,CACH,CAAC;EACDd,SAAS,CAACe,KAAK,CAACN,WAAW,CAAC,YAAY,CAAC,CAAC;EAC1CO,MAAM,CAACX,QAAQ,CAAC,CAACY,gBAAgB,CAAC,CAAC;EACnCjB,SAAS,CAACe,KAAK,CAACN,WAAW,CAAC,UAAU,CAAC,CAAC;EACxCO,MAAM,CAACR,MAAM,CAAC,CAACS,gBAAgB,CAAC,CAAC;AACnC,CAAC,CAAC;AAEFb,EAAE,CAAC,2BAA2B,EAAE,MAAM;EACpC,MAAMS,MAAM,GAAGP,IAAI,CAACC,EAAE,CAAC,CAAC;EACxB,MAAMO,QAAQ,GAAGR,IAAI,CAACC,EAAE,CAAC,CAAC;EAC1B,MAAM;IAAEE,WAAW;IAAES;EAAU,CAAC,GAAGnB,MAAM,cACvCI,IAAA,CAACF,gBAAgB;IACfS,OAAO,EAAC,SAAS;IACjBC,KAAK,EAAE,CAAE;IACTC,KAAK,EAAE,CAAE;IACTP,QAAQ,EAAEA,CAAA,KAAM,CAAC,CAAE;IACnBG,MAAM,EAAEA,CAAA,KAAM,CAAC,CAAE;IACjBK,MAAM,EAAEA,MAAO;IACfC,QAAQ,EAAEA;EAAS,CACpB,CACH,CAAC;EACDE,MAAM,CAACE,SAAS,CAAC,SAAS,CAAC,CAAC,CAACC,UAAU,CAAC,CAAC;EACzCnB,SAAS,CAACe,KAAK,CAACN,WAAW,CAAC,UAAU,CAAC,CAAC;EACxCO,MAAM,CAACH,MAAM,CAAC,CAACI,gBAAgB,CAAC,CAAC;EACjCjB,SAAS,CAACe,KAAK,CAACN,WAAW,CAAC,YAAY,CAAC,CAAC;EAC1CO,MAAM,CAACF,QAAQ,CAAC,CAACG,gBAAgB,CAAC,CAAC;AACrC,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+
3
+ import { useEffect, useMemo, useState } from 'react';
4
+ import { StyleSheet, View } from 'react-native';
5
+ import { confirm, toast, useThemedStyles } from '@unif/react-native-design';
6
+ import { Carousel } from "../../components/Carousel/index.js";
7
+ import { distinctTypes, filesOfType } from "./groupTypes.js";
8
+ import { PreviewTopBar } from "./PreviewTopBar.js";
9
+ import { PreviewBottomBar } from "./PreviewBottomBar.js";
10
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
11
+ export function PreviewOverlay({
12
+ files,
13
+ variant,
14
+ onRetake,
15
+ onSave,
16
+ onBack,
17
+ onDelete
18
+ }) {
19
+ const styles = useThemedStyles(makeStyles);
20
+ const types = useMemo(() => distinctTypes(files), [files]);
21
+ const [activeType, setActiveType] = useState(types[0] ?? 'single');
22
+ const [index, setIndex] = useState(0);
23
+
24
+ // 删除回收:当前类型被删空 → 切到剩余首个类型(无则关由 Container 处理)
25
+ useEffect(() => {
26
+ if (!types.includes(activeType)) {
27
+ setActiveType(types[0] ?? 'single');
28
+ setIndex(0);
29
+ }
30
+ }, [types, activeType]);
31
+
32
+ // confirm 不分 tab(全 files);gallery 按 activeType 过滤
33
+ const data = variant === 'confirm' ? files : filesOfType(files, activeType);
34
+ const current = data[index] ?? data[0];
35
+
36
+ // 删除后 index 越界 → 夹紧到末张(避免「第 X/Y」计数错位)
37
+ useEffect(() => {
38
+ if (index >= data.length && data.length > 0) setIndex(data.length - 1);
39
+ }, [index, data.length]);
40
+ const handleSave = () => {
41
+ toast.success('已保存');
42
+ onSave();
43
+ };
44
+ const handleDelete = async () => {
45
+ const ok = await confirm({
46
+ title: '确认删除?',
47
+ message: '图片删除后无法恢复'
48
+ });
49
+ if (ok && current) onDelete(current);
50
+ };
51
+ return /*#__PURE__*/_jsxs(View, {
52
+ style: styles.root,
53
+ testID: "preview-overlay",
54
+ children: [/*#__PURE__*/_jsx(PreviewTopBar, {
55
+ variant: variant,
56
+ files: files,
57
+ activeType: activeType,
58
+ onSelectType: t => {
59
+ setActiveType(t);
60
+ setIndex(0);
61
+ }
62
+ }), /*#__PURE__*/_jsx(View, {
63
+ style: styles.pager,
64
+ children: /*#__PURE__*/_jsx(Carousel, {
65
+ data: data,
66
+ onIndexChange: setIndex
67
+ })
68
+ }), /*#__PURE__*/_jsx(PreviewBottomBar, {
69
+ variant: variant,
70
+ index: index,
71
+ total: data.length,
72
+ onRetake: onRetake,
73
+ onSave: handleSave,
74
+ onBack: onBack,
75
+ onDelete: handleDelete
76
+ })]
77
+ });
78
+ }
79
+ const makeStyles = c => StyleSheet.create({
80
+ root: {
81
+ ...StyleSheet.absoluteFill,
82
+ backgroundColor: c.background,
83
+ zIndex: 50
84
+ },
85
+ pager: {
86
+ flex: 1
87
+ }
88
+ });
89
+ //# sourceMappingURL=PreviewOverlay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useEffect","useMemo","useState","StyleSheet","View","confirm","toast","useThemedStyles","Carousel","distinctTypes","filesOfType","PreviewTopBar","PreviewBottomBar","jsx","_jsx","jsxs","_jsxs","PreviewOverlay","files","variant","onRetake","onSave","onBack","onDelete","styles","makeStyles","types","activeType","setActiveType","index","setIndex","includes","data","current","length","handleSave","success","handleDelete","ok","title","message","style","root","testID","children","onSelectType","t","pager","onIndexChange","total","c","create","absoluteFill","backgroundColor","background","zIndex","flex"],"sourceRoot":"../../../../src","sources":["camera/preview/PreviewOverlay.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+
3
+ import { render } from '@testing-library/react-native';
4
+ import { PreviewOverlay } from "./PreviewOverlay.js";
5
+ import { jsx as _jsx } from "react/jsx-runtime";
6
+ const f = (cameraMode, id) => ({
7
+ id,
8
+ cameraType: 'back',
9
+ cameraMode,
10
+ path: `/${id}`,
11
+ uri: `file:///${id}`,
12
+ width: 1,
13
+ height: 1,
14
+ mime: cameraMode === 'video' ? 'video/mp4' : 'image/jpeg',
15
+ mode: cameraMode
16
+ });
17
+ const noop = {
18
+ onRetake: () => {},
19
+ onSave: () => {},
20
+ onBack: () => {},
21
+ onDelete: () => {}
22
+ };
23
+ it('confirm 变体: 重拍/保存 在', () => {
24
+ const {
25
+ getByTestId
26
+ } = render(/*#__PURE__*/_jsx(PreviewOverlay, {
27
+ files: [f('single', 'a')],
28
+ variant: "confirm",
29
+ ...noop
30
+ }));
31
+ expect(getByTestId('retake-btn')).toBeTruthy();
32
+ expect(getByTestId('save-btn')).toBeTruthy();
33
+ });
34
+ it('gallery 变体: 返回/删除 在', () => {
35
+ const {
36
+ getByTestId
37
+ } = render(/*#__PURE__*/_jsx(PreviewOverlay, {
38
+ files: [f('single', 'a'), f('single', 'b')],
39
+ variant: "gallery",
40
+ ...noop
41
+ }));
42
+ expect(getByTestId('back-btn')).toBeTruthy();
43
+ expect(getByTestId('delete-btn')).toBeTruthy();
44
+ });
45
+ //# sourceMappingURL=PreviewOverlay.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["render","PreviewOverlay","jsx","_jsx","f","cameraMode","id","cameraType","path","uri","width","height","mime","mode","noop","onRetake","onSave","onBack","onDelete","it","getByTestId","files","variant","expect","toBeTruthy"],"sourceRoot":"../../../../src","sources":["camera/preview/PreviewOverlay.test.tsx"],"mappings":";;AAAA,SAASA,MAAM,QAAQ,+BAA+B;AACtD,SAASC,cAAc,QAAQ,qBAAkB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAGlD,MAAMC,CAAC,GAAGA,CACRC,UAAyC,EACzCC,EAAU,MACW;EACrBA,EAAE;EACFC,UAAU,EAAE,MAAM;EAClBF,UAAU;EACVG,IAAI,EAAE,IAAIF,EAAE,EAAE;EACdG,GAAG,EAAE,WAAWH,EAAE,EAAE;EACpBI,KAAK,EAAE,CAAC;EACRC,MAAM,EAAE,CAAC;EACTC,IAAI,EAAEP,UAAU,KAAK,OAAO,GAAG,WAAW,GAAG,YAAY;EACzDQ,IAAI,EAAER;AACR,CAAC,CAAC;AAEF,MAAMS,IAAI,GAAG;EACXC,QAAQ,EAAEA,CAAA,KAAM,CAAC,CAAC;EAClBC,MAAM,EAAEA,CAAA,KAAM,CAAC,CAAC;EAChBC,MAAM,EAAEA,CAAA,KAAM,CAAC,CAAC;EAChBC,QAAQ,EAAEA,CAAA,KAAM,CAAC;AACnB,CAAC;AAEDC,EAAE,CAAC,qBAAqB,EAAE,MAAM;EAC9B,MAAM;IAAEC;EAAY,CAAC,GAAGpB,MAAM,cAC5BG,IAAA,CAACF,cAAc;IAACoB,KAAK,EAAE,CAACjB,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAE;IAACkB,OAAO,EAAC,SAAS;IAAA,GAAKR;EAAI,CAAG,CAC1E,CAAC;EACDS,MAAM,CAACH,WAAW,CAAC,YAAY,CAAC,CAAC,CAACI,UAAU,CAAC,CAAC;EAC9CD,MAAM,CAACH,WAAW,CAAC,UAAU,CAAC,CAAC,CAACI,UAAU,CAAC,CAAC;AAC9C,CAAC,CAAC;AAEFL,EAAE,CAAC,qBAAqB,EAAE,MAAM;EAC9B,MAAM;IAAEC;EAAY,CAAC,GAAGpB,MAAM,cAC5BG,IAAA,CAACF,cAAc;IACboB,KAAK,EAAE,CAACjB,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAEA,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAE;IAC5CkB,OAAO,EAAC,SAAS;IAAA,GACbR;EAAI,CACT,CACH,CAAC;EACDS,MAAM,CAACH,WAAW,CAAC,UAAU,CAAC,CAAC,CAACI,UAAU,CAAC,CAAC;EAC5CD,MAAM,CAACH,WAAW,CAAC,YAAY,CAAC,CAAC,CAACI,UAAU,CAAC,CAAC;AAChD,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+
3
+ import { StyleSheet, Text, TouchableOpacity, View } from 'react-native';
4
+ import { r, useThemedStyles } from '@unif/react-native-design';
5
+ import { distinctTypes, filesOfType } from "./groupTypes.js";
6
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
7
+ const LABEL = {
8
+ continuous: '连拍',
9
+ single: '单拍',
10
+ video: '视频'
11
+ };
12
+ export function PreviewTopBar({
13
+ variant,
14
+ files,
15
+ activeType,
16
+ onSelectType
17
+ }) {
18
+ const styles = useThemedStyles(makeStyles);
19
+ if (variant === 'confirm') {
20
+ return /*#__PURE__*/_jsx(View, {
21
+ style: styles.root,
22
+ children: /*#__PURE__*/_jsx(Text, {
23
+ style: styles.label,
24
+ children: LABEL[activeType]
25
+ })
26
+ });
27
+ }
28
+ const types = distinctTypes(files);
29
+ const total = files.length;
30
+ return /*#__PURE__*/_jsxs(View, {
31
+ style: styles.root,
32
+ children: [types.length > 1 && /*#__PURE__*/_jsx(View, {
33
+ style: styles.tabs,
34
+ children: types.map(t => {
35
+ const sel = t === activeType;
36
+ return /*#__PURE__*/_jsx(TouchableOpacity, {
37
+ testID: `type-tab-${t}`,
38
+ onPress: () => onSelectType(t),
39
+ style: [styles.tab, sel && styles.tabSel],
40
+ children: /*#__PURE__*/_jsxs(Text, {
41
+ style: [styles.tabTxt, sel && styles.tabTxtSel],
42
+ children: [LABEL[t], filesOfType(files, t).length]
43
+ })
44
+ }, t);
45
+ })
46
+ }), /*#__PURE__*/_jsxs(Text, {
47
+ style: styles.total,
48
+ children: ["\u5171 ", total, " \u5F20"]
49
+ })]
50
+ });
51
+ }
52
+ const makeStyles = c => StyleSheet.create({
53
+ root: {
54
+ minHeight: r(46),
55
+ flexDirection: 'row',
56
+ alignItems: 'center',
57
+ justifyContent: 'center',
58
+ gap: r(10),
59
+ paddingHorizontal: r(14),
60
+ paddingTop: r(14)
61
+ },
62
+ label: {
63
+ color: c.foreground,
64
+ fontSize: r(14),
65
+ fontWeight: '500'
66
+ },
67
+ tabs: {
68
+ flexDirection: 'row',
69
+ gap: r(4),
70
+ padding: r(4),
71
+ borderRadius: r(999),
72
+ backgroundColor: c.surface
73
+ },
74
+ tab: {
75
+ paddingVertical: r(7),
76
+ paddingHorizontal: r(16),
77
+ borderRadius: r(999)
78
+ },
79
+ tabSel: {
80
+ backgroundColor: '#EB6E00'
81
+ },
82
+ tabTxt: {
83
+ color: c.foreground,
84
+ fontSize: r(13),
85
+ fontWeight: '600'
86
+ },
87
+ tabTxtSel: {
88
+ color: '#fff'
89
+ },
90
+ total: {
91
+ color: c.foreground,
92
+ fontSize: r(13),
93
+ opacity: 0.7
94
+ }
95
+ });
96
+ //# sourceMappingURL=PreviewTopBar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["StyleSheet","Text","TouchableOpacity","View","r","useThemedStyles","distinctTypes","filesOfType","jsx","_jsx","jsxs","_jsxs","LABEL","continuous","single","video","PreviewTopBar","variant","files","activeType","onSelectType","styles","makeStyles","style","root","children","label","types","total","length","tabs","map","t","sel","testID","onPress","tab","tabSel","tabTxt","tabTxtSel","c","create","minHeight","flexDirection","alignItems","justifyContent","gap","paddingHorizontal","paddingTop","color","foreground","fontSize","fontWeight","padding","borderRadius","backgroundColor","surface","paddingVertical","opacity"],"sourceRoot":"../../../../src","sources":["camera/preview/PreviewTopBar.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+
3
+ import { render, fireEvent } from '@testing-library/react-native';
4
+ import { PreviewTopBar } from "./PreviewTopBar.js";
5
+ import { jsx as _jsx } from "react/jsx-runtime";
6
+ const f = (cameraMode, id) => ({
7
+ id,
8
+ cameraType: 'back',
9
+ cameraMode,
10
+ path: `/${id}`,
11
+ uri: `file:///${id}`,
12
+ width: 1,
13
+ height: 1,
14
+ mime: cameraMode === 'video' ? 'video/mp4' : 'image/jpeg',
15
+ mode: cameraMode
16
+ });
17
+ it('confirm 变体显示类型 label', () => {
18
+ const {
19
+ getByText
20
+ } = render(/*#__PURE__*/_jsx(PreviewTopBar, {
21
+ variant: "confirm",
22
+ files: [f('single', 'a')],
23
+ activeType: "single",
24
+ onSelectType: () => {}
25
+ }));
26
+ expect(getByText('单拍')).toBeTruthy();
27
+ });
28
+ it('gallery 多类型显示 tab + 共N张,点 tab 回调', () => {
29
+ const onSelectType = jest.fn();
30
+ const files = [f('continuous', 'a'), f('continuous', 'b'), f('single', 'c')];
31
+ const {
32
+ getByTestId,
33
+ getByText
34
+ } = render(/*#__PURE__*/_jsx(PreviewTopBar, {
35
+ variant: "gallery",
36
+ files: files,
37
+ activeType: "continuous",
38
+ onSelectType: onSelectType
39
+ }));
40
+ expect(getByText('共 3 张')).toBeTruthy();
41
+ fireEvent.press(getByTestId('type-tab-single'));
42
+ expect(onSelectType).toHaveBeenCalledWith('single');
43
+ });
44
+ //# sourceMappingURL=PreviewTopBar.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["render","fireEvent","PreviewTopBar","jsx","_jsx","f","cameraMode","id","cameraType","path","uri","width","height","mime","mode","it","getByText","variant","files","activeType","onSelectType","expect","toBeTruthy","jest","fn","getByTestId","press","toHaveBeenCalledWith"],"sourceRoot":"../../../../src","sources":["camera/preview/PreviewTopBar.test.tsx"],"mappings":";;AAAA,SAASA,MAAM,EAAEC,SAAS,QAAQ,+BAA+B;AACjE,SAASC,aAAa,QAAQ,oBAAiB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAGhD,MAAMC,CAAC,GAAGA,CACRC,UAAyC,EACzCC,EAAU,MACW;EACrBA,EAAE;EACFC,UAAU,EAAE,MAAM;EAClBF,UAAU;EACVG,IAAI,EAAE,IAAIF,EAAE,EAAE;EACdG,GAAG,EAAE,WAAWH,EAAE,EAAE;EACpBI,KAAK,EAAE,CAAC;EACRC,MAAM,EAAE,CAAC;EACTC,IAAI,EAAEP,UAAU,KAAK,OAAO,GAAG,WAAW,GAAG,YAAY;EACzDQ,IAAI,EAAER;AACR,CAAC,CAAC;AAEFS,EAAE,CAAC,sBAAsB,EAAE,MAAM;EAC/B,MAAM;IAAEC;EAAU,CAAC,GAAGhB,MAAM,cAC1BI,IAAA,CAACF,aAAa;IACZe,OAAO,EAAC,SAAS;IACjBC,KAAK,EAAE,CAACb,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAE;IAC1Bc,UAAU,EAAC,QAAQ;IACnBC,YAAY,EAAEA,CAAA,KAAM,CAAC;EAAE,CACxB,CACH,CAAC;EACDC,MAAM,CAACL,SAAS,CAAC,IAAI,CAAC,CAAC,CAACM,UAAU,CAAC,CAAC;AACtC,CAAC,CAAC;AAEFP,EAAE,CAAC,kCAAkC,EAAE,MAAM;EAC3C,MAAMK,YAAY,GAAGG,IAAI,CAACC,EAAE,CAAC,CAAC;EAC9B,MAAMN,KAAK,GAAG,CAACb,CAAC,CAAC,YAAY,EAAE,GAAG,CAAC,EAAEA,CAAC,CAAC,YAAY,EAAE,GAAG,CAAC,EAAEA,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;EAC5E,MAAM;IAAEoB,WAAW;IAAET;EAAU,CAAC,GAAGhB,MAAM,cACvCI,IAAA,CAACF,aAAa;IACZe,OAAO,EAAC,SAAS;IACjBC,KAAK,EAAEA,KAAM;IACbC,UAAU,EAAC,YAAY;IACvBC,YAAY,EAAEA;EAAa,CAC5B,CACH,CAAC;EACDC,MAAM,CAACL,SAAS,CAAC,OAAO,CAAC,CAAC,CAACM,UAAU,CAAC,CAAC;EACvCrB,SAAS,CAACyB,KAAK,CAACD,WAAW,CAAC,iBAAiB,CAAC,CAAC;EAC/CJ,MAAM,CAACD,YAAY,CAAC,CAACO,oBAAoB,CAAC,QAAQ,CAAC;AACrD,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+
3
+ const ORDER = ['continuous', 'single', 'video'];
4
+ export function distinctTypes(files) {
5
+ const present = new Set(files.map(f => f.cameraMode));
6
+ return ORDER.filter(t => present.has(t));
7
+ }
8
+ export function filesOfType(files, type) {
9
+ return files.filter(f => f.cameraMode === type);
10
+ }
11
+ //# sourceMappingURL=groupTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["ORDER","distinctTypes","files","present","Set","map","f","cameraMode","filter","t","has","filesOfType","type"],"sourceRoot":"../../../../src","sources":["camera/preview/groupTypes.ts"],"mappings":";;AAEA,MAAMA,KAAuB,GAAG,CAAC,YAAY,EAAE,QAAQ,EAAE,OAAO,CAAC;AAEjE,OAAO,SAASC,aAAaA,CAACC,KAAwB,EAAoB;EACxE,MAAMC,OAAO,GAAG,IAAIC,GAAG,CAACF,KAAK,CAACG,GAAG,CAAEC,CAAC,IAAKA,CAAC,CAACC,UAAU,CAAC,CAAC;EACvD,OAAOP,KAAK,CAACQ,MAAM,CAAEC,CAAC,IAAKN,OAAO,CAACO,GAAG,CAACD,CAAC,CAAC,CAAC;AAC5C;AAEA,OAAO,SAASE,WAAWA,CACzBT,KAAwB,EACxBU,IAAoB,EACD;EACnB,OAAOV,KAAK,CAACM,MAAM,CAAEF,CAAC,IAAKA,CAAC,CAACC,UAAU,KAAKK,IAAI,CAAC;AACnD","ignoreList":[]}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+
3
+ import { distinctTypes, filesOfType } from "./groupTypes.js";
4
+ const f = (cameraMode, id) => ({
5
+ id,
6
+ cameraType: 'back',
7
+ cameraMode,
8
+ path: `/${id}.jpg`,
9
+ uri: `file:///${id}.jpg`,
10
+ width: 1,
11
+ height: 1,
12
+ mime: cameraMode === 'video' ? 'video/mp4' : 'image/jpeg',
13
+ mode: cameraMode
14
+ });
15
+ it('distinctTypes 按 连拍/单拍/视频 顺序去重', () => {
16
+ const files = [f('single', 'a'), f('video', 'b'), f('single', 'c'), f('continuous', 'd')];
17
+ expect(distinctTypes(files)).toEqual(['continuous', 'single', 'video']);
18
+ expect(distinctTypes([f('single', 'a')])).toEqual(['single']);
19
+ expect(distinctTypes([])).toEqual([]);
20
+ });
21
+ it('filesOfType 过滤', () => {
22
+ const files = [f('single', 'a'), f('video', 'b'), f('single', 'c')];
23
+ expect(filesOfType(files, 'single').map(x => x.id)).toEqual(['a', 'c']);
24
+ });
25
+ //# sourceMappingURL=groupTypes.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["distinctTypes","filesOfType","f","cameraMode","id","cameraType","path","uri","width","height","mime","mode","it","files","expect","toEqual","map","x"],"sourceRoot":"../../../../src","sources":["camera/preview/groupTypes.test.ts"],"mappings":";;AAAA,SAASA,aAAa,EAAEC,WAAW,QAAQ,iBAAc;AAGzD,MAAMC,CAAC,GAAGA,CACRC,UAAyC,EACzCC,EAAU,MACW;EACrBA,EAAE;EACFC,UAAU,EAAE,MAAM;EAClBF,UAAU;EACVG,IAAI,EAAE,IAAIF,EAAE,MAAM;EAClBG,GAAG,EAAE,WAAWH,EAAE,MAAM;EACxBI,KAAK,EAAE,CAAC;EACRC,MAAM,EAAE,CAAC;EACTC,IAAI,EAAEP,UAAU,KAAK,OAAO,GAAG,WAAW,GAAG,YAAY;EACzDQ,IAAI,EAAER;AACR,CAAC,CAAC;AAEFS,EAAE,CAAC,+BAA+B,EAAE,MAAM;EACxC,MAAMC,KAAK,GAAG,CACZX,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,EAChBA,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,EACfA,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,EAChBA,CAAC,CAAC,YAAY,EAAE,GAAG,CAAC,CACrB;EACDY,MAAM,CAACd,aAAa,CAACa,KAAK,CAAC,CAAC,CAACE,OAAO,CAAC,CAAC,YAAY,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;EACvED,MAAM,CAACd,aAAa,CAAC,CAACE,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAACa,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC;EAC7DD,MAAM,CAACd,aAAa,CAAC,EAAE,CAAC,CAAC,CAACe,OAAO,CAAC,EAAE,CAAC;AACvC,CAAC,CAAC;AAEFH,EAAE,CAAC,gBAAgB,EAAE,MAAM;EACzB,MAAMC,KAAK,GAAG,CAACX,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAEA,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,EAAEA,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;EACnEY,MAAM,CAACb,WAAW,CAACY,KAAK,EAAE,QAAQ,CAAC,CAACG,GAAG,CAAEC,CAAC,IAAKA,CAAC,CAACb,EAAE,CAAC,CAAC,CAACW,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAC3E,CAAC,CAAC","ignoreList":[]}
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
 
3
- export { SinglePre } from "./SinglePre.js";
4
- export { PreView } from "./PreView.js";
5
- export { PreviewFooter } from "./PreviewFooter.js";
6
- export { PreViewContainer } from "./PreViewContainer.js";
3
+ export { PreviewOverlay } from "./PreviewOverlay.js";
4
+ export { PreviewTopBar } from "./PreviewTopBar.js";
5
+ export { PreviewBottomBar } from "./PreviewBottomBar.js";
7
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["SinglePre","PreView","PreviewFooter","PreViewContainer"],"sourceRoot":"../../../../src","sources":["camera/preview/index.tsx"],"mappings":";;AAAA,SAASA,SAAS,QAAQ,gBAAa;AACvC,SAASC,OAAO,QAAQ,cAAW;AACnC,SAASC,aAAa,QAAQ,oBAAiB;AAC/C,SAASC,gBAAgB,QAAQ,uBAAoB","ignoreList":[]}
1
+ {"version":3,"names":["PreviewOverlay","PreviewTopBar","PreviewBottomBar"],"sourceRoot":"../../../../src","sources":["camera/preview/index.tsx"],"mappings":";;AAAA,SAASA,cAAc,QAAQ,qBAAkB;AACjD,SAASC,aAAa,QAAQ,oBAAiB;AAC/C,SAASC,gBAAgB,QAAQ,uBAAoB","ignoreList":[]}
@@ -0,0 +1,138 @@
1
+ "use strict";
2
+
3
+ import { useState } from 'react';
4
+ import { StyleSheet, Text, TouchableOpacity, View } from 'react-native';
5
+ import { Icon, r } from '@unif/react-native-design';
6
+ import { DARK } from "../colors/dark.js";
7
+ import { VolumeIcon } from "../icons/VolumeIcon.js";
8
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
9
+ const flashIcon = {
10
+ off: 'flash-off',
11
+ on: 'flash-on',
12
+ auto: 'flash-auto'
13
+ };
14
+ const FLASH_OPTS = [{
15
+ key: 'auto',
16
+ label: '自动'
17
+ }, {
18
+ key: 'on',
19
+ label: '打开'
20
+ }, {
21
+ key: 'off',
22
+ label: '关闭'
23
+ }];
24
+ export function SideRail({
25
+ flash,
26
+ aspectRatio,
27
+ sound,
28
+ grid,
29
+ onChangeFlash,
30
+ onChangeAspectRatio,
31
+ onToggleSound,
32
+ onToggleGrid
33
+ }) {
34
+ const [flashOpen, setFlashOpen] = useState(false);
35
+ return /*#__PURE__*/_jsxs(View, {
36
+ style: styles.rail,
37
+ children: [/*#__PURE__*/_jsx(TouchableOpacity, {
38
+ testID: "aspect-btn",
39
+ style: styles.btn,
40
+ onPress: () => onChangeAspectRatio(aspectRatio === '4:3' ? '16:9' : '4:3'),
41
+ children: /*#__PURE__*/_jsx(Icon, {
42
+ name: aspectRatio === '4:3' ? 'aspect-4-3' : 'aspect-16-9',
43
+ size: r(20),
44
+ color: DARK.white95
45
+ })
46
+ }), /*#__PURE__*/_jsxs(View, {
47
+ children: [/*#__PURE__*/_jsx(TouchableOpacity, {
48
+ testID: "flash-btn",
49
+ style: [styles.btn, flash !== 'off' && styles.btnActive],
50
+ onPress: () => setFlashOpen(v => !v),
51
+ children: /*#__PURE__*/_jsx(Icon, {
52
+ name: flashIcon[flash],
53
+ size: r(20),
54
+ color: flash !== 'off' ? DARK.white : DARK.white95
55
+ })
56
+ }), flashOpen && /*#__PURE__*/_jsx(View, {
57
+ style: styles.dropdown,
58
+ children: FLASH_OPTS.map(o => /*#__PURE__*/_jsxs(TouchableOpacity, {
59
+ testID: `flash-opt-${o.key}`,
60
+ style: styles.opt,
61
+ onPress: () => {
62
+ onChangeFlash(o.key);
63
+ setFlashOpen(false);
64
+ },
65
+ children: [/*#__PURE__*/_jsx(Icon, {
66
+ name: flashIcon[o.key],
67
+ size: r(18),
68
+ color: flash === o.key ? DARK.orange : DARK.white
69
+ }), /*#__PURE__*/_jsx(Text, {
70
+ style: [styles.optTxt, flash === o.key && styles.optTxtSel],
71
+ children: o.label
72
+ })]
73
+ }, o.key))
74
+ })]
75
+ }), /*#__PURE__*/_jsx(TouchableOpacity, {
76
+ testID: "sound-btn",
77
+ style: [styles.btn, sound && styles.btnActive],
78
+ onPress: onToggleSound,
79
+ children: /*#__PURE__*/_jsx(VolumeIcon, {
80
+ on: sound,
81
+ size: r(20),
82
+ color: sound ? DARK.white : DARK.white95
83
+ })
84
+ }), /*#__PURE__*/_jsx(TouchableOpacity, {
85
+ testID: "grid-btn",
86
+ style: [styles.btn, grid && styles.btnActive],
87
+ onPress: onToggleGrid,
88
+ children: /*#__PURE__*/_jsx(Icon, {
89
+ name: "grid",
90
+ size: r(18),
91
+ color: grid ? DARK.white : DARK.white95
92
+ })
93
+ })]
94
+ });
95
+ }
96
+ const styles = StyleSheet.create({
97
+ rail: {
98
+ gap: r(8),
99
+ padding: r(6),
100
+ paddingVertical: r(10),
101
+ borderRadius: r(26),
102
+ backgroundColor: DARK.black42
103
+ },
104
+ btn: {
105
+ width: r(40),
106
+ height: r(40),
107
+ borderRadius: r(999),
108
+ alignItems: 'center',
109
+ justifyContent: 'center'
110
+ },
111
+ btnActive: {
112
+ backgroundColor: DARK.orange95
113
+ },
114
+ dropdown: {
115
+ position: 'absolute',
116
+ left: r(52),
117
+ top: 0,
118
+ minWidth: r(130),
119
+ padding: r(6),
120
+ borderRadius: r(12),
121
+ backgroundColor: 'rgba(28,28,30,0.94)'
122
+ },
123
+ opt: {
124
+ flexDirection: 'row',
125
+ alignItems: 'center',
126
+ gap: r(8),
127
+ padding: r(10),
128
+ borderRadius: r(8)
129
+ },
130
+ optTxt: {
131
+ color: DARK.white,
132
+ fontSize: r(14)
133
+ },
134
+ optTxtSel: {
135
+ color: DARK.orange
136
+ }
137
+ });
138
+ //# sourceMappingURL=SideRail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useState","StyleSheet","Text","TouchableOpacity","View","Icon","r","DARK","VolumeIcon","jsx","_jsx","jsxs","_jsxs","flashIcon","off","on","auto","FLASH_OPTS","key","label","SideRail","flash","aspectRatio","sound","grid","onChangeFlash","onChangeAspectRatio","onToggleSound","onToggleGrid","flashOpen","setFlashOpen","style","styles","rail","children","testID","btn","onPress","name","size","color","white95","btnActive","v","white","dropdown","map","o","opt","orange","optTxt","optTxtSel","create","gap","padding","paddingVertical","borderRadius","backgroundColor","black42","width","height","alignItems","justifyContent","orange95","position","left","top","minWidth","flexDirection","fontSize"],"sourceRoot":"../../../../src","sources":["camera/setup/SideRail.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+
3
+ import { render, fireEvent } from '@testing-library/react-native';
4
+ import { SideRail } from "./SideRail.js";
5
+ import { jsx as _jsx } from "react/jsx-runtime";
6
+ const base = {
7
+ flash: 'off',
8
+ aspectRatio: '4:3',
9
+ sound: true,
10
+ grid: false,
11
+ onChangeFlash: jest.fn(),
12
+ onChangeAspectRatio: jest.fn(),
13
+ onToggleSound: jest.fn(),
14
+ onToggleGrid: jest.fn()
15
+ };
16
+ it('toggles aspect / sound / grid', () => {
17
+ const p = {
18
+ ...base,
19
+ onChangeAspectRatio: jest.fn(),
20
+ onToggleSound: jest.fn(),
21
+ onToggleGrid: jest.fn()
22
+ };
23
+ const {
24
+ getByTestId
25
+ } = render(/*#__PURE__*/_jsx(SideRail, {
26
+ ...p
27
+ }));
28
+ fireEvent.press(getByTestId('aspect-btn'));
29
+ expect(p.onChangeAspectRatio).toHaveBeenCalledWith('16:9');
30
+ fireEvent.press(getByTestId('sound-btn'));
31
+ expect(p.onToggleSound).toHaveBeenCalled();
32
+ fireEvent.press(getByTestId('grid-btn'));
33
+ expect(p.onToggleGrid).toHaveBeenCalled();
34
+ });
35
+ it('flash dropdown selects a mode', () => {
36
+ const p = {
37
+ ...base,
38
+ onChangeFlash: jest.fn()
39
+ };
40
+ const {
41
+ getByTestId
42
+ } = render(/*#__PURE__*/_jsx(SideRail, {
43
+ ...p
44
+ }));
45
+ fireEvent.press(getByTestId('flash-btn'));
46
+ fireEvent.press(getByTestId('flash-opt-on'));
47
+ expect(p.onChangeFlash).toHaveBeenCalledWith('on');
48
+ });
49
+ //# sourceMappingURL=SideRail.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["render","fireEvent","SideRail","jsx","_jsx","base","flash","aspectRatio","sound","grid","onChangeFlash","jest","fn","onChangeAspectRatio","onToggleSound","onToggleGrid","it","p","getByTestId","press","expect","toHaveBeenCalledWith","toHaveBeenCalled"],"sourceRoot":"../../../../src","sources":["camera/setup/SideRail.test.tsx"],"mappings":";;AAAA,SAASA,MAAM,EAAEC,SAAS,QAAQ,+BAA+B;AACjE,SAASC,QAAQ,QAAQ,eAAY;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAEtC,MAAMC,IAAI,GAAG;EACXC,KAAK,EAAE,KAAc;EACrBC,WAAW,EAAE,KAAc;EAC3BC,KAAK,EAAE,IAAI;EACXC,IAAI,EAAE,KAAK;EACXC,aAAa,EAAEC,IAAI,CAACC,EAAE,CAAC,CAAC;EACxBC,mBAAmB,EAAEF,IAAI,CAACC,EAAE,CAAC,CAAC;EAC9BE,aAAa,EAAEH,IAAI,CAACC,EAAE,CAAC,CAAC;EACxBG,YAAY,EAAEJ,IAAI,CAACC,EAAE,CAAC;AACxB,CAAC;AAEDI,EAAE,CAAC,+BAA+B,EAAE,MAAM;EACxC,MAAMC,CAAC,GAAG;IACR,GAAGZ,IAAI;IACPQ,mBAAmB,EAAEF,IAAI,CAACC,EAAE,CAAC,CAAC;IAC9BE,aAAa,EAAEH,IAAI,CAACC,EAAE,CAAC,CAAC;IACxBG,YAAY,EAAEJ,IAAI,CAACC,EAAE,CAAC;EACxB,CAAC;EACD,MAAM;IAAEM;EAAY,CAAC,GAAGlB,MAAM,cAACI,IAAA,CAACF,QAAQ;IAAA,GAAKe;EAAC,CAAG,CAAC,CAAC;EACnDhB,SAAS,CAACkB,KAAK,CAACD,WAAW,CAAC,YAAY,CAAC,CAAC;EAC1CE,MAAM,CAACH,CAAC,CAACJ,mBAAmB,CAAC,CAACQ,oBAAoB,CAAC,MAAM,CAAC;EAC1DpB,SAAS,CAACkB,KAAK,CAACD,WAAW,CAAC,WAAW,CAAC,CAAC;EACzCE,MAAM,CAACH,CAAC,CAACH,aAAa,CAAC,CAACQ,gBAAgB,CAAC,CAAC;EAC1CrB,SAAS,CAACkB,KAAK,CAACD,WAAW,CAAC,UAAU,CAAC,CAAC;EACxCE,MAAM,CAACH,CAAC,CAACF,YAAY,CAAC,CAACO,gBAAgB,CAAC,CAAC;AAC3C,CAAC,CAAC;AAEFN,EAAE,CAAC,+BAA+B,EAAE,MAAM;EACxC,MAAMC,CAAC,GAAG;IAAE,GAAGZ,IAAI;IAAEK,aAAa,EAAEC,IAAI,CAACC,EAAE,CAAC;EAAE,CAAC;EAC/C,MAAM;IAAEM;EAAY,CAAC,GAAGlB,MAAM,cAACI,IAAA,CAACF,QAAQ;IAAA,GAAKe;EAAC,CAAG,CAAC,CAAC;EACnDhB,SAAS,CAACkB,KAAK,CAACD,WAAW,CAAC,WAAW,CAAC,CAAC;EACzCjB,SAAS,CAACkB,KAAK,CAACD,WAAW,CAAC,cAAc,CAAC,CAAC;EAC5CE,MAAM,CAACH,CAAC,CAACP,aAAa,CAAC,CAACW,oBAAoB,CAAC,IAAI,CAAC;AACpD,CAAC,CAAC","ignoreList":[]}
@@ -1,4 +1,4 @@
1
1
  "use strict";
2
2
 
3
- export { SetUp } from "./SetUp.js";
3
+ export { SideRail } from "./SideRail.js";
4
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["SetUp"],"sourceRoot":"../../../../src","sources":["camera/setup/index.tsx"],"mappings":";;AAAA,SAASA,KAAK,QAA0C,YAAS","ignoreList":[]}
1
+ {"version":3,"names":["SideRail"],"sourceRoot":"../../../../src","sources":["camera/setup/index.tsx"],"mappings":";;AAAA,SAASA,QAAQ,QAAQ,eAAY","ignoreList":[]}