// Headless components

export {
  createGooglePickerController,
  type GooglePickerOptions,
  type GooglePickerType,
} from '@uppy/core/companion-client'

export { type DropzoneProps, default as Dropzone } from './Dropzone.js'
export { default as FilesGrid, type FilesGridProps } from './FilesGrid.js'
export { default as FilesList, type FilesListProps } from './FilesList.js'
export { createGooglePickerPluginAdapter } from './googlePicker.js'
// Headless hooks
export {
  createDropzone,
  type DropzoneOptions,
  type DropzoneReturn,
} from './hooks/dropzone.js'
export {
  createFileInput,
  type FileInputFunctions,
  type FileInputProps,
} from './hooks/file-input.js'
export {
  type AspectRatio,
  createImageEditorController,
  type ImageEditorSnapshot,
  type ImageEditorState,
  type ImageEditorStore,
} from './hooks/image-editor.js'
export {
  createRemoteSourceController,
  type RemoteSourceKeys,
  type RemoteSourceSnapshot,
  type RemoteSourceStore,
} from './hooks/remote-source.js'
export {
  createScreenCaptureController,
  type ScreenCaptureSnapshot,
  type ScreenCaptureStore,
} from './hooks/screencapture.js'
export {
  createWebcamController,
  type WebcamSnapshot,
  type WebcamStatus,
  type WebcamStore,
} from './hooks/webcam.js'
export {
  default as ProviderIcon,
  type ProviderIconProps,
} from './ProviderIcon.js'
export { default as Thumbnail, type ThumbnailProps } from './Thumbnail.js'
// Types and utils
export type {
  NonNullableUppyContext,
  UploadStatus,
  UppyContext,
  UppyState,
} from './types.js'
export {
  default as UploadButton,
  type UploadButtonProps,
} from './UploadButton.js'
export { createUppyEventAdapter } from './uppyEventAdapter.js'
