// Renderer-side contract + per-renderer status (DOM / canvas-ui / desktop) for every component
// below is tracked in packages/canvas-ui/COMPONENTS.md.
export { UIButton, type UIButtonStyle } from './UIButton'
export { UIScreen, type UIScreenStyle } from './UIScreen'
export { UISpacer, type UISpacerStyle } from './UISpacer'
export { UIText, type UITextStyle } from './UIText'
export { registerFont } from './fonts'
export { UIImage, type UIImageStyle } from './UIImage'
export { UIVideo, type UIVideoStyle } from './UIVideo'
export { UIInput, UITextArea, type UIInputStyle } from './UIInput'

export { UIWidget, type UIWidgetStyle } from './UIWidget'
export { UIModal, type UIModalStyle } from './UIModal'
export { UIBottomSheet, type UIBottomSheetStyle } from './UIBottomSheet'
export { UIPopover, type UIPopoverStyle, type UIPopoverAnchor } from './UIPopover'

export { UIRow, UIColumn, UIBox, type UIContainerStyle } from './UIContainer'
export { UIScrollable, type UIScrollableStyle } from './UIScrollable'
export { UIPager, type UIPagerStyle } from './UIPager'
export { UITabs, type UITabDef, defineTabs, type TabDef, type TabsHandle } from './UITabs'

export { UIVirtualizedList } from './UIVirtualizedList'

export { Router } from './router'
export { NativeView, type UINativeViewStyle } from './NativeView'
// Presentable is both the interface and its runtime companion (Presentable.current).
export { Presentable } from './presentable'
export type { PresentOptions, Transition, TransitionName, TransitionSpec, TransitionTransform } from './presentable'

// Internal: memoized map for reactive children — the chisel `reactiveUi` pass rewrites
// `list.map(fn)` inside children bindings to `__uiMap(list, fn, slot)` calls.
export { __uiMap } from './UINode'
// Compiler fast paths (chisel `flatten_ui` raw lowering): dispatch-free construction for calls
// whose arguments the compiler proved to be plain children. Never written by hand.
export { __UIColumn, __UIRow, __UIBox } from './UIContainer'
export { __UIButton } from './UIButton'
export { __UIScreen } from './UIScreen'
export { __UIScrollable } from './UIScrollable'
export { __UIWidget } from './UIWidget'