ink.ts
ink.ts
86
Lines
3887
Bytes
26
Exports
48
Imports
10
Keywords
What this is
This page documents one file from the repository and includes its full source so you can read it without leaving the docs site.
Beginner explanation
This file is one piece of the larger system. Its name, directory, imports, and exports show where it fits. Start by reading the exports and related files first.
How it is used
Start from the exports list and related files. Those are the easiest clues for where this file fits into the system.
Expert explanation
Architecturally, this file intersects with ui-flow. It contains 86 lines, 48 detected imports, and 26 detected exports.
Important relationships
Detected exports
rendercreateRootcolordefaultThemeProviderusePreviewThemeuseThemeuseThemeSettingAnsiNoSelectRawAnsiClickEventEventEmitterEventInputEventTerminalFocusEventFocusManageruseAnimationFrameuseAnimationTimeruseIntervaluseSelectionuseTabStatususeTerminalFocususeTerminalTitleuseTerminalViewportsupportsTabStatus
Keywords
componentshooksdesign-systemrooteventsthemeprovidernodereactnoderenderoptionsrender
Detected imports
react./components/design-system/ThemeProvider.js./ink/root.js./components/design-system/color.js./components/design-system/ThemedBox.js./components/design-system/ThemedBox.js./components/design-system/ThemedText.js./components/design-system/ThemedText.js./components/design-system/ThemeProvider.js./ink/Ansi.js./ink/components/AppContext.js./ink/components/Box.js./ink/components/Box.js./ink/components/Button.js./ink/components/Button.js./ink/components/Link.js./ink/components/Link.js./ink/components/Newline.js./ink/components/Newline.js./ink/components/NoSelect.js./ink/components/RawAnsi.js./ink/components/Spacer.js./ink/components/StdinContext.js./ink/components/Text.js./ink/components/Text.js./ink/dom.js./ink/events/click-event.js./ink/events/emitter.js./ink/events/event.js./ink/events/input-event.js./ink/events/input-event.js./ink/events/terminal-focus-event.js./ink/events/terminal-focus-event.js./ink/focus.js./ink/frame.js./ink/hooks/use-animation-frame.js./ink/hooks/use-app.js./ink/hooks/use-input.js./ink/hooks/use-interval.js./ink/hooks/use-selection.js./ink/hooks/use-stdin.js./ink/hooks/use-tab-status.js./ink/hooks/use-terminal-focus.js./ink/hooks/use-terminal-title.js./ink/hooks/use-terminal-viewport.js./ink/measure-element.js./ink/termio/osc.js./ink/wrap-text.js
Source notes
This page embeds the full file contents. Small or leaf files are still indexed honestly instead of being over-explained.
Full source
import { createElement, type ReactNode } from 'react'
import { ThemeProvider } from './components/design-system/ThemeProvider.js'
import inkRender, {
type Instance,
createRoot as inkCreateRoot,
type RenderOptions,
type Root,
} from './ink/root.js'
export type { RenderOptions, Instance, Root }
// Wrap all CC render calls with ThemeProvider so ThemedBox/ThemedText work
// without every call site having to mount it. Ink itself is theme-agnostic.
function withTheme(node: ReactNode): ReactNode {
return createElement(ThemeProvider, null, node)
}
export async function render(
node: ReactNode,
options?: NodeJS.WriteStream | RenderOptions,
): Promise<Instance> {
return inkRender(withTheme(node), options)
}
export async function createRoot(options?: RenderOptions): Promise<Root> {
const root = await inkCreateRoot(options)
return {
...root,
render: node => root.render(withTheme(node)),
}
}
export { color } from './components/design-system/color.js'
export type { Props as BoxProps } from './components/design-system/ThemedBox.js'
export { default as Box } from './components/design-system/ThemedBox.js'
export type { Props as TextProps } from './components/design-system/ThemedText.js'
export { default as Text } from './components/design-system/ThemedText.js'
export {
ThemeProvider,
usePreviewTheme,
useTheme,
useThemeSetting,
} from './components/design-system/ThemeProvider.js'
export { Ansi } from './ink/Ansi.js'
export type { Props as AppProps } from './ink/components/AppContext.js'
export type { Props as BaseBoxProps } from './ink/components/Box.js'
export { default as BaseBox } from './ink/components/Box.js'
export type {
ButtonState,
Props as ButtonProps,
} from './ink/components/Button.js'
export { default as Button } from './ink/components/Button.js'
export type { Props as LinkProps } from './ink/components/Link.js'
export { default as Link } from './ink/components/Link.js'
export type { Props as NewlineProps } from './ink/components/Newline.js'
export { default as Newline } from './ink/components/Newline.js'
export { NoSelect } from './ink/components/NoSelect.js'
export { RawAnsi } from './ink/components/RawAnsi.js'
export { default as Spacer } from './ink/components/Spacer.js'
export type { Props as StdinProps } from './ink/components/StdinContext.js'
export type { Props as BaseTextProps } from './ink/components/Text.js'
export { default as BaseText } from './ink/components/Text.js'
export type { DOMElement } from './ink/dom.js'
export { ClickEvent } from './ink/events/click-event.js'
export { EventEmitter } from './ink/events/emitter.js'
export { Event } from './ink/events/event.js'
export type { Key } from './ink/events/input-event.js'
export { InputEvent } from './ink/events/input-event.js'
export type { TerminalFocusEventType } from './ink/events/terminal-focus-event.js'
export { TerminalFocusEvent } from './ink/events/terminal-focus-event.js'
export { FocusManager } from './ink/focus.js'
export type { FlickerReason } from './ink/frame.js'
export { useAnimationFrame } from './ink/hooks/use-animation-frame.js'
export { default as useApp } from './ink/hooks/use-app.js'
export { default as useInput } from './ink/hooks/use-input.js'
export { useAnimationTimer, useInterval } from './ink/hooks/use-interval.js'
export { useSelection } from './ink/hooks/use-selection.js'
export { default as useStdin } from './ink/hooks/use-stdin.js'
export { useTabStatus } from './ink/hooks/use-tab-status.js'
export { useTerminalFocus } from './ink/hooks/use-terminal-focus.js'
export { useTerminalTitle } from './ink/hooks/use-terminal-title.js'
export { useTerminalViewport } from './ink/hooks/use-terminal-viewport.js'
export { default as measureElement } from './ink/measure-element.js'
export { supportsTabStatus } from './ink/termio/osc.js'
export { default as wrapText } from './ink/wrap-text.js'