Tags: amken3d/Immygo
Tags
Add runtime dropdown item updates and max-visible-items customization Enhances the dropdown widget with `SetItems` for dynamic item updates and introduces the `MaxVisibleItems` option for scrollable lists beyond a configurable limit. Improves usability for filtered and large lists.
widget/canvas: per-port hover halo + unconnected-input visual cue Two complementary affordances for graphs that have multi-input nodes: 1. Per-port hover halo. The Canvas tracks the port (input or output) currently under the cursor on pointer.Move and -- crucially -- pointer.Drag while in dragWire mode. drawPortStyled draws a translucent type-coloured halo around the active port so the operator sees their drop target unambiguously, especially on stages like pose_compare where two adjacent input dots (current vs reference) would otherwise be hard to distinguish. 2. Unconnected-input visual. Canvas pre-computes a uint32 bitmask per node from the live edges array; layoutNode renders inputs that aren't in the bitmask as hollow circles -- type-coloured outline ring around a surface fill -- so a stage that's missing one of its required inputs reads as "open" at a glance. Output ports always render filled (a stage's output is always live in the engine's contract). Closes the silent-failure mode where a pose_compare graph with reference unwired runs forever emitting invalid poses. drawPortStyled supersedes drawPort; the old function stays for back-compat with any external callers but is unused internally. Public API surface unchanged. layoutNode gained three trailing parameters (hoverPort, hoverOnInput, connectedInputs) but it's package-private so no external callers. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
widget: TextField Compact + Toggle Slim density variants
Adds dense variants for the two widgets most likely to appear inside cards
or canvas node bodies, where the standard sizes overflow the available
width. Pattern mirrors the existing Button variant approach: enum on the
widget, modifier method on the ui-level wrapper.
- TextField gains TextFieldVariant{Standard,Compact}; Compact uses
th.Space.XS padding (4dp), 0.5px hairline border, and a 2dp corner
radius. Modifier: ui.Input().Compact().
- Toggle gains ToggleVariant{Standard,Slim}; Slim is 28x14dp with a
10dp knob (vs 44x22 / 16dp for standard). Modifier: ui.Toggle(...).Slim().
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Add node-canvas widget, theme expansion, and widget polish
Major features:
- Node-canvas: full flow-graph editor widget with pan/zoom, drag-to-move, wire create/delete, multi-select (shift-click + marquee), snap-to-grid, typed ports with per-type wire colors, node-type registry + palette,
JSON save/load, and in-app JSON editor (widget/canvas*.go, ui/canvas.go)
- Themes: Material 3, Catppuccin, Nord, Solarized; font-scale option
(theme.WithFontScale); rebased default typography to Compact (0.85x)
- Empty states for ListView, DataGrid, and Tree
- Focus rings on Button, Toggle, Checkbox, RadioGroup, Dropdown - TextField helper + error text
- Theme tokens propagated through Button/Card/Badge/TextField
Fixes:
- Scroll persistence, layout fill, and dropdown state regressions
- DataGrid empty-row region uses Rigid (not Flexed) to prevent height blowup
- ContextMenu lifted out of build closure so it persists across frames
- Stateful-widget lifecycle bugs documented and detected (ui/lifecycle.go)
- Reverted Card hover-lift — broke child input/selection
Tooling & docs:
- WASM build pipeline + live showcase embed on website
- One-click Hostinger deploy via GitHub Actions
- Trimmed redundant examples, added node-canvas example
- README installation, CLI usage, system deps, showcase screenshots
- Updated getting-started, theming, widgets docs; new canvas.md
Signed-off-by: hkeni <info@amken.us>