export { ShadeProvider, useShadeContext } from './ShadeProvider.js';
export { useShadeState } from './useShadeState.js';
export { useShadeEvents } from './useShadeEvents.js';
export { darkTheme, lightTheme, resolveTheme } from './theme.js';

export { IdentityCard } from './components/IdentityCard.js';
export { SessionList } from './components/SessionList.js';
export { PrekeyStock } from './components/PrekeyStock.js';
export { RecentActivity } from './components/RecentActivity.js';
export { ServerStatus } from './components/ServerStatus.js';
export { FingerprintCompare } from './components/FingerprintCompare.js';
export type { FingerprintCompareProps } from './components/FingerprintCompare.js';
export { FingerprintGate, formatOobText } from './components/FingerprintGate.js';
export type {
  FingerprintGateProps,
  FingerprintGateFallbackProps,
} from './components/FingerprintGate.js';
export { WidgetCatalog } from './components/WidgetCatalog.js';

export type { ShadeProviderProps, ShadeContextValue } from './ShadeProvider.js';
export type { ShadeState, UseShadeStateResult } from './useShadeState.js';
export type { ShadeEventEnvelope, UseShadeEventsResult } from './useShadeEvents.js';
export type { ShadeTheme, ThemeMode } from './theme.js';
export type { WidgetCatalogProps, WidgetKey } from './components/WidgetCatalog.js';

// ─── Stream-transfer widgets (v0.2.0) ────────────────────
export {
  ShadeRuntimeProvider,
  useShadeRuntime,
  useShadeRuntimeTheme,
} from './ShadeRuntimeProvider.js';
export type {
  ShadeRuntimeProviderProps,
  ShadeRuntimeContextValue,
} from './ShadeRuntimeProvider.js';
export { useShadeUpload } from './useShadeUpload.js';
export type { UploadEntry, UseShadeUploadResult } from './useShadeUpload.js';
export { useShadeDownload } from './useShadeDownload.js';
export type {
  DownloadEntry,
  UseShadeDownloadOptions,
  UseShadeDownloadResult,
} from './useShadeDownload.js';
export { ShadeUploader } from './components/transfer/ShadeUploader.js';
export type { ShadeUploaderProps } from './components/transfer/ShadeUploader.js';
export { ShadeDownloader } from './components/transfer/ShadeDownloader.js';
export type { ShadeDownloaderProps } from './components/transfer/ShadeDownloader.js';
export { DropZone } from './components/transfer/DropZone.js';
export type { DropZoneProps } from './components/transfer/DropZone.js';
export { TransferRow } from './components/transfer/TransferRow.js';
export type { TransferRowProps } from './components/transfer/TransferRow.js';
export { ThumbnailPreview } from './components/transfer/ThumbnailPreview.js';
export type { ThumbnailPreviewProps } from './components/transfer/ThumbnailPreview.js';
export {
  ShadeThumbnailProvider,
  useThumbnailCache,
  useThumbnail,
} from './useShadeThumbnails.js';
export type { ThumbnailProviderProps } from './useShadeThumbnails.js';
export { ProgressBar } from './components/transfer/ProgressBar.js';
export type { ProgressBarProps } from './components/transfer/ProgressBar.js';
export { SpeedReadout, formatBytesPerSecond } from './components/transfer/SpeedReadout.js';
export type { SpeedReadoutProps } from './components/transfer/SpeedReadout.js';
export { ETAReadout, formatEta } from './components/transfer/ETAReadout.js';
export type { ETAReadoutProps } from './components/transfer/ETAReadout.js';
export { LaneIndicator } from './components/transfer/LaneIndicator.js';
export type { LaneIndicatorProps } from './components/transfer/LaneIndicator.js';

// ─── Social Key Recovery widgets (V3.10) ────────────────
export {
  RecoverySetup,
  formatRecoveryCard,
} from './components/recovery/RecoverySetup.js';
export type { RecoverySetupProps } from './components/recovery/RecoverySetup.js';
export { RecoveryRequest } from './components/recovery/RecoveryRequest.js';
export type { RecoveryRequestProps } from './components/recovery/RecoveryRequest.js';
export {
  RecoveryApprove,
  createApprovalQueue,
} from './components/recovery/RecoveryApprove.js';
export type {
  RecoveryApproveProps,
  PendingApproval,
} from './components/recovery/RecoveryApprove.js';
