SIGN IN SIGN UP

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