Compare commits

...

8 Commits

Author SHA1 Message Date
d8f67ebd27 note 2026-02-26 10:23:39 -05:00
github-actions[bot]
99f467fa69 Archive previous documentation and generate v0.10.2 docs [skip ci] 2026-02-26 15:17:17 +00:00
141a22cd9c v0.10.2 release 2026-02-26 10:16:46 -05:00
eb3afc11ac address: Themes not included (#1) 2026-02-26 10:01:22 -05:00
d72f442de7 v0.10.1 release 2026-02-26 01:58:07 -05:00
3713f45a76 fix: stops debug draw flashing 2026-02-26 01:58:07 -05:00
c4fc62af20 fix: onEvent not correctly triggering in immediate mode (#2) 2026-02-26 01:57:58 -05:00
github-actions[bot]
71f7776f78 Archive previous documentation and generate v0.10.0 docs [skip ci] 2026-02-25 18:21:34 +00:00
104 changed files with 7584 additions and 12 deletions

1
.gitignore vendored
View File

@@ -1,5 +1,4 @@
OverlayStats.lua OverlayStats.lua
themes/metal/
themes/space/ themes/space/
.DS_STORE .DS_STORE
tasks tasks

View File

@@ -63,7 +63,7 @@ local enums = utils.enums
---@class FlexLove ---@class FlexLove
local flexlove = Context local flexlove = Context
flexlove._VERSION = "0.10.0" flexlove._VERSION = "0.10.2"
flexlove._DESCRIPTION = "UI Library for LÖVE Framework based on flexbox" flexlove._DESCRIPTION = "UI Library for LÖVE Framework based on flexbox"
flexlove._URL = "https://github.com/mikefreno/FlexLove" flexlove._URL = "https://github.com/mikefreno/FlexLove"
flexlove._LICENSE = [[ flexlove._LICENSE = [[

View File

@@ -3,7 +3,7 @@
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>FlexLöve v0.9.2 - API Reference</title> <title>FlexLöve v0.10.2 - API Reference</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/github-dark.min.css"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/github-dark.min.css">
<style> <style>
* { * {
@@ -321,13 +321,15 @@
<div class="container"> <div class="container">
<nav class="sidebar"> <nav class="sidebar">
<div class="sidebar-header"> <div class="sidebar-header">
<h2>FlexLöve <span style="font-size: 0.6em; color: #8b949e;">v0.9.2</span></h2> <h2>FlexLöve <span style="font-size: 0.6em; color: #8b949e;">v0.10.2</span></h2>
<a href="index.html">← Back to Home</a> <a href="index.html">← Back to Home</a>
<div class="version-selector"> <div class="version-selector">
<select id="version-dropdown" onchange="window.versionNavigate(this.value)"> <select id="version-dropdown" onchange="window.versionNavigate(this.value)">
<option value="">📚 Switch Version</option> <option value="">📚 Switch Version</option>
<option value="current">v0.9.2 (Latest)</option> <option value="current">v0.10.2 (Latest)</option>
<option value="v0.10.0">v0.10.0</option>
<option value="v0.9.2">v0.9.2</option>
<option value="v0.9.0">v0.9.0</option> <option value="v0.9.0">v0.9.0</option>
<option value="v0.8.0">v0.8.0</option> <option value="v0.8.0">v0.8.0</option>
<option value="v0.7.3">v0.7.3</option> <option value="v0.7.3">v0.7.3</option>

View File

@@ -285,7 +285,7 @@ cp FlexLove/FlexLove.lua your-project/</code></pre>
<div class="footer"> <div class="footer">
<p> <p>
FlexLöve v0.10.0 | MIT License | FlexLöve v0.10.2 | MIT License |
<a href="https://github.com/mikefreno/FlexLove" style="color: #58a6ff" <a href="https://github.com/mikefreno/FlexLove" style="color: #58a6ff"
>GitHub Repository</a >GitHub Repository</a
> >

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -64,6 +64,19 @@ function Context.clearFrameElements()
end end
end end
--- Calculate the depth (nesting level) of an element
---@param elem Element
---@return number
local function getElementDepth(elem)
local depth = 0
local current = elem.parent
while current do
depth = depth + 1
current = current.parent
end
return depth
end
--- Sort elements by z-index (called after all elements are registered) --- Sort elements by z-index (called after all elements are registered)
function Context.sortElementsByZIndex() function Context.sortElementsByZIndex()
-- Sort elements by z-index (lowest to highest) -- Sort elements by z-index (lowest to highest)
@@ -80,7 +93,13 @@ function Context.sortElementsByZIndex()
return z return z
end end
return getEffectiveZIndex(a) < getEffectiveZIndex(b) local za = getEffectiveZIndex(a)
local zb = getEffectiveZIndex(b)
if za ~= zb then
return za < zb
end
-- Tiebreaker: deeper elements (children) sort higher
return getElementDepth(a) < getElementDepth(b)
end) end)
end end
@@ -153,6 +172,7 @@ function Context.getTopElementAt(x, y)
return nil return nil
end end
local fallback = nil
for i = #Context._zIndexOrderedElements, 1, -1 do for i = #Context._zIndexOrderedElements, 1, -1 do
local element = Context._zIndexOrderedElements[i] local element = Context._zIndexOrderedElements[i]
@@ -161,11 +181,15 @@ function Context.getTopElementAt(x, y)
if interactive then if interactive then
return interactive return interactive
end end
return element -- Non-interactive element hit: remember as fallback but keep looking
-- for interactive children/siblings at same or lower z-index
if not fallback then
fallback = element
end
end end
end end
return nil return fallback
end end
--- Set the focused element (centralizes focus management) --- Set the focused element (centralizes focus management)

View File

@@ -2040,9 +2040,16 @@ function Element.new(props)
self._dirty = false -- Element properties have changed, needs layout self._dirty = false -- Element properties have changed, needs layout
self._childrenDirty = false -- Children have changed, needs layout self._childrenDirty = false -- Children have changed, needs layout
-- Debug draw: assign a stable random color for element boundary visualization -- Debug draw: assign a deterministic color for element boundary visualization
-- Uses a vibrant HSL-based color to ensure good visibility against any background -- Uses a hash of the element ID to produce a stable hue, so colors don't flash each frame
local hue = math.random() * 360 local function hashStringToHue(str)
local hash = 5381
for i = 1, #str do
hash = ((hash * 33) + string.byte(str, i)) % 360
end
return hash
end
local hue = hashStringToHue(self.id or tostring(self))
local function hslToRgb(h) local function hslToRgb(h)
local s, l = 0.9, 0.55 local s, l = 0.9, 0.55
local c = (1 - math.abs(2 * l - 1)) * s local c = (1 - math.abs(2 * l - 1)) * s

Binary file not shown.

After

Width:  |  Height:  |  Size: 161 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 161 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 173 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 185 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 138 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 165 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 258 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 249 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 258 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 251 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 266 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 262 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 264 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 265 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 180 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 151 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 206 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 151 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 180 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 143 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 525 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 368 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 331 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 256 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 378 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 271 B

BIN
themes/metal/Guide.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 B

38
themes/metal/README.md Normal file
View File

@@ -0,0 +1,38 @@
This image pack is not fully converted to 9 patch, it is being done as I have a need for.
- [x] Bar
- [x] BarDropdown
- [x] BarKnob
- [x] BarKnobDropdown
- [x] BarToggle
- [x] Button
- [ ] Cursor
- [ ] Filler
- [x] Frame
- [ ] IconConfirm
- [x] Select
- [ ] Slot
- [x] TextField
- [ ] Toggle
You can compare the BarKnob's for a before and after for the 9 patch additions
This theme is a part of the [Complete UI Essential Pack](https://crusenho.itch.io/complete-ui-essential-pack) by [Crusenho](https://crusenho.itch.io/)
This theme is governed by the following license:
Attribution 4.0 International (CC BY 4.0)
You are free to:
Share — copy and redistribute the material in any medium or format for any purpose, even commercially.
Adapt — remix, transform, and build upon the material for any purpose, even commercially.
The licensor cannot revoke these freedoms as long as you follow the license terms.
Under the following terms:
Attribution - You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use.
No additional restrictions - You may not apply legal terms or technological measures that legally restrict others from doing anything the license permits.
License Link: <https://creativecommons.org/licenses/by/4.0/>

Binary file not shown.

After

Width:  |  Height:  |  Size: 281 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 295 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 281 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 297 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 315 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 309 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 315 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 299 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 274 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 199 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 281 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 238 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 304 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 255 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 219 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 216 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 216 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 244 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 204 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 200 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 200 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 227 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 255 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 261 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 261 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 279 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 231 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 217 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 217 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 253 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 297 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 251 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 197 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 210 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 200 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 194 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 194 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 222 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 223 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 226 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 226 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 244 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 B

Some files were not shown because too many files have changed in this diff Show More