@unif/react-native-camera 2.6.0 → 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.
- package/README.md +14 -0
- package/lib/module/camera/Camera.js +96 -27
- package/lib/module/camera/Camera.js.map +1 -1
- package/lib/module/camera/CaptureFlash.js +38 -0
- package/lib/module/camera/CaptureFlash.js.map +1 -0
- package/lib/module/camera/CaptureFlash.test.js +19 -0
- package/lib/module/camera/CaptureFlash.test.js.map +1 -0
- package/lib/module/camera/Container.js +166 -64
- package/lib/module/camera/Container.js.map +1 -1
- package/lib/module/camera/FocusIndicator.js +99 -23
- package/lib/module/camera/FocusIndicator.js.map +1 -1
- package/lib/module/camera/FocusIndicator.test.js +27 -0
- package/lib/module/camera/FocusIndicator.test.js.map +1 -0
- package/lib/module/camera/colors/dark.js +22 -0
- package/lib/module/camera/colors/dark.js.map +1 -0
- package/lib/module/camera/colors/dark.test.js +10 -0
- package/lib/module/camera/colors/dark.test.js.map +1 -0
- package/lib/module/camera/footer/ActionRow.js +65 -0
- package/lib/module/camera/footer/ActionRow.js.map +1 -0
- package/lib/module/camera/footer/ActionRow.test.js +53 -0
- package/lib/module/camera/footer/ActionRow.test.js.map +1 -0
- package/lib/module/camera/footer/FlipButton.js +31 -0
- package/lib/module/camera/footer/FlipButton.js.map +1 -0
- package/lib/module/camera/footer/FlipButton.test.js +16 -0
- package/lib/module/camera/footer/FlipButton.test.js.map +1 -0
- package/lib/module/camera/footer/ModeSwitcherPill.js +89 -0
- package/lib/module/camera/footer/ModeSwitcherPill.js.map +1 -0
- package/lib/module/camera/footer/ModeSwitcherPill.test.js +43 -0
- package/lib/module/camera/footer/ModeSwitcherPill.test.js.map +1 -0
- package/lib/module/camera/footer/RecordingTimer.js +66 -0
- package/lib/module/camera/footer/RecordingTimer.js.map +1 -0
- package/lib/module/camera/footer/RecordingTimer.test.js +20 -0
- package/lib/module/camera/footer/RecordingTimer.test.js.map +1 -0
- package/lib/module/camera/footer/Shutter.js +70 -0
- package/lib/module/camera/footer/Shutter.js.map +1 -0
- package/lib/module/camera/footer/Shutter.test.js +42 -0
- package/lib/module/camera/footer/Shutter.test.js.map +1 -0
- package/lib/module/camera/footer/ThumbnailStack.js +71 -0
- package/lib/module/camera/footer/ThumbnailStack.js.map +1 -0
- package/lib/module/camera/footer/ThumbnailStack.test.js +30 -0
- package/lib/module/camera/footer/ThumbnailStack.test.js.map +1 -0
- package/lib/module/camera/footer/ZoomChips.js +57 -0
- package/lib/module/camera/footer/ZoomChips.js.map +1 -0
- package/lib/module/camera/footer/ZoomChips.test.js +17 -0
- package/lib/module/camera/footer/ZoomChips.test.js.map +1 -0
- package/lib/module/camera/footer/index.js +7 -1
- package/lib/module/camera/footer/index.js.map +1 -1
- package/lib/module/camera/icons/VolumeIcon.js +44 -0
- package/lib/module/camera/icons/VolumeIcon.js.map +1 -0
- package/lib/module/camera/icons/VolumeIcon.test.js +18 -0
- package/lib/module/camera/icons/VolumeIcon.test.js.map +1 -0
- package/lib/module/camera/index.js +3 -1
- package/lib/module/camera/index.js.map +1 -1
- package/lib/module/camera/preview/PreviewBottomBar.js +69 -0
- package/lib/module/camera/preview/PreviewBottomBar.js.map +1 -0
- package/lib/module/camera/preview/PreviewBottomBar.test.js +46 -0
- package/lib/module/camera/preview/PreviewBottomBar.test.js.map +1 -0
- package/lib/module/camera/preview/PreviewOverlay.js +89 -0
- package/lib/module/camera/preview/PreviewOverlay.js.map +1 -0
- package/lib/module/camera/preview/PreviewOverlay.test.js +45 -0
- package/lib/module/camera/preview/PreviewOverlay.test.js.map +1 -0
- package/lib/module/camera/preview/PreviewTopBar.js +96 -0
- package/lib/module/camera/preview/PreviewTopBar.js.map +1 -0
- package/lib/module/camera/preview/PreviewTopBar.test.js +44 -0
- package/lib/module/camera/preview/PreviewTopBar.test.js.map +1 -0
- package/lib/module/camera/preview/groupTypes.js +11 -0
- package/lib/module/camera/preview/groupTypes.js.map +1 -0
- package/lib/module/camera/preview/groupTypes.test.js +25 -0
- package/lib/module/camera/preview/groupTypes.test.js.map +1 -0
- package/lib/module/camera/preview/index.js +3 -4
- package/lib/module/camera/preview/index.js.map +1 -1
- package/lib/module/camera/setup/SideRail.js +138 -0
- package/lib/module/camera/setup/SideRail.js.map +1 -0
- package/lib/module/camera/setup/SideRail.test.js +49 -0
- package/lib/module/camera/setup/SideRail.test.js.map +1 -0
- package/lib/module/camera/setup/index.js +1 -1
- package/lib/module/camera/setup/index.js.map +1 -1
- package/lib/module/components/Carousel/SlideItem.js +5 -3
- package/lib/module/components/Carousel/SlideItem.js.map +1 -1
- package/lib/module/components/Carousel/SlideItem.test.js +39 -0
- package/lib/module/components/Carousel/SlideItem.test.js.map +1 -0
- package/lib/module/components/VideoPlayer.js +34 -0
- package/lib/module/components/VideoPlayer.js.map +1 -0
- package/lib/module/components/VideoPlayer.test.js +15 -0
- package/lib/module/components/VideoPlayer.test.js.map +1 -0
- package/lib/module/components/index.js +0 -1
- package/lib/module/components/index.js.map +1 -1
- package/lib/module/hooks/index.js +0 -1
- package/lib/module/hooks/index.js.map +1 -1
- package/lib/typescript/src/camera/Camera.d.ts +3 -0
- package/lib/typescript/src/camera/Camera.d.ts.map +1 -1
- package/lib/typescript/src/camera/CaptureFlash.d.ts +6 -0
- package/lib/typescript/src/camera/CaptureFlash.d.ts.map +1 -0
- package/lib/typescript/src/camera/CaptureFlash.test.d.ts +2 -0
- package/lib/typescript/src/camera/CaptureFlash.test.d.ts.map +1 -0
- package/lib/typescript/src/camera/Container.d.ts.map +1 -1
- package/lib/typescript/src/camera/FocusIndicator.d.ts.map +1 -1
- package/lib/typescript/src/camera/FocusIndicator.test.d.ts +2 -0
- package/lib/typescript/src/camera/FocusIndicator.test.d.ts.map +1 -0
- package/lib/typescript/src/camera/colors/dark.d.ts +18 -0
- package/lib/typescript/src/camera/colors/dark.d.ts.map +1 -0
- package/lib/typescript/src/camera/colors/dark.test.d.ts +2 -0
- package/lib/typescript/src/camera/colors/dark.test.d.ts.map +1 -0
- package/lib/typescript/src/camera/footer/ActionRow.d.ts +14 -0
- package/lib/typescript/src/camera/footer/ActionRow.d.ts.map +1 -0
- package/lib/typescript/src/camera/footer/ActionRow.test.d.ts +2 -0
- package/lib/typescript/src/camera/footer/ActionRow.test.d.ts.map +1 -0
- package/lib/typescript/src/camera/footer/FlipButton.d.ts +4 -0
- package/lib/typescript/src/camera/footer/FlipButton.d.ts.map +1 -0
- package/lib/typescript/src/camera/footer/FlipButton.test.d.ts +2 -0
- package/lib/typescript/src/camera/footer/FlipButton.test.d.ts.map +1 -0
- package/lib/typescript/src/camera/footer/ModeSwitcherPill.d.ts +10 -0
- package/lib/typescript/src/camera/footer/ModeSwitcherPill.d.ts.map +1 -0
- package/lib/typescript/src/camera/footer/ModeSwitcherPill.test.d.ts +2 -0
- package/lib/typescript/src/camera/footer/ModeSwitcherPill.test.d.ts.map +1 -0
- package/lib/typescript/src/camera/footer/RecordingTimer.d.ts +5 -0
- package/lib/typescript/src/camera/footer/RecordingTimer.d.ts.map +1 -0
- package/lib/typescript/src/camera/footer/RecordingTimer.test.d.ts +2 -0
- package/lib/typescript/src/camera/footer/RecordingTimer.test.d.ts.map +1 -0
- package/lib/typescript/src/camera/footer/Shutter.d.ts +9 -0
- package/lib/typescript/src/camera/footer/Shutter.d.ts.map +1 -0
- package/lib/typescript/src/camera/footer/Shutter.test.d.ts +2 -0
- package/lib/typescript/src/camera/footer/Shutter.test.d.ts.map +1 -0
- package/lib/typescript/src/camera/footer/ThumbnailStack.d.ts +8 -0
- package/lib/typescript/src/camera/footer/ThumbnailStack.d.ts.map +1 -0
- package/lib/typescript/src/camera/footer/ThumbnailStack.test.d.ts +2 -0
- package/lib/typescript/src/camera/footer/ThumbnailStack.test.d.ts.map +1 -0
- package/lib/typescript/src/camera/footer/ZoomChips.d.ts +5 -0
- package/lib/typescript/src/camera/footer/ZoomChips.d.ts.map +1 -0
- package/lib/typescript/src/camera/footer/ZoomChips.test.d.ts +2 -0
- package/lib/typescript/src/camera/footer/ZoomChips.test.d.ts.map +1 -0
- package/lib/typescript/src/camera/footer/index.d.ts +7 -1
- package/lib/typescript/src/camera/footer/index.d.ts.map +1 -1
- package/lib/typescript/src/camera/icons/VolumeIcon.d.ts +8 -0
- package/lib/typescript/src/camera/icons/VolumeIcon.d.ts.map +1 -0
- package/lib/typescript/src/camera/icons/VolumeIcon.test.d.ts +2 -0
- package/lib/typescript/src/camera/icons/VolumeIcon.test.d.ts.map +1 -0
- package/lib/typescript/src/camera/index.d.ts +3 -1
- package/lib/typescript/src/camera/index.d.ts.map +1 -1
- package/lib/typescript/src/camera/preview/PreviewBottomBar.d.ts +12 -0
- package/lib/typescript/src/camera/preview/PreviewBottomBar.d.ts.map +1 -0
- package/lib/typescript/src/camera/preview/PreviewBottomBar.test.d.ts +2 -0
- package/lib/typescript/src/camera/preview/PreviewBottomBar.test.d.ts.map +1 -0
- package/lib/typescript/src/camera/preview/PreviewOverlay.d.ts +12 -0
- package/lib/typescript/src/camera/preview/PreviewOverlay.d.ts.map +1 -0
- package/lib/typescript/src/camera/preview/PreviewOverlay.test.d.ts +2 -0
- package/lib/typescript/src/camera/preview/PreviewOverlay.test.d.ts.map +1 -0
- package/lib/typescript/src/camera/preview/PreviewTopBar.d.ts +10 -0
- package/lib/typescript/src/camera/preview/PreviewTopBar.d.ts.map +1 -0
- package/lib/typescript/src/camera/preview/PreviewTopBar.test.d.ts +2 -0
- package/lib/typescript/src/camera/preview/PreviewTopBar.test.d.ts.map +1 -0
- package/lib/typescript/src/camera/preview/groupTypes.d.ts +4 -0
- package/lib/typescript/src/camera/preview/groupTypes.d.ts.map +1 -0
- package/lib/typescript/src/camera/preview/groupTypes.test.d.ts +2 -0
- package/lib/typescript/src/camera/preview/groupTypes.test.d.ts.map +1 -0
- package/lib/typescript/src/camera/preview/index.d.ts +3 -4
- package/lib/typescript/src/camera/preview/index.d.ts.map +1 -1
- package/lib/typescript/src/camera/setup/SideRail.d.ts +15 -0
- package/lib/typescript/src/camera/setup/SideRail.d.ts.map +1 -0
- package/lib/typescript/src/camera/setup/SideRail.test.d.ts +2 -0
- package/lib/typescript/src/camera/setup/SideRail.test.d.ts.map +1 -0
- package/lib/typescript/src/camera/setup/index.d.ts +2 -1
- package/lib/typescript/src/camera/setup/index.d.ts.map +1 -1
- package/lib/typescript/src/components/Carousel/SlideItem.d.ts.map +1 -1
- package/lib/typescript/src/components/Carousel/SlideItem.test.d.ts +2 -0
- package/lib/typescript/src/components/Carousel/SlideItem.test.d.ts.map +1 -0
- package/lib/typescript/src/components/VideoPlayer.d.ts +4 -0
- package/lib/typescript/src/components/VideoPlayer.d.ts.map +1 -0
- package/lib/typescript/src/components/VideoPlayer.test.d.ts +2 -0
- package/lib/typescript/src/components/VideoPlayer.test.d.ts.map +1 -0
- package/lib/typescript/src/components/index.d.ts +0 -1
- package/lib/typescript/src/components/index.d.ts.map +1 -1
- package/lib/typescript/src/hooks/index.d.ts +0 -1
- package/lib/typescript/src/hooks/index.d.ts.map +1 -1
- package/package.json +7 -3
- package/src/camera/Camera.tsx +117 -26
- package/src/camera/CaptureFlash.test.tsx +11 -0
- package/src/camera/CaptureFlash.tsx +42 -0
- package/src/camera/Container.tsx +158 -64
- package/src/camera/FocusIndicator.test.tsx +17 -0
- package/src/camera/FocusIndicator.tsx +111 -27
- package/src/camera/colors/dark.test.ts +8 -0
- package/src/camera/colors/dark.ts +19 -0
- package/src/camera/footer/ActionRow.test.tsx +44 -0
- package/src/camera/footer/ActionRow.tsx +80 -0
- package/src/camera/footer/FlipButton.test.tsx +9 -0
- package/src/camera/footer/FlipButton.tsx +22 -0
- package/src/camera/footer/ModeSwitcherPill.test.tsx +29 -0
- package/src/camera/footer/ModeSwitcherPill.tsx +97 -0
- package/src/camera/footer/RecordingTimer.test.tsx +14 -0
- package/src/camera/footer/RecordingTimer.tsx +58 -0
- package/src/camera/footer/Shutter.test.tsx +26 -0
- package/src/camera/footer/Shutter.tsx +71 -0
- package/src/camera/footer/ThumbnailStack.test.tsx +19 -0
- package/src/camera/footer/ThumbnailStack.tsx +58 -0
- package/src/camera/footer/ZoomChips.test.tsx +9 -0
- package/src/camera/footer/ZoomChips.tsx +53 -0
- package/src/camera/footer/index.tsx +7 -1
- package/src/camera/icons/VolumeIcon.test.tsx +9 -0
- package/src/camera/icons/VolumeIcon.tsx +39 -0
- package/src/camera/index.tsx +11 -1
- package/src/camera/preview/PreviewBottomBar.test.tsx +43 -0
- package/src/camera/preview/PreviewBottomBar.tsx +79 -0
- package/src/camera/preview/PreviewOverlay.test.tsx +45 -0
- package/src/camera/preview/PreviewOverlay.tsx +99 -0
- package/src/camera/preview/PreviewTopBar.test.tsx +46 -0
- package/src/camera/preview/PreviewTopBar.tsx +91 -0
- package/src/camera/preview/groupTypes.test.ts +34 -0
- package/src/camera/preview/groupTypes.ts +15 -0
- package/src/camera/preview/index.tsx +3 -4
- package/src/camera/setup/SideRail.test.tsx +37 -0
- package/src/camera/setup/SideRail.tsx +161 -0
- package/src/camera/setup/index.tsx +2 -1
- package/src/components/Carousel/SlideItem.test.tsx +27 -0
- package/src/components/Carousel/SlideItem.tsx +11 -7
- package/src/components/VideoPlayer.test.tsx +8 -0
- package/src/components/VideoPlayer.tsx +30 -0
- package/src/components/index.tsx +0 -1
- package/src/hooks/index.ts +0 -1
- package/lib/module/camera/footer/Footer.js +0 -94
- package/lib/module/camera/footer/Footer.js.map +0 -1
- package/lib/module/camera/preview/PreView.js +0 -43
- package/lib/module/camera/preview/PreView.js.map +0 -1
- package/lib/module/camera/preview/PreViewContainer.js +0 -33
- package/lib/module/camera/preview/PreViewContainer.js.map +0 -1
- package/lib/module/camera/preview/PreviewFooter.js +0 -36
- package/lib/module/camera/preview/PreviewFooter.js.map +0 -1
- package/lib/module/camera/preview/SinglePre.js +0 -32
- package/lib/module/camera/preview/SinglePre.js.map +0 -1
- package/lib/module/camera/setup/SetUp.js +0 -74
- package/lib/module/camera/setup/SetUp.js.map +0 -1
- package/lib/module/components/PreviewThumbnail.js +0 -39
- package/lib/module/components/PreviewThumbnail.js.map +0 -1
- package/lib/module/hooks/useConfirm.js +0 -16
- package/lib/module/hooks/useConfirm.js.map +0 -1
- package/lib/typescript/src/camera/footer/Footer.d.ts +0 -14
- package/lib/typescript/src/camera/footer/Footer.d.ts.map +0 -1
- package/lib/typescript/src/camera/preview/PreView.d.ts +0 -7
- package/lib/typescript/src/camera/preview/PreView.d.ts.map +0 -1
- package/lib/typescript/src/camera/preview/PreViewContainer.d.ts +0 -9
- package/lib/typescript/src/camera/preview/PreViewContainer.d.ts.map +0 -1
- package/lib/typescript/src/camera/preview/PreviewFooter.d.ts +0 -7
- package/lib/typescript/src/camera/preview/PreviewFooter.d.ts.map +0 -1
- package/lib/typescript/src/camera/preview/SinglePre.d.ts +0 -7
- package/lib/typescript/src/camera/preview/SinglePre.d.ts.map +0 -1
- package/lib/typescript/src/camera/setup/SetUp.d.ts +0 -13
- package/lib/typescript/src/camera/setup/SetUp.d.ts.map +0 -1
- package/lib/typescript/src/components/PreviewThumbnail.d.ts +0 -9
- package/lib/typescript/src/components/PreviewThumbnail.d.ts.map +0 -1
- package/lib/typescript/src/hooks/useConfirm.d.ts +0 -2
- package/lib/typescript/src/hooks/useConfirm.d.ts.map +0 -1
- package/src/camera/footer/Footer.tsx +0 -113
- package/src/camera/preview/PreView.tsx +0 -32
- package/src/camera/preview/PreViewContainer.tsx +0 -30
- package/src/camera/preview/PreviewFooter.tsx +0 -38
- package/src/camera/preview/SinglePre.tsx +0 -30
- package/src/camera/setup/SetUp.tsx +0 -93
- package/src/components/PreviewThumbnail.tsx +0 -45
- 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 {
|
|
4
|
-
export {
|
|
5
|
-
export {
|
|
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":["
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["SideRail"],"sourceRoot":"../../../../src","sources":["camera/setup/index.tsx"],"mappings":";;AAAA,SAASA,QAAQ,QAAQ,eAAY","ignoreList":[]}
|