Animation
apply
(method) Animation:apply(element: Element)
duration
number
elapsed
number
fade
function Animation.fade(duration: number, fromOpacity: number, toOpacity: number)
-> Animation
Create a simple fade animation
final
{ width: number, height: number, opacity: number }
interpolate
(method) Animation:interpolate()
-> table
new
function Animation.new(props: AnimationProps)
-> Animation
scale
function Animation.scale(duration: number, fromScale: table, toScale: table)
-> Animation
Create a simple scale animation
@param fromScale — {width:number,height:number}
@param toScale — {width:number,height:number}
start
{ width: number, height: number, opacity: number }
transform
table?
transition
table?
update
(method) Animation:update(dt: number)
-> boolean
⚠️ Internal Properties
Warning: The following properties are internal implementation details and should not be accessed directly. They are prefixed with
_to indicate they are private. Accessing these properties may break in future versions without notice.
__index
Animation
_resultDirty
boolean
AnimationProps
duration
number
final
{ width: number, height: number, opacity: number }
start
{ width: number, height: number, opacity: number }
transform
table?
transition
table?
Color
a
number
Alpha component (0-1)
b
number
Blue component (0-1)
fromHex
function Color.fromHex(hexWithTag: string)
-> Color
Convert hex string to color Supports both 6-digit (#RRGGBB) and 8-digit (#RRGGBBAA) hex formats
@param hexWithTag — e.g. “#RRGGBB” or “#RRGGBBAA”
g
number
Green component (0-1)
isValidColorFormat
function Color.isValidColorFormat(value: any)
-> format: string?
Check if a value is a valid color format
@param value — Value to check
@return format — Format type (hex, rgb, rgba, named, table, nil if invalid)
new
function Color.new(r?: number, g?: number, b?: number, a?: number)
-> Color
Create a new color instance
parse
function Color.parse(value: any)
-> Color
Parse a color from various formats
@param value — Color value (hex, named, table)
@return — Parsed color
r
number
Red component (0-1)
sanitizeColor
function Color.sanitizeColor(value: any, default?: Color)
-> Color
Sanitize a color value
@param value — Color value to sanitize
@param default — Default color if invalid
@return — Sanitized color
toRGBA
(method) Color:toRGBA()
-> r: number
2. g: number
3. b: number
4. a: number
validateColor
function Color.validateColor(value: any, options?: table)
-> valid: boolean
2. error: string?
Validate a color value
@param value — Color value to validate
@param options — Validation options
@return valid — True if valid
@return error — Error message if invalid
validateColorChannel
function Color.validateColorChannel(value: any, max?: number)
-> valid: boolean
2. clamped: number?
Validate a single color channel value
@param value — Value to validate
@param max — Maximum value (255 for 0-255 range, 1 for 0-1 range)
@return valid — True if valid
@return clamped — Clamped value in 0-1 range
validateHexColor
function Color.validateHexColor(hex: string)
-> valid: boolean
2. error: string?
Validate hex color format
@param hex — Hex color string (with or without #)
@return valid — True if valid format
@return error — Error message if invalid
validateNamedColor
function Color.validateNamedColor(name: string)
-> valid: boolean
2. error: string?
Validate named color
@param name — Color name
@return valid — True if valid
@return error — Error message if invalid
validateRGBColor
function Color.validateRGBColor(r: number, g: number, b: number, a?: number, max?: number)
-> valid: boolean
2. error: string?
Validate RGB/RGBA color values
@param r — Red component
@param g — Green component
@param b — Blue component
@param a — Alpha component (optional)
@param max — Maximum value (255 or 1)
@return valid — True if valid
@return error — Error message if invalid
⚠️ Internal Properties
Warning: The following properties are internal implementation details and should not be accessed directly. They are prefixed with
_to indicate they are private. Accessing these properties may break in future versions without notice.
__index
Color
Utility class for color handling
Element
active
boolean?
Whether the element is active/focused (for inputs, default: false)
addChild
(method) Element:addChild(child: Element)
Add child to element
alignContent
AlignContent
Alignment of lines in multi-line flex containers (default: STRETCH)
alignItems
AlignItems
Alignment of items along cross axis (default: STRETCH)
alignSelf
AlignSelf
Alignment of the item itself along cross axis (default: AUTO)
animation
table?
Animation instance for this element
applyPositioningOffsets
(method) Element:applyPositioningOffsets(element: any)
Apply positioning offsets (top, right, bottom, left) to an element @param element The element to apply offsets to
autoGrow
boolean
Whether element auto-grows with text (default: false)
autoScaleText
boolean
Whether text should auto-scale with window size (default: true)
autosizing
{ width: boolean, height: boolean }
Whether the element should automatically size to fit its children
backdropBlur
{ intensity: number, quality: number }?
Blur content behind the element (intensity: 0-100, quality: 1-10)
backgroundColor
Color
Background color of the element
blur
(method) Element:blur()
Remove focus from this element
border
Border
Border configuration for the element
borderColor
Color
Color of the border
bottom
number?
Offset from bottom edge (CSS-style positioning)
calculateAutoHeight
(method) Element:calculateAutoHeight()
-> number
Calculate auto height based on children
calculateAutoWidth
(method) Element:calculateAutoWidth()
-> number
calculateTextHeight
(method) Element:calculateTextHeight()
-> number
calculateTextWidth
(method) Element:calculateTextWidth()
-> number
Calculate text width for button
children
table<integer, Element>
Children of this element
clearChildren
(method) Element:clearChildren()
Remove all children from this element
clearSelection
(method) Element:clearSelection()
Clear selection
columnGap
(string|number)?
Gap between grid columns
contains
(method) Element:contains(x: number, y: number)
-> boolean
Check if point is inside element bounds
contentAutoSizingMultiplier
{ width: number?, height: number? }?
Multiplier for auto-sized content dimensions
contentBlur
{ intensity: number, quality: number }?
Blur the element’s content including children (intensity: 0-100, quality: 1-10)
cornerRadius
(number|{ topLeft: number?, topRight: number?, bottomLeft: number?, bottomRight: number? })?
Corner radius for rounded corners (default: 0)
cursorBlinkRate
number
Cursor blink rate in seconds (default: 0.5)
cursorColor
Color?
Cursor color (default: nil, uses textColor)
deleteSelection
(method) Element:deleteSelection()
-> boolean
Delete selected text
@return — True if text was deleted
deleteText
(method) Element:deleteText(startPos: number, endPos: number)
@param startPos — Start position (inclusive)
@param endPos — End position (inclusive)
destroy
(method) Element:destroy()
Destroy element and its children
disableHighlight
boolean?
Whether to disable the pressed state highlight overlay (default: false)
disabled
boolean?
Whether the element is disabled (default: false)
draw
(method) Element:draw(backdropCanvas: any)
Draw element and its children
editable
boolean
Whether the element is editable (default: false)
flexDirection
FlexDirection
Direction of flex layout (default: HORIZONTAL)
flexWrap
FlexWrap
Whether children wrap to multiple lines (default: NOWRAP)
focus
(method) Element:focus()
Focus this element for keyboard input
fontFamily
string?
Font family name from theme or path to font file
gap
string|number
Space between children elements (default: 10)
getAvailableContentHeight
(method) Element:getAvailableContentHeight()
-> number
Get available content height for children (accounting for 9-patch content padding) This is the height that children should use when calculating percentage heights
getAvailableContentWidth
(method) Element:getAvailableContentWidth()
-> number
Get available content width for children (accounting for 9-patch content padding) This is the width that children should use when calculating percentage widths
getBlurInstance
(method) Element:getBlurInstance()
-> table?
Get or create blur instance for this element
@return — Blur instance or nil if no blur configured
getBorderBoxHeight
(method) Element:getBorderBoxHeight()
-> number
Get border-box height (including padding)
getBorderBoxWidth
(method) Element:getBorderBoxWidth()
-> number
Get border-box width (including padding)
getBounds
(method) Element:getBounds()
-> { x: number, y: number, width: number, height: number }
Get element bounds (content box)
getChildCount
(method) Element:getChildCount()
-> number
Get the number of children this element has
getContentSize
(method) Element:getContentSize()
-> contentWidth: number
2. contentHeight: number
Get content dimensions (including overflow) (delegates to ScrollManager)
getCursorPosition
(method) Element:getCursorPosition()
-> number
Get cursor position
@return — Character index (0-based)
getMaxScroll
(method) Element:getMaxScroll()
-> maxScrollX: number
2. maxScrollY: number
Get maximum scroll bounds (delegates to ScrollManager)
getScaledContentPadding
(method) Element:getScaledContentPadding()
-> table|nil
Get the current state’s scaled content padding Returns the contentPadding for the current theme state, scaled to the element’s size
@return — {left, top, right, bottom} or nil if no contentPadding
getScrollPercentage
(method) Element:getScrollPercentage()
-> percentX: number
2. percentY: number
Get scroll percentage (0-1) (delegates to ScrollManager)
getScrollPosition
(method) Element:getScrollPosition()
-> scrollX: number
2. scrollY: number
Get current scroll position (delegates to ScrollManager)
getSelectedText
(method) Element:getSelectedText()
-> string?
Get selected text
@return — Selected text or nil if no selection
getSelection
(method) Element:getSelection()
-> number?
2. number?
Get selection range
@return — Start and end positions, or nil if no selection
getText
(method) Element:getText()
-> string
Get current text buffer
gridColumns
number?
Number of columns in the grid
gridRows
number?
Number of rows in the grid
hasOverflow
(method) Element:hasOverflow()
-> hasOverflowX: boolean
2. hasOverflowY: boolean
Check if element has overflow (delegates to ScrollManager)
hasSelection
(method) Element:hasSelection()
-> boolean
Check if there is an active selection
height
string|number
Height of the element
hide
(method) Element:hide()
same as calling updateOpacity(0)
hideScrollbars
(boolean|{ vertical: boolean, horizontal: boolean })?
Hide scrollbars (boolean for both, or table for individual control)
id
string
image
(love.Image)?
Image object to display
imageOpacity
number?
Image opacity 0-1 (default: 1, combines with element opacity)
imagePath
string?
Path to image file (auto-loads via ImageCache)
inputType
"email"|"number"|"text"|"url"
Input type for validation (default: “text”)
insertText
(method) Element:insertText(text: string, position?: number)
Insert text at position
@param text — Text to insert
@param position — Position to insert at (default: cursor position)
isFocused
(method) Element:isFocused()
-> boolean
Check if this element is focused
justifyContent
JustifyContent
Alignment of items along main axis (default: FLEX_START)
justifySelf
JustifySelf
Alignment of the item itself along main axis (default: AUTO)
keypressed
(method) Element:keypressed(key: string, scancode: string, isrepeat: boolean)
Handle key press (special keys)
@param key — Key name
@param scancode — Scancode
@param isrepeat — Whether this is a key repeat
layoutChildren
(method) Element:layoutChildren()
left
number?
Offset from left edge (CSS-style positioning)
margin
{ top: number, right: number, bottom: number, left: number }
Margin around children (default: {top=0, right=0, bottom=0, left=0})
maxLength
number?
Maximum text length in characters (default: nil)
maxLines
number?
Maximum number of lines (default: nil)
maxTextSize
number?
minTextSize
number?
moveCursorBy
(method) Element:moveCursorBy(delta: number)
Move cursor by delta characters
@param delta — Number of characters to move (positive or negative)
moveCursorToEnd
(method) Element:moveCursorToEnd()
Move cursor to end of text
moveCursorToLineEnd
(method) Element:moveCursorToLineEnd()
Move cursor to end of current line
moveCursorToLineStart
(method) Element:moveCursorToLineStart()
Move cursor to start of current line
moveCursorToNextWord
(method) Element:moveCursorToNextWord()
Move cursor to start of next word
moveCursorToPreviousWord
(method) Element:moveCursorToPreviousWord()
Move cursor to start of previous word
moveCursorToStart
(method) Element:moveCursorToStart()
Move cursor to start of text
multiline
boolean
Whether the element supports multiple lines (default: false)
new
function Element.new(props: ElementProps, deps: table)
-> Element
@param deps — Required dependency table (provided by FlexLove)
objectFit
("contain"|"cover"|"fill"|"none"|"scale-down")?
Image fit mode (default: “fill”)
objectPosition
string?
Image position like “center center”, “top left”, “50% 50%” (default: “center center”)
onBlur
fun(element: Element)?
Callback function when element loses focus
onEnter
fun(element: Element)?
Callback function when Enter key is pressed
onEvent
fun(element: Element, event: InputEvent)?
Callback function for interaction events
onFocus
fun(element: Element)?
Callback function when element receives focus
onTextChange
fun(element: Element, text: string)?
Callback function when text changes
onTextInput
fun(element: Element, text: string)?
Callback function for text input
opacity
number
overflow
string?
Overflow behavior for both axes
overflowX
string?
Overflow behavior for horizontal axis
overflowY
string?
Overflow behavior for vertical axis
padding
{ top: number, right: number, bottom: number, left: number }?
Padding around children (default: {top=0, right=0, bottom=0, left=0})
parent
Element?
Parent element (nil if top-level)
passwordMode
boolean
Whether to display text as password (default: false)
placeholder
string?
Placeholder text when empty (default: nil)
positioning
Positioning
Layout positioning mode (default: RELATIVE)
prevGameSize
{ width: number, height: number }
Previous game size for resize calculations
recalculateUnits
(method) Element:recalculateUnits(newViewportWidth: number, newViewportHeight: number)
removeChild
(method) Element:removeChild(child: Element)
Remove a specific child from this element
replaceText
(method) Element:replaceText(startPos: number, endPos: number, newText: string)
Replace text in range
@param startPos — Start position (inclusive)
@param endPos — End position (inclusive)
@param newText — Replacement text
resize
(method) Element:resize(newGameWidth: number, newGameHeight: number)
Resize element and its children based on game window size change
right
number?
Offset from right edge (CSS-style positioning)
rowGap
(string|number)?
Gap between grid rows
scaleCorners
number?
Scale multiplier for 9-patch corners/edges. E.g., 2 = 2x size (overrides theme setting)
scalingAlgorithm
("bilinear"|"nearest")?
Scaling algorithm for 9-patch corners: “nearest” (sharp/pixelated) or “bilinear” (smooth) (overrides theme setting)
scrollBy
(method) Element:scrollBy(dx?: number, dy?: number)
Scroll by delta amount (delegates to ScrollManager)
@param dx — X delta (nil for no change)
@param dy — Y delta (nil for no change)
scrollSpeed
number?
Scroll speed multiplier
scrollToBottom
(method) Element:scrollToBottom()
Scroll to bottom
scrollToLeft
(method) Element:scrollToLeft()
Scroll to left
scrollToRight
(method) Element:scrollToRight()
Scroll to right
scrollToTop
(method) Element:scrollToTop()
Scroll to top
scrollable
boolean
Whether text is scrollable (default: false for single-line, true for multi-line)
scrollbarColor
Color?
Scrollbar thumb color
scrollbarPadding
number?
Scrollbar padding from edges
scrollbarRadius
number?
Scrollbar corner radius
scrollbarTrackColor
Color?
Scrollbar track color
scrollbarWidth
number?
Scrollbar width in pixels
selectAll
(method) Element:selectAll()
Select all text
selectOnFocus
boolean
Whether to select all text on focus (default: false)
selectionColor
Color?
Selection background color (default: nil, uses theme or default)
setCursorPosition
(method) Element:setCursorPosition(position: number)
Set cursor position
@param position — Character index (0-based)
setScrollPosition
(method) Element:setScrollPosition(x?: number, y?: number)
Set scroll position with bounds clamping (delegates to ScrollManager)
@param x — X scroll position (nil to keep current)
@param y — Y scroll position (nil to keep current)
setSelection
(method) Element:setSelection(startPos: number, endPos: number)
Set selection range
@param startPos — Start position (inclusive)
@param endPos — End position (inclusive)
setText
(method) Element:setText(text: string)
Set text buffer and mark dirty
show
(method) Element:show()
same as calling updateOpacity(1)
text
string?
Text content to display in the element
textAlign
TextAlign
Alignment of the text content
textColor
Color
Color of the text content
textOverflow
"clip"|"ellipsis"|"scroll"
Text overflow behavior (default: “clip”)
textSize
number?
Resolved font size for text content in pixels
textWrap
boolean|"char"|"word"
Text wrapping mode (default: false for single-line, “word” for multi-line)
textinput
(method) Element:textinput(text: string)
Handle text input (character input)
@param text — Character(s) to insert
theme
string?
Theme component to use for rendering
themeComponent
string?
top
number?
Offset from top edge (CSS-style positioning)
transform
TransformProps
Transform properties for animations and styling
transition
TransitionProps
Transition settings for animations
units
table
Original unit specifications for responsive behavior
update
(method) Element:update(dt: number)
Update element (propagate to children)
updateOpacity
(method) Element:updateOpacity(newOpacity: number)
updateText
(method) Element:updateText(newText: string, autoresize?: boolean)
@param autoresize — default: false
userdata
table?
width
string|number
Width of the element
x
string|number
X coordinate of the element
y
string|number
Y coordinate of the element
z
number
Z-index for layering (default: 0)
⚠️ Internal Properties
Warning: The following properties are internal implementation details and should not be accessed directly. They are prefixed with
_to indicate they are private. Accessing these properties may break in future versions without notice.
__index
Element
_blurInstance
table?
Internal: cached blur effect instance
_borderBoxHeight
number?
Internal: cached border-box height
_borderBoxWidth
number?
Internal: cached border-box width
_calculateScrollbarDimensions
(method) Element:_calculateScrollbarDimensions()
-> table
Calculate scrollbar dimensions and positions (delegates to ScrollManager)
@return — {vertical: {visible, trackHeight, thumbHeight, thumbY}, horizontal: {visible, trackWidth, thumbWidth, thumbX}}
_contentHeight
number?
Internal: total content height
_contentWidth
number?
Internal: total content width
_cursorBlinkPauseTimer
number?
Internal: timer for how long cursor blink has been paused
_cursorBlinkPaused
boolean?
Internal: whether cursor blink is paused (e.g., while typing)
_cursorBlinkTimer
number?
Internal: cursor blink timer
_cursorColumn
number?
Internal: cursor column within line
_cursorLine
number?
Internal: cursor line number (1-based)
_cursorPosition
number?
Internal: cursor character position (0-based)
_cursorVisible
boolean?
Internal: cursor visibility state
_detectOverflow
(method) Element:_detectOverflow()
Detect if content overflows container bounds (delegates to ScrollManager)
_eventHandler
EventHandler
Event handler instance for input processing
_explicitlyAbsolute
boolean?
_focused
boolean?
Internal: focus state
_getFont
(method) Element:_getFont()
-> love.Font
_getScrollbarAtPosition
(method) Element:_getScrollbarAtPosition(mouseX: number, mouseY: number)
-> table|nil
Get scrollbar at mouse position (delegates to ScrollManager)
@return — {component: “vertical”|“horizontal”, region: “thumb”|“track”}
_handleScrollbarDrag
(method) Element:_handleScrollbarDrag(mouseX: number, mouseY: number)
-> boolean
Handle scrollbar drag (delegates to ScrollManager)
@return — True if event was consumed
_handleScrollbarPress
(method) Element:_handleScrollbarPress(mouseX: number, mouseY: number, button: number)
-> boolean
Handle scrollbar mouse press
@return — True if event was consumed
_handleScrollbarRelease
(method) Element:_handleScrollbarRelease(button: number)
-> boolean
Handle scrollbar release (delegates to ScrollManager)
@return — True if event was consumed
_handleTextClick
(method) Element:_handleTextClick(mouseX: number, mouseY: number, clickCount: number)
Handle mouse click on text (set cursor position or start selection)
@param mouseX — Mouse X coordinate
@param mouseY — Mouse Y coordinate
@param clickCount — Number of clicks (1=single, 2=double, 3=triple)
_handleTextDrag
(method) Element:_handleTextDrag(mouseX: number, mouseY: number)
Handle mouse drag for text selection
@param mouseX — Mouse X coordinate
@param mouseY — Mouse Y coordinate
_handleWheelScroll
(method) Element:_handleWheelScroll(x: number, y: number)
-> boolean
Handle mouse wheel scrolling (delegates to ScrollManager)
@param x — Horizontal scroll amount
@param y — Vertical scroll amount
@return — True if scroll was handled
_hoveredScrollbar
table?
Internal: currently hovered scrollbar info
_layoutEngine
LayoutEngine
Internal: LayoutEngine instance for layout calculations
_lines
table?
Internal: split lines for multi-line text
_loadedImage
(love.Image)?
Internal: cached loaded image
_maxScrollX
number?
Internal: maximum horizontal scroll
_maxScrollY
number?
Internal: maximum vertical scroll
_mouseDownPosition
number?
Internal: mouse down position for drag tracking
_originalPositioning
Positioning?
Original positioning value set by user
_overflowX
boolean?
Internal: whether content overflows horizontally
_overflowY
boolean?
Internal: whether content overflows vertically
_pressed
table?
Internal: button press state tracking
_renderer
Renderer
Internal: Renderer instance for visual rendering
_scrollManager
ScrollManager?
Internal: ScrollManager instance for scroll handling
_scrollX
number?
Internal: horizontal scroll position
_scrollY
number?
Internal: vertical scroll position
_scrollbarDragOffset
number?
Internal: scrollbar drag offset
_scrollbarDragging
boolean?
Internal: scrollbar dragging state
_scrollbarHoveredHorizontal
boolean?
Internal: horizontal scrollbar hover state
_scrollbarHoveredVertical
boolean?
Internal: vertical scrollbar hover state
_scrollbarPressHandled
boolean?
Internal: scrollbar press handled flag
_selectionAnchor
number?
Internal: selection anchor point
_selectionEnd
number?
Internal: selection end position
_selectionStart
number?
Internal: selection start position
_stateId
string?
State manager ID for this element
_syncScrollManagerState
(method) Element:_syncScrollManagerState()
Sync ScrollManager state to Element properties for backward compatibility This ensures Renderer and StateManager can access scroll state from Element
_textBuffer
string?
Internal: text buffer for editable elements
_textDirty
boolean?
Internal: flag to recalculate lines/wrapping
_textDragOccurred
boolean?
Internal: whether text drag occurred
_textEditor
TextEditor?
Internal: TextEditor instance for editable elements
_themeManager
ThemeManager
Internal: theme manager instance
_themeState
string?
Current theme state (normal, hover, pressed, active, disabled)
_wrapLine
(method) Element:_wrapLine(line: string, maxWidth: number)
-> table
Wrap a single line of text
@param line — Line to wrap
@param maxWidth — Maximum width in pixels
@return — Array of wrapped line parts
_wrappedLines
table?
Internal: wrapped line data
ElementProps
active
boolean?
Whether the element is active/focused (for inputs, default: false)
alignContent
AlignContent?
Alignment of lines in multi-line flex containers (default: STRETCH)
alignItems
AlignItems?
Alignment of items along cross axis (default: STRETCH)
alignSelf
AlignSelf?
Alignment of the item itself along cross axis (default: AUTO)
autoGrow
boolean?
Whether element auto-grows with text (default: false for single-line, true for multi-line)
autoScaleText
boolean?
Whether text should auto-scale with window size (default: true)
backdropBlur
{ intensity: number, quality: number }?
Blur content behind the element (intensity: 0-100, quality: 1-10, default: nil)
backgroundColor
Color?
Background color (default: transparent)
border
Border?
Border configuration for the element
borderColor
Color?
Color of the border (default: black)
bottom
(string|number)?
Offset from bottom edge (CSS-style positioning)
columnGap
(string|number)?
Gap between grid columns (default: 0)
contentAutoSizingMultiplier
{ width: number?, height: number? }?
Multiplier for auto-sized content dimensions (default: sourced from theme or {1, 1})
contentBlur
{ intensity: number, quality: number }?
Blur the element’s content including children (intensity: 0-100, quality: 1-10, default: nil)
cornerRadius
(number|{ topLeft: number?, topRight: number?, bottomLeft: number?, bottomRight: number? })?
Corner radius: number (all corners) or table for individual corners (default: 0)
cursorBlinkRate
number?
Cursor blink rate in seconds (default: 0.5)
cursorColor
Color?
Cursor color (default: nil, uses textColor)
disableHighlight
boolean?
Whether to disable the pressed state highlight overlay (default: false, or true when using themeComponent)
disabled
boolean?
Whether the element is disabled (default: false)
editable
boolean?
Whether the element is editable (default: false)
flexDirection
FlexDirection?
Direction of flex layout: “horizontal”|“vertical” (default: HORIZONTAL)
flexWrap
FlexWrap?
Whether children wrap to multiple lines: “nowrap”|“wrap”|“wrap-reverse” (default: NOWRAP)
fontFamily
string?
Font family name from theme or path to font file (default: theme default or system default, inherits from parent)
gap
(string|number)?
Space between children elements (default: 0)
gridColumns
number?
Number of columns in the grid (default: 1)
gridRows
number?
Number of rows in the grid (default: 1)
height
(string|number)?
Height of the element (default: calculated automatically)
hideScrollbars
(boolean|{ vertical: boolean, horizontal: boolean })?
Hide scrollbars (boolean for both, or table for individual control, default: false)
id
string?
Unique identifier for the element (auto-generated in immediate mode if not provided)
image
(love.Image)?
Image object to display
imageOpacity
number?
Image opacity 0-1 (default: 1, combines with element opacity)
imagePath
string?
Path to image file (auto-loads via ImageCache)
inputType
("email"|"number"|"text"|"url")?
Input type for validation (default: “text”)
justifyContent
JustifyContent?
Alignment of items along main axis (default: FLEX_START)
justifySelf
JustifySelf?
Alignment of the item itself along main axis (default: AUTO)
left
(string|number)?
Offset from left edge (CSS-style positioning)
margin
{ top: (string|number)?, right: (string|number)?, bottom: (string|number)?, left: (string|number)?, horizontal: (string|number)?, vertical: (string|number)? }?
Margin around element (default: {top=0, right=0, bottom=0, left=0})
maxLength
number?
Maximum text length in characters (default: nil)
maxLines
number?
Maximum number of lines (default: nil)
maxTextSize
number?
Maximum text size in pixels for auto-scaling
minTextSize
number?
Minimum text size in pixels for auto-scaling
multiline
boolean?
Whether the element supports multiple lines (default: false)
objectFit
("contain"|"cover"|"fill"|"none"|"scale-down")?
Image fit mode (default: “fill”)
objectPosition
string?
Image position like “center center”, “top left”, “50% 50%” (default: “center center”)
onBlur
fun(element: Element, event: InputEvent)?
Callback when element loses focus
onEnter
fun(element: Element)?
Callback when Enter key is pressed
onEvent
fun(element: Element, event: InputEvent)?
Callback function for interaction events
onFocus
fun(element: Element, event: InputEvent)?
Callback when element receives focus
onTextChange
fun(element: Element, text: string)?
Callback when text content changes
onTextInput
fun(element: Element, text: string)?
Callback when text is input
opacity
number?
Element opacity 0-1 (default: 1)
overflow
("auto"|"hidden"|"scroll"|"visible")?
Overflow behavior (default: “hidden”)
overflowX
("auto"|"hidden"|"scroll"|"visible")?
X-axis overflow (overrides overflow)
overflowY
("auto"|"hidden"|"scroll"|"visible")?
Y-axis overflow (overrides overflow)
padding
{ top: (string|number)?, right: (string|number)?, bottom: (string|number)?, left: (string|number)?, horizontal: (string|number)?, vertical: (string|number)? }?
Padding around children (default: {top=0, right=0, bottom=0, left=0})
parent
Element?
Parent element for hierarchical structure
passwordMode
boolean?
Whether to display text as password (default: false, disables multiline)
placeholder
string?
Placeholder text when empty (default: nil)
positioning
Positioning?
Layout positioning mode: “absolute”|“relative”|“flex”|“grid” (default: RELATIVE)
right
(string|number)?
Offset from right edge (CSS-style positioning)
rowGap
(string|number)?
Gap between grid rows (default: 0)
scaleCorners
number?
Scale multiplier for 9-patch corners/edges. E.g., 2 = 2x size (overrides theme setting)
scalingAlgorithm
("bilinear"|"nearest")?
Scaling algorithm for 9-patch corners: “nearest” (sharp/pixelated) or “bilinear” (smooth) (overrides theme setting)
scrollSpeed
number?
Pixels per wheel notch (default: 20)
scrollable
boolean?
Whether text is scrollable (default: false for single-line, true for multi-line)
scrollbarColor
Color?
Scrollbar thumb color (default: Color.new(0.5, 0.5, 0.5, 0.8))
scrollbarPadding
number?
Padding between scrollbar and edge (default: 2)
scrollbarRadius
number?
Corner radius for scrollbar (default: 6)
scrollbarTrackColor
Color?
Scrollbar track color (default: Color.new(0.2, 0.2, 0.2, 0.5))
scrollbarWidth
number?
Width of scrollbar track in pixels (default: 12)
selectOnFocus
boolean?
Whether to select all text on focus (default: false)
selectionColor
Color?
Selection background color (default: nil, uses theme or default)
text
string?
Text content to display (default: nil)
textAlign
TextAlign?
Alignment of the text content (default: START)
textColor
Color?
Color of the text content (default: black or theme text color)
textOverflow
("clip"|"ellipsis"|"scroll")?
Text overflow behavior (default: “clip”)
textSize
(string|number)?
Font size: number (px), string with units (“2vh”, “10%”), or preset (“xxs”|“xs”|“sm”|“md”|“lg”|“xl”|“xxl”|“3xl”|“4xl”) (default: “md” or 12px)
textWrap
(boolean|"char"|"word")?
Text wrapping mode (default: false for single-line, “word” for multi-line)
theme
string?
Theme name to use (e.g., “space”, “metal”). Defaults to theme from flexlove.init()
themeComponent
string?
Theme component to use (e.g., “panel”, “button”, “input”). If nil, no theme is applied
top
(string|number)?
Offset from top edge (CSS-style positioning)
transform
TransformProps?
Transform properties for animations and styling
transition
TransitionProps?
Transition settings for animations
userdata
table?
User-defined data storage for custom properties
width
(string|number)?
Width of the element (default: calculated automatically)
x
(string|number)?
X coordinate of the element (default: 0)
y
(string|number)?
Y coordinate of the element (default: 0)
z
number?
Z-index for layering (default: 0)
⚠️ Internal Properties
Warning: The following properties are internal implementation details and should not be accessed directly. They are prefixed with
_to indicate they are private. Accessing these properties may break in future versions without notice.
_scrollX
number?
Internal: scroll X position (restored in immediate mode)
_scrollY
number?
Internal: scroll Y position (restored in immediate mode)
EventHandler
getState
(method) EventHandler:getState()
-> State: table
Get state for persistence (for immediate mode)
@return State — data
initialize
(method) EventHandler:initialize(element: Element)
Initialize EventHandler with parent element reference
@param element — The parent element
isAnyButtonPressed
(method) EventHandler:isAnyButtonPressed()
-> True: boolean
Check if any mouse button is pressed
@return True — if any button is pressed
isButtonPressed
(method) EventHandler:isButtonPressed(button: number)
-> True: boolean
Check if a specific button is pressed
@param button — Mouse button (1=left, 2=right, 3=middle)
@return True — if button is pressed
new
function EventHandler.new(config: table, deps: table)
-> EventHandler
Create a new EventHandler instance
@param config — Configuration options
@param deps — Dependencies {InputEvent, Context, utils}
onEvent
fun(element: Element, event: InputEvent)?
processMouseEvents
(method) EventHandler:processMouseEvents(mx: number, my: number, isHovering: boolean, isActiveElement: boolean)
Process mouse button events in the update cycle
@param mx — Mouse X position
@param my — Mouse Y position
@param isHovering — Whether mouse is over element
@param isActiveElement — Whether this is the top element at mouse position
processTouchEvents
(method) EventHandler:processTouchEvents()
Process touch events in the update cycle
resetScrollbarPressFlag
(method) EventHandler:resetScrollbarPressFlag()
Reset scrollbar press flag (called each frame)
setState
(method) EventHandler:setState(state: table)
Restore state from persistence (for immediate mode)
@param state — State data
⚠️ Internal Properties
Warning: The following properties are internal implementation details and should not be accessed directly. They are prefixed with
_to indicate they are private. Accessing these properties may break in future versions without notice.
_Context
table
_InputEvent
table
__index
EventHandler
_clickCount
number
_dragStartX
table<number, number>
_dragStartY
table<number, number>
_element
Element?
_handleMouseDrag
(method) EventHandler:_handleMouseDrag(mx: number, my: number, button: number, isHovering: boolean)
Handle mouse drag (while button is pressed and mouse moves)
@param mx — Mouse X position
@param my — Mouse Y position
@param button — Mouse button
@param isHovering — Whether mouse is over element
_handleMousePress
(method) EventHandler:_handleMousePress(mx: number, my: number, button: number)
Handle mouse button press
@param mx — Mouse X position
@param my — Mouse Y position
@param button — Mouse button (1=left, 2=right, 3=middle)
_handleMouseRelease
(method) EventHandler:_handleMouseRelease(mx: number, my: number, button: number)
Handle mouse button release
@param mx — Mouse X position
@param my — Mouse Y position
@param button — Mouse button
_hovered
boolean
_lastClickButton
number?
_lastClickTime
number?
_lastMouseX
table<number, number>
_lastMouseY
table<number, number>
_pressed
table<number, boolean>
_scrollbarPressHandled
boolean
_touchPressed
table<number, boolean>
_utils
table
FlexLove
Animation
Animation
Color
Color
Utility class for color handling
Theme
Theme
baseScale
table
beginFrame
function FlexLove.beginFrame()
Begin a new immediate mode frame
clearAllStates
function FlexLove.clearAllStates()
Clear all immediate mode states
clearState
function FlexLove.clearState(id: string)
Clear state for a specific element ID
defaultTheme
(string|ThemeDefinition)?
destroy
function FlexLove.destroy()
draw
function FlexLove.draw(gameDrawFunc: function|nil, postDrawFunc: function|nil)
endFrame
function FlexLove.endFrame()
enums
unknown
getElementAtPosition
function FlexLove.getElementAtPosition(x: number, y: number)
-> Element?
Find the topmost element at given coordinates
getMode
function FlexLove.getMode()
-> "immediate"|"retained"
return #1:
| "immediate"
| "retained"
getStateCount
function FlexLove.getStateCount()
-> number
getStateStats
function FlexLove.getStateStats()
-> table
Get state statistics (for debugging)
init
function FlexLove.init(config: { baseScale: { width: number?, height: number? }?, theme: (string|ThemeDefinition)?, immediateMode: boolean?, stateRetentionFrames: number?, maxStateEntries: number?, autoFrameManagement: boolean? })
keypressed
function FlexLove.keypressed(key: string, scancode: string, isrepeat: boolean)
new
function FlexLove.new(props: ElementProps)
-> Element
resize
function FlexLove.resize()
scaleFactors
table
setMode
function FlexLove.setMode(mode: "immediate"|"retained")
mode:
| "immediate"
| "retained"
textinput
function FlexLove.textinput(text: string)
topElements
table
update
function FlexLove.update(dt: any)
wheelmoved
function FlexLove.wheelmoved(dx: any, dy: any)
⚠️ Internal Properties
Warning: The following properties are internal implementation details and should not be accessed directly. They are prefixed with
_to indicate they are private. Accessing these properties may break in future versions without notice.
_DESCRIPTION
string
_LICENSE
string
_URL
string
_VERSION
string
Add version and metadata
_activeEventElement
Element?
_autoBeganFrame
boolean
_autoFrameManagement
boolean
_backdropCanvas
nil
A Canvas is used for off-screen rendering. Think of it as an invisible screen that you can draw to, but that will not be visible until you draw it to the actual visible screen. It is also known as “render to texture”.
By drawing things that do not change position often (such as background items) to the Canvas, and then drawing the entire Canvas instead of each item, you can reduce the number of draw operations performed each frame.
In versions prior to love.graphics.isSupported(“canvas”) could be used to check for support at runtime.
_cachedViewport
table
_canvasDimensions
table
_currentFrameElements
table
_focusedElement
nil
_frameNumber
integer
_frameStarted
boolean
_gameCanvas
nil
A Canvas is used for off-screen rendering. Think of it as an invisible screen that you can draw to, but that will not be visible until you draw it to the actual visible screen. It is also known as “render to texture”.
By drawing things that do not change position often (such as background items) to the Canvas, and then drawing the entire Canvas instead of each item, you can reduce the number of draw operations performed each frame.
In versions prior to love.graphics.isSupported(“canvas”) could be used to check for support at runtime.
_immediateMode
boolean
_immediateModeState
unknown
FontFamily
path
string
Path to the font file (relative to FlexLove or absolute)
⚠️ Internal Properties
Warning: The following properties are internal implementation details and should not be accessed directly. They are prefixed with
_to indicate they are private. Accessing these properties may break in future versions without notice.
_loadedFont
(love.Font)?
Internal: cached loaded font
InputEvent
button
number
Mouse button: 1 (left), 2 (right), 3 (middle)
clickCount
number
Number of clicks (for double/triple click detection)
dx
number?
Delta X from drag start (only for drag events)
dy
number?
Delta Y from drag start (only for drag events)
modifiers
{ shift: boolean, ctrl: boolean, alt: boolean, super: boolean }
new
function InputEvent.new(props: InputEventProps)
-> InputEvent
Create a new input event
timestamp
number
Time when event occurred
type
"click"|"drag"|"middleclick"|"press"|"release"...(+1)
x
number
Mouse X position
y
number
Mouse Y position
⚠️ Internal Properties
Warning: The following properties are internal implementation details and should not be accessed directly. They are prefixed with
_to indicate they are private. Accessing these properties may break in future versions without notice.
__index
InputEvent
TextEditor
allowNewlines
boolean
allowTabs
boolean
autoGrow
boolean
blur
(method) TextEditor:blur()
Remove focus from this element
clearSelection
(method) TextEditor:clearSelection()
Clear selection
cursorBlinkRate
number
cursorColor
Color?
Utility class for color handling
customSanitizer
function?
deleteSelection
(method) TextEditor:deleteSelection()
-> boolean
Delete selected text
@return — True if text was deleted
deleteText
(method) TextEditor:deleteText(startPos: number, endPos: number)
Delete text in range
@param startPos — Start position (inclusive)
@param endPos — End position (inclusive)
editable
boolean
focus
(method) TextEditor:focus()
Focus this element for keyboard input
getCursorPosition
(method) TextEditor:getCursorPosition()
-> number
Get cursor position
@return — Character index (0-based)
getSelectedText
(method) TextEditor:getSelectedText()
-> string?
Get selected text
@return — Selected text or nil if no selection
getSelection
(method) TextEditor:getSelection()
-> number?
2. number?
Get selection range
@return — Start and end positions, or nil if no selection
getText
(method) TextEditor:getText()
-> string
Get current text buffer
handleKeyPress
(method) TextEditor:handleKeyPress(key: string, scancode: string, isrepeat: boolean)
Handle key press (special keys)
@param key — Key name
@param scancode — Scancode
@param isrepeat — Whether this is a key repeat
handleTextClick
(method) TextEditor:handleTextClick(mouseX: number, mouseY: number, clickCount: number)
Handle mouse click on text
@param clickCount — 1=single, 2=double, 3=triple
handleTextDrag
(method) TextEditor:handleTextDrag(mouseX: number, mouseY: number)
Handle mouse drag for text selection
handleTextInput
(method) TextEditor:handleTextInput(text: string)
Handle text input (character insertion)
hasSelection
(method) TextEditor:hasSelection()
-> boolean
Check if there is an active selection
initialize
(method) TextEditor:initialize(element: table)
Initialize TextEditor with parent element reference
@param element — The parent Element instance
inputType
"email"|"number"|"text"|"url"
insertText
(method) TextEditor:insertText(text: string, position?: number, skipSanitization?: boolean)
Insert text at position
@param text — Text to insert
@param position — Position to insert at (default: cursor position)
@param skipSanitization — Skip sanitization (for internal use)
isFocused
(method) TextEditor:isFocused()
-> boolean
Check if this element is focused
maxLength
number?
maxLines
number?
mouseToTextPosition
(method) TextEditor:mouseToTextPosition(mouseX: number, mouseY: number)
-> number
Convert mouse coordinates to cursor position in text
@param mouseX — Mouse X coordinate (absolute)
@param mouseY — Mouse Y coordinate (absolute)
@return — Cursor position (character index)
moveCursorBy
(method) TextEditor:moveCursorBy(delta: number)
Move cursor by delta characters
@param delta — Number of characters to move (positive or negative)
moveCursorToEnd
(method) TextEditor:moveCursorToEnd()
Move cursor to end of text
moveCursorToLineEnd
(method) TextEditor:moveCursorToLineEnd()
Move cursor to end of current line
moveCursorToLineStart
(method) TextEditor:moveCursorToLineStart()
Move cursor to start of current line
moveCursorToNextWord
(method) TextEditor:moveCursorToNextWord()
Move cursor to start of next word
moveCursorToPreviousWord
(method) TextEditor:moveCursorToPreviousWord()
Move cursor to start of previous word
moveCursorToStart
(method) TextEditor:moveCursorToStart()
Move cursor to start of text
multiline
boolean
new
function TextEditor.new(config: TextEditorConfig, deps: table)
-> TextEditor: table
Create a new TextEditor instance
@param deps — Dependencies {Context, StateManager, Color, utils}
@return TextEditor — instance
onBlur
fun(element: Element)?
onEnter
fun(element: Element)?
onFocus
fun(element: Element)?
onSanitize
fun(element: Element, original: string, sanitized: string)?
onTextChange
fun(element: Element, text: string)?
onTextInput
fun(element: Element, text: string)?
passwordMode
boolean
placeholder
string?
replaceText
(method) TextEditor:replaceText(startPos: number, endPos: number, newText: string)
Replace text in range
@param startPos — Start position (inclusive)
@param endPos — End position (inclusive)
@param newText — Replacement text
sanitize
boolean
scrollable
boolean
selectAll
(method) TextEditor:selectAll()
Select all text
selectOnFocus
boolean
selectionColor
Color?
Utility class for color handling
setCursorPosition
(method) TextEditor:setCursorPosition(position: number)
Set cursor position
@param position — Character index (0-based)
setSelection
(method) TextEditor:setSelection(startPos: number, endPos: number)
Set selection range
@param startPos — Start position (inclusive)
@param endPos — End position (inclusive)
setText
(method) TextEditor:setText(text: string, skipSanitization?: boolean)
Set text buffer and mark dirty
@param skipSanitization — Skip sanitization (for trusted input)
textOverflow
"clip"|"ellipsis"|"scroll"
textWrap
boolean|"char"|"word"
update
(method) TextEditor:update(dt: number)
Update cursor blink animation
@param dt — Delta time
updateAutoGrowHeight
(method) TextEditor:updateAutoGrowHeight()
Update element height based on text content (for autoGrow)
⚠️ Internal Properties
Warning: The following properties are internal implementation details and should not be accessed directly. They are prefixed with
_to indicate they are private. Accessing these properties may break in future versions without notice.
_Color
table
_Context
table
_FONT_CACHE
table
_StateManager
table
__index
TextEditor
_calculateWrapping
(method) TextEditor:_calculateWrapping()
Calculate text wrapping
_cursorBlinkPauseTimer
number
_cursorBlinkPaused
boolean
_cursorBlinkTimer
number
_cursorColumn
number
_cursorLine
number
_cursorPosition
number
_cursorVisible
boolean
_element
Element?
_focused
boolean
_getCursorScreenPosition
(method) TextEditor:_getCursorScreenPosition()
-> number
2. number
Get cursor screen position for rendering (handles multiline text)
@return — Cursor X and Y position relative to content area
_getFont
(method) TextEditor:_getFont()
-> (love.Font)?
Get font for text rendering
_getModifiers
function
_getSelectionRects
(method) TextEditor:_getSelectionRects(selStart: number, selEnd: number)
-> table
Get selection rectangles for rendering
@param selStart — Selection start position
@param selEnd — Selection end position
@return — Array of rectangles {x, y, width, height}
_lines
table?
_markTextDirty
(method) TextEditor:_markTextDirty()
Mark text as dirty (needs recalculation)
_mouseDownPosition
number
_resetCursorBlink
(method) TextEditor:_resetCursorBlink(pauseBlink: boolean|nil)
Reset cursor blink (show cursor immediately)
@param pauseBlink — Whether to pause blinking (for typing)
_sanitizeText
(method) TextEditor:_sanitizeText(text: string)
-> string
Internal: Sanitize text input
@param text — Text to sanitize
@return — Sanitized text
_saveState
(method) TextEditor:_saveState()
Save state to StateManager (for immediate mode)
_selectWordAtPosition
(method) TextEditor:_selectWordAtPosition(position: number)
Select word at given position
_selectionAnchor
number?
_selectionEnd
number?
_selectionStart
number?
_splitLines
(method) TextEditor:_splitLines()
Split text into lines (for multi-line text)
_textBuffer
string
_textDirty
boolean
_textDragOccurred
boolean?
_textScrollX
number
_updateTextIfDirty
(method) TextEditor:_updateTextIfDirty()
Update text if dirty (recalculate lines and wrapping)
_updateTextScroll
(method) TextEditor:_updateTextScroll()
Update text scroll offset to keep cursor visible
_utils
table
_validateCursorPosition
(method) TextEditor:_validateCursorPosition()
Validate cursor position (ensure it’s within text bounds)
_wrapLine
(method) TextEditor:_wrapLine(line: string, maxWidth: number)
-> table
Wrap a single line of text
@param line — Line to wrap
@param maxWidth — Maximum width in pixels
@return — Array of wrapped line parts
_wrappedLines
table?
TextEditorConfig
allowNewlines
boolean?
Whether to allow newline characters (default: true in multiline)
allowTabs
boolean?
Whether to allow tab characters (default: true)
autoGrow
boolean
Whether element auto-grows with text
cursorBlinkRate
number
Cursor blink rate in seconds
cursorColor
Color?
Cursor color
customSanitizer
function?
Custom sanitization function
editable
boolean
Whether text is editable
inputType
"email"|"number"|"text"|"url"
Input validation type
maxLength
number?
Maximum text length in characters
maxLines
number?
Maximum number of lines
multiline
boolean
Whether multi-line is supported
passwordMode
boolean
Whether to mask text
placeholder
string?
Placeholder text when empty
sanitize
boolean?
Whether to sanitize text input (default: true)
scrollable
boolean
Whether text is scrollable
selectOnFocus
boolean
Whether to select all text on focus
selectionColor
Color?
Selection background color
textOverflow
"clip"|"ellipsis"|"scroll"
Text overflow behavior
textWrap
boolean|"char"|"word"
Text wrapping mode
Theme
Manager
ThemeManager
Export both Theme and ThemeManager
atlas
(love.Image)?
Optional: global atlas
atlasData
(love.ImageData)?
Raw (decoded) image data.
You can’t draw ImageData directly to screen. See Image for that.
colors
table<string, Color>
components
table<string, ThemeComponent>
contentAutoSizingMultiplier
{ width: number?, height: number? }?
Optional: default multiplier for auto-sized content dimensions
fonts
table<string, string>
Font family definitions
get
function Theme.get(themeName: string)
-> Theme|nil
Get a theme by name
@param themeName — Name of the theme
@return — Returns theme or nil if not found
getActive
function Theme.getActive()
-> Theme?
Get the active theme
getAllColors
function Theme.getAllColors()
-> table<string, Color>|nil
Get all colors from the active theme
@return — Table of all colors, or nil if no theme active
getColor
function Theme.getColor(colorName: string)
-> Color?
Get a color from the active theme
@param colorName — Name of the color (e.g., “primary”, “secondary”)
@return — Returns Color instance or nil if not found
getColorNames
function Theme.getColorNames()
-> table<string>|nil
Get all available color names from the active theme
@return — Array of color names, or nil if no theme active
getColorOrDefault
function Theme.getColorOrDefault(colorName: string, fallback: Color|nil)
-> Color
Get a color with a fallback if not found
@param colorName — Name of the color to retrieve
@param fallback — Fallback color if not found (default: white)
@return — The color or fallback
getComponent
function Theme.getComponent(componentName: string, state?: string)
-> ThemeComponent?
Get a component from the active theme
@param componentName — Name of the component (e.g., “button”, “panel”)
@param state — Optional state (e.g., “hover”, “pressed”, “disabled”)
@return — Returns component or nil if not found
getFont
function Theme.getFont(fontName: string)
-> string?
Get a font from the active theme
@param fontName — Name of the font family (e.g., “default”, “heading”)
@return — Returns font path or nil if not found
getRegisteredThemes
function Theme.getRegisteredThemes()
-> table<string>
Get all registered theme names
@return — Array of theme names
hasActive
function Theme.hasActive()
-> boolean
Check if a theme is currently active
@return — Returns true if a theme is active
load
function Theme.load(path: string)
-> Theme
Load a theme from a Lua file
@param path — Path to theme definition file (e.g., “space” or “mytheme”)
name
string
new
function Theme.new(definition: any)
-> Theme
sanitizeTheme
function Theme.sanitizeTheme(theme?: table)
-> sanitized: table
Sanitize a theme definition by removing invalid values and providing defaults
@param theme — The theme to sanitize
@return sanitized — The sanitized theme
setActive
function Theme.setActive(themeOrName: string|Theme)
validateTheme
function Theme.validateTheme(theme?: table, options?: table)
-> valid: boolean
2. errors: table
Validate a theme definition for structural correctness (non-aggressive)
@param theme — The theme to validate
@param options — Optional validation options {strict: boolean}
@return valid,errors — List of validation errors
⚠️ Internal Properties
Warning: The following properties are internal implementation details and should not be accessed directly. They are prefixed with
_to indicate they are private. Accessing these properties may break in future versions without notice.
__index
Theme
ThemeComponent
atlas
(string|love.Image)?
Optional: component-specific atlas (overrides theme atlas). Files ending in .9.png are auto-parsed
contentAutoSizingMultiplier
{ width: number?, height: number? }?
Optional: multiplier for auto-sized content dimensions
insets
{ left: number, top: number, right: number, bottom: number }?
Optional: 9-patch insets (auto-extracted from .9.png files or manually defined)
regions
{ topLeft: ThemeRegion, topCenter: ThemeRegion, topRight: ThemeRegion, middleLeft: ThemeRegion, middleCenter: ThemeRegion, middleRight: ThemeRegion, bottomLeft: ThemeRegion, bottomCenter: ThemeRegion, bottomRight: ThemeRegion }
scaleCorners
number?
Optional: scale multiplier for non-stretched regions (corners/edges). E.g., 2 = 2x size. Default: nil (no scaling)
scalingAlgorithm
("bilinear"|"nearest")?
Optional: scaling algorithm for non-stretched regions. Default: “bilinear”
states
table<string, ThemeComponent>?
stretch
{ horizontal: table<integer, string>, vertical: table<integer, string> }
⚠️ Internal Properties
Warning: The following properties are internal implementation details and should not be accessed directly. They are prefixed with
_to indicate they are private. Accessing these properties may break in future versions without notice.
_loadedAtlas
(string|love.Image)?
Internal: cached loaded atlas image
_loadedAtlasData
(love.ImageData)?
Internal: cached loaded atlas ImageData for pixel access
_ninePatchData
{ insets: table, contentPadding: table, stretchX: table, stretchY: table }?
Internal: parsed 9-patch data with stretch regions and content padding
_scaledRegionCache
table<string, love.Image>?
Internal: cache for scaled corner/edge images
ThemeDefinition
atlas
(string|love.Image)?
Optional: global atlas (can be overridden per component)
colors
table<string, Color>?
components
table<string, ThemeComponent>
contentAutoSizingMultiplier
{ width: number?, height: number? }?
Optional: default multiplier for auto-sized content dimensions
fonts
table<string, string>?
Optional: font family definitions (name -> path)
name
string
TransformProps
rotate
number?
scale
{ x: number, y: number }?
skew
{ x: number, y: number }?
translate
{ x: number, y: number }?
TransitionProps
duration
number?
easing
string?