react-native-camera-kit
Version:
A high performance, fully featured, rock solid camera library for React Native applications
124 lines (119 loc) • 3.77 kB
text/typescript
import { type ViewProps } from 'react-native';
import {
CameraType,
type FlashMode,
type FocusMode,
type ZoomMode,
type TorchMode,
type ResizeMode,
type CodeFormat,
} from './types';
import { Orientation } from './index';
export type OnReadCodeData = {
nativeEvent: {
codeStringValue: string;
codeFormat: CodeFormat;
};
};
export type OnOrientationChangeData = {
nativeEvent: {
orientation: typeof Orientation[keyof typeof Orientation];
};
};
export type OnZoom = {
nativeEvent: {
zoom: number;
};
}
export interface CameraProps extends ViewProps {
// Behavior
flashMode?: FlashMode;
focusMode?: FocusMode;
/**
* Enable or disable the pinch gesture handler.
* If `zoomMode` is `on`, you must pass `zoom` as `undefined`, or
* avoid setting `zoom` it to allow pinch to zoom.
* Examples:
* ```
* <Camera zoomMode="on" />
* <Camera zoomMode="on" zoom={undefined} />
* <Camera zoomMode="off" zoom={1.0} />
* ```
*/
zoomMode?: ZoomMode;
/**
* Controls zoom. Higher values zooms in.
* Default zoom is `1.0`, relative to 'wide angle' camera.
* Examples of minimum/widest zoom:
* - iPhone 6S Plus minimum is `1.0`
* - iPhone 14 Pro Max minimum `0.5`
* - Google Pixel 7 minimum is `0.7`
* ## Example
* ```
* const [zoom, setZoom] = useState(1.0);
* <Button onPress={() => setZoom(1.0)} title="Reset" />
* <Camera
* zoom={zoom}
* onZoom={(e) => {
* setZoom(e.nativeEvent.zoom);
* console.log('zoom', e.nativeEvent.zoom);
* }}
* />
* ```
*/
zoom?: number;
/**
* Limits the maximum zoom factor to something smaller than the camera's maximum.
* You cannot go beyond the camera's maximum, only below.
* The purpose of limiting zoom is because some modern iPhones report max zoom of 150+
* which is probably beyond what you want. See documentation for the `zoom` prop for more info.
* Example:
* ```
* <Camera
* maxZoom={15.0}
* />
* ```
*/
maxZoom?: number;
torchMode?: TorchMode;
cameraType?: CameraType;
onOrientationChange?: (event: OnOrientationChangeData) => void;
/**
* Callback triggered when user pinches to zoom and on startup.
* Example:
* ```
* <Camera
* onZoom={(e) => {
* console.log('zoom', e.nativeEvent.zoom);
* }}
* />
* ```
*/
onZoom?: (event: OnZoom) => void;
/** **Android only**. Triggered when camera fails to initialize */
onError?: (event: { nativeEvent: { errorMessage: string } }) => void;
// Barcode only
scanBarcode?: boolean;
showFrame?: boolean;
laserColor?: number | string;
frameColor?: number | string;
barcodeFrameSize?: { width: number; height: number };
onReadCode?: (event: OnReadCodeData) => void;
// Specific to iOS
ratioOverlay?: string;
ratioOverlayColor?: number | string;
resetFocusTimeout?: number;
resetFocusWhenMotionDetected?: boolean;
resizeMode?: ResizeMode;
/** Throttle how often the barcode scanner triggers a new scan */
scanThrottleDelay?: number;
/** **iOS Only**. 'speed' provides 60-80% faster image capturing */
maxPhotoQualityPrioritization?: 'balanced' | 'quality' | 'speed';
/** **iOS Only (iOS 26+)**. Enables `AVCaptureOutput.deferredStartEnabled` when supported to prioritize getting the preview visible faster. Default: `true`. When enabled, the first capture may be delayed by a few hundred milliseconds. Not supported on Android. */
iOsDeferredStart?: boolean;
/** **Android only**. Play a shutter capture sound when capturing a photo */
shutterPhotoSound?: boolean;
onCaptureButtonPressIn?: ({ nativeEvent: {} }) => void;
onCaptureButtonPressOut?: ({ nativeEvent: {} }) => void;
allowedBarcodeTypes?: CodeFormat[];
}