import React, { type Ref } from 'react'; import type { ViewProps } from 'react-native'; import type { SharedValue } from 'react-native-reanimated'; import { type CameraProps } from '../hooks/useCamera'; import type { CameraController } from '../specs/CameraController.nitro'; import type { FocusOptions } from '../specs/common-types/FocusOptions'; import type { Point } from '../specs/common-types/Point'; import type { TorchMode } from '../specs/common-types/TorchMode'; import type { PreviewView, PreviewViewMethods, PreviewViewProps } from '../specs/views/PreviewView.nitro'; /** * A React-ref to the {@linkcode Camera} view. * @example * ```tsx * function App() { * const camera = useRef(null) * return * } * ``` */ export interface CameraRef extends PreviewViewMethods, Pick { /** * Focuses the Camera pipeline to the specified {@linkcode viewPoint} * relative to the Camera view's coordinate system using * the specified {@linkcode MeteringMode}s. * @param viewPoint The point in the view coordinate system to focus to. * @param options Options for the focus operation. * @throws If the Camera isn't ready yet. * @example * ```tsx * // Focus center * await camera.current.focusTo({ x: width / 2, y: height / 2 }) * ``` */ focusTo(viewPoint: Point, options?: FocusOptions): Promise; /** * Get a ref to the {@linkcode PreviewView}, * or `undefined` if it has not yet been set. * This value is set after the first * mount, and usually won't change. */ preview: PreviewView | undefined; /** * Get the current {@linkcode CameraController}. * This property will be set after `onStarted` * has been called, and may change over time. */ controller: CameraController | undefined; } /** * Props for the {@linkcode Camera} component. * * Extends {@linkcode CameraProps} (the options for the underlying * {@linkcode useCamera} hook) with {@linkcode PreviewView}-specific options * and convenience props for gesture handling and animated values. */ export interface CameraViewProps extends CameraProps, Pick, Pick { /** * Called when the {@linkcode Camera}'s Preview * received its first Frame. */ onPreviewStarted?: () => void; /** * Called when the {@linkcode Camera}'s Preview * stopped streaming Frames. */ onPreviewStopped?: () => void; /** * Enables (or disables) the native pinch-to-zoom gesture. * * @throws If this property is enabled and {@linkcode CameraViewProps.zoom | zoom} is not `undefined`. * @default false */ enableNativeZoomGesture?: boolean; /** * Enables (or disables) the native tap-to-focus gesture. * * @default false */ enableNativeTapToFocusGesture?: boolean; /** * Sets the {@linkcode CameraController.zoom | zoom} value. * * You can also manually set zoom via * {@linkcode CameraController.setZoom | setZoom(...)}. * * @note This property can be animated via Reanimated by passing a {@linkcode SharedValue}. * @throws If this property is set and {@linkcode enableNativeZoomGesture} is enabled. * @default 1 */ zoom?: number | SharedValue; /** * Sets the {@linkcode CameraController.exposureBias | exposureBias} value. * * You can also manually set the exposure bias via * {@linkcode CameraController.setExposureBias | setExposureBias(...)}. * * @note This property can be animated via Reanimated by passing a {@linkcode SharedValue}. * @default 0 */ exposure?: number | SharedValue; /** * Sets the {@linkcode CameraController.torchMode | torchMode} value. * @default 'off' */ torchMode?: TorchMode; /** * @see {@linkcode CameraRef} */ ref?: Ref; } declare function CameraImpl({ implementationMode, resizeMode, onPreviewStarted, onPreviewStopped, outputs, zoom, exposure, torchMode, enableNativeZoomGesture, enableNativeTapToFocusGesture, ref, ...props }: CameraViewProps): React.ReactElement; /** * The `` component. * * This is a convenience wrapper around {@linkcode useCamera | useCamera(...)} * that adds a {@linkcode PreviewView}, wraps methods in a {@linkcode CameraRef}, * and supports updating {@linkcode CameraViewProps.zoom | zoom} and * {@linkcode CameraViewProps.exposure | exposure} via * Reanimated {@linkcode SharedValue}s. * * @example * ```tsx * function App() { * const camera = useRef(null) * const device = useCameraDevice('back') * const photoOutput = usePhotoOutput() * * return ( * * ) * } * ``` */ export declare const Camera: React.MemoExoticComponent; export {};