Files
Ely-GPUI-Components/examples/gallery/pages/misc/mod.rs
T
ZacharyZhang-NY 5e7fc24db9 Misc · Numbers: a result goes on whole; long readings wrap
A calculator result stays in the sum as `a`, handed to evaluate with
its whole value, so 1 ÷ 3 = × 3 = gives 1; sign turns it and delete
takes it. Equals waits on a dangling operator. The converter's reading
wraps in its box rather than ending in an ellipsis, and tests hold
Control, the = key, a point after a result and the six digits.
2026-09-28 01:06:32 -04:00

109 lines
3.5 KiB
Rust

use ely_gpui_component::misc::{Calculator, Clock, Stopwatch, UnitConverter, WorldClock};
use gpui::{AnyElement, App, IntoElement, ParentElement, Styled, Window, div, px};
use jiff::tz::TimeZone;
use super::Page;
use crate::probe::probe;
use crate::script::Step;
use crate::ui::{section, specimen, specimens};
pub const PAGE: Page = Page {
number: 42,
slug: "misc",
title: "Misc",
summary: "Small tools that stand alone: clocks, a stopwatch, a calculator, a unit converter.",
render,
script: &[
Step::DownAt("stopwatch-start", 30.0, 62.0),
Step::UpAt("stopwatch-start", 30.0, 62.0),
Step::Wait(1_600),
Step::DownAt("stopwatch-start", 30.0, 62.0),
Step::UpAt("stopwatch-start", 30.0, 62.0),
Step::Wait(300),
Step::Shot("stopwatch"),
Step::DownAt("calculator", 24.0, 24.0),
Step::UpAt("calculator", 24.0, 24.0),
Step::Type("1234+5*6"),
Step::Shot("calculator-typed"),
Step::Key("enter"),
Step::Shot("calculator-result"),
Step::DownAt("converter", 24.0, 60.0),
Step::UpAt("converter", 24.0, 60.0),
Step::Key("cmd-a"),
Step::Type("1000000000000000"),
Step::Shot("converter-long"),
],
};
fn zone(name: &str) -> TimeZone {
TimeZone::get(name).unwrap_or_else(|error| panic!("the zone {name}: {error}"))
}
fn render(_: &mut Window, cx: &mut App) -> AnyElement {
div()
.child(clocks(cx))
.child(stopwatch(cx))
.child(calculator(cx))
.child(converter(cx))
.into_any_element()
}
fn clocks(cx: &App) -> impl IntoElement + use<> {
section(
"Clock / WorldClock",
"The time in a zone, a face over its digits, ticking each second. A world clock lays places in rows: how each one's day and hour stand against home.",
cx,
)
.child(
specimens()
.child(specimen("clock", Clock::new("clock").label("Here"), cx))
.child(specimen(
"world clock",
div().w(px(320.0)).child(WorldClock::new(
"world-clock",
[
("San Francisco", zone("America/Los_Angeles")),
("New York", zone("America/New_York")),
("London", zone("Europe/London")),
("Mumbai", zone("Asia/Kolkata")),
("Tokyo", zone("Asia/Tokyo")),
],
)),
cx,
)),
)
}
fn stopwatch(cx: &App) -> impl IntoElement + use<> {
section(
"Stopwatch",
"Time that runs while started and holds while paused, in tenths. Lap marks the time so far; once paused, it reads Reset and clears it.",
cx,
)
.child(probe("stopwatch-start", div().w(px(320.0)).child(Stopwatch::new("stopwatch"))))
}
fn calculator(cx: &App) -> impl IntoElement + use<> {
section(
"Calculator",
"Digits, the four operations, sign, delete and clear, worked in precedence; keys type too, and Enter gives the result.",
cx,
)
.child(probe(
"calculator",
div().w(px(280.0)).child(Calculator::new("calculator")),
))
}
fn converter(cx: &App) -> impl IntoElement + use<> {
section(
"UnitConverter",
"An amount read in another unit: length, area, volume, mass, temperature, speed and data, with a swap.",
cx,
)
.child(probe(
"converter",
div().w(px(280.0)).child(UnitConverter::new("unit-converter")),
))
}