@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.
- package/README.md +7 -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 +4 -2
- 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
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { useState } from 'react';
|
|
2
|
-
import { StyleSheet, View } from 'react-native';
|
|
3
|
-
import { r } from '@unif/react-native-design';
|
|
4
|
-
import type { CustomPhotoFile } from '../../utils';
|
|
5
|
-
import { Carousel } from '../../components/Carousel';
|
|
6
|
-
import { PreviewThumbnail } from '../../components/PreviewThumbnail';
|
|
7
|
-
|
|
8
|
-
type Props = { files: CustomPhotoFile[] };
|
|
9
|
-
|
|
10
|
-
export function PreView({ files }: Props) {
|
|
11
|
-
const [index, setIndex] = useState(0);
|
|
12
|
-
return (
|
|
13
|
-
<View style={styles.root} testID="multi-pre">
|
|
14
|
-
<Carousel data={files} onIndexChange={setIndex} />
|
|
15
|
-
<View style={styles.thumbWrap}>
|
|
16
|
-
<PreviewThumbnail files={files} currentIndex={index} onTap={setIndex} />
|
|
17
|
-
</View>
|
|
18
|
-
</View>
|
|
19
|
-
);
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
const styles = StyleSheet.create({
|
|
23
|
-
// 多图预览容器固定黑底:相机 UX 惯例,与 SinglePre / PreViewContainer 一致.
|
|
24
|
-
root: { flex: 1, backgroundColor: '#000' },
|
|
25
|
-
thumbWrap: {
|
|
26
|
-
position: 'absolute',
|
|
27
|
-
bottom: r(100),
|
|
28
|
-
left: 0,
|
|
29
|
-
right: 0,
|
|
30
|
-
alignItems: 'center',
|
|
31
|
-
},
|
|
32
|
-
});
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { StyleSheet, View } from 'react-native';
|
|
2
|
-
import type { CustomPhotoFile } from '../../utils';
|
|
3
|
-
import { SinglePre } from './SinglePre';
|
|
4
|
-
import { PreView } from './PreView';
|
|
5
|
-
import { PreviewFooter } from './PreviewFooter';
|
|
6
|
-
|
|
7
|
-
type Props = {
|
|
8
|
-
files: CustomPhotoFile[];
|
|
9
|
-
onRetake: () => void;
|
|
10
|
-
onConfirm: () => void;
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
export function PreViewContainer({ files, onRetake, onConfirm }: Props) {
|
|
14
|
-
const first = files[0];
|
|
15
|
-
return (
|
|
16
|
-
<View style={styles.root}>
|
|
17
|
-
{files.length === 1 && first != null ? (
|
|
18
|
-
<SinglePre file={first} />
|
|
19
|
-
) : files.length > 1 ? (
|
|
20
|
-
<PreView files={files} />
|
|
21
|
-
) : null}
|
|
22
|
-
<PreviewFooter onRetake={onRetake} onConfirm={onConfirm} />
|
|
23
|
-
</View>
|
|
24
|
-
);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
const styles = StyleSheet.create({
|
|
28
|
-
// 预览容器固定黑底:相机 UX 惯例,与 SinglePre / PreView / SlideItem 一致.
|
|
29
|
-
root: { flex: 1, backgroundColor: '#000' },
|
|
30
|
-
});
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { StyleSheet, View } from 'react-native';
|
|
2
|
-
import { Button, r } from '@unif/react-native-design';
|
|
3
|
-
|
|
4
|
-
type Props = {
|
|
5
|
-
onRetake: () => void;
|
|
6
|
-
onConfirm: () => void;
|
|
7
|
-
};
|
|
8
|
-
|
|
9
|
-
export function PreviewFooter({ onRetake, onConfirm }: Props) {
|
|
10
|
-
return (
|
|
11
|
-
<View style={styles.root}>
|
|
12
|
-
<Button
|
|
13
|
-
variant="ghost"
|
|
14
|
-
label="重拍"
|
|
15
|
-
onPress={onRetake}
|
|
16
|
-
testID="retake-btn"
|
|
17
|
-
/>
|
|
18
|
-
<Button
|
|
19
|
-
variant="primary"
|
|
20
|
-
label="使用照片"
|
|
21
|
-
onPress={onConfirm}
|
|
22
|
-
testID="confirm-btn"
|
|
23
|
-
/>
|
|
24
|
-
</View>
|
|
25
|
-
);
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
const styles = StyleSheet.create({
|
|
29
|
-
root: {
|
|
30
|
-
position: 'absolute',
|
|
31
|
-
bottom: r(40),
|
|
32
|
-
left: 0,
|
|
33
|
-
right: 0,
|
|
34
|
-
flexDirection: 'row',
|
|
35
|
-
justifyContent: 'space-around',
|
|
36
|
-
alignItems: 'center',
|
|
37
|
-
},
|
|
38
|
-
});
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { Image, StyleSheet, View } from 'react-native';
|
|
2
|
-
import { Empty } from '@unif/react-native-design';
|
|
3
|
-
import type { CustomPhotoFile } from '../../utils';
|
|
4
|
-
|
|
5
|
-
type Props = { file: CustomPhotoFile };
|
|
6
|
-
|
|
7
|
-
export function SinglePre({ file }: Props) {
|
|
8
|
-
return (
|
|
9
|
-
<View style={styles.root} testID="single-pre">
|
|
10
|
-
{file.mime === 'video/mp4' ? (
|
|
11
|
-
<Empty
|
|
12
|
-
title={`视频 · ${file.duration?.toFixed(1) ?? '0.0'}s`}
|
|
13
|
-
desc={file.path}
|
|
14
|
-
/>
|
|
15
|
-
) : (
|
|
16
|
-
<Image
|
|
17
|
-
source={{ uri: file.uri }}
|
|
18
|
-
style={StyleSheet.absoluteFill}
|
|
19
|
-
resizeMode="contain"
|
|
20
|
-
/>
|
|
21
|
-
)}
|
|
22
|
-
</View>
|
|
23
|
-
);
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
const styles = StyleSheet.create({
|
|
27
|
-
// 相机预览容器固定黑底:相机 UX 惯例(任何主题下都需要让照片 / 视频在纯黑上凸显),
|
|
28
|
-
// 不走 c.background token.
|
|
29
|
-
root: { flex: 1, backgroundColor: '#000' },
|
|
30
|
-
});
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
import { StyleSheet, View } from 'react-native';
|
|
2
|
-
import {
|
|
3
|
-
Chip,
|
|
4
|
-
Icon,
|
|
5
|
-
r,
|
|
6
|
-
useColors,
|
|
7
|
-
type IconName,
|
|
8
|
-
} from '@unif/react-native-design';
|
|
9
|
-
|
|
10
|
-
export type FlashMode = 'off' | 'on' | 'auto';
|
|
11
|
-
export type AspectRatio = '4:3' | '16:9';
|
|
12
|
-
|
|
13
|
-
type Props = {
|
|
14
|
-
flash: FlashMode;
|
|
15
|
-
aspectRatio: AspectRatio;
|
|
16
|
-
onChangeFlash: (m: FlashMode) => void;
|
|
17
|
-
onChangeAspectRatio: (r: AspectRatio) => void;
|
|
18
|
-
onToggleLens: () => void;
|
|
19
|
-
lensLabel: string;
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
const flashLabel: Record<FlashMode, string> = {
|
|
23
|
-
off: '闪关',
|
|
24
|
-
on: '闪开',
|
|
25
|
-
auto: '自动',
|
|
26
|
-
};
|
|
27
|
-
const flashOrder: FlashMode[] = ['off', 'auto', 'on'];
|
|
28
|
-
|
|
29
|
-
const flashIconMap: Record<FlashMode, IconName> = {
|
|
30
|
-
off: 'flash-off',
|
|
31
|
-
on: 'flash-on',
|
|
32
|
-
auto: 'flash-auto',
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
export function SetUp({
|
|
36
|
-
flash,
|
|
37
|
-
aspectRatio,
|
|
38
|
-
onChangeFlash,
|
|
39
|
-
onChangeAspectRatio,
|
|
40
|
-
onToggleLens,
|
|
41
|
-
lensLabel,
|
|
42
|
-
}: Props) {
|
|
43
|
-
const c = useColors();
|
|
44
|
-
const nextFlash = () => {
|
|
45
|
-
const i = flashOrder.indexOf(flash);
|
|
46
|
-
const next = flashOrder[(i + 1) % flashOrder.length] as FlashMode;
|
|
47
|
-
onChangeFlash(next);
|
|
48
|
-
};
|
|
49
|
-
return (
|
|
50
|
-
<View style={styles.root}>
|
|
51
|
-
<Chip
|
|
52
|
-
label={flashLabel[flash]}
|
|
53
|
-
leading={
|
|
54
|
-
<Icon name={flashIconMap[flash]} size={r(14)} color={c.foreground} />
|
|
55
|
-
}
|
|
56
|
-
onPress={nextFlash}
|
|
57
|
-
selected={flash !== 'off'}
|
|
58
|
-
testID="flash-btn"
|
|
59
|
-
/>
|
|
60
|
-
<Chip
|
|
61
|
-
label={aspectRatio}
|
|
62
|
-
leading={
|
|
63
|
-
<Icon
|
|
64
|
-
name={aspectRatio === '4:3' ? 'aspect-4-3' : 'aspect-16-9'}
|
|
65
|
-
size={r(14)}
|
|
66
|
-
color={c.foreground}
|
|
67
|
-
/>
|
|
68
|
-
}
|
|
69
|
-
onPress={() =>
|
|
70
|
-
onChangeAspectRatio(aspectRatio === '4:3' ? '16:9' : '4:3')
|
|
71
|
-
}
|
|
72
|
-
testID="aspect-btn"
|
|
73
|
-
/>
|
|
74
|
-
<Chip
|
|
75
|
-
label={lensLabel}
|
|
76
|
-
leading={<Icon name="lens-flip" size={r(14)} color={c.foreground} />}
|
|
77
|
-
onPress={onToggleLens}
|
|
78
|
-
testID="lens-btn"
|
|
79
|
-
/>
|
|
80
|
-
</View>
|
|
81
|
-
);
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
const styles = StyleSheet.create({
|
|
85
|
-
root: {
|
|
86
|
-
position: 'absolute',
|
|
87
|
-
top: r(60),
|
|
88
|
-
left: r(16),
|
|
89
|
-
right: r(16),
|
|
90
|
-
flexDirection: 'row',
|
|
91
|
-
justifyContent: 'space-between',
|
|
92
|
-
},
|
|
93
|
-
});
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { StyleSheet, TouchableOpacity, View } from 'react-native';
|
|
2
|
-
import {
|
|
3
|
-
Thumbnail,
|
|
4
|
-
r,
|
|
5
|
-
useThemedStyles,
|
|
6
|
-
type ColorTokens,
|
|
7
|
-
} from '@unif/react-native-design';
|
|
8
|
-
import type { CustomPhotoFile } from '../utils';
|
|
9
|
-
|
|
10
|
-
type Props = {
|
|
11
|
-
files: CustomPhotoFile[];
|
|
12
|
-
currentIndex: number;
|
|
13
|
-
onTap: (i: number) => void;
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
export function PreviewThumbnail({ files, currentIndex, onTap }: Props) {
|
|
17
|
-
const styles = useThemedStyles(makeStyles);
|
|
18
|
-
return (
|
|
19
|
-
<View style={styles.row}>
|
|
20
|
-
{files.map((f, i) => (
|
|
21
|
-
<TouchableOpacity
|
|
22
|
-
key={`${f.path}-${i}`}
|
|
23
|
-
onPress={() => onTap(i)}
|
|
24
|
-
style={[
|
|
25
|
-
styles.thumbWrap,
|
|
26
|
-
i === currentIndex && styles.thumbWrapActive,
|
|
27
|
-
]}
|
|
28
|
-
>
|
|
29
|
-
<Thumbnail uri={f.uri} size="sm" />
|
|
30
|
-
</TouchableOpacity>
|
|
31
|
-
))}
|
|
32
|
-
</View>
|
|
33
|
-
);
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
const makeStyles = (c: ColorTokens) =>
|
|
37
|
-
StyleSheet.create({
|
|
38
|
-
row: { flexDirection: 'row', gap: r(6), padding: r(8) },
|
|
39
|
-
thumbWrap: {
|
|
40
|
-
borderRadius: r(4),
|
|
41
|
-
borderWidth: 2,
|
|
42
|
-
borderColor: 'transparent',
|
|
43
|
-
},
|
|
44
|
-
thumbWrapActive: { borderColor: c.primary },
|
|
45
|
-
});
|
package/src/hooks/useConfirm.tsx
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { Alert } from 'react-native';
|
|
2
|
-
|
|
3
|
-
export function useConfirm() {
|
|
4
|
-
return (title: string, message: string) =>
|
|
5
|
-
new Promise<boolean>((resolve) => {
|
|
6
|
-
Alert.alert(title, message, [
|
|
7
|
-
{ text: '取消', onPress: () => resolve(false), style: 'cancel' },
|
|
8
|
-
{ text: '确认', onPress: () => resolve(true) },
|
|
9
|
-
]);
|
|
10
|
-
});
|
|
11
|
-
}
|