# Chapters 11–20 ## T11a Loading · Spinners & skeletons — `src/motion` - [x] Spinner — ring, dots, bars, pulse, orbit, wave; also the Button loading state (T05 LoadingButton) and T07a LoadMore → `motion::Spinner`, `buttons::Button::loading`, `navigation::LoadMore` - [x] DotsLoader → `motion::Spinner` - [x] BarsLoader → `motion::Spinner` - [x] PulseLoader → `motion::Spinner` - [x] RingLoader → `motion::Spinner` - [x] OrbitLoader → `motion::Spinner` - [x] WaveLoader → `motion::Spinner` - [x] Skeleton / SkeletonText / SkeletonAvatar / SkeletonCard / SkeletonTable → `motion::Skeleton` and kin - [x] Shimmer → `motion::Shimmer` ## T11b Loading · Progress & states - [x] ProgressBar — determinate, indeterminate, segmented, buffered — also T06e UploadList → `motion::ProgressBar`, `forms::UploadList` - [x] ProgressCircle / ProgressRing → `motion::ProgressRing` - [x] StepProgress → `navigation::Steps` - [x] LoadingOverlay → `motion::LoadingOverlay` - [x] LoadingScreen → `shell::SplashScreen`, which renders in place too - [x] InlineLoader → `motion::Spinner` - [x] LazyLoad → `motion::LazyLoad` - [x] Suspense / AsyncView → `feedback::Suspense`, `feedback::AsyncView`; a failure shows the error view, so they live with it - [x] RefreshIndicator → `motion::RefreshIndicator` - [x] TypingIndicator → `motion::TypingIndicator` ## T11c Motion · Presence & order — `src/motion` - [x] Transition — fade, slide, scale, collapse → `motion::Transition` fades, rises and slides; collapse is `layout::Collapsible`; scale is blocked: gpui 0.2.2 transforms only icons - [x] AnimatePresence → `motion::AnimatePresence` - [x] Motion → gpui's `with_animation`, timed by `motion::duration` and eased by the curves in `motion` - [x] Spring → `motion::spring` - [x] Stagger → `motion::Stagger` - [x] Reorder → `motion::Reorder` - [x] Flip → `motion::Flip` - [x] CountUp → `typography::AnimatedNumber`, counting up ## T11d Motion · Effects - [x] Marquee → `motion::Marquee` - [x] Ripple → `motion::Ripple` - [x] Confetti → `motion::Confetti` - [x] Glow / Pulse → `motion::Glow`, `motion::Pulse` - [x] Blink / Flash → `motion::Blink`, `motion::Flash` - [x] Shake → `motion::Shake` - [x] ParticleBackground → `motion::ParticleBackground` - [x] AnimatedGradient — slow tonal drift → `motion::AnimatedGradient` - [x] Lottie Player — blocked: gpui 0.2.2 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` - [x] Badge / CountBadge / DotBadge → `data_display::Badge`, `CountBadge`, `DotBadge`; the activity bar's count is a CountBadge - [x] Tag / Chip → `data_display::Tag`; the chips in TagInput and MultiSelect are Tags - [x] Avatar — image, initials, icon, presence — also T06e AvatarUpload → `data_display::Avatar`, `forms::AvatarUpload` - [x] AvatarGroup → `data_display::AvatarGroup` - [x] UserChip → `data_display::UserChip` - [x] Statistic / KPI Card → `data_display::Statistic`, `data_display::KpiCard` - [x] Metric → `data_display::Statistic`, at a smaller size - [x] TrendIndicator → `data_display::TrendIndicator` ## T12b Data Display · Records - [x] DescriptionList → `data_display::DescriptionList` - [x] PropertyGrid → `data_display::PropertyGrid`, `PropertyGroup` - [x] KeyValueList → `data_display::DescriptionList` - [x] InfoRow → `data_display::DescriptionList` - [x] Timeline / TimelineItem → `data_display::Timeline`, `TimelineItem` - [x] ActivityFeed → `data_display::ActivityFeed`, `Activity` - [x] Changelog → `data_display::Changelog`, `Release`, `Change` ## T12c Data Display · Media - [x] Carousel → `data_display::Carousel` - [x] Gallery → `data_display::Gallery`, opening `overlays::Lightbox` - [x] Accordion list → `layout::Accordion` - [x] Card Grid → `layout::SimpleGrid` - [x] BeforeAfter → `data_display::BeforeAfter` - [x] Watermark → `data_display::Watermark`; its rows run level, since gpui draws text upright ## T12d Data Display · Codes & measures - [x] QRCode → `data_display::QrCode` - [x] Barcode → `data_display::Barcode`: Code 128 and EAN-13 - [x] ColorSwatch display → `forms::ColorSwatch` - [x] Meter → `data_display::Meter` - [x] Gauge → `data_display::Gauge` - [x] UsageBar → `data_display::UsageBar` - [x] Rating display → `data_display::Stars`, read only with parts of a star; `forms::Rating` sets a score - [x] Comparison → `data_display::Comparison` ## T13a Lists & Trees · Lists — `src/lists` - [x] List / ListItem → `lists::List`, `ListItem` - [x] VirtualList → `lists::VirtualList`, on gpui's `list()`; rows as tall as they need - [x] InfiniteList → `lists::InfiniteList` - [x] SortableList → `lists::SortableList`; drags through `motion::Reorder`, Alt with arrows moves - [x] SelectableList — single, multi, shift range → `lists::SelectableList` - [x] GroupedList → `lists::GroupedList`, headers from `layout::StickyHeader` - [x] SectionList → `lists::GroupedList` - [x] ReorderableList → `lists::SortableList` - [x] SwipeableListItem → `lists::SwipeableListItem`, `SwipeAction`; proved with real trackpad phases (`Step::Swipe`) ## T13b Lists & Trees · Trees - [x] Tree / TreeView → `lists::Tree`, `TreeNode`; also T06b TreeSelect → `lists::TreeSelect` - [x] VirtualTree → `lists::Tree`, whose rows draw in a `uniform_list` - [x] CheckboxTree → `lists::Tree` with `checked` - [x] Outline → `lists::Outline` - [x] NestedList → `lists::Outline` ## T13c Lists & Trees · Files - [x] FileTree → `lists::FileTree`, `GitStatus`; built on `lists::Tree` - [x] DirectoryListing → `lists::DirectoryListing`, `DirEntry`; rows through `lists::SelectableList` - [x] Menu List → `menus::Menu` - [x] Transfer List → `forms::TransferList` ## T14a Tables · Core — `src/tables` - [x] Table → `tables::Table` - [x] DataTable — sort, filter, page, select → `tables::DataTable` - [x] VirtualTable → `tables::DataTable`, `virtualized` - [x] CellRenderer → `tables::Cell`: text, number, tag, progress, sparkline, person, link - [x] RowSelection → `tables::DataTable`, `selected` - [x] TableDensity → `tables::DataTable`, `density` - [x] AggregationFooter → `tables::Column`, `aggregate` - [x] ConditionalFormatting → `tables::Column`, `scale` - [x] HeatmapTable → `tables::HeatmapTable` - [x] ComparisonTable → `data_display::Comparison` ## T14b Tables · Columns & rows - [x] ColumnResizer → `tables::DataTable`: a header's edge drags - [x] ColumnReorder → `tables::DataTable`: a header drags onto another - [x] ColumnVisibility → `tables::DataTable`, `hidden`; the toolbar's Columns menu - [x] ColumnPinning → `tables::Column`, `pinned` - [x] RowExpansion → `tables::DataTable`, `detail` - [x] RowGrouping → `tables::DataTable`, `group_by` - [x] InlineRowEdit → `tables::Column`, `editable`; `DataTable::on_edit` - [x] TableToolbar → `tables::TableToolbar`; `tables::to_csv` for export - [x] FilterBuilder → `tables::FilterBuilder`, `FilterRule` - [x] SortBuilder → `tables::SortBuilder`, `SortKey` ## T14c Tables · Grids - [x] DataGrid → `tables::DataGrid` - [x] Spreadsheet — formula subset, merge, freeze, fill handle → `tables::Spreadsheet`; SUM, AVERAGE, MIN, MAX, COUNT over ranges - [x] TreeTable → `tables::TreeTable`, `TreeRow` - [x] PivotTable → `tables::PivotTable` ## T15a Charts · Cartesian — `src/charts` - [x] LineChart - [x] AreaChart / StackedArea → `charts::AreaChart::stacked` - [x] BarChart - [x] ScatterChart - [x] BubbleChart → `charts::ScatterChart` with `Points::sizes` - [x] Sparkline / SparkBar / SparkArea → `data_display::Sparkline`, landed with T14a for table cells - [x] RealtimeChart - [x] ChartLegend - [x] ChartTooltip - [x] ChartCrosshair → the hover of `LineChart`, `AreaChart` and `BarChart` - [x] ChartAxis / ChartGrid → the axes every cartesian chart draws - [x] ChartZoom / Brush → `LineChart::zoom` - [x] ChartAnnotation → `rule` and `note` - [x] ChartExport — SVG and CSV → `svg` and `csv` on each cartesian chart ## T15b Charts · Parts and spreads - [x] PieChart / DonutChart → `charts::PieChart::donut` - [x] RadarChart - [x] HeatmapChart - [x] CalendarHeatmap - [x] Treemap - [x] Sunburst - [x] WaterfallChart - [x] BoxPlot - [x] Histogram - [x] ViolinPlot ## T15c Charts · Flows and relations - [x] SankeyChart - [x] FunnelChart - [x] GanttChart - [x] NetworkGraph / ForceGraph → `charts::NetworkGraph` - [x] ChordDiagram - [x] ParallelCoordinates - [x] Bullet Chart → `charts::BulletChart` - [x] ProgressChart ## T16a Finance · Market charts — `src/finance` - [x] CandlestickChart - [x] OHLCChart → `finance::CandlestickChart` with `ChartKind::Bars` - [x] HeikinAshiChart → `finance::CandlestickChart` with `ChartKind::HeikinAshi` - [x] LineQuoteChart → `finance::CandlestickChart` with `ChartKind::Line` or `ChartKind::Area` - [x] VolumeChart → `CandlestickChart::volume` - [x] DepthChart - [x] MarketProfile / VolumeProfile → `CandlestickChart::profile` - [x] RenkoChart / PointAndFigure → `RenkoChart`, `PointFigureChart` - [x] MultiChartLayout - [x] ChartSync - [x] TimeRangeSelector - [x] IntervalSelector - [x] ChartTypeSwitcher ## T16b Finance · Technical analysis - [x] IndicatorOverlay — MA, EMA, BOLL, VWAP → `CandlestickChart::overlay` with `Overlay` - [x] IndicatorPane — MACD, RSI, KDJ, OBV → `CandlestickChart::study` with `Study` - [x] IndicatorSelector - [x] DrawingTools → `CandlestickChart::tool` and `drawings`: trend, level, box, Fibonacci retracement - [x] DrawingToolbar - [x] CompareSymbol → `CandlestickChart::compare` - [x] PriceAlertLine → `CandlestickChart::alert` ## T16c Finance · Quotes & book - [x] Ticker / TickerTape → `TickerTape` - [x] QuoteCard - [x] PriceText - [x] PriceChangeBadge - [x] OrderBook - [x] Level2 Quotes → `Level2Quotes` - [x] TimeAndSales / TradeTape → `TimeAndSales` - [x] MarketDepthLadder / DOM → `DomLadder` - [x] SpreadIndicator - [x] BidAskBar ## T16d Finance · Trading - [x] OrderEntry / TradePanel → `OrderEntry` - [x] QuickTradeButtons - [x] PositionTable - [x] OrderTable - [x] TradeHistoryTable - [x] PnLDisplay - [x] LeverageSlider - [x] MarginIndicator - [x] RiskMeter - [x] OrderConfirmDialog - [x] OptionChain - [x] GreeksTable - [x] PayoffDiagram ## T16e Finance · Markets & assets - [x] Watchlist - [x] SymbolSearch - [x] SymbolBadge - [x] MarketHeatmap - [x] SectorTreemap → `finance::MarketHeatmap`, or `charts::Treemap` for plain weights - [x] Screener / FilterPanel → `Screener`, its rules from `tables::FilterBuilder` - [x] MarketOverview - [x] IndexCard → `finance::QuoteCard`, in a row by `MarketOverview::index` - [x] MarketStatus - [x] TradingSessionClock - [x] EconomicCalendar - [x] EarningsCalendar - [x] NewsFeed - [x] SentimentGauge → `data_display::Gauge` - [x] PortfolioSummary - [x] AssetAllocationChart → `charts::PieChart` with `donut` - [x] PerformanceChart — equity curve, drawdown - [x] DividendTable - [x] FinancialStatementTable - [x] CurrencyConverter - [x] CryptoWalletCard - [x] TransactionList - [x] Candle Countdown → `feedback::Countdown` ## T17a Editor · Core — `src/editor` - [x] CodeEditor — highlight, multi-cursor, selection, undo, redo - [x] EditorGutter → `editor::CodeEditor`, its gutter: breakpoints, problems, numbers, folds, git marks - [x] LineNumbers — absolute, relative → `CodeEditor::line_numbers` with `LineNumbers` - [x] FoldingControl → `CodeEditor`, gutter folds - [x] Minimap → `CodeEditor::minimap` - [x] Ruler / IndentGuide → `CodeEditor::rulers`; guides on unless `hide_indent_guides` - [x] BracketMatcher / RainbowBrackets → `CodeEditor::rainbow_brackets`; the matched pair always marked - [x] WhitespaceRenderer → `CodeEditor::show_whitespace` - [x] CursorRenderer — block, line, underline, blink → `CodeEditor::cursor_shape` with `CursorShape` - [x] SelectionHighlight → `CodeEditor`, the word at the cursor marked while focused - [x] MultiCursor → `CodeEditor`: Cmd-D, Cmd-Alt-Up and Down, Alt-click - [x] VimModeIndicator - [x] StickyScroll → `CodeEditor::sticky_scroll` - [x] Breadcrumb → `navigation::Breadcrumb` - [x] InlayHints → `CodeEditor::set_inlay_hints` - [x] CodeLens → `CodeEditor::set_code_lenses` - [x] InlineDecoration → `CodeEditor::set_diagnostics` and `set_backgrounds` - [x] GhostText → `CodeEditor::set_ghost_text` - [x] InlineChat → `CodeEditor::set_chat` - [x] InlineDiff → `CodeEditor::set_diff` - [x] ReadOnlyBanner ## T17b Editor · Intelligence - [x] CompletionMenu - [x] SignatureHelp - [x] HoverInfo - [x] QuickFix / CodeActionMenu → `editor::CodeActionMenu` - [x] RenameInput - [x] PeekView → `overlays::Peek` - [x] ReferencesPanel - [x] SymbolOutline - [x] GoToSymbol - [x] CallHierarchy / TypeHierarchy → `editor::CallHierarchy`, `types` for supertypes and subtypes ## T17c Editor · Search - [x] FindWidget - [x] ReplaceWidget → `editor::FindWidget::replace` - [x] SearchPanel - [x] SearchResultItem - [x] SearchFilters ## T17d Editor · Panels - [x] ProblemsPanel / DiagnosticsList → `editor::ProblemsPanel` - [x] OutputPanel - [x] DebugConsole - [x] ExtensionsPanel / PluginList → `editor::ExtensionsPanel` - [x] SettingsEditor — UI and JSON - [x] KeybindingsEditor - [x] ThemePreview - [x] WelcomePage - [x] RecentProjects - [x] ProjectSwitcher - [x] TaskRunner / RunConfiguration → `editor::TaskRunner`, a task open to its configuration ## T17e Editor · Status items - [x] CursorPosition - [x] LanguageMode - [x] Encoding - [x] LineEnding - [x] IndentSettings - [x] BranchIndicator - [x] LspStatus - [x] NotificationBell ## T18 Terminal — `src/terminal` - [x] Terminal — proven: `alacritty_terminal` 0.26 grid on a pseudo-terminal → `terminal::Terminal::spawn`, and `Terminal::replay` for recorded output - [x] TerminalTabs → `navigation::EditorTabs` - [x] TerminalSplit → `layout::PaneGroup`, a `Terminal` per pane - [x] TerminalToolbar - [x] TerminalSearch → `editor::FindWidget` over `Terminal::find` - [x] TerminalLink → `Terminal`, a Cmd-press on `terminal::links`: URLs and path:line:column - [x] ShellSelector - [x] CommandBlock - [x] CommandHistory - [x] AnsiText - [x] LogViewer - [x] ProcessList ## T19 Git — `src/git` - [x] DiffViewer — split, unified - [x] InlineDiff → `editor::CodeEditor::set_diff` - [x] ThreeWayMerge - [x] ConflictResolver - [x] ChangesList - [x] CommitInput - [x] CommitGraph → `git::CommitList::graph` - [x] CommitList / CommitItem - [x] BranchSelector - [x] BranchList - [x] TagList - [x] StashList - [x] BlameView / GitBlameAnnotation - [x] FileHistory - [x] PullRequestCard - [x] ReviewComment - [x] DiffStat - [x] GitStatusBadge ## T20 Debug — `src/debug` - [x] DebugToolbar - [x] BreakpointList - [x] BreakpointGutter → `editor::CodeEditor`, its gutter and `toggle_breakpoint` - [x] CallStack - [x] VariablesPanel - [x] WatchPanel - [x] ThreadList - [x] MemoryViewer / HexViewer → `debug::HexViewer`, placed at `base` - [x] Disassembly - [x] PerformanceProfiler / Flamegraph → `debug::Flamegraph` - [x] TimelineProfiler - [x] NetworkInspector - [x] ConsoleREPL → `editor::DebugConsole`