{
  "note": "Generated by `cargo run -p xtask -- api generate` and verified by `gate`. Every signature here was compiled and every scene example was rendered, so this file is the API, not a description of it.",
  "library": "gpui-kit",
  "components": [
    {
      "name": "Accordion",
      "kind": "builder",
      "path": "gpui_kit::navigation::Accordion",
      "source": "crates/gpui-kit/src/navigation/accordion.rs",
      "summary": "A stack of disclosure sections.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "section(section: AccordionSection) -> Self",
        "sections(sections: impl IntoIterator<Item = AccordionSection>) -> Self",
        "expanded(ids: impl IntoIterator<Item = SharedString>) -> Self",
        "expanded_ids<S: AsRef<str>>(ids: &[S]) -> Self",
        "exclusive(exclusive: bool) -> Self",
        "on_toggle(handler: impl Fn(SharedString, bool, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "accordion",
        "motion-state",
        "reading-direction"
      ]
    },
    {
      "name": "AnimatedNumber",
      "kind": "builder",
      "path": "gpui_kit::display::AnimatedNumber",
      "source": "crates/gpui-kit/src/display/animated_number.rs",
      "summary": "A numeric readout that animates between values.",
      "construct": [
        "new(ident: impl Into<Ident>, value: f64) -> Self"
      ],
      "options": [
        "format(format: impl Fn(f64) -> String + 'static) -> Self",
        "spec(spec: MotionSpec) -> Self",
        "type_scale(scale: TypeScale) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "animated-number"
      ]
    },
    {
      "name": "ApprovalPrompt",
      "kind": "view",
      "path": "gpui_kit::agent::ApprovalPrompt",
      "source": "crates/gpui-kit/src/agent/approval.rs",
      "summary": "One request for permission, with the answer left to the caller.",
      "construct": [
        "new(ident: impl Into<Ident>, action: impl Into<SharedString>, _window: &mut Window, cx: &mut Context<Self>) -> Self"
      ],
      "options": [
        "detail(detail: DescriptionItem) -> Self",
        "details(details: impl IntoIterator<Item = DescriptionItem>) -> Self",
        "always(scope: AlwaysScope) -> Self",
        "status(status: ApprovalStatus) -> Self"
      ],
      "commands": [
        "set_status(status: ApprovalStatus, cx: &mut Context<Self>)",
        "approve(decision: ApprovalDecision, cx: &mut Context<Self>)",
        "decline(cx: &mut Context<Self>)"
      ],
      "queries": [
        "current_status() -> &ApprovalStatus"
      ],
      "reports": [],
      "scenes": [
        "approval"
      ]
    },
    {
      "name": "AspectRatio",
      "kind": "builder",
      "path": "gpui_kit::layout::AspectRatio",
      "source": "crates/gpui-kit/src/layout/aspect_ratio.rs",
      "summary": "A container whose two dimensions stay in a fixed ratio.",
      "construct": [
        "new(ident: impl Into<Ident>, ratio: f32) -> Self",
        "of(ident: impl Into<Ident>, width: f32, height: f32) -> Self"
      ],
      "options": [
        "fit(fit: AspectFit) -> Self",
        "width_driven() -> Self",
        "height_driven() -> Self",
        "child(child: impl IntoElement) -> Self"
      ],
      "commands": [],
      "queries": [
        "ratio() -> f32"
      ],
      "reports": [],
      "scenes": [
        "aspect-ratio"
      ]
    },
    {
      "name": "Avatar",
      "kind": "builder",
      "path": "gpui_kit::display::Avatar",
      "source": "crates/gpui-kit/src/display/avatar.rs",
      "summary": "A circular mark for a person or a workspace.",
      "construct": [
        "new(name: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "id(ident: impl Into<Ident>) -> Self",
        "image(image: impl Into<SharedString>) -> Self",
        "size(size: f32) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "actions",
        "content",
        "menu",
        "context-menu",
        "popover",
        "command-palette",
        "toolbar",
        "drawer",
        "ide-shell",
        "permission-matrix",
        "hover-card",
        "menubar",
        "copy-button",
        "document-tabs"
      ]
    },
    {
      "name": "Badge",
      "kind": "builder",
      "path": "gpui_kit::display::Badge",
      "source": "crates/gpui-kit/src/display/badge.rs",
      "summary": "A compact status label.",
      "construct": [
        "new(label: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "id(ident: impl Into<Ident>) -> Self",
        "tone(tone: Tone) -> Self",
        "neutral() -> Self",
        "accent() -> Self",
        "success() -> Self",
        "warning() -> Self",
        "danger() -> Self",
        "info() -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "badge",
        "card",
        "tabs",
        "table",
        "data-grid",
        "data-grid-editing",
        "sidebar",
        "motion-flip",
        "motion-state",
        "settings",
        "ide-shell",
        "reading-direction",
        "hover-card",
        "menubar",
        "copy-button",
        "document-tabs"
      ]
    },
    {
      "name": "Breadcrumb",
      "kind": "builder",
      "path": "gpui_kit::navigation::Breadcrumb",
      "source": "crates/gpui-kit/src/navigation/breadcrumb.rs",
      "summary": "A trail of crumbs, collapsed in the middle when it grows too long.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "crumb(crumb: Crumb) -> Self",
        "crumbs(crumbs: impl IntoIterator<Item = Crumb>) -> Self",
        "max_visible(max_visible: usize) -> Self",
        "on_select(handler: impl Fn(SharedString, &mut Window, &mut App) + 'static) -> Self",
        "on_reveal(handler: impl Fn(Vec<SharedString>, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "breadcrumb",
        "reading-direction"
      ]
    },
    {
      "name": "BrowserPanel",
      "kind": "builder",
      "path": "gpui_kit::content::BrowserPanel",
      "source": "crates/gpui-kit/src/content/browser.rs",
      "summary": "A framed web view: address, controls, and the rectangle a page goes in.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "url(url: impl Into<SharedString>) -> Self",
        "state(state: ViewportState) -> Self",
        "viewport(viewport: impl IntoElement) -> Self",
        "on_back(handler: impl Fn(&mut Window, &mut App) + 'static) -> Self",
        "on_forward(handler: impl Fn(&mut Window, &mut App) + 'static) -> Self",
        "on_reload(handler: impl Fn(&mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "browser-panel"
      ]
    },
    {
      "name": "BulkBar",
      "kind": "builder",
      "path": "gpui_kit::data::BulkBar",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "The bar that appears over a selection, says how large it is, and offers what can be done to it.",
      "construct": [
        "new(ident: impl Into<Ident>, count: usize) -> Self"
      ],
      "options": [
        "total(total: usize) -> Self",
        "noun(noun: impl Into<SharedString>) -> Self",
        "action(action: impl IntoElement) -> Self",
        "on_select_all(handler: impl Fn(&mut Window, &mut App) + 'static) -> Self",
        "on_dismiss(handler: impl Fn(&mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "data-grid"
      ]
    },
    {
      "name": "Button",
      "kind": "builder",
      "path": "gpui_kit::controls::Button",
      "source": "crates/gpui-kit/src/controls/button.rs",
      "summary": "A labeled action.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "label(label: impl Into<SharedString>) -> Self",
        "accessible_name(name: impl Into<SharedString>) -> Self",
        "icon_only(glyph: Icon, name: impl Into<SharedString>) -> Self",
        "join(join: ButtonJoin) -> Self",
        "semantic_parent(parent: impl Into<SharedString>) -> Self",
        "icon(glyph: Icon) -> Self",
        "icon_position(position: IconPosition) -> Self",
        "variant(variant: ButtonVariant) -> Self",
        "primary() -> Self",
        "secondary() -> Self",
        "ghost() -> Self",
        "danger() -> Self",
        "link() -> Self",
        "loading(loading: bool) -> Self",
        "full_width(full_width: bool) -> Self",
        "track_focus(handle: &FocusHandle) -> Self",
        "on_click(handler: impl Fn(&mut Window, &mut App) + 'static) -> Self",
        "checked_state(checked: bool) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "button",
        "actions",
        "content",
        "overlay",
        "tooltip",
        "menu",
        "context-menu",
        "popover",
        "command-palette",
        "data-grid",
        "toolbar",
        "drawer",
        "motion-flip",
        "motion-state",
        "animated-number",
        "ide-shell",
        "permission-matrix",
        "reading-direction",
        "hover-card",
        "menubar",
        "copy-button",
        "document-tabs",
        "calendar",
        "date-range",
        "date-time"
      ]
    },
    {
      "name": "ButtonGroup",
      "kind": "builder",
      "path": "gpui_kit::controls::ButtonGroup",
      "source": "crates/gpui-kit/src/controls/button.rs",
      "summary": "Adjacent related actions sharing one frame.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "child(button: Button) -> Self",
        "children(buttons: impl IntoIterator<Item = Button>) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "actions",
        "permission-matrix"
      ]
    },
    {
      "name": "Calendar",
      "kind": "view",
      "path": "gpui_kit::datetime::Calendar",
      "source": "crates/gpui-kit/src/datetime/calendar.rs",
      "summary": "A month of days.",
      "construct": [
        "new(ident: impl Into<Ident>, adapter: SharedDateAdapter, _window: &mut Window, cx: &mut Context<Self>) -> Self"
      ],
      "options": [
        "selected(days: impl IntoIterator<Item = Day>) -> Self",
        "multi(multi: bool) -> Self",
        "month(month: MonthKey) -> Self",
        "overlay(overlay: impl Fn(Day) -> Option<DayMark> + 'static) -> Self",
        "range(range: DayRange) -> Self"
      ],
      "commands": [
        "set_selection(days: Vec<Day>, cx: &mut Context<Self>)",
        "set_overlay(overlay: impl Fn(Day) -> Option<DayMark> + 'static, cx: &mut Context<Self>)",
        "set_range(range: Option<DayRange>, cx: &mut Context<Self>)",
        "set_disabled(disabled: bool, cx: &mut Context<Self>)",
        "set_hovered_day(day: Option<Day>, cx: &mut Context<Self>)",
        "shift(delta: i32, cx: &mut Context<Self>)",
        "show_month(month: MonthKey, cx: &mut Context<Self>)"
      ],
      "queries": [
        "adapter() -> &SharedDateAdapter",
        "selection() -> &[Day]",
        "cursor() -> Option<Day>",
        "hovered_day() -> Option<Day>",
        "shown_month() -> Option<MonthKey>"
      ],
      "reports": [
        "Picked",
        "MonthShown",
        "Hovered"
      ],
      "scenes": [
        "calendar",
        "date-range",
        "date-time"
      ]
    },
    {
      "name": "Callout",
      "kind": "builder",
      "path": "gpui_kit::display::Callout",
      "source": "crates/gpui-kit/src/display/status.rs",
      "summary": "A bordered message block.",
      "construct": [
        "new(message: impl Into<SharedString>, tone: Tone) -> Self"
      ],
      "options": [
        "id(ident: impl Into<Ident>) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "status",
        "approval"
      ]
    },
    {
      "name": "Card",
      "kind": "builder",
      "path": "gpui_kit::display::Card",
      "source": "crates/gpui-kit/src/display/card.rs",
      "summary": "A raised panel that groups related rows or content.",
      "construct": [
        "new() -> Self"
      ],
      "options": [
        "id(ident: impl Into<Ident>) -> Self",
        "padded(padded: bool) -> Self",
        "on_click(handler: impl Fn(&mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "card",
        "motion-flip",
        "tool-call",
        "step-list",
        "hover-card",
        "menubar",
        "copy-button"
      ]
    },
    {
      "name": "Checkbox",
      "kind": "builder",
      "path": "gpui_kit::controls::Checkbox",
      "source": "crates/gpui-kit/src/controls/toggle.rs",
      "summary": "A box that reports one of on, off, or partly on.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "label(label: impl Into<SharedString>) -> Self",
        "description(description: impl Into<SharedString>) -> Self",
        "checked(checked: bool) -> Self",
        "mixed() -> Self",
        "on_change(handler: impl Fn(bool, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "choice",
        "actions",
        "menu",
        "context-menu",
        "popover",
        "command-palette",
        "toolbar",
        "drawer",
        "motion-state",
        "permission-matrix",
        "hover-card",
        "menubar",
        "copy-button",
        "document-tabs"
      ]
    },
    {
      "name": "CodeView",
      "kind": "builder",
      "path": "gpui_kit::content::CodeView",
      "source": "crates/gpui-kit/src/content/code_view.rs",
      "summary": "Read-only code with a gutter.",
      "construct": [
        "new(ident: impl Into<Ident>, lines: impl IntoIterator<Item = CodeLine>) -> Self",
        "from_text(ident: impl Into<Ident>, text: &str) -> Self"
      ],
      "options": [
        "language(language: impl Into<SharedString>) -> Self",
        "line_numbers(line_numbers: bool) -> Self",
        "visible_lines(lines: usize) -> Self",
        "copyable(copyable: bool) -> Self"
      ],
      "commands": [],
      "queries": [
        "text() -> String"
      ],
      "reports": [],
      "scenes": [
        "code-view"
      ]
    },
    {
      "name": "Collapsible",
      "kind": "builder",
      "path": "gpui_kit::navigation::Collapsible",
      "source": "crates/gpui-kit/src/navigation/collapsible.rs",
      "summary": "A single region behind a header that opens and shuts it.",
      "construct": [
        "new(ident: impl Into<Ident>, title: impl Into<SharedString>) -> Self",
        "header_id(ident: &Ident) -> SharedString"
      ],
      "options": [
        "description(description: impl Into<SharedString>) -> Self",
        "open(open: bool) -> Self",
        "disabled(disabled: bool) -> Self",
        "body(body: impl IntoElement) -> Self",
        "on_toggle(handler: impl Fn(bool, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "split-pane",
        "collapsible"
      ]
    },
    {
      "name": "Combobox",
      "kind": "view",
      "path": "gpui_kit::controls::Combobox",
      "source": "crates/gpui-kit/src/controls/combobox.rs",
      "summary": "A [`Select`](crate::controls::select::Select) you can type into.",
      "construct": [
        "new(ident: impl Into<Ident>, window: &mut Window, cx: &mut Context<Self>) -> Self"
      ],
      "options": [
        "options(options: impl IntoIterator<Item = SelectOption>) -> Self",
        "selected(id: impl Into<SharedString>) -> Self",
        "placeholder(placeholder: impl Into<SharedString>) -> Self",
        "invalid(invalid: bool) -> Self",
        "allow_custom(allow_custom: bool) -> Self"
      ],
      "commands": [
        "set_options(options: Vec<SelectOption>, cx: &mut Context<Self>)",
        "set_selected(id: Option<SharedString>, cx: &mut Context<Self>)",
        "set_query(text: impl Into<SharedString>, cx: &mut Context<Self>)",
        "set_disabled(disabled: bool, cx: &mut Context<Self>)",
        "open(cx: &mut Context<Self>)",
        "toggle(window: &mut Window, cx: &mut Context<Self>)"
      ],
      "queries": [
        "selected_id() -> Option<&SharedString>",
        "selected_option() -> Option<&SelectOption>",
        "is_open() -> bool",
        "query_text(cx: &App) -> SharedString",
        "query_input() -> &Entity<TextInput>"
      ],
      "reports": [
        "QueryChanged",
        "Selected",
        "Custom",
        "Opened",
        "Closed"
      ],
      "scenes": [
        "form",
        "schema-form"
      ]
    },
    {
      "name": "CommandPalette",
      "kind": "view",
      "path": "gpui_kit::overlay::CommandPalette",
      "source": "crates/gpui-kit/src/overlay/palette.rs",
      "summary": "A query field over a list of commands.",
      "construct": [
        "new(ident: impl Into<Ident>, window: &mut Window, cx: &mut Context<Self>) -> Self"
      ],
      "options": [
        "commands(commands: impl IntoIterator<Item = Command>) -> Self"
      ],
      "commands": [
        "set_commands(commands: Vec<Command>, cx: &mut Context<Self>)",
        "set_query(query: impl Into<SharedString>, cx: &mut Context<Self>)"
      ],
      "queries": [
        "query(cx: &App) -> SharedString",
        "query_input() -> &Entity<TextInput>",
        "focus_query(window: &mut Window, cx: &mut App)",
        "active_id(cx: &App) -> Option<SharedString>"
      ],
      "reports": [
        "QueryChanged",
        "Invoked",
        "Dismissed"
      ],
      "scenes": [
        "actions",
        "menu",
        "context-menu",
        "popover",
        "command-palette",
        "toolbar",
        "permission-matrix",
        "hover-card",
        "menubar",
        "copy-button",
        "document-tabs"
      ]
    },
    {
      "name": "ContextGauge",
      "kind": "builder",
      "path": "gpui_kit::agent::ContextGauge",
      "source": "crates/gpui-kit/src/agent/cost.rs",
      "summary": "How much of a context window a run has used.",
      "construct": [
        "new(ident: impl Into<Ident>, used: Reading) -> Self"
      ],
      "options": [
        "label(label: impl Into<SharedString>) -> Self",
        "limit(limit: Limit) -> Self",
        "stale(verified: LastVerified) -> Self"
      ],
      "commands": [],
      "queries": [
        "fraction() -> Option<f32>"
      ],
      "reports": [],
      "scenes": [
        "cost-meter"
      ]
    },
    {
      "name": "ContextMenu",
      "kind": "view",
      "path": "gpui_kit::overlay::ContextMenu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "The same menu, opened at the pointer over a region rather than from a trigger.",
      "construct": [
        "new(ident: impl Into<Ident>, _window: &mut Window, cx: &mut Context<Self>) -> Self"
      ],
      "options": [
        "menu(items: impl IntoIterator<Item = MenuItem>) -> Self",
        "target(target: impl Into<SharedString>) -> Self",
        "content(content: impl Fn(&mut Window, &mut App) -> AnyElement + 'static) -> Self"
      ],
      "commands": [
        "set_items(items: Vec<MenuItem>, cx: &mut Context<Self>)",
        "open_at(position: Point<Pixels>, window: &mut Window, cx: &mut Context<Self>)",
        "close(window: &mut Window, cx: &mut Context<Self>)",
        "dismiss(window: &mut Window, cx: &mut Context<Self>)"
      ],
      "queries": [
        "is_open() -> bool",
        "position() -> Point<Pixels>"
      ],
      "reports": [
        "Opened",
        "Invoked",
        "Dismissed",
        "Closed"
      ],
      "scenes": [
        "actions",
        "menu",
        "context-menu",
        "popover",
        "command-palette",
        "toolbar",
        "permission-matrix",
        "hover-card",
        "menubar",
        "copy-button",
        "document-tabs"
      ]
    },
    {
      "name": "CopyButton",
      "kind": "view",
      "path": "gpui_kit::controls::CopyButton",
      "source": "crates/gpui-kit/src/controls/copy_button.rs",
      "summary": "A button that copies caller-supplied text and confirms what happened.",
      "construct": [
        "new(ident: impl Into<Ident>, _window: &mut Window, cx: &mut Context<Self>) -> Self"
      ],
      "options": [
        "text(text: impl Into<SharedString>) -> Self",
        "label(label: impl Into<SharedString>) -> Self",
        "glyph_only(name: impl Into<SharedString>) -> Self",
        "variant(variant: ButtonVariant) -> Self",
        "copier(copier: impl Fn(&str, &mut App) -> Result<(), SharedString> + 'static) -> Self",
        "confirmation(confirmation: Duration) -> Self"
      ],
      "commands": [
        "set_text(text: impl Into<SharedString>, cx: &mut Context<Self>)",
        "set_disabled(disabled: bool, cx: &mut Context<Self>)",
        "copy(cx: &mut Context<Self>)"
      ],
      "queries": [
        "state() -> &CopyState"
      ],
      "reports": [],
      "scenes": [
        "hover-card",
        "menubar",
        "copy-button"
      ]
    },
    {
      "name": "CostMeter",
      "kind": "builder",
      "path": "gpui_kit::agent::CostMeter",
      "source": "crates/gpui-kit/src/agent/cost.rs",
      "summary": "What a run has cost so far, line by line.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "label(label: impl Into<SharedString>) -> Self",
        "line(line: CostLine) -> Self",
        "lines(lines: impl IntoIterator<Item = CostLine>) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "cost-meter"
      ]
    },
    {
      "name": "DataGrid",
      "kind": "builder",
      "path": "gpui_kit::data::DataGrid",
      "source": "crates/gpui-kit/src/data/grid.rs",
      "summary": "A grid that renders only the rows its viewport holds.",
      "construct": [
        "new(ident: impl Into<Ident>, count: usize, render_row: impl Fn(usize, &mut Window, &mut App) -> GridRow + 'static) -> Self"
      ],
      "options": [
        "total(total: usize) -> Self",
        "column(column: GridColumn) -> Self",
        "columns(columns: impl IntoIterator<Item = GridColumn>) -> Self",
        "lines(lines: GridLines) -> Self",
        "sort(sort: Option<(SharedString, SortDirection)>) -> Self",
        "sorted_by(key: impl Into<SharedString>, direction: SortDirection) -> Self",
        "selection_mode(mode: SelectionMode) -> Self",
        "selected(ids: impl IntoIterator<Item = impl Into<SharedString>>) -> Self",
        "expanded(rows: impl IntoIterator<Item = Expanded>) -> Self",
        "detail_rows(rows: usize) -> Self",
        "detail(render: impl Fn(SharedString, &mut Window, &mut App) -> AnyElement + 'static) -> Self",
        "editing(cell: Option<EditingCell>) -> Self",
        "row_height(height: f32) -> Self",
        "visible_rows(rows: usize) -> Self",
        "loading(loading: bool) -> Self",
        "failure(failure: impl Into<SharedString>) -> Self",
        "empty(empty: EmptyState) -> Self",
        "on_sort(handler: impl Fn(SharedString, SortDirection, &mut Window, &mut App) + 'static) -> Self",
        "on_select(handler: impl Fn(&SelectionChange, &mut Window, &mut App) + 'static) -> Self",
        "on_resize(handler: impl Fn(SharedString, f32, &mut Window, &mut App) + 'static) -> Self",
        "on_fit(handler: impl Fn(SharedString, &mut Window, &mut App) + 'static) -> Self",
        "on_reorder(handler: impl Fn(&DropIntent, &mut Window, &mut App) + 'static) -> Self",
        "on_expand(handler: impl Fn(SharedString, bool, &mut Window, &mut App) + 'static) -> Self",
        "on_edit_request(handler: impl Fn(SharedString, SharedString, &mut Window, &mut App) + 'static) -> Self",
        "on_edit(handler: impl Fn(&EditIntent, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "data-grid",
        "data-grid-editing"
      ]
    },
    {
      "name": "DateInput",
      "kind": "view",
      "path": "gpui_kit::datetime::DateInput",
      "source": "crates/gpui-kit/src/datetime/date_input.rs",
      "summary": "A text field over a host-owned calendar, with that calendar in a popover.",
      "construct": [
        "new(ident: impl Into<Ident>, adapter: SharedDateAdapter, window: &mut Window, cx: &mut Context<Self>) -> Self"
      ],
      "options": [
        "value(day: Day) -> Self",
        "required(required: bool) -> Self"
      ],
      "commands": [
        "set_value(day: Option<Day>, cx: &mut Context<Self>)",
        "set_disabled(disabled: bool, cx: &mut Context<Self>)",
        "open(cx: &mut Context<Self>)",
        "close(cx: &mut Context<Self>)",
        "toggle(cx: &mut Context<Self>)"
      ],
      "queries": [
        "field() -> &Entity<TextInput>",
        "calendar() -> &Entity<Calendar>",
        "current() -> Option<Day>",
        "message() -> Option<&SharedString>",
        "is_open() -> bool",
        "shown_text(cx: &App) -> SharedString",
        "is_invalid() -> bool"
      ],
      "reports": [
        "Changed",
        "Unparsable",
        "Opened",
        "Closed",
        "Submit"
      ],
      "scenes": [
        "calendar",
        "date-range",
        "date-time"
      ]
    },
    {
      "name": "DescriptionList",
      "kind": "builder",
      "path": "gpui_kit::display::DescriptionList",
      "source": "crates/gpui-kit/src/display/description_list.rs",
      "summary": "A list of term and description pairs, in one or two columns.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "item(item: DescriptionItem) -> Self",
        "items(items: impl IntoIterator<Item = DescriptionItem>) -> Self",
        "columns(columns: usize) -> Self",
        "on_copy(handler: impl Fn(SharedString, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "actions",
        "content",
        "menu",
        "context-menu",
        "popover",
        "command-palette",
        "toast",
        "data-grid",
        "toolbar",
        "drawer",
        "detail",
        "ide-shell",
        "conversation",
        "permission-matrix",
        "server-list",
        "hover-card",
        "menubar",
        "copy-button",
        "document-tabs",
        "notification-center",
        "failure-panel"
      ]
    },
    {
      "name": "Dialog",
      "kind": "view",
      "path": "gpui_kit::overlay::Dialog",
      "source": "crates/gpui-kit/src/overlay/dialog.rs",
      "summary": "A composed modal: scrim, focus trap, title, body, and up to two actions.",
      "construct": [
        "new(ident: impl Into<Ident>, _window: &mut Window, cx: &mut Context<Self>) -> Self"
      ],
      "options": [
        "title(title: impl Into<SharedString>) -> Self",
        "description(description: impl Into<SharedString>) -> Self",
        "content(body: impl Fn(&mut Window, &mut App) -> AnyElement + 'static) -> Self",
        "dismissable(dismissable: bool) -> Self",
        "destructive(destructive: bool) -> Self",
        "confirm_label(label: impl Into<SharedString>) -> Self",
        "cancel_label(label: impl Into<SharedString>) -> Self"
      ],
      "commands": [
        "set_title(title: impl Into<SharedString>, cx: &mut Context<Self>)",
        "set_description(description: Option<SharedString>, cx: &mut Context<Self>)",
        "open(window: &mut Window, cx: &mut Context<Self>)",
        "close(window: &mut Window, cx: &mut Context<Self>)",
        "confirm(window: &mut Window, cx: &mut Context<Self>)",
        "cancel(window: &mut Window, cx: &mut Context<Self>)",
        "dismiss(window: &mut Window, cx: &mut Context<Self>)"
      ],
      "queries": [
        "is_open() -> bool",
        "is_dismissable() -> bool"
      ],
      "reports": [
        "Opened",
        "Confirmed",
        "Cancelled",
        "Dismissed",
        "Closed"
      ],
      "scenes": [
        "dialog"
      ]
    },
    {
      "name": "Divider",
      "kind": "builder",
      "path": "gpui_kit::display::Divider",
      "source": "crates/gpui-kit/src/display/empty.rs",
      "summary": "A horizontal rule between groups.",
      "construct": [
        "new() -> Self"
      ],
      "options": [
        "id(ident: impl Into<Ident>) -> Self",
        "label(label: impl Into<SharedString>) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "actions",
        "content",
        "menu",
        "context-menu",
        "popover",
        "command-palette",
        "toolbar",
        "drawer",
        "ide-shell",
        "markdown",
        "conversation",
        "image-viewer",
        "transport",
        "approval",
        "permission-matrix",
        "cost-meter",
        "hover-card",
        "menubar",
        "copy-button",
        "document-tabs"
      ]
    },
    {
      "name": "Dock",
      "kind": "builder",
      "path": "gpui_kit::layout::Dock",
      "source": "crates/gpui-kit/src/layout/dock.rs",
      "summary": "Panels arranged in regions around a centre.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "panel(region: DockRegion, panel: DockPanel) -> Self",
        "panels(region: DockRegion, panels: impl IntoIterator<Item = DockPanel>) -> Self",
        "active(region: DockRegion, panel: impl Into<SharedString>) -> Self",
        "collapsed(region: DockRegion, collapsed: bool) -> Self",
        "share(region: DockRegion, share: f32) -> Self",
        "min_size(region: DockRegion, min: f32) -> Self",
        "on_event(handler: impl Fn(DockEvent, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [
        "PanelSelected",
        "PanelMoved",
        "RegionCollapsed",
        "RegionResized"
      ],
      "scenes": [
        "ide-shell"
      ]
    },
    {
      "name": "DragGhost",
      "kind": "view",
      "path": "gpui_kit::interaction::DragGhost",
      "source": "crates/gpui-kit/src/interaction/dnd.rs",
      "summary": "",
      "construct": [],
      "options": [],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": []
    },
    {
      "name": "Drawer",
      "kind": "view",
      "path": "gpui_kit::overlay::Drawer",
      "source": "crates/gpui-kit/src/overlay/drawer.rs",
      "summary": "A panel anchored to one side of the window.",
      "construct": [
        "new(ident: impl Into<Ident>, _window: &mut Window, cx: &mut Context<Self>) -> Self"
      ],
      "options": [
        "edge(edge: Edge) -> Self",
        "size(size: f32) -> Self",
        "title(title: impl Into<SharedString>) -> Self",
        "description(description: impl Into<SharedString>) -> Self",
        "content(body: impl Fn(&mut Window, &mut App) -> AnyElement + 'static) -> Self",
        "footer(footer: impl Fn(&mut Window, &mut App) -> AnyElement + 'static) -> Self",
        "dismissable(dismissable: bool) -> Self",
        "focus_stops(stops: impl IntoIterator<Item = FocusHandle>) -> Self"
      ],
      "commands": [
        "set_focus_stops(stops: impl IntoIterator<Item = FocusHandle>, cx: &mut Context<Self>)",
        "set_title(title: impl Into<SharedString>, cx: &mut Context<Self>)",
        "open(window: &mut Window, cx: &mut Context<Self>)",
        "close(_window: &mut Window, cx: &mut Context<Self>)",
        "dismiss(window: &mut Window, cx: &mut Context<Self>)",
        "settle(cx: &mut Context<Self>)"
      ],
      "queries": [
        "is_open() -> bool",
        "is_dismissable() -> bool",
        "is_rendered() -> bool"
      ],
      "reports": [
        "Opened",
        "Dismissed",
        "Closed"
      ],
      "scenes": [
        "drawer"
      ]
    },
    {
      "name": "Dropzone",
      "kind": "builder",
      "path": "gpui_kit::controls::Dropzone",
      "source": "crates/gpui-kit/src/controls/dropzone.rs",
      "summary": "An area that accepts a drop.",
      "construct": [
        "new(ident: impl Into<Ident>, label: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "hint(hint: impl Into<SharedString>) -> Self",
        "refusal(refusal: impl Into<SharedString>) -> Self",
        "accepts<S: Into<SharedString>>(kinds: impl IntoIterator<Item = S>) -> Self",
        "icon(icon: Icon) -> Self",
        "state(state: DropzoneState) -> Self",
        "on_drop(handler: impl Fn(&DragItem, &mut Window, &mut App) + 'static) -> Self",
        "on_files(handler: impl Fn(&ExternalPaths, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "dropzone",
        "upload-list"
      ]
    },
    {
      "name": "EmptyState",
      "kind": "builder",
      "path": "gpui_kit::display::EmptyState",
      "source": "crates/gpui-kit/src/display/empty.rs",
      "summary": "A centred explanation with an optional action.",
      "construct": [
        "new(ident: impl Into<Ident>, title: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "kind(kind: EmptyKind) -> Self",
        "detail(detail: impl Into<SharedString>) -> Self",
        "action(action: impl IntoElement) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "actions",
        "content",
        "menu",
        "context-menu",
        "popover",
        "command-palette",
        "toolbar",
        "drawer",
        "ide-shell",
        "permission-matrix",
        "hover-card",
        "menubar",
        "copy-button",
        "document-tabs"
      ]
    },
    {
      "name": "FailurePanel",
      "kind": "builder",
      "path": "gpui_kit::display::FailurePanel",
      "source": "crates/gpui-kit/src/display/failure_panel.rs",
      "summary": "A panel that states what went wrong instead of what it was going to show.",
      "construct": [
        "new(ident: impl Into<Ident>, reason: impl Into<SharedString>) -> Self",
        "from_result<T, E: std::fmt::Display>(ident: impl Into<Ident>, result: &Result<T, E>) -> Option<Self>"
      ],
      "options": [
        "title(title: impl Into<SharedString>) -> Self",
        "detail(detail: impl Into<SharedString>) -> Self",
        "attempts(attempts: usize) -> Self",
        "retrying(retrying: bool) -> Self",
        "on_retry(handler: impl Fn(&mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "failure-panel"
      ]
    },
    {
      "name": "FilterBar",
      "kind": "builder",
      "path": "gpui_kit::controls::FilterBar",
      "source": "crates/gpui-kit/src/controls/filter_bar.rs",
      "summary": "A row of active conditions, a way to add one, a clear-all, and the count.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "condition(condition: FilterCondition) -> Self",
        "conditions(conditions: impl IntoIterator<Item = FilterCondition>) -> Self",
        "count(count: ResultCount) -> Self",
        "noun(noun: impl Into<SharedString>) -> Self",
        "add_control(control: impl IntoElement) -> Self",
        "add_label(label: impl Into<SharedString>) -> Self",
        "clear_label(label: impl Into<SharedString>) -> Self",
        "on_add(handler: impl Fn(&mut Window, &mut App) + 'static) -> Self",
        "on_remove(handler: impl Fn(SharedString, &mut Window, &mut App) + 'static) -> Self",
        "on_clear(handler: impl Fn(&mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "filter-bar"
      ]
    },
    {
      "name": "FindReplace",
      "kind": "view",
      "path": "gpui_kit::controls::FindReplace",
      "source": "crates/gpui-kit/src/controls/search.rs",
      "summary": "A [`SearchField`] with a replacement field and the two replace actions.",
      "construct": [
        "new(ident: impl Into<Ident>, window: &mut Window, cx: &mut Context<Self>) -> Self"
      ],
      "options": [],
      "commands": [
        "set_count(count: HitCount, cx: &mut Context<Self>)",
        "set_disabled(disabled: bool, cx: &mut Context<Self>)"
      ],
      "queries": [
        "search_field() -> &Entity<SearchField>",
        "replacement_input() -> &Entity<TextInput>",
        "count(cx: &App) -> HitCount",
        "replacement_text(cx: &App) -> SharedString"
      ],
      "reports": [
        "Search",
        "ReplacementChanged",
        "ReplaceOne",
        "ReplaceAll"
      ],
      "scenes": [
        "search-field",
        "find-replace"
      ]
    },
    {
      "name": "FormField",
      "kind": "builder",
      "path": "gpui_kit::controls::FormField",
      "source": "crates/gpui-kit/src/controls/form_field.rs",
      "summary": "A labelled control, with the secondary text a typist needs around it.",
      "construct": [
        "new(ident: impl Into<Ident>, label: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "control(control: impl Into<SharedString>) -> Self",
        "description(description: impl Into<SharedString>) -> Self",
        "error(error: impl Into<SharedString>) -> Self",
        "hint(keystroke: impl Into<SharedString>) -> Self",
        "required(required: bool) -> Self"
      ],
      "commands": [],
      "queries": [
        "is_invalid() -> bool"
      ],
      "reports": [],
      "scenes": [
        "form",
        "schema-form"
      ]
    },
    {
      "name": "GradientSpinner",
      "kind": "builder",
      "path": "gpui_kit::display::GradientSpinner",
      "source": "crates/gpui-kit/src/display/loading.rs",
      "summary": "A three-by-three gradient matrix, used for longer indeterminate work.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "label(label: impl Into<gpui::SharedString>) -> Self",
        "cell_size(cell_size: f32) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "button",
        "loading",
        "actions",
        "permission-matrix",
        "copy-button",
        "upload-list"
      ]
    },
    {
      "name": "GraphNode",
      "kind": "builder",
      "path": "gpui_kit::canvas::GraphNode",
      "source": "crates/gpui-kit/src/canvas/node.rs",
      "summary": "A step of a run, as a card on the canvas.",
      "construct": [
        "new(ident: impl Into<Ident>, title: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "action(action: impl Into<SharedString>) -> Self",
        "state(state: NodeState) -> Self",
        "metric(label: impl Into<SharedString>, value: impl Into<SharedString>) -> Self",
        "metrics(metrics: impl IntoIterator<Item = NodeMetric>) -> Self",
        "diff(diff: Diff) -> Self",
        "width(width: f32) -> Self",
        "on_click(handler: impl Fn(&mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "node-graph"
      ]
    },
    {
      "name": "HighlightedText",
      "kind": "builder",
      "path": "gpui_kit::display::HighlightedText",
      "source": "crates/gpui-kit/src/display/highlight.rs",
      "summary": "A run of text with some of it marked.",
      "construct": [
        "new(text: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "id(ident: impl Into<Ident>) -> Self",
        "hits(hits: impl IntoIterator<Item = Range<usize>>) -> Self",
        "current(index: usize) -> Self",
        "monospace(monospace: bool) -> Self"
      ],
      "commands": [],
      "queries": [
        "published_hits() -> usize"
      ],
      "reports": [],
      "scenes": [
        "search-field",
        "find-replace"
      ]
    },
    {
      "name": "HoverCard",
      "kind": "view",
      "path": "gpui_kit::overlay::HoverCard",
      "source": "crates/gpui-kit/src/overlay/hover_card.rs",
      "summary": "A preview surface that opens on hover and can be pointed at.",
      "construct": [
        "new(ident: impl Into<Ident>, _window: &mut Window, cx: &mut Context<Self>) -> Self"
      ],
      "options": [
        "trigger(trigger: impl Fn(&mut Window, &mut App) -> AnyElement + 'static) -> Self",
        "name(name: impl Into<SharedString>) -> Self",
        "content(content: impl Fn(&mut Window, &mut App) -> AnyElement + 'static) -> Self",
        "placement(placement: Placement) -> Self",
        "open_delay(delay: Duration) -> Self",
        "grace(grace: Duration) -> Self"
      ],
      "commands": [
        "open(cx: &mut Context<Self>)",
        "close(cx: &mut Context<Self>)",
        "dismiss(window: &mut Window, cx: &mut Context<Self>)"
      ],
      "queries": [
        "is_open() -> bool",
        "is_leaving() -> bool",
        "grace_period() -> Duration"
      ],
      "reports": [
        "Opened",
        "Closed"
      ],
      "scenes": [
        "hover-card",
        "menubar",
        "copy-button"
      ]
    },
    {
      "name": "Icon",
      "kind": "builder",
      "path": "gpui_kit::display::Icon",
      "source": "crates/gpui-kit/src/display/icon.rs",
      "summary": "A glyph from the bundled catalog.",
      "construct": [
        "new(glyph: Glyph) -> Self",
        "named(ident: impl Into<Ident>, glyph: Glyph, name: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "spinning(ident: impl Into<Ident>) -> Self",
        "breathing(ident: impl Into<Ident>) -> Self",
        "tone(tone: IconTone) -> Self",
        "muted() -> Self",
        "faint() -> Self",
        "on_accent() -> Self",
        "accent() -> Self",
        "danger() -> Self",
        "warning() -> Self",
        "success() -> Self",
        "info() -> Self",
        "follow_direction(follow: bool) -> Self"
      ],
      "commands": [],
      "queries": [
        "resolved_size(theme: &Theme) -> f32",
        "resolved_color(theme: &Theme) -> Hsla",
        "flips_in(direction: LayoutDirection) -> bool"
      ],
      "reports": [],
      "scenes": [
        "actions",
        "menu",
        "context-menu",
        "popover",
        "command-palette",
        "tabs",
        "tree",
        "toolbar",
        "sidebar",
        "motion-state",
        "drag-tree",
        "split-tree",
        "ide-shell",
        "permission-matrix",
        "reading-direction",
        "hover-card",
        "menubar",
        "copy-button",
        "document-tabs"
      ]
    },
    {
      "name": "IconButton",
      "kind": "builder",
      "path": "gpui_kit::controls::IconButton",
      "source": "crates/gpui-kit/src/controls/button.rs",
      "summary": "An action carried by a glyph alone.",
      "construct": [
        "new(ident: impl Into<Ident>, glyph: Icon, name: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "variant(variant: ButtonVariant) -> Self",
        "primary() -> Self",
        "secondary() -> Self",
        "ghost() -> Self",
        "danger() -> Self",
        "loading(loading: bool) -> Self",
        "semantic_parent(parent: impl Into<SharedString>) -> Self",
        "track_focus(handle: &FocusHandle) -> Self",
        "join(join: ButtonJoin) -> Self",
        "on_click(handler: impl Fn(&mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "actions",
        "toolbar",
        "permission-matrix"
      ]
    },
    {
      "name": "ImageViewer",
      "kind": "builder",
      "path": "gpui_kit::content::ImageViewer",
      "source": "crates/gpui-kit/src/content/image_viewer.rs",
      "summary": "A framed viewer for one image at a time.",
      "construct": [
        "new(ident: impl Into<Ident>, frames: impl IntoIterator<Item = ImageFrame>) -> Self"
      ],
      "options": [
        "showing(id: impl Into<SharedString>) -> Self",
        "fit(fit: FitMode) -> Self",
        "zoom_range(min: f32, max: f32) -> Self",
        "height(height: f32) -> Self",
        "image(supplier: impl Fn(&ImageFrame, &mut Window, &mut App) -> Option<AnyElement> + 'static) -> Self",
        "on_event(handler: impl Fn(&ImageViewerEvent, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [
        "FitChanged",
        "Stepped",
        "ImageRequested"
      ],
      "scenes": [
        "image-viewer"
      ]
    },
    {
      "name": "InlineEdit",
      "kind": "builder",
      "path": "gpui_kit::controls::InlineEdit",
      "source": "crates/gpui-kit/src/controls/inline_edit.rs",
      "summary": "Text that a click or enter turns into a field.",
      "construct": [
        "new(ident: impl Into<Ident>, value: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "placeholder(placeholder: impl Into<SharedString>) -> Self",
        "editing(editing: bool) -> Self",
        "multiline(multiline: bool) -> Self",
        "rows(rows: usize) -> Self",
        "failure(failure: impl Into<SharedString>) -> Self",
        "on_edit(handler: impl Fn(&mut Window, &mut App) + 'static) -> Self",
        "on_commit(handler: impl Fn(SharedString, &mut Window, &mut App) + 'static) -> Self",
        "on_cancel(handler: impl Fn(&mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "inline-edit"
      ]
    },
    {
      "name": "JsonView",
      "kind": "builder",
      "path": "gpui_kit::structured::JsonView",
      "source": "crates/gpui-kit/src/structured/json_view.rs",
      "summary": "A collapsible view of a structured value.",
      "construct": [
        "new(ident: impl Into<Ident>, value: JsonValue) -> Self"
      ],
      "options": [
        "root_label(label: impl Into<SharedString>) -> Self",
        "expanded(paths: impl IntoIterator<Item = SharedString>) -> Self",
        "expanded_paths<S: AsRef<str>>(paths: &[S]) -> Self",
        "selected(path: impl Into<SharedString>) -> Self",
        "visible_rows(rows: usize) -> Self",
        "row_height(height: f32) -> Self",
        "on_toggle(handler: impl Fn(SharedString, bool, &mut Window, &mut App) + 'static) -> Self",
        "on_select(handler: impl Fn(SharedString, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [
        "disclosed_paths(cx: &App) -> Vec<SharedString>"
      ],
      "reports": [],
      "scenes": [
        "json-view"
      ]
    },
    {
      "name": "Kbd",
      "kind": "builder",
      "path": "gpui_kit::overlay::Kbd",
      "source": "crates/gpui-kit/src/overlay/kbd.rs",
      "summary": "A keyboard shortcut, written the way the current platform writes it.",
      "construct": [
        "new(keystroke: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "id(ident: impl Into<Ident>) -> Self"
      ],
      "commands": [],
      "queries": [
        "caps(cx: &App) -> Vec<SharedString>"
      ],
      "reports": [],
      "scenes": [
        "kbd"
      ]
    },
    {
      "name": "KeybindingRecorder",
      "kind": "view",
      "path": "gpui_kit::controls::KeybindingRecorder",
      "source": "crates/gpui-kit/src/controls/keybinding_recorder.rs",
      "summary": "A field that records one keystroke.",
      "construct": [
        "new(ident: impl Into<Ident>, _window: &mut Window, cx: &mut Context<Self>) -> Self"
      ],
      "options": [
        "label(label: impl Into<SharedString>) -> Self",
        "placeholder(placeholder: impl Into<SharedString>) -> Self",
        "binding(binding: impl Into<SharedString>) -> Self",
        "conflict(reason: Option<impl Into<SharedString>>) -> Self",
        "allow_escape(allow: bool) -> Self"
      ],
      "commands": [
        "set_binding(binding: Option<SharedString>, cx: &mut Context<Self>)",
        "set_conflict(reason: Option<SharedString>, cx: &mut Context<Self>)",
        "start(window: &mut Window, cx: &mut Context<Self>)",
        "cancel(cx: &mut Context<Self>)"
      ],
      "queries": [
        "is_recording() -> bool",
        "current_binding() -> Option<&SharedString>"
      ],
      "reports": [
        "Started",
        "Captured",
        "Cancelled"
      ],
      "scenes": [
        "keybinding"
      ]
    },
    {
      "name": "List",
      "kind": "builder",
      "path": "gpui_kit::data::List",
      "source": "crates/gpui-kit/src/data/list.rs",
      "summary": "A list that renders only the rows its viewport holds.",
      "construct": [
        "new(ident: impl Into<Ident>, count: usize, render_row: impl Fn(usize, &mut Window, &mut App) -> ListItem + 'static) -> Self"
      ],
      "options": [
        "selected(id: impl Into<SharedString>) -> Self",
        "row_height(height: f32) -> Self",
        "visible_rows(rows: usize) -> Self",
        "on_select(handler: impl Fn(SharedString, &mut Window, &mut App) + 'static) -> Self",
        "reorderable(reorderable: bool) -> Self",
        "accepts(predicate: impl Fn(&DragItem, &DropPosition) -> bool + 'static) -> Self",
        "on_reorder(handler: impl Fn(&DropIntent, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "actions",
        "content",
        "menu",
        "context-menu",
        "popover",
        "command-palette",
        "toast",
        "list",
        "data-grid",
        "toolbar",
        "drawer",
        "drag-list",
        "detail",
        "ide-shell",
        "conversation",
        "permission-matrix",
        "step-list",
        "schema-form",
        "server-list",
        "hover-card",
        "menubar",
        "copy-button",
        "document-tabs",
        "notification-center",
        "failure-panel",
        "upload-list"
      ]
    },
    {
      "name": "ListRow",
      "kind": "builder",
      "path": "gpui_kit::display::ListRow",
      "source": "crates/gpui-kit/src/display/card.rs",
      "summary": "One row inside a [`Card`].",
      "construct": [
        "new() -> Self"
      ],
      "options": [
        "id(ident: impl Into<Ident>) -> Self",
        "on_click(handler: impl Fn(&mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "card",
        "motion-flip",
        "hover-card"
      ]
    },
    {
      "name": "Markdown",
      "kind": "builder",
      "path": "gpui_kit::content::Markdown",
      "source": "crates/gpui-kit/src/content/markdown.rs",
      "summary": "A rendered Markdown document.",
      "construct": [
        "new(ident: impl Into<Ident>, source: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "max_lines(lines: usize) -> Self",
        "on_event(handler: impl Fn(&MarkdownEvent, &mut Window, &mut App) + 'static) -> Self",
        "image(source: impl Fn(&ImageRequest, &mut Window, &mut App) -> Option<AnyElement> + 'static) -> Self",
        "highlight(highlighter: impl Fn(&CodeBlock) -> Vec<CodeSpan> + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [
        "LinkClicked",
        "ImageRequested",
        "CodeCopied",
        "MoreRequested"
      ],
      "scenes": [
        "markdown",
        "conversation"
      ]
    },
    {
      "name": "Menu",
      "kind": "view",
      "path": "gpui_kit::overlay::Menu",
      "source": "crates/gpui-kit/src/overlay/menu.rs",
      "summary": "A list of commands, opened from a trigger.",
      "construct": [
        "new(ident: impl Into<Ident>, _window: &mut Window, cx: &mut Context<Self>) -> Self"
      ],
      "options": [
        "trigger(label: impl Into<SharedString>) -> Self",
        "trigger_icon(glyph: Icon) -> Self",
        "trigger_name(name: impl Into<SharedString>) -> Self",
        "trigger_variant(variant: ButtonVariant) -> Self",
        "trigger_join(join: ButtonJoin) -> Self",
        "items(items: impl IntoIterator<Item = MenuItem>) -> Self",
        "placement(placement: Placement) -> Self"
      ],
      "commands": [
        "set_trigger_name(name: impl Into<SharedString>, cx: &mut Context<Self>)",
        "set_trigger_style(variant: ButtonVariant, size: ControlSize, cx: &mut Context<Self>)",
        "set_items(items: Vec<MenuItem>, cx: &mut Context<Self>)",
        "open(window: &mut Window, cx: &mut Context<Self>)",
        "open_submenu(id: &str, window: &mut Window, cx: &mut Context<Self>) -> bool",
        "close(window: &mut Window, cx: &mut Context<Self>)",
        "dismiss(window: &mut Window, cx: &mut Context<Self>)",
        "toggle(window: &mut Window, cx: &mut Context<Self>)"
      ],
      "queries": [
        "offered() -> &[MenuItem]",
        "is_open() -> bool"
      ],
      "reports": [
        "Opened",
        "Invoked",
        "Dismissed",
        "Closed"
      ],
      "scenes": [
        "actions",
        "menu",
        "context-menu",
        "popover",
        "command-palette",
        "toolbar",
        "permission-matrix",
        "hover-card",
        "menubar",
        "copy-button",
        "document-tabs"
      ]
    },
    {
      "name": "Menubar",
      "kind": "view",
      "path": "gpui_kit::overlay::Menubar",
      "source": "crates/gpui-kit/src/overlay/menubar.rs",
      "summary": "A row of menus, at most one of them open.",
      "construct": [
        "new(ident: impl Into<Ident>, menus: impl IntoIterator<Item = MenubarMenu>, window: &mut Window, cx: &mut Context<Self>) -> Self"
      ],
      "options": [
        "control_size(size: ControlSize) -> Self"
      ],
      "commands": [
        "set_menus(menus: Vec<MenubarMenu>, window: &mut Window, cx: &mut Context<Self>)",
        "open(id: &str, window: &mut Window, cx: &mut Context<Self>)",
        "close(window: &mut Window, cx: &mut Context<Self>)"
      ],
      "queries": [
        "open_menu() -> Option<&SharedString>",
        "menus() -> &[MenubarMenu]"
      ],
      "reports": [
        "Opened",
        "Invoked",
        "Closed"
      ],
      "scenes": [
        "hover-card",
        "menubar",
        "copy-button"
      ]
    },
    {
      "name": "MessageList",
      "kind": "builder",
      "path": "gpui_kit::content::MessageList",
      "source": "crates/gpui-kit/src/content/message_list.rs",
      "summary": "A conversation.",
      "construct": [
        "new(ident: impl Into<Ident>, messages: impl IntoIterator<Item = Message>) -> Self"
      ],
      "options": [
        "visible_rows(rows: usize) -> Self",
        "body_lines(lines: usize) -> Self",
        "group_consecutive(group: bool) -> Self",
        "on_retry(handler: impl Fn(SharedString, &mut Window, &mut App) + 'static) -> Self",
        "on_markdown(handler: impl Fn(SharedString, &MarkdownEvent, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "conversation"
      ]
    },
    {
      "name": "NodeGraph",
      "kind": "builder",
      "path": "gpui_kit::canvas::NodeGraph",
      "source": "crates/gpui-kit/src/canvas/graph.rs",
      "summary": "A run drawn as connected steps.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "node(node: GraphNode, x: f32, y: f32) -> Self",
        "placed(placed: Placed) -> Self",
        "edge(edge: GraphEdge) -> Self",
        "edges(edges: impl IntoIterator<Item = GraphEdge>) -> Self",
        "state(state: GraphState) -> Self",
        "empty(empty: EmptyState) -> Self",
        "grid(grid: bool) -> Self",
        "offset(x: f32, y: f32) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "node-graph"
      ]
    },
    {
      "name": "NotificationCenter",
      "kind": "view",
      "path": "gpui_kit::overlay::NotificationCenter",
      "source": "crates/gpui-kit/src/overlay/notification_center.rs",
      "summary": "The list of notifications a window has accumulated.",
      "construct": [
        "new(ident: impl Into<Ident>, cx: &mut Context<Self>) -> Self"
      ],
      "options": [
        "capacity(capacity: usize) -> Self"
      ],
      "commands": [
        "show(notification: Notification, cx: &mut Context<Self>) -> bool",
        "record(notification: Notification, cx: &mut Context<Self>)",
        "mark_read(id: &str, cx: &mut Context<Self>) -> bool",
        "mark_all_read(cx: &mut Context<Self>)",
        "dismiss(id: &str, cx: &mut Context<Self>) -> bool",
        "clear(cx: &mut Context<Self>)"
      ],
      "queries": [
        "len() -> usize",
        "is_empty() -> bool",
        "holds(id: &str) -> bool",
        "is_read(id: &str) -> Option<bool>",
        "unread() -> UnreadCount"
      ],
      "reports": [
        "Read",
        "Dismissed",
        "Cleared",
        "ActionTaken"
      ],
      "scenes": [
        "notification-center"
      ]
    },
    {
      "name": "NumberInput",
      "kind": "view",
      "path": "gpui_kit::controls::NumberInput",
      "source": "crates/gpui-kit/src/controls/number_input.rs",
      "summary": "A number field with a step grid and, optionally, a range.",
      "construct": [
        "new(ident: impl Into<Ident>, window: &mut Window, cx: &mut Context<Self>) -> Self"
      ],
      "options": [
        "value(value: f64) -> Self",
        "range(min: f64, max: f64) -> Self",
        "min(min: f64) -> Self",
        "max(max: f64) -> Self",
        "name(name: impl Into<SharedString>) -> Self",
        "step(step: f64) -> Self",
        "page_step(page_step: f64) -> Self",
        "precision(precision: usize) -> Self",
        "unit(unit: impl Into<SharedString>) -> Self",
        "required(required: bool) -> Self"
      ],
      "commands": [
        "set_value(value: f64, cx: &mut Context<Self>)",
        "set_disabled(disabled: bool, cx: &mut Context<Self>)"
      ],
      "queries": [
        "current() -> Option<f64>",
        "field() -> &Entity<TextInput>",
        "shown(cx: &App) -> Option<f64>",
        "is_invalid(cx: &App) -> bool",
        "invalid_reason(cx: &App) -> Option<SharedString>",
        "can_step(delta: f64, cx: &App) -> bool"
      ],
      "reports": [
        "Changed",
        "Unparsable",
        "Submit"
      ],
      "scenes": [
        "form",
        "schema-form"
      ]
    },
    {
      "name": "Overlay",
      "kind": "builder",
      "path": "gpui_kit::overlay::Overlay",
      "source": "crates/gpui-kit/src/overlay/layer.rs",
      "summary": "A floating surface.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self",
        "modal(ident: impl Into<Ident>) -> Self",
        "edge(ident: impl Into<Ident>, edge: Edge) -> Self"
      ],
      "options": [
        "layer(layer: Layer) -> Self",
        "placement(placement: Placement) -> Self",
        "scrim(scrim: bool) -> Self",
        "child(content: impl IntoElement) -> Self",
        "on_dismiss(handler: impl Fn(&mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "overlay",
        "calendar",
        "date-range",
        "date-time"
      ]
    },
    {
      "name": "Pagination",
      "kind": "builder",
      "path": "gpui_kit::navigation::Pagination",
      "source": "crates/gpui-kit/src/navigation/pagination.rs",
      "summary": "First, previous, next, and last, plus a numbered range when there is one.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "page(page: usize) -> Self",
        "total_pages(total: usize) -> Self",
        "unknown_total(has_next: bool) -> Self",
        "total(total: PageTotal) -> Self",
        "siblings(siblings: usize) -> Self",
        "page_size(select: Entity<Select>) -> Self",
        "on_select(handler: impl Fn(usize, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "pagination"
      ]
    },
    {
      "name": "PermissionMatrix",
      "kind": "builder",
      "path": "gpui_kit::agent::PermissionMatrix",
      "source": "crates/gpui-kit/src/agent/permission.rs",
      "summary": "A grid of subjects against actions.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "action(action: PermissionAction) -> Self",
        "actions(actions: impl IntoIterator<Item = PermissionAction>) -> Self",
        "subject(subject: PermissionSubject) -> Self",
        "subjects(subjects: impl IntoIterator<Item = PermissionSubject>) -> Self",
        "on_change(handler: impl Fn(PermissionChange, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "permission-matrix"
      ]
    },
    {
      "name": "Popover",
      "kind": "view",
      "path": "gpui_kit::overlay::Popover",
      "source": "crates/gpui-kit/src/overlay/popover.rs",
      "summary": "A surface anchored to a trigger, holding whatever the caller puts in it.",
      "construct": [
        "new(ident: impl Into<Ident>, _window: &mut Window, cx: &mut Context<Self>) -> Self"
      ],
      "options": [
        "trigger(label: impl Into<SharedString>) -> Self",
        "trigger_icon(icon: Icon) -> Self",
        "content(content: impl Fn(&mut Window, &mut App) -> AnyElement + 'static) -> Self",
        "placement(placement: Placement) -> Self",
        "dismissable(dismissable: bool) -> Self"
      ],
      "commands": [
        "open(window: &mut Window, cx: &mut Context<Self>)",
        "close(window: &mut Window, cx: &mut Context<Self>)",
        "toggle(window: &mut Window, cx: &mut Context<Self>)",
        "dismiss(window: &mut Window, cx: &mut Context<Self>)"
      ],
      "queries": [
        "is_open() -> bool",
        "is_dismissable() -> bool"
      ],
      "reports": [
        "Opened",
        "Dismissed",
        "Closed"
      ],
      "scenes": [
        "actions",
        "menu",
        "context-menu",
        "popover",
        "command-palette",
        "toolbar",
        "permission-matrix",
        "hover-card",
        "menubar",
        "copy-button",
        "document-tabs"
      ]
    },
    {
      "name": "ProgressBar",
      "kind": "builder",
      "path": "gpui_kit::display::ProgressBar",
      "source": "crates/gpui-kit/src/display/progress.rs",
      "summary": "A horizontal bar for work whose extent is known.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "label(label: impl Into<SharedString>) -> Self",
        "fraction(fraction: f32) -> Self",
        "count(done: usize, total: usize) -> Self",
        "display(display: impl Into<SharedString>) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "actions",
        "content",
        "menu",
        "context-menu",
        "popover",
        "command-palette",
        "toolbar",
        "drawer",
        "motion-state",
        "ide-shell",
        "permission-matrix",
        "hover-card",
        "menubar",
        "copy-button",
        "document-tabs"
      ]
    },
    {
      "name": "ProgressCircle",
      "kind": "builder",
      "path": "gpui_kit::display::ProgressCircle",
      "source": "crates/gpui-kit/src/display/progress_circle.rs",
      "summary": "A ring for work in a place too tight for a bar.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "label(label: impl Into<SharedString>) -> Self",
        "fraction(fraction: f32) -> Self",
        "count(done: usize, total: usize) -> Self",
        "display(display: impl Into<SharedString>) -> Self",
        "centre(centre: impl Into<SharedString>) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "progress-circle"
      ]
    },
    {
      "name": "PulseLoader",
      "kind": "builder",
      "path": "gpui_kit::display::PulseLoader",
      "source": "crates/gpui-kit/src/display/loading.rs",
      "summary": "A row of pulsing cells, used while a request is in flight.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "label(label: impl Into<gpui::SharedString>) -> Self",
        "cell_size(cell_size: f32) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "button",
        "loading",
        "actions",
        "permission-matrix",
        "copy-button",
        "upload-list"
      ]
    },
    {
      "name": "Radio",
      "kind": "builder",
      "path": "gpui_kit::controls::Radio",
      "source": "crates/gpui-kit/src/controls/toggle.rs",
      "summary": "One option in a set where exactly one can hold.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "label(label: impl Into<SharedString>) -> Self",
        "description(description: impl Into<SharedString>) -> Self",
        "on_select(handler: impl Fn(&mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "choice",
        "motion-state"
      ]
    },
    {
      "name": "RangePicker",
      "kind": "view",
      "path": "gpui_kit::datetime::RangePicker",
      "source": "crates/gpui-kit/src/datetime/range.rs",
      "summary": "A calendar with two ends and a running account of what they add up to.",
      "construct": [
        "new(ident: impl Into<Ident>, adapter: SharedDateAdapter, window: &mut Window, cx: &mut Context<Self>) -> Self"
      ],
      "options": [
        "range(range: DayRange) -> Self"
      ],
      "commands": [
        "set_overlay(overlay: impl Fn(Day) -> Option<DayMark> + 'static, cx: &mut Context<Self>)",
        "set_range(range: Option<DayRange>, cx: &mut Context<Self>)",
        "set_disabled(disabled: bool, cx: &mut Context<Self>)"
      ],
      "queries": [
        "calendar() -> &Entity<Calendar>",
        "state() -> RangeState",
        "blocked() -> BlockedReport"
      ],
      "reports": [
        "StartPicked",
        "EndPicked"
      ],
      "scenes": [
        "calendar",
        "date-range",
        "date-time"
      ]
    },
    {
      "name": "SchemaForm",
      "kind": "view",
      "path": "gpui_kit::structured::SchemaForm",
      "source": "crates/gpui-kit/src/structured/schema_form.rs",
      "summary": "A form built from a schema.",
      "construct": [
        "new(ident: impl Into<Ident>, schema: Schema, window: &mut Window, cx: &mut Context<Self>) -> Self"
      ],
      "options": [],
      "commands": [
        "set_error(path: impl Into<SharedString>, message: impl Into<SharedString>, cx: &mut Context<Self>)",
        "clear_host_errors(cx: &mut Context<Self>)",
        "validate(cx: &mut Context<Self>) -> bool",
        "set_disabled(disabled: bool, cx: &mut Context<Self>)"
      ],
      "queries": [
        "values(cx: &App) -> Vec<(SharedString, FieldValue)>",
        "unrenderable() -> &[UnrenderableField]",
        "has_unrenderable_required() -> bool"
      ],
      "reports": [
        "Changed",
        "Submitted"
      ],
      "scenes": [
        "schema-form"
      ]
    },
    {
      "name": "ScrollArea",
      "kind": "builder",
      "path": "gpui_kit::layout::ScrollArea",
      "source": "crates/gpui-kit/src/layout/scroll.rs",
      "summary": "A scrollable region.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "axis(axis: ScrollAxis) -> Self",
        "vertical() -> Self",
        "horizontal() -> Self",
        "both() -> Self",
        "label(label: impl Into<SharedString>) -> Self",
        "width(width: f32) -> Self",
        "fit_height() -> Self",
        "height(height: f32) -> Self",
        "child(content: impl IntoElement) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "scroll-area",
        "scroll-shadow"
      ]
    },
    {
      "name": "SearchField",
      "kind": "view",
      "path": "gpui_kit::controls::SearchField",
      "source": "crates/gpui-kit/src/controls/search.rs",
      "summary": "A query field, a hit count, and next and previous.",
      "construct": [
        "new(ident: impl Into<Ident>, window: &mut Window, cx: &mut Context<Self>) -> Self"
      ],
      "options": [
        "placeholder(placeholder: impl Into<SharedString>) -> Self",
        "match_case(on: bool) -> Self",
        "whole_word(on: bool) -> Self"
      ],
      "commands": [
        "set_count(count: HitCount, cx: &mut Context<Self>)",
        "set_query(text: impl Into<SharedString>, cx: &mut Context<Self>)",
        "set_disabled(disabled: bool, cx: &mut Context<Self>)"
      ],
      "queries": [
        "count() -> &HitCount",
        "query_text(cx: &App) -> SharedString",
        "query_input() -> &Entity<TextInput>",
        "focus(window: &mut Window, cx: &mut Context<Self>)"
      ],
      "reports": [
        "QueryChanged",
        "Next",
        "Previous",
        "Cancelled",
        "MatchCaseToggled",
        "WholeWordToggled"
      ],
      "scenes": [
        "search-field",
        "find-replace"
      ]
    },
    {
      "name": "SegmentedControl",
      "kind": "builder",
      "path": "gpui_kit::controls::SegmentedControl",
      "source": "crates/gpui-kit/src/controls/segmented.rs",
      "summary": "A strip where exactly one segment holds.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "label(label: impl Into<SharedString>) -> Self",
        "segments(segments: impl IntoIterator<Item = Segment>) -> Self",
        "selected(id: impl Into<SharedString>) -> Self",
        "on_select(handler: impl Fn(SharedString, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "form",
        "toolbar",
        "motion-state",
        "schema-form"
      ]
    },
    {
      "name": "Select",
      "kind": "view",
      "path": "gpui_kit::controls::Select",
      "source": "crates/gpui-kit/src/controls/select.rs",
      "summary": "A closed list of options with one answer.",
      "construct": [
        "new(ident: impl Into<Ident>, _window: &mut Window, cx: &mut Context<Self>) -> Self"
      ],
      "options": [
        "options(options: impl IntoIterator<Item = SelectOption>) -> Self",
        "selected(id: impl Into<SharedString>) -> Self",
        "placeholder(placeholder: impl Into<SharedString>) -> Self",
        "invalid(invalid: bool) -> Self"
      ],
      "commands": [
        "set_options(options: Vec<SelectOption>, cx: &mut Context<Self>)",
        "set_selected(id: Option<SharedString>, cx: &mut Context<Self>)",
        "set_disabled(disabled: bool, cx: &mut Context<Self>)"
      ],
      "queries": [
        "selected_id() -> Option<&SharedString>",
        "selected_option() -> Option<&SelectOption>",
        "is_open() -> bool"
      ],
      "reports": [
        "Selected",
        "Opened",
        "Closed"
      ],
      "scenes": [
        "input",
        "textarea",
        "pagination",
        "search-field",
        "find-replace"
      ]
    },
    {
      "name": "ServerList",
      "kind": "builder",
      "path": "gpui_kit::agent::ServerList",
      "source": "crates/gpui-kit/src/agent/server_list.rs",
      "summary": "The connections an application holds, and what each one offers.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "server(server: ServerEntry) -> Self",
        "servers(servers: impl IntoIterator<Item = ServerEntry>) -> Self",
        "expanded(ids: impl IntoIterator<Item = SharedString>) -> Self",
        "expanded_ids<S: AsRef<str>>(ids: &[S]) -> Self",
        "selected(id: impl Into<SharedString>) -> Self",
        "on_select(handler: impl Fn(SharedString, &mut Window, &mut App) + 'static) -> Self",
        "on_retry(handler: impl Fn(SharedString, &mut Window, &mut App) + 'static) -> Self",
        "on_toggle(handler: impl Fn(SharedString, bool, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "server-list"
      ]
    },
    {
      "name": "SettingsRow",
      "kind": "builder",
      "path": "gpui_kit::controls::SettingsRow",
      "source": "crates/gpui-kit/src/controls/settings_row.rs",
      "summary": "One setting: what it is called on the left, what it is set to on the right.",
      "construct": [
        "new(ident: impl Into<Ident>, label: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "description(description: impl Into<SharedString>) -> Self",
        "badge(badge: impl Into<SharedString>) -> Self",
        "value(value: impl Into<SharedString>) -> Self",
        "control(control: impl IntoElement) -> Self",
        "managed(controller: impl Into<SharedString>) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "settings",
        "keybinding"
      ]
    },
    {
      "name": "SettingsSection",
      "kind": "builder",
      "path": "gpui_kit::controls::SettingsSection",
      "source": "crates/gpui-kit/src/controls/settings_row.rs",
      "summary": "A headed group of settings rows.",
      "construct": [
        "new(ident: impl Into<Ident>, title: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "description(description: impl Into<SharedString>) -> Self",
        "dimmed_by(reason: impl Into<SharedString>) -> Self",
        "row(row: SettingsRow) -> Self",
        "rows(rows: impl IntoIterator<Item = SettingsRow>) -> Self",
        "action(action: impl Fn(&mut Window, &mut App) -> AnyElement + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "settings",
        "keybinding"
      ]
    },
    {
      "name": "Sidebar",
      "kind": "builder",
      "path": "gpui_kit::navigation::Sidebar",
      "source": "crates/gpui-kit/src/navigation/sidebar.rs",
      "summary": "A collapsible navigation rail.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "section(section: SidebarSection) -> Self",
        "sections(sections: impl IntoIterator<Item = SidebarSection>) -> Self",
        "active(id: impl Into<SharedString>) -> Self",
        "collapsed(collapsed: bool) -> Self",
        "header(header: impl IntoElement) -> Self",
        "footer(footer: impl IntoElement) -> Self",
        "on_select(handler: impl Fn(SharedString, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "sidebar"
      ]
    },
    {
      "name": "Skeleton",
      "kind": "builder",
      "path": "gpui_kit::display::Skeleton",
      "source": "crates/gpui-kit/src/display/loading.rs",
      "summary": "Placeholder rows shown while a list's real shape is unknown.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "label(label: impl Into<gpui::SharedString>) -> Self",
        "rows(rows: usize) -> Self",
        "row_height(row_height: f32) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "button",
        "loading",
        "actions",
        "permission-matrix",
        "copy-button",
        "upload-list"
      ]
    },
    {
      "name": "Slider",
      "kind": "builder",
      "path": "gpui_kit::controls::Slider",
      "source": "crates/gpui-kit/src/controls/slider.rs",
      "summary": "A horizontal track with one handle.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "label(label: impl Into<SharedString>) -> Self",
        "range(min: f32, max: f32) -> Self",
        "value(value: f32) -> Self",
        "step(step: f32) -> Self",
        "display(display: impl Into<SharedString>) -> Self",
        "on_change(handler: impl Fn(f32, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "choice"
      ]
    },
    {
      "name": "SplitButton",
      "kind": "view",
      "path": "gpui_kit::controls::SplitButton",
      "source": "crates/gpui-kit/src/controls/split_button.rs",
      "summary": "One action, plus the ones it stands in for.",
      "construct": [
        "new(ident: impl Into<Ident>, window: &mut Window, cx: &mut Context<Self>) -> Self"
      ],
      "options": [
        "label(label: impl Into<SharedString>) -> Self",
        "icon(glyph: Icon) -> Self",
        "variant(variant: ButtonVariant) -> Self",
        "primary() -> Self",
        "secondary() -> Self",
        "items(items: impl IntoIterator<Item = MenuItem>, cx: &mut Context<Self>) -> Self",
        "menu_name(name: impl Into<SharedString>, cx: &mut Context<Self>) -> Self",
        "default_disabled(disabled: bool) -> Self",
        "on_click(handler: impl Fn(&mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [
        "set_disabled(disabled: bool, window: &mut Window, cx: &mut Context<Self>)"
      ],
      "queries": [
        "menu() -> &Entity<Menu>",
        "is_open(cx: &App) -> bool",
        "open_menu(window: &mut Window, cx: &mut Context<Self>)"
      ],
      "reports": [],
      "scenes": [
        "actions",
        "permission-matrix"
      ]
    },
    {
      "name": "SplitPane",
      "kind": "builder",
      "path": "gpui_kit::layout::SplitPane",
      "source": "crates/gpui-kit/src/layout/split.rs",
      "summary": "Two panes separated by a divider.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "axis(axis: SplitAxis) -> Self",
        "horizontal() -> Self",
        "vertical() -> Self",
        "ratio(ratio: f32) -> Self",
        "min_sizes(start: f32, end: f32) -> Self",
        "step(step: f32) -> Self",
        "collapsible(collapsible: bool) -> Self",
        "handle_label(label: impl Into<SharedString>) -> Self",
        "start(pane: impl IntoElement) -> Self",
        "end(pane: impl IntoElement) -> Self",
        "on_resize(handler: impl Fn(f32, &mut Window, &mut App) + 'static) -> Self",
        "on_collapse(handler: impl Fn(SplitSide, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "split-pane"
      ]
    },
    {
      "name": "SplitTree",
      "kind": "builder",
      "path": "gpui_kit::layout::SplitTree",
      "source": "crates/gpui-kit/src/layout/tree.rs",
      "summary": "Draws a [`SplitLayout`] and reports what the typist asked to change.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "layout(layout: SplitLayout) -> Self",
        "pane(id: impl Into<SharedString>, content: impl IntoElement) -> Self",
        "on_change(handler: impl Fn(SplitChange, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "split-tree"
      ]
    },
    {
      "name": "StatusBar",
      "kind": "builder",
      "path": "gpui_kit::layout::StatusBar",
      "source": "crates/gpui-kit/src/layout/status_bar.rs",
      "summary": "The strip along the bottom of a window.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "label(label: impl Into<SharedString>) -> Self",
        "item(group: StatusGroup, item: StatusItem) -> Self",
        "items(group: StatusGroup, items: impl IntoIterator<Item = StatusItem>) -> Self",
        "start(items: impl IntoIterator<Item = StatusItem>) -> Self",
        "centre(items: impl IntoIterator<Item = StatusItem>) -> Self",
        "end(items: impl IntoIterator<Item = StatusItem>) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "ide-shell"
      ]
    },
    {
      "name": "StatusDot",
      "kind": "builder",
      "path": "gpui_kit::display::StatusDot",
      "source": "crates/gpui-kit/src/display/status.rs",
      "summary": "A tone-colored dot, the smallest state indicator in the system.",
      "construct": [
        "new(tone: Tone) -> Self"
      ],
      "options": [
        "busy(ident: impl Into<Ident>) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "status",
        "approval"
      ]
    },
    {
      "name": "StatusLine",
      "kind": "builder",
      "path": "gpui_kit::display::StatusLine",
      "source": "crates/gpui-kit/src/display/status.rs",
      "summary": "A dot plus a short label, for inline state.",
      "construct": [
        "new(label: impl Into<SharedString>, tone: Tone) -> Self"
      ],
      "options": [
        "id(ident: impl Into<Ident>) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "status",
        "approval"
      ]
    },
    {
      "name": "StepList",
      "kind": "builder",
      "path": "gpui_kit::agent::StepList",
      "source": "crates/gpui-kit/src/agent/step_list.rs",
      "summary": "An ordered run of steps with a summary of how far it has got.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "step(step: Step) -> Self",
        "steps(steps: impl IntoIterator<Item = Step>) -> Self",
        "length(length: RunLength) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "step-list"
      ]
    },
    {
      "name": "Switch",
      "kind": "builder",
      "path": "gpui_kit::controls::Switch",
      "source": "crates/gpui-kit/src/controls/toggle.rs",
      "summary": "A control that takes effect the moment it is flipped.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "label(label: impl Into<SharedString>) -> Self",
        "description(description: impl Into<SharedString>) -> Self",
        "named(name: impl Into<SharedString>) -> Self",
        "on(on: bool) -> Self",
        "on_change(handler: impl Fn(bool, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "choice",
        "motion-state",
        "settings"
      ]
    },
    {
      "name": "Table",
      "kind": "builder",
      "path": "gpui_kit::data::Table",
      "source": "crates/gpui-kit/src/data/table.rs",
      "summary": "A table with a header that stays put while the body scrolls.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "column(column: Column) -> Self",
        "columns(columns: impl IntoIterator<Item = Column>) -> Self",
        "rows(rows: impl IntoIterator<Item = Row>) -> Self",
        "rows_from(count: usize, render_row: impl Fn(usize, &mut Window, &mut App) -> Row + 'static) -> Self",
        "sort(sort: Option<(SharedString, SortDirection)>) -> Self",
        "sorted_by(key: impl Into<SharedString>, direction: SortDirection) -> Self",
        "selected(id: impl Into<SharedString>) -> Self",
        "row_height(height: f32) -> Self",
        "visible_rows(rows: usize) -> Self",
        "on_sort(handler: impl Fn(SharedString, SortDirection, &mut Window, &mut App) + 'static) -> Self",
        "on_select(handler: impl Fn(SharedString, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "table",
        "data-grid",
        "data-grid-editing"
      ]
    },
    {
      "name": "Tabs",
      "kind": "builder",
      "path": "gpui_kit::navigation::Tabs",
      "source": "crates/gpui-kit/src/navigation/tabs.rs",
      "summary": "A row of tabs. The strip publishes one [`Role::Tab`] node per tab.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "tab(tab: TabItem) -> Self",
        "tabs(tabs: impl IntoIterator<Item = TabItem>) -> Self",
        "selected(id: impl Into<SharedString>) -> Self",
        "on_select(handler: impl Fn(SharedString, &mut Window, &mut App) + 'static) -> Self",
        "on_close(handler: impl Fn(SharedString, &mut Window, &mut App) + 'static) -> Self",
        "overflow_after(count: usize) -> Self",
        "overflow_menu(menu: Entity<Menu>) -> Self",
        "reorderable(reorderable: bool) -> Self",
        "accepts(predicate: impl Fn(&DragItem, &DropPosition) -> bool + 'static) -> Self",
        "on_reorder(handler: impl Fn(&DropIntent, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "tabs",
        "motion-state",
        "reading-direction",
        "document-tabs"
      ]
    },
    {
      "name": "Tag",
      "kind": "builder",
      "path": "gpui_kit::display::Tag",
      "source": "crates/gpui-kit/src/display/tag.rs",
      "summary": "A label with an optional remove action.",
      "construct": [
        "new(ident: impl Into<Ident>, label: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "tone(tone: Tone) -> Self",
        "on_remove(handler: impl Fn(&mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "actions",
        "content",
        "menu",
        "context-menu",
        "popover",
        "command-palette",
        "toolbar",
        "drawer",
        "ide-shell",
        "permission-matrix",
        "hover-card",
        "menubar",
        "copy-button",
        "document-tabs"
      ]
    },
    {
      "name": "TagInput",
      "kind": "view",
      "path": "gpui_kit::controls::TagInput",
      "source": "crates/gpui-kit/src/controls/tag_input.rs",
      "summary": "A field that collects a set of short tokens.",
      "construct": [
        "new(ident: impl Into<Ident>, window: &mut Window, cx: &mut Context<Self>) -> Self"
      ],
      "options": [
        "tags(tags: impl IntoIterator<Item = impl Into<SharedString>>) -> Self",
        "placeholder(placeholder: impl Into<SharedString>) -> Self",
        "max(max: usize) -> Self",
        "invalid(invalid: bool) -> Self"
      ],
      "commands": [
        "set_tags(tags: Vec<SharedString>, cx: &mut Context<Self>)",
        "set_disabled(disabled: bool, cx: &mut Context<Self>)"
      ],
      "queries": [
        "current() -> &[SharedString]",
        "field() -> &Entity<TextInput>",
        "targeted() -> Option<&SharedString>",
        "refusal() -> Option<&SharedString>"
      ],
      "reports": [
        "Added",
        "Removed",
        "Duplicate",
        "Refused"
      ],
      "scenes": [
        "form",
        "schema-form"
      ]
    },
    {
      "name": "TextArea",
      "kind": "view",
      "path": "gpui_kit::controls::TextArea",
      "source": "crates/gpui-kit/src/controls/textarea/mod.rs",
      "summary": "Wrapped, multi-line editable text.",
      "construct": [
        "new(ident: impl Into<Ident>, window: &mut Window, cx: &mut Context<Self>) -> Self"
      ],
      "options": [
        "placeholder(placeholder: impl Into<SharedString>) -> Self",
        "text(text: impl Into<SharedString>) -> Self",
        "invalid(invalid: bool) -> Self",
        "required(required: bool) -> Self",
        "rows(rows: usize) -> Self",
        "max_rows(max_rows: usize) -> Self",
        "max_length(max_length: usize) -> Self"
      ],
      "commands": [
        "set_value(value: impl Into<SharedString>, cx: &mut Context<Self>)",
        "set_disabled(disabled: bool, cx: &mut Context<Self>)",
        "set_invalid(invalid: bool, cx: &mut Context<Self>)"
      ],
      "queries": [
        "value() -> &SharedString",
        "is_empty() -> bool",
        "is_disabled() -> bool",
        "selected_range() -> Range<usize>",
        "cursor_offset() -> usize",
        "cursor_row() -> usize"
      ],
      "reports": [
        "Change",
        "Submit",
        "Cancel",
        "Focus",
        "Blur"
      ],
      "scenes": [
        "input",
        "textarea",
        "search-field",
        "find-replace"
      ]
    },
    {
      "name": "TextInput",
      "kind": "view",
      "path": "gpui_kit::controls::TextInput",
      "source": "crates/gpui-kit/src/controls/input/mod.rs",
      "summary": "One line of editable text.",
      "construct": [
        "new(ident: impl Into<Ident>, window: &mut Window, cx: &mut Context<Self>) -> Self"
      ],
      "options": [
        "placeholder(placeholder: impl Into<SharedString>) -> Self",
        "name(name: impl Into<SharedString>) -> Self",
        "text(text: impl Into<SharedString>) -> Self",
        "invalid(invalid: bool) -> Self",
        "required(required: bool) -> Self",
        "secret(secret: bool) -> Self",
        "bare(bare: bool) -> Self",
        "max_length(max_length: usize) -> Self"
      ],
      "commands": [
        "set_name(name: impl Into<SharedString>, cx: &mut Context<Self>)",
        "set_value(value: impl Into<SharedString>, cx: &mut Context<Self>)",
        "set_placeholder(placeholder: impl Into<SharedString>, cx: &mut Context<Self>)",
        "set_text_quietly(value: impl Into<SharedString>, cx: &mut Context<Self>)",
        "set_disabled(disabled: bool, cx: &mut Context<Self>)",
        "set_invalid(invalid: bool, cx: &mut Context<Self>)"
      ],
      "queries": [
        "value() -> &SharedString",
        "is_empty() -> bool",
        "is_disabled() -> bool",
        "is_secret() -> bool",
        "selected_range() -> Range<usize>",
        "cursor_offset() -> usize"
      ],
      "reports": [
        "Change",
        "Submit",
        "Cancel",
        "BackspaceAtStart",
        "Focus",
        "Blur"
      ],
      "scenes": [
        "input",
        "textarea",
        "form",
        "schema-form",
        "search-field",
        "find-replace"
      ]
    },
    {
      "name": "ThinkingBlock",
      "kind": "builder",
      "path": "gpui_kit::agent::ThinkingBlock",
      "source": "crates/gpui-kit/src/agent/thinking.rs",
      "summary": "A collapsed block of model reasoning.",
      "construct": [
        "new(ident: impl Into<Ident>, reasoning: Reasoning) -> Self"
      ],
      "options": [
        "expanded(expanded: bool) -> Self",
        "thinking(thinking: bool) -> Self",
        "on_toggle(handler: impl Fn(bool, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "thinking"
      ]
    },
    {
      "name": "TimeInput",
      "kind": "view",
      "path": "gpui_kit::datetime::TimeInput",
      "source": "crates/gpui-kit/src/datetime/time_input.rs",
      "summary": "A segmented time field over the host's own clock.",
      "construct": [
        "new(ident: impl Into<Ident>, adapter: SharedDateAdapter, _window: &mut Window, cx: &mut Context<Self>) -> Self"
      ],
      "options": [
        "value(value: TimeOfDay) -> Self",
        "seconds(seconds: bool) -> Self"
      ],
      "commands": [
        "set_value(value: TimeOfDay, cx: &mut Context<Self>)",
        "set_disabled(disabled: bool, cx: &mut Context<Self>)"
      ],
      "queries": [
        "current() -> TimeOfDay",
        "active_segment() -> Segment",
        "clock() -> Clock"
      ],
      "reports": [
        "Changed"
      ],
      "scenes": [
        "calendar",
        "date-range",
        "date-time"
      ]
    },
    {
      "name": "Timeline",
      "kind": "builder",
      "path": "gpui_kit::display::Timeline",
      "source": "crates/gpui-kit/src/display/timeline.rs",
      "summary": "A chronological feed, optionally divided into days.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "group(group: TimelineGroup) -> Self",
        "groups(groups: impl IntoIterator<Item = TimelineGroup>) -> Self",
        "entries(entries: impl IntoIterator<Item = TimelineEntry>) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "actions",
        "content",
        "menu",
        "context-menu",
        "popover",
        "command-palette",
        "toast",
        "data-grid",
        "toolbar",
        "drawer",
        "detail",
        "ide-shell",
        "conversation",
        "permission-matrix",
        "server-list",
        "hover-card",
        "menubar",
        "copy-button",
        "document-tabs",
        "notification-center",
        "failure-panel"
      ]
    },
    {
      "name": "ToastLayer",
      "kind": "view",
      "path": "gpui_kit::overlay::ToastLayer",
      "source": "crates/gpui-kit/src/overlay/toast.rs",
      "summary": "The stack of notifications for one window.",
      "construct": [
        "new(cx: &mut Context<Self>) -> Self"
      ],
      "options": [
        "corner(corner: ToastCorner) -> Self",
        "capacity(capacity: usize) -> Self"
      ],
      "commands": [
        "push(toast: Toast, cx: &mut Context<Self>)",
        "dismiss(ident: &str, cx: &mut Context<Self>) -> bool",
        "clear(cx: &mut Context<Self>)"
      ],
      "queries": [
        "len() -> usize",
        "is_empty() -> bool",
        "phase(ident: &str) -> Option<Phase>"
      ],
      "reports": [],
      "scenes": [
        "toast"
      ]
    },
    {
      "name": "Toggle",
      "kind": "builder",
      "path": "gpui_kit::controls::Toggle",
      "source": "crates/gpui-kit/src/controls/toggle_button.rs",
      "summary": "A button that stays in.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "label(label: impl Into<SharedString>) -> Self",
        "accessible_name(name: impl Into<SharedString>) -> Self",
        "icon(glyph: Icon) -> Self",
        "icon_only(glyph: Icon, name: impl Into<SharedString>) -> Self",
        "pressed(pressed: bool) -> Self",
        "variant(variant: ButtonVariant) -> Self",
        "secondary() -> Self",
        "ghost() -> Self",
        "join(join: ButtonJoin) -> Self",
        "semantic_parent(parent: impl Into<SharedString>) -> Self",
        "track_focus(handle: &FocusHandle) -> Self",
        "on_press(handler: impl Fn(bool, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "accordion",
        "tree",
        "split-pane",
        "motion-state",
        "drag-tree",
        "split-tree",
        "thinking",
        "json-view",
        "server-list",
        "reading-direction",
        "toggle",
        "collapsible"
      ]
    },
    {
      "name": "ToggleGroup",
      "kind": "builder",
      "path": "gpui_kit::controls::ToggleGroup",
      "source": "crates/gpui-kit/src/controls/toggle_button.rs",
      "summary": "A run of toggles where none, one, or several may be in.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "label(label: impl Into<SharedString>) -> Self",
        "items(items: impl IntoIterator<Item = ToggleItem>) -> Self",
        "selection(selection: ToggleSelection) -> Self",
        "pressed(ids: impl IntoIterator<Item = SharedString>) -> Self",
        "pressed_ids<S: AsRef<str>>(ids: &[S]) -> Self",
        "variant(variant: ButtonVariant) -> Self",
        "on_change(handler: impl Fn(Vec<SharedString>, SharedString, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "accordion",
        "tree",
        "split-pane",
        "motion-state",
        "drag-tree",
        "split-tree",
        "thinking",
        "json-view",
        "server-list",
        "reading-direction",
        "toggle",
        "collapsible"
      ]
    },
    {
      "name": "ToolCallCard",
      "kind": "builder",
      "path": "gpui_kit::agent::ToolCallCard",
      "source": "crates/gpui-kit/src/agent/tool_call.rs",
      "summary": "One tool invocation, in whichever of its five states holds.",
      "construct": [
        "new(ident: impl Into<Ident>, tool: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "arguments(arguments: impl Into<ToolBody>) -> Self",
        "state(state: ToolCallState) -> Self",
        "elapsed(elapsed: impl Into<Elapsed>) -> Self",
        "on_retry(handler: impl Fn(&mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "tool-call",
        "step-list"
      ]
    },
    {
      "name": "Toolbar",
      "kind": "builder",
      "path": "gpui_kit::layout::Toolbar",
      "source": "crates/gpui-kit/src/layout/toolbar.rs",
      "summary": "A bar of grouped actions.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "label(label: impl Into<SharedString>) -> Self",
        "group(id: impl Into<SharedString>, items: impl IntoIterator<Item = ToolbarItem>) -> Self",
        "spacer() -> Self",
        "overflow_after(count: usize) -> Self",
        "overflow_menu(menu: Entity<Menu>) -> Self"
      ],
      "commands": [],
      "queries": [
        "item_count() -> usize"
      ],
      "reports": [],
      "scenes": [
        "toolbar"
      ]
    },
    {
      "name": "Tooltip",
      "kind": "builder",
      "path": "gpui_kit::overlay::Tooltip",
      "source": "crates/gpui-kit/src/overlay/tooltip.rs",
      "summary": "A themed help surface.",
      "construct": [
        "new(ident: impl Into<Ident>, text: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "describes(control: impl Into<SharedString>) -> Self",
        "view(cx: &mut App) -> AnyView"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "tooltip"
      ]
    },
    {
      "name": "TooltipView",
      "kind": "view",
      "path": "gpui_kit::overlay::TooltipView",
      "source": "crates/gpui-kit/src/overlay/tooltip.rs",
      "summary": "",
      "construct": [],
      "options": [],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": []
    },
    {
      "name": "TransportBar",
      "kind": "builder",
      "path": "gpui_kit::content::TransportBar",
      "source": "crates/gpui-kit/src/content/transport.rs",
      "summary": "A transport for one piece of media.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "label(label: impl Into<SharedString>) -> Self",
        "state(state: TransportState) -> Self",
        "position(seconds: f32) -> Self",
        "duration(seconds: f32) -> Self",
        "unknown_duration() -> Self",
        "elapsed(elapsed: impl Into<SharedString>) -> Self",
        "remaining(remaining: impl Into<SharedString>) -> Self",
        "buffered(ranges: impl IntoIterator<Item = BufferedRange>) -> Self",
        "volume(volume: f32) -> Self",
        "muted(muted: bool) -> Self",
        "speeds(speeds: impl IntoIterator<Item = f32>, current: f32) -> Self",
        "step_seconds(seconds: f32) -> Self",
        "has_previous(has_previous: bool) -> Self",
        "has_next(has_next: bool) -> Self",
        "on_event(handler: impl Fn(&TransportEvent, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "transport"
      ]
    },
    {
      "name": "Tree",
      "kind": "builder",
      "path": "gpui_kit::data::Tree",
      "source": "crates/gpui-kit/src/data/tree.rs",
      "summary": "A disclosure hierarchy.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "node(node: TreeNode) -> Self",
        "nodes(nodes: impl IntoIterator<Item = TreeNode>) -> Self",
        "expanded(ids: impl IntoIterator<Item = SharedString>) -> Self",
        "expanded_ids<S: AsRef<str>>(ids: &[S]) -> Self",
        "selected(id: impl Into<SharedString>) -> Self",
        "visible_rows(rows: usize) -> Self",
        "on_toggle(handler: impl Fn(SharedString, bool, &mut Window, &mut App) + 'static) -> Self",
        "on_select(handler: impl Fn(SharedString, &mut Window, &mut App) + 'static) -> Self",
        "reorderable(reorderable: bool) -> Self",
        "accepts(predicate: impl Fn(&DragItem, &DropPosition) -> bool + 'static) -> Self",
        "on_move(handler: impl Fn(&DropIntent, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "tree",
        "drag-tree",
        "split-tree",
        "reading-direction"
      ]
    },
    {
      "name": "UploadList",
      "kind": "builder",
      "path": "gpui_kit::controls::UploadList",
      "source": "crates/gpui-kit/src/controls/upload_list.rs",
      "summary": "A list of files being uploaded, optionally over the zone that took them.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "upload(upload: Upload) -> Self",
        "uploads(uploads: impl IntoIterator<Item = Upload>) -> Self",
        "dropzone(zone: Dropzone) -> Self",
        "show_overall(show: bool) -> Self",
        "on_retry(handler: impl Fn(SharedString, &mut Window, &mut App) + 'static) -> Self",
        "on_cancel(handler: impl Fn(SharedString, &mut Window, &mut App) + 'static) -> Self",
        "on_remove(handler: impl Fn(SharedString, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [
        "overall() -> OverallProgress"
      ],
      "reports": [],
      "scenes": [
        "upload-list"
      ]
    },
    {
      "name": "Wizard",
      "kind": "builder",
      "path": "gpui_kit::navigation::Wizard",
      "source": "crates/gpui-kit/src/navigation/wizard.rs",
      "summary": "A multi-step flow: the steps, the current step's body, and the way on.",
      "construct": [
        "new(ident: impl Into<Ident>) -> Self"
      ],
      "options": [
        "step(step: WizardStep) -> Self",
        "steps(steps: impl IntoIterator<Item = WizardStep>) -> Self",
        "layout(layout: WizardLayout) -> Self",
        "vertical() -> Self",
        "body(body: impl IntoElement) -> Self",
        "back_to(step: impl Into<SharedString>) -> Self",
        "finish(finish: bool) -> Self",
        "can_advance(can_advance: bool) -> Self",
        "back_label(label: impl Into<SharedString>) -> Self",
        "next_label(label: impl Into<SharedString>) -> Self",
        "finish_label(label: impl Into<SharedString>) -> Self",
        "on_navigate(handler: impl Fn(&WizardIntent, &mut Window, &mut App) + 'static) -> Self"
      ],
      "commands": [],
      "queries": [],
      "reports": [],
      "scenes": [
        "wizard"
      ]
    }
  ],
  "types": [
    {
      "name": "AccordionSection",
      "path": "gpui_kit::navigation::AccordionSection",
      "summary": "One disclosure section: a header the typist can operate and a body that exists only while the section is open.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, title: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "description(description: impl Into<SharedString>) -> Self",
        "disabled(disabled: bool) -> Self",
        "body(body: impl IntoElement) -> Self"
      ]
    },
    {
      "name": "ActiveDrag",
      "path": "gpui_kit::interaction::ActiveDrag",
      "summary": "The drag as anything outside the module can see it.",
      "variants": [],
      "construct": [],
      "options": []
    },
    {
      "name": "Activity",
      "path": "gpui_kit::motion::Activity",
      "summary": "The shape of a piece of work that is currently under way.",
      "variants": [
        "Advancing",
        "Working",
        "Deliberating"
      ],
      "construct": [],
      "options": [
        "period_ms(theme: &Theme) -> u64",
        "curve(theme: &Theme) -> CubicBezier"
      ]
    },
    {
      "name": "Align",
      "path": "gpui_kit::data::Align",
      "summary": "Where a cell's content sits inside its column.",
      "variants": [
        "Start",
        "Center",
        "End"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "AlwaysScope",
      "path": "gpui_kit::agent::AlwaysScope",
      "summary": "What a standing approval covers.",
      "variants": [
        "Session",
        "Tool",
        "Path",
        "Host"
      ],
      "construct": [
        "tool(name: impl Into<SharedString>) -> Self",
        "path(path: impl Into<SharedString>) -> Self",
        "host(host: impl Into<SharedString>) -> Self"
      ],
      "options": []
    },
    {
      "name": "ApprovalDecision",
      "path": "gpui_kit::agent::ApprovalDecision",
      "summary": "How far an approval reaches.",
      "variants": [
        "Once",
        "Always"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "ApprovalEvent",
      "path": "gpui_kit::agent::ApprovalEvent",
      "summary": "What the prompt reports. It applies none of it.",
      "variants": [
        "Approved",
        "Declined"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "ApprovalStatus",
      "path": "gpui_kit::agent::ApprovalStatus",
      "summary": "What has happened to this request.",
      "variants": [
        "Pending",
        "Declined",
        "Approved",
        "Expired",
        "Superseded"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "AspectFit",
      "path": "gpui_kit::layout::AspectFit",
      "summary": "Which dimension the parent decides, leaving the other to the ratio.",
      "variants": [
        "Width",
        "Height"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "AsyncStatus",
      "path": "gpui_kit::state::AsyncStatus",
      "summary": "What is happening to an [`AsyncValue`] right now.",
      "variants": [
        "Idle",
        "Loading",
        "Refreshing",
        "Ready",
        "Empty",
        "Unavailable",
        "Error"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "AsyncValue",
      "path": "gpui_kit::state::AsyncValue",
      "summary": "A value and, separately, what is currently happening to it.",
      "variants": [],
      "construct": [
        "loading() -> Self",
        "ready(value: T) -> Self"
      ],
      "options": []
    },
    {
      "name": "Attachment",
      "path": "gpui_kit::content::Attachment",
      "summary": "Something carried alongside a message. The list names it and fetches nothing.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, name: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "detail(detail: impl Into<SharedString>) -> Self"
      ]
    },
    {
      "name": "Basis",
      "path": "gpui_kit::agent::Basis",
      "summary": "How a number was arrived at.",
      "variants": [
        "Measured",
        "Estimated"
      ],
      "construct": [],
      "options": [
        "name() -> &'static str",
        "is_estimate() -> bool"
      ]
    },
    {
      "name": "Block",
      "path": "gpui_kit::content::Block",
      "summary": "One block of a document.",
      "variants": [
        "Heading",
        "Paragraph",
        "Code",
        "Quote",
        "List",
        "Rule",
        "Table",
        "Html"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "BlockedDay",
      "path": "gpui_kit::datetime::BlockedDay",
      "summary": "One day inside a range the adapter refuses, in the host's own words.",
      "variants": [],
      "construct": [],
      "options": []
    },
    {
      "name": "BlockedReport",
      "path": "gpui_kit::datetime::BlockedReport",
      "summary": "What the picker can say about the days between the two ends.",
      "variants": [
        "NotApplicable",
        "Unchecked",
        "Clear",
        "Blocked"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "Body",
      "path": "gpui_kit::data::Body",
      "summary": "",
      "variants": [],
      "construct": [],
      "options": []
    },
    {
      "name": "BufferedRange",
      "path": "gpui_kit::content::BufferedRange",
      "summary": "One span of media the host already holds, in seconds.",
      "variants": [],
      "construct": [
        "new(start: f32, end: f32) -> Self"
      ],
      "options": []
    },
    {
      "name": "ButtonJoin",
      "path": "gpui_kit::controls::ButtonJoin",
      "summary": "Where a button sits in a joined run of them.",
      "variants": [
        "Alone",
        "Leading",
        "Middle",
        "Trailing"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "ButtonVariant",
      "path": "gpui_kit::controls::ButtonVariant",
      "summary": "How much weight an action carries. Primary is the one decision a local area is asking for; Danger is reserved for irreversible intent.",
      "variants": [
        "Primary",
        "Secondary",
        "Ghost",
        "Danger",
        "Link"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "CalendarEvent",
      "path": "gpui_kit::datetime::CalendarEvent",
      "summary": "What a calendar reports. The owner decides what any of it means.",
      "variants": [
        "Picked",
        "MonthShown",
        "Hovered"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "Catalog",
      "path": "gpui_kit::agent::Catalog",
      "summary": "What is known about what a server offers.",
      "variants": [
        "Unasked",
        "Asking",
        "Offers",
        "Unavailable"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "Cell",
      "path": "gpui_kit::data::Cell",
      "summary": "One cell's content, and whether it is an assertion target.",
      "variants": [],
      "construct": [
        "new(content: impl IntoElement) -> Self"
      ],
      "options": [
        "text(text: impl Into<SharedString>) -> Self",
        "published(published: bool) -> Self"
      ]
    },
    {
      "name": "CellAlign",
      "path": "gpui_kit::content::CellAlign",
      "summary": "Which way a table column's cells are set.",
      "variants": [
        "Start",
        "Center",
        "End"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "Clock",
      "path": "gpui_kit::datetime::Clock",
      "summary": "The clock the host keeps: how far its hours run, and what it calls the two halves of a twelve-hour day.",
      "variants": [],
      "construct": [],
      "options": []
    },
    {
      "name": "CodeBlock",
      "path": "gpui_kit::content::CodeBlock",
      "summary": "A fenced block, as handed to a host that colours code.",
      "variants": [],
      "construct": [],
      "options": []
    },
    {
      "name": "CodeLine",
      "path": "gpui_kit::content::CodeLine",
      "summary": "One line of code, identified by its number.",
      "variants": [],
      "construct": [
        "new(number: usize, text: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "spans(spans: impl IntoIterator<Item = CodeSpan>) -> Self",
        "mark(mark: LineMark) -> Self"
      ]
    },
    {
      "name": "CodeSpan",
      "path": "gpui_kit::content::CodeSpan",
      "summary": "One coloured run of a code block, in byte offsets into its text.",
      "variants": [],
      "construct": [],
      "options": []
    },
    {
      "name": "Column",
      "path": "gpui_kit::data::Column",
      "summary": "One column. `key` addresses the cells that belong to it and appears in every id the column publishes.",
      "variants": [],
      "construct": [
        "new(key: impl Into<SharedString>, header: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "width(width: ColumnWidth) -> Self",
        "fixed(width: f32) -> Self",
        "flex(share: f32) -> Self",
        "align(align: Align) -> Self",
        "sortable(sortable: bool) -> Self"
      ]
    },
    {
      "name": "ColumnWidth",
      "path": "gpui_kit::data::ColumnWidth",
      "summary": "How wide a column is: a fixed measure, or a share of what is left over.",
      "variants": [
        "Fixed",
        "Flex"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "ComboboxEvent",
      "path": "gpui_kit::controls::ComboboxEvent",
      "summary": "What a combobox reports. The owner decides what any of it means.",
      "variants": [
        "QueryChanged",
        "Selected",
        "Custom",
        "Opened",
        "Closed"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "Command",
      "path": "gpui_kit::overlay::Command",
      "summary": "One thing the application can do.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, label: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "section(section: impl Into<SharedString>) -> Self",
        "shortcut(keystroke: impl Into<SharedString>) -> Self",
        "unavailable(reason: impl Into<SharedString>) -> Self"
      ]
    },
    {
      "name": "CommandPaletteEvent",
      "path": "gpui_kit::overlay::CommandPaletteEvent",
      "summary": "What the palette reports. The owner decides what any of it means.",
      "variants": [
        "QueryChanged",
        "Invoked",
        "Dismissed"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "ContextMenuEvent",
      "path": "gpui_kit::overlay::ContextMenuEvent",
      "summary": "What a context menu reports.",
      "variants": [
        "Opened",
        "Invoked",
        "Dismissed",
        "Closed"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "CopyEvent",
      "path": "gpui_kit::controls::CopyEvent",
      "summary": "What a copy button reports. The owner decides what any of it means.",
      "variants": [
        "Copied",
        "Failed"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "CopyState",
      "path": "gpui_kit::controls::CopyState",
      "summary": "What the button is currently claiming.",
      "variants": [
        "Idle",
        "Copied",
        "Failed"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "CostLine",
      "path": "gpui_kit::agent::CostLine",
      "summary": "One line of a [`CostMeter`].",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, label: impl Into<SharedString>, reading: Reading) -> Self"
      ],
      "options": [
        "stale(verified: LastVerified) -> Self"
      ]
    },
    {
      "name": "Crumb",
      "path": "gpui_kit::navigation::Crumb",
      "summary": "One place on the trail.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, label: impl Into<SharedString>) -> Self"
      ],
      "options": []
    },
    {
      "name": "CubicBezier",
      "path": "gpui_kit::motion::CubicBezier",
      "summary": "A CSS-compatible cubic-bezier curve, evaluated in pure Rust so a curve can be asserted without a window.",
      "variants": [],
      "construct": [],
      "options": [
        "eval(input: f32) -> f32"
      ]
    },
    {
      "name": "DateInputEvent",
      "path": "gpui_kit::datetime::DateInputEvent",
      "summary": "What a date field reports. The owner decides what any of it means.",
      "variants": [
        "Changed",
        "Unparsable",
        "Opened",
        "Closed",
        "Submit"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "Day",
      "path": "gpui_kit::datetime::Day",
      "summary": "One day, meaningful only to the adapter that produced it.",
      "variants": [],
      "construct": [],
      "options": []
    },
    {
      "name": "DayMark",
      "path": "gpui_kit::datetime::DayMark",
      "summary": "A mark the host puts on a day, such as \"three runs finished here\".",
      "variants": [],
      "construct": [
        "new(label: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "tone(tone: Tone) -> Self"
      ]
    },
    {
      "name": "DayRange",
      "path": "gpui_kit::datetime::DayRange",
      "summary": "A range as the caller holds it: a start, and an end once there is one.",
      "variants": [],
      "construct": [
        "starting(start: Day) -> Self",
        "new(start: Day, end: Day) -> Self"
      ],
      "options": []
    },
    {
      "name": "DeliveryState",
      "path": "gpui_kit::content::DeliveryState",
      "summary": "What a host said about a message's journey.",
      "variants": [
        "Sending",
        "Sent",
        "Delivered",
        "Read",
        "Failed"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "DescriptionItem",
      "path": "gpui_kit::display::DescriptionItem",
      "summary": "One term and what it describes.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, term: impl Into<SharedString>, value: impl Into<DescriptionValue>) -> Self"
      ],
      "options": [
        "copyable(copyable: bool) -> Self"
      ]
    },
    {
      "name": "DescriptionValue",
      "path": "gpui_kit::display::DescriptionValue",
      "summary": "What a detail row holds.",
      "variants": [
        "Text",
        "Unknown",
        "NotApplicable",
        "Redacted"
      ],
      "construct": [
        "text(value: impl Into<SharedString>) -> Self",
        "redacted(shape: impl Into<SharedString>) -> Self",
        "redacted_from(secret: &str, cx: &App) -> Self"
      ],
      "options": []
    },
    {
      "name": "DialogEvent",
      "path": "gpui_kit::overlay::DialogEvent",
      "summary": "What the dialog reports. The owner decides what any of it means.",
      "variants": [
        "Opened",
        "Confirmed",
        "Cancelled",
        "Dismissed",
        "Closed"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "Diff",
      "path": "gpui_kit::canvas::Diff",
      "summary": "How much a step changed, in lines.",
      "variants": [],
      "construct": [
        "new(added: usize, removed: usize) -> Self"
      ],
      "options": [
        "is_empty() -> bool"
      ]
    },
    {
      "name": "DockEvent",
      "path": "gpui_kit::layout::DockEvent",
      "summary": "What the dock reports. The caller decides what any of it means.",
      "variants": [
        "PanelSelected",
        "PanelMoved",
        "RegionCollapsed",
        "RegionResized"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "DockPanel",
      "path": "gpui_kit::layout::DockPanel",
      "summary": "One panel: a name, a glyph, a count, and whatever the caller puts inside.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, title: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "icon(glyph: Icon) -> Self",
        "badge(badge: impl Into<SharedString>) -> Self",
        "unavailable(reason: impl Into<SharedString>) -> Self",
        "content(content: impl IntoElement) -> Self"
      ]
    },
    {
      "name": "DockRegion",
      "path": "gpui_kit::layout::DockRegion",
      "summary": "Where a panel sits.",
      "variants": [
        "Left",
        "Centre",
        "Right",
        "Bottom"
      ],
      "construct": [],
      "options": [
        "name() -> &'static str"
      ]
    },
    {
      "name": "Document",
      "path": "gpui_kit::content::Document",
      "summary": "A parsed document.",
      "variants": [],
      "construct": [
        "parse(source: &str) -> Self"
      ],
      "options": []
    },
    {
      "name": "DragItem",
      "path": "gpui_kit::interaction::DragItem",
      "summary": "What a drag is carrying.",
      "variants": [],
      "construct": [
        "new(source: impl Into<SharedString>, id: impl Into<SharedString>, label: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "kind(kind: impl Into<SharedString>) -> Self",
        "icon(icon: Icon) -> Self"
      ]
    },
    {
      "name": "DrawerEvent",
      "path": "gpui_kit::overlay::DrawerEvent",
      "summary": "What the drawer reports. The owner decides what any of it means.",
      "variants": [
        "Opened",
        "Dismissed",
        "Closed"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "DropAxis",
      "path": "gpui_kit::interaction::DropAxis",
      "summary": "Which way a target's slots are laid out.",
      "variants": [
        "Vertical",
        "Horizontal"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "DropIntent",
      "path": "gpui_kit::interaction::DropIntent",
      "summary": "One drop, as it is reported to the host.",
      "variants": [],
      "construct": [],
      "options": []
    },
    {
      "name": "DropPosition",
      "path": "gpui_kit::interaction::DropPosition",
      "summary": "Where a dropped item goes, expressed against something already there.",
      "variants": [
        "Before",
        "After",
        "Into"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "DropZone",
      "path": "gpui_kit::interaction::DropZone",
      "summary": "",
      "variants": [],
      "construct": [],
      "options": []
    },
    {
      "name": "DropzoneState",
      "path": "gpui_kit::controls::DropzoneState",
      "summary": "What a dropzone is currently saying.",
      "variants": [
        "Idle",
        "Accepting",
        "Refusing"
      ],
      "construct": [],
      "options": [
        "name() -> &'static str"
      ]
    },
    {
      "name": "Easing",
      "path": "gpui_kit::motion::Easing",
      "summary": "A curve named by role rather than by control points.",
      "variants": [
        "Linear",
        "Standard",
        "EaseIn",
        "EaseOut",
        "EaseInOut",
        "Emphasized",
        "Overshoot",
        "Exit",
        "Settle",
        "Custom"
      ],
      "construct": [],
      "options": [
        "curve(theme: &Theme) -> CubicBezier"
      ]
    },
    {
      "name": "Edge",
      "path": "gpui_kit::overlay::Edge",
      "summary": "One side of the window.",
      "variants": [
        "Left",
        "Right",
        "Top",
        "Bottom"
      ],
      "construct": [],
      "options": [
        "is_horizontal() -> bool",
        "is_leading() -> bool"
      ]
    },
    {
      "name": "EdgeKind",
      "path": "gpui_kit::canvas::EdgeKind",
      "summary": "What a connection means.",
      "variants": [
        "Flow",
        "Feedback"
      ],
      "construct": [],
      "options": [
        "color(theme: &Theme) -> Hsla"
      ]
    },
    {
      "name": "EditIntent",
      "path": "gpui_kit::data::EditIntent",
      "summary": "One finished edit, as it is reported to the host.",
      "variants": [],
      "construct": [],
      "options": []
    },
    {
      "name": "EditOutcome",
      "path": "gpui_kit::data::EditOutcome",
      "summary": "How an edit ended.",
      "variants": [
        "Commit",
        "Revert"
      ],
      "construct": [],
      "options": [
        "as_str() -> &'static str"
      ]
    },
    {
      "name": "EditingCell",
      "path": "gpui_kit::data::EditingCell",
      "summary": "The cell the caller has opened for editing, and the value it holds.",
      "variants": [],
      "construct": [
        "new(row: impl Into<SharedString>, column: impl Into<SharedString>, value: impl Into<SharedString>) -> Self"
      ],
      "options": []
    },
    {
      "name": "Editor",
      "path": "gpui_kit::controls::Editor",
      "summary": "",
      "variants": [],
      "construct": [],
      "options": []
    },
    {
      "name": "Elapsed",
      "path": "gpui_kit::agent::Elapsed",
      "summary": "How long a call took, as far as anyone has said.",
      "variants": [
        "Took",
        "Unknown"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "EmptyKind",
      "path": "gpui_kit::display::EmptyKind",
      "summary": "Which fact the surface is reporting.",
      "variants": [
        "Empty",
        "Unstarted",
        "Unavailable",
        "Failed"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "Entrance",
      "path": "gpui_kit::motion::Entrance",
      "summary": "How an element arrives.",
      "variants": [
        "Fade",
        "Rise",
        "Menu",
        "Dialog"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "Entry",
      "path": "gpui_kit::overlay::Entry",
      "summary": "",
      "variants": [],
      "construct": [],
      "options": []
    },
    {
      "name": "EntryTime",
      "path": "gpui_kit::display::EntryTime",
      "summary": "When an entry happened, as far as anyone knows.",
      "variants": [
        "At",
        "Unknown"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "Expanded",
      "path": "gpui_kit::data::Expanded",
      "summary": "One opened row: its identity, and where it sits.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, index: usize) -> Self"
      ],
      "options": []
    },
    {
      "name": "FieldState",
      "path": "gpui_kit::controls::FieldState",
      "summary": "What an editable surface currently reports about itself.",
      "variants": [],
      "construct": [],
      "options": [
        "focused(focused: bool) -> Self",
        "invalid(invalid: bool) -> Self",
        "disabled(disabled: bool) -> Self"
      ]
    },
    {
      "name": "FieldValue",
      "path": "gpui_kit::structured::FieldValue",
      "summary": "What one field currently holds.",
      "variants": [
        "Text",
        "Number",
        "Boolean",
        "Choice",
        "List",
        "Absent",
        "Unrenderable"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "FilterCondition",
      "path": "gpui_kit::controls::FilterCondition",
      "summary": "One condition the list is narrowed by.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, field: impl Into<SharedString>, operator: impl Into<SharedString>, value: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "tone(tone: Tone) -> Self"
      ]
    },
    {
      "name": "FindReplaceEvent",
      "path": "gpui_kit::controls::FindReplaceEvent",
      "summary": "What a find-and-replace surface reports. It replaces nothing.",
      "variants": [
        "Search",
        "ReplacementChanged",
        "ReplaceOne",
        "ReplaceAll"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "FitMode",
      "path": "gpui_kit::content::FitMode",
      "summary": "How the image is sized inside the frame.",
      "variants": [
        "Contain",
        "Cover",
        "Actual",
        "Zoom"
      ],
      "construct": [],
      "options": [
        "name() -> &'static str"
      ]
    },
    {
      "name": "FixtureDateAdapter",
      "path": "gpui_kit::datetime::FixtureDateAdapter",
      "summary": "A fixture calendar: proleptic Gregorian, English labels, weeks starting on Monday, and whatever \"today\" the test pinned.",
      "variants": [],
      "construct": [
        "pinned(year: i32, month: u32, day: u32) -> Self",
        "without_today() -> Self"
      ],
      "options": [
        "blocking(year: i32, month: u32, day: u32, reason: &'static str) -> Self",
        "twelve_hour(twelve_hour: bool) -> Self",
        "month_bounds(first: MonthKey, last: MonthKey) -> Self"
      ]
    },
    {
      "name": "Flick",
      "path": "gpui_kit::motion::Flick",
      "summary": "Which way a flick went.",
      "variants": [
        "Left",
        "Right",
        "Up",
        "Down"
      ],
      "construct": [],
      "options": [
        "name() -> &'static str"
      ]
    },
    {
      "name": "Flip",
      "path": "gpui_kit::motion::Flip",
      "summary": "A handle to one element's slide, keyed by semantic id.",
      "variants": [],
      "construct": [],
      "options": []
    },
    {
      "name": "FlipState",
      "path": "gpui_kit::motion::FlipState",
      "summary": "",
      "variants": [],
      "construct": [],
      "options": []
    },
    {
      "name": "Flipped",
      "path": "gpui_kit::motion::Flipped",
      "summary": "An element painted at an offset from where layout put it, and optionally at a size on its way to the size layout would give it.",
      "variants": [],
      "construct": [],
      "options": []
    },
    {
      "name": "FocusTrap",
      "path": "gpui_kit::overlay::FocusTrap",
      "summary": "The focus stops of one open overlay, in tab order.",
      "variants": [],
      "construct": [
        "new() -> Self"
      ],
      "options": []
    },
    {
      "name": "Geometry",
      "path": "gpui_kit::content::Geometry",
      "summary": "",
      "variants": [],
      "construct": [],
      "options": []
    },
    {
      "name": "GraphEdge",
      "path": "gpui_kit::canvas::GraphEdge",
      "summary": "One connection between two nodes, named by the identities they carry.",
      "variants": [],
      "construct": [
        "new(from: impl Into<gpui::SharedString>, to: impl Into<gpui::SharedString>) -> Self"
      ],
      "options": [
        "feedback() -> Self"
      ]
    },
    {
      "name": "GraphState",
      "path": "gpui_kit::canvas::GraphState",
      "summary": "What the canvas can currently say about itself.",
      "variants": [
        "Ready",
        "Loading",
        "Refused",
        "Failed"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "GridColumn",
      "path": "gpui_kit::data::GridColumn",
      "summary": "One column of a grid.",
      "variants": [],
      "construct": [
        "new(key: impl Into<SharedString>, header: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "width(width: ColumnWidth) -> Self",
        "fixed(width: f32) -> Self",
        "flex(share: f32) -> Self",
        "min_width(min_width: f32) -> Self",
        "align(align: Align) -> Self",
        "sortable(sortable: bool) -> Self",
        "resizable(resizable: bool) -> Self",
        "reorderable(reorderable: bool) -> Self",
        "pinned(pinned: bool) -> Self",
        "editable(editable: bool) -> Self"
      ]
    },
    {
      "name": "GridLines",
      "path": "gpui_kit::data::GridLines",
      "summary": "Whether a grid draws rules between its rows.",
      "variants": [
        "None",
        "Rows"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "GridRow",
      "path": "gpui_kit::data::GridRow",
      "summary": "One row, built on demand, keyed by the identity the row already has.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "cell(key: impl Into<SharedString>, cell: impl Into<Cell>) -> Self",
        "text(text: impl Into<SharedString>) -> Self",
        "disabled(disabled: bool) -> Self"
      ]
    },
    {
      "name": "HitCount",
      "path": "gpui_kit::controls::HitCount",
      "summary": "How many hits the host says the query has.",
      "variants": [
        "Unsearched",
        "Counting",
        "None",
        "Known",
        "TooMany",
        "Unavailable"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "HoverCardEvent",
      "path": "gpui_kit::overlay::HoverCardEvent",
      "summary": "What a hover card reports. The owner decides what any of it means.",
      "variants": [
        "Opened",
        "Closed"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "IconPosition",
      "path": "gpui_kit::controls::IconPosition",
      "summary": "Which side of the label the glyph sits on.",
      "variants": [
        "Leading",
        "Trailing"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "IconTone",
      "path": "gpui_kit::display::IconTone",
      "summary": "The semantic colour role a glyph paints in.",
      "variants": [
        "Primary",
        "Muted",
        "Faint",
        "OnAccent",
        "Accent",
        "AccentStrong",
        "Danger",
        "Warning",
        "Success",
        "Info"
      ],
      "construct": [],
      "options": [
        "color(theme: &Theme) -> Hsla"
      ]
    },
    {
      "name": "Ident",
      "path": "gpui_kit::foundation::Ident",
      "summary": "One identity used for both the GPUI element and the semantic tree.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>) -> Self"
      ],
      "options": []
    },
    {
      "name": "ImageFrame",
      "path": "gpui_kit::content::ImageFrame",
      "summary": "One image the viewer can show.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, label: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "source(source: impl Into<SharedString>) -> Self",
        "natural(width: u32, height: u32) -> Self",
        "state(state: ImageState) -> Self",
        "unavailable(reason: impl Into<SharedString>) -> Self",
        "failed(reason: impl Into<SharedString>) -> Self",
        "loading() -> Self"
      ]
    },
    {
      "name": "ImageRequest",
      "path": "gpui_kit::content::ImageRequest",
      "summary": "An image the document referred to and this crate did not fetch.",
      "variants": [],
      "construct": [],
      "options": []
    },
    {
      "name": "ImageSize",
      "path": "gpui_kit::content::ImageSize",
      "summary": "The pixel size of a source, as the host stated it.",
      "variants": [],
      "construct": [
        "new(width: u32, height: u32) -> Self"
      ],
      "options": []
    },
    {
      "name": "ImageState",
      "path": "gpui_kit::content::ImageState",
      "summary": "What the host knows about one image right now.",
      "variants": [
        "Loading",
        "Unavailable",
        "Failed",
        "Ready"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "ImageViewerEvent",
      "path": "gpui_kit::content::ImageViewerEvent",
      "summary": "What a viewer reports. It applies none of it.",
      "variants": [
        "FitChanged",
        "Stepped",
        "ImageRequested"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "Inline",
      "path": "gpui_kit::content::Inline",
      "summary": "A run of content inside one line of prose.",
      "variants": [
        "Text",
        "Code",
        "Emphasis",
        "Strong",
        "Struck",
        "Link",
        "Image",
        "Html",
        "SoftBreak",
        "HardBreak"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "JsonValue",
      "path": "gpui_kit::structured::JsonValue",
      "summary": "A JSON value, plus the one thing JSON cannot say: that a subtree is being withheld on purpose.",
      "variants": [
        "Null",
        "Bool",
        "Number",
        "String",
        "Array",
        "Object",
        "Redacted"
      ],
      "construct": [
        "number(text: impl Into<SharedString>) -> Self",
        "string(text: impl Into<SharedString>) -> Self",
        "array(items: impl IntoIterator<Item = JsonValue>) -> Self",
        "object(members: impl IntoIterator<Item = (impl Into<SharedString>, JsonValue)>) -> Self",
        "redacted(shape: impl Into<SharedString>) -> Self",
        "redacted_from(value: &JsonValue, cx: &App) -> Self"
      ],
      "options": []
    },
    {
      "name": "KeybindingRecorderEvent",
      "path": "gpui_kit::controls::KeybindingRecorderEvent",
      "summary": "What a [`KeybindingRecorder`] reports.",
      "variants": [
        "Started",
        "Captured",
        "Cancelled"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "Keyframe",
      "path": "gpui_kit::motion::Keyframe",
      "summary": "One stop on the path: the value, where along the run it is reached, and optionally the curve it is reached on.",
      "variants": [],
      "construct": [
        "new(offset: f32, value: T) -> Self"
      ],
      "options": [
        "eased(easing: impl Into<Easing>) -> Self"
      ]
    },
    {
      "name": "Keyframes",
      "path": "gpui_kit::motion::Keyframes",
      "summary": "A value that passes through named stops rather than travelling straight from one end to the other.",
      "variants": [],
      "construct": [
        "new(theme: &Theme, spec: MotionSpec, stops: impl IntoIterator<Item = Keyframe<T>>) -> Option<Self>"
      ],
      "options": []
    },
    {
      "name": "Landing",
      "path": "gpui_kit::datetime::Landing",
      "summary": "",
      "variants": [],
      "construct": [],
      "options": []
    },
    {
      "name": "LastVerified",
      "path": "gpui_kit::agent::LastVerified",
      "summary": "When a reading was last verified, for a reading that is no longer current.",
      "variants": [],
      "construct": [
        "at(when: impl Into<SharedString>) -> Self"
      ],
      "options": []
    },
    {
      "name": "Layout",
      "path": "gpui_kit::controls::Layout",
      "summary": "",
      "variants": [],
      "construct": [
        "new(lines: Vec<WrappedLine>, line_height: Pixels) -> Self"
      ],
      "options": []
    },
    {
      "name": "LayoutDirection",
      "path": "gpui_kit::foundation::LayoutDirection",
      "summary": "The direction the interface reads in.",
      "variants": [
        "LeftToRight",
        "RightToLeft"
      ],
      "construct": [],
      "options": [
        "is_rtl() -> bool",
        "is_ltr() -> bool",
        "start() -> PhysicalSide",
        "end() -> PhysicalSide",
        "arrow_step(key: &str) -> Option<i32>"
      ]
    },
    {
      "name": "Limit",
      "path": "gpui_kit::agent::Limit",
      "summary": "The ceiling a gauge measures against.",
      "variants": [
        "Known",
        "Unknown"
      ],
      "construct": [
        "measured(amount: f64, text: impl Into<SharedString>) -> Self",
        "estimated(amount: f64, text: impl Into<SharedString>) -> Self"
      ],
      "options": []
    },
    {
      "name": "LineMark",
      "path": "gpui_kit::content::LineMark",
      "summary": "What a line is being called out for.",
      "variants": [
        "Added",
        "Removed",
        "Changed",
        "Highlighted",
        "Error"
      ],
      "construct": [],
      "options": [
        "name() -> &'static str"
      ]
    },
    {
      "name": "ListEntry",
      "path": "gpui_kit::content::ListEntry",
      "summary": "One entry of a bulleted or numbered list.",
      "variants": [],
      "construct": [],
      "options": []
    },
    {
      "name": "ListItem",
      "path": "gpui_kit::data::ListItem",
      "summary": "One row, named by the caller.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, content: impl IntoElement) -> Self"
      ],
      "options": [
        "text(text: impl Into<SharedString>) -> Self",
        "disabled(disabled: bool) -> Self"
      ]
    },
    {
      "name": "Loadable",
      "path": "gpui_kit::state::Loadable",
      "summary": "The states a value a host is fetching can be in.",
      "variants": [
        "Idle",
        "Loading",
        "Ready",
        "Empty",
        "Unavailable",
        "Error"
      ],
      "construct": [],
      "options": [
        "map<U>(map: impl FnOnce(T) -> U) -> Loadable<U, E>"
      ]
    },
    {
      "name": "LogicalSide",
      "path": "gpui_kit::foundation::LogicalSide",
      "summary": "An edge named by reading order rather than by geometry.",
      "variants": [
        "Start",
        "End"
      ],
      "construct": [],
      "options": [
        "resolve(direction: LayoutDirection) -> PhysicalSide"
      ]
    },
    {
      "name": "MakeWay",
      "path": "gpui_kit::interaction::MakeWay",
      "summary": "An element painted beside where layout put it.",
      "variants": [],
      "construct": [],
      "options": []
    },
    {
      "name": "MarkdownEvent",
      "path": "gpui_kit::content::MarkdownEvent",
      "summary": "What a rendered document reports. It applies none of it.",
      "variants": [
        "LinkClicked",
        "ImageRequested",
        "CodeCopied",
        "MoreRequested"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "MenuEvent",
      "path": "gpui_kit::overlay::MenuEvent",
      "summary": "What a menu reports. The owner decides what any of it means.",
      "variants": [
        "Opened",
        "Invoked",
        "Dismissed",
        "Closed"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "MenuItem",
      "path": "gpui_kit::overlay::MenuItem",
      "summary": "One entry in a menu, identified by business identity rather than position.",
      "variants": [],
      "construct": [
        "command(id: impl Into<SharedString>, label: impl Into<SharedString>) -> Self",
        "check(id: impl Into<SharedString>, label: impl Into<SharedString>, checked: bool) -> Self",
        "separator(id: impl Into<SharedString>) -> Self",
        "section(id: impl Into<SharedString>, label: impl Into<SharedString>) -> Self",
        "submenu(id: impl Into<SharedString>, label: impl Into<SharedString>, items: impl IntoIterator<Item = MenuItem>) -> Self"
      ],
      "options": [
        "shortcut(keystroke: impl Into<SharedString>) -> Self",
        "icon(glyph: Icon) -> Self",
        "disabled(disabled: bool) -> Self"
      ]
    },
    {
      "name": "MenuKey",
      "path": "gpui_kit::overlay::MenuKey",
      "summary": "What a keystroke means to a menu-like surface, once the platform's modifier conventions have been applied.",
      "variants": [
        "Up",
        "Down",
        "Right",
        "Left",
        "Enter",
        "ModifiedEnter",
        "Escape",
        "Backspace",
        "Other"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "MenuState",
      "path": "gpui_kit::overlay::MenuState",
      "summary": "",
      "variants": [],
      "construct": [],
      "options": []
    },
    {
      "name": "MenubarEvent",
      "path": "gpui_kit::overlay::MenubarEvent",
      "summary": "What a menubar reports. The owner decides what any of it means.",
      "variants": [
        "Opened",
        "Invoked",
        "Closed"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "MenubarMenu",
      "path": "gpui_kit::overlay::MenubarMenu",
      "summary": "One title in the bar and the commands under it.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, label: impl Into<SharedString>, items: impl IntoIterator<Item = MenuItem>) -> Self"
      ],
      "options": [
        "disabled(disabled: bool) -> Self"
      ]
    },
    {
      "name": "Message",
      "path": "gpui_kit::content::Message",
      "summary": "One turn in a conversation.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, body: impl Into<MessageBody>) -> Self",
        "markdown(id: impl Into<SharedString>, source: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "author(author: impl Into<SharedString>) -> Self",
        "time(time: impl Into<EntryTime>) -> Self",
        "delivery(delivery: DeliveryState) -> Self",
        "failed(reason: impl Into<SharedString>) -> Self",
        "streaming(streaming: bool) -> Self",
        "attachment(attachment: Attachment) -> Self",
        "reaction(reaction: Reaction) -> Self"
      ]
    },
    {
      "name": "MessageBody",
      "path": "gpui_kit::content::MessageBody",
      "summary": "What a message says.",
      "variants": [
        "Text",
        "Markdown"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "MonthCell",
      "path": "gpui_kit::datetime::MonthCell",
      "summary": "One slot in a month grid.",
      "variants": [
        "Empty",
        "Day",
        "Adjacent"
      ],
      "construct": [],
      "options": [
        "day() -> Option<Day>",
        "is_adjacent() -> bool"
      ]
    },
    {
      "name": "MonthGrid",
      "path": "gpui_kit::datetime::MonthGrid",
      "summary": "A month laid out in weeks.",
      "variants": [],
      "construct": [
        "new(weeks: impl IntoIterator<Item = Vec<MonthCell>>) -> Self"
      ],
      "options": []
    },
    {
      "name": "MonthKey",
      "path": "gpui_kit::datetime::MonthKey",
      "summary": "One month, meaningful only to the adapter that produced it.",
      "variants": [],
      "construct": [],
      "options": []
    },
    {
      "name": "MotionSpec",
      "path": "gpui_kit::motion::MotionSpec",
      "summary": "A curve with a duration and a delay: everything one animation needs, taken from the token document rather than written beside the element.",
      "variants": [],
      "construct": [
        "sprung(spring: Spring) -> Self"
      ],
      "options": [
        "is_sprung() -> bool",
        "spring() -> Option<Spring>",
        "total() -> Duration",
        "progress(raw: f32) -> f32",
        "time_at(value: f32) -> Duration",
        "after(previous: MotionSpec) -> Self",
        "animation() -> Animation",
        "repeating() -> Animation"
      ]
    },
    {
      "name": "NodeMetric",
      "path": "gpui_kit::canvas::NodeMetric",
      "summary": "One figure a step reports about itself, such as a token count or an elapsed time. Both halves are the caller's words.",
      "variants": [],
      "construct": [
        "new(label: impl Into<SharedString>, value: impl Into<SharedString>) -> Self"
      ],
      "options": []
    },
    {
      "name": "NodeState",
      "path": "gpui_kit::canvas::NodeState",
      "summary": "How a step ended, or that it has not.",
      "variants": [
        "Pending",
        "Running",
        "Succeeded",
        "Failed",
        "Refused"
      ],
      "construct": [],
      "options": [
        "color(theme: &gpui_kit_theme::Theme) -> Hsla"
      ]
    },
    {
      "name": "Notification",
      "path": "gpui_kit::overlay::Notification",
      "summary": "One thing that happened, whether or not a toast ever showed it.",
      "variants": [],
      "construct": [
        "new(ident: impl Into<Ident>, message: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "tone(tone: Tone) -> Self",
        "detail(detail: impl Into<SharedString>) -> Self",
        "at(at: impl Into<SharedString>) -> Self",
        "read(read: bool) -> Self",
        "action(label: impl Into<SharedString>, handler: impl Fn(&mut Window, &mut App) + 'static) -> Self"
      ]
    },
    {
      "name": "NotificationCenterEvent",
      "path": "gpui_kit::overlay::NotificationCenterEvent",
      "summary": "What the centre reports. It files records; it decides nothing else.",
      "variants": [
        "Read",
        "Dismissed",
        "Cleared",
        "ActionTaken"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "NumberBounds",
      "path": "gpui_kit::structured::NumberBounds",
      "summary": "What a number may be, as far as the schema said.",
      "variants": [],
      "construct": [
        "new() -> Self"
      ],
      "options": [
        "min(min: f64) -> Self",
        "max(max: f64) -> Self",
        "step(step: f64) -> Self"
      ]
    },
    {
      "name": "NumberInputEvent",
      "path": "gpui_kit::controls::NumberInputEvent",
      "summary": "What a number field reports. The owner decides what any of it means.",
      "variants": [
        "Changed",
        "Unparsable",
        "Submit"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "Offering",
      "path": "gpui_kit::agent::Offering",
      "summary": "One thing a server offers.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, kind: OfferingKind, name: impl Into<SharedString>) -> Self",
        "tool(id: impl Into<SharedString>, name: impl Into<SharedString>) -> Self",
        "skill(id: impl Into<SharedString>, name: impl Into<SharedString>) -> Self",
        "resource(id: impl Into<SharedString>, name: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "summary(summary: impl Into<SharedString>) -> Self",
        "qualifier(qualifier: impl Into<SharedString>) -> Self"
      ]
    },
    {
      "name": "OfferingKind",
      "path": "gpui_kit::agent::OfferingKind",
      "summary": "Which of the three kinds of thing a server offers.",
      "variants": [
        "Tool",
        "Skill",
        "Resource"
      ],
      "construct": [],
      "options": [
        "name() -> &'static str"
      ]
    },
    {
      "name": "OverallProgress",
      "path": "gpui_kit::controls::OverallProgress",
      "summary": "How much of the whole batch is done, if anybody knows.",
      "variants": [
        "Known",
        "Indeterminate",
        "Settled"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "PageTotal",
      "path": "gpui_kit::navigation::PageTotal",
      "summary": "How many pages the host knows about.",
      "variants": [
        "Known",
        "Unknown"
      ],
      "construct": [],
      "options": [
        "is_known() -> bool",
        "count() -> Option<usize>"
      ]
    },
    {
      "name": "Painter",
      "path": "gpui_kit::content::Painter",
      "summary": "",
      "variants": [],
      "construct": [],
      "options": []
    },
    {
      "name": "PermissionAction",
      "path": "gpui_kit::agent::PermissionAction",
      "summary": "One column: an action, addressed by a stable key.",
      "variants": [],
      "construct": [
        "new(key: impl Into<SharedString>, label: impl Into<SharedString>) -> Self"
      ],
      "options": []
    },
    {
      "name": "PermissionChange",
      "path": "gpui_kit::agent::PermissionChange",
      "summary": "What operating a cell asks for. Nothing is applied.",
      "variants": [],
      "construct": [],
      "options": []
    },
    {
      "name": "PermissionEntry",
      "path": "gpui_kit::agent::PermissionEntry",
      "summary": "One cell: a state, and where it came from.",
      "variants": [],
      "construct": [
        "new(state: PermissionState) -> Self",
        "inherited(state: PermissionState, from: impl Into<SharedString>) -> Self"
      ],
      "options": []
    },
    {
      "name": "PermissionSource",
      "path": "gpui_kit::agent::PermissionSource",
      "summary": "Where a cell's state was decided.",
      "variants": [
        "Here",
        "Inherited"
      ],
      "construct": [
        "inherited(from: impl Into<SharedString>) -> Self"
      ],
      "options": []
    },
    {
      "name": "PermissionState",
      "path": "gpui_kit::agent::PermissionState",
      "summary": "What a cell says about one subject and one action.",
      "variants": [
        "Allowed",
        "Denied",
        "Ask",
        "NotApplicable"
      ],
      "construct": [],
      "options": [
        "name() -> &'static str",
        "label(cx: &App) -> SharedString",
        "next() -> Option<Self>"
      ]
    },
    {
      "name": "PermissionSubject",
      "path": "gpui_kit::agent::PermissionSubject",
      "summary": "One row: whatever the permissions are about, and its cells.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, label: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "cell(action: impl Into<SharedString>, entry: PermissionEntry) -> Self"
      ]
    },
    {
      "name": "Phase",
      "path": "gpui_kit::motion::Phase",
      "summary": "Where an element is in its arrival or departure.",
      "variants": [
        "Entering",
        "Present",
        "Exiting",
        "Gone"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "PhysicalSide",
      "path": "gpui_kit::foundation::PhysicalSide",
      "summary": "An edge that does not move when the reading direction does.",
      "variants": [
        "Left",
        "Right"
      ],
      "construct": [],
      "options": [
        "opposite() -> Self",
        "is_left() -> bool"
      ]
    },
    {
      "name": "Placed",
      "path": "gpui_kit::canvas::Placed",
      "summary": "A node and where its top left corner sits, in canvas coordinates.",
      "variants": [],
      "construct": [
        "new(node: GraphNode, x: f32, y: f32) -> Self"
      ],
      "options": [
        "height(height: f32) -> Self"
      ]
    },
    {
      "name": "Placement",
      "path": "gpui_kit::overlay::Placement",
      "summary": "Where a floating surface sits.",
      "variants": [
        "Below",
        "Above",
        "At",
        "Center",
        "Edge"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "PopoverEvent",
      "path": "gpui_kit::overlay::PopoverEvent",
      "summary": "What a popover reports. The owner decides what any of it means.",
      "variants": [
        "Opened",
        "Dismissed",
        "Closed"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "PrepaintState",
      "path": "gpui_kit::controls::PrepaintState",
      "summary": "",
      "variants": [],
      "construct": [],
      "options": []
    },
    {
      "name": "Presence",
      "path": "gpui_kit::motion::Presence",
      "summary": "An element's arrival and departure, either of which can be cancelled by the other while it is still running.",
      "variants": [],
      "construct": [
        "hidden(enter: MotionSpec, exit: MotionSpec) -> Self",
        "visible(enter: MotionSpec, exit: MotionSpec) -> Self"
      ],
      "options": []
    },
    {
      "name": "ProgressValue",
      "path": "gpui_kit::display::ProgressValue",
      "summary": "",
      "variants": [],
      "construct": [],
      "options": []
    },
    {
      "name": "Quantity",
      "path": "gpui_kit::agent::Quantity",
      "summary": "A number, the caller's wording for it, and how it was arrived at.",
      "variants": [],
      "construct": [
        "measured(amount: f64, text: impl Into<SharedString>) -> Self",
        "estimated(amount: f64, text: impl Into<SharedString>) -> Self"
      ],
      "options": []
    },
    {
      "name": "RangePickerEvent",
      "path": "gpui_kit::datetime::RangePickerEvent",
      "summary": "What a range picker reports. The owner decides what any of it means.",
      "variants": [
        "StartPicked",
        "EndPicked"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "RangeState",
      "path": "gpui_kit::datetime::RangeState",
      "summary": "What the picker currently holds.",
      "variants": [
        "Unset",
        "Incomplete",
        "Complete",
        "Inverted"
      ],
      "construct": [
        "from_range(range: Option<DayRange>) -> Self"
      ],
      "options": [
        "name() -> &'static str"
      ]
    },
    {
      "name": "Reaction",
      "path": "gpui_kit::content::Reaction",
      "summary": "A reaction and how many people left it.",
      "variants": [],
      "construct": [
        "new(key: impl Into<SharedString>, label: impl Into<SharedString>, count: usize) -> Self"
      ],
      "options": []
    },
    {
      "name": "Reading",
      "path": "gpui_kit::agent::Reading",
      "summary": "What is known about a number right now.",
      "variants": [
        "Known",
        "Unavailable"
      ],
      "construct": [
        "measured(amount: f64, text: impl Into<SharedString>) -> Self",
        "estimated(amount: f64, text: impl Into<SharedString>) -> Self",
        "unavailable() -> Self",
        "unavailable_because(reason: impl Into<SharedString>) -> Self"
      ],
      "options": []
    },
    {
      "name": "Reasoning",
      "path": "gpui_kit::agent::Reasoning",
      "summary": "What is known about a turn's reasoning.",
      "variants": [
        "Present",
        "Withheld",
        "Absent"
      ],
      "construct": [
        "present(text: impl Into<SharedString>) -> Self",
        "withheld(reason: impl Into<SharedString>) -> Self"
      ],
      "options": []
    },
    {
      "name": "Region",
      "path": "gpui_kit::layout::Region",
      "summary": "",
      "variants": [],
      "construct": [],
      "options": []
    },
    {
      "name": "ResultCount",
      "path": "gpui_kit::controls::ResultCount",
      "summary": "How many rows the host says the filter matched.",
      "variants": [
        "Unknown",
        "Counting",
        "Known",
        "Unavailable"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "Row",
      "path": "gpui_kit::data::Row",
      "summary": "One row, keyed by the identity the row already has.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "cell(key: impl Into<SharedString>, cell: impl Into<Cell>) -> Self",
        "text(text: impl Into<SharedString>) -> Self",
        "disabled(disabled: bool) -> Self"
      ]
    },
    {
      "name": "Rows",
      "path": "gpui_kit::data::Rows",
      "summary": "",
      "variants": [],
      "construct": [],
      "options": []
    },
    {
      "name": "RunLength",
      "path": "gpui_kit::agent::RunLength",
      "summary": "Whether the caller has counted the run.",
      "variants": [
        "Known",
        "Unknown"
      ],
      "construct": [],
      "options": [
        "as_str() -> &'static str"
      ]
    },
    {
      "name": "SaveState",
      "path": "gpui_kit::navigation::SaveState",
      "summary": "Whether what a tab holds has been written down, and what happened when somebody tried.",
      "variants": [
        "Clean",
        "Dirty",
        "Saving",
        "Failed"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "Schema",
      "path": "gpui_kit::structured::Schema",
      "summary": "The arguments a call takes, in the order they should be filled in.",
      "variants": [],
      "construct": [
        "new() -> Self"
      ],
      "options": [
        "field(field: SchemaField) -> Self",
        "fields(fields: impl IntoIterator<Item = SchemaField>) -> Self"
      ]
    },
    {
      "name": "SchemaChoice",
      "path": "gpui_kit::structured::SchemaChoice",
      "summary": "One option a closed or open choice offers.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, label: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "description(description: impl Into<SharedString>) -> Self"
      ]
    },
    {
      "name": "SchemaField",
      "path": "gpui_kit::structured::SchemaField",
      "summary": "One argument.",
      "variants": [],
      "construct": [
        "new(name: impl Into<SharedString>, kind: SchemaKind) -> Self"
      ],
      "options": [
        "label(label: impl Into<SharedString>) -> Self",
        "description(description: impl Into<SharedString>) -> Self",
        "required(required: bool) -> Self"
      ]
    },
    {
      "name": "SchemaFormEvent",
      "path": "gpui_kit::structured::SchemaFormEvent",
      "summary": "What the form reports.",
      "variants": [
        "Changed",
        "Submitted"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "SchemaKind",
      "path": "gpui_kit::structured::SchemaKind",
      "summary": "What a value is, and therefore which control edits it.",
      "variants": [
        "Text",
        "Number",
        "Integer",
        "Boolean",
        "Enum",
        "OpenEnum",
        "TextList",
        "Object",
        "Unrenderable"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "ScrollAxis",
      "path": "gpui_kit::layout::ScrollAxis",
      "summary": "Which way the content may be scrolled.",
      "variants": [
        "Vertical",
        "Horizontal",
        "Both"
      ],
      "construct": [],
      "options": [
        "has_vertical() -> bool",
        "has_horizontal() -> bool"
      ]
    },
    {
      "name": "ScrollLink",
      "path": "gpui_kit::motion::ScrollLink",
      "summary": "Scroll offsets mapped onto progress from 0 to 1.",
      "variants": [],
      "construct": [
        "new(start: Pixels, end: Pixels) -> Self",
        "over(distance: Pixels) -> Self"
      ],
      "options": [
        "decorative(reduce_motion: bool) -> Self",
        "progress(offset: Pixels) -> f32",
        "sample<T: Interpolate>(offset: Pixels, from: T, to: T) -> T"
      ]
    },
    {
      "name": "SearchFieldEvent",
      "path": "gpui_kit::controls::SearchFieldEvent",
      "summary": "What a search field reports. It applies none of it.",
      "variants": [
        "QueryChanged",
        "Next",
        "Previous",
        "Cancelled",
        "MatchCaseToggled",
        "WholeWordToggled"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "Segment",
      "path": "gpui_kit::datetime::Segment",
      "summary": "Which part of the time the keyboard is on.",
      "variants": [
        "Hour",
        "Minute",
        "Second",
        "Meridiem"
      ],
      "construct": [
        "new(id: impl Into<SharedString>, label: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "icon(glyph: Icon) -> Self",
        "disabled(disabled: bool) -> Self"
      ]
    },
    {
      "name": "SelectEvent",
      "path": "gpui_kit::controls::SelectEvent",
      "summary": "What a [`Select`] reports. The owner decides what any of it means.",
      "variants": [
        "Selected",
        "Opened",
        "Closed"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "SelectOption",
      "path": "gpui_kit::controls::SelectOption",
      "summary": "One choice, identified by business identity rather than by position.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, label: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "description(description: impl Into<SharedString>) -> Self",
        "disabled(disabled: bool) -> Self"
      ]
    },
    {
      "name": "Selectability",
      "path": "gpui_kit::datetime::Selectability",
      "summary": "Whether a day may be picked, and if not, why not.",
      "variants": [
        "Selectable",
        "Blocked"
      ],
      "construct": [
        "blocked(reason: impl Into<SharedString>) -> Self"
      ],
      "options": []
    },
    {
      "name": "SelectionChange",
      "path": "gpui_kit::data::SelectionChange",
      "summary": "What a gesture asked the selection to become.",
      "variants": [
        "Replace",
        "Toggle",
        "Range",
        "Loaded",
        "Everything",
        "Clear"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "SelectionMode",
      "path": "gpui_kit::data::SelectionMode",
      "summary": "How many rows may be selected at once.",
      "variants": [
        "None",
        "Single",
        "Multiple"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "Sequence",
      "path": "gpui_kit::motion::Sequence",
      "summary": "A chain of specifications, each starting when the one before it has finished.",
      "variants": [],
      "construct": [
        "new(steps: impl IntoIterator<Item = MotionSpec>) -> Self"
      ],
      "options": [
        "then(spec: MotionSpec) -> Self"
      ]
    },
    {
      "name": "ServerEntry",
      "path": "gpui_kit::agent::ServerEntry",
      "summary": "One connection.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, name: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "detail(detail: impl Into<SharedString>) -> Self",
        "state(state: ServerState) -> Self",
        "catalog(catalog: Catalog) -> Self",
        "offers(offerings: impl IntoIterator<Item = Offering>) -> Self"
      ]
    },
    {
      "name": "ServerState",
      "path": "gpui_kit::agent::ServerState",
      "summary": "Where a connection stands.",
      "variants": [
        "Connected",
        "Connecting",
        "Disconnected",
        "Failed",
        "Disabled"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "SidebarItem",
      "path": "gpui_kit::navigation::SidebarItem",
      "summary": "One place in the rail.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, label: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "icon(glyph: Icon) -> Self",
        "badge(badge: impl Into<SharedString>) -> Self",
        "disabled(disabled: bool) -> Self",
        "children(children: impl IntoIterator<Item = SidebarItem>) -> Self"
      ]
    },
    {
      "name": "SidebarSection",
      "path": "gpui_kit::navigation::SidebarSection",
      "summary": "A titled run of places.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "title(title: impl Into<SharedString>) -> Self",
        "item(item: SidebarItem) -> Self",
        "items(items: impl IntoIterator<Item = SidebarItem>) -> Self"
      ]
    },
    {
      "name": "SlideState",
      "path": "gpui_kit::interaction::SlideState",
      "summary": "",
      "variants": [],
      "construct": [],
      "options": []
    },
    {
      "name": "SortDirection",
      "path": "gpui_kit::data::SortDirection",
      "summary": "Which way a sorted column runs. The table reports a direction and renders whatever order it is handed; it never sorts the rows itself.",
      "variants": [
        "Ascending",
        "Descending"
      ],
      "construct": [],
      "options": [
        "reversed() -> Self",
        "as_str() -> &'static str"
      ]
    },
    {
      "name": "SplitAxis",
      "path": "gpui_kit::layout::SplitAxis",
      "summary": "Which way the two panes are laid out.",
      "variants": [
        "Horizontal",
        "Vertical"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "SplitChange",
      "path": "gpui_kit::layout::SplitChange",
      "summary": "A change the typist asked the layout for. Nothing has been applied.",
      "variants": [
        "Ratio",
        "Collapsed"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "SplitKind",
      "path": "gpui_kit::layout::SplitKind",
      "summary": "What one [`SplitRecord`] describes.",
      "variants": [
        "Pane",
        "Horizontal",
        "Vertical"
      ],
      "construct": [],
      "options": [
        "name() -> &'static str"
      ]
    },
    {
      "name": "SplitLayout",
      "path": "gpui_kit::layout::SplitLayout",
      "summary": "A tree of splits the caller owns.",
      "variants": [
        "Pane",
        "Branch"
      ],
      "construct": [
        "pane(id: impl Into<SharedString>) -> Self",
        "leaf(spec: SplitPaneSpec) -> Self",
        "split(id: impl Into<SharedString>, axis: SplitAxis, ratio: f32, start: SplitLayout, end: SplitLayout) -> Self",
        "horizontal(id: impl Into<SharedString>, ratio: f32, start: SplitLayout, end: SplitLayout) -> Self",
        "vertical(id: impl Into<SharedString>, ratio: f32, start: SplitLayout, end: SplitLayout) -> Self",
        "from_records(records: &[SplitRecord]) -> Result<Self, SplitRecordError>"
      ],
      "options": []
    },
    {
      "name": "SplitPaneSpec",
      "path": "gpui_kit::layout::SplitPaneSpec",
      "summary": "One leaf of a [`SplitLayout`]: a named place the caller puts content.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "min(min: f32) -> Self",
        "min_width(min: f32) -> Self",
        "min_height(min: f32) -> Self",
        "rail(rail: f32) -> Self",
        "collapsed(collapsed: bool) -> Self"
      ]
    },
    {
      "name": "SplitRecord",
      "path": "gpui_kit::layout::SplitRecord",
      "summary": "One node of a [`SplitLayout`], as plain fields a host can write anywhere.",
      "variants": [],
      "construct": [],
      "options": []
    },
    {
      "name": "SplitRecordError",
      "path": "gpui_kit::layout::SplitRecordError",
      "summary": "Why a set of records is not a tree.",
      "variants": [
        "NoRoot",
        "ManyRoots",
        "DuplicateId",
        "MissingParent",
        "WrongChildCount",
        "PaneWithChildren",
        "Unreachable"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "SplitSide",
      "path": "gpui_kit::layout::SplitSide",
      "summary": "One of the two panes.",
      "variants": [
        "Start",
        "End"
      ],
      "construct": [],
      "options": [
        "name() -> &'static str"
      ]
    },
    {
      "name": "Spring",
      "path": "gpui_kit::motion::Spring",
      "summary": "A damped spring, solved in closed form so a position is a function of time rather than of how many frames happened to be delivered.",
      "variants": [],
      "construct": [
        "new(stiffness: f32, damping: f32, mass: f32) -> Self",
        "perceptual(duration: Duration, bounce: f32) -> Self",
        "preset(theme: &Theme, preset: SpringPreset) -> Self"
      ],
      "options": [
        "damping_ratio() -> f32",
        "perceptual_duration() -> Duration",
        "bounce() -> f32",
        "value(elapsed: Duration) -> f32",
        "value_at(elapsed: Duration, velocity: f32) -> (f32, f32)",
        "settle_time() -> Duration",
        "settle_time_at(velocity: f32) -> Duration",
        "animation() -> Animation"
      ]
    },
    {
      "name": "StagedDrag",
      "path": "gpui_kit::interaction::StagedDrag",
      "summary": "A drag placed by hand rather than by a pointer.",
      "variants": [],
      "construct": [
        "new(item: DragItem) -> Self"
      ],
      "options": [
        "landing(surface: impl Into<SharedString>, position: DropPosition, slot: Option<usize>, accepted: bool) -> Self"
      ]
    },
    {
      "name": "Stagger",
      "path": "gpui_kit::motion::Stagger",
      "summary": "Delays each item in a list so a group animates as a wave.",
      "variants": [],
      "construct": [
        "new(step: Duration, max_items: usize) -> Self",
        "from_millis(step_ms: u64) -> Self",
        "rows() -> Self"
      ],
      "options": [
        "max_items(max_items: usize) -> Self",
        "reversed() -> Self"
      ]
    },
    {
      "name": "StatusGroup",
      "path": "gpui_kit::layout::StatusGroup",
      "summary": "Which group an item sits in.",
      "variants": [
        "Start",
        "Centre",
        "End"
      ],
      "construct": [],
      "options": [
        "name() -> &'static str"
      ]
    },
    {
      "name": "StatusItem",
      "path": "gpui_kit::layout::StatusItem",
      "summary": "One thing the bar says.",
      "variants": [],
      "construct": [
        "text(id: impl Into<SharedString>, label: impl Into<SharedString>) -> Self",
        "state(id: impl Into<SharedString>, label: impl Into<SharedString>, tone: Tone) -> Self",
        "progress(id: impl Into<SharedString>, label: impl Into<SharedString>) -> Self",
        "action(id: impl Into<SharedString>, label: impl Into<SharedString>) -> Self",
        "element(id: impl Into<SharedString>, label: impl Into<SharedString>, element: impl IntoElement) -> Self"
      ],
      "options": [
        "fraction(fraction: f32) -> Self",
        "count(done: usize, total: usize) -> Self",
        "icon(glyph: Icon) -> Self",
        "state_name(state: impl Into<SharedString>) -> Self",
        "stale(stale: bool) -> Self",
        "tracking<E>(value: &AsyncValue<SharedString, E>) -> Self",
        "on_click(handler: impl Fn(&mut Window, &mut App) + 'static) -> Self"
      ]
    },
    {
      "name": "Step",
      "path": "gpui_kit::agent::Step",
      "summary": "One step of a run.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, title: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "state(state: StepState) -> Self",
        "body(body: impl IntoElement) -> Self"
      ]
    },
    {
      "name": "StepState",
      "path": "gpui_kit::agent::StepState",
      "summary": "Where one step has got to.",
      "variants": [
        "Pending",
        "Running",
        "Done",
        "Failed",
        "Skipped"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "StepStatus",
      "path": "gpui_kit::navigation::StepStatus",
      "summary": "Where a step stands, as the caller reports it.",
      "variants": [
        "Complete",
        "Current",
        "Upcoming",
        "Blocked",
        "Failed"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "StringKey",
      "path": "gpui_kit::strings::StringKey",
      "summary": "Every piece of text this library can put on a screen.",
      "variants": [],
      "construct": [
        "from_name(name: &str) -> Option<Self>"
      ],
      "options": []
    },
    {
      "name": "Strings",
      "path": "gpui_kit::strings::Strings",
      "summary": "The catalogue a host installs, and the one components read.",
      "variants": [],
      "construct": [
        "new() -> Self"
      ],
      "options": []
    },
    {
      "name": "SurfaceDrag",
      "path": "gpui_kit::interaction::SurfaceDrag",
      "summary": "",
      "variants": [],
      "construct": [],
      "options": []
    },
    {
      "name": "TabItem",
      "path": "gpui_kit::navigation::TabItem",
      "summary": "One tab, identified by business identity rather than by position.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, label: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "icon(icon: Icon) -> Self",
        "badge(badge: impl Into<SharedString>) -> Self",
        "disabled(disabled: bool) -> Self",
        "save_state(state: SaveState) -> Self",
        "dirty() -> Self",
        "saving() -> Self",
        "save_failed(reason: impl Into<SharedString>) -> Self",
        "closable(closable: bool) -> Self"
      ]
    },
    {
      "name": "TagInputEvent",
      "path": "gpui_kit::controls::TagInputEvent",
      "summary": "What a tag field reports. The owner decides what any of it means.",
      "variants": [
        "Added",
        "Removed",
        "Duplicate",
        "Refused"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "TextAreaElement",
      "path": "gpui_kit::controls::TextAreaElement",
      "summary": "",
      "variants": [],
      "construct": [
        "new(area: Entity<TextArea>) -> Self"
      ],
      "options": []
    },
    {
      "name": "TextAreaEvent",
      "path": "gpui_kit::controls::TextAreaEvent",
      "summary": "What a text area reports to its owner.",
      "variants": [
        "Change",
        "Submit",
        "Cancel",
        "Focus",
        "Blur"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "TextElement",
      "path": "gpui_kit::controls::TextElement",
      "summary": "",
      "variants": [],
      "construct": [
        "new(input: Entity<TextInput>) -> Self"
      ],
      "options": []
    },
    {
      "name": "TextInputEvent",
      "path": "gpui_kit::controls::TextInputEvent",
      "summary": "What an input reports to its owner.",
      "variants": [
        "Change",
        "Submit",
        "Cancel",
        "BackspaceAtStart",
        "Focus",
        "Blur"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "TimeInputEvent",
      "path": "gpui_kit::datetime::TimeInputEvent",
      "summary": "What a time field reports. The owner decides what any of it means.",
      "variants": [
        "Changed"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "TimeOfDay",
      "path": "gpui_kit::datetime::TimeOfDay",
      "summary": "A time of day, in the host's own clock.",
      "variants": [],
      "construct": [
        "new(hour: u32, minute: u32) -> Self"
      ],
      "options": [
        "with_second(second: u32) -> Self",
        "with_meridiem(index: usize) -> Self"
      ]
    },
    {
      "name": "TimelineEntry",
      "path": "gpui_kit::display::TimelineEntry",
      "summary": "One thing that happened.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, description: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "time(time: impl Into<EntryTime>) -> Self",
        "time_unknown() -> Self",
        "actor(actor: impl Into<SharedString>) -> Self",
        "tone(tone: Tone) -> Self",
        "detail(detail: impl IntoElement) -> Self"
      ]
    },
    {
      "name": "TimelineGroup",
      "path": "gpui_kit::display::TimelineGroup",
      "summary": "A run of entries under one heading, usually a day.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, label: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "entry(entry: TimelineEntry) -> Self",
        "entries(entries: impl IntoIterator<Item = TimelineEntry>) -> Self"
      ]
    },
    {
      "name": "Toast",
      "path": "gpui_kit::overlay::Toast",
      "summary": "One notification: what happened, how bad it is, and at most one thing to do about it.",
      "variants": [],
      "construct": [
        "new(ident: impl Into<Ident>, message: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "tone(tone: Tone) -> Self",
        "detail(detail: impl Into<SharedString>) -> Self",
        "action(label: impl Into<SharedString>, handler: impl Fn(&mut Window, &mut App) + 'static) -> Self",
        "dismissable(dismissable: bool) -> Self",
        "timeout(timeout: Duration) -> Self",
        "persistent() -> Self"
      ]
    },
    {
      "name": "ToastCorner",
      "path": "gpui_kit::overlay::ToastCorner",
      "summary": "Which corner the stack grows from.",
      "variants": [
        "TopLeft",
        "TopRight",
        "BottomLeft",
        "BottomRight"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "ToggleItem",
      "path": "gpui_kit::controls::ToggleItem",
      "summary": "One toggle in a group, identified by business identity.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, label: impl Into<SharedString>) -> Self",
        "glyph(id: impl Into<SharedString>, glyph: Icon, name: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "icon(glyph: Icon) -> Self",
        "disabled(disabled: bool) -> Self"
      ]
    },
    {
      "name": "ToggleSelection",
      "path": "gpui_kit::controls::ToggleSelection",
      "summary": "How many of a group's toggles may be in at once.",
      "variants": [
        "AtMostOne",
        "Any"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "Tone",
      "path": "gpui_kit::display::Tone",
      "summary": "The severity a status surface claims.",
      "variants": [
        "Neutral",
        "Accent",
        "Success",
        "Warning",
        "Danger",
        "Info"
      ],
      "construct": [],
      "options": [
        "name() -> &'static str"
      ]
    },
    {
      "name": "ToolBody",
      "path": "gpui_kit::agent::ToolBody",
      "summary": "A block of caller-owned text — the arguments a tool was called with, or what it returned — with an optional limit on how much of it is drawn.",
      "variants": [],
      "construct": [
        "new(text: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "max_lines(lines: usize) -> Self"
      ]
    },
    {
      "name": "ToolCallState",
      "path": "gpui_kit::agent::ToolCallState",
      "summary": "Where one invocation has got to.",
      "variants": [
        "PendingApproval",
        "Running",
        "Succeeded",
        "Failed",
        "Refused"
      ],
      "construct": [
        "succeeded(output: impl Into<ToolBody>) -> Self",
        "succeeded_silently() -> Self",
        "failed(error: impl Into<SharedString>) -> Self",
        "refused(reason: impl Into<SharedString>) -> Self"
      ],
      "options": []
    },
    {
      "name": "ToolOutput",
      "path": "gpui_kit::agent::ToolOutput",
      "summary": "What a tool that ran to completion gave back.",
      "variants": [
        "Body",
        "Silent"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "ToolbarItem",
      "path": "gpui_kit::layout::ToolbarItem",
      "summary": "One action in the bar.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, label: impl Into<SharedString>, content: impl IntoElement) -> Self"
      ],
      "options": [
        "icon(glyph: Icon) -> Self",
        "shortcut(keystroke: impl Into<SharedString>) -> Self",
        "disabled(disabled: bool) -> Self"
      ]
    },
    {
      "name": "TrackStep",
      "path": "gpui_kit::content::TrackStep",
      "summary": "Which way a previous or next control steps.",
      "variants": [
        "Previous",
        "Next"
      ],
      "construct": [],
      "options": [
        "name() -> &'static str"
      ]
    },
    {
      "name": "Transition",
      "path": "gpui_kit::motion::Transition",
      "summary": "A value that animates toward whatever it is last told to be.",
      "variants": [],
      "construct": [
        "new(value: T, spec: MotionSpec) -> Self"
      ],
      "options": [
        "spec(spec: MotionSpec) -> Self"
      ]
    },
    {
      "name": "TransportDuration",
      "path": "gpui_kit::content::TransportDuration",
      "summary": "How long the media runs, as far as the host knows.",
      "variants": [
        "Known",
        "Unknown"
      ],
      "construct": [],
      "options": [
        "is_known() -> bool",
        "seconds() -> Option<f32>"
      ]
    },
    {
      "name": "TransportEvent",
      "path": "gpui_kit::content::TransportEvent",
      "summary": "What a transport reports. It applies none of it.",
      "variants": [
        "PlayRequested",
        "PauseRequested",
        "SeekPreview",
        "SeekRequested",
        "VolumeRequested",
        "MuteToggled",
        "SpeedRequested",
        "Stepped"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "TransportState",
      "path": "gpui_kit::content::TransportState",
      "summary": "What the transport is doing, as the host reports it.",
      "variants": [
        "Playing",
        "Paused",
        "Buffering"
      ],
      "construct": [],
      "options": [
        "name() -> &'static str"
      ]
    },
    {
      "name": "TreeNode",
      "path": "gpui_kit::data::TreeNode",
      "summary": "One node, identified by business identity rather than by its place in the hierarchy, so moving a branch does not rename what hangs under it.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, label: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "child(child: TreeNode) -> Self",
        "children(children: impl IntoIterator<Item = TreeNode>) -> Self",
        "icon(icon: Icon) -> Self",
        "disabled(disabled: bool) -> Self"
      ]
    },
    {
      "name": "UnreadCount",
      "path": "gpui_kit::overlay::UnreadCount",
      "summary": "How many unread notifications there are, or how many there are at least.",
      "variants": [
        "Exact",
        "AtLeast"
      ],
      "construct": [],
      "options": [
        "value() -> usize",
        "is_zero() -> bool",
        "name() -> &'static str"
      ]
    },
    {
      "name": "UnrenderableField",
      "path": "gpui_kit::structured::UnrenderableField",
      "summary": "A field that has to be filled in somewhere other than this form.",
      "variants": [],
      "construct": [],
      "options": []
    },
    {
      "name": "Upload",
      "path": "gpui_kit::controls::Upload",
      "summary": "One file on the list, identified by business identity.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, name: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "size(size: impl Into<SharedString>) -> Self",
        "state(state: UploadState) -> Self",
        "uploading(fraction: impl Into<Option<f32>>) -> Self",
        "done() -> Self",
        "failed(reason: impl Into<SharedString>) -> Self",
        "cancelled() -> Self",
        "refused(reason: impl Into<SharedString>) -> Self"
      ]
    },
    {
      "name": "UploadState",
      "path": "gpui_kit::controls::UploadState",
      "summary": "Where one file has got to.",
      "variants": [
        "Queued",
        "Uploading",
        "Done",
        "Failed",
        "Cancelled",
        "Refused"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "ValueKind",
      "path": "gpui_kit::structured::ValueKind",
      "summary": "What kind of thing a row holds, which is the one fact its node publishes.",
      "variants": [
        "Null",
        "Bool",
        "Number",
        "String",
        "Array",
        "Object",
        "Redacted"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "Velocity",
      "path": "gpui_kit::motion::Velocity",
      "summary": "How fast a gesture is moving, in pixels a second on each axis.",
      "variants": [],
      "construct": [
        "new(x: f32, y: f32) -> Self"
      ],
      "options": [
        "speed() -> f32",
        "is_still() -> bool"
      ]
    },
    {
      "name": "VelocityTracker",
      "path": "gpui_kit::motion::VelocityTracker",
      "summary": "The speed and direction of a pointer, measured over a short trailing window.",
      "variants": [],
      "construct": [
        "new() -> Self",
        "with_window(window: Duration) -> Self"
      ],
      "options": []
    },
    {
      "name": "ViewportState",
      "path": "gpui_kit::content::ViewportState",
      "summary": "What is behind the panel right now.",
      "variants": [
        "Ready",
        "Loading",
        "Unavailable",
        "Refused",
        "Failed"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "Withheld",
      "path": "gpui_kit::controls::Withheld",
      "summary": "",
      "variants": [],
      "construct": [],
      "options": []
    },
    {
      "name": "WizardIntent",
      "path": "gpui_kit::navigation::WizardIntent",
      "summary": "What a gesture asked the flow to do. The wizard applies none of it.",
      "variants": [
        "Step",
        "Back",
        "Next",
        "Finish"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "WizardLayout",
      "path": "gpui_kit::navigation::WizardLayout",
      "summary": "Which way the steps are laid out.",
      "variants": [
        "Horizontal",
        "Vertical"
      ],
      "construct": [],
      "options": []
    },
    {
      "name": "WizardStep",
      "path": "gpui_kit::navigation::WizardStep",
      "summary": "One step of a flow, identified by what it is rather than where it sits.",
      "variants": [],
      "construct": [
        "new(id: impl Into<SharedString>, title: impl Into<SharedString>) -> Self"
      ],
      "options": [
        "description(description: impl Into<SharedString>) -> Self",
        "status(status: StepStatus) -> Self",
        "complete() -> Self",
        "current() -> Self",
        "upcoming() -> Self",
        "blocked(reason: impl Into<SharedString>) -> Self",
        "failed(reason: impl Into<SharedString>) -> Self",
        "reachable(reachable: bool) -> Self"
      ]
    }
  ],
  "scenes": [
    {
      "name": "button",
      "capture": "cargo run -p xtask -- scenes capture button",
      "uses": [
        "Button",
        "GradientSpinner",
        "PulseLoader",
        "Skeleton"
      ],
      "example": "fn button(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .child(\n            row(&theme)\n                .child(\n                    Button::new(\"scene.button.primary\")\n                        .label(\"Primary\")\n                        .primary()\n                        .on_click(|_, _| {}),\n                )\n                .child(\n                    Button::new(\"scene.button.secondary\")\n                        .label(\"Secondary\")\n                        .secondary()\n                        .on_click(|_, _| {}),\n                )\n                .child(\n                    Button::new(\"scene.button.ghost\")\n                        .label(\"Ghost\")\n                        .ghost()\n                        .on_click(|_, _| {}),\n                )\n                .child(\n                    Button::new(\"scene.button.danger\")\n                        .label(\"Delete\")\n                        .danger()\n                        .on_click(|_, _| {}),\n                )\n                .child(\n                    Button::new(\"scene.button.link\")\n                        .label(\"Learn more\")\n                        .link()\n                        .on_click(|_, _| {}),\n                ),\n        )\n        .child(\n            row(&theme)\n                .child(\n                    Button::new(\"scene.button.disabled\")\n                        .label(\"Unavailable\")\n                        .primary()\n                        .disabled(true)\n                        .on_click(|_, _| {}),\n                )\n                .child(\n                    Button::new(\"scene.button.loading\")\n                        .label(\"Saving\")\n                        .primary()\n                        .loading(true)\n                        .on_click(|_, _| {}),\n                )\n                .child(\n                    Button::new(\"scene.button.selected\")\n                        .label(\"Selected\")\n                        .secondary()\n                        .selected(true)\n                        .on_click(|_, _| {}),\n                ),\n        )\n        .child(\n            row(&theme)\n                .child(Button::new(\"scene.button.xs\").label(\"Extra small\").xs())\n                .child(Button::new(\"scene.button.sm\").label(\"Small\").small())\n                .child(Button::new(\"scene.button.md\").label(\"Medium\").medium())\n                .child(Button::new(\"scene.button.lg\").label(\"Large\").large()),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "badge",
      "capture": "cargo run -p xtask -- scenes capture badge",
      "uses": [
        "Badge"
      ],
      "example": "fn badge(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .child(\n            row(&theme)\n                .child(Badge::new(\"Neutral\").neutral().id(\"scene.badge.neutral\"))\n                .child(Badge::new(\"Accent\").accent().id(\"scene.badge.accent\"))\n                .child(Badge::new(\"Success\").success().id(\"scene.badge.success\"))\n                .child(Badge::new(\"Warning\").warning().id(\"scene.badge.warning\"))\n                .child(Badge::new(\"Danger\").danger().id(\"scene.badge.danger\"))\n                .child(Badge::new(\"Info\").info().id(\"scene.badge.info\")),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "card",
      "capture": "cargo run -p xtask -- scenes capture card",
      "uses": [
        "Badge",
        "Card",
        "ListRow"
      ],
      "example": "fn card(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .child(\n            Card::new()\n                .id(\"scene.card\")\n                .child(\n                    ListRow::new()\n                        .id(\"scene.card.runtime\")\n                        .child(div().flex_1().child(\"Native runtime\"))\n                        .child(Badge::new(\"Ready\").success()),\n                )\n                .child(\n                    ListRow::new()\n                        .id(\"scene.card.catalog\")\n                        .child(div().flex_1().child(\"Model catalog\"))\n                        .child(Badge::new(\"Stale\").warning()),\n                ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "status",
      "capture": "cargo run -p xtask -- scenes capture status",
      "uses": [
        "Callout",
        "StatusDot",
        "StatusLine"
      ],
      "example": "fn status(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .child(\n            row(&theme)\n                .child(StatusDot::new(Tone::Success))\n                .child(StatusDot::new(Tone::Warning))\n                .child(StatusDot::new(Tone::Danger))\n                .child(StatusDot::new(Tone::Neutral)),\n        )\n        .child(\n            StatusLine::new(\"Connected\", Tone::Success).id(\"scene.status.line\"),\n        )\n        .child(\n            Callout::new(\n                \"The host refused this action. The refusal is shown, not converted to an empty state.\",\n                Tone::Danger,\n            )\n            .id(\"scene.status.refusal\"),\n        )\n        .child(\n            Callout::new(\"Refreshing failed. The last verified value remains visible.\", Tone::Warning)\n                .id(\"scene.status.stale\"),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "loading",
      "capture": "cargo run -p xtask -- scenes capture loading",
      "uses": [
        "GradientSpinner",
        "PulseLoader",
        "Skeleton"
      ],
      "example": "fn loading(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .child(\n            row(&theme)\n                .child(PulseLoader::new(\"scene.loading.pulse\").label(\"Loading providers\"))\n                .child(GradientSpinner::new(\"scene.loading.spinner\").label(\"Contacting host\")),\n        )\n        .child(\n            Skeleton::new(\"scene.loading.skeleton\")\n                .rows(3)\n                .label(\"Loading list\"),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "choice",
      "capture": "cargo run -p xtask -- scenes capture choice",
      "uses": [
        "Checkbox",
        "Radio",
        "Slider",
        "Switch"
      ],
      "example": "fn choice(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    div()\n        .flex()\n        .flex_col()\n        .gap(px(theme.space(Space::Md)))\n        .p(px(theme.space(Space::Lg)))\n        .w(px(360.0))\n        .child(\n            Checkbox::new(\"scene.choice.telemetry\")\n                .label(\"Send anonymous usage data\")\n                .description(\"Counts only, never file contents\")\n                .checked(true)\n                .on_change(|_, _, _| {}),\n        )\n        .child(\n            Checkbox::new(\"scene.choice.partial\")\n                .label(\"Some providers enabled\")\n                .mixed()\n                .on_change(|_, _, _| {}),\n        )\n        .child(\n            Checkbox::new(\"scene.choice.locked\")\n                .label(\"Managed by policy\")\n                .checked(true)\n                .disabled(true),\n        )\n        .child(\n            Radio::new(\"scene.choice.ask\")\n                .label(\"Ask before every action\")\n                .selected(true)\n                .on_select(|_, _| {}),\n        )\n        .child(\n            Radio::new(\"scene.choice.auto\")\n                .label(\"Run without asking\")\n                .description(\"Consequential actions still require approval\")\n                .on_select(|_, _| {}),\n        )\n        .child(\n            Switch::new(\"scene.choice.preview\")\n                .label(\"Preview releases\")\n                .on(true)\n                .on_change(|_, _, _| {}),\n        )\n        .child(\n            Slider::new(\"scene.choice.temperature\")\n                .label(\"Temperature\")\n                .range(0.0, 2.0)\n                .step(0.1)\n                .value(0.7)\n                .display(\"0.7\")\n                .on_change(|_, _, _| {}),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "input",
      "capture": "cargo run -p xtask -- scenes capture input",
      "uses": [
        "Select",
        "TextArea",
        "TextInput"
      ],
      "example": "fn input(window: &mut Window, cx: &mut App) -> AnyElement {\n    ensure_inputs(window, cx);\n    let inputs = cx.global::<SceneInputs>();\n    let (token, disabled, invalid, provider) = (\n        inputs.token.clone(),\n        inputs.disabled.clone(),\n        inputs.invalid.clone(),\n        inputs.provider.clone(),\n    );\n    let theme = cx.theme().clone();\n\n    div()\n        .flex()\n        .flex_col()\n        .gap(px(theme.space(Space::Md)))\n        .p(px(theme.space(Space::Lg)))\n        .w(px(360.0))\n        .child(token)\n        .child(disabled)\n        .child(invalid)\n        .child(provider)\n        .into_any_element()\n}"
    },
    {
      "name": "textarea",
      "capture": "cargo run -p xtask -- scenes capture textarea",
      "uses": [
        "Select",
        "TextArea",
        "TextInput"
      ],
      "example": "fn textarea(window: &mut Window, cx: &mut App) -> AnyElement {\n    ensure_inputs(window, cx);\n    let inputs = cx.global::<SceneInputs>();\n    let (notes, review, frozen) = (\n        inputs.notes.clone(),\n        inputs.review.clone(),\n        inputs.frozen.clone(),\n    );\n    let theme = cx.theme().clone();\n\n    div()\n        .flex()\n        .flex_col()\n        .gap(px(theme.space(Space::Md)))\n        .p(px(theme.space(Space::Lg)))\n        .w(px(360.0))\n        .child(notes)\n        .child(review)\n        .child(frozen)\n        .into_any_element()\n}"
    },
    {
      "name": "form",
      "capture": "cargo run -p xtask -- scenes capture form",
      "uses": [
        "Combobox",
        "FormField",
        "NumberInput",
        "SegmentedControl",
        "TagInput",
        "TextInput"
      ],
      "example": "fn form(window: &mut Window, cx: &mut App) -> AnyElement {\n    ensure_form(window, cx);\n    let form = cx.global::<SceneForm>();\n    let (name, retention, region, labels) = (\n        form.name.clone(),\n        form.retention.clone(),\n        form.region.clone(),\n        form.labels.clone(),\n    );\n    let theme = cx.theme().clone();\n\n    stack(&theme)\n        .w(px(420.0))\n        .h(px(720.0))\n        .child(\n            FormField::new(\"scene.form.name.field\", \"Workspace name\")\n                .control(\"scene.form.name\")\n                .required(true)\n                // The description says what the field is for and the error\n                // says what went wrong; neither answers for the other.\n                .description(\"Shown wherever this workspace appears.\")\n                .error(\"A workspace with this name already exists.\")\n                .child(name),\n        )\n        .child(\n            FormField::new(\"scene.form.retention.field\", \"Retention\")\n                .control(\"scene.form.retention\")\n                .required(true)\n                .description(\"How long a finished run is kept.\")\n                .error(\"This workspace allows at most 60 days.\")\n                .child(retention),\n        )\n        .child(\n            FormField::new(\"scene.form.visibility.field\", \"Visibility\")\n                .control(\"scene.form.visibility\")\n                .description(\"Who can open the runs in this workspace.\")\n                .child(\n                    SegmentedControl::new(\"scene.form.visibility\")\n                        .label(\"Visibility\")\n                        .segments([\n                            Segment::new(\"private\", \"Private\"),\n                            Segment::new(\"team\", \"Team\"),\n                            Segment::new(\"public\", \"Public\").disabled(true),\n                        ])\n                        .selected(\"team\")\n                        .on_select(|_, _, _| {}),\n                ),\n        )\n        .child(\n            FormField::new(\"scene.form.labels.field\", \"Labels\")\n                .control(\"scene.form.labels\")\n                // The keystroke lives in the hint, so the description does not\n                // spend a second line repeating it.\n                .description(\"At most five, and each one only once.\")\n                .hint(\"enter\")\n                .child(labels),\n        )\n        .child(\n            FormField::new(\"scene.form.region.field\", \"Region\")\n                .control(\"scene.form.region\")\n                .description(\"Where runs in this workspace are executed.\")\n                .child(region),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "actions",
      "capture": "cargo run -p xtask -- scenes capture actions",
      "uses": [
        "Avatar",
        "Button",
        "ButtonGroup",
        "Checkbox",
        "CommandPalette",
        "ContextMenu",
        "DescriptionList",
        "Divider",
        "EmptyState",
        "GradientSpinner",
        "Icon",
        "IconButton",
        "List",
        "Menu",
        "Popover",
        "ProgressBar",
        "PulseLoader",
        "Skeleton",
        "SplitButton",
        "Tag",
        "Timeline"
      ],
      "example": "fn actions(window: &mut Window, cx: &mut App) -> AnyElement {\n    ensure_actions(window, cx);\n    let split = cx.global::<SceneActions>().split.clone();\n    let theme = cx.theme().clone();\n\n    stack(&theme)\n        .w(px(560.0))\n        .h(px(360.0))\n        .child(\n            row(&theme)\n                .child(\n                    IconButton::new(\"scene.actions.copy\", Icon::Copy, \"Copy run id\")\n                        .on_click(|_, _| {}),\n                )\n                .child(\n                    IconButton::new(\"scene.actions.rename\", Icon::Pen, \"Rename run\")\n                        .secondary()\n                        .on_click(|_, _| {}),\n                )\n                .child(\n                    IconButton::new(\"scene.actions.refresh\", Icon::Refresh, \"Refresh\")\n                        .secondary()\n                        .loading(true)\n                        .on_click(|_, _| {}),\n                )\n                .child(\n                    IconButton::new(\"scene.actions.delete\", Icon::Trash, \"Delete run\")\n                        .danger()\n                        .on_click(|_, _| {}),\n                )\n                .child(\n                    IconButton::new(\"scene.actions.archive\", Icon::Archive, \"Archive run\")\n                        .secondary()\n                        .disabled(true)\n                        .on_click(|_, _| {}),\n                ),\n        )\n        .child(\n            row(&theme).child(\n                ButtonGroup::new(\"scene.actions.range\")\n                    .children([\n                        Button::new(\"scene.actions.range.day\")\n                            .label(\"Day\")\n                            .secondary()\n                            .on_click(|_, _| {}),\n                        Button::new(\"scene.actions.range.week\")\n                            .label(\"Week\")\n                            .secondary()\n                            .selected(true)\n                            .on_click(|_, _| {}),\n                        Button::new(\"scene.actions.range.month\")\n                            .label(\"Month\")\n                            .secondary()\n                            .on_click(|_, _| {}),\n                    ])\n                    .small(),\n            ),\n        )\n        .child(row(&theme).child(split))\n        .into_any_element()\n}"
    },
    {
      "name": "content",
      "capture": "cargo run -p xtask -- scenes capture content",
      "uses": [
        "Avatar",
        "Button",
        "DescriptionList",
        "Divider",
        "EmptyState",
        "List",
        "ProgressBar",
        "Tag",
        "Timeline"
      ],
      "example": "fn content(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    div()\n        .flex()\n        .flex_col()\n        .gap(px(theme.space(Space::Lg)))\n        .p(px(theme.space(Space::Lg)))\n        .w(px(420.0))\n        .child(\n            ProgressBar::new(\"scene.content.upload\")\n                .label(\"Indexing workspace\")\n                .count(3, 12),\n        )\n        .child(ProgressBar::new(\"scene.content.unknown\").label(\"Contacting host\"))\n        .child(Divider::new().id(\"scene.content.rule\").label(\"Filters\"))\n        .child(\n            div()\n                .flex()\n                .flex_row()\n                .flex_wrap()\n                .gap(px(theme.space(Space::Xs)))\n                .child(Tag::new(\"scene.content.tag.rust\", \"rust\").on_remove(|_, _| {}))\n                .child(\n                    Tag::new(\"scene.content.tag.failing\", \"failing\")\n                        .tone(Tone::Danger)\n                        .on_remove(|_, _| {}),\n                )\n                .child(Tag::new(\"scene.content.tag.pinned\", \"pinned\").disabled(true)),\n        )\n        .child(\n            div()\n                .flex()\n                .flex_row()\n                .items_center()\n                .gap(px(theme.space(Space::Sm)))\n                .child(Avatar::new(\"Ada Lovelace\").id(\"scene.content.avatar\"))\n                .child(Avatar::new(\"\").size(24.0)),\n        )\n        .child(\n            EmptyState::new(\"scene.content.empty\", \"No runs yet\")\n                .kind(EmptyKind::Unstarted)\n                .detail(\"A run appears here once one has been started.\"),\n        )\n        .child(\n            EmptyState::new(\"scene.content.refused\", \"The host refused the request\")\n                .kind(EmptyKind::Unavailable)\n                .detail(\"Approval is required for this workspace.\")\n                .action(\n                    Button::new(\"scene.content.retry\")\n                        .label(\"Try again\")\n                        .secondary()\n                        .on_click(|_, _| {}),\n                ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "kbd",
      "capture": "cargo run -p xtask -- scenes capture kbd",
      "uses": [
        "Kbd"
      ],
      "example": "fn kbd(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .child(\n            row(&theme)\n                .child(Kbd::new(\"cmd-shift-p\").id(\"scene.kbd.palette\"))\n                .child(Kbd::new(\"ctrl-c\").id(\"scene.kbd.copy\"))\n                .child(Kbd::new(\"enter\").id(\"scene.kbd.confirm\"))\n                .child(Kbd::new(\"escape\").id(\"scene.kbd.dismiss\")),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "overlay",
      "capture": "cargo run -p xtask -- scenes capture overlay",
      "uses": [
        "Button",
        "Overlay"
      ],
      "example": "fn overlay(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(520.0))\n        .h(px(320.0))\n        .child(div().child(\"Content behind the dialog\"))\n        .child(\n            Overlay::modal(\"scene.overlay.dialog\")\n                .placement(Placement::Center)\n                .child(\n                    crate::overlay::surface(&theme, gpui_kit_theme::Elevation::Modal)\n                        .w(px(320.0))\n                        .p(px(theme.spacing.lg))\n                        .gap(px(theme.spacing.sm))\n                        .child(div().child(\"Delete this workspace?\"))\n                        .child(\n                            div()\n                                .row()\n                                .gap(px(theme.spacing.sm))\n                                .child(\n                                    Button::new(\"scene.overlay.cancel\")\n                                        .label(\"Cancel\")\n                                        .secondary()\n                                        .on_click(|_, _| {}),\n                                )\n                                .child(\n                                    Button::new(\"scene.overlay.confirm\")\n                                        .label(\"Delete\")\n                                        .danger()\n                                        .on_click(|_, _| {}),\n                                ),\n                        ),\n                ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "dialog",
      "capture": "cargo run -p xtask -- scenes capture dialog",
      "uses": [
        "Dialog"
      ],
      "example": "fn dialog(window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneDialog>() {\n        let replace = cx.new(|cx| {\n            Dialog::new(\"scene.dialog.replace\", window, cx)\n                .title(\"Replace the existing theme?\")\n                .description(\n                    \"The application owns this decision. The dialog presents it and reports what \\\n                     was chosen.\",\n                )\n                .cancel_label(\"Cancel\")\n                .confirm_label(\"Replace\")\n        });\n        replace.update(cx, |dialog, cx| dialog.open(window, cx));\n        cx.set_global(SceneDialog { replace });\n    }\n    let replace = cx.global::<SceneDialog>().replace.clone();\n    let theme = cx.theme().clone();\n\n    stack(&theme)\n        .w(px(560.0))\n        .h(px(360.0))\n        .child(div().child(\"Content behind the dialog\"))\n        .child(replace)\n        .into_any_element()\n}"
    },
    {
      "name": "tooltip",
      "capture": "cargo run -p xtask -- scenes capture tooltip",
      "uses": [
        "Button",
        "Tooltip"
      ],
      "example": "fn tooltip(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .child(\n            row(&theme).child(\n                div()\n                    .id(\"scene.tooltip.host\")\n                    .tip(\"scene.tooltip.export\", \"Writes the theme to a file on disk\")\n                    .child(\n                        Button::new(\"scene.tooltip.export\")\n                            .label(\"Export theme\")\n                            .secondary()\n                            .on_click(|_, _| {}),\n                    ),\n            ),\n        )\n        // Hover help only exists while a pointer rests on the control, so the\n        // surface itself is also shown outright, where it can be reviewed.\n        .child(\n            row(&theme).child(\n                Tooltip::new(\"scene.tooltip.help\", \"Writes the theme to a file on disk\")\n                    .describes(\"scene.tooltip.export\"),\n            ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "menu",
      "capture": "cargo run -p xtask -- scenes capture menu",
      "uses": [
        "Avatar",
        "Button",
        "Checkbox",
        "CommandPalette",
        "ContextMenu",
        "DescriptionList",
        "Divider",
        "EmptyState",
        "Icon",
        "List",
        "Menu",
        "Popover",
        "ProgressBar",
        "Tag",
        "Timeline"
      ],
      "example": "fn menu(window: &mut Window, cx: &mut App) -> AnyElement {\n    ensure_menus(window, cx);\n    let menu = cx.global::<SceneMenus>().menu.clone();\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(560.0))\n        .h(px(360.0))\n        .child(menu)\n        .into_any_element()\n}"
    },
    {
      "name": "context-menu",
      "capture": "cargo run -p xtask -- scenes capture context-menu",
      "uses": [
        "Avatar",
        "Button",
        "Checkbox",
        "CommandPalette",
        "ContextMenu",
        "DescriptionList",
        "Divider",
        "EmptyState",
        "Icon",
        "List",
        "Menu",
        "Popover",
        "ProgressBar",
        "Tag",
        "Timeline"
      ],
      "example": "fn context_menu(window: &mut Window, cx: &mut App) -> AnyElement {\n    ensure_menus(window, cx);\n    let context = cx.global::<SceneMenus>().context.clone();\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(560.0))\n        .h(px(400.0))\n        // Opening a context menu reports the row that was pointed at; what is\n        // selected stays the host's answer.\n        .child(div().child(\"The right-click reports the row. Nothing is selected by it.\"))\n        .child(context)\n        .into_any_element()\n}"
    },
    {
      "name": "popover",
      "capture": "cargo run -p xtask -- scenes capture popover",
      "uses": [
        "Avatar",
        "Button",
        "Checkbox",
        "CommandPalette",
        "ContextMenu",
        "DescriptionList",
        "Divider",
        "EmptyState",
        "Icon",
        "List",
        "Menu",
        "Popover",
        "ProgressBar",
        "Tag",
        "Timeline"
      ],
      "example": "fn popover(window: &mut Window, cx: &mut App) -> AnyElement {\n    ensure_menus(window, cx);\n    let popover = cx.global::<SceneMenus>().popover.clone();\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(520.0))\n        .h(px(320.0))\n        // The trigger keeps its place while the surface is open, because the\n        // surface is anchored to it rather than laid out beside it.\n        .child(div().child(\"The trigger owns whether the surface is open.\"))\n        .child(popover)\n        .into_any_element()\n}"
    },
    {
      "name": "command-palette",
      "capture": "cargo run -p xtask -- scenes capture command-palette",
      "uses": [
        "Avatar",
        "Button",
        "Checkbox",
        "CommandPalette",
        "ContextMenu",
        "DescriptionList",
        "Divider",
        "EmptyState",
        "Icon",
        "List",
        "Menu",
        "Popover",
        "ProgressBar",
        "Tag",
        "Timeline"
      ],
      "example": "fn command_palette(window: &mut Window, cx: &mut App) -> AnyElement {\n    ensure_menus(window, cx);\n    let palette = cx.global::<SceneMenus>().palette.clone();\n    let theme = cx.theme().clone();\n    // A palette is summoned over whatever is on screen, so it sits centred\n    // near the top of the surface rather than in a corner of it.\n    stack(&theme)\n        .w_full()\n        .h(px(420.0))\n        .items_center()\n        .pt(px(theme.spacing.xxl))\n        .child(palette)\n        .into_any_element()\n}"
    },
    {
      "name": "toast",
      "capture": "cargo run -p xtask -- scenes capture toast",
      "uses": [
        "DescriptionList",
        "List",
        "Timeline",
        "ToastLayer"
      ],
      "example": "fn toast(_window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneToasts>() {\n        let layer = cx.new(|cx| ToastLayer::new(cx).capacity(4));\n        cx.set_global(SceneToasts { layer });\n        toast_push(\n            cx,\n            Toast::new(\"scene.toast.saved\", \"Theme exported to disk\").tone(Tone::Success),\n        );\n        toast_push(\n            cx,\n            Toast::new(\"scene.toast.stale\", \"Refreshing the model catalog failed\")\n                .tone(Tone::Warning)\n                .detail(\"The last verified catalog is still shown.\"),\n        );\n        toast_push(\n            cx,\n            // A refusal, so the offer is the thing that could change the\n            // answer. Retrying an unapproved call only gets refused again.\n            Toast::new(\n                \"scene.toast.refused\",\n                \"The host refused to publish this run\",\n            )\n            .tone(Tone::Warning)\n            .detail(\"Approval is required for this workspace.\")\n            .action(\"Request approval\", |_, _| {}),\n        );\n        // The failure beside the refusal, so the two tones are on screen\n        // together and the difference between them is a picture rather than a\n        // claim.\n        toast_push(\n            cx,\n            Toast::new(\"scene.toast.failed\", \"Publishing this run failed\")\n                .tone(Tone::Danger)\n                .detail(\"The publish service did not respond.\")\n                .action(\"Try again\", |_, _| {}),\n        );\n    }\n    let layer = cx.global::<SceneToasts>().layer.clone();\n    let theme = cx.theme().clone();\n\n    stack(&theme)\n        .w(px(560.0))\n        .h(px(360.0))\n        .child(div().child(\"Content behind the notifications\"))\n        // A failure keeps its report on screen; only the success times out.\n        .child(div().child(\"A danger or warning toast stays until it is dismissed.\"))\n        .child(layer)\n        .into_any_element()\n}"
    },
    {
      "name": "tabs",
      "capture": "cargo run -p xtask -- scenes capture tabs",
      "uses": [
        "Badge",
        "Icon",
        "Tabs"
      ],
      "example": "fn tabs(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(520.0))\n        .child(\n            Tabs::new(\"scene.tabs.workspace\")\n                .tabs([\n                    TabItem::new(\"overview\", \"Overview\").icon(Icon::Widget),\n                    TabItem::new(\"runs\", \"Runs\").badge(\"12\"),\n                    TabItem::new(\"logs\", \"Logs\"),\n                    TabItem::new(\"billing\", \"Billing\").disabled(true),\n                ])\n                .selected(\"runs\")\n                .on_select(|_, _, _| {}),\n        )\n        // The body belongs to the caller: tabs render the strip only.\n        .child(div().child(\"Runs are rendered by the caller, not by the strip.\"))\n        .into_any_element()\n}"
    },
    {
      "name": "accordion",
      "capture": "cargo run -p xtask -- scenes capture accordion",
      "uses": [
        "Accordion",
        "Toggle",
        "ToggleGroup"
      ],
      "example": "fn accordion(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(520.0))\n        .child(\n            Accordion::new(\"scene.accordion.settings\")\n                .expanded_ids(&[\"network\"])\n                .on_toggle(|_, _, _, _| {})\n                .section(\n                    AccordionSection::new(\"network\", \"Network\")\n                        .description(\"How this machine reaches a host\")\n                        .body(div().child(\"Requests go out over the system proxy.\")),\n                )\n                .section(\n                    AccordionSection::new(\"storage\", \"Storage\")\n                        .description(\"Where verified results are kept\")\n                        .body(div().child(\"Nothing is written outside the workspace.\")),\n                )\n                .section(\n                    AccordionSection::new(\"policy\", \"Managed by policy\")\n                        .description(\"This machine cannot change these\")\n                        .disabled(true)\n                        .body(div().child(\"Set by the administrator.\")),\n                ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "breadcrumb",
      "capture": "cargo run -p xtask -- scenes capture breadcrumb",
      "uses": [
        "Breadcrumb"
      ],
      "example": "fn breadcrumb(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(520.0))\n        .child(\n            Breadcrumb::new(\"scene.breadcrumb.short\")\n                .crumbs([\n                    Crumb::new(\"workspace\", \"Workspace\"),\n                    Crumb::new(\"runs\", \"Runs\"),\n                    Crumb::new(\"run-4821\", \"Indexing\"),\n                ])\n                .on_select(|_, _, _| {}),\n        )\n        .child(\n            Breadcrumb::new(\"scene.breadcrumb.long\")\n                .crumbs([\n                    Crumb::new(\"workspace\", \"Workspace\"),\n                    Crumb::new(\"projects\", \"Projects\"),\n                    Crumb::new(\"gpui-kit\", \"gpui-kit\"),\n                    Crumb::new(\"runs\", \"Runs\"),\n                    Crumb::new(\"run-4821\", \"Indexing\"),\n                ])\n                .max_visible(3)\n                .on_select(|_, _, _| {})\n                .on_reveal(|_, _, _| {}),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "list",
      "capture": "cargo run -p xtask -- scenes capture list",
      "uses": [
        "List"
      ],
      "example": "fn list(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(420.0))\n        .child(\n            div()\n                .type_scale(&theme, gpui_kit_theme::TypeScale::Caption)\n                .text_color(theme.colors.text_muted)\n                .child(SharedString::from(format!(\n                    \"{FIXTURE_RECORDS} fixture records; only the rendered ones publish\"\n                ))),\n        )\n        .child(\n            div()\n                .hairline(&theme)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(\n                    List::new(\"scene.list.records\", FIXTURE_RECORDS, |index, _, _| {\n                        let (id, label) = fixture_record(index);\n                        ListItem::new(id, label.clone()).text(label)\n                    })\n                    .selected(fixture_record(2).0)\n                    .visible_rows(8)\n                    .on_select(|_, _, _| {}),\n                ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "table",
      "capture": "cargo run -p xtask -- scenes capture table",
      "uses": [
        "Badge",
        "Table"
      ],
      "example": "fn table(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let state = |label: &'static str, tone: Tone| {\n        Cell::new(Badge::new(label).tone(tone))\n            .text(label)\n            .published(true)\n    };\n    stack(&theme)\n        .w(px(600.0))\n        .child(\n            Table::new(\"scene.table.runs\")\n                .columns([\n                    Column::new(\"name\", \"Run\").flex(2.0).sortable(true),\n                    Column::new(\"state\", \"State\").fixed(110.0),\n                    Column::new(\"duration\", \"Duration\")\n                        .fixed(96.0)\n                        .align(Align::End)\n                        .sortable(true),\n                ])\n                .sorted_by(\"duration\", SortDirection::Descending)\n                .selected(\"run-b12\")\n                .rows([\n                    Row::new(\"run-a04\")\n                        .text(\"Indexing\")\n                        .cell(\"name\", \"Indexing\")\n                        .cell(\"state\", state(\"Ready\", Tone::Success))\n                        .cell(\"duration\", \"4m 12s\"),\n                    Row::new(\"run-b12\")\n                        .text(\"Verifying\")\n                        .cell(\"name\", \"Verifying\")\n                        .cell(\"state\", state(\"Stale\", Tone::Warning))\n                        .cell(\"duration\", \"2m 08s\"),\n                    Row::new(\"run-c31\")\n                        .text(\"Publishing\")\n                        .cell(\"name\", \"Publishing\")\n                        .cell(\"state\", state(\"Refused\", Tone::Danger))\n                        .cell(\"duration\", \"1m 44s\"),\n                    Row::new(\"run-d02\")\n                        .text(\"Archiving\")\n                        .disabled(true)\n                        .cell(\"name\", \"Archiving\")\n                        .cell(\"state\", state(\"Managed\", Tone::Neutral))\n                        .cell(\"duration\", \"0m 51s\"),\n                ])\n                .visible_rows(6)\n                .on_sort(|_, _, _, _| {})\n                .on_select(|_, _, _| {}),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "data-grid",
      "capture": "cargo run -p xtask -- scenes capture data-grid",
      "uses": [
        "Badge",
        "BulkBar",
        "Button",
        "DataGrid",
        "DescriptionList",
        "List",
        "Table",
        "Timeline"
      ],
      "example": "fn data_grid(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let detail_theme = theme.clone();\n    stack(&theme)\n        .w(px(760.0))\n        .child(\n            BulkBar::new(\"scene.data-grid.bulk\", 2)\n                .total(FIXTURE_JOBS_TOTAL)\n                .action(\n                    Button::new(\"scene.data-grid.bulk.retry\")\n                        .label(\"Retry\")\n                        .secondary()\n                        .small()\n                        .on_click(|_, _| {}),\n                )\n                .action(\n                    Button::new(\"scene.data-grid.bulk.archive\")\n                        .label(\"Archive\")\n                        .secondary()\n                        .small()\n                        .on_click(|_, _| {}),\n                )\n                .on_select_all(|_, _| {})\n                .on_dismiss(|_, _| {}),\n        )\n        .child(\n            DataGrid::new(\n                \"scene.data-grid.jobs\",\n                FIXTURE_JOBS_LOADED,\n                |index, _, _| grid_row(index),\n            )\n            .total(FIXTURE_JOBS_TOTAL)\n            .columns(grid_columns())\n            .sorted_by(\"duration\", SortDirection::Descending)\n            .selection_mode(SelectionMode::Multiple)\n            .selected([\"job-0001\", \"job-0003\"])\n            .expanded([Expanded::new(\"job-0002\", 2)])\n            .detail_rows(2)\n            .detail(move |id, _, _| grid_detail(&detail_theme, id))\n            .visible_rows(9)\n            .on_sort(|_, _, _, _| {})\n            .on_select(|_, _, _| {})\n            .on_resize(|_, _, _, _| {})\n            .on_fit(|_, _, _| {})\n            .on_reorder(|_, _, _| {})\n            .on_expand(|_, _, _, _| {})\n            .on_edit_request(|_, _, _, _| {})\n            .on_edit(|_, _, _| {}),\n        )\n        .child(\n            div()\n                .type_scale(&theme, gpui_kit_theme::TypeScale::Caption)\n                .text_color(theme.colors.text_muted)\n                .child(SharedString::from(format!(\n                    \"{FIXTURE_JOBS_LOADED} rows loaded of {FIXTURE_JOBS_TOTAL}; only the drawn \\\n                     ones publish\"\n                ))),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "data-grid-editing",
      "capture": "cargo run -p xtask -- scenes capture data-grid-editing",
      "uses": [
        "Badge",
        "DataGrid",
        "Table"
      ],
      "example": "fn data_grid_editing(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(760.0))\n        .child(\n            DataGrid::new(\"scene.data-grid-editing.jobs\", 6, |index, _, _| {\n                grid_row(index)\n            })\n            .columns(grid_columns())\n            .sorted_by(\"duration\", SortDirection::Descending)\n            .selection_mode(SelectionMode::Single)\n            .selected([\"job-0001\"])\n            .editing(Some(EditingCell::new(\"job-0001\", \"owner\", \"fixture-b\")))\n            .visible_rows(6)\n            .on_sort(|_, _, _, _| {})\n            .on_select(|_, _, _| {})\n            .on_resize(|_, _, _, _| {})\n            .on_edit_request(|_, _, _, _| {})\n            .on_edit(|_, _, _| {}),\n        )\n        .child(\n            div()\n                .type_scale(&theme, gpui_kit_theme::TypeScale::Caption)\n                .text_color(theme.colors.text_muted)\n                .child(SharedString::from(\n                    \"Escape reverts, enter commits, tab commits and moves on. The grid never \\\n                     writes the value.\",\n                )),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "tree",
      "capture": "cargo run -p xtask -- scenes capture tree",
      "uses": [
        "Icon",
        "Toggle",
        "ToggleGroup",
        "Tree"
      ],
      "example": "fn tree(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(360.0))\n        .child(\n            Tree::new(\"scene.tree.workspace\")\n                .expanded_ids(&[\"workspace\", \"crates\"])\n                .selected(\"tokens\")\n                .nodes([\n                    TreeNode::new(\"workspace\", \"workspace\")\n                        .icon(Icon::Folder)\n                        .children([\n                            TreeNode::new(\"crates\", \"crates\")\n                                .icon(Icon::Folder)\n                                .children([\n                                    TreeNode::new(\"kit\", \"gpui-kit\").icon(Icon::Document),\n                                    TreeNode::new(\"tokens\", \"gpui-kit-tokens\").icon(Icon::Document),\n                                ]),\n                            TreeNode::new(\"docs\", \"docs\")\n                                .icon(Icon::Folder)\n                                .children([TreeNode::new(\"components\", \"components.md\")\n                                    .icon(Icon::Document)]),\n                        ]),\n                    TreeNode::new(\"target\", \"target\")\n                        .icon(Icon::Archive)\n                        .disabled(true)\n                        .children([TreeNode::new(\"debug\", \"debug\").icon(Icon::Folder)]),\n                ])\n                .on_toggle(|_, _, _, _| {})\n                .on_select(|_, _, _| {}),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "split-pane",
      "capture": "cargo run -p xtask -- scenes capture split-pane",
      "uses": [
        "Collapsible",
        "SplitPane",
        "Toggle",
        "ToggleGroup"
      ],
      "example": "fn split_pane(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(620.0))\n        .h(px(380.0))\n        .child(\n            div()\n                .h(px(320.0))\n                .hairline(&theme)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(\n                    SplitPane::new(\"scene.split.workspace\")\n                        .horizontal()\n                        .ratio(0.34)\n                        .min_sizes(120.0, 200.0)\n                        .collapsible(true)\n                        .handle_label(\"Resize the file tree\")\n                        .start(filler(&theme, \"Files\", 6))\n                        .end(filler(&theme, \"Editor\", 8))\n                        .on_resize(|_, _, _| {})\n                        .on_collapse(|_, _, _| {}),\n                ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "scroll-area",
      "capture": "cargo run -p xtask -- scenes capture scroll-area",
      "uses": [
        "ScrollArea"
      ],
      "example": "fn scroll_area(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(480.0))\n        .child(\n            div()\n                .hairline(&theme)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(\n                    ScrollArea::new(\"scene.scroll.output\")\n                        .label(\"Run output\")\n                        .vertical()\n                        .height(200.0)\n                        .child(filler(&theme, \"Output\", 20)),\n                ),\n        )\n        // Nothing overflows here, so no scrollbar is drawn or published.\n        .child(\n            div()\n                .hairline(&theme)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(\n                    ScrollArea::new(\"scene.scroll.summary\")\n                        .label(\"Summary\")\n                        .vertical()\n                        .height(120.0)\n                        .child(filler(&theme, \"Summary\", 2)),\n                ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "scroll-shadow",
      "capture": "cargo run -p xtask -- scenes capture scroll-shadow",
      "uses": [
        "ScrollArea"
      ],
      "example": "fn scroll_shadow(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    crate::layout::scroll_to(\"scene.scroll.scrolled\", gpui::point(px(0.0), px(120.0)), cx);\n    stack(&theme)\n        .w(px(480.0))\n        .child(\n            div()\n                .hairline(&theme)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(\n                    ScrollArea::new(\"scene.scroll.scrolled\")\n                        .label(\"Run output\")\n                        .vertical()\n                        .height(200.0)\n                        .child(filler(&theme, \"Output\", 20)),\n                ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "toolbar",
      "capture": "cargo run -p xtask -- scenes capture toolbar",
      "uses": [
        "Avatar",
        "Button",
        "Checkbox",
        "CommandPalette",
        "ContextMenu",
        "DescriptionList",
        "Divider",
        "EmptyState",
        "Icon",
        "IconButton",
        "List",
        "Menu",
        "Popover",
        "ProgressBar",
        "SegmentedControl",
        "Tag",
        "Timeline",
        "Toolbar"
      ],
      "example": "fn toolbar(window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneToolbar>() {\n        let overflow = cx.new(|cx| {\n            Menu::new(\"scene.toolbar.overflow\", window, cx)\n                .trigger_icon(Icon::List)\n                .trigger_name(\"More actions\")\n        });\n        cx.set_global(SceneToolbar { overflow });\n    }\n    let overflow = cx.global::<SceneToolbar>().overflow.clone();\n    let theme = cx.theme().clone();\n\n    stack(&theme)\n        .w(px(620.0))\n        .child(\n            Toolbar::new(\"scene.toolbar.editor\")\n                .label(\"Editor actions\")\n                .group(\n                    \"history\",\n                    [\n                        ToolbarItem::new(\n                            \"editor.undo\",\n                            \"Undo\",\n                            IconButton::new(\"scene.toolbar.undo\", Icon::ArrowLeft, \"Undo\")\n                                .ghost()\n                                .small()\n                                .on_click(|_, _| {}),\n                        )\n                        .icon(Icon::ArrowLeft)\n                        .shortcut(\"cmd-z\"),\n                        ToolbarItem::new(\n                            \"editor.redo\",\n                            \"Redo\",\n                            IconButton::new(\"scene.toolbar.redo\", Icon::ArrowRight, \"Redo\")\n                                .ghost()\n                                .small()\n                                .on_click(|_, _| {}),\n                        )\n                        .icon(Icon::ArrowRight),\n                    ],\n                )\n                .group(\n                    \"view\",\n                    [ToolbarItem::new(\n                        \"editor.view\",\n                        \"View\",\n                        SegmentedControl::new(\"scene.toolbar.view\")\n                            .label(\"View\")\n                            .segments([\n                                Segment::new(\"code\", \"Code\"),\n                                Segment::new(\"split\", \"Split\"),\n                                Segment::new(\"preview\", \"Preview\"),\n                            ])\n                            .selected(\"split\")\n                            .small()\n                            .on_select(|_, _, _| {}),\n                    )],\n                )\n                .spacer()\n                .group(\n                    \"publish\",\n                    [\n                        ToolbarItem::new(\n                            \"editor.share\",\n                            \"Share\",\n                            Button::new(\"scene.toolbar.share\")\n                                .label(\"Share\")\n                                .secondary()\n                                .small()\n                                .on_click(|_, _| {}),\n                        )\n                        .icon(Icon::Copy),\n                        ToolbarItem::new(\n                            \"editor.publish\",\n                            \"Publish\",\n                            Button::new(\"scene.toolbar.publish\")\n                                .label(\"Publish\")\n                                .primary()\n                                .small()\n                                .on_click(|_, _| {}),\n                        )\n                        .icon(Icon::ArchiveUp),\n                        ToolbarItem::new(\n                            \"editor.archive\",\n                            \"Archive\",\n                            Button::new(\"scene.toolbar.archive\")\n                                .label(\"Archive\")\n                                .secondary()\n                                .small()\n                                .on_click(|_, _| {}),\n                        )\n                        .icon(Icon::Archive)\n                        .disabled(true),\n                    ],\n                )\n                .overflow_after(4)\n                .overflow_menu(overflow),\n        )\n        .child(div().child(\"The last two actions moved into the overflow menu.\"))\n        .into_any_element()\n}"
    },
    {
      "name": "sidebar",
      "capture": "cargo run -p xtask -- scenes capture sidebar",
      "uses": [
        "Badge",
        "Icon",
        "Sidebar"
      ],
      "example": "fn sidebar(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let rail = |ident: &'static str, collapsed: bool| {\n        Sidebar::new(ident)\n            .sections(navigation_sections())\n            .active(\"runs.active\")\n            .collapsed(collapsed)\n            .footer(\n                div()\n                    .type_scale(&theme, gpui_kit_theme::TypeScale::Caption)\n                    .text_color(theme.colors.text_faint)\n                    .child(if collapsed {\n                        SharedString::new_static(\"v0\")\n                    } else {\n                        SharedString::new_static(\"Fixture workspace\")\n                    }),\n            )\n            .on_select(|_, _, _| {})\n    };\n\n    stack(&theme)\n        .h(px(420.0))\n        .child(\n            div()\n                .flex()\n                .flex_row()\n                .h(px(360.0))\n                .gap(px(theme.space(Space::Lg)))\n                .child(rail(\"scene.sidebar.expanded\", false))\n                .child(rail(\"scene.sidebar.collapsed\", true)),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "pagination",
      "capture": "cargo run -p xtask -- scenes capture pagination",
      "uses": [
        "Pagination",
        "Select"
      ],
      "example": "fn pagination(window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<ScenePagination>() {\n        let page_size = cx.new(|cx| {\n            Select::new(\"scene.pagination.size\", window, cx)\n                .options([\n                    SelectOption::new(\"25\", \"25 per page\"),\n                    SelectOption::new(\"50\", \"50 per page\"),\n                    SelectOption::new(\"100\", \"100 per page\"),\n                ])\n                .selected(\"50\")\n        });\n        cx.set_global(ScenePagination { page_size });\n    }\n    let page_size = cx.global::<ScenePagination>().page_size.clone();\n    let theme = cx.theme().clone();\n\n    stack(&theme)\n        .w(px(620.0))\n        .child(\n            Pagination::new(\"scene.pagination.known\")\n                .page(9)\n                .total_pages(20)\n                .page_size(page_size)\n                .on_select(|_, _, _| {}),\n        )\n        // A host that only knows there is another page says exactly that: no\n        // last-page control, no numbers, and no total.\n        .child(\n            Pagination::new(\"scene.pagination.unknown\")\n                .page(3)\n                .unknown_total(true)\n                .on_select(|_, _, _| {}),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "drawer",
      "capture": "cargo run -p xtask -- scenes capture drawer",
      "uses": [
        "Avatar",
        "Button",
        "Checkbox",
        "DescriptionList",
        "Divider",
        "Drawer",
        "EmptyState",
        "List",
        "ProgressBar",
        "Tag",
        "Timeline"
      ],
      "example": "fn drawer(window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneDrawer>() {\n        let filters = cx.new(|cx| {\n            Drawer::new(\"scene.drawer.filters\", window, cx)\n                .edge(Edge::Right)\n                .size(320.0)\n                .title(\"Filter runs\")\n                .description(\"The drawer reports what was chosen. The host applies it.\")\n                .content(|_, cx| {\n                    let theme = cx.theme().clone();\n                    div()\n                        .flex()\n                        .flex_col()\n                        .gap(px(theme.space(Space::Sm)))\n                        .child(\n                            Checkbox::new(\"scene.drawer.failed\")\n                                .label(\"Failed runs only\")\n                                .checked(true)\n                                .on_change(|_, _, _| {}),\n                        )\n                        .child(\n                            Checkbox::new(\"scene.drawer.mine\")\n                                .label(\"Started by me\")\n                                .on_change(|_, _, _| {}),\n                        )\n                        .into_any_element()\n                })\n                .footer(|_, _| {\n                    Button::new(\"scene.drawer.apply\")\n                        .label(\"Apply\")\n                        .primary()\n                        .full_width(true)\n                        .on_click(|_, _| {})\n                        .into_any_element()\n                })\n        });\n        filters.update(cx, |drawer, cx| {\n            drawer.open(window, cx);\n            drawer.settle(cx);\n        });\n        cx.set_global(SceneDrawer { filters });\n    }\n    let filters = cx.global::<SceneDrawer>().filters.clone();\n    let theme = cx.theme().clone();\n\n    stack(&theme)\n        .w(px(620.0))\n        .h(px(400.0))\n        .child(div().child(\"Content behind the drawer\"))\n        .child(filters)\n        .into_any_element()\n}"
    },
    {
      "name": "motion-flip",
      "capture": "cargo run -p xtask -- scenes capture motion-flip",
      "uses": [
        "Badge",
        "Button",
        "Card",
        "ListRow"
      ],
      "example": "fn motion_flip(window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneQueue>() {\n        cx.set_global(SceneQueue {\n            steps: vec![\n                (\"render\", \"Render frames\"),\n                (\"upload\", \"Upload artifacts\"),\n                (\"verify\", \"Verify checksums\"),\n                (\"publish\", \"Publish release\"),\n            ],\n        });\n    }\n    let steps = cx.global::<SceneQueue>().steps.clone();\n    let theme = cx.theme().clone();\n\n    let mut queue = Card::new().id(\"scene.motion.queue\");\n    for (index, (id, label)) in steps.iter().enumerate() {\n        let ident = format!(\"scene.motion.{id}\");\n        let handle = flip(ident.clone(), cx);\n        queue = queue.child(\n            ListRow::new()\n                .id(ident)\n                .child(div().flex_1().child(*label))\n                .child(Badge::new(format!(\"{}\", index + 1)).neutral())\n                .flip(&handle, window, cx),\n        );\n    }\n\n    stack(&theme)\n        .w(px(420.0))\n        .child(\n            row(&theme).child(\n                Button::new(\"scene.motion.reorder\")\n                    .label(\"Move the last step first\")\n                    .secondary()\n                    .on_click(|_, cx| {\n                        cx.update_global::<SceneQueue, ()>(|queue, _| queue.steps.rotate_right(1));\n                        cx.refresh_windows();\n                    }),\n            ),\n        )\n        .child(queue)\n        .child(\n            div()\n                .text_size(px(theme.typography.caption.size))\n                .text_color(theme.colors.text_muted)\n                .child(\"Rows land in their new slot at once and slide into it.\"),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "motion-state",
      "capture": "cargo run -p xtask -- scenes capture motion-state",
      "uses": [
        "Accordion",
        "Badge",
        "Button",
        "Checkbox",
        "Icon",
        "ProgressBar",
        "Radio",
        "SegmentedControl",
        "Switch",
        "Tabs",
        "Toggle",
        "ToggleGroup"
      ],
      "example": "fn motion_state(_window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneStates>() {\n        cx.set_global(SceneStates { forward: false });\n    }\n    let forward = cx.global::<SceneStates>().forward;\n    let theme = cx.theme().clone();\n\n    stack(&theme)\n        .w(px(460.0))\n        .child(\n            row(&theme).child(\n                Button::new(\"scene.state.flip\")\n                    .label(\"Flip every state\")\n                    .secondary()\n                    .on_click(|_, cx| {\n                        cx.update_global::<SceneStates, ()>(|state, _| {\n                            state.forward = !state.forward\n                        });\n                        cx.refresh_windows();\n                    }),\n            ),\n        )\n        .child({\n            let terms = Checkbox::new(\"scene.state.terms\").label(\"Accept the terms\");\n            if forward {\n                terms.checked(true)\n            } else {\n                terms.mixed()\n            }\n            .on_change(|_, _, _| {})\n        })\n        .child(\n            Radio::new(\"scene.state.plan\")\n                .label(\"Bill monthly\")\n                .selected(forward)\n                .on_select(|_, _| {}),\n        )\n        .child(\n            Switch::new(\"scene.state.notify\")\n                .label(\"Send run notifications\")\n                .on(forward)\n                .on_change(|_, _, _| {}),\n        )\n        .child(\n            SegmentedControl::new(\"scene.state.view\")\n                .segments(vec![\n                    Segment::new(\"list\", \"List\"),\n                    Segment::new(\"grid\", \"Grid\"),\n                ])\n                .selected(if forward { \"grid\" } else { \"list\" })\n                .on_select(|_, _, _| {}),\n        )\n        .child(\n            Tabs::new(\"scene.state.tabs\")\n                .tabs(vec![\n                    TabItem::new(\"overview\", \"Overview\"),\n                    TabItem::new(\"runs\", \"Runs\"),\n                ])\n                .selected(if forward { \"runs\" } else { \"overview\" })\n                .on_select(|_, _, _| {}),\n        )\n        .child(\n            ProgressBar::new(\"scene.state.progress\")\n                .label(\"Uploading artifacts\")\n                .fraction(if forward { 0.86 } else { 0.12 }),\n        )\n        .child(\n            Accordion::new(\"scene.state.sections\")\n                .expanded_ids(if forward { &[\"retention\"][..] } else { &[][..] })\n                .on_toggle(|_, _, _, _| {})\n                .section(\n                    AccordionSection::new(\"retention\", \"Retention\")\n                        .description(\"How long verified results are kept\")\n                        .body(div().child(\"Results are kept in the workspace for 30 days.\")),\n                ),\n        )\n        .child(\n            div()\n                .text_size(px(theme.typography.caption.size))\n                .text_color(theme.colors.text_muted)\n                .child(\"Every state settles within a fifth of a second; the values are published the moment they change.\"),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "animated-number",
      "capture": "cargo run -p xtask -- scenes capture animated-number",
      "uses": [
        "AnimatedNumber",
        "Button"
      ],
      "example": "fn animated_number(_window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneCounts>() {\n        cx.set_global(SceneCounts {\n            runs: 1204.0,\n            seconds: 18.4,\n        });\n    }\n    let counts = cx.global::<SceneCounts>();\n    let (runs, seconds) = (counts.runs, counts.seconds);\n    let theme = cx.theme().clone();\n\n    let readout = |label: &'static str, number: AnimatedNumber| {\n        div()\n            .column()\n            .gap(px(theme.spacing.xs))\n            .child(\n                div()\n                    .text_size(px(theme.typography.caption.size))\n                    .text_color(theme.colors.text_muted)\n                    .child(label),\n            )\n            .child(number)\n    };\n\n    stack(&theme)\n        .child(\n            row(&theme)\n                .gap(px(theme.spacing.xl))\n                .items_start()\n                .child(readout(\n                    \"Runs this week\",\n                    AnimatedNumber::new(\"scene.number.runs\", runs).format(grouped),\n                ))\n                .child(readout(\n                    \"Median duration\",\n                    AnimatedNumber::new(\"scene.number.seconds\", seconds)\n                        .format(|value| format!(\"{value:.1}s\")),\n                )),\n        )\n        .child(\n            row(&theme).child(\n                Button::new(\"scene.number.recount\")\n                    .label(\"Recount\")\n                    .secondary()\n                    .on_click(|_, cx| {\n                        cx.update_global::<SceneCounts, ()>(|counts, _| {\n                            counts.runs += 318.0;\n                            counts.seconds += 4.7;\n                        });\n                        cx.refresh_windows();\n                    }),\n            ),\n        )\n        .child(\n            div()\n                .text_size(px(theme.typography.caption.size))\n                .text_color(theme.colors.text_muted)\n                .child(\"The published value is the target, from the frame it changes.\"),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "drag-list",
      "capture": "cargo run -p xtask -- scenes capture drag-list",
      "uses": [
        "List"
      ],
      "example": "fn drag_list(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let carried = fixture_record(4);\n    let anchor = fixture_record(1);\n    // A capture cannot photograph a gesture, so the drag is placed by hand.\n    // Staging fixes the ghost, the indicator, and the open slot, and takes the\n    // pointer and the spring out of the picture.\n    dnd::stage(\n        StagedDrag::new(DragItem::new(\n            \"scene.drag.records\",\n            carried.0.clone(),\n            carried.1.clone(),\n        ))\n        .landing(\n            \"scene.drag.records\",\n            DropPosition::Before(anchor.0.clone()),\n            Some(1),\n            true,\n        ),\n        cx,\n    );\n\n    stack(&theme)\n        .w(px(420.0))\n        .child(caption(\n            &theme,\n            SharedString::from(format!(\"{} moving before {}\", carried.1, anchor.1)),\n        ))\n        .child(\n            div()\n                .relative()\n                .hairline(&theme)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(\n                    List::new(\"scene.drag.records\", 6, |index, _, _| {\n                        let (id, label) = fixture_record(index);\n                        ListItem::new(id, label.clone()).text(label)\n                    })\n                    // A row slides without its layout slot moving, so the\n                    // viewport is one row taller than the rows it holds and\n                    // the open slot has somewhere to be.\n                    .visible_rows(7)\n                    .reorderable(true)\n                    .on_select(|_, _, _| {})\n                    .on_reorder(|_, _, _| {}),\n                )\n                .children(\n                    dnd::staged_ghost(cx)\n                        .map(|ghost| div().absolute().left(px(96.0)).top(px(18.0)).child(ghost)),\n                ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "drag-tree",
      "capture": "cargo run -p xtask -- scenes capture drag-tree",
      "uses": [
        "Icon",
        "Toggle",
        "ToggleGroup",
        "Tree"
      ],
      "example": "fn drag_tree(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    dnd::stage(\n        StagedDrag::new(\n            DragItem::new(\"scene.drag.workspace\", \"kit\", \"gpui-kit\").icon(Icon::Document),\n        )\n        .landing(\n            \"scene.drag.workspace\",\n            DropPosition::Into(SharedString::new_static(\"docs\")),\n            None,\n            true,\n        ),\n        cx,\n    );\n\n    stack(&theme)\n        .w(px(360.0))\n        .child(caption(&theme, \"gpui-kit moving into docs\"))\n        .child(\n            div()\n                .relative()\n                .child(\n                    Tree::new(\"scene.drag.workspace\")\n                        .expanded_ids(&[\"workspace\", \"crates\", \"docs\"])\n                        .nodes([TreeNode::new(\"workspace\", \"workspace\")\n                            .icon(Icon::Folder)\n                            .children([\n                                TreeNode::new(\"crates\", \"crates\")\n                                    .icon(Icon::Folder)\n                                    .children([\n                                        TreeNode::new(\"kit\", \"gpui-kit\").icon(Icon::Document),\n                                        TreeNode::new(\"tokens\", \"gpui-kit-tokens\")\n                                            .icon(Icon::Document),\n                                    ]),\n                                TreeNode::new(\"docs\", \"docs\")\n                                    .icon(Icon::Folder)\n                                    .children([TreeNode::new(\"components\", \"components.md\")\n                                        .icon(Icon::Document)]),\n                            ])])\n                        .reorderable(true)\n                        .on_toggle(|_, _, _, _| {})\n                        .on_select(|_, _, _| {})\n                        .on_move(|_, _, _| {}),\n                )\n                .children(\n                    dnd::staged_ghost(cx)\n                        .map(|ghost| div().absolute().left(px(212.0)).top(px(116.0)).child(ghost)),\n                ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "dropzone",
      "capture": "cargo run -p xtask -- scenes capture dropzone",
      "uses": [
        "Dropzone"
      ],
      "example": "fn dropzone(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    // No single pointer position can produce all three states at once, so each\n    // zone is pinned to the one it is here to show.\n    stack(&theme)\n        .w(px(560.0))\n        .child(caption(&theme, \"idle, accepting, refusing\"))\n        .child(\n            row(&theme)\n                .items_stretch()\n                .child(\n                    div().flex_1().child(\n                        Dropzone::new(\"scene.dropzone.idle\", \"Drop files to attach\")\n                            .hint(\"PDF, PNG, or plain text\")\n                            .state(DropzoneState::Idle)\n                            .on_files(|_, _, _| {}),\n                    ),\n                )\n                .child(\n                    div().flex_1().child(\n                        Dropzone::new(\"scene.dropzone.accepting\", \"Drop files to attach\")\n                            .hint(\"PDF, PNG, or plain text\")\n                            .state(DropzoneState::Accepting)\n                            .on_files(|_, _, _| {}),\n                    ),\n                )\n                .child(\n                    div().flex_1().child(\n                        Dropzone::new(\"scene.dropzone.refusing\", \"Drop files to attach\")\n                            .refusal(\"A folder cannot be attached.\")\n                            .state(DropzoneState::Refusing)\n                            .on_files(|_, _, _| {}),\n                    ),\n                ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "wizard",
      "capture": "cargo run -p xtask -- scenes capture wizard",
      "uses": [
        "Wizard"
      ],
      "example": "fn wizard(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(720.0))\n        .child(caption(\n            &theme,\n            \"horizontal, with a blocked step and a failed one\",\n        ))\n        .child(\n            Wizard::new(\"scene.wizard.release\")\n                .steps([\n                    WizardStep::new(\"prepare\", \"Prepare\")\n                        .description(\"Check the workspace is clean\")\n                        .complete(),\n                    WizardStep::new(\"build\", \"Build\")\n                        .description(\"Compile every target\")\n                        .failed(\"The build failed on the test target.\"),\n                    WizardStep::new(\"sign\", \"Sign\").current(),\n                    WizardStep::new(\"publish\", \"Publish\")\n                        .blocked(\"Approval is required for this workspace.\"),\n                ])\n                .body(\n                    div()\n                        .p(px(theme.spacing.md))\n                        .radius(&theme, Radius::Card)\n                        .hairline(&theme)\n                        .child(SharedString::new_static(\n                            \"The body of the current step belongs to the caller.\",\n                        )),\n                )\n                .back_to(\"build\")\n                .on_navigate(|_, _, _| {}),\n        )\n        .child(caption(&theme, \"vertical, finishing\"))\n        .child(\n            Wizard::new(\"scene.wizard.setup\")\n                .vertical()\n                .steps([\n                    WizardStep::new(\"account\", \"Account\").complete(),\n                    WizardStep::new(\"workspace\", \"Workspace\").complete(),\n                    WizardStep::new(\"review\", \"Review\").current(),\n                ])\n                .back_to(\"workspace\")\n                .finish(true)\n                .on_navigate(|_, _, _| {}),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "settings",
      "capture": "cargo run -p xtask -- scenes capture settings",
      "uses": [
        "Badge",
        "SettingsRow",
        "SettingsSection",
        "Switch"
      ],
      "example": "fn settings(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(620.0))\n        .child(\n            SettingsSection::new(\"scene.settings.general\", \"General\")\n                .description(\"How this workspace behaves\")\n                .row(\n                    SettingsRow::new(\"scene.settings.general.autosave\", \"Save automatically\")\n                        .description(\"Write changes as they happen\")\n                        .control(\n                            Switch::new(\"scene.settings.general.autosave.switch\")\n                                .named(\"Save automatically\")\n                                .on(true)\n                                .on_change(|_, _, _| {}),\n                        ),\n                )\n                .row(\n                    SettingsRow::new(\"scene.settings.general.runtime\", \"Native runtime\")\n                        .description(\"Runs work on this machine instead of a host\")\n                        .badge(\"Requires restart\")\n                        .control(\n                            Switch::new(\"scene.settings.general.runtime.switch\")\n                                .named(\"Native runtime\")\n                                .on(false)\n                                .on_change(|_, _, _| {}),\n                        ),\n                )\n                .row(\n                    SettingsRow::new(\"scene.settings.general.telemetry\", \"Usage reporting\")\n                        .description(\"Nobody on this machine can change this\")\n                        .value(\"Off\")\n                        .managed(\"your administrator\"),\n                ),\n        )\n        .child(\n            SettingsSection::new(\"scene.settings.sync\", \"Synchronisation\")\n                .description(\"What travels between machines\")\n                .dimmed_by(\"This workspace is local, so nothing synchronises.\")\n                .row(\n                    SettingsRow::new(\"scene.settings.sync.settings\", \"Sync settings\")\n                        .value(\"Off\")\n                        .control(\n                            Switch::new(\"scene.settings.sync.settings.switch\")\n                                .named(\"Sync settings\")\n                                .on(false)\n                                .on_change(|_, _, _| {}),\n                        ),\n                )\n                .row(\n                    SettingsRow::new(\"scene.settings.sync.history\", \"Sync history\")\n                        .value(\"Off\")\n                        .control(\n                            Switch::new(\"scene.settings.sync.history.switch\")\n                                .named(\"Sync history\")\n                                .on(false)\n                                .on_change(|_, _, _| {}),\n                        ),\n                ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "detail",
      "capture": "cargo run -p xtask -- scenes capture detail",
      "uses": [
        "DescriptionList",
        "List",
        "Timeline"
      ],
      "example": "fn detail(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(640.0))\n        .child(caption(\n            &theme,\n            \"unknown, not applicable, and redacted are three facts\",\n        ))\n        .child(\n            DescriptionList::new(\"scene.detail.facts\")\n                .columns(2)\n                .items([\n                    DescriptionItem::new(\"id\", \"Run\", \"run-4821\"),\n                    DescriptionItem::new(\"owner\", \"Owner\", \"fixture-owner\"),\n                    DescriptionItem::new(\"finished\", \"Finished\", DescriptionValue::Unknown),\n                    DescriptionItem::new(\"artifact\", \"Artifact\", DescriptionValue::NotApplicable),\n                    DescriptionItem::new(\n                        \"token\",\n                        \"Access token\",\n                        DescriptionValue::redacted(\"51 characters\"),\n                    )\n                    .copyable(true),\n                ])\n                .on_copy(|_, _, _| {}),\n        )\n        .child(caption(\n            &theme,\n            \"what happened, in the words the host chose\",\n        ))\n        .child(\n            Timeline::new(\"scene.detail.activity\")\n                .group(\n                    TimelineGroup::new(\"today\", \"Today\")\n                        .entry(\n                            TimelineEntry::new(\"queued\", \"Run queued\")\n                                .time(\"09:12\")\n                                .actor(\"fixture-owner\")\n                                .tone(Tone::Neutral),\n                        )\n                        .entry(\n                            TimelineEntry::new(\"started\", \"Indexing started\")\n                                .time(\"09:13\")\n                                .actor(\"scheduler\")\n                                .tone(Tone::Info),\n                        )\n                        .entry(\n                            TimelineEntry::new(\"failed\", \"Indexing failed\")\n                                .time(\"09:41\")\n                                .actor(\"scheduler\")\n                                .tone(Tone::Danger)\n                                .detail(div().child(SharedString::new_static(\n                                    \"The host refused the request. The refusal is shown as it \\\n                                     arrived.\",\n                                ))),\n                        ),\n                )\n                .group(\n                    TimelineGroup::new(\"earlier\", \"Earlier\").entry(\n                        TimelineEntry::new(\"imported\", \"Workspace imported\")\n                            .time_unknown()\n                            .actor(\"fixture-owner\")\n                            .tone(Tone::Neutral),\n                    ),\n                ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "filter-bar",
      "capture": "cargo run -p xtask -- scenes capture filter-bar",
      "uses": [
        "FilterBar"
      ],
      "example": "fn filter_bar(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(720.0))\n        .child(\n            FilterBar::new(\"scene.filter-bar.runs\")\n                .conditions([\n                    FilterCondition::new(\"status\", \"Status\", \"is\", \"failed\"),\n                    FilterCondition::new(\"owner\", \"Owner\", \"is\", \"fixture-owner\"),\n                    FilterCondition::new(\"started\", \"Started\", \"after\", \"09:00\"),\n                ])\n                .count(ResultCount::Known(14))\n                .noun(\"runs\")\n                .on_add(|_, _| {})\n                .on_remove(|_, _, _| {})\n                .on_clear(|_, _| {}),\n        )\n        .child(caption(&theme, \"counting is not zero\"))\n        .child(\n            FilterBar::new(\"scene.filter-bar.counting\")\n                .conditions([FilterCondition::new(\"status\", \"Status\", \"is\", \"queued\")])\n                .count(ResultCount::Counting)\n                .on_add(|_, _| {})\n                .on_remove(|_, _, _| {})\n                .on_clear(|_, _| {}),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "inline-edit",
      "capture": "cargo run -p xtask -- scenes capture inline-edit",
      "uses": [
        "InlineEdit"
      ],
      "example": "fn inline_edit(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(420.0))\n        .child(caption(\n            &theme,\n            \"reading, editing, and a save that did not take\",\n        ))\n        .child(\n            InlineEdit::new(\"scene.inline-edit.title\", \"Indexing the workspace\")\n                .on_edit(|_, _| {})\n                .on_commit(|_, _, _| {})\n                .on_cancel(|_, _| {}),\n        )\n        .child(\n            InlineEdit::new(\"scene.inline-edit.owner\", \"fixture-owner\")\n                .editing(true)\n                .on_edit(|_, _| {})\n                .on_commit(|_, _, _| {})\n                .on_cancel(|_, _| {}),\n        )\n        .child(\n            InlineEdit::new(\n                \"scene.inline-edit.note\",\n                \"Retry after the host is reachable\",\n            )\n            .editing(true)\n            .failure(\"The host refused this change. What you typed is still here.\")\n            .on_edit(|_, _| {})\n            .on_commit(|_, _, _| {})\n            .on_cancel(|_, _| {}),\n        )\n        .child(\n            InlineEdit::new(\"scene.inline-edit.policy\", \"Set by the administrator\")\n                .disabled(true)\n                .on_edit(|_, _| {}),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "progress-circle",
      "capture": "cargo run -p xtask -- scenes capture progress-circle",
      "uses": [
        "ProgressCircle"
      ],
      "example": "fn progress_circle(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(520.0))\n        .child(caption(\n            &theme,\n            \"a position exists only when the extent is known\",\n        ))\n        .child(\n            row(&theme)\n                .gap(px(theme.spacing.lg))\n                .child(\n                    ProgressCircle::new(\"scene.progress-circle.upload\")\n                        .count(3, 12)\n                        .label(\"Uploading artifacts\")\n                        .centre(\"25%\"),\n                )\n                .child(\n                    ProgressCircle::new(\"scene.progress-circle.verify\")\n                        .fraction(0.72)\n                        .label(\"Verifying checksums\")\n                        .display(\"72%\")\n                        .centre(\"72%\"),\n                )\n                .child(\n                    ProgressCircle::new(\"scene.progress-circle.contact\")\n                        .label(\"Contacting the host\"),\n                ),\n        )\n        .child(caption(&theme, \"the size ramp\"))\n        .child(\n            row(&theme)\n                .gap(px(theme.spacing.lg))\n                .child(\n                    ProgressCircle::new(\"scene.progress-circle.xs\")\n                        .fraction(0.4)\n                        .label(\"Extra small\")\n                        .xs(),\n                )\n                .child(\n                    ProgressCircle::new(\"scene.progress-circle.sm\")\n                        .fraction(0.4)\n                        .label(\"Small\")\n                        .small(),\n                )\n                .child(\n                    ProgressCircle::new(\"scene.progress-circle.md\")\n                        .fraction(0.4)\n                        .label(\"Medium\")\n                        .medium(),\n                )\n                .child(\n                    ProgressCircle::new(\"scene.progress-circle.lg\")\n                        .fraction(0.4)\n                        .label(\"Large\")\n                        .large(),\n                ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "split-tree",
      "capture": "cargo run -p xtask -- scenes capture split-tree",
      "uses": [
        "Icon",
        "SplitTree",
        "Toggle",
        "ToggleGroup",
        "Tree"
      ],
      "example": "fn split_tree(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let layout = SplitLayout::horizontal(\n        \"workspace\",\n        0.26,\n        SplitLayout::leaf(SplitPaneSpec::new(\"files\").min_width(140.0)),\n        SplitLayout::horizontal(\n            \"body\",\n            0.74,\n            SplitLayout::vertical(\n                \"editing\",\n                0.6,\n                SplitLayout::leaf(SplitPaneSpec::new(\"editor\").min_height(90.0)),\n                SplitLayout::leaf(SplitPaneSpec::new(\"terminal\").min_height(70.0)),\n            ),\n            // A collapsed leaf is drawn at its rail, and the divider beside it\n            // is not offered: a fixed extent has no ratio to trade.\n            SplitLayout::leaf(SplitPaneSpec::new(\"outline\").rail(40.0).collapsed(true)),\n        ),\n    );\n\n    stack(&theme)\n        .w(px(680.0))\n        .child(\n            div()\n                .h(px(340.0))\n                .hairline(&theme)\n                .radius(&theme, Radius::Card)\n                .overflow_hidden()\n                .child(\n                    SplitTree::new(\"scene.tree.workspace\")\n                        .layout(layout)\n                        .pane(\"files\", filler(&theme, \"Files\", 6))\n                        .pane(\"editor\", filler(&theme, \"main.rs\", 6))\n                        .pane(\"terminal\", filler(&theme, \"Terminal\", 2))\n                        // The rail is narrower than any label, so the collapsed\n                        // leaf is drawn as the room it still holds.\n                        .pane(\"outline\", div())\n                        .on_change(|_, _, _| {}),\n                ),\n        )\n        .child(caption(\n            &theme,\n            \"A divider high in the tree stops where a leaf far below it would \\\n             run out of room.\",\n        ))\n        .into_any_element()\n}"
    },
    {
      "name": "ide-shell",
      "capture": "cargo run -p xtask -- scenes capture ide-shell",
      "uses": [
        "Avatar",
        "Badge",
        "Button",
        "DescriptionList",
        "Divider",
        "Dock",
        "EmptyState",
        "Icon",
        "List",
        "ProgressBar",
        "StatusBar",
        "Tag",
        "Timeline"
      ],
      "example": "fn ide_shell(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let mut branch = AsyncValue::<SharedString, String>::ready(\"main@a1b2c3\".into());\n    branch.refresh();\n    branch.fail_refresh(\"the host is unreachable\".into());\n\n    div()\n        .column()\n        .w(px(900.0))\n        .h(px(560.0))\n        .bg(theme.colors.canvas)\n        .text_color(theme.colors.text)\n        .font_family(theme.typography.sans.clone())\n        .child(\n            div().flex_1().min_h(px(0.0)).child(\n                Dock::new(\"scene.shell\")\n                    .share(DockRegion::Left, 0.24)\n                    .share(DockRegion::Bottom, 0.3)\n                    .panel(\n                        DockRegion::Left,\n                        DockPanel::new(\"files\", \"Files\")\n                            .icon(Icon::Folder)\n                            .content(filler(&theme, \"Workspace\", 8)),\n                    )\n                    .panel(\n                        DockRegion::Left,\n                        DockPanel::new(\"search\", \"Search\")\n                            .icon(Icon::Magnifier)\n                            .badge(\"12\"),\n                    )\n                    .active(DockRegion::Left, \"files\")\n                    .panel(\n                        DockRegion::Centre,\n                        DockPanel::new(\"editor\", \"main.rs\")\n                            .icon(Icon::Document)\n                            .content(filler(&theme, \"fn main()\", 12)),\n                    )\n                    .panel(\n                        DockRegion::Right,\n                        DockPanel::new(\"outline\", \"Outline\").icon(Icon::List),\n                    )\n                    .panel(\n                        DockRegion::Right,\n                        DockPanel::new(\"history\", \"History\").icon(Icon::GitBranch),\n                    )\n                    .collapsed(DockRegion::Right, true)\n                    .panel(\n                        DockRegion::Bottom,\n                        DockPanel::new(\"terminal\", \"Terminal\")\n                            .icon(Icon::Terminal)\n                            .content(filler(&theme, \"$ cargo test\", 4)),\n                    )\n                    .panel(\n                        DockRegion::Bottom,\n                        DockPanel::new(\"problems\", \"Problems\")\n                            .icon(Icon::Danger)\n                            .badge(\"3\")\n                            .unavailable(\n                                \"The language server is not running, so problems cannot be \\\n                                 listed. Nothing here is out of date; there is nothing here.\",\n                            ),\n                    )\n                    // The refused panel is the one on top, because a refusal\n                    // nobody can see is a refusal nobody was told about.\n                    .active(DockRegion::Bottom, \"problems\")\n                    .on_event(|_, _, _| {}),\n            ),\n        )\n        .child(\n            StatusBar::new(\"scene.shell.status\")\n                .label(\"Workspace status\")\n                .start([\n                    StatusItem::text(\"branch\", \"main\")\n                        .icon(Icon::GitBranch)\n                        .tracking(&branch),\n                    StatusItem::state(\"build\", \"Build passing\", Tone::Success),\n                ])\n                .centre([StatusItem::progress(\"index\", \"Indexing the workspace\")\n                    .count(7, 12)\n                    .state_name(\"loading\")])\n                .end([\n                    StatusItem::text(\"position\", \"Ln 42, Col 7\"),\n                    StatusItem::action(\"encoding\", \"UTF-8\").on_click(|_, _| {}),\n                ]),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "keybinding",
      "capture": "cargo run -p xtask -- scenes capture keybinding",
      "uses": [
        "KeybindingRecorder",
        "SettingsRow",
        "SettingsSection"
      ],
      "example": "fn keybinding(window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneRecorders>() {\n        let idle = cx.new(|cx| {\n            KeybindingRecorder::new(\"scene.keybinding.idle\", window, cx).label(\"Open workspace\")\n        });\n        let recording = cx.new(|cx| {\n            KeybindingRecorder::new(\"scene.keybinding.recording\", window, cx)\n                .label(\"Command palette\")\n        });\n        let captured = cx.new(|cx| {\n            KeybindingRecorder::new(\"scene.keybinding.captured\", window, cx)\n                .label(\"Toggle terminal\")\n                .binding(\"ctrl-`\")\n        });\n        let conflicting = cx.new(|cx| {\n            KeybindingRecorder::new(\"scene.keybinding.conflicting\", window, cx)\n                .label(\"Split editor\")\n                .binding(\"cmd-shift-p\")\n                // The host's words, not the recorder's: it has no keymap.\n                .conflict(Some(\"Already opens the command palette\"))\n        });\n        // Recording is a state, not a gesture, so the scene puts one recorder\n        // into it by hand rather than waiting for a keystroke that a still\n        // image could not photograph anyway.\n        recording.update(cx, |recorder, cx| recorder.start(window, cx));\n        cx.set_global(SceneRecorders {\n            idle,\n            recording,\n            captured,\n            conflicting,\n        });\n    }\n    let recorders = cx.global::<SceneRecorders>().clone();\n    let theme = cx.theme().clone();\n\n    // A recorder carries its name in the tree rather than drawing one, the way\n    // every other control here does, so the scene puts it where a keymap page\n    // would: in a settings row that states what the binding is for.\n    stack(&theme)\n        .w(px(680.0))\n        .child(\n            SettingsSection::new(\"scene.keybinding.keymap\", \"Keyboard shortcuts\")\n                .description(\"Recording captures the next keystroke instead of acting on it.\")\n                .row(\n                    SettingsRow::new(\"scene.keybinding.row.open\", \"Open workspace\")\n                        .description(\"Nothing is bound yet\")\n                        .control(recorders.idle),\n                )\n                .row(\n                    SettingsRow::new(\"scene.keybinding.row.palette\", \"Command palette\")\n                        .description(\"Listening for a keystroke\")\n                        .control(recorders.recording),\n                )\n                .row(\n                    SettingsRow::new(\"scene.keybinding.row.terminal\", \"Toggle terminal\")\n                        .control(recorders.captured),\n                )\n                .row(\n                    SettingsRow::new(\"scene.keybinding.row.split\", \"Split editor\")\n                        .description(\"The host judged this one, and said so\")\n                        .control(recorders.conflicting),\n                ),\n        )\n        .child(caption(\n            &theme,\n            \"Escape ends recording without capturing, so escape cannot be bound \\\n             unless the caller turns allow_escape on.\",\n        ))\n        .into_any_element()\n}"
    },
    {
      "name": "markdown",
      "capture": "cargo run -p xtask -- scenes capture markdown",
      "uses": [
        "Divider",
        "Markdown"
      ],
      "example": "fn markdown(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(640.0))\n        .child(Markdown::new(\"scene.markdown.document\", SCENE_DOCUMENT).on_event(|_, _, _| {}))\n        .child(Divider::new().id(\"scene.markdown.rule\").label(\"Truncated\"))\n        .child(\n            Markdown::new(\"scene.markdown.short\", SCENE_DOCUMENT)\n                .max_lines(4)\n                .on_event(|_, _, _| {}),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "conversation",
      "capture": "cargo run -p xtask -- scenes capture conversation",
      "uses": [
        "DescriptionList",
        "Divider",
        "List",
        "Markdown",
        "MessageList",
        "Timeline"
      ],
      "example": "fn conversation(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(560.0))\n        .child(\n            MessageList::new(\"scene.conversation.thread\", scene_thread())\n                .group_consecutive(true)\n                .body_lines(2)\n                .on_retry(|_, _, _| {})\n                .on_markdown(|_, _, _, _| {}),\n        )\n        .child(\n            Divider::new()\n                .id(\"scene.conversation.rule\")\n                .label(\"Scrolled away from the newest message\"),\n        )\n        .child(\n            // A viewport shorter than the thread opens at its top, so the\n            // messages below it have never been on screen and the list says\n            // how many there are rather than letting them be discovered.\n            MessageList::new(\"scene.conversation.behind\", scene_thread())\n                .visible_rows(2)\n                .body_lines(2)\n                .on_retry(|_, _, _| {}),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "image-viewer",
      "capture": "cargo run -p xtask -- scenes capture image-viewer",
      "uses": [
        "Divider",
        "ImageViewer"
      ],
      "example": "fn image_viewer(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(860.0))\n        .child(\n            div()\n                .row()\n                .items_start()\n                .gap(px(theme.spacing.lg))\n                .child(\n                    div().w(px(396.0)).child(\n                        ImageViewer::new(\n                            \"scene.image.ready\",\n                            [\n                                ImageFrame::new(\"graph\", \"The run graph\")\n                                    .source(\"runs/graph.png\")\n                                    .natural(1600, 900),\n                                ImageFrame::new(\"trace\", \"The failing trace\")\n                                    .source(\"runs/trace.png\")\n                                    .natural(1200, 1200),\n                            ],\n                        )\n                        .showing(\"graph\")\n                        .fit(FitMode::Contain)\n                        .height(200.0)\n                        .image(|_, _, cx| Some(scene_picture(\"Supplied by the host\", cx)))\n                        .on_event(|_, _, _| {}),\n                    ),\n                )\n                .child(\n                    div().w(px(396.0)).child(\n                        ImageViewer::new(\n                            \"scene.image.refused\",\n                            [ImageFrame::new(\"scan\", \"Page 4 of the scan\")\n                                .source(\"scans/page-4.tiff\")\n                                .natural(2480, 3508)\n                                .unavailable(\"The workspace is frozen for the release.\")],\n                        )\n                        .height(200.0)\n                        .image(|_, _, cx| Some(scene_picture(\"Supplied by the host\", cx)))\n                        .on_event(|_, _, _| {}),\n                    ),\n                ),\n        )\n        .child(\n            Divider::new()\n                .id(\"scene.image.rule.unmeasured\")\n                .label(\"A size the host never stated\"),\n        )\n        .child(\n            div().w(px(396.0)).child(\n                ImageViewer::new(\n                    \"scene.image.unmeasured\",\n                    [ImageFrame::new(\"sketch\", \"A pasted sketch\").source(\"clipboard\")],\n                )\n                .height(200.0)\n                .image(|_, _, cx| Some(scene_picture(\"Size never stated\", cx)))\n                .on_event(|_, _, _| {}),\n            ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "transport",
      "capture": "cargo run -p xtask -- scenes capture transport",
      "uses": [
        "Divider",
        "TransportBar"
      ],
      "example": "fn transport(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(640.0))\n        .child(\n            TransportBar::new(\"scene.transport.playing\")\n                .label(\"Release walkthrough\")\n                .state(TransportState::Playing)\n                .position(72.0)\n                .duration(240.0)\n                .elapsed(\"01:12\")\n                .remaining(\"-02:48\")\n                .buffered([BufferedRange::new(0.0, 156.0)])\n                .volume(0.7)\n                .speeds([1.0, 1.5, 2.0], 1.0)\n                .step_seconds(10.0)\n                .has_next(true)\n                .on_event(|_, _, _| {}),\n        )\n        .child(\n            Divider::new()\n                .id(\"scene.transport.rule.live\")\n                .label(\"A stream nobody measured\"),\n        )\n        .child(\n            TransportBar::new(\"scene.transport.live\")\n                .label(\"Incident bridge\")\n                .state(TransportState::Playing)\n                .position(1543.0)\n                .unknown_duration()\n                .elapsed(\"25:43\")\n                .volume(0.4)\n                .on_event(|_, _, _| {}),\n        )\n        .child(\n            Divider::new()\n                .id(\"scene.transport.rule.stalled\")\n                .label(\"Playing and waiting\"),\n        )\n        .child(\n            TransportBar::new(\"scene.transport.stalled\")\n                .label(\"Release walkthrough\")\n                .state(TransportState::Buffering)\n                .position(158.0)\n                .duration(240.0)\n                .elapsed(\"02:38\")\n                .remaining(\"-01:22\")\n                .buffered([BufferedRange::new(0.0, 160.0)])\n                .volume(0.7)\n                .muted(true)\n                .on_event(|_, _, _| {}),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "approval",
      "capture": "cargo run -p xtask -- scenes capture approval",
      "uses": [
        "ApprovalPrompt",
        "Callout",
        "Divider",
        "StatusDot",
        "StatusLine"
      ],
      "example": "fn approval(window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneApprovals>() {\n        let pending = cx.new(|cx| {\n            ApprovalPrompt::new(\n                \"scene.approval.pending\",\n                \"Write to /work/report/summary.md\",\n                window,\n                cx,\n            )\n            .details([\n                DescriptionItem::new(\"tool\", \"Tool\", \"write-file\"),\n                DescriptionItem::new(\"path\", \"Path\", \"/work/report/summary.md\"),\n                DescriptionItem::new(\"bytes\", \"Size\", \"4 KB\"),\n            ])\n            .always(AlwaysScope::Session)\n            .always(AlwaysScope::path(\"/work/report\"))\n            .always(AlwaysScope::tool(\"write-file\"))\n        });\n        let declined = cx.new(|cx| {\n            ApprovalPrompt::new(\n                \"scene.approval.declined\",\n                \"Delete /work/report/draft.md\",\n                window,\n                cx,\n            )\n            .status(ApprovalStatus::Declined)\n        });\n        let expired = cx.new(|cx| {\n            ApprovalPrompt::new(\n                \"scene.approval.expired\",\n                \"Open a connection to build.internal:8443\",\n                window,\n                cx,\n            )\n            .status(ApprovalStatus::Expired)\n        });\n        let superseded = cx.new(|cx| {\n            ApprovalPrompt::new(\n                \"scene.approval.superseded\",\n                \"Run the test suite in /work\",\n                window,\n                cx,\n            )\n            .status(ApprovalStatus::Superseded {\n                by: \"a later request covering the whole workspace\".into(),\n            })\n        });\n        cx.set_global(SceneApprovals {\n            pending,\n            declined,\n            expired,\n            superseded,\n        });\n    }\n    let prompts = cx.global::<SceneApprovals>();\n    let pending = prompts.pending.clone();\n    let declined = prompts.declined.clone();\n    let expired = prompts.expired.clone();\n    let superseded = prompts.superseded.clone();\n    let theme = cx.theme().clone();\n\n    stack(&theme)\n        .w(px(560.0))\n        .child(pending)\n        .child(\n            Divider::new()\n                .id(\"scene.approval.rule.resolved\")\n                .label(\"Answered, expired, and replaced are three different things\"),\n        )\n        .child(declined)\n        .child(expired)\n        .child(superseded)\n        .into_any_element()\n}"
    },
    {
      "name": "permission-matrix",
      "capture": "cargo run -p xtask -- scenes capture permission-matrix",
      "uses": [
        "Avatar",
        "Button",
        "ButtonGroup",
        "Checkbox",
        "CommandPalette",
        "ContextMenu",
        "DescriptionList",
        "Divider",
        "EmptyState",
        "GradientSpinner",
        "Icon",
        "IconButton",
        "List",
        "Menu",
        "PermissionMatrix",
        "Popover",
        "ProgressBar",
        "PulseLoader",
        "Skeleton",
        "SplitButton",
        "Tag",
        "Timeline"
      ],
      "example": "fn permission_matrix(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let actions = [\n        PermissionAction::new(\"read\", \"Read files\"),\n        PermissionAction::new(\"write\", \"Write files\"),\n        PermissionAction::new(\"network\", \"Reach the network\"),\n    ];\n    let subjects = [\n        PermissionSubject::new(\"workspace\", \"This workspace\")\n            .cell(\"read\", PermissionEntry::new(PermissionState::Allowed))\n            .cell(\"write\", PermissionEntry::new(PermissionState::Ask))\n            .cell(\n                \"network\",\n                PermissionEntry::inherited(PermissionState::Denied, \"the organisation policy\"),\n            ),\n        PermissionSubject::new(\"scratch\", \"The scratch directory\")\n            .cell(\n                \"read\",\n                PermissionEntry::inherited(PermissionState::Allowed, \"this workspace\"),\n            )\n            .cell(\"write\", PermissionEntry::new(PermissionState::Allowed))\n            .cell(\n                \"network\",\n                PermissionEntry::inherited(PermissionState::Denied, \"the organisation policy\"),\n            ),\n        // A calculator has no files to read, which is not the same as being\n        // refused them.\n        PermissionSubject::new(\"calculator\", \"The calculator tool\")\n            .cell(\"network\", PermissionEntry::new(PermissionState::Denied)),\n    ];\n\n    stack(&theme)\n        .w(px(720.0))\n        .child(\n            PermissionMatrix::new(\"scene.permission.editable\")\n                .actions(actions.clone())\n                .subjects(subjects.clone())\n                .on_change(|_change, _window, _cx| {}),\n        )\n        .child(\n            Divider::new()\n                .id(\"scene.permission.rule.read-only\")\n                .label(\"The same permissions, shown rather than offered\"),\n        )\n        .child(\n            PermissionMatrix::new(\"scene.permission.read-only\")\n                .actions(actions)\n                .subjects(subjects),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "cost-meter",
      "capture": "cargo run -p xtask -- scenes capture cost-meter",
      "uses": [
        "ContextGauge",
        "CostMeter",
        "Divider"
      ],
      "example": "fn cost_meter(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(520.0))\n        .child(\n            CostMeter::new(\"scene.cost.meter\")\n                .label(\"This run\")\n                .line(CostLine::new(\n                    \"spend\",\n                    \"Spend\",\n                    Reading::measured(1.24, \"1.24 credits\"),\n                ))\n                .line(CostLine::new(\n                    \"projected\",\n                    \"Projected at this rate\",\n                    Reading::estimated(4.0, \"4.00 credits\"),\n                ))\n                .line(\n                    CostLine::new(\n                        \"account\",\n                        \"Account balance\",\n                        Reading::measured(112.0, \"112.00 credits\"),\n                    )\n                    .stale(LastVerified::at(\"09:41 today\")),\n                )\n                .line(CostLine::new(\n                    \"storage\",\n                    \"Storage\",\n                    Reading::unavailable_because(\"The billing host refused the request.\"),\n                )),\n        )\n        .child(\n            Divider::new()\n                .id(\"scene.cost.rule.gauge\")\n                .label(\"A limit that is known, and one that is not\"),\n        )\n        .child(\n            ContextGauge::new(\n                \"scene.cost.context.known\",\n                Reading::measured(48_000.0, \"48,000 tokens\"),\n            )\n            .label(\"Context used\")\n            .limit(Limit::measured(128_000.0, \"128,000 tokens\")),\n        )\n        .child(\n            ContextGauge::new(\n                \"scene.cost.context.unknown\",\n                Reading::estimated(48_000.0, \"48,000 tokens\"),\n            )\n            .label(\"Context used\"),\n        )\n        .child(\n            ContextGauge::new(\"scene.cost.context.unavailable\", Reading::unavailable())\n                .label(\"Context used\")\n                .limit(Limit::measured(128_000.0, \"128,000 tokens\")),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "tool-call",
      "capture": "cargo run -p xtask -- scenes capture tool-call",
      "uses": [
        "Card",
        "ToolCallCard"
      ],
      "example": "fn tool_call(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    div()\n        .flex()\n        .gap(px(theme.spacing.lg))\n        .child(\n            stack(&theme).w(px(460.0)).child(\n            ToolCallCard::new(\"scene.tool.pending\", \"workspace.search\")\n                .arguments(scene_arguments())\n                .state(ToolCallState::PendingApproval),\n        )\n        .child(\n            ToolCallCard::new(\"scene.tool.running\", \"workspace.index\")\n                .arguments(\"{ \\\"root\\\": \\\"crates\\\" }\")\n                .state(ToolCallState::Running)\n                .elapsed(\"4.2 s\"),\n        )\n        .child(\n            ToolCallCard::new(\"scene.tool.succeeded\", \"workspace.read\")\n                .arguments(\"{ \\\"path\\\": \\\"README.md\\\" }\")\n                .state(ToolCallState::succeeded(\n                    ToolBody::new(\n                        \"# gpui-kit\\n\\nProduct-neutral components.\\n\\nEvery word is replaceable.\",\n                    )\n                    .max_lines(2),\n                ))\n                .elapsed(\"0.3 s\"),\n        )\n        .child(\n            ToolCallCard::new(\"scene.tool.silent\", \"workspace.touch\")\n                .arguments(\"{ \\\"path\\\": \\\"notes.md\\\" }\")\n                .state(ToolCallState::succeeded_silently())\n                .elapsed(\"0.1 s\"),\n        ),\n        )\n        .child(\n            stack(&theme)\n                .w(px(460.0))\n                .child(\n                    ToolCallCard::new(\"scene.tool.failed\", \"workspace.write\")\n                        .arguments(\"{ \\\"path\\\": \\\"/read-only/notes.md\\\" }\")\n                        .state(ToolCallState::failed(\n                            \"The file system reported that the path is read only.\",\n                        ))\n                        .elapsed(\"0.2 s\")\n                        .on_retry(|_, _| {}),\n                )\n                // A refusal reads as a decision: it is not the failure above\n                // it, and not the silent success in the other column.\n                .child(\n                    ToolCallCard::new(\"scene.tool.refused\", \"shell.run\")\n                        .arguments(\"{ \\\"command\\\": \\\"rm -rf build\\\" }\")\n                        .state(ToolCallState::refused(\n                            \"This workspace does not allow shell commands.\",\n                        )),\n                ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "step-list",
      "capture": "cargo run -p xtask -- scenes capture step-list",
      "uses": [
        "Card",
        "List",
        "StepList",
        "ToolCallCard"
      ],
      "example": "fn step_list(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .child(caption(&theme, \"A run somebody counted\"))\n        .child(\n            StepList::new(\"scene.steps.counted\")\n                .step(Step::new(\"read\", \"Read the brief\").state(StepState::Done))\n                .step(\n                    Step::new(\"search\", \"Search the workspace\")\n                        .state(StepState::Running)\n                        .body(\n                            ToolCallCard::new(\"scene.steps.search.call\", \"workspace.search\")\n                                .arguments(scene_arguments())\n                                .state(ToolCallState::Running)\n                                .elapsed(\"1.1 s\"),\n                        ),\n                )\n                .step(Step::new(\"summarise\", \"Summarise what was found\"))\n                .step(\n                    Step::new(\"publish\", \"Publish the summary\").state(StepState::Skipped(\n                        \"Publishing is turned off for this workspace.\".into(),\n                    )),\n                )\n                .step(\n                    // A failure, not a refusal: the skipped step above is what\n                    // a refusal looks like, and the two must not be worded\n                    // into each other.\n                    Step::new(\"notify\", \"Notify the reviewers\").state(StepState::Failed(\n                        \"The notification service did not respond.\".into(),\n                    )),\n                ),\n        )\n        .child(caption(&theme, \"A run still being decided\"))\n        .child(\n            StepList::new(\"scene.steps.open\")\n                .length(RunLength::Unknown)\n                .step(Step::new(\"read\", \"Read the brief\").state(StepState::Done))\n                .step(Step::new(\"plan\", \"Decide what to do next\").state(StepState::Running)),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "node-graph",
      "capture": "cargo run -p xtask -- scenes capture node-graph",
      "uses": [
        "GraphNode",
        "NodeGraph"
      ],
      "example": "fn node_graph(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .child(\n            div().w(px(860.0)).h(px(300.0)).child(\n                NodeGraph::new(\"scene.graph\")\n                    .node(\n                        GraphNode::new(\"scene.graph.plan\", \"Plan\")\n                            .state(NodeState::Succeeded)\n                            .metric(\"tokens\", \"4.1k\")\n                            .metric(\"took\", \"2.4s\"),\n                        24.0,\n                        24.0,\n                    )\n                    .node(\n                        GraphNode::new(\"scene.graph.edit\", \"Edit files\")\n                            .state(NodeState::Failed)\n                            .action(\"write crates/gpui-kit/src/lib.rs\")\n                            .metric(\"tokens\", \"12.7k\")\n                            .diff(Diff::new(48, 12)),\n                        300.0,\n                        24.0,\n                    )\n                    .node(\n                        GraphNode::new(\"scene.graph.test\", \"Run tests\")\n                            .state(NodeState::Running)\n                            .action(\"cargo test --workspace\")\n                            .metric(\"took\", \"18s\"),\n                        576.0,\n                        24.0,\n                    )\n                    .node(\n                        GraphNode::new(\"scene.graph.publish\", \"Publish\").state(NodeState::Pending),\n                        576.0,\n                        170.0,\n                    )\n                    .node(\n                        GraphNode::new(\"scene.graph.deploy\", \"Deploy\")\n                            .state(NodeState::Refused)\n                            .action(\"host declined: no credentials\"),\n                        300.0,\n                        170.0,\n                    )\n                    .edge(GraphEdge::new(\"scene.graph.plan\", \"scene.graph.edit\"))\n                    .edge(GraphEdge::new(\"scene.graph.edit\", \"scene.graph.test\"))\n                    .edge(GraphEdge::new(\"scene.graph.publish\", \"scene.graph.deploy\"))\n                    .edge(GraphEdge::new(\"scene.graph.test\", \"scene.graph.edit\").feedback()),\n            ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "browser-panel",
      "capture": "cargo run -p xtask -- scenes capture browser-panel",
      "uses": [
        "BrowserPanel"
      ],
      "example": "fn browser_panel(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .child(\n            row(&theme)\n                .items_start()\n                .child(\n                    div().w(px(360.0)).h(px(220.0)).child(\n                        BrowserPanel::new(\"scene.browser.unavailable\")\n                            .url(\"https://docs.example.com/guide\")\n                            .on_reload(|_, _| {}),\n                    ),\n                )\n                .child(\n                    div().w(px(360.0)).h(px(220.0)).child(\n                        BrowserPanel::new(\"scene.browser.refused\")\n                            .url(\"https://internal.example.com/admin\")\n                            .state(ViewportState::Refused(\n                                \"The workspace policy does not allow this host.\".into(),\n                            ))\n                            .on_back(|_, _| {})\n                            .on_reload(|_, _| {}),\n                    ),\n                ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "thinking",
      "capture": "cargo run -p xtask -- scenes capture thinking",
      "uses": [
        "ThinkingBlock",
        "Toggle",
        "ToggleGroup"
      ],
      "example": "fn thinking(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .child(ThinkingBlock::new(\n            \"scene.thinking.collapsed\",\n            Reasoning::present(\"The brief asks for two files, so read both before answering.\"),\n        ))\n        // Reasoning that has finished and reasoning still arriving are the\n        // same words in the same place, so the difference has to be shown.\n        .child(\n            ThinkingBlock::new(\n                \"scene.thinking.working\",\n                Reasoning::present(\"Reading the second file before answering.\"),\n            )\n            .thinking(true),\n        )\n        .child(\n            ThinkingBlock::new(\n                \"scene.thinking.open\",\n                Reasoning::present(\n                    \"The brief asks for two files.\\nRead both before answering.\\nThen summarise.\",\n                ),\n            )\n            .expanded(true)\n            .on_toggle(|_, _, _| {}),\n        )\n        // Withheld and absent are two different facts, and neither is the\n        // collapsed block above.\n        .child(ThinkingBlock::new(\n            \"scene.thinking.withheld\",\n            Reasoning::withheld(\"This connection does not hand over reasoning.\"),\n        ))\n        .child(ThinkingBlock::new(\n            \"scene.thinking.absent\",\n            Reasoning::Absent,\n        ))\n        .into_any_element()\n}"
    },
    {
      "name": "json-view",
      "capture": "cargo run -p xtask -- scenes capture json-view",
      "uses": [
        "JsonView",
        "Toggle",
        "ToggleGroup"
      ],
      "example": "fn json_view(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(520.0))\n        .child(\n            JsonView::new(\"scene.json\", scene_document())\n                .expanded_paths(&[\"credentials\", \"request\", \"request/headers\", \"steps\"])\n                .selected(\"request/method\")\n                .on_toggle(|_, _, _, _| {})\n                .on_select(|_, _, _| {}),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "schema-form",
      "capture": "cargo run -p xtask -- scenes capture schema-form",
      "uses": [
        "Combobox",
        "FormField",
        "List",
        "NumberInput",
        "SchemaForm",
        "SegmentedControl",
        "TagInput",
        "TextInput"
      ],
      "example": "fn schema_form(window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneSchemaForm>() {\n        let form = cx.new(|cx| SchemaForm::new(\"scene.schema\", scene_schema(), window, cx));\n        form.update(cx, |form, cx| {\n            // An error the host returned rather than one the form derived:\n            // only the host knows this path is outside the workspace.\n            form.set_error(\"path\", \"That path is outside the workspace.\", cx);\n        });\n        cx.set_global(SceneSchemaForm { form });\n    }\n    let form = cx.global::<SceneSchemaForm>().form.clone();\n    let theme = cx.theme().clone();\n    stack(&theme).w(px(520.0)).child(form).into_any_element()\n}"
    },
    {
      "name": "server-list",
      "capture": "cargo run -p xtask -- scenes capture server-list",
      "uses": [
        "DescriptionList",
        "List",
        "ServerList",
        "Timeline",
        "Toggle",
        "ToggleGroup"
      ],
      "example": "fn server_list(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(560.0))\n        .child(\n            // Only the one with a catalogue is opened. Expanding the two empty\n            // ones as well pushed disconnected, failed, and disabled out of\n            // the captured screen, and a state no image shows is a state no\n            // image guards.\n            ServerList::new(\"scene.servers\")\n                .expanded_ids(&[\"workspace\"])\n                .selected(\"workspace\")\n                .servers([\n                    ServerEntry::new(\"workspace\", \"Workspace tools\")\n                        .detail(\"Running beside this window\")\n                        .state(ServerState::Connected)\n                        .offers([\n                            Offering::tool(\"read\", \"Read a file\")\n                                .summary(\"Returns the contents of one file\")\n                                .qualifier(\"path, max_bytes\"),\n                            Offering::tool(\"write\", \"Write a file\")\n                                .summary(\"Replaces the contents of one file\"),\n                            Offering::skill(\"review\", \"Review a change\")\n                                .summary(\"Reads a diff and reports what it finds\"),\n                            Offering::resource(\"changelog\", \"Changelog\")\n                                .qualifier(\"workspace:/CHANGELOG.md\"),\n                        ]),\n                    ServerEntry::new(\"index\", \"Search index\")\n                        .detail(\"Answered, and the answer was empty\")\n                        .state(ServerState::Connected)\n                        .offers([]),\n                    ServerEntry::new(\"archive\", \"Archive\")\n                        .detail(\"Nobody has asked it anything yet\")\n                        .state(ServerState::Connected),\n                    ServerEntry::new(\"build\", \"Build runner\")\n                        .state(ServerState::Connecting)\n                        .catalog(Catalog::Asking),\n                    ServerEntry::new(\"notes\", \"Notes\").state(ServerState::Disconnected),\n                    ServerEntry::new(\"deploy\", \"Deployment\").state(ServerState::Failed {\n                        reason: \"The connection was refused after three attempts.\".into(),\n                    }),\n                    ServerEntry::new(\"telemetry\", \"Telemetry\").state(ServerState::Disabled {\n                        reason: Some(\"You turned this one off.\".into()),\n                    }),\n                ])\n                .on_select(|_, _, _| {})\n                .on_retry(|_, _, _| {})\n                .on_toggle(|_, _, _, _| {}),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "reading-direction",
      "capture": "cargo run -p xtask -- scenes capture reading-direction",
      "uses": [
        "Accordion",
        "Badge",
        "Breadcrumb",
        "Button",
        "Icon",
        "Tabs",
        "Toggle",
        "ToggleGroup",
        "Tree"
      ],
      "example": "fn reading_direction(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let direction = cx.layout_direction();\n    stack(&theme)\n        .w(px(560.0))\n        .child(\n            Breadcrumb::new(\"scene.rtl.trail\")\n                .crumbs([\n                    Crumb::new(\"workspace\", \"Workspace\"),\n                    Crumb::new(\"runs\", \"Runs\"),\n                    Crumb::new(\"run-4821\", \"Indexing\"),\n                ])\n                .on_select(|_, _, _| {}),\n        )\n        .child(\n            Tabs::new(\"scene.rtl.tabs\")\n                .tabs([\n                    TabItem::new(\"overview\", \"Overview\").icon(Icon::Widget),\n                    TabItem::new(\"runs\", \"Runs\").badge(\"12\"),\n                    TabItem::new(\"logs\", \"Logs\"),\n                ])\n                .selected(\"runs\")\n                .on_select(|_, _, _| {}),\n        )\n        .child(\n            div()\n                .row_reading(direction)\n                .gap(px(theme.space(Space::Md)))\n                .items_start()\n                .child(\n                    div().w(px(240.0)).child(\n                        Tree::new(\"scene.rtl.tree\")\n                            .expanded_ids(&[\"workspace\"])\n                            .selected(\"tokens\")\n                            .nodes([TreeNode::new(\"workspace\", \"workspace\")\n                                .icon(Icon::Folder)\n                                .children([\n                                    TreeNode::new(\"crates\", \"crates\")\n                                        .icon(Icon::Folder)\n                                        .children([\n                                            TreeNode::new(\"kit\", \"gpui-kit\").icon(Icon::Document)\n                                        ]),\n                                    TreeNode::new(\"tokens\", \"tokens\").icon(Icon::Document),\n                                ])])\n                            .on_toggle(|_, _, _, _| {})\n                            .on_select(|_, _, _| {}),\n                    ),\n                )\n                .child(\n                    div().flex_1().child(\n                        Accordion::new(\"scene.rtl.sections\")\n                            .expanded_ids(&[\"network\"])\n                            .on_toggle(|_, _, _, _| {})\n                            .section(\n                                AccordionSection::new(\"network\", \"Network\")\n                                    .description(\"How this machine reaches a host\")\n                                    .body(div().child(\"Requests go out over the system proxy.\")),\n                            )\n                            .section(\n                                AccordionSection::new(\"storage\", \"Storage\")\n                                    .description(\"Where verified results are kept\"),\n                            ),\n                    ),\n                ),\n        )\n        .child(\n            div()\n                .row_reading(direction)\n                .gap(px(theme.space(Space::Md)))\n                // Directional glyphs on the top row, fixed ones below the\n                // names, so a reviewer can see which turned around.\n                .child(IconView::new(Icon::Magnifier).large().muted())\n                .child(IconView::new(Icon::AltArrowRight).large().muted())\n                .child(IconView::new(Icon::Return).large().muted())\n                .child(IconView::new(Icon::Check).large().tone(IconTone::Success))\n                .child(IconView::new(Icon::Settings).large().muted())\n                .child(IconView::new(Icon::AltArrowDown).large().muted())\n                .child(\n                    IconView::named(\"scene.rtl.alone\", Icon::Danger, \"Run failed\")\n                        .large()\n                        .tone(IconTone::Danger),\n                ),\n        )\n        .child(\n            div()\n                .row_reading(direction)\n                .gap(px(theme.space(Space::Sm)))\n                .child(\n                    Button::new(\"scene.rtl.save\")\n                        .label(\"Save\")\n                        .primary()\n                        .icon(Icon::Check)\n                        .on_click(|_, _| {}),\n                )\n                .child(\n                    Button::new(\"scene.rtl.cancel\")\n                        .label(\"Cancel\")\n                        .secondary()\n                        .on_click(|_, _| {}),\n                ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "toggle",
      "capture": "cargo run -p xtask -- scenes capture toggle",
      "uses": [
        "Toggle",
        "ToggleGroup"
      ],
      "example": "fn toggle(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .child(caption(&theme, \"A button that stays in\"))\n        .child(\n            row(&theme)\n                .child(\n                    Toggle::new(\"scene.toggle.bold\")\n                        .label(\"Bold\")\n                        .pressed(true)\n                        .on_press(|_, _, _| {}),\n                )\n                .child(\n                    Toggle::new(\"scene.toggle.italic\")\n                        .label(\"Italic\")\n                        .on_press(|_, _, _| {}),\n                )\n                .child(\n                    Toggle::new(\"scene.toggle.review\")\n                        .label(\"Review mode\")\n                        .secondary()\n                        .pressed(true)\n                        .on_press(|_, _, _| {}),\n                )\n                .child(\n                    Toggle::new(\"scene.toggle.locked\")\n                        .label(\"Locked\")\n                        .disabled(true),\n                ),\n        )\n        .child(caption(&theme, \"Any number in at once\"))\n        .child(\n            ToggleGroup::new(\"scene.toggle-group.format\")\n                .label(\"Formatting\")\n                .selection(ToggleSelection::Any)\n                .items([\n                    ToggleItem::new(\"bold\", \"Bold\"),\n                    ToggleItem::new(\"italic\", \"Italic\"),\n                    ToggleItem::new(\"underline\", \"Underline\").disabled(true),\n                ])\n                .pressed_ids(&[\"bold\", \"italic\"])\n                .on_change(|_, _, _, _| {}),\n        )\n        .child(caption(\n            &theme,\n            \"One or none, which a segmented strip cannot say\",\n        ))\n        .child(\n            ToggleGroup::new(\"scene.toggle-group.density\")\n                .label(\"Density\")\n                .selection(ToggleSelection::AtMostOne)\n                .items([\n                    ToggleItem::new(\"compact\", \"Compact\"),\n                    ToggleItem::new(\"cosy\", \"Cosy\"),\n                    ToggleItem::new(\"roomy\", \"Roomy\"),\n                ])\n                .pressed_ids(&[\"cosy\"])\n                .on_change(|_, _, _, _| {}),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "collapsible",
      "capture": "cargo run -p xtask -- scenes capture collapsible",
      "uses": [
        "Collapsible",
        "Toggle",
        "ToggleGroup"
      ],
      "example": "fn collapsible(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(520.0))\n        .child(\n            Collapsible::new(\"scene.collapsible.open\", \"Advanced\")\n                .description(\"Settings most runs never touch\")\n                .open(true)\n                .body(div().child(\"Requests go out over the system proxy.\"))\n                .on_toggle(|_, _, _| {}),\n        )\n        .child(\n            Collapsible::new(\"scene.collapsible.shut\", \"Diagnostics\")\n                .description(\"Nothing is collected until this is opened\")\n                .body(div().child(\"This body is absent from the tree while it is shut.\"))\n                .on_toggle(|_, _, _| {}),\n        )\n        .child(\n            Collapsible::new(\"scene.collapsible.refused\", \"Managed by policy\")\n                .description(\"This machine cannot change these\")\n                .disabled(true)\n                .body(div().child(\"Set by the administrator.\")),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "hover-card",
      "capture": "cargo run -p xtask -- scenes capture hover-card",
      "uses": [
        "Avatar",
        "Badge",
        "Button",
        "Card",
        "Checkbox",
        "CommandPalette",
        "ContextMenu",
        "CopyButton",
        "DescriptionList",
        "Divider",
        "EmptyState",
        "HoverCard",
        "Icon",
        "List",
        "ListRow",
        "Menu",
        "Menubar",
        "Popover",
        "ProgressBar",
        "Tag",
        "Timeline"
      ],
      "example": "fn hover_card(window: &mut Window, cx: &mut App) -> AnyElement {\n    ensure_ordinary(window, cx);\n    let card = cx.global::<SceneOrdinary>().hover_card.clone();\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(460.0))\n        .h(px(300.0))\n        .child(caption(&theme, \"A preview the pointer can travel into\"))\n        .child(row(&theme).child(\"Reported by\").child(card))\n        .into_any_element()\n}"
    },
    {
      "name": "menubar",
      "capture": "cargo run -p xtask -- scenes capture menubar",
      "uses": [
        "Avatar",
        "Badge",
        "Button",
        "Card",
        "Checkbox",
        "CommandPalette",
        "ContextMenu",
        "CopyButton",
        "DescriptionList",
        "Divider",
        "EmptyState",
        "HoverCard",
        "Icon",
        "List",
        "Menu",
        "Menubar",
        "Popover",
        "ProgressBar",
        "Tag",
        "Timeline"
      ],
      "example": "fn menubar(window: &mut Window, cx: &mut App) -> AnyElement {\n    ensure_ordinary(window, cx);\n    let bar = cx.global::<SceneOrdinary>().menubar.clone();\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(560.0))\n        .h(px(360.0))\n        .child(bar)\n        .into_any_element()\n}"
    },
    {
      "name": "copy-button",
      "capture": "cargo run -p xtask -- scenes capture copy-button",
      "uses": [
        "Avatar",
        "Badge",
        "Button",
        "Card",
        "Checkbox",
        "CommandPalette",
        "ContextMenu",
        "CopyButton",
        "DescriptionList",
        "Divider",
        "EmptyState",
        "GradientSpinner",
        "HoverCard",
        "Icon",
        "List",
        "Menu",
        "Menubar",
        "Popover",
        "ProgressBar",
        "PulseLoader",
        "Skeleton",
        "Tag",
        "Timeline"
      ],
      "example": "fn copy_button(window: &mut Window, cx: &mut App) -> AnyElement {\n    ensure_ordinary(window, cx);\n    let scene = cx.global::<SceneOrdinary>();\n    let idle = scene.copy_idle.clone();\n    let copied = scene.copy.clone();\n    let refused = scene.copy_refused.clone();\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .child(caption(&theme, \"Nobody has pressed it yet\"))\n        .child(idle)\n        .child(caption(&theme, \"The clipboard took it\"))\n        .child(copied)\n        .child(caption(&theme, \"It did not go through, and says so\"))\n        .child(refused)\n        .into_any_element()\n}"
    },
    {
      "name": "aspect-ratio",
      "capture": "cargo run -p xtask -- scenes capture aspect-ratio",
      "uses": [
        "AspectRatio"
      ],
      "example": "fn aspect_ratio(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    let filled = |label: &'static str| {\n        div()\n            .size_full()\n            .flex()\n            .items_center()\n            .justify_center()\n            .bg(theme.colors.hover)\n            .text_color(theme.colors.text_muted)\n            .child(label)\n    };\n    stack(&theme)\n        .child(caption(&theme, \"Width given, height from the ratio\"))\n        .child(\n            div().w(px(320.0)).child(\n                AspectRatio::of(\"scene.aspect.wide\", 16.0, 9.0)\n                    .width_driven()\n                    .child(filled(\"16 by 9\")),\n            ),\n        )\n        .child(caption(&theme, \"Height given, width from the ratio\"))\n        .child(\n            div().h(px(120.0)).child(\n                AspectRatio::new(\"scene.aspect.square\", 1.0)\n                    .height_driven()\n                    .child(filled(\"square\")),\n            ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "document-tabs",
      "capture": "cargo run -p xtask -- scenes capture document-tabs",
      "uses": [
        "Avatar",
        "Badge",
        "Button",
        "Checkbox",
        "CommandPalette",
        "ContextMenu",
        "DescriptionList",
        "Divider",
        "EmptyState",
        "Icon",
        "List",
        "Menu",
        "Popover",
        "ProgressBar",
        "Tabs",
        "Tag",
        "Timeline"
      ],
      "example": "fn document_tabs(window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneDocumentTabs>() {\n        // An icon-only trigger still has to be nameable, so it carries the\n        // strip's own word for what moved into it.\n        let name = cx.strings().text(StringKey::TabMoreTabs);\n        let overflow = cx.new(|cx| {\n            Menu::new(\"scene.document-tabs.overflow\", window, cx)\n                .trigger_icon(Icon::AltArrowDown)\n                .trigger_name(name)\n        });\n        cx.set_global(SceneDocumentTabs { overflow });\n    }\n    let overflow = cx.global::<SceneDocumentTabs>().overflow.clone();\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(620.0))\n        .child(caption(\n            &theme,\n            \"clean, unsaved, saving, save failed — three marks, and silence for the fourth\",\n        ))\n        .child(\n            Tabs::new(\"scene.document-tabs.editor\")\n                .tabs([\n                    TabItem::new(\"readme\", \"README.md\").closable(true),\n                    TabItem::new(\"main\", \"main.rs\").dirty().closable(true),\n                    TabItem::new(\"theme\", \"theme.json\").saving().closable(true),\n                    TabItem::new(\"notes\", \"notes.md\")\n                        .save_failed(\"The workspace is read-only.\")\n                        .closable(true),\n                ])\n                .selected(\"main\")\n                .on_select(|_, _, _| {})\n                .on_close(|_, _, _| {}),\n        )\n        .child(caption(\n            &theme,\n            \"past the declared limit the rest go to a menu, which stays reachable from the keyboard\",\n        ))\n        .child(\n            Tabs::new(\"scene.document-tabs.overflowing\")\n                .tabs([\n                    TabItem::new(\"one\", \"adapter.rs\").closable(true),\n                    TabItem::new(\"two\", \"catalog.rs\").dirty().closable(true),\n                    TabItem::new(\"three\", \"harness.rs\").closable(true),\n                    TabItem::new(\"four\", \"registry.rs\").closable(true),\n                    TabItem::new(\"five\", \"transport.rs\").dirty().closable(true),\n                ])\n                .selected(\"two\")\n                .overflow_after(3)\n                .overflow_menu(overflow)\n                .on_select(|_, _, _| {})\n                .on_close(|_, _, _| {}),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "search-field",
      "capture": "cargo run -p xtask -- scenes capture search-field",
      "uses": [
        "FindReplace",
        "HighlightedText",
        "SearchField",
        "Select",
        "TextArea",
        "TextInput"
      ],
      "example": "fn search_field(window: &mut Window, cx: &mut App) -> AnyElement {\n    ensure_search(window, cx);\n    let field = cx.global::<SceneSearch>().field.clone();\n    let theme = cx.theme().clone();\n\n    // The three counts a field must keep apart. No pointer position produces\n    // them at once, so each is stated.\n    stack(&theme)\n        .w(px(620.0))\n        .child(field)\n        .child(caption(\n            &theme,\n            \"counting is not none, and too many is not a total\",\n        ))\n        .child(\n            row(&theme)\n                .child(hit_count_sample(&theme, \"counting\", HitCount::Counting))\n                .child(hit_count_sample(&theme, \"none\", HitCount::None))\n                .child(hit_count_sample(\n                    &theme,\n                    \"too many\",\n                    HitCount::TooMany { counted: 500 },\n                )),\n        )\n        .child(caption(&theme, \"the current hit is not the other hits\"))\n        .child(\n            div().child(\n                HighlightedText::new(\n                    \"The transport reports what it did; the transport never decides.\",\n                )\n                .id(\"scene.search.line\")\n                .hits([4..13, 39..48])\n                .current(1),\n            ),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "find-replace",
      "capture": "cargo run -p xtask -- scenes capture find-replace",
      "uses": [
        "FindReplace",
        "HighlightedText",
        "SearchField",
        "Select",
        "TextArea",
        "TextInput"
      ],
      "example": "fn find_replace(window: &mut Window, cx: &mut App) -> AnyElement {\n    ensure_search(window, cx);\n    let replace = cx.global::<SceneSearch>().replace.clone();\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(620.0))\n        // Replace all says how many before it does any, so nobody agrees to a\n        // number they were never shown.\n        .child(caption(\n            &theme,\n            \"replace all names its count before it acts\",\n        ))\n        .child(replace)\n        .into_any_element()\n}"
    },
    {
      "name": "notification-center",
      "capture": "cargo run -p xtask -- scenes capture notification-center",
      "uses": [
        "DescriptionList",
        "List",
        "NotificationCenter",
        "Timeline"
      ],
      "example": "fn notification_center(_window: &mut Window, cx: &mut App) -> AnyElement {\n    if !cx.has_global::<SceneNotifications>() {\n        let centre = cx.new(|cx| NotificationCenter::new(\"scene.notifications\", cx));\n        centre.update(cx, |centre, cx| {\n            centre.record(\n                Notification::new(\"scene.notify.exported\", \"Theme exported to disk\")\n                    .tone(Tone::Success)\n                    .at(\"9:41\")\n                    .read(true),\n                cx,\n            );\n            centre.record(\n                Notification::new(\"scene.notify.stale\", \"Refreshing the model catalog failed\")\n                    .tone(Tone::Warning)\n                    .detail(\"The last verified catalog is still shown.\")\n                    .at(\"9:44\"),\n                cx,\n            );\n            centre.record(\n                Notification::new(\n                    \"scene.notify.refused\",\n                    \"The host refused to publish this run\",\n                )\n                .tone(Tone::Warning)\n                .detail(\"Approval is required for this workspace.\")\n                .at(\"9:46\")\n                .action(\"Request approval\", |_, _| {}),\n                cx,\n            );\n        });\n        cx.set_global(SceneNotifications { centre });\n    }\n    let centre = cx.global::<SceneNotifications>().centre.clone();\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(520.0))\n        // The same three reports the toast scene shows, after their toasts\n        // have gone.\n        .child(caption(\n            &theme,\n            \"what the toasts said, still here once they timed out\",\n        ))\n        .child(centre)\n        .into_any_element()\n}"
    },
    {
      "name": "failure-panel",
      "capture": "cargo run -p xtask -- scenes capture failure-panel",
      "uses": [
        "DescriptionList",
        "FailurePanel",
        "List",
        "Timeline"
      ],
      "example": "fn failure_panel(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    // A failure, not a refusal. Retrying a refusal would only be refused\n    // again, so the retry here is offered against something that can succeed\n    // on a second attempt; refusals are shown by ToolCallCard instead.\n    let failed: Result<(), &str> = Err(\"The runs service did not respond.\");\n    stack(&theme)\n        .w(px(560.0))\n        .child(caption(\n            &theme,\n            \"the host's own words, kept on screen; the retry belongs to the host\",\n        ))\n        .children(\n            FailurePanel::from_result(\"scene.failure.query\", &failed).map(|panel| {\n                panel\n                    .title(\"Runs\")\n                    .detail(\"The connection timed out after 30 seconds.\")\n                    .attempts(3)\n                    .on_retry(|_, _| {})\n            }),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "code-view",
      "capture": "cargo run -p xtask -- scenes capture code-view",
      "uses": [
        "CodeView"
      ],
      "example": "fn code_view(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    // Spans are the caller's, in byte offsets into each line. Nothing here\n    // parses anything.\n    let lines = [\n        CodeLine::new(40, \"fn report(&self) -> Outcome {\").spans([\n            CodeSpan {\n                range: 0..2,\n                tone: Tone::Accent,\n            },\n            CodeSpan {\n                range: 3..9,\n                tone: Tone::Success,\n            },\n        ]),\n        CodeLine::new(41, \"    let verified = self.check();\")\n            .spans([CodeSpan {\n                range: 4..7,\n                tone: Tone::Accent,\n            }])\n            .mark(LineMark::Added),\n        CodeLine::new(42, \"    let stale = self.cached();\").mark(LineMark::Removed),\n        CodeLine::new(43, \"    Outcome::from(verified)\").mark(LineMark::Changed),\n        CodeLine::new(\n            44,\n            \"    // this line runs off the edge rather than wrapping, because a column carries meaning in code\",\n        ),\n        CodeLine::new(45, \"}\").mark(LineMark::Error),\n    ];\n    stack(&theme)\n        .w(px(620.0))\n        .child(caption(\n            &theme,\n            \"line numbers are the file's, marks are the host's, colour is the caller's\",\n        ))\n        .child(CodeView::new(\"scene.code.report\", lines).language(\"rust\"))\n        .into_any_element()\n}"
    },
    {
      "name": "upload-list",
      "capture": "cargo run -p xtask -- scenes capture upload-list",
      "uses": [
        "Dropzone",
        "GradientSpinner",
        "List",
        "PulseLoader",
        "Skeleton",
        "UploadList"
      ],
      "example": "fn upload_list(_window: &mut Window, cx: &mut App) -> AnyElement {\n    let theme = cx.theme().clone();\n    stack(&theme)\n        .w(px(560.0))\n        .child(caption(\n            &theme,\n            \"a refusal is not a failure, and only a failure is offered a retry\",\n        ))\n        .child(\n            UploadList::new(\"scene.uploads\")\n                .dropzone(\n                    Dropzone::new(\"scene.uploads.zone\", \"Drop files to attach\")\n                        .hint(\"PDF, PNG, or plain text\")\n                        .on_files(|_, _, _| {}),\n                )\n                .uploads([\n                    Upload::new(\"brief\", \"brief.pdf\").size(\"1.2 MB\").done(),\n                    Upload::new(\"capture\", \"capture.png\")\n                        .size(\"4.8 MB\")\n                        .uploading(0.4),\n                    Upload::new(\"notes\", \"notes.txt\").size(\"12 KB\"),\n                    Upload::new(\"archive\", \"archive.zip\")\n                        .size(\"240 MB\")\n                        .failed(\"The connection dropped.\"),\n                    Upload::new(\"installer\", \"installer.exe\")\n                        .size(\"64 MB\")\n                        .refused(\"This zone does not take programs.\"),\n                ])\n                .on_retry(|_, _, _| {})\n                .on_cancel(|_, _, _| {})\n                .on_remove(|_, _, _| {}),\n        )\n        .into_any_element()\n}"
    },
    {
      "name": "calendar",
      "capture": "cargo run -p xtask -- scenes capture calendar",
      "uses": [
        "Button",
        "Calendar",
        "DateInput",
        "Overlay",
        "RangePicker",
        "TimeInput"
      ],
      "example": "    pub(super) fn calendar(window: &mut Window, cx: &mut App) -> AnyElement {\n        ensure(window, cx);\n        let theme = cx.theme().clone();\n        let dates = cx.global::<SceneDates>();\n        let (month, unknown) = (dates.month.clone(), dates.unknown.clone());\n        stack(&theme)\n            .child(\n                row(&theme)\n                    .items_start()\n                    .gap(px(theme.space(Space::Lg)))\n                    .child(month)\n                    .child(unknown),\n            )\n            .child(\n                div()\n                    .max_w(px(560.0))\n                    .text_color(theme.colors.text_muted)\n                    .child(\n                        \"Every weekday name, month name, and blocked reason above came from the \\\n                         host. The calendar on the right has no today, so it draws no ring and \\\n                         guesses no month.\",\n                    ),\n            )\n            .into_any_element()\n    }"
    },
    {
      "name": "date-range",
      "capture": "cargo run -p xtask -- scenes capture date-range",
      "uses": [
        "Button",
        "Calendar",
        "DateInput",
        "Overlay",
        "RangePicker",
        "TimeInput"
      ],
      "example": "    pub(super) fn date_range(window: &mut Window, cx: &mut App) -> AnyElement {\n        ensure(window, cx);\n        let theme = cx.theme().clone();\n        let dates = cx.global::<SceneDates>();\n        let (incomplete, preview, blocked) = (\n            dates.incomplete.clone(),\n            dates.preview.clone(),\n            dates.blocked.clone(),\n        );\n        stack(&theme)\n            .child(\n                row(&theme)\n                    .items_start()\n                    .gap(px(theme.space(Space::Lg)))\n                    .child(incomplete)\n                    .child(preview)\n                    .child(blocked),\n            )\n            .into_any_element()\n    }"
    },
    {
      "name": "date-time",
      "capture": "cargo run -p xtask -- scenes capture date-time",
      "uses": [
        "Button",
        "Calendar",
        "DateInput",
        "Overlay",
        "RangePicker",
        "TimeInput"
      ],
      "example": "    pub(super) fn date_time(window: &mut Window, cx: &mut App) -> AnyElement {\n        ensure(window, cx);\n        let theme = cx.theme().clone();\n        let dates = cx.global::<SceneDates>();\n        let (field, refused, clock, twelve) = (\n            dates.field.clone(),\n            dates.refused.clone(),\n            dates.clock.clone(),\n            dates.twelve.clone(),\n        );\n        stack(&theme)\n            .child(div().w(px(280.0)).child(field))\n            .child(div().w(px(280.0)).child(refused))\n            .child(\n                row(&theme)\n                    .gap(px(theme.space(Space::Lg)))\n                    .child(clock)\n                    .child(twelve),\n            )\n            .child(\n                div()\n                    .max_w(px(560.0))\n                    .text_color(theme.colors.text_muted)\n                    .child(\n                        \"What the field could not read is still in it, and the refusal is the \\\n                         adapter's own sentence.\",\n                    ),\n            )\n            .into_any_element()\n    }"
    }
  ]
}
