/** * ink-terminal — High-performance React terminal renderer * * Extracted from Claude Code's rendering engine with 27 optimization techniques: * - 60fps throttled rendering with double-buffering * - Blit fast path (TypedArray memcpy for clean nodes) * - Packed Int32Array screen buffer with CharPool/StylePool * - Damage-bounded diff (only scan changed regions) * - DECSTBM hardware scrolling * - BSU/ESU atomic output (DEC 2026) * * Three-layer architecture: * - Core (no React): Screen buffer, Diff, Terminal I/O * - React: Reconciler, Components, Hooks * - Application (stays in your app): Theme, Markdown, VirtualMessageList */ export type { Diff, FlickerReason, Frame, FrameEvent, Patch } from './core/frame.js' export { ClickEvent } from './events/click-event.js' // --- Events --- export { InputEvent, type Key } from './events/input-event.js' export { KeyboardEvent } from './events/keyboard-event.js' export { TerminalFocusEvent } from './events/terminal-focus-event.js' export { stringWidth } from './internal/string-width.js' export type { LayoutNode } from './layout/node.js' // --- Configuration --- export { configure, type InkTerminalConfig } from './providers/index.js' export { Ansi } from './react/Ansi.js' export { AlternateScreen } from './react/components/AlternateScreen.js' // --- Core Components --- export { default as Box } from './react/components/Box.js' export { default as Button } from './react/components/Button.js' export { default as FileLink, buildEditorUri, type Editor, type FileLinkProps } from './react/components/FileLink.js' export { default as Link } from './react/components/Link.js' export { default as Newline } from './react/components/Newline.js' export { NoSelect } from './react/components/NoSelect.js' export { RawAnsi } from './react/components/RawAnsi.js' export type { ScrollBoxHandle } from './react/components/ScrollBox.js' export { default as ScrollBox } from './react/components/ScrollBox.js' export { default as Spacer } from './react/components/Spacer.js' export { default as Text } from './react/components/Text.js' // --- Types --- export type { DOMElement } from './react/dom.js' // --- Focus --- export { FocusManager } from './react/focus.js' // --- Frame Stats --- export { FpsCounter } from './react/components/FpsCounter.js' export { useFps, type FpsStats } from './react/hooks/use-fps.js' export { useAnimationFrame } from './react/hooks/use-animation-frame.js' export { default as useApp } from './react/hooks/use-app.js' // --- Hooks --- export { default as useInput } from './react/hooks/use-input.js' export { useAnimationTimer, useInterval } from './react/hooks/use-interval.js' export { useSelection } from './react/hooks/use-selection.js' export { default as useStdin } from './react/hooks/use-stdin.js' export { useTabStatus } from './react/hooks/use-tab-status.js' export { useTerminalFocus } from './react/hooks/use-terminal-focus.js' export { useTerminalTitle } from './react/hooks/use-terminal-title.js' export { useTerminalViewport } from './react/hooks/use-terminal-viewport.js' export { default as measureElement } from './react/measure-element.js' export type { Instance, RenderOptions, Root } from './react/root.js' // --- Render API --- export { createRoot, default as render, renderSync } from './react/root.js' export type { Styles, TextStyles } from './react/styles.js' // --- Virtual Scroll --- export { useVirtualScroll, type VirtualScrollResult } from './react/hooks/use-virtual-scroll.js' export { VirtualList } from './react/components/VirtualList.js' // --- Terminal Utilities --- export { supportsTabStatus } from './termio/osc.js'