13 Commits

Author SHA1 Message Date
evan 291f0f20b5 build: add a format target and one shared editor config
The Lua modules were split between tabs and spaces because nothing pinned a
style; .editorconfig is what lua-language-server reads on save, so the editor
and the tree now agree. clang-format already had a config and left native/
unchanged. Embedded modules regenerate from the reformatted ui.lua.
2026-08-04 13:19:58 -04:00
evan bf286eefa6 feat(ble): expose isInitialized and reclaim memory before radios start
The controller and the WiFi driver each need a large aggregate allocation,
which a live app sitting on garbage can deny - that is why a failed connect
often succeeded on retry. Both bindings now collect before initializing, and
the tree reserves its node and spec capacity so a build does not reallocate
into a tight heap.
2026-08-04 13:10:18 -04:00
evan 3416f54c83 feat(ui): widen cards to a 2/3 column grid and add a disabled role
Two columns portrait and three landscape read better than 3/4 on a 320x480
panel. The new disabled palette role sits between face and muted, for a
control that is present but inactive.
2026-08-04 13:10:05 -04:00
evan 4533c7f61f chore: lsp + format 2026-08-04 10:21:18 -04:00
evan fa35c3c326 chore: clean up random - file 2026-08-04 09:10:54 -04:00
evan 83e04dbb79 fix: make test depend on luac32 2026-08-03 21:45:04 -04:00
evan 6a9b082f97 feat(runtime): embed platform modules as bytecode
ui.lua and hints.lua are compiled to LUA_32BITS bytecode (matching the
firmware's Lua build) and linked into the binary. A new package.searchers
entry checks them as the fallback after the SD card, so a local
/.lua/lib/ui.lua still shadows the packaged one for debugging.

Bytecode is ~40% smaller than source and loads without parsing. A fresh
SD card with no make sdcard now has the platform available.
2026-08-03 21:08:35 -04:00
evan 60ec720cdb fix(ui): drop the border from the screen root
The root fills the whole panel, so a border sent it through the per-pixel
roundRect path on every draw. The panel background is not a card; cards
that want a border set one explicitly.
2026-08-03 20:52:38 -04:00
evan a5af6b5af4 fix(node): only round a box that has a border
A filled box without one is a plain rectangle: rounding it leaves the
surface showing at the corners, which reads as a seam nobody asked for.
2026-08-03 18:28:26 -04:00
evan 2255fe214e feat(ui): let a widget opt out of the pressed style
A custom node that paints its own key highlight does not want the whole
node marked dirty on every press.
2026-08-03 18:24:51 -04:00
evan 40f7a3e4ca feat(ui): add cardSide grid helper
Square-card grids reflow on rotation, and the arithmetic is the same in
every app that draws one.
2026-08-03 18:18:02 -04:00
evan d53f9b77cd feat(runtime): expose canGoBack for firmware chrome
Firmware needs to know whether a back control would go anywhere, and the
history that answers it belongs to the runtime.
2026-08-03 17:53:27 -04:00
evan 95fa512047 initial commit 2026-08-03 17:46:14 -04:00