Filehigh importancesource

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

  • render
  • createRoot
  • color
  • default
  • ThemeProvider
  • usePreviewTheme
  • useTheme
  • useThemeSetting
  • Ansi
  • NoSelect
  • RawAnsi
  • ClickEvent
  • EventEmitter
  • Event
  • InputEvent
  • TerminalFocusEvent
  • FocusManager
  • useAnimationFrame
  • useAnimationTimer
  • useInterval
  • useSelection
  • useTabStatus
  • useTerminalFocus
  • useTerminalTitle
  • useTerminalViewport
  • supportsTabStatus

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.

Open parent directory

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'