input: Move focus ring styling into UI (#2709)
## Summary - move focus-ring geometry, colors, and rendering out of `gpui-base` into the UI layer - make `FocusableExt` a state-only API with `focus_ring(bool)` and `is_focus_ring_enabled()` - apply the shadcn-style solid focused border and translucent outer ring to input controls and Button - use focus-within semantics for composite Input frames so interactive prefixes such as Select focus only the shared outer frame - avoid clipping focus rings in Form fields and align the default ring tokens with shadcn neutral colors - remove the redundant standalone FpsMonitor story while retaining the gallery-wide FPS monitor <img width="958" height="748" alt="image" src="https://github.com/user-attachments/assets/0bed47ae-b36c-4366-a524-2a3bc199515a" /> ## Breaking Changes `FocusableExt::focus_ring` now configures component state instead of painting an arbitrary styled element. Focus-ring visuals are owned by `crates/ui`. ```diff -use gpui_component::FocusableExt as _; - -let element = div().focus_ring(is_focused, px(0.), window, cx); +use gpui_component::FocusableExt as _; + +let input = input.focus_ring(true); +let enabled = input.is_focus_ring_enabled(); ``` ## Test Plan - `cargo test -p gpui-base` - `cargo test -p gpui-component` - `cargo check -p gpui-component` - `cargo check -p gpui-component-story` - `cargo check -p gpui-component-story-web` - `cargo fmt --all -- --check` - `git diff --check` --------- Co-authored-by: Codex <codex@openai.com>
J
Jason Lee committed
b83e4a3a950cfe28a30e4b5a73ad0dd06a821593
Parent: 60e1cb7
Committed by GitHub <noreply@github.com>
on 8/14/2026, 10:57:12 AM