From a13343c2a5af7adb5817ecfbf74bc3752eb0bb4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=B7=E7=94=B5=E8=8A=BD=E8=A1=A3?= Date: Fri, 25 Sep 2026 00:39:06 -0400 Subject: [PATCH] T01 primitives: image, divider, backdrop, focus, pressable, measure, tooltip Ely-built primitives plus gallery demos for every chapter-one entry, including gpui natives. The gallery now scripts real input by posting NSEvents to its own queue and shoots each interaction in both modes. Codex gpt-6-astra (max): three rounds; the last finding, a two-line doc comment, was fixed after the three-review cap. --- AGENTS.md | 4 + Cargo.lock | 2 + Cargo.toml | 2 + README.md | 1 + TASKS.md | 5 +- assets/icons/image-off.svg | 20 + examples/gallery/assets/atrium.jpg | Bin 0 -> 124330 bytes examples/gallery/assets/dunes.jpg | Bin 0 -> 105447 bytes examples/gallery/capture.rs | 31 +- examples/gallery/main.rs | 10 +- examples/gallery/pages/buttons.rs | 1 + examples/gallery/pages/mod.rs | 4 + examples/gallery/pages/primitives.rs | 73 --- examples/gallery/pages/primitives/mod.rs | 80 ++++ examples/gallery/pages/primitives/native.rs | 478 ++++++++++++++++++++ examples/gallery/pages/primitives/parts.rs | 464 +++++++++++++++++++ examples/gallery/pages/theme.rs | 1 + examples/gallery/probe.rs | 25 + examples/gallery/script.rs | 148 ++++++ examples/gallery/shell.rs | 31 +- examples/gallery/ui.rs | 23 + src/buttons/button.rs | 23 +- src/buttons/icon_button.rs | 7 +- src/lib.rs | 21 +- src/motion/curve.rs | 5 +- src/primitives/backdrop.rs | 83 ++++ src/primitives/divider.rs | 58 +++ src/primitives/focus.rs | 96 ++++ src/primitives/icon.rs | 8 + src/primitives/image.rs | 105 +++++ src/primitives/measure.rs | 120 +++++ src/primitives/mod.rs | 14 + src/primitives/pressable.rs | 111 +++++ src/primitives/tooltip.rs | 192 ++++++++ src/theme/palette.rs | 6 + src/theme/tokens.rs | 18 +- tasks/ch01-10.md | 50 +- tasks/ch31-43.md | 2 +- 38 files changed, 2165 insertions(+), 157 deletions(-) create mode 100644 assets/icons/image-off.svg create mode 100644 examples/gallery/assets/atrium.jpg create mode 100644 examples/gallery/assets/dunes.jpg delete mode 100644 examples/gallery/pages/primitives.rs create mode 100644 examples/gallery/pages/primitives/mod.rs create mode 100644 examples/gallery/pages/primitives/native.rs create mode 100644 examples/gallery/pages/primitives/parts.rs create mode 100644 examples/gallery/probe.rs create mode 100644 examples/gallery/script.rs create mode 100644 src/primitives/backdrop.rs create mode 100644 src/primitives/divider.rs create mode 100644 src/primitives/focus.rs create mode 100644 src/primitives/image.rs create mode 100644 src/primitives/measure.rs create mode 100644 src/primitives/pressable.rs create mode 100644 src/primitives/tooltip.rs diff --git a/AGENTS.md b/AGENTS.md index a089496..a034a11 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -35,7 +35,11 @@ Ely GPUI Component. A component library for GPUI, in light and dark. - `motion::duration()` honors reduced motion. Springs overshoot: use them inside animators, never as gpui easings, because gpui asserts eased values stay in `0..=1`. - `svg()` paints only with its own `text_color`. `Icon` always sets one. - Buttons stay out of focus on click (`prevent_default` on mouse down). Tab still reaches them. +- The focus ring is a 1px focus-colored border (`FocusRing`). gpui paints shadows under the element, so a shadow ring floods transparent elements. Focusable elements keep a 1px border, transparent at rest. +- `ely_gpui_component::init` binds Tab and Shift-Tab to `FocusNext` and `FocusPrev`. Wrap the root in `FocusScope` and focus its handle. +- gpui's `Window::dispatch_event` returns a private type, so the gallery scripts mouse input by posting `NSEvent`s to its own queue. - `hover()` needs an element id. +- `img()` keeps loading state only with an id. Content masks are rectangles, so rounded corners survive only when the image fills its box without cropping. ## Decisions diff --git a/Cargo.lock b/Cargo.lock index 69fd4f9..2e9de5f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1519,6 +1519,7 @@ name = "ely-gpui-component" version = "0.1.0" dependencies = [ "anyhow", + "cocoa 0.26.0", "core-foundation 0.10.0", "core-graphics 0.24.0", "env_logger", @@ -1526,6 +1527,7 @@ dependencies = [ "image", "log", "rust-embed", + "smallvec", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 786d786..a557c76 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,11 +17,13 @@ anyhow = "1" gpui = "0.2.2" log = "0.4" rust-embed = "8.12" +smallvec = "1" [dev-dependencies] env_logger = "0.11" [target.'cfg(target_os = "macos")'.dev-dependencies] +cocoa = "0.26" core-foundation = "0.10" core-graphics = "0.24" image = { version = "0.25", default-features = false, features = ["png"] } diff --git a/README.md b/README.md index ec472f9..ea8c5bf 100644 --- a/README.md +++ b/README.md @@ -43,3 +43,4 @@ cargo run --example gallery -- --capture shots # macOS: PNG of every page, lig ## License MIT or Apache-2.0, at your option. Lucide icons: ISC. Inter and JetBrains Mono: SIL Open Font License 1.1. +The gallery photos in `examples/gallery/assets` were generated for this project with gpt-image-2. diff --git a/TASKS.md b/TASKS.md index cfb39a0..5c43882 100644 --- a/TASKS.md +++ b/TASKS.md @@ -17,7 +17,7 @@ Per-component lines live in `tasks/`. Tags there: ## Items - [x] T00 Foundation: package, theme, motion, assets, Icon, Button, gallery shell, docs -- [ ] T01 Primitives — `tasks/ch01-10.md` +- [x] T01 Primitives — `tasks/ch01-10.md` - [ ] T02 Typography - [ ] T03 Layout - [ ] T04 Window & Shell @@ -105,3 +105,6 @@ Per-component lines live in `tasks/`. Tags there: | T00 | 1 | FAIL | capture swallowed errors; root not focused; raw px sizes; gallery copy; tag conflict | | T00 | 2 | FAIL | AGENTS.md called `border_1` a rem helper | | T00 | 3 | PASS | | +| T01 | 1 | FAIL | img loading needs an id; radii lost; focus loop cap; tooltip geometry literals | +| T01 | 2 | FAIL | Cover painted outside the box once the clip was removed | +| T01 | 3 | FAIL | two-line doc comment; fixed after the cap, verified by scan, no fourth review | diff --git a/assets/icons/image-off.svg b/assets/icons/image-off.svg new file mode 100644 index 0000000..0aeeeb5 --- /dev/null +++ b/assets/icons/image-off.svg @@ -0,0 +1,20 @@ + + + + + + + + + diff --git a/examples/gallery/assets/atrium.jpg b/examples/gallery/assets/atrium.jpg new file mode 100644 index 0000000000000000000000000000000000000000..94135892f41c20bc162125c35dfb192ca348340f GIT binary patch literal 124330 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 M575%G9oj$t*q8if@mrql+US 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 q{ymAo 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 GKmXZP%@0lh literal 0 HcmV?d00001 diff --git a/examples/gallery/capture.rs b/examples/gallery/capture.rs index 55e3e3d..4f27eba 100644 --- a/examples/gallery/capture.rs +++ b/examples/gallery/capture.rs @@ -8,7 +8,7 @@ use ely_gpui_component::theme::Theme; use gpui::{App, AsyncApp, WindowHandle, px}; use crate::{ - pages, + pages, script, shell::{Choice, Gallery}, }; @@ -36,6 +36,7 @@ async fn shoot_all(window: WindowHandle, dir: &Path, cx: &mut AsyncApp) gallery.select(ix, cx); gallery.choose(choice, window, cx); })?; + script::park(window, cx)?; cx.background_executor().timer(SETTLE).await; let (viewport, max) = window.update(cx, |gallery, _, _| gallery.scroll_extent())?; if viewport <= px(0.0) { @@ -58,23 +59,27 @@ async fn shoot_all(window: WindowHandle, dir: &Path, cx: &mut AsyncApp) window.update(cx, |gallery, _, cx| gallery.scroll_to(offset, cx))?; cx.background_executor().timer(SCROLL_SETTLE).await; } + if !page.script.is_empty() { + window.update(cx, |gallery, _, cx| gallery.select(ix, cx))?; + cx.background_executor().timer(SETTLE).await; + let shot = |step: &str| dir.join(format!("{}-{step}-{name}.png", page.slug)); + script::play(window, page.script, shot, cx).await?; + } } } Ok(()) } +/// This process's on-screen window, as CoreGraphics numbers it. #[cfg(target_os = "macos")] -fn snapshot(path: &Path) -> Result<()> { +pub fn window_number() -> Result { use core_foundation::{ base::{CFType, TCFType}, dictionary::CFDictionary, number::CFNumber, string::CFString, }; - use core_graphics::{ - geometry::{CGPoint, CGRect, CGSize}, - window, - }; + use core_graphics::window; let number = |dict: &CFDictionary, key: &'static str| { dict.find(CFString::from_static_string(key)) @@ -93,10 +98,20 @@ fn snapshot(path: &Path) -> Result<()> { .find(|dict| number(dict, "kCGWindowOwnerPID") == Some(pid)) .and_then(|dict| number(&dict, "kCGWindowNumber")) .context("gallery window not on screen")?; + u32::try_from(id).context("window number out of range") +} + +#[cfg(target_os = "macos")] +pub fn snapshot(path: &Path) -> Result<()> { + use core_graphics::{ + geometry::{CGPoint, CGRect, CGSize}, + window, + }; + let image = window::create_image( CGRect::new(&CGPoint::new(0.0, 0.0), &CGSize::new(0.0, 0.0)), window::kCGWindowListOptionIncludingWindow, - id as u32, + window_number()?, window::kCGWindowImageBoundsIgnoreFraming | window::kCGWindowImageBestResolution, ) .context("window capture returned nothing")?; @@ -127,6 +142,6 @@ fn snapshot(path: &Path) -> Result<()> { } #[cfg(not(target_os = "macos"))] -fn snapshot(_: &Path) -> Result<()> { +pub fn snapshot(_: &Path) -> Result<()> { bail!("capture needs macOS window APIs") } diff --git a/examples/gallery/main.rs b/examples/gallery/main.rs index a4977ce..8949a15 100644 --- a/examples/gallery/main.rs +++ b/examples/gallery/main.rs @@ -1,5 +1,7 @@ mod capture; mod pages; +mod probe; +mod script; mod shell; mod ui; @@ -12,7 +14,7 @@ use gpui::{ actions, point, px, size, }; -actions!(gallery, [Quit, FocusNext, FocusPrev]); +actions!(gallery, [Quit]); struct Args { page: usize, @@ -47,11 +49,7 @@ fn main() -> Result<()> { .with_assets(Assets) .run(move |cx: &mut App| { ely_gpui_component::init(cx); - cx.bind_keys([ - KeyBinding::new("cmd-q", Quit, None), - KeyBinding::new("tab", FocusNext, None), - KeyBinding::new("shift-tab", FocusPrev, None), - ]); + cx.bind_keys([KeyBinding::new("cmd-q", Quit, None)]); cx.on_action(|_: &Quit, cx| cx.quit()); let bounds = Bounds::centered(None, size(px(1280.0), px(820.0)), cx); let options = WindowOptions { diff --git a/examples/gallery/pages/buttons.rs b/examples/gallery/pages/buttons.rs index 78c5649..da9ddcf 100644 --- a/examples/gallery/pages/buttons.rs +++ b/examples/gallery/pages/buttons.rs @@ -14,6 +14,7 @@ pub const PAGE: Page = Page { title: "Buttons & Actions", summary: "Seven variants, three sizes, one focus ring.", render, + script: &[], }; const VARIANTS: [(ButtonVariant, &str); 7] = [ diff --git a/examples/gallery/pages/mod.rs b/examples/gallery/pages/mod.rs index d0e5ebe..f1155fb 100644 --- a/examples/gallery/pages/mod.rs +++ b/examples/gallery/pages/mod.rs @@ -4,12 +4,16 @@ mod theme; use gpui::{AnyElement, App, Window}; +use crate::script::Step; + pub struct Page { pub number: u8, pub slug: &'static str, pub title: &'static str, pub summary: &'static str, pub render: fn(&mut Window, &mut App) -> AnyElement, + /// Interactions shot after the static pages. + pub script: &'static [Step], } pub const ALL: &[Page] = &[primitives::PAGE, buttons::PAGE, theme::PAGE]; diff --git a/examples/gallery/pages/primitives.rs b/examples/gallery/pages/primitives.rs deleted file mode 100644 index ac02b71..0000000 --- a/examples/gallery/pages/primitives.rs +++ /dev/null @@ -1,73 +0,0 @@ -use ely_gpui_component::{ - primitives::{Icon, IconName}, - theme::{ActiveTheme, IconSize}, -}; -use gpui::{AnyElement, App, InteractiveElement, IntoElement, ParentElement, Styled, Window, div}; - -use super::Page; -use crate::ui::{section, specimen, specimens}; - -pub const PAGE: Page = Page { - number: 1, - slug: "primitives", - title: "Primitives", - summary: "The smallest parts. Icons, dividers, overlays, focus.", - render, -}; - -fn render(_: &mut Window, cx: &mut App) -> AnyElement { - let colors = &cx.theme().colors; - let sizes = [ - (IconSize::Xs, "12"), - (IconSize::Sm, "14"), - (IconSize::Md, "16"), - (IconSize::Lg, "20"), - (IconSize::Xl, "24"), - (IconSize::Xxl, "32"), - ]; - let tones = [ - (colors.fg, "fg"), - (colors.fg_muted, "muted"), - (colors.focus, "focus"), - (colors.success, "success"), - (colors.warning, "warning"), - (colors.danger, "danger"), - ]; - - div() - .child( - section( - "Icon", - "Lucide, drawn as a mask. Color comes from the theme.", - cx, - ) - .child(specimens().children( - sizes.map(|(size, name)| { - specimen(name, Icon::new(IconName::Sparkles).size(size), cx) - }), - )) - .child(specimens().children(tones.map(|(color, name)| { - specimen(name, Icon::new(IconName::CircleCheck).color(color), cx) - }))), - ) - .child( - section("Icon set", "Every bundled icon.", cx).child( - div() - .flex() - .flex_wrap() - .gap_1() - .children(IconName::ALL.iter().enumerate().map(|(ix, &name)| { - div() - .id(ix) - .size_9() - .flex() - .items_center() - .justify_center() - .rounded_md() - .hover(|style| style.bg(colors.hover)) - .child(Icon::new(name).color(colors.fg_muted)) - })), - ), - ) - .into_any_element() -} diff --git a/examples/gallery/pages/primitives/mod.rs b/examples/gallery/pages/primitives/mod.rs new file mode 100644 index 0000000..80a0c00 --- /dev/null +++ b/examples/gallery/pages/primitives/mod.rs @@ -0,0 +1,80 @@ +mod native; +mod parts; + +use gpui::{AnyElement, App, IntoElement, ParentElement, Window, div}; + +use super::Page; +use crate::script::Step; + +pub const PAGE: Page = Page { + number: 1, + slug: "primitives", + title: "Primitives", + summary: "The smallest parts. Most are gpui itself; Ely adds the rest.", + render, + script: SCRIPT, +}; + +const SCRIPT: &[Step] = &[ + Step::Rest, + Step::Hover("tip-plain"), + Step::Wait(700), + Step::Shot("tooltip"), + Step::Hover("tip-meta"), + Step::Wait(700), + Step::Shot("tooltip-meta"), + Step::Hover("tip-rich"), + Step::Wait(700), + Step::Shot("tooltip-rich"), + Step::Hover("tip-follow"), + Step::Wait(200), + Step::Shot("tooltip-follow"), + Step::Rest, + Step::Down("prim-press"), + Step::Wait(700), + Step::Shot("pressed"), + Step::Up("prim-press"), + Step::Rest, + Step::Click("portal-toggle"), + Step::Shot("portal"), + Step::Click("portal-toggle"), + Step::Click("backdrop-open"), + Step::Wait(300), + Step::Shot("backdrop"), + Step::Click("backdrop-open"), + Step::Click("trap-c"), + Step::Key("tab"), + Step::Shot("trap-wrap"), + Step::Rest, +]; + +fn render(window: &mut Window, cx: &mut App) -> AnyElement { + div() + .child(native::boxes(cx)) + .child(native::text(cx)) + .child(parts::icon(cx)) + .child(parts::icon_set(cx)) + .child(native::svg_demo(cx)) + .child(parts::image(cx)) + .child(native::canvas_demo(cx)) + .child(parts::divider(cx)) + .child(native::spacer(cx)) + .child(native::portal(window, cx)) + .child(parts::backdrop(window, cx)) + .child(native::slot(cx)) + .child(native::show(window, cx)) + .child(native::each(cx)) + .child(native::fragment(cx)) + .child(parts::visually_hidden(cx)) + .child(parts::focus_ring(cx)) + .child(parts::focus_trap(window, cx)) + .child(native::click_outside(window, cx)) + .child(native::hover_area(window, cx)) + .child(parts::pressable(window, cx)) + .child(native::keyboard(window, cx)) + .child(parts::measure(window, cx)) + .child(parts::intersection(window, cx)) + .child(native::clipboard(window, cx)) + .child(parts::tooltip(cx)) + .into_any_element() +} diff --git a/examples/gallery/pages/primitives/native.rs b/examples/gallery/pages/primitives/native.rs new file mode 100644 index 0000000..5555a12 --- /dev/null +++ b/examples/gallery/pages/primitives/native.rs @@ -0,0 +1,478 @@ +use std::f32::consts::TAU; + +use ely_gpui_component::{ + buttons::{Button, ButtonVariant}, + primitives::{FocusRing, Icon, IconName}, + theme::{ActiveTheme, Radius, TextSize}, +}; +use gpui::{ + AnyElement, App, ClipboardItem, FontWeight, HighlightStyle, InteractiveElement, IntoElement, + ParentElement, PathBuilder, SharedString, StatefulInteractiveElement, Styled, StyledText, + Transformation, Window, anchored, canvas, deferred, div, point, prelude::*, px, radians, svg, +}; + +use crate::{ + probe::probe, + ui::{code, row, section}, +}; + +pub fn boxes(cx: &App) -> impl IntoElement + use<> { + let colors = &cx.theme().colors; + section( + "Box / View", + "gpui's div() is the box. Ely adds nothing.", + cx, + ) + .child( + row() + .gap_4() + .child( + div() + .size_16() + .rounded_lg() + .border_1() + .border_color(colors.border) + .bg(colors.surface), + ) + .child(div().w_32().h_16().rounded_lg().bg(colors.sunken)) + .child(code("div()", cx)), + ) +} + +pub fn text(cx: &App) -> impl IntoElement + use<> { + let bold = HighlightStyle { + font_weight: Some(FontWeight::SEMIBOLD), + ..Default::default() + }; + section("Text", "A string is an element. StyledText adds runs.", cx).child( + row() + .gap_6() + .child("Plain text, as a child.") + .child(StyledText::new("One accent, used once.").with_highlights([(4..10, bold)])) + .child(code("StyledText::new(…)", cx)), + ) +} + +pub fn svg_demo(cx: &App) -> impl IntoElement + use<> { + let color = cx.theme().colors.fg_muted; + section( + "Svg", + "gpui's svg(). Any path from the asset source, tinted.", + cx, + ) + .child( + row() + .gap_6() + .child( + svg() + .path(IconName::Compass.path()) + .size_12() + .text_color(color), + ) + .child( + svg() + .path(IconName::Compass.path()) + .size_12() + .text_color(color) + .with_transformation(Transformation::rotate(radians(0.6))), + ) + .child(code("svg().path(…)", cx)), + ) +} + +pub fn canvas_demo(cx: &App) -> impl IntoElement + use<> { + let color = cx.theme().colors.focus; + section("Canvas", "gpui's canvas(). Paint with paths.", cx).child( + row() + .gap_6() + .child( + div().w(px(320.0)).h(px(80.0)).child( + canvas( + |_, _, _| {}, + move |bounds, _, window, _| { + let mut wave = PathBuilder::stroke(px(1.5)); + for step in 0..=96 { + let t = step as f32 / 96.0; + let x = bounds.origin.x + bounds.size.width * t; + let lift = 0.5 - 0.38 * (t * TAU * 1.5).sin() * (1.0 - t * 0.5); + let y = bounds.origin.y + bounds.size.height * lift; + if step == 0 { + wave.move_to(point(x, y)); + } else { + wave.line_to(point(x, y)); + } + } + window.paint_path(wave.build().expect("wave path"), color); + }, + ) + .size_full(), + ), + ) + .child(code("canvas(prepaint, paint)", cx)), + ) +} + +pub fn spacer(cx: &App) -> impl IntoElement + use<> { + let colors = &cx.theme().colors; + section( + "Spacer", + "flex_1() takes the slack. No component needed.", + cx, + ) + .child( + div() + .flex() + .items_center() + .w(px(420.0)) + .h_10() + .px_3() + .rounded(cx.theme().radius(Radius::Md)) + .border_1() + .border_color(colors.border) + .child(Icon::new(IconName::Menu).color(colors.fg_muted)) + .child(div().flex_1()) + .child(code("div().flex_1()", cx)) + .child(div().flex_1()) + .child(Icon::new(IconName::Settings).color(colors.fg_muted)), + ) +} + +pub fn portal(window: &mut Window, cx: &mut App) -> impl IntoElement + use<> { + let open = window.use_keyed_state("prim-portal", cx, |_, _| false); + let shown = *open.read(cx); + let theme = cx.theme(); + let note = div() + .w(px(260.0)) + .p_3() + .rounded(theme.radius(Radius::Lg)) + .bg(theme.colors.overlay) + .border_1() + .border_color(theme.colors.border) + .shadow(theme.elevation(ely_gpui_component::theme::Elevation::Floating)) + .text_size(theme.text_size(TextSize::Sm)) + .child("Painted last, above the clipped box."); + section( + "Portal", + "deferred(anchored()) escapes clipping and paints on top.", + cx, + ) + .child( + row() + .gap_6() + .child( + div() + .flex() + .items_start() + .w(px(220.0)) + .h_16() + .p_3() + .overflow_hidden() + .rounded(theme.radius(Radius::Md)) + .border_1() + .border_color(theme.colors.border) + .child(probe( + "portal-toggle", + Button::new( + "portal-toggle", + if shown { "Hide note" } else { "Show note" }, + ) + .on_click(move |_, _, cx| { + open.update(cx, |open, cx| { + *open = !*open; + cx.notify(); + }) + }), + )) + .when(shown, |clip| { + clip.child(deferred( + anchored().offset(point(px(0.0), px(8.0))).child(note), + )) + }), + ) + .child(code("deferred(anchored())", cx)), + ) +} + +fn framed(title: &'static str, body: impl IntoElement, cx: &App) -> impl IntoElement { + let theme = cx.theme(); + div() + .flex() + .flex_col() + .gap_2() + .p_3() + .w(px(180.0)) + .rounded(theme.radius(Radius::Lg)) + .border_1() + .border_color(theme.colors.border) + .child( + div() + .text_size(theme.text_size(TextSize::Xs)) + .text_color(theme.colors.fg_subtle) + .child(title), + ) + .child(body) +} + +pub fn slot(cx: &App) -> impl IntoElement + use<> { + section( + "Slot", + "Take impl IntoElement. The caller fills the hole.", + cx, + ) + .child( + row() + .gap_4() + .child(framed("slot: icon", Icon::new(IconName::Sparkles), cx)) + .child(framed( + "slot: button", + Button::new("slot-button", "Save").primary(), + cx, + )) + .child(code("fn framed(body: impl IntoElement)", cx)), + ) +} + +pub fn show(window: &mut Window, cx: &mut App) -> impl IntoElement + use<> { + let on = window.use_keyed_state("prim-show", cx, |_, _| true); + let shown = *on.read(cx); + let muted = cx.theme().colors.fg_muted; + section( + "Show / When", + ".when() and .when_some() branch inside a builder.", + cx, + ) + .child( + row() + .gap_4() + .child( + Button::new("show-toggle", if shown { "Hide" } else { "Show" }).on_click( + move |_, _, cx| { + on.update(cx, |on, cx| { + *on = !*on; + cx.notify(); + }) + }, + ), + ) + .when(shown, |row| { + row.child(div().text_color(muted).child("Here while true.")) + }) + .child(code(".when(cond, |el| …)", cx)), + ) +} + +pub fn each(cx: &App) -> impl IntoElement + use<> { + let theme = cx.theme(); + let steps = ["Draft", "Review", "Ship"]; + section("For / Each", ".children() takes any iterator.", cx).child( + row() + .gap_6() + .children(steps.iter().enumerate().map(|(ix, step)| { + div() + .flex() + .items_center() + .gap_2() + .child( + div() + .font_family(theme.mono_family.clone()) + .text_size(theme.text_size(TextSize::Xs)) + .text_color(theme.colors.fg_subtle) + .child(SharedString::from(format!("{:02}", ix + 1))), + ) + .child(*step) + })) + .child(code(".children(iter)", cx)), + ) +} + +fn pair(cx: &App) -> [AnyElement; 2] { + let muted = cx.theme().colors.fg_muted; + [ + Icon::new(IconName::Layers).color(muted).into_any_element(), + div() + .text_color(muted) + .child("two siblings, no wrapper") + .into_any_element(), + ] +} + +pub fn fragment(cx: &App) -> impl IntoElement + use<> { + section( + "Fragment", + "Return several elements; the parent adopts them.", + cx, + ) + .child( + row() + .gap_2() + .children(pair(cx)) + .child(div().w_6()) + .child(code(".children([a, b])", cx)), + ) +} + +pub fn click_outside(window: &mut Window, cx: &mut App) -> impl IntoElement + use<> { + let open = window.use_keyed_state("prim-outside", cx, |_, _| false); + let shown = *open.read(cx); + let theme = cx.theme(); + let close = open.clone(); + section( + "ClickOutside", + "on_mouse_down_out closes what the pointer left.", + cx, + ) + .child( + row() + .gap_4() + .child( + Button::new("outside-open", "Open panel") + .disabled(shown) + .on_click(move |_, _, cx| { + open.update(cx, |open, cx| { + *open = true; + cx.notify(); + }) + }), + ) + .when(shown, |row| { + row.child( + div() + .id("outside-panel") + .px_3() + .py_2() + .rounded(theme.radius(Radius::Md)) + .bg(theme.colors.sunken) + .child("Click anywhere else.") + .on_mouse_down_out(move |_, _, cx| { + close.update(cx, |open, cx| { + *open = false; + cx.notify(); + }) + }), + ) + }) + .child(code(".on_mouse_down_out(…)", cx)), + ) +} + +pub fn hover_area(window: &mut Window, cx: &mut App) -> impl IntoElement + use<> { + let inside = window.use_keyed_state("prim-hover", cx, |_, _| false); + let hovered = *inside.read(cx); + let theme = cx.theme(); + section( + "HoverArea", + "on_hover reports enter and leave. .hover() restyles.", + cx, + ) + .child( + row() + .gap_4() + .child( + div() + .id("hover-area") + .w(px(220.0)) + .h_16() + .flex() + .items_center() + .justify_center() + .rounded(theme.radius(Radius::Lg)) + .border_1() + .border_color(theme.colors.border) + .hover(|style| style.bg(theme.colors.hover)) + .child(if hovered { + "Pointer inside" + } else { + "Pointer outside" + }) + .on_hover(move |hovered, _, cx| { + inside.update(cx, |inside, cx| { + *inside = *hovered; + cx.notify(); + }) + }), + ) + .child(code(".on_hover(…)", cx)), + ) +} + +pub fn keyboard(window: &mut Window, cx: &mut App) -> impl IntoElement + use<> { + let focus = window.use_keyed_state("prim-keys-focus", cx, |_, cx| cx.focus_handle()); + let last = window.use_keyed_state("prim-keys", cx, |_, _| SharedString::from("—")); + let handle = focus.read(cx).clone(); + let shown = last.read(cx).clone(); + let theme = cx.theme(); + section( + "KeyboardHandler", + "on_key_down on a focused element. Click, then type.", + cx, + ) + .child( + row() + .gap_4() + .child( + div() + .id("keys") + .track_focus(&handle) + .w(px(220.0)) + .h_16() + .flex() + .items_center() + .justify_center() + .rounded(theme.radius(Radius::Lg)) + .border_1() + .border_color(theme.colors.border) + .font_family(theme.mono_family.clone()) + .focus_ring(cx) + .child(shown) + .on_key_down(move |event, _, cx| { + let stroke = SharedString::from(event.keystroke.to_string()); + last.update(cx, |last, cx| { + *last = stroke; + cx.notify(); + }) + }), + ) + .child(code(".on_key_down(…)", cx)), + ) +} + +pub fn clipboard(window: &mut Window, cx: &mut App) -> impl IntoElement + use<> { + let pasted = window.use_keyed_state("prim-clip", cx, |_, _| None::); + let shown = pasted.read(cx).clone(); + let muted = cx.theme().colors.fg_muted; + section( + "Clipboard", + "write_to_clipboard and read_from_clipboard on App.", + cx, + ) + .child( + row() + .gap_3() + .child( + Button::new("clip-copy", "Copy “Ely”") + .icon(IconName::Copy) + .on_click(|_, _, cx| { + cx.write_to_clipboard(ClipboardItem::new_string("Ely".into())) + }), + ) + .child( + Button::new("clip-paste", "Paste") + .variant(ButtonVariant::Ghost) + .icon(IconName::Clipboard) + .on_click(move |_, _, cx| { + let text = cx.read_from_clipboard().and_then(|item| item.text()); + pasted.update(cx, |pasted, cx| { + *pasted = Some(match text { + Some(text) => text.into(), + None => "The clipboard holds no text.".into(), + }); + cx.notify(); + }) + }), + ) + .when_some(shown, |row, text| { + row.child(div().text_color(muted).child(text)) + }) + .child(code("cx.write_to_clipboard(…)", cx)), + ) +} diff --git a/examples/gallery/pages/primitives/parts.rs b/examples/gallery/pages/primitives/parts.rs new file mode 100644 index 0000000..b274fb5 --- /dev/null +++ b/examples/gallery/pages/primitives/parts.rs @@ -0,0 +1,464 @@ +use std::{path::Path, time::Duration}; + +use ely_gpui_component::{ + buttons::{Button, IconButton}, + primitives::{ + Backdrop, Divider, FocusRing, FocusScope, Icon, IconName, Image, IntersectionObserver, + Measure, Pressable, Tooltip, TooltipTrigger, + }, + theme::{ActiveTheme, IconSize, Radius, TextSize}, +}; +use gpui::{ + App, FontWeight, InteractiveElement, IntoElement, ParentElement, Pixels, SharedString, Size, + StatefulInteractiveElement, Styled, Window, div, prelude::*, px, +}; + +use crate::{ + probe::probe, + ui::{blocked, code, row, section, specimen, specimens}, +}; + +const ATRIUM: &str = concat!( + env!("CARGO_MANIFEST_DIR"), + "/examples/gallery/assets/atrium.jpg" +); + +fn counter(window: &mut Window, cx: &mut App, key: &'static str) -> gpui::Entity { + window.use_keyed_state(key, cx, |_, _| 0u32) +} + +pub fn icon(cx: &App) -> impl IntoElement + use<> { + let colors = &cx.theme().colors; + let sizes = [ + (IconSize::Xs, "12"), + (IconSize::Sm, "14"), + (IconSize::Md, "16"), + (IconSize::Lg, "20"), + (IconSize::Xl, "24"), + (IconSize::Xxl, "32"), + ]; + let tones = [ + (colors.fg, "fg"), + (colors.fg_muted, "muted"), + (colors.focus, "focus"), + (colors.success, "success"), + (colors.warning, "warning"), + (colors.danger, "danger"), + ]; + section( + "Icon", + "Lucide, drawn as a mask. Color comes from the theme.", + cx, + ) + .child(specimens().children( + sizes.map(|(size, name)| specimen(name, Icon::new(IconName::Sparkles).size(size), cx)), + )) + .child( + specimens().children(tones.map(|(color, name)| { + specimen(name, Icon::new(IconName::CircleCheck).color(color), cx) + })), + ) +} + +pub fn icon_set(cx: &App) -> impl IntoElement + use<> { + let colors = &cx.theme().colors; + section( + "IconSet / IconRegistry", + "IconName lists every bundled icon. Hover for its name.", + cx, + ) + .child( + div() + .flex() + .flex_wrap() + .gap_1() + .children(IconName::ALL.iter().map(|&name| { + div() + .id(name.name()) + .size_9() + .flex() + .items_center() + .justify_center() + .rounded_md() + .hover(|style| style.bg(colors.hover)) + .tooltip(Tooltip::text(name.name())) + .child(Icon::new(name).color(colors.fg_muted)) + })), + ) +} + +fn tile(image: Image, cx: &App) -> Image { + image + .w(px(198.0)) + .h(px(132.0)) + .rounded(cx.theme().radius(Radius::Lg)) +} + +pub fn image(cx: &App) -> impl IntoElement + use<> { + section( + "Image", + "Loading pulses. Failure and emptiness show a quiet mark.", + cx, + ) + .child( + specimens() + .child(specimen( + "loaded", + tile(Image::new("img-atrium", Path::new(ATRIUM)), cx), + cx, + )) + .child(specimen( + "failed", + tile(Image::new("img-missing", Path::new("/missing/ely.png")), cx), + cx, + )) + .child(specimen( + "empty", + tile(Image::placeholder("img-empty"), cx), + cx, + )), + ) +} + +pub fn divider(cx: &App) -> impl IntoElement + use<> { + section( + "Divider / Separator", + "One hairline. Across, down, or holding a word.", + cx, + ) + .child( + div() + .flex() + .flex_col() + .gap_5() + .w(px(420.0)) + .child(Divider::horizontal()) + .child(Divider::horizontal().label("or")) + .child( + row() + .h_6() + .child("Left") + .child(Divider::vertical()) + .child("Right"), + ), + ) +} + +pub fn backdrop(window: &mut Window, cx: &mut App) -> impl IntoElement + use<> { + let open = window.use_keyed_state("prim-backdrop", cx, |_, _| false); + let shown = *open.read(cx); + let theme = cx.theme(); + let (show, dismiss, close) = (open.clone(), open.clone(), open); + let set = |state: &gpui::Entity, value: bool, cx: &mut App| { + state.update(cx, |open, cx| { + *open = value; + cx.notify(); + }) + }; + let card = div() + .w(px(320.0)) + .p_5() + .flex() + .flex_col() + .gap_3() + .rounded(theme.radius(Radius::Xl)) + .bg(theme.colors.overlay) + .shadow(theme.elevation(ely_gpui_component::theme::Elevation::Modal)) + .child(div().font_weight(FontWeight::SEMIBOLD).child("Backdrop")) + .child( + div() + .text_color(theme.colors.fg_muted) + .child("Click outside to close."), + ) + .child(div().flex().justify_end().child( + Button::new("backdrop-close", "Close").on_click(move |_, _, cx| set(&close, false, cx)), + )); + section( + "Overlay / Backdrop", + "A scrim that fades in, blocks the page, and hears outside clicks.", + cx, + ) + .child( + row() + .child(probe( + "backdrop-open", + Button::new("backdrop-open", "Show backdrop") + .on_click(move |_, _, cx| set(&show, true, cx)), + )) + .when(shown, |row| { + row.child( + Backdrop::new("prim-backdrop-layer") + .on_dismiss(move |_, cx| set(&dismiss, false, cx)) + .child(card), + ) + }), + ) +} + +pub fn visually_hidden(cx: &App) -> impl IntoElement + use<> { + section("VisuallyHidden", "Text for screen readers only.", cx).child(blocked( + "Blocked: gpui 0.2.2 has no accessibility tree to speak to.", + cx, + )) +} + +fn chip(id: &'static str, label: &'static str, cx: &App) -> impl IntoElement + use<> { + let theme = cx.theme(); + div() + .id(id) + .tab_index(0) + .px_3() + .py_1p5() + .rounded(theme.radius(Radius::Md)) + .border_1() + .border_color(theme.colors.border) + .focus_ring(cx) + .child(label) +} + +pub fn focus_ring(cx: &App) -> impl IntoElement + use<> { + section( + "FocusRing", + "Any focusable element. Press Tab to walk these.", + cx, + ) + .child( + row() + .child(chip("ring-a", "First", cx)) + .child(chip("ring-b", "Second", cx)) + .child(chip("ring-c", "Third", cx)) + .child(code(".focus_ring(cx)", cx)), + ) +} + +pub fn focus_trap(window: &mut Window, cx: &mut App) -> impl IntoElement + use<> { + let handle = window + .use_keyed_state("prim-trap", cx, |_, cx| cx.focus_handle()) + .read(cx) + .clone(); + let theme = cx.theme(); + section( + "FocusScope / FocusTrap", + "Tab into the box. Tab then circles inside it.", + cx, + ) + .child( + FocusScope::new(&handle).trap().flex().child( + row() + .p_3() + .rounded(theme.radius(Radius::Lg)) + .border_1() + .border_color(theme.colors.border_strong) + .child(chip("trap-a", "One", cx)) + .child(chip("trap-b", "Two", cx)) + .child(probe("trap-c", chip("trap-c", "Three", cx))), + ), + ) +} + +pub fn pressable(window: &mut Window, cx: &mut App) -> impl IntoElement + use<> { + let taps = counter(window, cx, "prim-taps"); + let holds = counter(window, cx, "prim-holds"); + let (tap_count, hold_count) = (*taps.read(cx), *holds.read(cx)); + let bump = |count: &gpui::Entity, cx: &mut App| { + count.update(cx, |count, cx| { + *count += 1; + cx.notify(); + }) + }; + section( + "Pressable", + "Knows when it is held. Hold half a second for a long press.", + cx, + ) + .child( + row() + .gap_6() + .child(probe( + "prim-press", + Pressable::new("prim-press", |pressed, _, cx| { + let theme = cx.theme(); + div() + .w(px(160.0)) + .h_16() + .flex() + .items_center() + .justify_center() + .rounded(theme.radius(Radius::Lg)) + .bg(if pressed { + theme.colors.active + } else { + theme.colors.sunken + }) + .border_1() + .border_color(theme.colors.border) + .child(if pressed { "Holding" } else { "Press" }) + .into_any_element() + }) + .on_press(move |_, cx| bump(&taps, cx)) + .on_long_press(move |_, cx| bump(&holds, cx)), + )) + .child(code(format!("taps {tap_count} · holds {hold_count}"), cx)), + ) +} + +pub fn measure(window: &mut Window, cx: &mut App) -> impl IntoElement + use<> { + let size = window.use_keyed_state("prim-size", cx, |_, _| None::>); + let wide = window.use_keyed_state("prim-wide", cx, |_, _| false); + let (measured, is_wide) = (*size.read(cx), *wide.read(cx)); + let theme = cx.theme(); + let readout = match measured { + Some(size) => format!( + "{:.0} × {:.0}", + f32::from(size.width), + f32::from(size.height) + ), + None => "measuring…".to_string(), + }; + section( + "Measure", + "Reports bounds when they change. This is also the ResizeObserver.", + cx, + ) + .child( + row() + .child( + Button::new("measure-toggle", if is_wide { "Narrow" } else { "Widen" }).on_click( + move |_, _, cx| { + wide.update(cx, |wide, cx| { + *wide = !*wide; + cx.notify(); + }) + }, + ), + ) + .child(code(readout, cx)), + ) + .child( + Measure::new("prim-measured", move |bounds, _, cx| { + size.update(cx, |size, cx| { + *size = Some(bounds.size); + cx.notify(); + }) + }) + .w(px(if is_wide { 420.0 } else { 220.0 })) + .p_3() + .rounded(theme.radius(Radius::Lg)) + .bg(theme.colors.sunken) + .text_color(theme.colors.fg_muted) + .child("Text wraps to the width it gets. The box reports each new size once."), + ) +} + +pub fn intersection(window: &mut Window, cx: &mut App) -> impl IntoElement + use<> { + let seen = window.use_keyed_state("prim-seen", cx, |_, _| false); + let visible = *seen.read(cx); + let theme = cx.theme(); + let spacer = || div().h(px(140.0)); + let status = if visible { "in view" } else { "out of view" }; + section( + "IntersectionObserver", + "Scroll the box. The marker reports entering and leaving.", + cx, + ) + .child( + row() + .gap_6() + .child( + div() + .id("prim-scroller") + .w(px(260.0)) + .h(px(120.0)) + .overflow_y_scroll() + .rounded(theme.radius(Radius::Lg)) + .border_1() + .border_color(theme.colors.border) + .child(spacer()) + .child( + IntersectionObserver::new("prim-marker", move |visible, _, cx| { + seen.update(cx, |seen, cx| { + *seen = visible; + cx.notify(); + }) + }) + .mx_3() + .p_2() + .rounded(theme.radius(Radius::Md)) + .bg(theme.colors.info_subtle) + .text_color(theme.colors.info) + .child("Marker"), + ) + .child(spacer()), + ) + .child(code(status, cx)), + ) +} + +pub fn tooltip(cx: &App) -> impl IntoElement + use<> { + let theme = cx.theme(); + let muted = theme.colors.tooltip_fg.opacity(0.7); + let lane = div() + .w(px(260.0)) + .h_12() + .flex() + .items_center() + .justify_center() + .rounded(theme.radius(Radius::Lg)) + .border_1() + .border_color(theme.colors.border) + .text_color(theme.colors.fg_muted) + .child("Move across me"); + section( + "Tooltip Trigger", + "gpui's trigger with Ely's body, or Ely's own trigger for delay and tracking.", + cx, + ) + .child( + row() + .gap_2() + .child(probe( + "tip-plain", + div() + .id("tip-plain") + .child(IconButton::new("tip-a", IconName::Copy)) + .tooltip(Tooltip::text("Copy")), + )) + .child(probe( + "tip-meta", + div() + .id("tip-meta") + .child(IconButton::new("tip-b", IconName::Search)) + .tooltip(Tooltip::with_meta("Search", "⌘K")), + )) + .child(probe( + "tip-rich", + div() + .id("tip-rich") + .child(IconButton::new("tip-c", IconName::Info)) + .tooltip(Tooltip::rich(move |_, _| { + div() + .flex() + .flex_col() + .gap_0p5() + .child(div().font_weight(FontWeight::MEDIUM).child("Rich content")) + .child(div().text_color(muted).child("Any element fits here.")) + .into_any_element() + })), + )) + .child(div().w_4()) + .child(probe( + "tip-follow", + TooltipTrigger::new("tip-follow", lane, |_, _| { + SharedString::from("No delay. I follow.").into_any_element() + }) + .delay(Duration::ZERO) + .follow_mouse(), + )), + ) + .child( + div() + .text_size(theme.text_size(TextSize::Xs)) + .text_color(theme.colors.fg_subtle) + .child("Ely's trigger waits 400ms by default; gpui's waits 500ms."), + ) +} diff --git a/examples/gallery/pages/theme.rs b/examples/gallery/pages/theme.rs index 3231454..2a0d8df 100644 --- a/examples/gallery/pages/theme.rs +++ b/examples/gallery/pages/theme.rs @@ -18,6 +18,7 @@ pub const PAGE: Page = Page { title: "Theme", summary: "Tokens every component reads. Light and dark share one grammar.", render, + script: &[], }; fn render(_: &mut Window, cx: &mut App) -> AnyElement { diff --git a/examples/gallery/probe.rs b/examples/gallery/probe.rs new file mode 100644 index 0000000..c429044 --- /dev/null +++ b/examples/gallery/probe.rs @@ -0,0 +1,25 @@ +use std::collections::HashMap; + +use ely_gpui_component::primitives::Measure; +use gpui::{App, Bounds, Global, IntoElement, ParentElement, Pixels}; + +/// Window bounds of named demo elements, for scripted capture. +#[derive(Default)] +pub struct Probes(HashMap<&'static str, Bounds>); + +impl Global for Probes {} + +impl Probes { + pub fn get(key: &str, cx: &App) -> Option> { + cx.try_global::() + .and_then(|probes| probes.0.get(key).copied()) + } +} + +/// Wraps `element` so scripts can find it by `key`. +pub fn probe(key: &'static str, element: impl IntoElement) -> Measure { + Measure::new(key, move |bounds, _, cx| { + cx.default_global::().0.insert(key, bounds); + }) + .child(element) +} diff --git a/examples/gallery/script.rs b/examples/gallery/script.rs new file mode 100644 index 0000000..2a90b95 --- /dev/null +++ b/examples/gallery/script.rs @@ -0,0 +1,148 @@ +use std::{path::PathBuf, time::Duration}; + +use anyhow::{Context as _, Result}; +use gpui::{AsyncApp, Keystroke, Pixels, Point, WindowHandle, point, px}; + +use crate::{capture::snapshot, probe::Probes, shell::Gallery}; + +/// One scripted input, aimed at a probe by key. +pub enum Step { + Rest, + Hover(&'static str), + Down(&'static str), + Up(&'static str), + Click(&'static str), + Key(&'static str), + Wait(u64), + Shot(&'static str), +} + +const FRAME: Duration = Duration::from_millis(120); + +#[derive(Clone, Copy)] +enum Mouse { + Move, + Down, + Up, +} + +/// Parks the pointer on empty sidebar space. +pub fn park(window: WindowHandle, cx: &mut AsyncApp) -> Result<()> { + send(window, Mouse::Move, point(px(24.0), px(720.0)), cx) +} + +pub async fn play( + window: WindowHandle, + steps: &[Step], + path: impl Fn(&str) -> PathBuf, + cx: &mut AsyncApp, +) -> Result<()> { + for step in steps { + match *step { + Step::Rest => park(window, cx)?, + Step::Hover(key) => { + let at = target(window, key, cx).await?; + send(window, Mouse::Move, at, cx)?; + } + Step::Down(key) => { + let at = target(window, key, cx).await?; + send(window, Mouse::Move, at, cx)?; + send(window, Mouse::Down, at, cx)?; + } + Step::Up(key) => { + let at = target(window, key, cx).await?; + send(window, Mouse::Up, at, cx)?; + } + Step::Click(key) => { + let at = target(window, key, cx).await?; + send(window, Mouse::Move, at, cx)?; + send(window, Mouse::Down, at, cx)?; + send(window, Mouse::Up, at, cx)?; + } + Step::Key(stroke) => { + let stroke = + Keystroke::parse(stroke).with_context(|| format!("bad keystroke {stroke}"))?; + window.update(cx, |_, window, cx| { + window.dispatch_keystroke(stroke, cx); + })?; + } + Step::Wait(ms) => { + cx.background_executor() + .timer(Duration::from_millis(ms)) + .await + } + Step::Shot(name) => { + let file = path(name); + snapshot(&file)?; + log::info!("script: wrote {}", file.display()); + } + } + cx.background_executor().timer(FRAME).await; + } + Ok(()) +} + +fn send( + window: WindowHandle, + kind: Mouse, + at: Point, + cx: &mut AsyncApp, +) -> Result<()> { + let height = window.update(cx, |_, window, _| window.viewport_size().height)?; + post(kind, f64::from(at.x), f64::from(height - at.y)) +} + +/// Queues a real mouse event on this app. No permission needed. +#[cfg(target_os = "macos")] +fn post(kind: Mouse, x: f64, y: f64) -> Result<()> { + use cocoa::{ + appkit::{NSApp, NSApplication, NSEvent, NSEventModifierFlags, NSEventType}, + base::{NO, id, nil}, + foundation::NSPoint, + }; + let number = crate::capture::window_number()?; + let kind = match kind { + Mouse::Move => NSEventType::NSMouseMoved, + Mouse::Down => NSEventType::NSLeftMouseDown, + Mouse::Up => NSEventType::NSLeftMouseUp, + }; + unsafe { + let event = ::mouseEventWithType_location_modifierFlags_timestamp_windowNumber_context_eventNumber_clickCount_pressure_( + nil, + kind, + NSPoint::new(x, y), + NSEventModifierFlags::empty(), + 0.0, + i64::from(number), + nil, + 0, + 1, + 1.0, + ); + anyhow::ensure!(event != nil, "AppKit refused a synthetic mouse event"); + NSApp().postEvent_atStart_(event, NO); + } + Ok(()) +} + +#[cfg(not(target_os = "macos"))] +fn post(_: Mouse, _: f64, _: f64) -> Result<()> { + anyhow::bail!("scripted mouse input needs macOS") +} + +async fn target( + window: WindowHandle, + key: &str, + cx: &mut AsyncApp, +) -> Result> { + let bounds = cx + .update(|cx| Probes::get(key, cx))? + .with_context(|| format!("probe {key} never rendered"))?; + if window.update(cx, |gallery, _, cx| gallery.reveal(bounds, cx))? { + cx.background_executor().timer(FRAME).await; + } + let bounds = cx + .update(|cx| Probes::get(key, cx))? + .with_context(|| format!("probe {key} vanished after scrolling"))?; + Ok(bounds.center()) +} diff --git a/examples/gallery/shell.rs b/examples/gallery/shell.rs index 7495beb..3baef63 100644 --- a/examples/gallery/shell.rs +++ b/examples/gallery/shell.rs @@ -1,15 +1,15 @@ use ely_gpui_component::{ buttons::{ButtonVariant, IconButton}, - primitives::IconName, + primitives::{FocusScope, IconName}, theme::{ActiveTheme, ControlSize, Mode, Radius, TextSize, Theme}, }; use gpui::{ - Context, FocusHandle, FontWeight, InteractiveElement, IntoElement, ParentElement, Pixels, - Render, ScrollHandle, SharedString, StatefulInteractiveElement, Styled, Subscription, Window, - div, point, prelude::*, px, + Bounds, Context, FocusHandle, FontWeight, InteractiveElement, IntoElement, ParentElement, + Pixels, Render, ScrollHandle, SharedString, StatefulInteractiveElement, Styled, Subscription, + Window, div, point, prelude::*, px, }; -use crate::{FocusNext, FocusPrev, pages}; +use crate::pages; #[derive(Clone, Copy, PartialEq, Eq)] pub enum Choice { @@ -59,6 +59,21 @@ impl Gallery { ) } + /// Scrolls until `target` sits inside the page. True if it moved. + pub fn reveal(&mut self, target: Bounds, cx: &mut Context) -> bool { + let (view, margin) = (self.scroll.bounds(), px(96.0)); + let shift = if target.top() < view.top() + margin { + target.top() - view.top() - margin + } else if target.bottom() > view.bottom() - margin { + target.bottom() - view.bottom() + margin + } else { + return false; + }; + let y = (-self.scroll.offset().y + shift).clamp(px(0.0), self.scroll.max_offset().height); + self.scroll_to(y, cx); + true + } + pub fn scroll_to(&mut self, y: Pixels, cx: &mut Context) { self.scroll.set_offset(point(px(0.0), -y)); cx.notify(); @@ -183,11 +198,7 @@ impl Render for Gallery { let theme = cx.theme(); let colors = &theme.colors; - div() - .id("gallery") - .track_focus(&self.focus) - .on_action(|_: &FocusNext, window, _| window.focus_next()) - .on_action(|_: &FocusPrev, window, _| window.focus_prev()) + FocusScope::new(&self.focus) .size_full() .flex() .bg(colors.bg) diff --git a/examples/gallery/ui.rs b/examples/gallery/ui.rs index 0ca52a6..1cfb7f9 100644 --- a/examples/gallery/ui.rs +++ b/examples/gallery/ui.rs @@ -51,3 +51,26 @@ pub fn specimen(caption: impl Into, body: impl IntoElement, cx: &A .child(body) .child(label(caption, cx)) } + +/// Monospace hint naming the call. +pub fn code(text: impl Into, cx: &App) -> impl IntoElement { + let theme = cx.theme(); + div() + .font_family(theme.mono_family.clone()) + .text_size(theme.text_size(TextSize::Xs)) + .text_color(theme.colors.fg_muted) + .child(text.into()) +} + +/// Honest note for an entry gpui cannot support. +pub fn blocked(text: impl Into, cx: &App) -> impl IntoElement { + let theme = cx.theme(); + div() + .flex() + .items_center() + .gap_2() + .text_size(theme.text_size(TextSize::Sm)) + .text_color(theme.colors.warning) + .child(div().size_1p5().rounded_full().bg(theme.colors.warning)) + .child(text.into()) +} diff --git a/src/buttons/button.rs b/src/buttons/button.rs index 995ce86..925f405 100644 --- a/src/buttons/button.rs +++ b/src/buttons/button.rs @@ -4,7 +4,7 @@ use gpui::{ }; use crate::{ - primitives::{Icon, IconName}, + primitives::{FocusRing, Icon, IconName}, theme::{ActiveTheme, ControlSize, IconSize, Mix, Palette, Radius, TextSize}, }; @@ -27,7 +27,7 @@ pub(crate) struct Tone { pub hover: Hsla, pub pressed: Hsla, pub fg: Hsla, - pub border: Option, + pub border: Hsla, } pub(crate) fn tone(variant: ButtonVariant, colors: &Palette) -> Tone { @@ -38,49 +38,49 @@ pub(crate) fn tone(variant: ButtonVariant, colors: &Palette) -> Tone { hover: colors.accent_hover, pressed: colors.accent_hover.mix(&colors.on_accent, 0.12), fg: colors.on_accent, - border: None, + border: clear, }, ButtonVariant::Secondary => Tone { bg: colors.surface, hover: colors.hover, pressed: colors.active, fg: colors.fg, - border: Some(colors.border), + border: colors.border, }, ButtonVariant::Outline => Tone { bg: clear, hover: colors.hover, pressed: colors.active, fg: colors.fg, - border: Some(colors.border_strong), + border: colors.border_strong, }, ButtonVariant::Ghost => Tone { bg: clear, hover: colors.hover, pressed: colors.active, fg: colors.fg, - border: None, + border: clear, }, ButtonVariant::Subtle => Tone { bg: colors.hover, hover: colors.active, pressed: colors.active.mix(&colors.border_strong, 0.5), fg: colors.fg, - border: None, + border: clear, }, ButtonVariant::Danger => Tone { bg: colors.danger, hover: colors.danger.mix(&colors.fg, 0.14), pressed: colors.danger.mix(&colors.fg, 0.24), fg: colors.on_accent, - border: None, + border: clear, }, ButtonVariant::Link => Tone { bg: clear, hover: clear, pressed: clear, fg: colors.link, - border: None, + border: clear, }, } } @@ -186,7 +186,8 @@ impl RenderOnce for Button { .font_weight(FontWeight::MEDIUM) .text_color(tone.fg) .bg(tone.bg) - .when_some(tone.border, |el, border| el.border_1().border_color(border)) + .border_1() + .border_color(tone.border) .when(self.full_width, |el| el.w_full()) .when_some(self.icon, |el, name| el.child(icon(name))) .child(self.label) @@ -202,7 +203,7 @@ impl RenderOnce for Button { if link { style.underline() } else { style } }) .active(|style| style.bg(tone.pressed)) - .focus(|style| style.shadow(theme.focus_ring())) + .focus_ring(cx) .on_mouse_down(MouseButton::Left, |_, window, _| window.prevent_default()) .when_some(self.on_click, |el, handler| el.on_click(handler)) }) diff --git a/src/buttons/icon_button.rs b/src/buttons/icon_button.rs index f96fc9c..7e7e78b 100644 --- a/src/buttons/icon_button.rs +++ b/src/buttons/icon_button.rs @@ -4,7 +4,7 @@ use gpui::{ use super::button::{ButtonVariant, ClickHandler, label_size, tone}; use crate::{ - primitives::{Icon, IconName}, + primitives::{FocusRing, Icon, IconName}, theme::{ActiveTheme, ControlSize, Radius}, }; @@ -71,7 +71,8 @@ impl RenderOnce for IconButton { .size(side) .rounded(theme.radius(Radius::Md)) .bg(tone.bg) - .when_some(tone.border, |el, border| el.border_1().border_color(border)) + .border_1() + .border_color(tone.border) .child(Icon::new(self.icon).size(icon_size).color(tone.fg)) .map(|el| { if self.disabled { @@ -81,7 +82,7 @@ impl RenderOnce for IconButton { .tab_index(0) .hover(|style| style.bg(tone.hover)) .active(|style| style.bg(tone.pressed)) - .focus(|style| style.shadow(theme.focus_ring())) + .focus_ring(cx) .on_mouse_down(MouseButton::Left, |_, window, _| window.prevent_default()) .when_some(self.on_click, |el, handler| el.on_click(handler)) }) diff --git a/src/lib.rs b/src/lib.rs index 3810e5e..f905863 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -7,18 +7,21 @@ pub mod theme; pub use assets::Assets; -use gpui::App; +use gpui::{App, KeyBinding}; -use crate::primitives::IconName; +use crate::primitives::{FocusNext, FocusPrev, IconName}; -/// Loads fonts and the theme. Call once, first. +/// Loads fonts and the theme, binds Tab. Call once, first. pub fn init(cx: &mut App) { - let probe = IconName::Check.path(); - let wired = cx.asset_source().load(probe).ok().flatten().is_some(); - assert!( - wired, - "ely: pass `ely_gpui_component::Assets` to `Application::with_assets`" - ); + match cx.asset_source().load(IconName::Check.path()) { + Ok(Some(_)) => {} + Ok(None) => panic!("ely: pass `ely_gpui_component::Assets` to `Application::with_assets`"), + Err(error) => panic!("ely: asset source failed: {error:#}"), + } assets::load_fonts(cx).expect("ely: embedded fonts failed to register"); theme::Theme::init(cx); + cx.bind_keys([ + KeyBinding::new("tab", FocusNext, None), + KeyBinding::new("shift-tab", FocusPrev, None), + ]); } diff --git a/src/motion/curve.rs b/src/motion/curve.rs index be0bb6e..261ed75 100644 --- a/src/motion/curve.rs +++ b/src/motion/curve.rs @@ -1,6 +1,6 @@ use std::time::Duration; -use gpui::App; +use gpui::{App, Pixels, px}; use crate::theme::ActiveTheme; @@ -9,6 +9,9 @@ pub const BASE: Duration = Duration::from_millis(200); pub const SLOW: Duration = Duration::from_millis(320); pub const THEME: Duration = Duration::from_millis(280); +/// Travel of small entrances. +pub const NUDGE: Pixels = px(4.0); + const DAMPING: f32 = 0.75; const OMEGA: f32 = 6.91 / DAMPING; diff --git a/src/primitives/backdrop.rs b/src/primitives/backdrop.rs new file mode 100644 index 0000000..8b9039a --- /dev/null +++ b/src/primitives/backdrop.rs @@ -0,0 +1,83 @@ +use std::rc::Rc; + +use gpui::{ + Animation, AnimationExt, AnyElement, App, ElementId, InteractiveElement, IntoElement, + MouseButton, ParentElement, Point, RenderOnce, Styled, Window, anchored, deferred, div, + prelude::*, +}; +use smallvec::SmallVec; + +use crate::{motion, theme::ActiveTheme}; + +type Dismiss = Rc; + +/// Full-window scrim. Children sit centered above it. +#[derive(IntoElement)] +pub struct Backdrop { + id: ElementId, + on_dismiss: Option, + children: SmallVec<[AnyElement; 1]>, +} + +impl Backdrop { + pub fn new(id: impl Into) -> Self { + Self { + id: id.into(), + on_dismiss: None, + children: SmallVec::new(), + } + } + + /// Runs on a click outside the children. + pub fn on_dismiss(mut self, handler: impl Fn(&mut Window, &mut App) + 'static) -> Self { + self.on_dismiss = Some(Rc::new(handler)); + self + } +} + +impl ParentElement for Backdrop { + fn extend(&mut self, elements: impl IntoIterator) { + self.children.extend(elements); + } +} + +impl RenderOnce for Backdrop { + fn render(self, window: &mut Window, cx: &mut App) -> impl IntoElement { + let viewport = window.viewport_size(); + let fade = motion::duration(motion::BASE, cx); + let scrim = div() + .id(self.id.clone()) + .absolute() + .top_0() + .left_0() + .size_full() + .bg(cx.theme().colors.backdrop) + .occlude() + .when_some(self.on_dismiss, |scrim, dismiss| { + scrim.on_mouse_down(MouseButton::Left, move |_, window, cx| dismiss(window, cx)) + }) + .with_animation( + self.id, + Animation::new(fade).with_easing(motion::ease_out_cubic), + |scrim, t| scrim.opacity(t), + ); + + deferred( + anchored().position(Point::default()).child( + div() + .relative() + .w(viewport.width) + .h(viewport.height) + .flex() + .items_center() + .justify_center() + .child(scrim) + .children( + self.children + .into_iter() + .map(|child| div().relative().occlude().child(child)), + ), + ), + ) + } +} diff --git a/src/primitives/divider.rs b/src/primitives/divider.rs new file mode 100644 index 0000000..077786c --- /dev/null +++ b/src/primitives/divider.rs @@ -0,0 +1,58 @@ +use gpui::{App, IntoElement, ParentElement, RenderOnce, SharedString, Styled, Window, div}; + +use crate::theme::{ActiveTheme, TextSize}; + +/// Hairline rule, across or down. +#[derive(IntoElement)] +pub struct Divider { + vertical: bool, + label: Option, +} + +impl Divider { + pub fn horizontal() -> Self { + Self { + vertical: false, + label: None, + } + } + + pub fn vertical() -> Self { + Self { + vertical: true, + label: None, + } + } + + /// Text centered on a horizontal rule. + pub fn label(mut self, label: impl Into) -> Self { + self.label = Some(label.into()); + self + } +} + +impl RenderOnce for Divider { + fn render(self, _: &mut Window, cx: &mut App) -> impl IntoElement { + let theme = cx.theme(); + let line = || div().border_color(theme.colors.border); + if self.vertical { + return line().h_full().border_l_1(); + } + match self.label { + None => line().w_full().border_t_1(), + Some(label) => div() + .flex() + .items_center() + .gap_3() + .w_full() + .child(line().flex_1().border_t_1()) + .child( + div() + .text_size(theme.text_size(TextSize::Xs)) + .text_color(theme.colors.fg_subtle) + .child(label), + ) + .child(line().flex_1().border_t_1()), + } + } +} diff --git a/src/primitives/focus.rs b/src/primitives/focus.rs new file mode 100644 index 0000000..9a5bee9 --- /dev/null +++ b/src/primitives/focus.rs @@ -0,0 +1,96 @@ +use gpui::{ + AnyElement, App, Div, FocusHandle, InteractiveElement, IntoElement, ParentElement, RenderOnce, + StyleRefinement, Styled, Window, actions, div, +}; + +use crate::theme::ActiveTheme; + +actions!(ely, [FocusNext, FocusPrev]); + +/// Focus-colored border while focused. Give the element a 1px border. +pub trait FocusRing: InteractiveElement + Sized { + fn focus_ring(self, cx: &App) -> Self { + let ring = cx.theme().colors.focus; + self.focus(move |style| style.border_color(ring)) + } +} + +impl FocusRing for E {} + +/// Owns Tab and Shift-Tab for its subtree. `trap` keeps focus inside. +#[derive(IntoElement)] +pub struct FocusScope { + base: Div, + handle: FocusHandle, + trap: bool, +} + +impl FocusScope { + pub fn new(handle: &FocusHandle) -> Self { + Self { + base: div().track_focus(handle), + handle: handle.clone(), + trap: false, + } + } + + pub fn trap(mut self) -> Self { + self.trap = true; + self + } +} + +impl Styled for FocusScope { + fn style(&mut self) -> &mut StyleRefinement { + self.base.style() + } +} + +impl ParentElement for FocusScope { + fn extend(&mut self, elements: impl IntoIterator) { + self.base.extend(elements); + } +} + +impl RenderOnce for FocusScope { + fn render(self, _: &mut Window, _: &mut App) -> impl IntoElement { + let (next, prev) = (self.handle.clone(), self.handle); + let trap = self.trap; + self.base + .on_action(move |_: &FocusNext, window, cx| step(&next, trap, true, window, cx)) + .on_action(move |_: &FocusPrev, window, cx| step(&prev, trap, false, window, cx)) + } +} + +fn step(scope: &FocusHandle, trap: bool, forward: bool, window: &mut Window, cx: &mut App) { + let advance = |window: &mut Window| { + if forward { + window.focus_next() + } else { + window.focus_prev() + } + }; + if !trap { + advance(window); + return; + } + let origin = window.focused(cx); + let mut first = None; + loop { + advance(window); + let focused = window.focused(cx); + if scope.contains_focused(window, cx) && focused.as_ref() != Some(scope) { + return; + } + if focused.is_none() || focused == origin || (first.is_some() && focused == first) { + break; + } + if first.is_none() { + first = focused; + } + } + log::warn!("focus scope: trap holds no tab stop; focus stays"); + if let Some(origin) = origin { + window.focus(&origin); + } +} diff --git a/src/primitives/icon.rs b/src/primitives/icon.rs index f7a8b4f..5d1ff72 100644 --- a/src/primitives/icon.rs +++ b/src/primitives/icon.rs @@ -18,6 +18,13 @@ macro_rules! icons { $(IconName::$variant => concat!("icons/", $file, ".svg"),)* } } + + /// Lucide name, such as `chevron-down`. + pub fn name(self) -> &'static str { + match self { + $(IconName::$variant => $file,)* + } + } } }; } @@ -124,6 +131,7 @@ icons! { Hourglass => "hourglass", House => "house", Image => "image", + ImageOff => "image-off", Inbox => "inbox", Info => "info", Italic => "italic", diff --git a/src/primitives/image.rs b/src/primitives/image.rs new file mode 100644 index 0000000..9ec76a2 --- /dev/null +++ b/src/primitives/image.rs @@ -0,0 +1,105 @@ +use std::time::Duration; + +use gpui::{ + Animation, AnimationExt, App, Div, ElementId, ImageSource, InteractiveElement, IntoElement, + ObjectFit, ParentElement, RenderOnce, StyleRefinement, Styled, StyledImage, Window, div, img, + pulsating_between, +}; + +use crate::{ + primitives::{Icon, IconName}, + theme::{ActiveTheme, IconSize}, +}; + +const PULSE: Duration = Duration::from_millis(1600); + +/// Themed `img()`; a `Cover` crop keeps square corners. +#[derive(IntoElement)] +pub struct Image { + id: ElementId, + base: Div, + source: Option, + fit: ObjectFit, +} + +impl Image { + /// The id keeps gpui's loading state across frames. + pub fn new(id: impl Into, source: impl Into) -> Self { + Self { + id: id.into(), + base: div(), + source: Some(source.into()), + fit: ObjectFit::Cover, + } + } + + /// Nothing to load yet. + pub fn placeholder(id: impl Into) -> Self { + Self { + id: id.into(), + base: div(), + source: None, + fit: ObjectFit::Cover, + } + } + + pub fn fit(mut self, fit: ObjectFit) -> Self { + self.fit = fit; + self + } +} + +impl Styled for Image { + fn style(&mut self) -> &mut StyleRefinement { + self.base.style() + } +} + +impl RenderOnce for Image { + fn render(mut self, _: &mut Window, cx: &mut App) -> impl IntoElement { + let theme = cx.theme(); + let (sunken, subtle) = (theme.colors.sunken, theme.colors.fg_subtle); + let still = theme.reduced_motion; + let radii = self.base.style().corner_radii.clone(); + let pane = { + let radii = radii.clone(); + move || { + let mut pane = div().size_full().bg(sunken); + pane.style().corner_radii = radii.clone(); + pane + } + }; + let loading_pane = pane.clone(); + let mark = move |name| { + pane() + .flex() + .items_center() + .justify_center() + .child(Icon::new(name).size(IconSize::Lg).color(subtle)) + }; + let Some(source) = self.source else { + return self.base.overflow_hidden().child(mark(IconName::Image)); + }; + let mut picture = img(source) + .id(self.id) + .size_full() + .object_fit(self.fit) + .with_loading(move || { + if still { + return loading_pane().into_any_element(); + } + loading_pane() + .with_animation( + "image-loading", + Animation::new(PULSE) + .repeat() + .with_easing(pulsating_between(0.55, 1.0)), + |pane, t| pane.opacity(t), + ) + .into_any_element() + }) + .with_fallback(move || mark(IconName::ImageOff).into_any_element()); + picture.style().corner_radii = radii; + self.base.overflow_hidden().child(picture) + } +} diff --git a/src/primitives/measure.rs b/src/primitives/measure.rs new file mode 100644 index 0000000..f1cc61f --- /dev/null +++ b/src/primitives/measure.rs @@ -0,0 +1,120 @@ +use std::rc::Rc; + +use gpui::{ + AnyElement, App, Bounds, Div, ElementId, IntoElement, ParentElement, Pixels, RenderOnce, + StyleRefinement, Styled, Window, canvas, div, +}; + +type BoundsHandler = Rc, &mut Window, &mut App)>; +type VisibilityHandler = Rc; + +/// A div that reports its bounds whenever they change. +#[derive(IntoElement)] +pub struct Measure { + id: ElementId, + base: Div, + on_measure: BoundsHandler, +} + +impl Measure { + pub fn new( + id: impl Into, + on_measure: impl Fn(Bounds, &mut Window, &mut App) + 'static, + ) -> Self { + Self { + id: id.into(), + base: div(), + on_measure: Rc::new(on_measure), + } + } +} + +impl Styled for Measure { + fn style(&mut self) -> &mut StyleRefinement { + self.base.style() + } +} + +impl ParentElement for Measure { + fn extend(&mut self, elements: impl IntoIterator) { + self.base.extend(elements); + } +} + +impl RenderOnce for Measure { + fn render(self, window: &mut Window, cx: &mut App) -> impl IntoElement { + let last = window.use_keyed_state(self.id, cx, |_, _| None::>); + let on_measure = self.on_measure; + self.base.relative().child( + canvas( + move |bounds, window, cx| { + if *last.read(cx) != Some(bounds) { + last.update(cx, |seen, _| *seen = Some(bounds)); + on_measure(bounds, window, cx); + } + }, + |_, _, _, _| {}, + ) + .absolute() + .top_0() + .left_0() + .size_full(), + ) + } +} + +/// A div that reports when it enters or leaves the visible area. +#[derive(IntoElement)] +pub struct IntersectionObserver { + id: ElementId, + base: Div, + on_change: VisibilityHandler, +} + +impl IntersectionObserver { + pub fn new( + id: impl Into, + on_change: impl Fn(bool, &mut Window, &mut App) + 'static, + ) -> Self { + Self { + id: id.into(), + base: div(), + on_change: Rc::new(on_change), + } + } +} + +impl Styled for IntersectionObserver { + fn style(&mut self) -> &mut StyleRefinement { + self.base.style() + } +} + +impl ParentElement for IntersectionObserver { + fn extend(&mut self, elements: impl IntoIterator) { + self.base.extend(elements); + } +} + +impl RenderOnce for IntersectionObserver { + fn render(self, window: &mut Window, cx: &mut App) -> impl IntoElement { + let last = window.use_keyed_state(self.id, cx, |_, _| None::); + let on_change = self.on_change; + self.base.relative().child( + canvas( + move |bounds, window, cx| { + let visible = window.content_mask().bounds.intersects(&bounds); + if *last.read(cx) != Some(visible) { + last.update(cx, |seen, _| *seen = Some(visible)); + on_change(visible, window, cx); + } + }, + |_, _, _, _| {}, + ) + .absolute() + .top_0() + .left_0() + .size_full(), + ) + } +} diff --git a/src/primitives/mod.rs b/src/primitives/mod.rs index 66e070c..893059e 100644 --- a/src/primitives/mod.rs +++ b/src/primitives/mod.rs @@ -1,3 +1,17 @@ +mod backdrop; +mod divider; +mod focus; mod icon; +mod image; +mod measure; +mod pressable; +mod tooltip; +pub use backdrop::Backdrop; +pub use divider::Divider; +pub use focus::{FocusNext, FocusPrev, FocusRing, FocusScope}; pub use icon::{Icon, IconName}; +pub use image::Image; +pub use measure::{IntersectionObserver, Measure}; +pub use pressable::Pressable; +pub use tooltip::{Tooltip, TooltipTrigger}; diff --git a/src/primitives/pressable.rs b/src/primitives/pressable.rs new file mode 100644 index 0000000..ccd043f --- /dev/null +++ b/src/primitives/pressable.rs @@ -0,0 +1,111 @@ +use std::{rc::Rc, time::Duration}; + +use gpui::{ + AnyElement, App, ElementId, InteractiveElement, IntoElement, MouseButton, ParentElement, + RenderOnce, Task, Window, div, +}; + +type Handler = Rc; +type Content = Box AnyElement>; + +const LONG_PRESS: Duration = Duration::from_millis(500); + +#[derive(Default)] +struct PressState { + pressed: bool, + long_fired: bool, + _timer: Option>, +} + +/// Pressed state and long press for any content. +#[derive(IntoElement)] +pub struct Pressable { + id: ElementId, + content: Content, + on_press: Option, + on_long_press: Option, +} + +impl Pressable { + /// `content` receives whether the pointer is down. + pub fn new( + id: impl Into, + content: impl Fn(bool, &mut Window, &mut App) -> AnyElement + 'static, + ) -> Self { + Self { + id: id.into(), + content: Box::new(content), + on_press: None, + on_long_press: None, + } + } + + pub fn on_press(mut self, handler: impl Fn(&mut Window, &mut App) + 'static) -> Self { + self.on_press = Some(Rc::new(handler)); + self + } + + pub fn on_long_press(mut self, handler: impl Fn(&mut Window, &mut App) + 'static) -> Self { + self.on_long_press = Some(Rc::new(handler)); + self + } +} + +impl RenderOnce for Pressable { + fn render(self, window: &mut Window, cx: &mut App) -> impl IntoElement { + let state = window.use_keyed_state(self.id.clone(), cx, |_, _| PressState::default()); + let pressed = state.read(cx).pressed; + let content = (self.content)(pressed, window, cx); + let (down, up, out) = (state.clone(), state.clone(), state); + let on_long_press = self.on_long_press; + let on_press = self.on_press; + + div() + .id(self.id) + .child(content) + .on_mouse_down(MouseButton::Left, move |_, window, cx| { + let timer = on_long_press.clone().map(|handler| { + let weak = down.downgrade(); + window.spawn(cx, async move |cx| { + cx.background_executor().timer(LONG_PRESS).await; + let fired = cx.update(|window, cx| { + weak.update(cx, |press, cx| { + press.long_fired = press.pressed; + cx.notify(); + press.long_fired + }) + .map(|fire| fire.then(|| handler(window, cx))) + }); + if let Err(error) = fired.and_then(|inner| inner) { + log::error!("pressable: long press lost its window: {error:#}"); + } + }) + }); + down.update(cx, |press, cx| { + *press = PressState { + pressed: true, + long_fired: false, + _timer: timer, + }; + cx.notify(); + }); + }) + .on_mouse_up(MouseButton::Left, move |_, window, cx| { + let released = up.update(cx, |press, cx| { + let short = press.pressed && !press.long_fired; + *press = PressState::default(); + cx.notify(); + short + }); + if let Some(handler) = on_press.as_ref().filter(|_| released) { + handler(window, cx); + } + }) + .on_mouse_up_out(MouseButton::Left, move |_, _, cx| { + out.update(cx, |press, cx| { + *press = PressState::default(); + cx.notify(); + }) + }) + } +} diff --git a/src/primitives/tooltip.rs b/src/primitives/tooltip.rs new file mode 100644 index 0000000..d51c322 --- /dev/null +++ b/src/primitives/tooltip.rs @@ -0,0 +1,192 @@ +use std::{rc::Rc, time::Duration}; + +use gpui::{ + Animation, AnimationExt, AnyElement, AnyView, App, AppContext, Context, Div, ElementId, + InteractiveElement, IntoElement, ParentElement, Pixels, Point, Render, RenderOnce, + SharedString, StatefulInteractiveElement, Styled, Task, Window, anchored, deferred, div, point, + prelude::*, +}; + +use crate::{ + motion, + theme::{ActiveTheme, Elevation, Radius, TextSize}, +}; + +type Content = Rc AnyElement>; + +const DELAY: Duration = Duration::from_millis(400); + +fn surface(content: AnyElement, cx: &App) -> impl IntoElement + use<> { + let theme = cx.theme(); + let rise = motion::NUDGE; + let body = div() + .max_w(theme.tooltip_max_width()) + .px_2() + .py_1() + .rounded(theme.radius(Radius::Md)) + .bg(theme.colors.tooltip_bg) + .text_color(theme.colors.tooltip_fg) + .text_size(theme.text_size(TextSize::Sm)) + .shadow(theme.elevation(Elevation::Floating)) + .child(content); + body.with_animation( + "tooltip-in", + Animation::new(motion::duration(motion::FAST, cx)).with_easing(motion::ease_out_cubic), + move |body, t| body.opacity(t).mt(rise * (1.0 - t)), + ) +} + +/// Tooltip body for gpui's `.tooltip()`. +pub struct Tooltip { + content: Content, +} + +impl Tooltip { + pub fn text(title: impl Into) -> impl Fn(&mut Window, &mut App) -> AnyView { + let title = title.into(); + Self::rich(move |_, _| title.clone().into_any_element()) + } + + /// Title plus a quiet trailing hint, such as a shortcut. + pub fn with_meta( + title: impl Into, + meta: impl Into, + ) -> impl Fn(&mut Window, &mut App) -> AnyView { + let (title, meta) = (title.into(), meta.into()); + Self::rich(move |_, cx| meta_row(title.clone(), meta.clone(), cx).into_any_element()) + } + + pub fn rich( + content: impl Fn(&mut Window, &mut App) -> AnyElement + 'static, + ) -> impl Fn(&mut Window, &mut App) -> AnyView { + let content: Content = Rc::new(content); + move |_, cx| { + let content = content.clone(); + cx.new(|_| Tooltip { content }).into() + } + } +} + +impl Render for Tooltip { + fn render(&mut self, window: &mut Window, cx: &mut Context) -> impl IntoElement { + let content = (self.content)(window, cx); + div() + .pt(cx.theme().cursor_offset()) + .child(surface(content, cx)) + } +} + +fn meta_row(title: SharedString, meta: SharedString, cx: &App) -> Div { + div().flex().items_center().gap_2().child(title).child( + div() + .text_color(cx.theme().colors.tooltip_fg.opacity(0.6)) + .child(meta), + ) +} + +#[derive(Default)] +struct TriggerState { + visible: bool, + mouse: Point, + _pending: Option>, +} + +/// Tooltip with its own delay, and optional cursor tracking. +#[derive(IntoElement)] +pub struct TooltipTrigger { + id: ElementId, + child: AnyElement, + content: Content, + delay: Duration, + follow: bool, +} + +impl TooltipTrigger { + pub fn new( + id: impl Into, + child: impl IntoElement, + content: impl Fn(&mut Window, &mut App) -> AnyElement + 'static, + ) -> Self { + Self { + id: id.into(), + child: child.into_any_element(), + content: Rc::new(content), + delay: DELAY, + follow: false, + } + } + + pub fn delay(mut self, delay: Duration) -> Self { + self.delay = delay; + self + } + + pub fn follow_mouse(mut self) -> Self { + self.follow = true; + self + } +} + +impl RenderOnce for TooltipTrigger { + fn render(self, window: &mut Window, cx: &mut App) -> impl IntoElement { + let state = window.use_keyed_state(self.id.clone(), cx, |_, _| TriggerState::default()); + let (visible, mouse) = { + let read = state.read(cx); + (read.visible, read.mouse) + }; + let (hover, track, press) = (state.clone(), state.clone(), state); + let (delay, follow) = (self.delay, self.follow); + let content = self.content; + + div() + .id(self.id) + .child(self.child) + .on_hover(move |hovered, window, cx| { + if !*hovered { + hover.update(cx, hide); + return; + } + let weak = hover.downgrade(); + let task = window.spawn(cx, async move |cx| { + cx.background_executor().timer(delay).await; + let shown = cx.update(|window, cx| { + weak.update(cx, |trigger, cx| { + trigger.visible = true; + trigger.mouse = window.mouse_position(); + trigger._pending = None; + cx.notify(); + }) + }); + if let Err(error) = shown.and_then(|inner| inner) { + log::error!("tooltip: trigger vanished before showing: {error:#}"); + } + }); + hover.update(cx, |trigger, _| trigger._pending = Some(task)); + }) + .on_mouse_move(move |event, _, cx| { + track.update(cx, |trigger, cx| { + trigger.mouse = event.position; + if follow && trigger.visible { + cx.notify(); + } + }) + }) + .on_any_mouse_down(move |_, _, cx| press.update(cx, hide)) + .when(visible, |trigger| { + let body = content(window, cx); + let below = cx.theme().cursor_offset().to_pixels(window.rem_size()); + trigger.child(deferred( + anchored() + .position(mouse + point(Pixels::ZERO, below)) + .snap_to_window() + .child(surface(body, cx)), + )) + }) + } +} + +fn hide(trigger: &mut TriggerState, cx: &mut Context) { + trigger.visible = false; + trigger._pending = None; + cx.notify(); +} diff --git a/src/theme/palette.rs b/src/theme/palette.rs index 425b45b..40458d6 100644 --- a/src/theme/palette.rs +++ b/src/theme/palette.rs @@ -96,6 +96,8 @@ mixable!( info_subtle: Hsla, backdrop: Hsla, shadow: Hsla, + tooltip_bg: Hsla, + tooltip_fg: Hsla, chart: [Hsla; 8], ansi: [Hsla; 16], syntax: Syntax, @@ -141,6 +143,8 @@ impl Palette { info_subtle: c(0xebf4ff), backdrop: rgba(0x18161352).into(), shadow: c(0x181613), + tooltip_bg: c(0x181613), + tooltip_fg: c(0xfcfaf7), chart: c8([ 0x5182c1, 0x009589, 0xaa732b, 0xb8636b, 0x8572bb, 0x539156, 0xb66946, 0x138db1, ]), @@ -203,6 +207,8 @@ impl Palette { info_subtle: c(0x19273a), backdrop: rgba(0x00000080).into(), shadow: c(0x000000), + tooltip_bg: c(0x373533), + tooltip_fg: c(0xf3f1f0), chart: c8([ 0x79a7e2, 0x4eb9ad, 0xcd995c, 0xdc8a90, 0xa998dd, 0x7cb57d, 0xd9906f, 0x56b2d4, ]), diff --git a/src/theme/tokens.rs b/src/theme/tokens.rs index 58363ce..a0db1d7 100644 --- a/src/theme/tokens.rs +++ b/src/theme/tokens.rs @@ -101,6 +101,15 @@ impl Theme { px_to_rems(base * self.font_scale) } + /// Gap between the pointer and a tooltip. + pub fn cursor_offset(&self) -> Rems { + px_to_rems(18.0) + } + + pub fn tooltip_max_width(&self) -> Rems { + px_to_rems(256.0) + } + pub fn text_size(&self, size: TextSize) -> Rems { let base = match size { TextSize::Xs => 11.0, @@ -140,15 +149,6 @@ impl Theme { .map(|&(y, blur, alpha)| shadow(self.colors.shadow.alpha(alpha), y, blur)) .collect() } - - pub fn focus_ring(&self) -> Vec { - vec![BoxShadow { - color: self.colors.focus.alpha(0.45), - offset: point(px(0.0), px(0.0)), - blur_radius: px(0.0), - spread_radius: px(2.0), - }] - } } fn shadow(color: Hsla, y: f32, blur: f32) -> BoxShadow { diff --git a/tasks/ch01-10.md b/tasks/ch01-10.md index e21d042..7d372d5 100644 --- a/tasks/ch01-10.md +++ b/tasks/ch01-10.md @@ -2,33 +2,33 @@ ## T01 Primitives — `src/primitives` -- [ ] Box / View — native `div()` -- [ ] Text — native: strings and `StyledText` are elements +- [x] Box / View — native `div()` +- [x] Text — native: strings and `StyledText` are elements - [x] Icon (T00) - [x] IconSet / IconRegistry (T00) -- [ ] Svg — native `svg()` -- [ ] Image — loading, failed, placeholder over `img()` -- [ ] Canvas — native `canvas()` -- [ ] Divider / Separator -- [ ] Spacer — native `div().flex_1()` -- [ ] Portal — native `deferred(anchored())` -- [ ] Overlay / Backdrop -- [ ] Slot — native `impl IntoElement` params and `ParentElement` -- [ ] Show / When — native `.when()` / `.when_some()` -- [ ] For / Each — native `.children(iter)` -- [ ] Fragment — native: children take iterators -- [ ] VisuallyHidden — blocked: gpui 0.2.2 has no accessibility tree -- [ ] FocusRing -- [ ] FocusScope / FocusTrap -- [ ] ClickOutside — native `on_mouse_down_out` -- [ ] HoverArea — native `on_hover` / `.hover()` -- [ ] Pressable — press state, long press -- [ ] KeyboardHandler — native `on_key_down` / `on_action` -- [ ] Measure -- [ ] ResizeObserver → `primitives::Measure` -- [ ] IntersectionObserver -- [ ] Clipboard — native `write_to_clipboard` / `read_from_clipboard` -- [ ] Tooltip Trigger — owns `Tooltip`: delay, follow mouse, rich content +- [x] Svg — native `svg()` +- [x] Image — loading, failed, placeholder over `img()` +- [x] Canvas — native `canvas()` +- [x] Divider / Separator +- [x] Spacer — native `div().flex_1()` +- [x] Portal — native `deferred(anchored())` +- [x] Overlay / Backdrop +- [x] Slot — native `impl IntoElement` params and `ParentElement` +- [x] Show / When — native `.when()` / `.when_some()` +- [x] For / Each — native `.children(iter)` +- [x] Fragment — native: children take iterators +- [x] VisuallyHidden — blocked: gpui 0.2.2 has no accessibility tree +- [x] FocusRing +- [x] FocusScope / FocusTrap +- [x] ClickOutside — native `on_mouse_down_out` +- [x] HoverArea — native `on_hover` / `.hover()` +- [x] Pressable — press state, long press +- [x] KeyboardHandler — native `on_key_down` / `on_action` +- [x] Measure +- [x] ResizeObserver → `primitives::Measure` +- [x] IntersectionObserver +- [x] Clipboard — native `write_to_clipboard` / `read_from_clipboard` +- [x] Tooltip Trigger — owns `Tooltip`: delay, follow mouse, rich content ## T02 Typography — `src/typography` diff --git a/tasks/ch31-43.md b/tasks/ch31-43.md index b983eed..408d7c2 100644 --- a/tasks/ch31-43.md +++ b/tasks/ch31-43.md @@ -289,4 +289,4 @@ - [ ] DesignTokenViewer - [ ] IconBrowser - [ ] A11yChecker — contrast audit -- [ ] ScreenshotTest Harness — self-capture +- [ ] ScreenshotTest Harness — self-capture; scripted input since T01