Skip to main content

Overview

The Renderable class is the foundation for all UI components in OpenTUI. It provides layout management using Yoga (Flexbox), event handling, lifecycle management, and rendering capabilities.

Base Classes

BaseRenderable

The most basic renderable interface.
string
Unique identifier for the renderable
number
Internal numeric identifier (auto-assigned)
boolean
Whether the renderable is visible
BaseRenderable | null
Parent renderable (null for root)

Renderable

Extends BaseRenderable with full layout, styling, and event support.

Constructor

RenderContext
The renderer context (usually renderer)
RenderableOptions
Configuration options

Options

RenderableOptions

Configuration interface for creating renderables.

Layout Properties

number | 'auto' | `${number}%`
Width in cells, auto, or percentage
number | 'auto' | `${number}%`
Height in cells, auto, or percentage
number
Flex grow factor (Flexbox)
number
Flex shrink factor (Flexbox)
number | 'auto'
Flex basis (Flexbox)
'row' | 'column' | 'row-reverse' | 'column-reverse'
Flex direction (Flexbox)
'nowrap' | 'wrap' | 'wrap-reverse'
Flex wrap (Flexbox)
'flex-start' | 'flex-end' | 'center' | 'stretch' | 'baseline'
Align items (Flexbox)
'flex-start' | 'flex-end' | 'center' | 'space-between' | 'space-around' | 'space-evenly'
Justify content (Flexbox)
'auto' | 'flex-start' | 'flex-end' | 'center' | 'stretch' | 'baseline'
Align self (Flexbox)
'relative' | 'absolute'
Position type
'visible' | 'hidden' | 'scroll'
Overflow behavior
number | 'auto' | `${number}%`
Top position (for absolute positioning)
number | 'auto' | `${number}%`
Right position
number | 'auto' | `${number}%`
Bottom position
number | 'auto' | `${number}%`
Left position
number | 'auto' | `${number}%`
Minimum width
number | 'auto' | `${number}%`
Minimum height
number | 'auto' | `${number}%`
Maximum width
number | 'auto' | `${number}%`
Maximum height
number | 'auto' | `${number}%`
Margin on all sides
number | 'auto' | `${number}%`
Horizontal margin (left and right)
number | 'auto' | `${number}%`
Vertical margin (top and bottom)
number | 'auto' | `${number}%`
Top margin
number | 'auto' | `${number}%`
Right margin
number | 'auto' | `${number}%`
Bottom margin
number | 'auto' | `${number}%`
Left margin
number | `${number}%`
Padding on all sides
number | `${number}%`
Horizontal padding
number | `${number}%`
Vertical padding
number | `${number}%`
Top padding
number | `${number}%`
Right padding
number | `${number}%`
Bottom padding
number | `${number}%`
Left padding

Visual Properties

number
Z-index for layering (higher values render on top)
boolean
default:true
Whether the element is visible
number
Opacity (0 = transparent, 1 = opaque)

Behavior Properties

boolean
Use a frame buffer for rendering (performance optimization)
boolean
Keep the renderer running continuously

Hooks

(buffer: OptimizedBuffer, deltaTime: number) => void
Called before rendering this element
(buffer: OptimizedBuffer, deltaTime: number) => void
Called after rendering this element

Event Handlers

(event: MouseEvent) => void
General mouse event handler (all mouse events)
(event: MouseEvent) => void
Mouse button down event
(event: MouseEvent) => void
Mouse button up event
(event: MouseEvent) => void
Mouse move event
(event: MouseEvent) => void
Mouse drag event
(event: MouseEvent) => void
Mouse drag end event
(event: MouseEvent) => void
Mouse drop event
(event: MouseEvent) => void
Mouse over event (hover)
(event: MouseEvent) => void
Mouse out event (leave)
(event: MouseEvent) => void
Mouse scroll event
(event: KeyEvent) => void
Key down event (when focused)
(event: PasteEvent) => void
Paste event (when focused)
() => void
Called when the element’s size changes

Properties

Position and Size

number
Absolute x position in the terminal
number
Absolute y position in the terminal
number
Computed width in cells
number
Computed height in cells
number
X translation offset
number
Y translation offset

State

boolean
Visibility state (can be set to show/hide)
number
Opacity value (0-1)
number
Z-index for rendering order
boolean
Whether the element can receive keyboard focus
boolean
Whether the element currently has focus
boolean
Whether the element keeps the renderer running
boolean
Whether the element has been destroyed

Context

RenderContext
The renderer context

Methods

Hierarchy Management

add()

Add a child element.
Renderable | VNode | unknown
Child element to add
number
Optional index to insert at
number
Index where the child was inserted (-1 if failed)

remove()

Remove a child element by ID.
string
ID of the child to remove

insertBefore()

Insert a child before another child.
Renderable | VNode | unknown
Element to insert
Renderable | unknown
Anchor element to insert before
number
Index where the element was inserted

getChildren()

Get all children.
Renderable[]
Array of child elements

getChildrenCount()

Get the number of children.
number
Number of children

getRenderable()

Get a child by ID.
string
Child ID
Renderable | undefined
The child element or undefined

findDescendantById()

Recursively find a descendant by ID.
string
Descendant ID
Renderable | undefined
The descendant or undefined

Focus Management

focus()

Give keyboard focus to this element.

blur()

Remove keyboard focus from this element.

Rendering

requestRender()

Request a re-render.

Lifecycle

destroy()

Destroy this element and remove it from the hierarchy.

destroyRecursively()

Destroy this element and all descendants.

Layout

getLayoutNode()

Get the Yoga layout node.
YogaNode
The Yoga layout node

Overridable Methods

These methods can be overridden in subclasses to customize behavior.

renderSelf()

Render the element itself (called during render pass).
OptimizedBuffer
Buffer to render to
number
Time since last render (in milliseconds)

onUpdate()

Called before rendering (for animations, state updates, etc.).
number
Time since last update

onResize()

Called when the element is resized.
number
New width
number
New height

onRemove()

Called when the element is removed from its parent.

destroySelf()

Called during destruction (for cleanup).

onMouseEvent()

Called for mouse events (after event handlers).
MouseEvent
The mouse event

handleKeyPress()

Called for key press events (when focused).
KeyEvent
The key event
boolean
Whether the event was handled

handlePaste()

Called for paste events (when focused).
PasteEvent
The paste event

Events

LayoutEvents

layout-changed

Emitted when layout changes.

resize

Emitted when the element is resized.

RenderableEvents

focused

Emitted when the element gains focus.

blurred

Emitted when the element loses focus.

Example