import { createImageEditorController, type ImageEditorSnapshot, } from '@uppy/components' import type { UppyFile } from '@uppy/core' import { type ChangeEvent, type SyntheticEvent, useEffect, useMemo, useSyncExternalStore, } from 'react' import { useUppyContext } from './headless/UppyContextProvider.js' type ImageEditorProps = { file: UppyFile } type ImageLoadEvent = Event & SyntheticEvent type SliderChangeEvent = Event & ChangeEvent export function useImageEditor( props: ImageEditorProps, ): ImageEditorSnapshot { const { uppy } = useUppyContext() const controller = useMemo( () => createImageEditorController(uppy, { file: props.file, }), [uppy, props.file], ) useEffect(() => { controller.start() return () => controller.stop() }, [controller]) const store = useSyncExternalStore( controller.subscribe, controller.getSnapshot, controller.getSnapshot, ) return store }