Every page and scripted state was shot with gpui 0.2.2 and with the port, light and dark, full width and at 280px, judged pair by pair by agents with skeptics, and every page's log diffed. What differed is fixed, each with a test that fails without it where the test platform can show it: - The gallery's harness takes posted mouse moves (gpui_macos listens to a tracking area), posts each drag move twice (it no longer replays a held drag), and waits three frames before each shot. - Rolling digits: a block column, so taffy 0.13 lends the cell no baseline, and a line of whole device pixels, since gpui snaps each length on its own. DescriptionList's row aligns ends. - Margins that taffy 0.13 collapses through a plain block: the drawer's pull and snap, the stagger and transition rise, the dialog and palette rises, the fullscreen dialog's slide. - An Input keeps room to type in a squeezed row; the field rows drop w_full, whose reason was taffy 0.9's. AGENTS.md's rules that named gpui 0.2.2 or taffy 0.9 were re-tested against both sources and rewritten, and new ones say what the port changed. TASKS.md's tags follow: what the new gpui makes possible is prove. Captions, doc comments and README say what holds now. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
15 KiB
15 KiB
Chapters 11–20
T11a Loading · Spinners & skeletons — src/motion
- Spinner — ring, dots, bars, pulse, orbit, wave; also the Button loading state (T05 LoadingButton) and T07a LoadMore →
motion::Spinner,buttons::Button::loading,navigation::LoadMore - DotsLoader →
motion::Spinner - BarsLoader →
motion::Spinner - PulseLoader →
motion::Spinner - RingLoader →
motion::Spinner - OrbitLoader →
motion::Spinner - WaveLoader →
motion::Spinner - Skeleton / SkeletonText / SkeletonAvatar / SkeletonCard / SkeletonTable →
motion::Skeletonand kin - Shimmer →
motion::Shimmer
T11b Loading · Progress & states
- ProgressBar — determinate, indeterminate, segmented, buffered — also T06e UploadList →
motion::ProgressBar,forms::UploadList - ProgressCircle / ProgressRing →
motion::ProgressRing - StepProgress →
navigation::Steps - LoadingOverlay →
motion::LoadingOverlay - LoadingScreen →
shell::SplashScreen, which renders in place too - InlineLoader →
motion::Spinner - LazyLoad →
motion::LazyLoad - Suspense / AsyncView →
feedback::Suspense,feedback::AsyncView; a failure shows the error view, so they live with it - RefreshIndicator →
motion::RefreshIndicator - TypingIndicator →
motion::TypingIndicator
T11c Motion · Presence & order — src/motion
- Transition — fade, slide, scale, collapse →
motion::Transitionfades, rises and slides; collapse islayout::Collapsible; scale is blocked: gpui transforms only svgs - AnimatePresence →
motion::AnimatePresence - Motion → gpui's
with_animation, timed bymotion::durationand eased by the curves inmotion - Spring →
motion::spring - Stagger →
motion::Stagger - Reorder →
motion::Reorder - Flip →
motion::Flip - CountUp →
typography::AnimatedNumber, counting up
T11d Motion · Effects
- Marquee →
motion::Marquee - Ripple →
motion::Ripple - Confetti →
motion::Confetti - Glow / Pulse →
motion::Glow,motion::Pulse - Blink / Flash →
motion::Blink,motion::Flash - Shake →
motion::Shake - ParticleBackground →
motion::ParticleBackground - AnimatedGradient — slow tonal drift →
motion::AnimatedGradient - Lottie Player — blocked: gpui paints paths without the clip masks, mattes, blend modes and radial gradients Lottie files lean on, so frames would come out wrong
T12a Data Display · People & numbers — src/data_display
- Badge / CountBadge / DotBadge →
data_display::Badge,CountBadge,DotBadge; the activity bar's count is a CountBadge - Tag / Chip →
data_display::Tag; the chips in TagInput and MultiSelect are Tags - Avatar — image, initials, icon, presence — also T06e AvatarUpload →
data_display::Avatar,forms::AvatarUpload - AvatarGroup →
data_display::AvatarGroup - UserChip →
data_display::UserChip - Statistic / KPI Card →
data_display::Statistic,data_display::KpiCard - Metric →
data_display::Statistic, at a smaller size - TrendIndicator →
data_display::TrendIndicator
T12b Data Display · Records
- DescriptionList →
data_display::DescriptionList - PropertyGrid →
data_display::PropertyGrid,PropertyGroup - KeyValueList →
data_display::DescriptionList - InfoRow →
data_display::DescriptionList - Timeline / TimelineItem →
data_display::Timeline,TimelineItem - ActivityFeed →
data_display::ActivityFeed,Activity - Changelog →
data_display::Changelog,Release,Change
T12c Data Display · Media
- Carousel →
data_display::Carousel - Gallery →
data_display::Gallery, openingoverlays::Lightbox - Accordion list →
layout::Accordion - Card Grid →
layout::SimpleGrid - BeforeAfter →
data_display::BeforeAfter - Watermark →
data_display::Watermark; its rows run level, since gpui draws text upright
T12d Data Display · Codes & measures
- QRCode →
data_display::QrCode - Barcode →
data_display::Barcode: Code 128 and EAN-13 - ColorSwatch display →
forms::ColorSwatch - Meter →
data_display::Meter - Gauge →
data_display::Gauge - UsageBar →
data_display::UsageBar - Rating display →
data_display::Stars, read only with parts of a star;forms::Ratingsets a score - Comparison →
data_display::Comparison
T13a Lists & Trees · Lists — src/lists
- List / ListItem →
lists::List,ListItem - VirtualList →
lists::VirtualList, on gpui'slist(); rows as tall as they need - InfiniteList →
lists::InfiniteList - SortableList →
lists::SortableList; drags throughmotion::Reorder, Alt with arrows moves - SelectableList — single, multi, shift range →
lists::SelectableList - GroupedList →
lists::GroupedList, headers fromlayout::StickyHeader - SectionList →
lists::GroupedList - ReorderableList →
lists::SortableList - SwipeableListItem →
lists::SwipeableListItem,SwipeAction; proved with real trackpad phases (Step::Swipe)
T13b Lists & Trees · Trees
- Tree / TreeView →
lists::Tree,TreeNode; also T06b TreeSelect →lists::TreeSelect - VirtualTree →
lists::Tree, whose rows draw in auniform_list - CheckboxTree →
lists::Treewithchecked - Outline →
lists::Outline - NestedList →
lists::Outline
T13c Lists & Trees · Files
- FileTree →
lists::FileTree,GitStatus; built onlists::Tree - DirectoryListing →
lists::DirectoryListing,DirEntry; rows throughlists::SelectableList - Menu List →
menus::Menu - Transfer List →
forms::TransferList
T14a Tables · Core — src/tables
- Table →
tables::Table - DataTable — sort, filter, page, select →
tables::DataTable - VirtualTable →
tables::DataTable,virtualized - CellRenderer →
tables::Cell: text, number, tag, progress, sparkline, person, link - RowSelection →
tables::DataTable,selected - TableDensity →
tables::DataTable,density - AggregationFooter →
tables::Column,aggregate - ConditionalFormatting →
tables::Column,scale - HeatmapTable →
tables::HeatmapTable - ComparisonTable →
data_display::Comparison
T14b Tables · Columns & rows
- ColumnResizer →
tables::DataTable: a header's edge drags - ColumnReorder →
tables::DataTable: a header drags onto another - ColumnVisibility →
tables::DataTable,hidden; the toolbar's Columns menu - ColumnPinning →
tables::Column,pinned - RowExpansion →
tables::DataTable,detail - RowGrouping →
tables::DataTable,group_by - InlineRowEdit →
tables::Column,editable;DataTable::on_edit - TableToolbar →
tables::TableToolbar;tables::to_csvfor export - FilterBuilder →
tables::FilterBuilder,FilterRule - SortBuilder →
tables::SortBuilder,SortKey
T14c Tables · Grids
- DataGrid →
tables::DataGrid - Spreadsheet — formula subset, merge, freeze, fill handle →
tables::Spreadsheet; SUM, AVERAGE, MIN, MAX, COUNT over ranges - TreeTable →
tables::TreeTable,TreeRow - PivotTable →
tables::PivotTable
T15a Charts · Cartesian — src/charts
- LineChart
- AreaChart / StackedArea →
charts::AreaChart::stacked - BarChart
- ScatterChart
- BubbleChart →
charts::ScatterChartwithPoints::sizes - Sparkline / SparkBar / SparkArea →
data_display::Sparkline, landed with T14a for table cells - RealtimeChart
- ChartLegend
- ChartTooltip
- ChartCrosshair → the hover of
LineChart,AreaChartandBarChart - ChartAxis / ChartGrid → the axes every cartesian chart draws
- ChartZoom / Brush →
LineChart::zoom - ChartAnnotation →
ruleandnote - ChartExport — SVG and CSV →
svgandcsvon each cartesian chart
T15b Charts · Parts and spreads
- PieChart / DonutChart →
charts::PieChart::donut - RadarChart
- HeatmapChart
- CalendarHeatmap
- Treemap
- Sunburst
- WaterfallChart
- BoxPlot
- Histogram
- ViolinPlot
T15c Charts · Flows and relations
- SankeyChart
- FunnelChart
- GanttChart
- NetworkGraph / ForceGraph →
charts::NetworkGraph - ChordDiagram
- ParallelCoordinates
- Bullet Chart →
charts::BulletChart - ProgressChart
T16a Finance · Market charts — src/finance
- CandlestickChart
- OHLCChart →
finance::CandlestickChartwithChartKind::Bars - HeikinAshiChart →
finance::CandlestickChartwithChartKind::HeikinAshi - LineQuoteChart →
finance::CandlestickChartwithChartKind::LineorChartKind::Area - VolumeChart →
CandlestickChart::volume - DepthChart
- MarketProfile / VolumeProfile →
CandlestickChart::profile - RenkoChart / PointAndFigure →
RenkoChart,PointFigureChart - MultiChartLayout
- ChartSync
- TimeRangeSelector
- IntervalSelector
- ChartTypeSwitcher
T16b Finance · Technical analysis
- IndicatorOverlay — MA, EMA, BOLL, VWAP →
CandlestickChart::overlaywithOverlay - IndicatorPane — MACD, RSI, KDJ, OBV →
CandlestickChart::studywithStudy - IndicatorSelector
- DrawingTools →
CandlestickChart::toolanddrawings: trend, level, box, Fibonacci retracement - DrawingToolbar
- CompareSymbol →
CandlestickChart::compare - PriceAlertLine →
CandlestickChart::alert
T16c Finance · Quotes & book
- Ticker / TickerTape →
TickerTape - QuoteCard
- PriceText
- PriceChangeBadge
- OrderBook
- Level2 Quotes →
Level2Quotes - TimeAndSales / TradeTape →
TimeAndSales - MarketDepthLadder / DOM →
DomLadder - SpreadIndicator
- BidAskBar
T16d Finance · Trading
- OrderEntry / TradePanel →
OrderEntry - QuickTradeButtons
- PositionTable
- OrderTable
- TradeHistoryTable
- PnLDisplay
- LeverageSlider
- MarginIndicator
- RiskMeter
- OrderConfirmDialog
- OptionChain
- GreeksTable
- PayoffDiagram
T16e Finance · Markets & assets
- Watchlist
- SymbolSearch
- SymbolBadge
- MarketHeatmap
- SectorTreemap →
finance::MarketHeatmap, orcharts::Treemapfor plain weights - Screener / FilterPanel →
Screener, its rules fromtables::FilterBuilder - MarketOverview
- IndexCard →
finance::QuoteCard, in a row byMarketOverview::index - MarketStatus
- TradingSessionClock
- EconomicCalendar
- EarningsCalendar
- NewsFeed
- SentimentGauge →
data_display::Gauge - PortfolioSummary
- AssetAllocationChart →
charts::PieChartwithdonut - PerformanceChart — equity curve, drawdown
- DividendTable
- FinancialStatementTable
- CurrencyConverter
- CryptoWalletCard
- TransactionList
- Candle Countdown →
feedback::Countdown
T17a Editor · Core — src/editor
- CodeEditor — highlight, multi-cursor, selection, undo, redo
- EditorGutter →
editor::CodeEditor, its gutter: breakpoints, problems, numbers, folds, git marks - LineNumbers — absolute, relative →
CodeEditor::line_numberswithLineNumbers - FoldingControl →
CodeEditor, gutter folds - Minimap →
CodeEditor::minimap - Ruler / IndentGuide →
CodeEditor::rulers; guides on unlesshide_indent_guides - BracketMatcher / RainbowBrackets →
CodeEditor::rainbow_brackets; the matched pair always marked - WhitespaceRenderer →
CodeEditor::show_whitespace - CursorRenderer — block, line, underline, blink →
CodeEditor::cursor_shapewithCursorShape - SelectionHighlight →
CodeEditor, the word at the cursor marked while focused - MultiCursor →
CodeEditor: Cmd-D, Cmd-Alt-Up and Down, Alt-click - VimModeIndicator
- StickyScroll →
CodeEditor::sticky_scroll - Breadcrumb →
navigation::Breadcrumb - InlayHints →
CodeEditor::set_inlay_hints - CodeLens →
CodeEditor::set_code_lenses - InlineDecoration →
CodeEditor::set_diagnosticsandset_backgrounds - GhostText →
CodeEditor::set_ghost_text - InlineChat →
CodeEditor::set_chat - InlineDiff →
CodeEditor::set_diff - ReadOnlyBanner
T17b Editor · Intelligence
- CompletionMenu
- SignatureHelp
- HoverInfo
- QuickFix / CodeActionMenu →
editor::CodeActionMenu - RenameInput
- PeekView →
overlays::Peek - ReferencesPanel
- SymbolOutline
- GoToSymbol
- CallHierarchy / TypeHierarchy →
editor::CallHierarchy,typesfor supertypes and subtypes
T17c Editor · Search
- FindWidget
- ReplaceWidget →
editor::FindWidget::replace - SearchPanel
- SearchResultItem
- SearchFilters
T17d Editor · Panels
- ProblemsPanel / DiagnosticsList →
editor::ProblemsPanel - OutputPanel
- DebugConsole
- ExtensionsPanel / PluginList →
editor::ExtensionsPanel - SettingsEditor — UI and JSON
- KeybindingsEditor
- ThemePreview
- WelcomePage
- RecentProjects
- ProjectSwitcher
- TaskRunner / RunConfiguration →
editor::TaskRunner, a task open to its configuration
T17e Editor · Status items
- CursorPosition
- LanguageMode
- Encoding
- LineEnding
- IndentSettings
- BranchIndicator
- LspStatus
- NotificationBell
T18 Terminal — src/terminal
- Terminal — proven:
alacritty_terminal0.26 grid on a pseudo-terminal →terminal::Terminal::spawn, andTerminal::replayfor recorded output - TerminalTabs →
navigation::EditorTabs - TerminalSplit →
layout::PaneGroup, aTerminalper pane - TerminalToolbar
- TerminalSearch →
editor::FindWidgetoverTerminal::find - TerminalLink →
Terminal, a Cmd-press onterminal::links: URLs and path:line:column - ShellSelector
- CommandBlock
- CommandHistory
- AnsiText
- LogViewer
- ProcessList
T19 Git — src/git
- DiffViewer — split, unified
- InlineDiff →
editor::CodeEditor::set_diff - ThreeWayMerge
- ConflictResolver
- ChangesList
- CommitInput
- CommitGraph →
git::CommitList::graph - CommitList / CommitItem
- BranchSelector
- BranchList
- TagList
- StashList
- BlameView / GitBlameAnnotation
- FileHistory
- PullRequestCard
- ReviewComment
- DiffStat
- GitStatusBadge
T20 Debug — src/debug
- DebugToolbar
- BreakpointList
- BreakpointGutter →
editor::CodeEditor, its gutter andtoggle_breakpoint - CallStack
- VariablesPanel
- WatchPanel
- ThreadList
- MemoryViewer / HexViewer →
debug::HexViewer, placed atbase - Disassembly
- PerformanceProfiler / Flamegraph →
debug::Flamegraph - TimelineProfiler
- NetworkInspector
- ConsoleREPL →
editor::DebugConsole