From 9c6c8a061bb855324e401b7fb1c0b9f5d1a280bd Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 16 Nov 2025 14:37:43 +0000 Subject: [PATCH] Archive previous documentation and generate v0.2.1 docs [skip ci] --- docs/api.html | 70 - docs/versions/v0.2.1/api.html | 3803 +++++++++++++++++++++++++++++++++ 2 files changed, 3803 insertions(+), 70 deletions(-) create mode 100644 docs/versions/v0.2.1/api.html diff --git a/docs/api.html b/docs/api.html index 5763170..0ee4aa3 100644 --- a/docs/api.html +++ b/docs/api.html @@ -170,7 +170,6 @@ overflow-x: auto; margin: 1rem 0; border: 1px solid #30363d; - position: relative; } .content pre code { @@ -178,44 +177,6 @@ padding: 0; } - .copy-button { - position: absolute; - top: 8px; - right: 8px; - background-color: #21262d; - color: #8b949e; - border: 1px solid #30363d; - border-radius: 6px; - padding: 6px 12px; - font-size: 12px; - cursor: pointer; - opacity: 0; - transition: all 0.2s; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; - } - - .content pre:hover .copy-button { - opacity: 1; - } - - .copy-button:hover { - background-color: #30363d; - border-color: #58a6ff; - color: #c9d1d9; - } - - .copy-button:active { - background-color: #238636; - border-color: #238636; - color: #ffffff; - } - - .copy-button.copied { - background-color: #238636; - border-color: #238636; - color: #ffffff; - } - .content a { color: #58a6ff; text-decoration: none; @@ -369,7 +330,6 @@ - @@ -3768,36 +3728,6 @@ This ensures Renderer and StateManager can access scroll state from Element

} } }; - - // Add copy buttons to code blocks - document.querySelectorAll('pre code').forEach((codeBlock) => { - const pre = codeBlock.parentElement; - const button = document.createElement('button'); - button.className = 'copy-button'; - button.textContent = 'Copy'; - button.title = 'Copy to clipboard'; - - button.addEventListener('click', async () => { - const code = codeBlock.textContent; - try { - await navigator.clipboard.writeText(code); - button.textContent = 'Copied!'; - button.classList.add('copied'); - setTimeout(() => { - button.textContent = 'Copy'; - button.classList.remove('copied'); - }, 2000); - } catch (err) { - console.error('Failed to copy:', err); - button.textContent = 'Failed'; - setTimeout(() => { - button.textContent = 'Copy'; - }, 2000); - } - }); - - pre.appendChild(button); - }); \ No newline at end of file diff --git a/docs/versions/v0.2.1/api.html b/docs/versions/v0.2.1/api.html new file mode 100644 index 0000000..5763170 --- /dev/null +++ b/docs/versions/v0.2.1/api.html @@ -0,0 +1,3803 @@ + + + + + + FlexLöve v0.2.1 - API Reference + + + + +
+ + +
+

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

+ +
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.

+

Open in Browser

+

_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.

+

Open in Browser

+

_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
+
+ +
(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.

+

Open in Browser

+

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?
+
+
+ +
+
+ + ↑ Top + + + + \ No newline at end of file