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.
18 KiB
18 KiB
Chapters 31–43
T31a Project · Tasks — src/project
- PriorityIndicator
- IssueIdBadge
- StatusSelect
- AssigneePicker
- DueDatePicker →
forms::DatePicker - TaskItem — check, priority, due date, assignee
- TaskList
- SubtaskList →
documents::Checklist, which gains a field to add one
T31b Project · Issues and boards
- IssueCard
- LabelManager
- KanbanBoard / KanbanColumn / KanbanCard
- Sprint Board →
project::KanbanBoard - TaskDetailPanel
T31c Project · Plans
- GanttChart / TimelineView →
charts::GanttChart - Roadmap
- Burndown Chart →
charts::BurndownChart, on the charts' scales and paint - MilestoneProgress
- WorkloadView
T31d Project · Time and databases
- TimeTracker
- Pomodoro Timer
- DatabaseView (from T21c) — table, board, gallery, calendar, timeline
T32a Canvas · Plane — src/canvas
- InfiniteCanvas
- CanvasGrid / Guides
- Ruler
- ZoomControls / ZoomIndicator
- MiniMap
- ArtboardFrame
T32b Canvas · Tools
- SelectionBox
- TransformHandles
- SnapIndicator
- ToolPalette
- ShapeTools — rect, ellipse, polygon, line, arrow
- PenTool / PathEditor
- TextTool
- BrushTool / BrushSettings
- HistoryPanel
T32c Canvas · Panels
- LayerPanel
- AssetPanel
- InspectorPanel
- AlignmentToolbar
- ColorPanel
- GradientPanel →
forms::GradientEditor - ShadowEditor
- BorderEditor
- TypographyPanel
- ConstraintsEditor
- AutoLayoutControls
- ExportPanel
T32d Canvas · Graphs and boards
- NodeEditor / NodeGraph
- Node / Port / Edge / Connection
- FlowChart / DiagramEditor
- MindMap
- Whiteboard
- StickyNote
- Connector Line
T33a DB & Dev Tools · Databases — src/devtools
- ConnectionManager
- ConnectionForm
- SchemaTree
- QueryEditor →
editor::CodeEditor - QueryResultGrid →
tables::DataGrid - QueryHistory
- QueryPlanViewer
- TableStructureEditor
- ERDiagram
- IndexManager
- RedisKeyBrowser
T33b DB & Dev Tools · Data formats
- DocumentViewer (MongoDB / JSON) →
devtools::JsonViewer - JsonViewer / JsonTree
- JsonEditor
- YamlViewer
- XmlViewer
T33c DB & Dev Tools · APIs
- ApiRequestBuilder
- ResponseViewer
- HeadersTable
- QueryParamsEditor →
forms::KeyValueInput - EnvironmentSelector
- CollectionTree
- WebSocketConsole
- GraphQLExplorer
T33d DB & Dev Tools · Tools and machines
- RegexTester
- Base64 / Encoder
- ColorContrastChecker
- ContainerList
- PodList
- ResourceMonitor
T34 Dashboard — src/dashboard
- Dashboard Grid
- Widget / DashboardCard
- StatCard →
data_display::Statistic - MetricsChart →
charts::LineChart - AlertList
- IncidentCard
- UptimeBar
- ServiceStatus
- HealthCheck Indicator
- LogStream →
terminal::LogViewer - TraceWaterfall →
debug::TimelineProfiler - EventStream
- ResourceGauge →
data_display::Gauge - SystemMonitor →
devtools::ResourceMonitor - ProcessTable →
terminal::ProcessList - NetworkGraph (throughput) →
charts::RealtimeChart - MapView / GeoHeatmap →
maps::MapView,maps::GeoHeatmap(T41a, T41b) - WorldMap →
maps::WorldMap(T41c) - RefreshIntervalSelector
- DashboardFilterBar
T35 Settings — src/settings
- SettingsLayout
- SettingsSection
- SettingsRow
- SettingsSearch
- ThemeSelector (T39's ThemeSwitcher points here)
- AccentColorPicker
- FontSizeControl
- FontFamilySelect →
forms::FontPicker - DensitySelector
- LanguageSelector →
forms::Combobox::languages(T06f) - KeyboardShortcutsList
- ShortcutEditor →
editor::KeybindingsEditor - ProxySettings
- StorageSettings / CacheClear
- PrivacySettings
- NotificationSettings
- StartupSettings
- ImportExportSettings
- ResetToDefault
- AdvancedSettings / FeatureFlags
- DeveloperMode Toggle
T36a Account · Sign in — src/account
- LoginForm
- SignupForm
- OAuthButtons
- MagicLinkForm
- TwoFactorInput
- ForgotPassword
T36b Account · Profile and access
- ProfileCard
- ProfileEditor
- AccountSwitcher
- WorkspaceSwitcher / OrgSwitcher
- UserMenu
- SessionList
- ApiKeyManager
T36c Account · Billing and team
- SubscriptionCard / PlanBadge
- UsageQuota
- BillingHistory
- PaymentMethodForm
- UpgradePrompt / Paywall
- TeamMemberTable
- RoleSelector
- InvitationList
T37a Onboarding · Flows and highlights — src/onboarding
- OnboardingWizard — on
navigation::Wizardwithout its numbered steps - WelcomeTour →
overlays::Tour(T09b) - Coachmark / Hotspot — Coachmark →
overlays::Spotlight; Hotspot here - FeatureHighlight / NewBadge — NewBadge →
data_display::BadgewithTone::Accent, which FeatureHighlight wears - Checklist (first-run tasks) →
onboarding::SetupChecklist; a to-do list ticked by hand isdocuments::Checklist
T37b Onboarding · Help
- HelpTooltip →
primitives::HelpTooltip, the mark FormLabel's help shows - HelpPanel / DocsSidebar
- KeyboardShortcutCheatsheet —
settings::KeyboardShortcutsListin anoverlays::Dialog - WhatsNewDialog —
data_display::Changelogin anoverlays::Dialog - FeedbackWidget
- ContactSupport
- InlineHelp
- EmptyStateWithAction →
feedback::EmptyState, whoseactionadds its buttons
T38a Interaction · Pointer — src/interaction
- Draggable — native
on_drag - Droppable / DropTarget — native
on_drop,drag_over,can_drop - DragOverlay / DragPreview — native drag view
- DragGhost → DragPreview (native)
- Sortable / SortableContext →
motion::Reorder - Resizable
- Rotatable — an svg: gpui turns no other element
- Selectable / SelectionArea
- RubberBandSelection →
interaction::SelectionArea - LongPress →
primitives::Pressable - DoubleClick — native
ClickEvent::click_count - Gesture — prove: wheel zoom through
layout::Viewport, two-finger swipe throughlists::SwipeableListItem; pinch is not yet shown: gpui hands a trackpad magnify toon_pinchas aPinchEvent, andlayout::Viewportmust zoom about the pointer on one - PanZoom →
layout::Viewport
T38b Interaction · Keys, scroll and focus
- Hotkeys / KeyBinding — native
actions!,bind_keys,key_context - KeyChord — native multi-keystroke bindings;
window.pending_input_keystrokes()shows the first stroke - Undo / Redo Manager →
forms::History, made public - InfiniteScroll Trigger →
lists::InfiniteList - VirtualScroller — native
list()/uniform_list() - ScrollSync
- Autofocus — native
window.focus() - RovingTabIndex →
interaction::RovingFocus - TypeAhead →
lists::SelectableList, whose letters move its cursor - FocusVisible →
primitives::FocusRing
T39a Theme · Editing — src/theme
- ThemeProvider (T00)
- ThemeSwitcher →
settings::ThemeSelector(T35) - ColorTokens / DesignTokens (T00)
- ThemeEditor →
settings::ThemeEditor;Theme::set_palettetakes the owner's colors per mode - DensityProvider (T00) —
Theme::density, laid open insettings::ThemeEditor - RadiusProvider (T00) —
Theme::radius_scale, laid open insettings::ThemeEditor - FontProvider (T00) —
Theme::font_scale, laid open insettings::ThemeEditor - HighContrastMode (T00) —
Theme::set_high_contrast, laid open insettings::ThemeEditor - ReducedMotionProvider (T00) —
Theme::reduced_motion, laid open insettings::ThemeEditor - Elevation / Shadow (T00)
T39b Theme · Importing
- ThemeImporter — VS Code theme JSON →
settings::ThemeImporteronsettings::read_vscode_theme - SyntaxThemes →
theme::syntax_themes, chosen throughsettings::SyntaxThemePicker
T39c Theme · Platform
- IconThemeProvider →
primitives::IconTheme, an owner's rules by name and extension overfile_icon - Platform Style →
theme::Platform, the theme'splatform: the window buttons Ely draws, the title bar, key caps - VibrancyBackground / Acrylic →
shell::Vibrancyin a window openedWindowBackgroundAppearance::Blurred - Mica — prove: a window opened
WindowBackgroundAppearance::MicaBackdroporMicaAltBackdropgets a DWM backdrop from Windows 11 build 22621, none on older builds, in silence, and plain transparency on macOS;shell::Vibrancymust show Mica through itsglasson Windows 11, where the capture harness does not run
T40a i18n — src/i18n
- I18nProvider →
i18n::I18n, a gpui global: the shown locale and one catalog per locale - Trans / LocalizedText →
I18n::text, a message with its{name}arguments filled - LocaleNumber / LocaleDate →
Locale::numberandLocale::date, CLDR's separators, right-to-left sign and short dates - RTL layout — proven:
Direction::rowmirrors a stack andDirection::alignsets its text's side; a right-to-left line stays oneEllipsis, since gpui wraps glyphs in drawn order; Ely's other components stay left to right
T40b a11y — src/i18n
- LiveRegion / Announcer — prove: gpui has no live setter, but
a11y_synthetic_childrenhands over the element's own AccessKit node, which takesset_live; on macOS AccessKit then posts an announcement of the node's value when it appears and each time the value changes. A box with an id, aroleand its words inaria_valuemust show each new value in the macOS tree. Neither that tree norWindow::debug_a11y_tree_jsonshows the live flag, and no process here is trusted to observe VoiceOver take the announcement - SkipLink →
i18n::SkipLink: a Tab stop in flow that shows only while focused, raised over the page, and hands focus to its target - AccessibleIcon — prove: an svg makes no node, so an
Icontakes its name from a box around it with an id,role(Role::Image)and anaria_label; that box must reach the macOS tree with its name - AriaLabel helper — prove: gpui's own
aria_label, on an element with an id and arole; plain strings make no node, so a control's name goes on its box. A labeled button must reach the macOS tree with its name - KeyboardNavigationHelper →
interaction::RovingFocus - ScreenReaderOnly → VisuallyHidden (prove)
- ColorBlindSafe Palette →
Theme::set_color_blind_safe: chart hues fitted to stay apart under Machado's simulated protanopia, deuteranopia and tritanopia, each 3:1 on its page
T41a Maps · View — src/maps
- MapView — host tiles →
maps::MapView: the host's tile for each zoom, column and row, the nearest cut scaled past its zooms; a drag, the wheel or the arrows pan, Command-wheel, + and - or its buttons zoom - MapMarker →
maps::MapMarker, a pin keyed by its place's name, a Tab stop and pressable while in view when the map hears it; a focused pin keeps focus as it leaves the view - MapPopup →
maps::MapPopup, over or under its point toward the larger half, held inside the map, its body scrolling past the room; it takes focus when it shows and hands it back when it goes - LocationPicker →
maps::LocationPicker, the place under a center crosshair - CoordinateDisplay →
maps::CoordinateDisplay, degrees or degrees, minutes and seconds, copyable
T41b Maps · Layers
- MapCluster →
MapView::cluster_markers: pins gathered by squares of the world, so a pan keeps each group; a cluster's press shows its members whole - RouteLine →
maps::RouteLine, a layer that crosses the date line the short way - GeoJSON Layer →
maps::read_geojsonreads RFC 7946 to features;maps::GeoJsonLayerwashes areas with their holes open, strokes lines, dots points - GeoHeatmap (from T34) →
maps::GeoHeatmap, weighted places as heat scaled to the densest spot in view
T41c Maps · World
- ChoroplethMap →
maps::ChoroplethMapon aChoroplethLayer: areas washed by value on one hue's scale, keyed by id or a property, with a legend; an area without a value reads as no data, a value without an area is logged once - WorldMap (from T34) →
maps::WorldMap, Natural Earth's 110m countries bundled and washed by ISO 3166 alpha-2 code; a key that is no code fails
T42a Misc · Time — src/misc
- Clock / WorldClock →
misc::Clock, a face over its digits ticking each second;misc::WorldClock, places in rows by day and offset against home - Stopwatch →
misc::Stopwatch, on the executor's clock: Start or Pause on one button, Lap on another that reads Reset once paused, laps newest first
T42b Misc · Numbers
- Calculator →
misc::Calculator: digits, the four operations in precedence throughforms::evaluate, sign, delete and clear; a result goes on at its whole value and shows twelve significant digits; keys type too, and Enter gives the result while the calculator itself has focus - UnitConverter →
misc::UnitConverter: length, area, volume, mass, temperature, speed and data, each on a starting pair, with a swap; six significant digits, wrapped when long
T42c Misc · Codes and checks
- QRCodeScanner — proven:
rqrr0.11 reads the host's frames off the main thread →misc::QrCodeScanner, a camera's view with a square to aim at; each code goes to the owner once - BarcodeDisplay →
data_display::Barcode - Captcha →
misc::Captcha: the owner's picture and verdict over an answer field that empties and keeps focus with each answer, with a refresh - Signature →
forms::SignaturePad - Rating Widget →
forms::Rating
T42d Misc · Asking and learning
- Poll / Survey →
misc::Poll: one vote, then each option's share with the vote marked, and Change vote on Vote's stop;misc::Survey: questions on one page answered by an option, several, or words; Submit asks for what is missing, then sends, and thanks in its place and focus - Quiz / Flashcard →
misc::Quiz: a question at a time, Check shows the right answer, then Next and the score, one button on one stop;misc::Flashcards: a press turns the card, Previous and Next go round the deck
T42e Misc · Terms and notices
- ChangeLog Viewer →
data_display::Changelog - LicenseViewer →
misc::LicenseViewer: each package with its version and license, beside the chosen one's text, which scrolls; narrow, the text drops below the list - Terms / Consent Dialog →
misc::ConsentDialogonoverlays::Dialog: a box to agree, and Accept asks for it until ticked; each way out answers once, accept or decline - CookieBanner →
misc::CookieBanner: Accept all, Reject all, or Choose, which turns into Save choices over a switch for each kind; necessary cookies stay on
T42f Misc · Web
- WebView — proven:
wry0.57 lays a child WKWebView over the window →misc::WebView, an address or the owner's HTML, following its box each frame and hidden out of view; it draws above gpui and ignores its clipping, and a press anywhere gpui draws, or the view leaving, hands the keyboard back. macOS only - IframeEmbed / EmbedCard →
misc::IframeEmbed, a page in a frame of its own under its address, with Open in browser; EmbedCard ischat::LinkPreviewCard - HTMLPreview →
misc::WebView - PrintButton — blocked: gpui has no print API
- ShareSheet →
buttons::ShareButton
T42g Misc · Export and import
- ExportDialog — PDF, PNG, CSV, JSON →
misc::ExportDialog: the owner's formats as cards, and Export hands the chosen one over for the owner to write; each way out answers once - ImportDialog — field mapping →
misc::ImportDialog: a Select of the columns for each field, matched by name to start, over a preview of the first rows; Import asks for each required field's column - CSVImporter →
misc::CsvImporter: CSV read as RFC 4180 (misc::read_csv), its first row naming the columns unless the box says otherwise, mapped through the ImportDialog into records; text that does not read says why
T43a Tooling · Workbench — src/tooling
- ComponentGallery / Storybook →
examples/gallery, a page per chapter, light and dark, with scripted states;--pageopens one and--capturephotographs every page and state - PlaygroundPanel →
tooling::Playground: a preview beside knobs, each a switch, a choice or a number that edits one property
T43b Tooling · Inspection
- InspectorOverlay →
tooling::install_inspector: gpui's inspector, debug builds only, drawn by Ely: hover picks a box, the wheel steps out, a press holds; the box's margin, border, padding and size over the page, its model, source and ids in the panel - FPSMeter / PerfOverlay →
tooling::FpsMeter: frames per second over the last second, the worst frame, a bar per frame against the 60 Hz budget - RenderCounter →
tooling::RenderCounter: how often the view that draws it has rendered - EventLogger →
tooling::EventLogger: the input events that reach what it holds, newest first, moves run together, each timed from the first
T43c Tooling · Catalogs
- DesignTokenViewer →
tooling::DesignTokenViewer: the theme's shared colors and scales in the mode shown, named as code reads them, with their values - IconBrowser →
forms::IconPicker: the library's icons, searchable - A11yChecker — contrast audit →
tooling::A11yChecker: each text color over its surfaces and each code color over the editor's at 4.5:1, the focus ring and chart hues beside the page at 3:1, failures first - ScreenshotTest Harness — self-capture; scripted input since T01 →
examples/gallery --capture: every page light and dark, then its scripted states