import { default as React } from 'react'; import { ImageColormap } from './ImageFrame'; export interface ImagePanelProps { /** Flat, row-major single-channel samples. Length must equal width*height. */ data?: number[]; /** Pre-decoded RGBA pixels — escape hatch for callers with their own buffer. */ pixels?: Uint8ClampedArray; /** Frame width in pixels. */ width: number; /** Frame height in pixels. Defaults to `width` (square). */ height?: number; /** Saturation ceiling used to normalise `data` → [0,1]. Default 65535. */ maxADU?: number; /** Colormap applied to normalised intensities. Default 'cividis'. */ colormap?: ImageColormap; /** Show the raw sample values as a grid below the image. Default false. */ showValues?: boolean; /** Message shown when no frame is available. */ emptyMessage?: string; /** Title rendered above the frame. */ title?: string; /** True while a capture is in flight. Drives the button label + skeleton. */ loading?: boolean; /** Error from the upstream capture. Rendered as a red banner above the frame. */ error?: string | null; /** Click handler for the refresh button. Omit to hide the button entirely. */ onRefresh?: () => void; /** Label for the idle refresh button. Default 'Refresh'. */ refreshLabel?: string; /** Label while `loading` is true. Default 'Capturing…'. */ refreshingLabel?: string; /** * Disable the refresh button even when not loading — e.g. when the * caller has no data source bound (no CCD selected). The button is * always disabled while `loading` is true regardless of this prop. */ refreshDisabled?: boolean; /** Extra class name applied to the outer wrapper. */ className?: string; } export declare const ImagePanel: React.NamedExoticComponent; export default ImagePanel;