Skip to content

feat: v0.19.3 β€” 11 patch-safe issues + UI library patterns#202

Merged
subinium merged 2 commits into
mainfrom
release/v0.19.3
Apr 27, 2026
Merged

feat: v0.19.3 β€” 11 patch-safe issues + UI library patterns#202
subinium merged 2 commits into
mainfrom
release/v0.19.3

Conversation

@subinium

Copy link
Copy Markdown
Owner

Summary

v0.19.3 patch release closing 11 v0.19.x patch-safe issues plus 6 cross-cutting extensions framing SLT in terms of broader UI library positioning patterns (CSS / Flutter / React Native), performance budget, migration guidance, and visual snapshot regression infrastructure.

External reporter promise (NebulaNomad423, 3-day delivery): closes #200 (overlay anchor) + #201 (F12 debug overlay). Both bugs traced to the same flexbox root cause (overlay shrink-and-center starved inner grow); single fix resolves both.

What's in this PR

Closed issues (patch-safe)

UI library cross-cutting extensions

Framing SLT alongside broader UI ecosystem patterns rather than treating each issue in isolation:

  • docs/POSITIONING.md β€” CSS place-self / Flutter Align+Positioned / RN position: absolute ↔ SLT Anchor mapping
  • docs/PERFORMANCE.md β€” 60fps frame budget, 6 optimization patterns, comparison vs React / Flutter / UIKit / ratatui
  • docs/MIGRATION.md β€” v0.19 β†’ v0.20 with deprecation table + sed codemod + comparison vs React / Vue / Angular / Flutter migration tooling
  • tests/visual_snapshots.rs (insta) β€” 5 demo baselines catch layout / border / theme / CJK regressions (Flutter golden / Storybook visual regression pattern)
  • F12 per-layer color tagging (Chrome DevTools / React DevTools / Flutter Inspector convention)
  • .claude/skills/slt-migration/SKILL.md β€” ratatui / cursive / textual β†’ SLT migration skill (committed in a923af3)
  • 17 docs files audited and synced to v0.19.x (committed in a923af3)

Asset cleanup (~6.1 MB)

Removed tui-builders-demo.gif, demo_tetris.png, examples/demo_wiki.rs (broke external builds via private assets/blackpink/ dependency).

Quality gate

All green at this commit:

  • cargo fmt -- --check
  • cargo check --all-features
  • cargo clippy --all-features -- -D warnings
  • cargo test --all-features
  • cargo check --examples --all-features
  • typos
  • cargo check -p superlighttui --no-default-features
  • cargo check -p slt-wasm --target wasm32-unknown-unknown
  • cargo hack check -p superlighttui --each-feature --no-dev-deps
  • cargo audit
  • cargo deny check

Test plan

Review process

Two-commit branch:

  • a923af3 β€” docs/skill sync, slt-migration skill, asset cleanup (3-pass review: 5 authors β†’ 10 reviewers β†’ 5 post-fix verifiers, all PASS)
  • b3c4b64 β€” 11 issue fixes + 6 UI-library extensions

Notes

πŸ€– Generated with Claude Code

subinium and others added 2 commits April 27, 2026 23:47
- New slt-migration skill (398 lines): ratatui/cursive/textual β†’ SLT
  mapping with grep-verified API references
- 17 docs files audited and synced to v0.19.2:
  - BLOCKING fix: AppCtx 'static lifetime violation in AI_GUIDE/COOKBOOK
    examples (now uses owned Theme via *ui.theme() Copy pattern, mirroring
    examples/demo_website.rs)
  - HIGH: 16 leaked GitHub issue refs scrubbed from prose (sed pattern,
    only versions retained)
  - MEDIUM: COMPLETE_REFERENCE version banner 0.18.1β†’0.19.2, WIDGETS
    separator path corrected, EXAMPLES demo_cjk row + audit prose cleanup,
    llms.txt try_get signature corrected + demo_website/demo_cjk added
- SLT skill (.claude/skills/slt/) updated for v0.19.x: component DX
  (provide/use_context/use_state_named/with_if), RichLogState bounded
  default, ThemeBuilder const fn, EventBuilder v0.19.1 chain wrappers
- Asset cleanup (~6.1MB): tui-builders-demo.gif (orphan), demo_tetris.png
  (orphan), examples/demo_wiki.rs (private blackpink/ deps)

3-pass review: 5 author agents β†’ 10 independent reviewers (2 per group:
codebase-researcher API verification + general-purpose text quality) β†’
5 post-fix reviewers (release-ready verdict on all groups).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Closes 11 v0.19.x patch-safe issues plus 6 cross-cutting extensions framing
SLT in terms of broader UI library positioning patterns (CSS / Flutter /
React Native), performance budget, migration guidance, and visual snapshot
regression infrastructure.

External reporter promise (NebulaNomad423, 3-day delivery):
- #200 Anchor enum + overlay_at(Anchor, |ui|) / modal_at(Anchor, |ui|) β€” 9-cell
  positioning. Adds overlay_at_offset(anchor, dx, dy, |ui|) / modal_at_offset
  for CSS inset-style insets (positive = toward viewport center).
  Fixes 2 long-standing layout bugs (same root cause in flexbox.rs):
  - Part 2: align(End)/justify(End) inside overlay rendered at center
  - Part 3: container.grow(1).draw(|buf, rect|) inside overlay didn't render
  Both caused by overlay shrink-and-center starving inner grow; new any_grow
  heuristic expands the wrapper to full area when a child has grow > 0.
- #201 F12 debug overlay walks node.overlays (was skipping them) +
  DebugLayer enum (All/TopMost/BaseOnly) + per-layer color tagging
  (base=green, overlay=red, modal=blue) + count breakdown
  "14 widgets (8 base, 5 overlay, 1 modal)".

Perf (7 issues):
- #146 isqrt for filled_circle (Newton's method, MSRV 1.81 < 1.84)
- #150 commands_buf reuse via FrameState
- #152 group_name: Option<Arc<str>> verified in LayoutNode (already shipped)
- #153 LayoutNode 432 β†’ 320 bytes (~26%) via Box<TextNodeData>
- #155 FrameData reuse via &mut in collect_all
- #157 wrap_segments line_segs capacity hint
- #162 viewport bound check before bottom border corner set_char

Refactor (2 issues):
- #147 min_h/max_h breakpoint variants (xs/sm/md/lg/xl/at) β€” symmetric with min_w/max_w
- #148 deprecate pad/min_width/max_width/min_height/max_height (long-form aliases)
  with #[deprecated(since = "0.20.0")]; short forms p/min_w/max_w/min_h/max_h

UI library cross-cutting extensions (the "broader picture" the user asked for):
- docs/POSITIONING.md (286 lines) β€” CSS place-self / Flutter Align+Positioned /
  React Native position:absolute ↔ SLT Anchor mapping with migration recipes
- docs/PERFORMANCE.md (336 lines) β€” 60fps frame budget, 6 optimization
  patterns, comparison vs React/Flutter/UIKit/ratatui, regression detection
- docs/MIGRATION.md (234 lines) β€” v0.19 β†’ v0.20 with deprecation table +
  sed-based codemod + comparison vs React/Vue/Angular/Flutter migration tooling
- tests/visual_snapshots.rs (insta) β€” 5 demo baselines catch layout drift,
  border render bugs, theme color shifts, CJK width regressions (golden-file
  pattern from Flutter / Storybook visual regression tools)
- F12 per-layer color tagging (Chrome DevTools / React DevTools / Flutter
  Inspector convention) + Context::set_debug_layer / debug_layer()
- examples/demo_overlay_anchor.rs β€” 9 anchor positions + 4 inset corners

Quality gate (Core + Extended): all green.
- cargo fmt -- --check / cargo check --all-features / cargo clippy / cargo test
- typos / no-default-features / wasm32-unknown-unknown / cargo hack each-feature
- cargo audit / cargo deny check

3-pass review on docs sweep (committed in a923af3): 5 author agents β†’
10 independent reviewers (codebase-researcher API verification +
general-purpose text quality) β†’ 5 post-fix reviewers all PASS.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@subinium subinium merged commit 0a56880 into main Apr 27, 2026
16 checks passed
subinium added a commit that referenced this pull request Apr 28, 2026
…closed-already + v0.21 deferrals

- ### Fixed expanded with the 11 newly-applied fixes (#149, #150, #157,
  #161, #171, #184, #192, #193, #201, plus #98/#102 already in HEAD).
- ### Closed (verified already applied in v0.19.3) lists the 8 v0.19.x
  issues whose fix landed in PR #202 (#134/#146/#147/#148/#152/#153/#155/#162).
  No separate v0.20 commit was needed; PR body will tell GitHub to close
  these so the v0.19.x milestone count goes to zero.
- ### Known v0.21 migration notes documents the 4 critical drifts the
  design-discipline audit surfaced that genuinely need a breaking change
  to resolve: Hook-family naming asymmetry, scrollbar/separator return
  shape, status-family fake Response::none(), ScrollState::progress f32
  outlier. Plus a brief note on the patch-safe doc-only gaps deferred
  to a 0.20.x follow-up.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat(layout): overlay anchor positioning β€” align(End)/justify(End) renders at center, no clean bottom-right pattern

1 participant