Overview
TheRenderable 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
ExtendsBaseRenderable 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